1 加载数据
每个线程从全局内存加载一个元素到共享内存中,
2 规约操作: 需要处理log N步
第一个线程规约前两个元素
第二个线程规约接下来的两个元素
每两次相加得到部分和
。。。。依次类推
每个一步后都有一半的线程被丢弃了,处于死状态
最终只有一个线程处于活跃转态
3 将结果写回全局内存
二叉树算法
算法效率低,有效利用率低。
指令分散导致效率很低
很多cuda core处于空闲转态。
step 1有一半的线程处于空闲转态
step 2 又有一半的线程处于空闲转态
没有指令分化,会有跨内存的操作(64,32,16,8)每次线程数减半
<