Omp target data use_device_ptr vs use_device_addr


I have a question when translating OpenACC’s acc host_data use_device(arr), where arr is a Fortran allocatable array, to OpenMP. What’s the difference between omp target data use_device_ptr and use_device_addr? I’ve read the specification but don’t get it. Any advice would be appreciated!


Hi Victor,

I had to ask this too a few weeks ago since the description in the standard isn’t obvious.

use_device_ptr has been in the OpenMP standard longer. It is designed to support systems without a Unified Virtual Address Space. In principle, the pointer returned from use_device_ptr could be a host handle. The use_device_addr is a newer feature that assumes that the system has a Unified Virtual Address Space. For portability there is a requires unified_address to ensure that use_device_addr can safely be used.

However given the compiler can implicitly handle unified memory, the NVHPC compilers treat them the same.


Hi Mat,

Thanks for your explanation! Good to know that they are treated equally by NVHPC.