Профиль отладки или выпуска кода cuda?
Я профилировал приложение с nvprof and nvvp (5.5)
для того, чтобы оптимизировать его. Тем не менее, я получаю совершенно разные результаты для некоторых показателей / событий, таких как inst_replay_overhead
, ipc
или же branch_efficiency
и т.д., когда я профилирую отладку (-G
) и выпустить версию кода.
поэтому мой вопрос: какую версию я должен профиль? Релиз или отладочная версия? Или выбор зависит от того, что я ищу?
Я нашел CUDA - Visual Profiler и расход потока управления, где указано, что отладка (-G
) версия необходима для правильного измерения метрики расходящихся ветвей, но я не уверен насчет других метрик.
1 ответ
Профилирование обычно подразумевает, что вы заботитесь о производительности.
Если вы заботитесь о производительности, вам следует профилировать выпускную версию кода CUDA.
Отладочная версия (-G) будет генерировать другой код, который обычно работает медленнее. По моему мнению, по этой причине нет смысла проводить анализ производительности (включая измерение времени выполнения, тестирование производительности, профилирование и т. Д.) На отладочной версии кода CUDA.
Ключ -G отключает большинство оптимизаций, которые обычно может выполнять компилятор кода устройства, что оказывает большое влияние на генерацию кода, а также часто оказывает большое влияние на производительность. Причиной отключения оптимизации является облегчение отладки кода, что является основной причиной для параметра -G и отладочной версии вашего кода.