CUDA显卡编程的架构及研究
因为这个程序只使用一个 thread,所以 block 数目、thread 数目都是 1。我们也没有使用到任何 shared memory,所以设为 0。编译后执行,应该可以看到执行的结果。
为了确定执行的结果正确,我们可以加上一段以 CPU 执行的程序代码,来验证结果:
sum = 0;
for(int i = 0; i < DATA_SIZE; i++) { sum += data[i] * data[i]; }
printf(\
- 24 -
CUDA显卡编程的架构及研究
总结:
使用显示芯片来进行运算工作,和使用 CPU 相比,主要有几个好处:显示芯片通常具有更大的内存带宽。例如,NVIDIA 的 GeForce 8800GTX 具有超过 50GB/s 的内存带宽,而目前高阶 CPU 的内存带宽则在 10GB/s 左右。 显示芯片具有更大量的执行单元。例如 GeForce 8800GTX 具有 128 个 \processors\,频率为 1.35GHz。CPU 频率通常较高,但是执行单元的数目则要少得多。和高阶 CPU 相比,显卡的价格较为低廉。例如目前一张 GeForce 8800GT 包括 512MB 内存的价格,和一颗 2.4GHz 四核心 CPU 的价格相若。 显示芯片的运算单元数量很多,因此对于不能高度并行化的工作,所能带来的帮助就不大。显示芯片目前通常只支持 32 bits 浮点数,且多半不能完全支持 IEEE 754 规格,有些运算的精确度可能较低。目前许多显示芯片并没有分开的整数运算单元,因此整数运算的效率较差。显示芯片通常不具有分支预测等复杂的流程控制单元,因此对于具有高度分支的程序,效率会比较差。目前 GPGPU 的程序模型仍不成熟,也还没有公认的标准。例如 NVIDIA 和 AMD/ATI 就有各自不同的程序模型。
整体来说,显示芯片的性质类似 stream processor,适合一次进行大量相同的工作。CPU 则比较有弹性,能同时进行变化较多的工作。
- 25 -
相关推荐: