Как отлаживать функции cuda thrust в Visual studio 2010 с помощью parallel nsight

#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, всегда возникают ошибки, которые «не соответствуют исходным данным для точки останова».

Итак, мои проблемы:

  1. Как отлаживать программы cuda thrust в Visual Studio с помощью parallel nsight?
  2. Или кто-нибудь может проинструктировать меня, используя другой способ узнать, как cuda thrust dipatch работает с ядрами cuda или другими функциями?

Любой совет будет оценен по достоинству!

Ответ №1:

Обычно для отладки кода устройства в CUDA необходимо передать:

 -G -g
  

переключается на nvcc. Однако этот способ не поддерживается кодом thrust. Вы можете получить представление о том, как код thrust отправляется на устройство, следуя структуре файлов thrust include. Поскольку thrust — это полностью шаблонный код, беспокоиться не о каких библиотеках. Однако это сложное предложение. Вы также можете указать компилятору генерировать ptx:

 -ptx
  

это один из промежуточных типов кода, в который компилируется код cuda. Однако это тоже не тривиальная вещь для анализа. Эта ссылка дает несколько альтернативных идей для отладки с помощью Thrust.

Комментарии:

1. Спасибо, Роберт, я уже прочитал thrust wiki об отладке. Но я думаю, что его содержимое не очень подходит для моих проблем. Я просто хочу знать подробности процессов принятия решений в библиотеке thrust. Итак, я пытался прочитать исходный код и, возможно, также попытаюсь прочитать код ptx. Спасибо!