АЭС: перекрывающиеся вычисления и передача данных
CUDA позволяет перекрывать вычисления и передачу данных, используя асинхронные функции и потоки cuMemcpy. Но возможно ли это с NPP(Performance Primitives)?
Немного предыстории. Я пытаюсь использовать графический процессор, используя функции изменения размера изображения NPP (в нашем случае это nppiResize_8u_C3R). Я использую закрепленную память и успешно перенести данные в графический процессор, используя cuMemcpy2DAsync_v2 и для каждого потока потока. Проблема в том, что nppiResize_8u_C3R и все другие вычислительные функции не принимают потоки.
Когда я запускаю Nvidia Visual Profiler, я вижу следующее:
- Закрепленная память позволяет передавать данные быстрее - ~6,524 ГБ / с.
- Процент времени, когда memcpy выполняется параллельно с вычислениями, составляет 0%.
1 ответ
Проблема [sic] заключается в том, что nppiResize_8u_C3R и все другие вычислительные функции не принимают потоки.
АЭС по сути является API без сохранения состояния. Однако, чтобы использовать потоки с АЭС, вы используете nppSetStream
установить поток по умолчанию для последующих операций. На странице 2 документации об использовании NPP с потоками указано несколько предостережений и рекомендуемые методы синхронизации при переключении потоков.