1前言:并行的运算能力非常巨大
随着电脑技术的不断发展,我们感受很深的是两大电脑部件的升级越来越快,处理器的发展从单核到双核,根据摩尔定律,其并行性还会不短发展。显卡的发展,也是同样不断发展,当人们认为显卡只能单单在视觉化不断给与我们更多的享受,例如游戏画面从2D到3D,然后是要求更加真实的物理效果,商业用户利用显卡进行3D电影的制作,NVIDIA方面已经在研究如何不单单只是在视觉化上更真实,并性架构的双核处理器目前已经成为主流的配置平台,为未来相信随着时间的推移还会继续普及更多核心的处理器。但是显卡的架构我们来分析一下,会发现其不单单是双核那么简单,而且就是采用并行架构来处理数据的。
上图可以看出CPU除了专门的运算的ALU之外,还集成了一大块的缓存Cache,这样设计是因为CPU处理数据比较弹性,从简单的逻辑运算到复杂的高级运算。但是对于很多的科学运算来说,很多都是简单的数据处理,这样的话就好比一个人做同样的工作,后面拍了很长的任务都是一样的。
而看GPU的架构图可以看出,GPU专为计算密集型、高度并行化的计算而设计的,因此,GPU的设计将更多的晶体管用与数据处理,对于高度的并行化运算,利用 CUDA 处理的问题,可以同时大量并行化的运算。相当于一下子多了很多个人同时工作,大大减少等待的时间。当然最适合利用 CUDA 处理的问题,是可以大量并行化的问题,才能有效隐藏内存的 latency,并有效利用显示芯片上的大量执行单元。使用 CUDA 时,同时有上千个 thread 在执行是很正常的。因此,如果不能大量并行化的问题,使用 CUDA 就没办法达到最好的效率了。
2GPU的并行运算能力开发工具CUDA
GPU的发展现在越来越强大,而且GPU为显示图像做了优化。在计算上更已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此在GPU领域有着举足轻重的NVidia推出CUDA,让显卡可以用于图像计算以外的目的。GPU的性能已经远比当初强大,昔日停留在“视频卡”的概念也逐渐改变,GPU负责的事情已经超越原本单纯的2D/3D处理,它更多以协处理器的形式服务于制图工作者以及科研人员。未来的计算机时代将是视觉处理技术的时代,业界的领军者曾经指出。
工作负荷迅速从CPU向GPU(图形处理器)的转移不断鼓舞着消费类应用程序的开发。在NVISION 2008大会上,全球视觉计算技术的行业领袖NVIDIA(英伟达)公司向世人展现了新GPU时代的四大技术:使GPU担负更多应用工作的CUDA、进一步从游戏中解放CPU的游戏PhysX加速、为游戏用户提供亲历其境体验的3D Stereo、为发烧游戏用户提供更极致体验的SLi技术。nVIDIA将这四项技术统称为GeForce四大内功(Force WithIn)。说到这里我们不能不说说CUDA这个改变GPU的技术。
那么什么是CUDA,CUDA是一种并行编程模型和软件环境,用于应对这种挑战。而对于熟悉C语言等标准编程语言的程序员来说,迅速掌握CUDA绝非难事。
CUDA的诞生
在CUDA诞生之前,GPU的主要作用是进行图形渲染,业内公司曾提出过各种GPU运算的解决方案,但是真正成形的屈指可数。NVIDIA CUDA技术是当今世界上唯一针对NVIDIA GPU 的C语言环境,该技术充分挖掘出NVIDIA GPU巨大的计算能力。凭借NVIDIA CUDA技术,开发人员能够利用NVIDIA GPU(图形处理器)攻克极其复杂的密集型计算难题。
首先我们介绍一下CUDA这个技术,和对于用户和行业来讲有什么促进和帮助?
CUDA的诞生
在CUDA诞生之前,GPU的主要作用是进行图形渲染,业内公司曾提出过各种GPU运算的解决方案,但是真正成形的屈指可数。
NVIDIA CUDA技术是当今世界上唯一针对NVIDIA GPU 的C语言环境,该技术充分挖掘出NVIDIA GPU巨大的计算能力。
凭借NVIDIA CUDA技术,开发人员能够利用NVIDIA GPU(图形处理器)攻克极其复杂的密集型计算难题。
那么CUDA有什么优势,我们引用了一下NVIDIA官方网站的描述
CUDA开发包是一个完整的使用GPU的软件开发方案。在SDK包含了标准的FFT和BLAS库、使用NV GPU的C编译器和运行时驱动。CUDA运行时驱动是与常用的同DX和GL协同工作的驱动独立的。同时CUDA对Linux和XP的支持也是相同的。
技术特性
CUDA为线程计算提供了一个统一的硬件和软件解决方案来使用支持CUDA的GPU
可支持CUDA的GPU为高性能计算提供并行数据缓冲和线程执行管理器的支持
可以在GPU上使用的标准C语言
提供了标准数值库FFT和BLAS
为计算提供了独立的CUDA驱动
优化了GPU和CPU之间的数据通信路径
CUDA驱动可以在图形设备之间互操作
支持 LINUX 与 XP 操作系统
从高性能的专业图形解决方案到移动和嵌入式GPU均能使用
为高计算密度程序内建多GPU支持
为程序开发和优化提供硬件调试的性能测试的支持
3GPU的统一架构分析
下面是引用了NVIDIA(英伟达)亚太区技术经理邓培智先生的演讲:实际上我们八系列研发的时候,CUDA已经开始提出来了,我们就考虑到用GPU做通用计算的可能性,因为过去要用GPU做通用计算是很复杂的,你没有关键工具,你必须要使用OP机啊,3D这些来进行编程,这个编程是非常复杂的,比如说像计算编程里面,或者各种各样的计算程序编程人员对图形不是很了解,如果用3D来进行编程这是很痛苦的事情,而CUDA,你可以把它看成图形处理器也可以看成通用处理器,可以用C语言对GPU进行开发,这样就是这么一个瓶颈就不存在了,用GPU进行编程跟C语言编程是一样的了。
统一渲染架构
这一概念的出现,其初衷就如前面说到,在目前许多新的大型3D游戏中,许多独立渲染的场景由大量多边形组成,对GPU的Vertex Shader(顶点着色器)要求很大,而这时相对来说,并不需要太多的像素渲染操作,这样便会出现像素渲染单元被闲置,而顶点着色引擎却处于不堪重荷的状态,统一渲染架构的出现,有助于降低Shader单元的闲置状态,大大提高了GPU的利用率。
所谓统一渲染架构,大家可以理解为将Vertex Shader、Pixel Shader以及DirectX 10新引入的Geometry Shader进行统一封装。此时,显卡中的GPU将不会开辟独立的管线,而是所有的运算单元都可以任意处理任何一种Shader运算。这使得GPU的利用率更加高,也避免了传统架构中由于资源分配不合理引起的资源浪费现象。这种运算单元就是现在我们经常提到的统一渲染单元(unified Shader),大体上说,unified Shader的数目越多,显卡的3D渲染执行能力就越高,因此,现在unified Shader的数目成为了判断一张显卡性能的重要标准。
GT200核心架构分析
GeForce GTX 200系列带来了全新的第二代统一架构。而第二代统一架构最大的特点就是在全部继承第一代统一架构的优点后,提升各单元处理器能力的同时也提升了效率,真正意义上把同一架构发挥至极点。为了适应未来并行运算的需要,GeForce GTX 200系列显卡开创性提供了2种不同的架构——并行处理架构与图形处理器架构。
从上面的架构图可以看出,GeForce GTX 200系列可以分为四个层,最上面一层包括了图形处理器所需要的几何着色器(Geometry Shader)、顶点着色器(Vertex shader)以及像素着色器(Pixel shader)。中间一层包括了10组TPCs(计算处理器群集),每组TPC里面又包含了3组SMs(流处理器组),每组SM里面就包含了8个流处理器单元或计算单元。这样一来,GeForce GTX 200显卡就一共包含了240个流处理器单元或计算单元。在TPCs下面就是纹理单元以Atomic单元(在并行计算中负责处理冲突的单元)。在下面就是ROPs(光栅化处理器引擎)以及显存接口。
在NVIDIA八代显卡和GTX200都是并行架构设计,下面我们分析一下GPU的处理架构。
4行处理架构:GPU将比CPU更主要
行处理架构:GPU将比CPU更主要
GeForce 系列的GPU同样是一款非常出色处理器并行架构处理器,而NVIDIA提出的CPU+GPU的异构运算平台在目前众多领域有着非常大的优势。随着越来越多的应用程序对GPU并行运算的支持,相信未来GPU重要性超过CPU也并非天方夜谭。
NVIDIA方面,上代G8X图形核心就采用了先进的统一渲染架构,拥有多达128个流处理器,引入几何着色器功能……这一切简直就是专为GPGPU运算而生!为了最大程度的发挥几何着色器的威力,G80还专门设置了一个名为流输出层(Stream Output State)的部件来配合它使用。这个层的功能是将Vertex Shader和Pixel Shader处理完成的数据输出给用户,由用户进行处理后再反馈给流水线继续处理。它可以直接读写本地显存。我们可以通过Stream Out把GPU拆成两段,只利用前面的一段几何运算单元。对某些科学研究,也可以通过stream out来利用GPU的数学运算能力,等于在CPU之外又平白多得了一个数学协处理器。我们可以这样理解G80图形核心的几何着色器和Stream Out单元:GS提供了改变图形数量的能力,Stream out提供了硬件Multi-pass的支持。可以预见,今后围绕这些全新的功能,又会有一批新的GPU通用计算程序出台。
5面向未来:CUDA应用方向
面向未来:CUDA应用方向
随着显卡的发展,GPU越来越强大,第一代统一渲染架构的GTX 280核心中就已经拥有240个单独的ALU,因此非常适合并行计算,而且浮点处理能力也远远优于目前的多核CPU,加上GPU为显示图像做了优化。在众多计算领域上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此NVidia推出CUDA,让显卡可以用于图像计算以外的目的。CUDA(Compute Unified Device Architecture)工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境,未来还将发布Fortran语言版本。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。跟以往的GPGPU概念不同的是,CUDA是一个完整的解决方案,包含了API、C编译器等,能够利用显卡核心的片内L1 Cache共享数据,使数据不必经过内存-显存的反复传输,shader之间甚至可以互相通信。对数据的存储也不再约束于以往GPGPU的纹理方式,存取更加灵活,可以充分利用stream out特性。以上几点都将大大提高GPGPU应用的效率。例如,在游戏中我们可以使用CUDA来让GPU承担整个物理计算,而玩家将会获得另他们感到惊奇的性能和视觉效果。另外,用于产品开发和巨量数据分析的商业软件也可以通过它来使用一台工作站或者服务器完成以前需要大规模的计算系统才能完成的工作。这一技术突破使得客户可以任何地方进行实时分析与决策。同时,一些以前需要很先进的计算技术来达到的强大计算能力的科学应用程序,也不再受限在计算密度上;使用CUDA的计算可以在现有的空间里为平台提供更强大的计算性能。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
CUDA工具包推出已有1年,它的推出马上受到了众多软件/游戏开发商以及科研机构和程序爱好者的欢迎,NVIDIA方面也将发布最新的CUDA 2.0版本。相信在未来,CUDA将会受到越来越多的领域的支持。目前,支持CUDA环境的GPU主要有采用统一渲染架构的显示核心。
6BadaBoom视频压缩
CUDA技术能够充分发挥GPU在并行计算中的优势,实现与传统CPU计算相比数十甚至上百倍的性能提升。目前全球已有不少科研机构及大学在利用CUDA进行高性能运算开发,覆盖医疗、勘探、科学计算等多个领域。
针对CUDA应用,可以简单分为几个方面,例如:科学研究、地址勘探、视频处理、医疗等。每个方面都可展开讨论
邓培智先生:“对于程序员来说,因为大部分的程序员都是基于C语言进行各类程序的开发,掌握了C语言就能方便的使用CUDA。这一点是重要的。另外一个,CUDA和NVIDIA的GPU是高度协调的,就是你用CUDA在NVIDIA的GPU进行开发,可以高度的优化,而且可以把GPU计算潜能发挥出来,这是非常重要的一点。因为如果不能够很好的使用GPU的并行性,那么你就等于浪费剩余的计算能力。CUDA和NVIDIA的GPU是高度协调的,就是你用CUDA在NVIDIA的GPU进行开发,可以高度的优化,而且可以把GPU计算潜能发挥出来,这是非常重要的一点。未来使用CUDA的话,因为我们是跟GPU的架构一起进行开发,所以使用CUDA就很容易把NVIDIA的GPU计算能力完全发挥出来,这一点是很重要的。 实际上,CUDA出来之后,对于每一个消费者来说,拥有一个NVIDIA的GPU,相当于有了一个计算能力非常强的超级计算机。为什么这样说呢?比如我们GTX280每秒可以进行一万亿次计算,这一点是很重要的。实际上每个人都想买更好的处理器,获得更快的计算能力,实际上有了NVIDIA的GPU,有了CUDA,每个人都可以获得更好的计算能力。”
说了这么多,那没CUDA到底有什么实际应用到我们身边的呢。下面我们带来了一些关于CUDA的应用。
BadaBoom视频压缩
一直以来,视频编码的转化都是令用户非常头疼的一件事,一款顶级的处理器在转换容量巨人的视频文件的时候,慢如蜗牛的速度令人难以忍受,这也主要受目前CPU性能的制约。目前,NVIDIA与许多软件开发商在推广支持GPU加速的视频压缩软件,Badaboom就是一款支持GPU加速的视频转换软件,可以把mpeg2的视频转换为ipod或者iphone这样的所使用的H.264视频格式,据称速度方面是目前CPU转化的10倍以上,为了验证其真实性,我们就做了一次相关的评测。
由于目前这个版本仅支持GPU加速,所以我们并不能拿来与CPU进行同平台对比,考虑到目前参差不齐的编码软件,测试结果仅做主观参考,从软件显示的编码速度来看,编码帧数达到了130帧每秒,一个160M的MPEG-2文件压缩至iphone标准视频仅1分钟内就可以编码完成。这个速度相信已经超过了目前所有的CPU版本编码软件。
7抗癌如此简单
是斯坦福大学的一个分布式计算计划可以利用分布于全球的计算机模拟复杂的蛋白质折叠效应,是一款典型的科学计算程序,目前已经推出了支持CUDA环境的版本。该项目的客户端程序可以使用客户机的CPU或NVIDIA CUDA enable GPU或者AMD Radeon对同一以项目进行求解,为了让大家最清楚的了解CUDA的GeForce GTX 200系列GPU在科学计算方面与CPU和其他计算解决方案在性能上的区别。我们利用这款软件对GTX 280做了一次评测,测试所采用的处理器为Intel 45nm四核处理器QX9770,超频至3.6GHz(400x9)。
从测试的过程可以看出,支持CUDA的Folding@home的性能非常强大,能明显的感觉到远超过CPU版本,测试结果也达到了669.7ns/day。这个成绩基本上是目前CPU的100倍左右,GPU强大的并行处理能力在这体现无疑。
8Photoshop CS4支持GPU加速
Photoshop CS4支持GPU加速
在加州圣克拉拉举行的2008年春季Editor's Day上,NVIDIA和Adobe带来了新的希望:代号“Stonehenge”(巨石阵)的Adobe Photoshop Creative Suite Next(也就是CS4)会加入对GPU、物理加速的支持。
如果您的计算机具有基于 AGP 或 PCI 的视频卡,则该计算机可能具有 GPU(图形处理器)。 如果您的 GPU 支持 DirectX 9.x、Pixel Shader (PS) 1.3 或更高版本,以及 Vertex Shader (VS) 1.1 或更高版本,则可以使用 GPU 加速效果,如“卷边”、“折射”和“波纹(圆形)”。 这些效果充分利用了 GPU 卡的增强视频处理功能,给图像增加了三维真实感。
有了GPU加速支持,用Photoshop打开一个2GB、4.42亿像素的图像文件将非常简单,就像在Intel Skulltrail八核心系统上打开一个500万像素文件一样迅速,而对图片进行缩放、旋转也不会存在任何延迟;另外还有一个3D加速Photoshop全景图演示,这项当今最耗时的工作再也不会让人头疼了。
根据我们最新了解的消息,Adobe CS4套装将在今年10月1日正式发布,其中当然包括支持GPU和物理加速的Photoshop CS4
9浏览图片让2D变3D
IE小插件Piclens让2D变3D
Cooliris推出的Piclens插件可以让google图片搜索以及youTube变为3D模式,通过用GPU硬件加速来实现图片浏览。但就是这么一个实用的小插件,没有GPU也是不行的。
当我们使用一块GeForce 9600GT进行GPU加速时,cooliris满速率运行可达60fps,但换用集成显卡时,这个数值还不到24fps,前后的差距至少达到了2.5倍,集显与独显的产品在日常应用中终于体现出来了。
10连PDF都需要GPU加速
连PDF都需要GPU加速
早在2007年,Adobe就与NVIDIA展开合作,推出了支持GPU加速的PDF版本,Adobe Acrobat 8及Adobe Reader 8系列产品提供全新的页面显示着色技术,利用GPU来加速PDF格式下的绘图及显示功能,除了在效能上有所增进外,还可以利用GPU的可编程特性,进一步加强PDF文件中的2D内容展示效果。
据Adobe平台产品营销总Pam Deziel表示,NVIDIA GeForce与Quadro GPU使用者可利用PDF档案进行更多样的作业,同时也能更有效率。包括平移、卷动、缩放等,实际上Adobe Reader 8每一项运用到GPU的功能都有着显著的效能增进。使用者过去避免使用的一些应用,例如可进行极精细比例缩放的地图,现在都可以轻易地显示。
同样一个容量达到50MB的期刊读物电子版PDF文件,在使用传统方式打开时,读取时间为8秒。而使用GPU硬件加速功能时,打开时间不超过3秒,且在浏览时不会有拖沓感,PDF文件也变得流畅异常了。
11查看地图更方便Google Earth
Google Earth独显与集显也有区别
Google earth,是一款3D地图显示软件,它能够将地球上某一区域的地貌,以3D图像的形式展现出来。很显然,这类软件将会逐渐成为我们今后生活的必备软件。
在Google earth的设置界面,如果你拥有一个性能强劲的显卡,那么可以将画质设置为最高,这是在没有GPU加速功能的PC上无法体验的速度感。
当我们以最高画质量为限查找地图街景时,带有GPU的PC系统可以流畅地进行地图缩放。而同样的场景、同样的搜索速度、同样的处理器,在没有GPU加速时,运转速度简直无法忍受,在Fraps显示的速率上,使用GPU加速和不使用GPU加速情况下,速度落差达到了几十倍之巨,由此可见,GPU的作用和意义绝不仅限于游戏。
12Google picasa显卡加速更强大
Google picasa显卡加速更强大
Google Picasa2是一款可帮助您在计算机上立即找到、修改和共享所有图片的软件,软件附带了常见的图片处理功能。
在使用NVIDIA显卡的电脑上使用Picasa软件,通过GPU加速,图片的拖放或文件夹切换,图片生成的速度都非常快,这跟我们采用NVIDIA的显卡是息息相关的。如果换用没有GPU加速的平台,搜索图片时生成速度是有明显差异的。
13浏览图片我最快PICTOMIO
PICTOMIO速度更快
Pictomio是一个类似于Picasa的图片浏览和管理软件,它提供了极其华丽3D图片浏览效果。如果PC中具备GPU,那么完全可以利用强大的GPU将浏览方式变更为3D模式,无缝缩放、渐变式切换,效果十分惊叹。但如果没有GPU,平面的交互效果实在是太过让人失望了。
如你所见,视频功能的日渐丰富是当今计算机发展的主流趋势,这些软件通过GPU 的提升可以明显的得到更快、更连贯的显示效果。而这些性能的改变单靠提升CPU的运算性能,是无法完全实现的。可以说,GPU强大的浮点运算能力转化为全新的应用方式,将成为PC机正在经历的一场全新变革;我们的数字生活也将会因GPU的改变而步入全新的视觉时代。
14实例应用:视频转换Badaboom
实例应用:GeForce 9500GT轻松压缩H.264编码
对于不少视频爱好者来说,追求高清已经是理所当然的事情,而将1080P的高清电影经过视频压缩放在手机等随身携带的视频播放器材中,随时拿来欣赏更是这类视频爱好者的必备追求。
但我们知道,就H.264来说,这类高清视频的码率都非常之大,用一般的视频压缩工具来进行是非常费时的,你虽然能够将电脑开通宵,打开软件工具来为一部高清视频转换编码压缩,但如果能够以更加简单、快捷的方法进行视频格式的转换压缩,无疑能够为视频爱好者节省大量的时间和经历。针对这类群体,nVIDIA提供的CUDA技术方案能够完满的解决这类用户的需求。
Badaboom就是一款专门以CUDA技术应用的视频压缩工具,而笔者亦亲身使用了目前最为主流的中低端显卡GeForce 9500GT,来对一部高达1.8G的H.264高清视频片段进行压缩,下面是这次关于CUDA应用的试用过程。
总结:CPU发展至现在已经相当成熟,GPU接下来需要做的,就是将应用层面发展至更广,来解放CPU在某些应用层上的工作,并行+顺序处理,将GPU和CPU灵活的结合起来,才能为用户带来更加方便、更加人性化的计算机处理体验。CUDA的出现将为未来的计算机领域带来一番新的景象,我们期望CUDA技术带来更多日常应用的解决方案。
15CUDA:主导GPU计算的革命
CUDA:主导GPU计算的革命
GPU超强的计算能力让它在通用计算领域大有可为,而CUDA则让它变成可能,简单易用的开发环境让CUDA主导起GPU计算的革命。
正如NVIDIA首席科学家David Kirk所说:“我认为CUDA已经取得了空前成功,它的接受程度令人吃惊。这也表明了人们希望对整台电脑进行编程的浓厚兴趣。过去人们往往是编写一个C程序来控制CPU,再编写一个图形程序来控制GPU。你一定想通过编写一个程序来控制CPU和GPU。因此我坚信,将来CUDA将变得无处不在。如果要对CPU和GPU进行编程并管理系统中的所有资源,那就没有理由不用CUDA。”
目前,包括中国科学院与清华大学的全球已经有多家知名研究机构与大学院校开展了CUDA教学等内容。
NVIDIA 目前支持 CUDA 的 GPU,其在执行 CUDA 程序的部份(基本上就是其 shader 单元)的架构。这里的数据是综合 NVIDIA 所公布的信息,以及 NVIDIA 在各个研讨会、学校课程等所提供的数据,因此有可能会有不正确的地方。主要的数据源包括 NVIDIA 的 CUDA Programming Guide 1.1、NVIDIA 在 Supercomputing '07 介绍 CUDA 的 session,以及 UIUC 的 CUDA 课程。
邓培智:从NVIDIA来说,我们还是很开放的,我们希望这个技术被更多人更多公司所采用,至于其他公司是不是会采用CUDA取决于两个方面:第一个是他们自己意愿的问题,第二他们GPU的架构是不是适合CUDA的运行。CUDA是C语言,你要能运行CUDA,你在架构上必须要有一些条件,这个的话,不是我们能控制的了的,但是到目前为止,只有NVIDIA的GPU能支持CUDA。
GPU的处理能你还会继续递增,那么如何更好的利用这个并行计算的巨大运算能力,GPU并行计算与CPU的异构处理器系统的合作处理数据也是未来的主流趋势。而主导这个变革的就是CUDA。随着CUDA的不断完善,还有越来越多人的开发者加入到CUDA的怀抱,支持CUDA的软件会更多的出现为我们服务,未来做亿万次的计算能力相信是很轻松的事情。更好的更多的视觉技术会出现在我们面前。