Ala*_*aya 1 parallel-processing performance cuda
我无法理解特斯拉C1060上令人尴尬的并行计算的缩放性能.使用所有块和每个块的多个线程运行它,我得到的运行时间约为0.87秒.
但是,如果我只在一个块中运行所有迭代,每个块有一个线程,则运行时间最长为1872秒,这远远超过240x0.87s = 209s,我只希望缩小到只使用其中一个240个流媒体处理器.
相反,通过使用所有240核心,我似乎加速超过2000倍.这种超线性加速怎么可能; 在我对这个系统的性能建模中,我应该注意哪些其他因素?
启动由1个线程组成的内核将内核执行限制为30个SM中的1个.对于每个发布的warp指令,将仅使用1/32的执行单元.此外,来自相同扭曲的指令不能在背靠背发布插槽上发出,留下至少1/2的发布插槽为空.对于指令依赖性和内存延迟,附加插槽将为空,从而加速2-4倍.让我们假设一个非常悲观的2倍.粗略计算可能的收益
30x increase for using all 30 SMs
32x increase for using full width of the execution units
2x increase for using issue slots and saturating memory system
= 30 * 32 * 2
= >1920x performance increase
Run Code Online (Sandbox Code Playgroud)
你看到的是1872/.87 = 2152x的差异.由于空的发布时隙以及每个SM的1个warp不能使存储器系统饱和这一事实,这很容易被> 2x占据.
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |