Дебаг CUDA-ядра

Разрабатываю небольшую программу на CUDA, где-то в ядре ошибка (в процессе выполнения cudaGetLastError возвращает ошибку и говорит что что-то не так в ядре). Можно ли как-то отладить ядро или хотя бы получить более подробную информацию (мол ошибка в такой-то строке или ошибка при обращении к памяти и т.п.)?

Forums: 

Если у вас относительно

Если у вас относительно свежая карта (G92 и выше, если не путаю), то Parallel NSight вас спасет. Хотя если ошибка возникает не во всех тредах-блоках, найти ее может быть трудно.

еще printf иногда

еще printf иногда помогает, если есть возможность запускать код на ферми карте

parallel nsight не осилил

parallel nsight не осилил установить: стояла VS 2010, оно не завелось, установил VS 2008 - но оно по прежнему не завелось

А, ну да, нужно или две

А, ну да, нужно или две машины или две видеокарты. Увы.
Оно блокирует ту карту, на которой отлаживаемое приложение, отчего на подключенный к ней дисплей ничего толком нельзя вывести.
Т.е. можно какую-нибудь 9600GT купить и поставить второй.

проблема не в наличии второй

проблема не в наличии второй идео карты (она есть), проблема в установщике, который не хочет ставить программу, хотя все необходимые условия выполнены

У меня такого не было, все

У меня такого не было, все установилось.

Некоторые версии инсталляторов ведут себя странно, если в TMP нету место или если (сюрприз) слишком маленький pagefile.sys Я держу два гигабайта свапа (ненужного мне) именно ради таких инсталляторов.

проблема именно в том, что

проблема именно в том, что раньше у меня стояла VS 2010, а NSight с ней конфликтует. Специально ради NSight я снес 2010 студию и поставил 2008, но видимо какие-то файлы остались. Переустанавливать весь Windows я не хочу.

Вы, наверное, какую-то старую

Вы, наверное, какую-то старую версию смотрели.

Nsight 1.5.1 (январский) умеет интегрироваться и с VS 2008 и с VS2010. И на мою машину, где этих студий установлено три штуки (третья - VS2005), потому что мне надо совместимость со всеми ними проверять, установился без проблем.

В тех случаях когда нужно

В тех случаях когда нужно локализовать ошибку и нет внятного отладчика/его долго настраивать/и т.п. можно использовать BruteForce метод "разделяй и властвуй", который даже зачастую бывает более продуктивнее чем использование отладчика.
Во-первых, можно выбрасывать из кода ядра разные куски(само собой алгоритм будет работать не правильно), и следить, когда ошибка исчезнет - тем самым можно локализовать проблемный участок кода. Можно вообще ядро сделать пустым, постепенно добавляя код, и следить за моментом появления ошибки.
Если проблемное место в коде уже локализовано, и необходимо считать переменные с одного/нескольких/всех потоков перед проблемным участком, то можно добавить дополнительные выходные параметры в ядро и соответственно "выключить" проблемный участок кода, перед запуском.
Если же ошибка проявляется не во всех потоках, то можно также методом "разделяй и властвуй" локализовать эти потоки: выключить половину потоков(if'ом в ядре), если ошибка осталась, половину от этой половины и т.п. Так как программа у вас не crash'ится, можно даже автоматизировать этот процесс(только соответственно нужно оценить время необходимое при ручном методе, и время необходимое на написание автоматического кода..).

Можно играться с размером входных данных и т.п. Понятное дело, что могут возникнуть всякие сюрпризы и не всё пойдёт гладко, но тем не менее поле для фантазии при отладке всегда огромно.

Разумеется при таких изменениях, вместо первоначальной ошибки могут проявится другие ошибки, но тем лучше - необходимо ведь убрать все ошибки.. (соответственно когда новые ошибки исправятся, можно вернуться к старой).

спасибо за столь подробный

спасибо за столь подробный комментарий, но я все же интересуюсь именно отладчиком
P.s. свою проблему уже давно решил подобным способом, но все же хочется иметь некоторое средство на будущее