如何使用并行 nsight 在 Visual Studio 2010 中调试 cuda 推力函数



我正在使用Visual Studio 2010,并行nsight 2.2和cuda 4.2进行学习。我的系统是Windows 8 pro x64。我打开了 VS 中 cuda 计算 SDK 包含的基数排序项目,并编译它没有错误。排序代码使用推力库:

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 内核,所以我尝试在上面的行前面添加断点并在调试模式下编译项目。但是当我使用并行 nsight 进行 cuda 调试时,总是会出现"断点没有源对应"的错误。

所以,我的问题是:

  1. 如何在具有并行 nsight 的视觉工作室中调试 cuda 推力程序?
  2. 或者有没有人可以指导我使用另一种方式来了解 cuda 推力 dipatch 函数如何到 cuda 内核或其他函数?

任何建议将不胜感激!

通常,要在 CUDA 中调试设备代码,必须传递:

-G -g

切换到 NVCC。 但是,推力代码不支持这种模式。 您可以通过遵循推力包含文件中的结构来了解如何将推力代码调度到设备。 由于推力完全是模板化代码,因此无需担心库。 然而,这是一个具有挑战性的命题。 您还可以告诉编译器生成 ptx:

-ptx

这是 CUDA 代码编译到的中间代码类型之一。 然而,这也不是一件容易解析的事情。 此链接提供了一些使用 Push 进行调试的替代想法。

最新更新