5

我正在使用 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());

我想知道推力如何将排序功能分派给 cuda 内核,所以我尝试在上面的行前添加断点并在调试模式下编译项目。但是当我使用并行nsight进行cuda调试时,总是出现“断点没有源对应”的错误。

所以,我的问题是:

  1. 如何在具有并行 nsight 的 Visual Studio 中调试 cuda 推力程序?
  2. 或者有没有人可以指导我使用另一种方式来了解 cuda 推力 dipatch 如何对 cuda 内核或其他功能起作用?

任何建议将不胜感激!

4

1 回答 1

2

通常,要在 CUDA 中调试设备代码,需要通过:

-G -g

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

-ptx

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

于 2012-11-16T16:05:07.653 回答