2015-08-30 1 views
2

Точки останова в файлах .cu в Visual Studio 2013 отлично работают при использовании «Локального отладчика Windows». Но при использовании nsight «Start CUDA debugging» контрольные точки игнорируются. Как это возможно? На сайте nsight они заявляют: «Используйте знакомые окна Visual Studio Locals, Watches, Memory and Breakpoints». Значит, можно использовать обычные точки останова?Пренебрегаемые контрольные точки при использовании nsight «Отладка пуска CUDA»

Edit:

  • Enable CUDA Memory Checker: On/Off нет никакой разницы
  • Generate GPU Debug Information: Нет/Да (-g0) нет никакой разницы
  • Start CUDA/Graphics debugging: контрольные точки пренебрегали
+0

Написание заявления и добавление вопросительного знака в конце его не вызывает у него вопроса? – talonmies

+0

Помогает ли http://stackoverflow.com/q/10827995/681865 (т. Е. Вы строите для отладки?) – talonmies

+0

@talonmies idd. протестировали все эти ответы, но они не имеют никакого значения. – Matthias

ответ

4
  • «Начать отладку CUDA» устройство отладки (ядро) код, т. е. материал, составленный с помощью nvcc ->bunch of preprocessing ->cudafe++ ->cicc toolchain path.
  • "Local для Windows Debugger" отлаживает код хоста, а материал, собранный с обеих nvcc ->bunch of preprocessing ->cl или просто cl.

Это не имеет значения, в каком файле, .cpp, .cu или .h ваш код. Единственное, что имеет значение, это то, что ваш код аннотируется как __device__ или __global__ или нет.

Начиная с CUDA 7.5 RC (Aug 2015), в Windows вы можете отлаживать только один из них за раз. В Linux и OSX вы можете отлаживать оба одновременно с cuda-gdb.

Смотрите также: NVIDIA CUDA Compiler Driver NVCC

Другие вещи, которые могут привести к разочарованию во время отладки на Windows:

  • Вы настраиваете свойства для одной конфигурации пары/платформы, но работает еще один
  • что-то пошло не так с файлами .pdb для модулей хоста и устройства. Проверьте nvcc, cl, nvlink и link вариантов. Например, информация об отладке хоста и устройства может быть записана в один и тот же файл, перезаписывая друг друга.
  • Агрессивная оптимизация: встраивание, оптимизация локалей и т. Д. Код выпуска почти невозможно отладить для человека. Отладчик можно одурачить.
  • Наличие неопределенного поведения и/или нарушений доступа к памяти. Они могут легко разбивать отладчик, приводящий к неожиданным результатам, таким как точки останова, которые не попадают.
  • Вы забыли проверить ошибки для одного из вызовов CUDA API или ядра, была ошибка, а контекст CUDA был мертв, а ядра больше не запускались. Но вы этого еще не знаете. Ваш хост-код продолжает работать, и вы ожидаете, что точки останова ядра будут удалены, но этого никогда не произойдет, потому что ядро ​​просто не будет вызвано.
  • Все описанные выше ошибки могут быть в библиотеке. Не ожидайте, что библиотеки будут без ошибок.
  • У компиляторов, отладчиков и драйверов есть ошибки. Но вы всегда должны сначала предположить, что с вашим кодом что-то не так, и если ничего не помогает, расследуйте и отправляйте отчет об ошибке поставщику.
+0

Спасибо за другие ценные советы – Matthias

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