2013-12-25 2 views
0

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

+0

Если вы хотите выполнить некоторую математику на хосте, то да, вам понадобятся соответствующие данные на хосте. –

+0

Я хочу изменить его один раз, а затем выполнить другое параллельное вычисление на устройстве. Мне не нравится идея cudaMemcpy'ing формы устройства для размещения и наоборот много раз. –

+1

Я понимаю это. –

ответ

2

Если у вас есть только одна переменная или небольшой объем данных, вы можете рассмотреть возможность использования нулевых копий данных (переменных) на хосте в закрепленной памяти, которые также доступны на устройстве.

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

Так что это действительно не устраняет копии, как вы можете видеть. Но это может представлять интерес для вашего приложения, если речь идет только о небольшом количестве данных.

simple Zero Copy Образец CUDA описывает метод.

Мой ответ here также дает простой пример использования нулевой копии для одной переменной как на устройстве, так и на хосте.

Смежные вопросы