Как определить, находится ли буфер на GPU или CPU? - PullRequest
2 голосов
/ 17 марта 2011

В C / CUDA, если мне передают указатель, как я могу программно определить, указывает ли указатель на память на CPU или GPU?Есть ли для этого функция CUDA?

1 Ответ

3 голосов
/ 17 марта 2011

Я не знаю, как обстоят дела с CUDA 4.0, но в 3.2 вы просто не можете вычесть, если это указатель CPU или GPU, основанный исключительно на адресе, хранящемся в нем.

Обходным путем было бы создать класс CudaPtr<T>, спрятать там указатель и предоставить базовые функции (например, memset, memload, memstore, memalloc и т. Д., Которые, в свою очередь, использовали бы CUDA). прочее).

Тогда, если у вас есть функция, которая может работать на хосте или на устройстве, вы можете легко перегрузить ее для T* и CudaPtr<T>.


Обновление: Со времени Unified Memory Addressing и нового инструментария CUDA все немного изменилось. Кажется, теперь вы можете сделать такое различие во время выполнения через cuPointerGetAttribute

...