Accelerator Error: Unified Memory not supported for OpenMP

Hello,

I am currently using OpenMP for GPU offloading in one of my projects. While I have the code working with explicitly transferred memory (using the map clause), I would like to utilize unified memory instead.

Issue

When I try to run my compiled program, I get the following error:

Accelerator Fatal Error: The application was compiled with -gpu=unified, but this platform does not support Unified Memory.
Please consult the NVIDIA HPC Compilers User's Guide for details.

Details

  • Compiler: nvc
  • Compilation Flags: -mp=gpu -gpu=unified
  • CUDA Version: 12.4
  • HPC SDK Version: 24.3 (Documentation on unified memory in 24.3)
  • GPU: NVIDIA GeForce RTX 3060
  • Operating System: Ubuntu 20.04.6 LTS
  • NVIDIA Driver Version: 550.54.14

Request

If there are any other details I can provide to clarify my question, please let me know.

Any direction or advice on how to solve this problem would be greatly appreciated.

Thank you!

Hi smckeveym,

Full Unified Memory (i.e. “-gpu=unified”) requires a newer OS (with Linux kernel: 6.1.24+, 6.2.11+, or 6.3+) that supports and has enabled Heterogenous Memory Management (HMM). I suspect you’re system doesn’t have it available. You can find full details on HMM including the system requirements in the article I posted below.

Though without HMM, you can still take advantage of CUDA Unified Memory via the “-gpu=managed” flag. The primary difference with with the older “managed” UM and the newer “unified” is that only heap (i.e. allocated) memory is managed. With “unified” all CPU memory, including stack and static, is accessible to the GPU as well as direct access between the two.

Hope this helps,
Mat