1 加载数据

每个线程从全局内存加载一个元素到共享内存中,

GPU 规约算法步骤 1

2 规约操作: 需要处理log N步

第一个线程规约前两个元素

第二个线程规约接下来的两个元素

每两次相加得到部分和

。。。。依次类推

每个一步后都有一半的线程被丢弃了,处于死状态

最终只有一个线程处于活跃转态

3 将结果写回全局内存

二叉树算法

GPU 规约算法步骤 1

算法效率低,有效利用率低。

指令分散导致效率很低

GPU 规约算法步骤 1

很多cuda core处于空闲转态。

 

GPU 规约算法步骤 1

step 1有一半的线程处于空闲转态

step 2 又有一半的线程处于空闲转态

 

没有指令分化,会有跨内存的操作(64,32,16,8)每次线程数减半  

GPU 规约算法步骤 1

 

----------------------------------------------------------------------------------------------

GPU 规约算法步骤 1

每个不同的thread 访问不同bank ,可以一次访问得到所有的数据,效率是最高的。

GPU 规约算法步骤 1

第一个循环:一半的线程处于空闲

第二个循环:另一半的线程处于空闲

。。。。。

相关文章: