CUDA程序优化小记(六)
CUDA全称Computer Unified Device Architecture(计算机同一设备架构),它的引入为计算机计算速度质的提升提供了可能,从此微型计算机也能有与大型机相当计算的能力。可是不恰当地使用CUDA技术,不仅不会让应用程序获得提升,反而会比普通CPU的计算还要慢。最近我通过学习《GPGPU编程技术》这本书,深刻地体会到了这一点,并且用CUDARuntime应用改写书上的例子程序;来体会CUDA技术给我们计算能力带来的提升。
原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/18800393
上次的程序是使用了CUDA的共享存储器进行累加的运算,不过这里面有一个比较明显的资源浪费现象:最后求和的时候通过__syncthreads()函数对一个块(BLOCK)中的所有线程进行同步,但是仅仅使用了一个线程进行求和累加的运算,其余的线程无事可做。为了防止这样的现象发生,我们需要借助并行缩减算法中比较常见的缩减树算法。
缩减树的算法如下图所示。
线程1 |
线程2 |
线程3 |
线程4 |
线程5 |
线程6 |
线程7 |
线程8 |
↓ |
↙ |
↓ |
↙ |
↓ |
↙ |
↓ |
↙ |
↓ |
|
↙ |
|
↓ |
|
↙ |
|