M. Тиббиты в основном ответили на все, что вам нужно знать о банковских конфликтах и не слитых транзакциях памяти.
На вопрос о том, на какие важные поля / вещи нужно обратить внимание (при использовании профилировщика Nsight), которые могут привести к замедлению работы моей программы:
- Используйте приложение или системную трассировку, чтобы определить, привязаны ли вы к процессору, памяти или ядру. Это можно сделать, посмотрев на временную шкалу.
а. Процессор привязан - вы увидите большие области, где не происходит копирование ядра или памяти, но потоки вашего приложения (Thread State) имеют зеленый цвет
б. Ограничение памяти - выполнение ядер заблокировано при передаче памяти на устройство или с него. Вы можете увидеть это, посмотрев на ряд памяти. Если вы проводите много времени в копиях памяти, вам следует рассмотреть возможность использования потоков CUDA для конвейеризации вашего приложения. Это может позволить вам перекрывать передачу памяти и ядра. Перед изменением вашего кода вы должны сравнить продолжительность передачи и ядра и убедиться, что вы получите прирост производительности.
с. Связывание с ядром - если большая часть времени приложения тратится на ожидание завершения работы ядра, вам следует переключиться на действие «Профиль», перезапустить приложение и начать сбор аппаратных счетчиков, чтобы увидеть, как вы можете сделать фактическое время выполнения вашего ядра. Быстрее.