gpu 规约算法2
第0个block 和第2个block 相加 第1个block 和第3个block 相加 进入共性内存的block数目减半。
-----------------------------------------------------------------------------------------------------------
在一个wrap(32个线程)内所有的线程执行相同的指令,不需要执行同步点 threadsynchronize
在一个wrap内展开,一个wrap 内不会发生数据的竞争。这样的指令放在open mp 中不一定有效,对于gpu 这样做做是安全的。
线程的完全展开,在一个wrap内,线程是同步的,顺序不乱,因此不需要显示的同步
------------------------------------------------------------------
其他的优化技巧
1、__shared__ Volatile //告诉编译器不要优化代码,否则计算结果可能会出错
GPU做为协处理器,供CPU调用。相比CPU线程,GPU 的线程是轻量级的,线程的启动开销小
尽量使wrap 内的线程执行的指令是相同的,
block 内线程不能太多也不能太少,太少延迟就很明显,太多的话,共享内存、寄存器资源不够,