Распределение памяти CUDA доступно для хоста и устройства - PullRequest
0 голосов
/ 16 ноября 2009

Я пытаюсь найти способ выделить блок памяти, доступный как хосту (CPU), так и устройству (GPU). Кроме использования функции cudaHostAlloc () для выделения памяти с блокировкой страницы, доступной как для процессора, так и для графического процессора, есть ли другие способы выделения таких блоков памяти? Заранее спасибо за ваши комментарии.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Единственный способ для хоста и устройства «разделить» память - использовать более новую функцию нулевого копирования. Это доступно на картах архитектуры GT200 и некоторых новых картах для ноутбуков. Эта память должна быть, как вы заметили, выделена с помощью cudaHostAlloc, чтобы она была заблокирована. Альтернативы нет, и даже эта функция недоступна на старых картах с поддержкой CUDA.

Если вы просто ищете простой (возможно, неэффективный) способ управления передачей данных с хоста на устройство, посмотрите библиотеку Thrust. У него есть векторный класс, который позволяет вам выделять память на устройстве, но читать и записывать в нее из кода хоста, как если бы он был на хосте.

Другая альтернатива - написать свою собственную обертку, которая управляет переводами для вас.

1 голос
/ 21 ноября 2009

Невозможно выделить буфер, доступный как для GPU, так и для CPU, если вы не используете cudaHostAlloc(). Это связано с тем, что вы должны не только распределять закрепленную память на ЦП (что вы можете делать за пределами CUDA), но также вы должны отображать память в виртуальную память графического процессора (или, точнее, контекста).

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

0 голосов
/ 16 ноября 2009

Нет "Автоматического способа" загрузки буферов в память графического процессора.

...