我最近已经开始玩NVIDIA视觉探查器(CUDA 7.5)来计时我的应用。
然而,我似乎并不完全理解我得到的输出的含义。我不知道如何对不同的分析器输出采取行动。
作为一个例子:在一个for循环中调用单个内核~360次的数据自动化代码。每次,内核计算大约1000个3D纹理存储器读取的512^2次数。每个512^2单元都分配一个线程。需要一些算法才能知道在纹理存储器中读取的位置。纹理存储器读取不需要插值,总是在精确的数据索引中。之所以选择3D纹理存储器,是因为记忆将是相对随机的,因此内存合并是不被期望的。我找不到这方面的参考资料,但肯定是在某个地方读到的。
描述很简短,但我希望它能给出内核所做操作的一个小的概述(发布整个内核可能太多了,但如果需要的话,我可以)。
从现在开始,我将描述我对分析器的解释。
在分析时,如果运行Examine GPU usage,就会得到(单击以放大):

从这里我看到了几件事:
从内核执行“条形码”中,我可以看到顶部和右边:
我按照我的分析方式运行Perform Kernel Analysis,得到:

我能在这里看到
还有别的吗?
我继续使用Perform Latency Analysis,因为分析器显示最大的瓶颈在那里。

最大的三个原因似乎是
a=a+1;a=a*a;b=b+1;b=b*b;改为a=a+1;b=b+1;a=a*a;b=b*b;?问题:
发布于 2016-03-10 23:43:39
是否还有更多的额外测试可以让我更好地理解内核的执行时间限制?
当然了!如果您注意“属性”窗口。您的屏幕截图告诉您,您的内核1.受注册使用的限制(请在“kernel”分析中查看它),2. 2.Warp效率很低(小于100%意味着线程分叉)(请在“Divergent Execution”中检查它)。
是否有一种方法可以在内核内部的指令级别上进行概要分析?
是的,您有两种类型的分析:
是否有比我所得到的更多的结论可以通过分析得到?
您应该检查内核是否有一些线程差异。此外,您应该检查共享/全局内存访问模式是否存在问题。
如果我要开始优化内核,我会从哪里开始?
我发现内核延迟窗口是最有用的窗口,但我认为它取决于您正在分析的内核类型。
https://stackoverflow.com/questions/35893114
复制相似问题