浅谈cuda5.0新功能——warpshuffle

来源:互联网 发布:软件复杂度度量方法 编辑:程序博客网 时间:2024/06/05 11:50

warpshuffle 的具体定义可以在cuda C programming guide中被找到。

但是这一功能只能被sm30或者更高的显卡支持,具体原因涉及到了kepler和fermi之间的差别。 kepler在一个时钟周期内可以执行32个线程,也就是说在一个时钟周期内可以执行一个完整的warp, 但是fermi的每时钟周期执行能力只有kepler的一半,这就导致fermi不能同时对一个warp内的全部32个线程进行“洗牌”。


warpshuffle的最大意义在于,其可以帮助我们摆脱shared memory。 也就是说,在固定的register中,我们可以分配更多空间给cache 而不是shared memroy,从而可以显著地提高运算效率。


不过warpshuffle也存在弊端,那就是它只允许同一warp内的线程相互交换数据,不同warp间的数据传输仍需用到shared memory。


经个人实验证实,对于一个2048K的数据,运用warpshuffle可以将运算效率提高15%——25%。 这个结果非常惊人,也可以更直接的看出kepler的一些特质。那就是让更多的数据运算及传输在GPU上完成,从而大幅度提高效率。

原创粉丝点击