| 第5页:谁能主导未来 GPGPU和CUDA差异比较 |
GPGPU和CUDA实现上的差别
如果只是显卡从游戏手中夺得了游戏功能也就算了,最近几年的高清视之战也是GPU从CPU手中夺取本来该由CPU处理的工作,而近几年随着通用计算处理器GPGPU(General-Purpose computing on Graphics Processing Units)的提出,在科学和专业领域、医学等领域以颇有建树,CPU的地位更是进一步被GPU所蚕食,民用领域中,实际上我们所说的高清硬件解码也是GPGPU计算的一个初级形态。

大家也都知道,目前针对GPU实现通用并行计算的CUDA解决方案与GPGPU两者实现有何区别呢?这里笔者陈述一下自己的理解。
GPGPU和CUDA实现最的差异就在对GPU通用计算的理解层次不同。GPGPU仍旧把GPU当作一块显卡,它使用DirectX和OpenGL这样的图形API实现计算目的,正因为如此,它需要编程人员了解图形AIP和硬件的细节。这样编程模型也限制了随机读取显存和线程协调方式。而CUDA的通用并行计算实现则更彻底,打破了图形API的限制,编程人员不会感觉到和以往在CPU编程的区别。
比如在图形API中,API框架限制了在预先制定好的内存单元输出32位浮点(渲染目标格式是RGBA*8),这限制了很多新的算法不适合使用图形API来实现。图形API强制用户把数据存储为纹理格式,它需要把长数组打包为2D纹理格式。这对于通用计算不但繁琐,而且必须加入额外的寻址算法,这都会增加额外的开销。
与此相对应,CUDA使用C的一个扩展来进行并行计算,它允许编程人员使用C编程,不需要把问题转化为图形处理元素来处理,任何能用C编程的程序员能够理所当然的掌握CUDA编程。CUDA对地址单元和存储数量没有任何限制,同时也支持数据存储为标准数组形式,同时能够对任意显存地址进行访问。
由于GPGPU开发程序需要程序员详细了解专业的图形语言等,因此一直都无法大规模普及,而解决这一问题的关键就是NVIDIA的CUDA。
关于CUDA:
CUDA是NVIDIA针对GPU的C语言开发环境开发的通用计算平台标准,全称是Compute Unified Device Architecture统一计算设备架构。CUDA可以充分应用GeForce 8/9系列 GPU 流处理单元的浮点运算能力,解决复杂的科学运算问题,诸如地质勘探,生物学,流体力学,金融建模等等。根据NVIDIA的测试,8800显卡在CUDA架构中的峰值运算能力可达520GFlops,因此如果构建SLI双卡系统,可以达到1TFlops(即每秒运算1万亿次)的强大运算能力。