Профиль отладки или выпуска кода cuda?

Я профилировал приложение с nvprof and nvvp (5.5) для того, чтобы оптимизировать его. Тем не менее, я получаю совершенно разные результаты для некоторых показателей / событий, таких как inst_replay_overhead, ipc или же branch_efficiencyи т.д., когда я профилирую отладку (-G) и выпустить версию кода.

поэтому мой вопрос: какую версию я должен профиль? Релиз или отладочная версия? Или выбор зависит от того, что я ищу?

Я нашел CUDA - Visual Profiler и расход потока управления, где указано, что отладка (-G) версия необходима для правильного измерения метрики расходящихся ветвей, но я не уверен насчет других метрик.

1 ответ

Решение

Профилирование обычно подразумевает, что вы заботитесь о производительности.

Если вы заботитесь о производительности, вам следует профилировать выпускную версию кода CUDA.

Отладочная версия (-G) будет генерировать другой код, который обычно работает медленнее. По моему мнению, по этой причине нет смысла проводить анализ производительности (включая измерение времени выполнения, тестирование производительности, профилирование и т. Д.) На отладочной версии кода CUDA.

Ключ -G отключает большинство оптимизаций, которые обычно может выполнять компилятор кода устройства, что оказывает большое влияние на генерацию кода, а также часто оказывает большое влияние на производительность. Причиной отключения оптимизации является облегчение отладки кода, что является основной причиной для параметра -G и отладочной версии вашего кода.

Другие вопросы по тегам