如何在Visual Studio 2010中使用Parallel Nsight调试CUDA Thrust函数

6

我正在使用Visual Studio 2010,Parallel Nsight 2.2和CUDA 4.2进行学习。我的系统是Windows 8 Pro x64。 我在VS中打开了包含在CUDA计算SDK中的基数排序项目,并且编译没有错误。排序代码使用了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 for CUDA Debugging进行并行调试时,总是出现“断点没有源对应项”的错误。
所以,我的问题是:
  1. 如何在Visual Studio中使用Parallel Nsight调试CUDA Thrust程序?
  2. 或者有没有人能够指导我使用其他方法了解如何将CUDA Thrust分派函数分派到CUDA内核或其他函数?
任何建议都将不胜感激!
1个回答

3
通常,在CUDA中调试设备代码需要传递:
-G -g

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

-ptx

这是CUDA代码编译后的中间代码类型之一。然而,这也不是一个简单的解析过程。此链接提供了一些使用Thrust进行调试的替代方法。

谢谢Robert,我已经阅读了有关调试的Thrust Wiki。但是我认为它的内容对我的问题没有太大用处。我只想了解Thrust库中的决策流程的细节。所以我尝试阅读源代码,可能还会尝试阅读PTX代码。谢谢! - Miles Xu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接