4

NVIDIA Nsight Visual Studio Edition, похоже, не может одновременно отлаживать процессор (хост-код) и графический процессор (cuda-код). С помощью Nsight Eclipse Edition (или cuda-gdb) это довольно просто, например, вы можете «входить» в ядро ​​CUDA из выполнения хоста. Как сделать то же самое с Visual Studio?Nvidia visual studio Nsight CPU и отладка GPU

ответ

8

От Nsight manual

Это говорит

Используйте отдельный экземпляр Visual Studio для отладки принимающей части целевого применения в. Если вы хотите отладить часть хоста вашего приложения CUDA во время присоединения отладчика CUDA, вы должны прикрепить с помощью другой экземпляр Visual Studio. Прикрепление того же экземпляра Visual Studio для отладки как части хоста, так и части устройства целевое приложение приведет к конфликтующим отладчикам. Результат заключается в том, что целевое приложение и отладчик CUDA зависают при , заблокированных операциями собственного отладчика.

Так отлаживать приложения CUDA вот шаги:

  1. Open Visual Studio (VS экземпляр # 1) и установить точку останова в ядре CUDA и нажмите кнопку "Start Debugging CUDA." Это запустит экземпляр приложения и остановится там, где u задает точку останова.
  2. Откройте еще один экземпляр Visual Studio (экземпляр VS # 2) (необходимо по какой-то причине запустить как admin) и присоединитесь к процессу, который вы начали на этапе 1.
  3. В экземпляре VS # 2 найдите файл, который вы хотите выполнить отладку вашего процессора и установить точку останова.
  4. В экземпляре VS # 1 продолжить выполнение (должно выпадать из текущего ядра CUDA). На этом этапе должна быть удалена точка останова CPU, установленная в экземпляре VS # 2.

Дополнительный кредит: Отладка приложения CUDA удаленно. Шаги:

  1. На целевой машине заправляют файл msvsmon.exe (удаленный отладчик) в качестве администратора. Это можно найти на C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Удаленный отладчик \ x64.
  2. На главной машине (той, из которой вы хотите управлять отладкой) откройте VS и убедитесь, что отладчик Nsight указан на удаленном компьютере (Nsight User Properties> Launch> Connection Name). ПРИМЕЧАНИЕ. Монитор Nvidia Nsight должен работать на целевой машине, чтобы это работало.
  3. Выполните шаги 1 и 2 из предыдущего раздела (не удаленная отладка). На шаге 2 вам нужно будет указать удаленный компьютер для отладки процессора (Debug> Attach to Process> Qualifier должен быть установлен на имя целевого компьютера или IP-адрес).
  4. Прилагаются также не удаленные этапы отладки 3 и 4.

ПРИМЕЧАНИЕ: Это выглядит так, как если отладка удаленного CPU VS не столь способны, как его локальной отладки процессора.Например, когда вы переходите на переменные процессора, значения не отображаются так, как вы ожидали бы при локальной отладке.

STILL UNANSWERED: Можно ли отладить код хоста перед тем, как нажать точку останова CUDA? Похоже на большое ограничение, что вы можете только отлаживать код хоста после вашего первого ядра CUDA. Что делать, если вы хотите отладить код хоста перед первым ядром CUDA?

+0

В качестве обходного пути для «STILL UNANSWERED» вы можете сделать вызов отлаживаемого фиктивного ядра в качестве первого оператора в своем главном, поставить точку останова в ядре и затем прикрепить # 2 к запущенному процессу. Затем вы можете освободить точку останова в # 1, чтобы попасть в точку останова в любой строке кода ЦП в # 2. С ifdef на некотором флагом отладки вы можете легко отфильтровать этот фиктивный вызов ядра для версий выпуска или того, что вы предпочитаете в соответствии с контекстом. – Timmos

Смежные вопросы