unified virtual addressing (UVA) vs. unified memory: perceived difference

Is it fair to say that before unified (managed) memory came into play, UVA allowed the GPU to tap into the memory of the host, but not vice-versa?

As early as CUDA 2.0 there was support for zero-copy access on the device of host memory allocated via cudaHostAlloc. That became even simpler with CUDA 4.0, when there was no need for pointer demangling via cudaHostGetDevicePointer.

Yet accessing device memory directly on the host became available only in CUDA 6.0, with the introduction of Unified Memory.

Is my understanding correct?

Your description of UVA and zero copy is correct.

The host never accesses device memory directly (except on Power9 architecture systems, and I’m ignoring Jetson for this discussion as the backing store for all memory types in Jetson is unified).

Managed memory involves movement or migration of the data. When host code is accessing a managed allocation, that allocation is absolutely located in host memory at that moment.

Thanks, Robert - much appreciated…