CUDA с использованием массива хоста в массив устройства - PullRequest
1 голос
/ 20 марта 2012

Мне нужна помощь в следующем. У меня есть массив кода хоста, функция ядра и функция device , вызываемая из ядра. Я хочу, чтобы только функция устройства использовала массив хостов. Могу ли я сделать свой хост-массив "видимым" из функции устройства каким-либо образом напрямую или мне сначала нужно скопировать его в ядро?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Вы можете посмотреть на этот ответ:

По умолчанию закрепленная память по сравнению с памятью нулевого копирования

или поиск:

Отображаемая память и Память хоста с блокировкой страницы

http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Programming_Guide.pdf#page=40

0 голосов
/ 21 марта 2012

Ядро CUDA - это код, выполняемый на GPU (устройстве). Графический процессор может получить доступ только к памяти, расположенной на графической карте, но не к основной памяти процессора. CPU может копировать данные между основной памятью и памятью устройства. Обычный сценарий:

  1. CPU: подготовить входные данные в основной памяти
  2. CPU: скопировать входные данные на устройство
  3. GPU: запустить ядро ​​
  4. CPU: копирование вывода с устройства в основную память

Я рекомендую вам прочитать официальную документацию . Если вы предпочитаете слайды, вы можете начать с вводной презентации .

0 голосов
/ 21 марта 2012

Я не верю, что функция устройства может напрямую обращаться к памяти хоста. Даже если бы вы могли, задержки и пропускная способность были бы жестокими и, вероятно, не стоит.

Если вы имеете в виду, что вы хотите, чтобы функция устройства выполнялась ЦП на стороне хоста, то это возможно. Вы можете добавить префикс __host__ __device__ к определению функции, и эта функция будет скомпилирована как для хоста, так и для устройства, чтобы вы могли использовать ее непосредственно на CPU. Единственный улов заключается в том, что функция не может использовать какие-либо функции CUDA, недоступные в ЦП (например, совместно используемую память и т. Д.).

...