我认为我的内核是内存绑定的(因为大多数GPGPU代码是内存限制的),但我实际上并不确定。我怎么能为自己找到它。可能必须使用视觉分析器,因为它取决于使用的GPU。
如果在CUDA编程指南或其他NVIDIA文档中对此进行了解释,请不要犹豫,只发布带有页码的链接,以便我自己阅读。
澄清
我更喜欢一般的“规则”如何确定限制因素,但在我的特殊情况下,您可以在此处找到有关我的内核的详细信息:Using `overlap`, `kernel time` and `utilization` to optimize one's kernels
答案 0 :(得分:3)
来自NVIDIA的这个presentation讨论了通过修改源代码来选择性地禁用内核中的内存访问和算术,以确定其中一个是否限制了您的性能。
答案 1 :(得分:1)
没有任何源代码修改的好技巧可用于使用计算能力2.0及更高版本编译的代码(基于answer here)
使用“--use_fast_math”标志可以轻松增加\降低计算压力。
如果设置此标志会产生较大的加速,则表示计算绑定内核。
如果设置此标志几乎没有加速,这将表示一个平衡的\内存绑定内核。
答案 2 :(得分:0)
即使有一个已接受的答案,我也会在答案中提出答案,这个问题已经过去了。
我的代码中有类似的问题,虽然当时我不知道。
我运行了Nvidia Visual Profiler(nvvp
)并分析了我的程序。我发现分析器检测到我的程序在某种程度上受到限制,并提出了一些建议。
如果您不确定从哪里开始,可以使用一个很棒的工具。