6 大规模并行处理器编程实战 与电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)关于浮点运算的标 准。这个标准表明即使使用不同供应商开发的处理器,程序运行的最终结果也是可以预测 的。早期开发的GPU并不是很符合EEE的浮点运算标准,但自从引进G80以来,GPU 进入了新纪元,从而这种情况得到改变。第7章将讨论,目前GPU已经符合EEE提出的 浮点运算标准,且达到了可以和CPU相媲美的水准。因此,我们可以预计越来越多的数值 计算应用程序将移植到GPU上,并得到与CPU等价的结果。GPU的浮点运算单元上仍然 存在的一个问题是目前还只支持单精度的浮点运算。实际应用程序要求的双精度浮点运算 在GPU上还没法执行。然而,最近的GPU中已经能进行双精度的浮点运算,只不过运算 速度只有单精度浮点运算的一半,高端CPU内核也能达到这个水准。这使得GPU更加广 泛地应用于数值计算应用领域。 直到2006年,程序员使用这些图形芯片仍然很不方便,因为程序员如果想要使用它, 就必须会调用图形应用编程接口(Application Programming Interface,AP)函数来访问处理 器内核,这意味着要用OpenGL或Direct.3D技术对这些图形芯片进行编程。这种技术称为 GPGPU,这是基于GPU的通用编程(General-purpose Programming using a Graphics Processing Unit,GPGPU的缩写形式。即使是在高性能的编程环境下,使用API也极大地限制了底层 代码的开发速度。API的使用也极大地限制了实际上为图形芯片编写的应用程序的种类。 这是为什么只有少数人能够掌握这种技术,使用这些芯片来实现有限应用程序的性能:因 此,这些局限性导致该技术并没有得到广泛的应用。然而,这项技术激起人们在这一研究 领域的兴趣并取得了可喜的成绩。 2007年,NVIDIA发布了CUDA技术。因为NVIDIA公司实际上利用硅片面积来简化 并行程序设计,所以这一技术不仅推动了软件行业的发展,也推动了硬件行业的发展。在 专门为并行计算设计的G80系列和后继芯片中,CUDA程序不再借助于图形接口。与以前 不同的是,为满足广大开发人员便捷使用的需求,CUDA技术采用一种新的通用并行编程 接口。此外,因为所有其他软件层也重新进行了设计,所以程序员可以使用自己熟悉的C /C+编程工具。一些学生在做实验时试图使用基于OpenGL的编程接口,他们在实践中深 深地体会到通用并行编程接口的优势,因为不需要使用图形API就可以顺利地完成应用程 序的计算