1.3_GPU计算的崛起
1.3 GPU计算的崛起
与中央处理器传统的数据处理流水线相比,在图形处理器(Graphics Processing Unit,GPU)上执行通用计算还是一个新概念。事实上,在计算领域中,GPU本身在很大程度上就是一个新概念。然而,在图形处理器上执行计算却并非新概念。
1.3.1 GPU简史
在前面介绍了中央处理器在时钟频率和处理器核数量上的发展历程。与此同时,图形处理技术同样经历了巨大的变革。在20世纪80年代晚期到90年代早期之间,图形界面操作系统(例如Microsoft公司的Windows)的普及推动了新型处理器的出现。在20世纪90年代早期,用户开始购买配置2D显示加速器卡的个人计算机。这些显卡提供了基于硬件的位图运算功能,能够在图形操作系统的显示和可用性上起到辅助作用。
在专业计算领域,Silicon Graphics在整个20世纪80年代都致力于推动3D图形在各种市场上的应用,包括政府与国防等应用领域以及科学与技术的可视化技术等,此外还提供了各种工具来制作炫目的电影特效。在1992年,SG公司发布了OpenGL库,这是一个对该公司硬件进行编程的接口。SG公司试图将OpenGL作为一种标准化的、与平台无关的3D图形应用程序编写方法。并行计算和GPU的演变情况是类似的,这些技术进入到消费者应用程序中只是时间早晚的问题。
20世纪90年代中期,在消费者应用程序中采用3D图形技术的需求开始快速增长,这为两类非常重要的应用程序创造了基础条件。首先,许多第一人称游戏,例如Doom、Duke Nukem 3D和Quake等,都要求为PC游戏创建更真实的3D场景。虽然最终3D图形技术融入几乎所有的计算机游戏中,但第一人称射击类型游戏在初期对3D图形技术在消费者应用程序中的普及起到
了极大的推动作用。其次,一些制造商,例如NVIDIA公司、ATI Technologies公司以及3Dfx Interactive公司等,都开始发布一些普通消费者能够买得起的图形加速器卡,以便吸引更广泛的关注。这些事件都促使3D图形技术成为在未来几年中占据重要地位的技术之一。
NVIDIA公司 GeForce 256 显卡的发布进一步提升了消费者图形硬件的功能。 GeForce 256 第一次实现了在图形处理器上直接运行变形与光效(Transform and Lighting)等计算,因此在某些应用程序中能实现更强的视觉效果。由于变形和光效已经成为 OpenGL 图形流水线功能(Graphics Pipeline)的一部分,因此 GeForce 256 标志着越来越多的图形流水线功能将开始直接在图形处理器上实现。
从并行计算的角度来看,NVIDIA在2001年发布的 GeForce 3代表着GPU技术上的最重要突破。 GeForce 3系列是计算工业界的第一块实现Microsoft DirectX 8.0标准的芯片。该标准要求在硬件中同时包含可编程的顶点着色功能(Vertex Shading Stage)和像素着色功能(Pixel Shading Stage)。开发人员也正是从 GeForce 3系列开始第一次能够对GPU中的计算实现某种程度的控制。
1.3.2 早期的GPU计算
GPU中的可编程流水线吸引了许多研究人员来探索如何在除了OpenGL或者DirecX渲染之外的领域中使用图形硬件。早期的GPU计算使用起来非常复杂。由于标准图形接口,例如OpenGL和DirectX,是与GPU交互的唯一方式,因此要在GPU上执行计算,就必然受限于图形API的编程模型。基于这个原因,研究人员开始探索如何通过图形API来执行通用计算,然而这也使得他们的计算问题在GPU看来仍然是传统的渲染问题。
在2000年早期,GPU的主要目标都是通过可编程计算单元为屏幕上的每个像素计算出一个颜色值,这些计算单元也称为像素着色器(Pixel Shader)。通常,像素着色器根据像素在屏幕上的位置 以及其他一些信息,对各种输入信号进行合成并计算出最终的颜色值。这些信息包括输入颜色、纹理坐标、或其他可以传递给着色器的属性。由于对输入颜色和纹理的计算完全是由程序员控制的,因此研究人员注意到,这些输入的“颜色”实际上可以是任意数据。
因此,如果输入值实际上并不是表示颜色值,那么程序员可以对各个像素着色器进行编程从而对输入值执行任意计算。计算结果将交回GPU作为像素的最终“颜色”,尽管这些颜色值只是程序员通过GPU对输入数据进行计算的结果。研究人员可以获得这些计算结果,而GPU永远都不会知道其中的过程。事实上,GPU能够执行除渲染之外的任务,只要这些任务看起来像是一个标准的渲染任务。虽然这种技术非常聪明,但使用起来却非常复杂。
由于GPU有着很高的计算吞吐量,因此最初从这些实验中得到的结果表明GPU计算有着非常光明的应用前景。然而,这种编程模型对于开发人员来说存在着非常大的局限性。首先,该
模型有着严格的资源限制,因为程序只能以颜色值和纹理单元等形式来输入数据。此外,程序员在将计算结果写入内存的方式以及位置上同样存在着严格限制,如果在算法中需要写入到内存的任意(分散)位置,那么将无法在GPU上运行。而且,我们也无法预测所使用的GPU能否处理浮点数据,如果不能处理浮点数据,那么大多数科学计算都将无法使用GPU。最后,当出现问题时,例如程序计算得到错误结果,程序无法终结,或者使计算机挂起,那么没有任何一种方便的方法能够对GPU上执行的代码进行调试。
除了这些限制因素之外,如果程序员希望通过GPU来执行通用计算,那么他们还需要学习OpenGL或者 DirectX,因为这些接口仍然是与GPU交互的唯一方式。这不仅意味着要将数据保存在图形纹理中并调用OpenGL或者 DirectX函数来执行计算,而且还意味着要使用特殊的图形编程语言来编写这些计算,这些语言也称为着色语言(Shading Language)。因此,研究人员在开始使用GPU的强大计算功能之前,首先需要考虑严格的资源限制和编程限制,然后还要学习计算机图形学和着色语言,这种负担对于研究人员来说过于沉重,因此GPU计算在早期并没有被广泛的接受。
1.4 CUDA
直到在 GeForce 3 系列发布五年之后,GPU 计算才开始逐渐成为主流技术。在 2006 年 11 月,NVIDIA 公布了业界的第一个 DirectX 10 GPU,即 GeForce 8800 GTX。GeForce 8800 GTX 也是第一个基于 NVIDIA 的 CUDA 架构构建的 GPU。CUDA 架构专门为 GPU 计算设计了一种全新的模块,目的是减轻早期 GPU 计算中存在的一些限制,而正是这些限制使得之前的 GPU 在通用计算中没有得到广泛应用。
1.4.1 CUDA架构是什么
在之前的图形处理架构中,计算资源划分为顶点着色器和像素着色器,而CUDA架构则不同,它包含了一个统一的着色器流水线,使得执行通用计算的程序能够对芯片上的每个数学逻辑单元(Arithmetic Logic Unit,ALU)进行排列。由于NVIDIA希望使新的图形处理器能适用于通用计算,因此在实现这些ALU时都确保它们满足IEEE单精度浮点数学运算的需求,并且可以使用一个裁剪后的指令集来执行通用计算,而不是仅限于执行图形计算。此外,GPU上的执行单元不仅能任意地读/写内存,同时还能访问由软件管理的缓存,也称为共享内存。CUDA架构的所有这些功能都是为了使GPU不仅能执行传统的图形计算,还能高效地执行通用计算。
1.4.2 CUDA架构的使用
NVIDIA并不局限于通过集成CUDA架构的硬件来为消费者同时提供计算功能和图形功能。尽管NVIDIA在芯片中增加了许多功能来加速计算,但仍然只能通过OpenGL或者 DirectX来访
问这些功能。这不仅要求用户仍然要将他们的计算任务伪装为图形问题,而且还需要使用面向图形的着色语言(例如OpenGL的GLSL或者Microsoft的HLSL)来编写计算代码。
为了尽可能地吸引更多的开发人员,NVIDIA采取了工业标准的C语言,并且增加了一小部分关键字来支持CUDA架构的特殊功能。在发布了GeForce 8800 GTX之后的几个月,NVIDIA公布了一款编译器来编译CUDA C语言。这样,CUDA C就成为了第一款专门由GPU公司设计的编程语言,用于在GPU上编写通用计算。
除了专门设计一种语言来为GPU编写代码之外,NVIDIA还提供了专门的硬件驱动程序来发挥CUDA架构的大规模计算功能。现在,用户不再需要了解OpenGL或者 DirectX图形编程结构,也不需要将通用计算问题伪装为图形计算问题。
1.5 CUDA的应用
自从CUDA C在2007年首次出现以来,许多企业都尝试以CUDA C为基础来构建应用程序,并获得了极大的成功。基于CUDA C编写的代码比之前的代码在性能上提升了多个数量级。而且,与传统在CPU上运行的应用程序相比,在NVIDIA图形处理器上运行的应用程序的单位成本和单位能耗都要低很多。下面就给出CUDA C以及CUDA架构在一些方面的成功应用。
1.5.1 医学图像
在过去20年中,乳腺癌患者的数量持续在增长。在众多研究人员的不懈努力下,对这种可怕疾病的预防与治疗工作取得了重大进展。人们的研究热点在于如何提前发现乳腺癌,从而有效地防止在辐射和化疗中产生的严重副作用,外科手术造成的永久性后遗症,以及由于治疗无效而导致的死亡等。因此,研究人员一致在努力找到某种快速,精确并且影响最小的方式来找出乳腺癌的早期症状。
乳房X线照片(Mammogram)是当前识别早期乳腺癌的最好技术之一,然而这种技术在实际应用中存在一些严重的限制。该项技术需要拍摄两张或者多张图像,并且由一位熟练的医生来分析图像以找出潜在的肿瘤。此外,X射线还会造成反复地辐射患者的胸腔。在经过仔细研究后,医生通常要求进一步的、并且更为具体的成像——有时甚至需要进行活体检查,从而判断癌症的可能性。诊断中的误报(False Positive)不仅会导致昂贵的后续诊断工作,而且在最终报告出来之前,会给患者造成过度的压力。
超声波成像技术比X射线成像技术要更为安全,因此医生通常将其与乳房X线照片结合起来使用,以辅助乳腺癌的治疗与诊断。然而,常规的乳房超声波技术仍然有其局限性。因此,人们研发了TechniScan医疗系统。TechniScan采用了一种三维的超声波成像方法,但这种解决方案却由于一个非常简单的问题而无法投入实际使用:计算量的限制。简单来说,在将收集
到的超声波数据转换为3D图像时需要执行非常耗时的计算,因此使得该项技术无法投入实际使用。
NVIDIA的第一款基于CUDA架构的GPU以及CUDA C编程语言为TechniScan由构想变为现实提供了重要的基础平台。TechniScan的Svara超声波成像系统通过超声波对患者的胸腔进行成像。该系统通过两个NVIDIA Tesla C1060处理器来处理在15分钟扫描过程中生成的35GB数据。由于Tesla C1060的强大计算功能,医生在20分钟内就可以获得患者乳房的高清三维成像。TechniScan预期Svara系统将在2010年得到广泛应用。
1.5.2 计算流体动力学
多年来,旋翼桨叶的高效设计始终是一个难题。研究人员很难通过简单的计算公式对这些设备周围的空气和流体的复杂运动进行建模,而精确的模拟却由于需要非常大的计算量而无法实现。只有世界上最大的超级计算机才有希望提供足够的计算资源来开发和验证这些复杂的数值模型。由于很少有人能使用这样的超级计算机,所以支持复杂模拟模型的计算机设计在多年来始终停滞不前。
剑桥大学是研究高级并行计算的发源地。“众核小组(Many-Core Group)”的Graham Pullan博士和Tobias Brandvik博士敏锐地意识到NVIDIA CUDA架构的巨大潜能:它能将计算流体动力学提升到前所未有的高度。他们最初的研究结果表明,即使个人工作站上的GPU也能够实现显著的性能提升。后来,他们发现只需使用一个小型的GPU集群,就能轻松获得超过超级计算机的计算能力,并且进一步验证了他们最初的假设:NVIDIA GPU的能力非常适合他们想要解决的问题。
对于剑桥大学的研究者们来说,CUDA带来的大规模性能提升不仅仅是对计算资源的简单提升。强大并且低成本的GPU计算能力使得剑桥大学的研究者们能够进行快速的实验。由于在几秒钟内就可以获得实验结果,因此研究者的实验反馈流程将更为简化。基于GPU集群的实验极大地改变了人们的研究方式。近乎于交互式的模拟实验为之前停滞不前的研究领域带来了新的创新机遇。
1.5.3 环境科学
随着全球经济的快速扩张,人们对消费品的环境无害性需求越来越高。人们关心气候变化,不断上涨的燃料价格,以及空气和水的污染指数,正是这种关心延缓了工业进步所带来的间接破坏。长久以来,洗涤剂和清洗剂是最可能在日常使用中对环境造成破坏的消费品。因此,许多科学家都开始研究各种方法来降低这些洗涤剂对环境的影响,同时又要确保它们的洗涤效果。然而,做任何事情都是要付出代价的。
清洁剂的关键成分是表面活性剂。表面活性剂分子决定着清洁剂和洗发剂的清洁能力,但
它们通常也是清洁产品中可能对环境造成最大破坏的成分。这些分子会吸附到脏物上,然后与水混合,这样表面活性剂就和脏东西一起被清洗掉。在传统方式中,测量某种新型表面活性剂的清洁能力需要进行大量的实验,包括将各种材料和需要清洗的杂质混合在一起。显然,这个实验过程非常缓慢,并且成本很高。
美国天普大学与业界的领先企业宝洁公司一起合作,对表面活性剂与脏物、水以及其他材料的交互进行分子模拟。计算机模拟并不仅仅是为了加快传统实验方法的过程,而是还要扩展对不同环境条件的测试广度,这种测试在过去是无法进行的。天普大学的研究者们使用了一款基于GPU加速的HOOMD(Highly Optimized Object-Oriented Many-particle Dynamics)模拟软件,该软件是由美国Ames国家实验室开发的。HOOMD将模拟实验的计算任务分解到两个NVIDIA Tesla GPU上,并能够获得与128个CPU核的Cray XT3或者1024个CPU的IBMBlunGene/L机器大致相等的性能。通过增加解决方案中Tesla GPU的数量,HOOMD实现的表面活性剂交互模拟性能是之前平台的16倍。由于NVIDIA的CUDA将这种复杂模拟的计算时间从数个星期减少为几个小时,在未来的几年中,将出现大量清洁效率更高且对环境影响更小的产品。