Search code examples
cudamallocgpumanaged

is it possible to force cudaMallocManaged allocate on a specific gpu id (e.g. via cudaSetDevice)


I want to use cudaMallocManaged, but is it possible force it allocate memory on a specific gpu id (e.g. via cudaSetDevice) on a multiple GPU system?

The reason is that I need allocate several arrays on the GPU, and I know which set of these arrays need to work together, so I want to manually make sure they are on the same GPU.

I searched CUDA documents, but didn't find any info related to this. Can someone help? Thanks!


Solution

  • No you can't do this directly via cudaMallocManaged. The idea behind managed memory is that the allocation migrates to whatever processor it is needed on.

    If you want to manually make sure a managed allocation is "present" on (migrated to) a particular GPU, you would typically use cudaMemPrefetchAsync. Some examples are here and here. This is generally recommended for good performance if you know which GPU the data will be needed on, rather than using "on-demand" migration.

    Some blogs on managed memory/unified memory usage are here and here, and some recorded training is available here, session 6.