Just making sure I understand abstraction vs. implementation.
The abstraction is that there is a single shared address space where everything can be accessed correctly (the most recently updated value) and quickly (is this part of the abstraction?).
The implementation is separate storages talking to each other to make sure that no access will be incorrect.
The abstraction is a shared address space, but I'm not sure if quickly is part of the abstraction. We get the advantage of non-uniform memory though caches as an added bonus, the main requirement is consistency.