◆ 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计算。
