Cuda 如何使用NVIDIA Visual Profiler测量每个扭曲的银行冲突?

Cuda 如何使用NVIDIA Visual Profiler测量每个扭曲的银行冲突?,cuda,gpu,nvidia,bank-conflict,nvvp,Cuda,Gpu,Nvidia,Bank Conflict,Nvvp,我正在做一个详细的代码分析,我想测量每个warp的银行冲突总数 nvvp文档列出了此指标,这是我唯一能找到的与银行冲突相关的指标: shared_replay_开销:由于执行每条指令的共享内存冲突而导致的平均重播次数 当我使用nvprof(或nvvp)分析度量时,得到如下结果: Invocations Metric Name Metric Description Min Max

我正在做一个详细的代码分析,我想测量每个warp的银行冲突总数

nvvp
文档列出了此指标,这是我唯一能找到的与银行冲突相关的指标:

shared_replay_开销:由于执行每条指令的共享内存冲突而导致的平均重播次数

当我使用
nvprof
(或
nvvp
)分析度量时,得到如下结果:

Invocations            Metric Name                        Metric Description                Min         Max         Avg
Device "Tesla K20m (0)"
Kernel: void matrixMulCUDA<int=32>(float*, float*, float*, int, int)
301                    shared_replay_overhead             Shared Memory Replay Overhead    0.089730    0.089730    0.089730
调用度量名称度量描述最小最大平均值
装置“特斯拉K20m(0)”
内核:void matrixMulCUDA(float*,float*,float*,int,int)
301共享内存重放开销共享内存重放开销0.089730 0.089730 0.089730 0.089730
我需要利用这个值
0.089730
,或者设计一些其他方法来衡量银行冲突的数量

我知道该值是所有正在执行的扭曲的“平均值”。如果我必须测量每个warp的银行冲突总数,有没有办法使用
nvprof
结果来测量

我想到的可能方法是:

  • 通过使用
    shared\u replay\u开销
    结果,并在公式中使用它们来计算银行冲突的数量。我猜我必须应用一些公式,比如
    shared\u replay\u overhead*已启动的扭曲总数
    ,我事先知道已启动的扭曲总数,但我不知道是什么
  • 首先检测到它是四路银行冲突、八路银行冲突等,然后将
    4
    /
    8
    乘以共享内存操作发生的次数(如何测量?)
除了
nvprof
结果之外,这可能还需要对GPU架构有相当好的技术知识,我想我还没有。为了记录在案,我的GPU是开普勒体系结构,SM 3.5


即使我可以测量每个块(而不是每个扭曲)的银行冲突数量,这也足够了。之后,我可以进行必要的计算,以获得每个扭曲的值。

我认为您应该查看(Cuda分析工具界面)文档。在
/extras/CUPTI
目录中也有一些CUDA SDK的示例。我对这个库不是很熟悉,但看起来您可以编写自己的分析器,测量您想要的内容,或者收集您感兴趣的指标。这将是低水平的,但这是您获得准确答案所需要的。

感谢您的回答,我查看了CUPTI文档,但尚未找到任何有帮助的内容。