优化有关寄存器的CUDA内核

tim*_*tim 4 optimization cuda

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

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

tal*_*ies 15

有些要考虑的要点:

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


Arc*_*are 5

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

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

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