优化有关寄存器的CUDA内核

时间:2011-05-19 09:13:57

标签: optimization cuda

我正在使用CUDA占用计算器来尝试优化我的CUDA内核。目前我使用34个寄存器和零共享内存......因此,每个块310个线程的最大占用率为63%。当我能以某种方式改变寄存器(例如通过将内核参数通过共享存储器传递)到20或更低时,我可以获得100%的占用率。这是一个很好的方法,还是建议我使用另一种优化途径?

此外,我还想知道是否有更新版本的Compute Capability 2.1占用计算器!?

2 个答案:

答案 0 :(得分:15)

需要考虑的一些要点:

  1. 每个块320个线程将给出与310相同的占用率,因为占用率被定义为每个SM的活动warp /最大warp,并且warp大小总是32个线程。您应该从不使用不是32的整数倍的块大小。这只会浪费核心和周期。
  2. 内核参数在计算2.1设备的常量内存中传递,它们对占用率或寄存器使用率没有影响。
  3. GPU设计的管道延迟约为21个周期。因此,对于费米GPU,您需要大约43%的占用率来覆盖所有内部调度延迟。一旦完成,您可能会发现尝试获得更高的入住率相对没什么好处。
  4. 争取100%入住率通常不是建设性的优化目标。如果您还没有这样做,我强烈建议您查看来自GTC 2010 "Better performance at lower occupancy"的Vasily Volkov的演讲,在那里他展示了各种令人惊讶的结果,例如代码在占用率为8%时达到峰值内存带宽的85%。
  5. 最新的占用率计算器不包括计算2.1,但计算2.0的有效占用规则也适用于2.1设备。计算2.1多处理器中的额外内核通过指令级并行性发挥作用,几乎无序执行。与计算2.0设备相比,这根本不会改变设备的占用特性。

答案 1 :(得分:5)

talonmies是正确的,占用被高估了。

瓦西里·沃尔科夫在GTC2010上就这一主题进行了精彩的演讲:“在较低的占用率下表现更佳。”

http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf