Nvidia GT200:详解并行处理器

时间:2008-12-13   来源:darkstorm2111203博客   网友评论:0   人气: 474 作者: David Kanter博士

注:本文是Nvidia's GT200:into the parallel processor的中文译文,原文作者为David Kanter博士

翻译本文的目的旨在明CUDA是如何在硬件上实现的,帮助编程人员编写和优化CUDA程序

感谢Call of duty的指导

简介
过去十年中,计算领域出现了一个新的发展趋势:GPU通用计算。
由Intel,IBM,SUN,AMD和富士通生产的通用CPU虽然有了很大发展,但性能提高速度却已经不能与与上世纪八十年代末九十年代初相比。单线程处理的性能在很大程度上受到了限制。这些限制一方面来自于通用计算程序中过低的指令级并行;另一方面来自于“功率墙(Power Wall)”--集成电路的功率消耗的物理限制。摩尔定律能够为处理器提供数以亿计的晶体管,但在为了运行单线程程序而设计的处理器中,这些晶体管绝大多数都被用于制造高速缓存(Cache)。这样做虽然能把处理器功耗控制在合理的范围内,却阻碍了性能的进一步提高。
与此同时,GPU(图形处理单元)却有效的利用了数量巨大的晶体管资源。由于图形渲染过程的高度并行性,GPU的性能按时间呈几何级数增长。同时,随着GPU计算能力的不断增长,一场GPU革命的时机也成熟了。GPU已经从由若干专用的固定功能单元(Fixed Function Unit)组成的专用并行处理器,进化为了以通用计算资源为主,固定功能单元为辅的架构。
这一进化过程的最初征兆出现在以ATI R300和Nvidia NV30位代表的DirectX 9时代的GPU上。与前代的DirectX 8时代GPU相比,这一代的显卡拥有可编程的像素和顶点渲染器,具有了一定的浮点计算能力。AMD收购ATI也是一个微妙的转折点—大多数人当时还在关注AMD与Intel在市场上的竞争,却没有意识到AMD的收购行为有着更加复杂的动机。
支持DirectX 10的显卡的首次出现是一个分水岭:过去只能处理像素或者只能处理顶点的专门功能处理单元被通用的统一着色器架构(Unified Shader Architecture)取代了。以ATI R600和Nvidia G80为代表的DirectX10时代GPU能够提供了超越以往任何GPU的能力:它们拥有数百个功能单元,能够处理一部份过去只能在CPU上运行的数据并行问题。需要强调的是,这些第一代的DirectX 10 GPU只能处理“一部分”数据并行问题;它们只适合处理使用类似阵列的数据结构,并且高度并行的问题。这些处理器的双精度浮点的计算能力十分有限;它们虽然基本符合IEEE规范对32位单精度浮点的大多数规定,但同时也缺少对异常的处理,并省略了一些舍入模式。
这场革命的结果使计算领域的局势突然变得复杂了许多。现在不仅有各种各样的CPU,也有了能够处理并行计算任务的GPU。这些产品的计算能力、可编程性和适合进行的计算任务各有不同。GPU、Cell和Niagara这一类的产品优缺点都十分突出:在处理需要复杂分支的单线程任务时,它们的表现简直无药可救;而在处理充分并行的任务时,它们的性能比CPU能够强上数十甚至数百倍。在可编程性上,Niagara和通用CPU的编程较为灵活,GPU很难处理复杂的数据结构,而Cell简直和程序员有仇。
讽刺的是,虽然ATI与CPU厂商AMD合并了,但另一家GPU厂商Nvidia却在通用计算方面有更加全面而坚实的基础。本文主要介绍Nvidia GPU在通用计算领域方面的应用,尤其是CUDA和最新一代GT200 GPU。GT200架构被使用在了面向娱乐市场的GeForce,用于高性能计算的Tesla和用于专业渲染领域的Quadro产品线上。本文并不深究DirectX 10和OpenGL2.1中错综复杂的现代3D流水线,只有在与CUDA的编程模型进行类比时才会提到。


 

文章评论