我正在开发一个项目,其中包括使用Visual Studio 2012和CUDA Development并集成Nsight调试环境。我可以很容易地看到GPU上的线程最多为threadIdx == 128,但是,当我尝试查看具有较高索引的线程时,意味着除第一个块以外的块,使用通过CUDA调试焦点达到的调试焦点对话框,我正在困难,切换到其他块。这是Nsight的正常运行或不是,任何答案将不胜感激。谢谢大家。CUDA Nsight调试焦点,Visual Studio 2012版
回答
嗨开关块是Nisght共同操作,请按照下列步骤操作
- 启动你的CUDA的应用程序,并等待一个碱基被击中。
- 通过“Visual Studio - > Nsight - > Windows - > Cuda Info”打开“CUDA Info”窗口
- 将页面切换为阻止,您可以看到当前应用程序中的所有启动块。
- 双击每一行,您可以切换到另一个块。
- 可以为经纱和线程做同样的操作
感谢您的回答,我已经尝试了你上面所说的并且看到只有单行意味着只有第一个块被看到而其他块已经消失或者丢失了。是否有任何我还不知道的方法可以让Visual Studio启动其他块? –
我已经找到一种方法来看到指数高于零块,你只需要做的是设置中的所有断点的CUDA程序作为然后启动Nsight调试环境。然后它显示其他块。但是,我认为这也与GPU上的流式多处理器数量有关。据我所知,流式多处理器的数量等于可以同时同时运行的块的数量。我已经使用了一段时间的GeForce GT630,只有单流多处理器,这就是为什么我只看到第一个块运行,但没有看到其他块。但是,调试仍然非常缓慢。
Thats cor RECT。有条件的断点是要走的路。在断点停止时,只能将焦点切换到当前在GPU上驻留/执行的线程/块。对于有大量块的内核,许多在任何给定时间都不能通过焦点切换访问。您需要使用条件断点,因此有问题的块实际上是驻留的。根据您的代码和条件断点的具体情况,它可能比普通断点慢得多。 –
考虑到即使非条件断点很慢,也没有人敢诉诸条件断点。 Nvidia应该专注于其后期的CUDA版本,这应该是一个更聪明的方式。谢谢罗伯特。 –
- 1. cuda nsight visual studio版内核调试
- 2. Nvidia visual studio Nsight CPU和GPU调试
- 3. 如何在Visual Studio或Parallel Nsight中调试CUDA内核
- 4. 使用NSight Visual Studio 2010进行CUDA调试
- 5. Visual Studio 2012 - 调试
- 6. Visual Studio 2008调试器失去焦点
- 7. Visual Studio nVidia nsight更改cuda工具包版本
- 8. Visual Studio 2012卡在调试
- 9. Visual Studio 2012快速调试
- 10. 使用NVIDIA Nsight 2.1和Visual Studio 2010调试OpenCL
- 11. 将Nsight Eclipse项目转换为Visual Studio
- 12. 使用Visual Studio安装nSight Studio
- 13. NSight在调试时跳过断点
- 14. 检查内存使用CUDA Nsight调试
- 15. CUDA Nvidia NSight调试:“CUDA网格启动失败”
- 16. 在visual studio中调试cuda文件
- 17. 检测Visual Studio 2012版本
- 18. Visual Studio Nsight“Cuda Toolkit V7.5目录不存在”错误
- 19. Visual Studio 2012默认调试IE浏览器版本
- 20. Visual Studio 2012使用调试库而不是发布版本
- 21. 从Visual Studio 2012调试VB6代码
- 22. 无法启动调试 - 的Visual Studio 2012
- 23. Windows 8 Visual Studio 2012调试器问题
- 24. 在Visual Studio 2012中调试WCF服务
- 25. Visual Studio 2012中的远程调试
- 26. visual studio 2012调试器不起作用
- 27. UrlRewrite打破的Visual Studio 2012调试器
- 28. Visual Studio 2012调试多个项目
- 29. Visual Studio 2012调试旧代码
- 30. Visual Studio 2012 - 调试器随机跳转
你指的是什么'threadIdx'?你的意思是内置的CUDA变量(即'threadIdx。{xyz}'?你运行的块大小是多少? – talonmies
我指的是Cuda内置的threadIdx.x变量。 –
那么你的问题没有意义ThreadIdx是一个块范围变量,它在每个块中的值范围相同,没有“索引较高的线程,这意味着除第一个块之外的块” – talonmies