Я новичок в CUDA. Я выделил память на устройстве для переменной float. Затем я добавил много вычисляемых значений в функцию ядра. Теперь я хочу сделать только одну математическую операцию для этой переменной. Должен ли я скопировать его обратно на хост, чтобы сделать это?
Если у вас есть только одна переменная или небольшой объем данных, вы можете рассмотреть возможность использования нулевых копий данных (переменных) на хосте в закрепленной памяти, которые также доступны на устройстве.
Когда устройство обращается к этим переменным, транзакции будут генерироваться через PCIE для доставки значений на устройстве, а затем для обновления значений на хосте.
Таким образом, на самом деле это не устраняет копии, как вы можете видеть. Но это может представлять интерес для вашего приложения, если речь идет только о небольшом количестве данных.
Простой пример CUDA с нулевой копией описывает метод.
Мой ответ здесь также дает простой пример использования нулевой копии памяти для одной переменной как на устройстве, так и на хосте.