кусок кода, который принимает хорошо за 1 минуту в командной строке было сделано в считанные секунды в NVIDIA Визуальный Profiler (запущен же EXE-файл). Так почему же возникает естественный вопрос? Что-то не так с командной строкой, или Visual Profiler делает что-то другое и не выполняет все как в командной строке?Почему код CUDA работает быстрее в NVIDIA Visual Profiler?
Я использую CUBLAS, Thrust и cuRAND.
Кстати, заметное замедление в скомпилированном коде на моей машине совсем недавно, даже старый код, который ранее выполнялся быстро, поэтому я становлюсь подозрительным.
Update:
- Я проверил, что рассчитывается выход в командной строке и визуального Profiler является идентичны - то есть все необходимые код был запущен в обоих случаях.
- GPU-shark указал, что мое состояние было без изменений у P0, когда я переключился с командной строки на Visual Profiler.
- Однако использование ГПУ было сообщено на 0,0% при запуске с Визуальный Profiler, но пошел так высоко, как 98% при бежать командной строки.
- Кроме того, farотсутствует память используется с визуальным профилиром. При запуске командной строки диспетчер задач указывает использование 650-700 МБ памяти (шипы при первом вызове
cudaFree(0)
). В Visual Profiler этот показатель уменьшается до ~ 100 МБ.
Проводка фрагмента кода может помочь. –
Ну, кусок кода, о котором идет речь, на самом деле представляет собой проект, охватывающий 15 взаимозависимых файлов, поэтому, вероятно, выходит за рамки этого вопроса. Я просто задавался вопросом, встречался ли кто-нибудь еще с феноменом Visual Profiler и объяснил это. – mchen
Профилировщики CUDA (Nsight VSE, Visual Profiler, nvprof и профилировщик командной строки CUDA) помещают GPU в самое высокое P-состояние, чтобы убедиться, что результаты согласованы. Это не должно превышать нескольких процентов. Более вероятная причина заключается в том, что приложение не работает при запуске профилировщика. Пожалуйста, подтвердите, что ваше приложение работает до завершения и ошибок не возникает? –