使用Nsight确定银行冲突和合并

时间:2011-07-04 18:13:53

标签: c++ c debugging profiling cuda

如何使用并行nsight知道非合并读/写和库冲突的数量?
此外,当我使用nsight时,我应该注意什么是剖析器?可能导致我的程序变慢的重要字段是什么?

3 个答案:

答案 0 :(得分:1)

我不使用NSight,但是您将使用分析器查看的典型字段基本上是:

  • 内存消耗
  • 在函数中花费的时间

更具体地说,使用CUDA,你会小心GPU的占用率 其他有趣的值是编译器设置局部变量的方式:寄存器或本地存储器。

最后,您将检查从GPU传输数据和从GPU传回数据所花费的时间,并将其与计算时间进行比较。

答案 1 :(得分:1)

对于银行冲突,您需要观看warp serialization。请参阅here

关于监控内存合并的here is a discussion< - 基本上您只需要观看Global Memory Loads/Stores - Coalesced/Uncoalesced并标记Uncoalesced

答案 2 :(得分:0)

微米。 Tibbits基本上回答了你需要知道的银行冲突和非合并内存交易。

关于可能导致我的程序变慢的重要字段/事物(使用Nsight分析器时)的问题:

  1. 使用应用程序或系统跟踪来确定您是CPU绑定,内存绑定还是内核绑定。这可以通过查看时间轴来完成。
  2. 一个。 CPU绑定 - 您将看到没有发生内核或内存复制但您的应用程序线程(线程状态)为绿色的大区域

    湾内存绑定 - 内存执行被阻止在内存上传输到设备或从设备传输。你可以通过查看Memory Row来看到这一点。如果您在Memory Copies中花费了大量时间,那么您应该考虑使用CUDA流来管理您的应用程序。这可以允许您重叠内存传输和内核。在更改代码之前,您应该比较传输和内核的持续时间,并确保获得性能提升。

    ℃。内核绑定 - 如果大部分应用程序时间都花在等待内核上完成那么你应该切换到“Profile”活动,重新运行你的应用程序,然后开始收集硬件计数器,看看你如何能够实现内核的实际执行时间快点。