万亿次科学预算 体验CUDA科学运算的威力

2009-3-2 作者: 佚名 来源: ZOL博客

关键字: CUDA GPU NVIDIA 

  CUDA:主导GPU计算的革命

  回顾显卡的发展,用户对图形计算方面的需求不断的超出了CPU在计算能力方面的发展速度。随着CPU计算能力的进步,人们一度认为可以将图形、视频等需要大量运算的功能都交与CPU完成。但是在3D时代,人们发现庞大的3D图形数据计算量对CPU的负荷,已经远远超出了它所能承担的计算能力。为了满足海量数据的图形计算需求,显示芯片向更高速更复杂发展。终于有一天,当显示芯片实现的计算能力也无法满足快速增长的图形计算需求时,计算功能被脱离出来单独作为一个芯片设计,这就是专门负责图形计算的处理器——GPU(Graphics Processing Unit),

  1999年NVIDIA GeForce图形处理器的发布,实现了顶点的矩阵变换和光照计算,真正意义上的GPU宣告诞生。随着GeForce 3开始引出可编程特性,能将图形硬件的流水线作为流处理器来解释,基于GPU的通用计算也开始出现。

  到了Nvidia GeForce6800这一代GPU,功能相对以前更加丰富、灵活。顶点程序可以直接访问纹理,支持动态分支;象素着色器开始支持分支操作,包括循环和子函数调用,TMU支持64位浮点纹理的过滤和混合,ROP(象素输出单元)支持MRT(多目标渲染)等。象素和顶点可编程性得到了大大的扩展,访问方式更为灵活,这些对于通用计算而言更是重要突破。


G80计算架构

  真正的革命来自于2006年,NVIDIA在这一年推出了基于DX10统一渲染体系的旗舰图形处理器G80,当人们为其强悍的3D效能惊叹时,有谁又会想到NVIDIA这次会给那些GPU通用运算的支持者带来的更加目瞪口呆的变革!

  G80包含了128个处理器(最新的G200包含了240个处理器),在某些大规模并行计算的应用上,相对于CPU来说性能提高可达100倍以上。现代的GPU计算能力已经远远的超过了CPU和其他的处理器。但是如此强大的计算能力如果只能应用在图形方面,对于计算资源来说是一个极大的浪费。

  GPGPU与GPU计算

  为了能够在图形计算之外的更多领域发挥GPU强大的计算功能,人们2002年就开始研究如何能够利用GPU完成通常意义上的数据运算,这被称之为GPGPU(General-Purpose computing on Graphics Processing Units,基于GPU的通用计算)。

  由于第一代GPU的计算是基于矢量的运算(可以理解为基于数组的计算),因此第一代的GPGPU采取的技术方案是先将需要处理的计算问题转化为能够用矢量表示的问题,然后通过例如DirectX或者OpenGL这样的图形API完成计算取回结果。由于这些图形API会使用GPU来完成相应的计算,因此也就通过这种间接的方式实现了GPGPU。但是这种方式存在着很大的不便。

  它的问题在于芯片设计本身是为了图形而进行设计的,所以是强制一个本为图形设计的芯片之上的进行通用用途的计算。而且在这种通用用途的GPU计算当中,没有办法用高级程序语言比如C、C++语言进行编程。

  这就是为什么在2004年的时候,NVIDIA就专门请了相关硬件方面的设计师以及软件方面的设计师对于GPU进行重新的完全不同的以前的设计,它既适用于图形,也是适用于计算的。

  随着统一渲染架构的诞生,GPU本身的计算方式由基于矢量计算转为了基于标量的并行计算。当摆脱了架构和计算方式所带来的限制之后,GPU所能处理的问题由图形领域扩展到了通用计算领域。而在开发领域,需要有一种灵活的开发方式,能够让用户直接使用GPU的计算能力,而CUDA正是为此而诞生。

  这就是为什么现在可以在C语言的环境当中,也就是所说的CUDA这个环境当中对于GPU进行编程,而这,也就是我们现在所说的GPU计算。




<<首页 <上一页  1  2  3  4  5  6  7  8  下一页>  末页>>  
责任编辑:熊东旭