#visual-studio-2010 #debugging #cuda #thrust
#visual-studio-2010 #cuda #thrust #nsight
Вопрос:
Я использую Visual studio 2010, parallel nsight 2.2 и cuda 4.2 для обучения. Моя система — Windows 8 pro x64. Я открыл проект radix sort, который включен cuda computing SDK в VS, и скомпилировал его без ошибок. Код сортировки использует библиотеку thrust:
if(keysOnly)
thrust::sort(d_keys.begin(), d_keys.end());
else
thrust::sort_by_key(d_keys.begin(), d_keys.end(), d_values.begin());
Я хочу знать, как thrust отправляет функцию сортировки в ядра cuda, поэтому я попытался добавить точки останова перед строками выше и скомпилировал проект в режиме отладки. Но когда я использую parallel nsight для отладки cuda, всегда возникают ошибки, которые «не соответствуют исходным данным для точки останова».
Итак, мои проблемы:
- Как отлаживать программы cuda thrust в Visual Studio с помощью parallel nsight?
- Или кто-нибудь может проинструктировать меня, используя другой способ узнать, как cuda thrust dipatch работает с ядрами cuda или другими функциями?
Любой совет будет оценен по достоинству!
Ответ №1:
Обычно для отладки кода устройства в CUDA необходимо передать:
-G -g
переключается на nvcc. Однако этот способ не поддерживается кодом thrust. Вы можете получить представление о том, как код thrust отправляется на устройство, следуя структуре файлов thrust include. Поскольку thrust — это полностью шаблонный код, беспокоиться не о каких библиотеках. Однако это сложное предложение. Вы также можете указать компилятору генерировать ptx:
-ptx
это один из промежуточных типов кода, в который компилируется код cuda. Однако это тоже не тривиальная вещь для анализа. Эта ссылка дает несколько альтернативных идей для отладки с помощью Thrust.
Комментарии:
1. Спасибо, Роберт, я уже прочитал thrust wiki об отладке. Но я думаю, что его содержимое не очень подходит для моих проблем. Я просто хочу знать подробности процессов принятия решений в библиотеке thrust. Итак, я пытался прочитать исходный код и, возможно, также попытаюсь прочитать код ptx. Спасибо!