GPU(Graphic Processing Unit,图形处理器)用作高性能计算是一件很酷的事儿。硬件上着力于为图形计算优化的GPU在另一个用途上显得颇有潜力:把它们用于特定类型的高性能计算。这篇文章我会谈谈GPU是怎么实现高性能计算的,并简要介绍当下GPU在通用计算领域的发展状况。
把图形变为程序
让GPU实现通用计算首先要引入可编程的渲染方法。DirectX和OpenGL(它们都是应用程序的图形编程接口,译者注)在十来年前就开始支持可编程渲染,这让游戏开发人员自行设计更多图形特效成为可能。除了调节现成的特效,图形设计师们能够编写可以直接在GPU上运行的小程序。就拿DirectX 8来说,设计师们可以为场景中的每件物体使用两种渲染程序:顶点渲染和像素渲染。
顶点渲染函数在3D物体的每个顶点上都得到了应用。该函数能够根据摄像机的视角返回顶点位置值。在顶点变换位置的过程中,顶点渲染会参与一系列特效构造过程,例如真实感很强的皮肤、衣物、面部表情等等。
像素渲染函数应用在了每一个表示特定物体的像素上,该函数会返回这个像素的颜色值。为了计算出颜色,像素渲染会用到多种可供选择的输入值:屏幕上的横纵坐标、场景中的三维坐标、纹理上的位置、物体表面的方向(即法线方向)等等。像素渲染同样能获取诸如纹理数据、凹凸贴图等其他输入信息。
下面这个简单场景给出了茶壶六种不同的像素渲染情形。


A始终返回相同的颜色值。
B根据屏幕上Y轴坐标改变茶壶的颜色。
C根据三维坐标确定茶壶颜色。
D根据茶壶表面的法线方向与光线方向(漫射光线)间夹角的余弦值局部调整颜色。
E使用了稍微复杂一些的光照模型并添加了一个纹理,
F则在此基础上增加了一个凹凸贴图。
如果你对光照模型是如何工作的感兴趣,可以读读Gama Sutra的文章《用HLSL实现光照模型》(Implementing Lighting Models With HLSL)。`