Cuda profiler показывает странные промежутки?
Я пытаюсь выяснить, что означает результат профиля, прежде чем приступить к оптимизации. Я очень новичок в CUDA и профилировании в целом, и я смущен результатом.
В частности, я хочу знать, что происходит во время, казалось бы, незанятых кусков вычислений. Когда я смотрю сверху вниз на процессор и графический процессор, кажется, что ничего не происходит во время больших частей кода. Они похожи на колонны, в которых ничего нет Thread1
и ничего в GeForce
, Это нормально? Что тут происходит?
Прогон был выполнен многоядерной машиной без нагрузки с nvprof. Код GPU был скомпилирован с -arch=sm_20 -m32 -g -G
для CUDA 5.
1 ответ
Ошибка здесь была для профилирования кода в режиме отладки (-G
флаг компилятора: "Генерировать отладочную информацию для кода устройства"). Поведение программы глубоко изменено, и это не должно использоваться для профилирования и оптимизации своего кода.
Еще одна вещь: трудно найти исчерпывающую документацию по режиму отладки nvcc. nvcc, вероятно, сбрасывает регистры / разделяемую память в глобальную память для упрощения доступа к хосту и отладки, что, в свою очередь, может скрывать такие проблемы, как состояние гонки в разделяемой памяти (см. обсуждение здесь: /questions/33944333/kod-cuda-daet-nepravilnyij-rezultat-v-rezhime-reliza/33944337#33944337). Таким образом, такие программы, как cuda-memcheck --tool racecheck
следует использовать и в режиме релиза.