解释NVIDIA可视探查器输出 我最近开始使用英伟达视觉分析器(CUDA 7.5)来计时我的应用程序。p>
然而,我似乎并不完全理解我得到的结果的含义。我不知道如何处理不同的分析器输出 例如:在for循环中调用单个内核约360次的CUDA代码。每次,内核计算大约1000次3D纹理内存读取。每个解释NVIDIA可视探查器输出 我最近开始使用英伟达视觉分析器(CUDA 7.5)来计时我的应用程序。p>,cuda,profiling,Cuda,Profiling,然而,我似乎并不完全理解我得到的结果的含义。我不知道如何处理不同的分析器输出 例如:在for循环中调用单个内核约360次的CUDA代码。每次,内核计算大约1000次3D纹理内存读取。每个512^2单元分配一个线程。需要一些算法来知道在纹理内存中读取哪个位置。纹理内存读取不进行插值,始终以精确的数据索引执行。之所以选择3D纹理内存,是因为memreads将是相对随机的,因此不期望内存合并。我找不到这方面的参考资料,但肯定是在某处读到的 描述很短,但我希望它能对内核所做的操作给出一个小的概述(发布整
512^2
单元分配一个线程。需要一些算法来知道在纹理内存中读取哪个位置。纹理内存读取不进行插值,始终以精确的数据索引执行。之所以选择3D纹理内存,是因为memreads将是相对随机的,因此不期望内存合并。我找不到这方面的参考资料,但肯定是在某处读到的
描述很短,但我希望它能对内核所做的操作给出一个小的概述(发布整个内核可能太多了,但如果需要的话我可以)
从现在起,我将描述我对分析器的解释
评测时,如果我运行
检查GPU使用情况
我会得到(单击放大):
从这里我看到了几件事:
- 低内存复制/计算重叠0%。这是预期的,因为我运行一个大内核,等待它完成,然后是memcopy。不应该有重叠
- 低内核并发性0%。我刚刚得到一个内核,这是预期的
- 低拷贝重叠0%。同样的事情。我在乞讨中只复制一次memcopy,在每个内核之后复制一次memcopy。这是意料之中的
- 大部分时间是运行内核。内存开销很少
- 所有内核占用相同的时间(好)
- 最大的标志是占用率,始终低于45%,这是限制因素。然而
Perform Kernel Analysis
来跟踪我的评测,获得:
我可以在这里看到
- 内核中的计算和内存利用率较低。剖析者认为低于60%是不好的
- 大部分时间用于计算和二级缓存读取
- 内存依赖关系。纹理模念太多?但我需要这么多的记忆
- 执行依赖关系。“可以通过增加指令级并行性来减少”。这是否意味着我应该尝试更改,例如
a=a+1;a=a*a;b=b+1;b=b*b代码>至
a=a+1;b=b+1;a=a*a;b=b*b代码>李>
- 指令获取(??)
问题:
- 我还可以执行更多的测试来更好地理解内核的执行时间限制吗
- 有没有办法在内核内部的指令级进行评测
- 是否有更多的结论,一个人可以通过查看配置文件比我得到的
- 如果我开始尝试优化内核,我会从哪里开始呢