2016-08-24 131 views
0

我正在开发一个项目,其中包括使用Visual Studio 2012和CUDA Development并集成Nsight调试环境。我可以很容易地看到GPU上的线程最多为threadIdx == 128,但是,当我尝试查看具有较高索引的线程时,意味着除第一个块以外的块,使用通过CUDA调试焦点达到的调试焦点对话框,我正在困难,切换到其他块。这是Nsight的正常运行或不是,任何答案将不胜感激。谢谢大家。CUDA Nsight调试焦点,Visual Studio 2012版

+1

你指的是什么'threadIdx'?你的意思是内置的CUDA变量(即'threadIdx。{xyz}'?你运行的块大小是多少? – talonmies

+0

我指的是Cuda内置的threadIdx.x变量。 –

+0

那么你的问题没有意义ThreadIdx是一个块范围变量,它在每个块中的值范围相同,没有“索引较高的线程,这意味着除第一个块之外的块” – talonmies

回答

0

嗨开关块是Nisght共同操作,请按照下列步骤操作

  1. 启动你的CUDA的应用程序,并等待一个碱基被击中。
  2. 通过“Visual Studio - > Nsight - > Windows - > Cuda Info”打开“CUDA Info”窗口
  3. 将页面切换为阻止,您可以看到当前应用程序中的所有启动块。
  4. 双击每一行,您可以切换到另一个块。
  5. 可以为经纱和线程做同样的操作
+0

感谢您的回答,我已经尝试了你上面所说的并且看到只有单行意味着只有第一个块被看到而其他块已经消失或者丢失了。是否有任何我还不知道的方法可以让Visual Studio启动其他块? –

1

我已经找到一种方法来看到指数高于零块,你只需要做的是设置中的所有断点的CUDA程序作为然后启动Nsight调试环境。然后它显示其他块。但是,我认为这也与GPU上的流式多处理器数量有关。据我所知,流式多处理器的数量等于可以同时同时运行的块的数量。我已经使用了一段时间的GeForce GT630,只有单流多处理器,这就是为什么我只看到第一个块运行,但没有看到其他块。但是,调试仍然非常缓慢。

+1

Thats cor RECT。有条件的断点是要走的路。在断点停止时,只能将焦点切换到当前在GPU上驻留/执行的线程/块。对于有大量块的内核,许多在任何给定时间都不能通过焦点切换访问。您需要使用条件断点,因此有问题的块实际上是驻留的。根据您的代码和条件断点的具体情况,它可能比普通断点慢得多。 –

+0

考虑到即使非条件断点很慢,也没有人敢诉诸条件断点。 Nvidia应该专注于其后期的CUDA版本,这应该是一个更聪明的方式。谢谢罗伯特。 –