归约算法
基本思想是,对于一个输入数组执行某种计算,然后产生一个更小的结果数组。当大量的数进行加和运算时,可以利用归约算法,多线程进行求和运算
例如
- 串行实现需要7步,性能比较差
- 成对方式是典型的分治思想,只需要log₂N步来计算结果,由于不能合并内存事物,这种情况在CUDA中性能较差。
- 在CUDA中,无论是全局内存还是局部内存,基于交替策略效果会更好。
成对方式导致线程发散如下
核心代码
完整代码
解决方法: 相邻线程执行相同的代码
交替策略
核心代码
完整代码
归约算法
基本思想是,对于一个输入数组执行某种计算,然后产生一个更小的结果数组。当大量的数进行加和运算时,可以利用归约算法,多线程进行求和运算
例如
成对方式导致线程发散如下
核心代码
完整代码
解决方法: 相邻线程执行相同的代码
交替策略
核心代码
完整代码