GPGPU调研详细报告_第1页
GPGPU调研详细报告_第2页
GPGPU调研详细报告_第3页
GPGPU调研详细报告_第4页
GPGPU调研详细报告_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于用于通用计算图形处理器调研汇报一.引言1.1GPU介绍GPU,即图形处理器(GraphicProcessingUnit),是一个相对于CPU概念,它专门用来在个人电脑、工作站或游戏机上处理图形,影像等运算微处理器。它是显卡心脏,和显卡板载内存成为一个子系统,共同决定计算机系统图形处理性能。越来越多图形应用使得GPU在当代计算机中作用越来越主要,在CPU主宰计算机性能几十年后,GPU近十年中快速崛起,甚至几乎达成了和CPU平起平坐地位。GPU是NVIDIA企业在1999年公布GeForce256绘图处理芯片时首先提出概念,在此之前,电脑中处理影像输出显示芯片,通常极少被视为是一个独立运算单元。而ATI亦提出VPU(VideoProcessingUnit)概念。GPU使显卡降低了对CPU依赖,并分担了部分原本是由CPU所担当工作,尤其是在进行3D图形处理时,功效愈加显著。GPU所采取关键技术有硬件座标转换与光源、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎,硬体T&L(TransformandLighting,多边形转换与光源处理)技术等,其中,硬体T&L能够说是GPU标志。1.2基于GPU通用计算传统上,GPU应用被局限于处理图形渲染计算任务,对于拥有先天强大并行计算能力GPU来说,这无疑是对计算资源极大浪费。伴随GPU可编程性不停提升,利用GPU完成通用计算研究渐渐活跃起来。将GPU用于图形渲染以外领域计算称为GPGPU(General-PurposeComputingonGraphicsProcessingUnits,基于GPU通用计算)。GPGPU通常采取CPU+GPU异构模式,由CPU负责执行复杂逻辑处理和事务管理等不适合数据并行计算,由GPU负责处理密集型大规模数据并行计算。这种利用GPU强大处理能力和高存放带宽填补CPU性能不足计算方式,在发掘计算机潜在计算性能,及控制成本和性价比等方面有显著优势。不过,传统GPGPU受硬件可编程性和开发方式制约,应用领域受到了限制,开发难度也很大。从系统架构上看,GPU是针对向量计算进行了优化高度并行数据流处理器,其中包含两种流处理单元:顶点处理流水线(VertexShader)是多指令多数据流(MIMD)处理单元,而像素处理流水线(PixelShader)则是单指令多数据流(SIMD)处理单元。这种以数据流作为处理单元处理器,在对数据流处理上能够获取较高效率,所以最近几年,很多研究人员开创了一个新研究领域,即GPGPU,其主要研究内容就是除了在图形处理这个方面以外,怎样利用GPU来进行更为广泛应用计算。最早GPGPU开发直接使用了图形学API编程。这种开发方式要求编程人员将数据打包成纹理,将计算任务映射为对纹理渲染过程,用汇编或者高级着色器语言(如GLSL、Cg、HLSL)编写shader程序,然后经过图形学API(Direct3D、OpenGL)执行。这种“曲线救国”方式要求编程人员不但要熟悉自己需要实现计算和并行算法,还要对图形学硬件和编程接口有深入了解。因为开发难度大,传统GPGPU并没有被广泛应用。,斯坦福大学IanBuck等人对ANSIC进行扩展,开发了基于NVIDIACgBrook源到源编译器。Brook能够将类似CbrookC语言经过brcc编译器编译为Cg代码,隐藏了利用图形学API实现细节,大大简化了开发过程。但早期Brook编译效率很低,而且只能使用像素着色器进行运算。受GPU架构限制,Brook也缺乏有效数据通信机制。二.基于GPU通用计算发展现实状况最先是ATI(现AMD)提出了通用计算概念,并抢先公布了自家通用计算平台Stream,但因为种种原因后续开发工作不是非常理想;而后NVIDIA企业开发了名为CUDA通用GPU计算开发包给业界,并小有结果,暂时处于领先位置,其定位于通用计算TESLA系列产品和CUDA架构已经开始得到大量应用。而英特尔方面也在紧锣密鼓地开发自己新一代显示芯片——Larrabee,一个集成了10个x86处理器图形显示单元,能够轻易将其转换为通用计算单元。另外,伴随AMD收购ATI,AMD也日益重视用于通用计算领域GPU产品这块蛋糕,在不停宣传自己通用计算产品和STREAM架构同时,还力推OPENCL发展。而OPENCL则是建立在不一样处理器架构上,比喻说x86CPU、CUDA架构GPU和STREAM架构GPU、Cell处理器乃至于ARM构架DSP处理芯片等等一个标准开放计算语言,得到了业界除了微软以外绝大部分厂商支持,因为微软有自己DirectCompute,一样支持基于不一样架构GPU通用计算。2.1NVIDIACUDA6月,NVIDIA推出了CUDA(ComputeUnifiedDeviceArchitecture,统一计算设备架构)。CUDA是一个将GPU作为数据并行计算设备软硬件体系。到现在为止,CUDA版本已经进行了三次版本提升,功效不停完善,能够很好地支持新硬件特征。CUDA不需要借助于图形学API,并采取了比较轻易掌握类C语言进行开发。开发人员能够从熟悉C语言比较平稳地从CPU过渡到GPU,而无须重新学习语法。当然,要开发高性能GPU通用计算程序,开发人员依然需要掌握并行算法和GPU架构方面知识。与以往GPU相比,支持CUDAGPU在架构上有了显著改进,这两项改进使CUDA架构愈加适适用于GPU通用计算。一是采取了统一处理架构,能够愈加有效地利用过去分布在顶点渲染器和像素渲染器计算资源;二是引入了片内共享存放器,支持随机写入(scatter)和线程间通信。2.1.1GT200硬件架构图2.1GPU处理关键架构经过NVIDIA旗舰产品GT200系列关键架构图能够看到,总共拥有十个流处理器阵列,每个阵列内部拥有8×3=24个SM(多核流处理器),其中每8个为一组组成SIMT(单指令多线程架构),并共享16K指令缓存,三组SIMT共享一级缓存。这么标量流处理器设计适合执行高度并行化指令,不论对于传统图形渲染,还是物理加速运算、大规模数据处理都游刃有余。所以,第二代统一渲染架构主要含义,就是将图形处理架构和并行计算架构完美结合起来,成为一颗真正意义上通用处理器,超越图形处理器概念在每个SM内部,除了包含8个SP(流处理器)之外,还有包含1个SFU(SpecialFunctionUnit,特殊功效单元),这个处理单元能够用来辅助SP处理特殊函数运算、插值属性顶点+像素着色、执行浮点乘法运算指令(MUL)。GT200关键每个流处理器都能够单独执行一条乘加指令(Multiplu-Add,也就是同时执行一条乘法和一条加法指令),与此同时SFU还能够在相同时钟周期执行另外一条乘法指令,相当于每个流处理器都能同时执行3条指令。GT200浮点运算能力计算公式为:流处理器数×指令数×频率=240×3×1296=933GFLOPS。NVIDIA将GT200关键设计成为图形渲染架构和并行计算架构统一体,对于Dual-Issue效率深入优化,达成了93%之高,这么双指令执行效率能够让GT200实际性能无限靠近于理论值。GT200关键每一个SM都包含了一个双精度64Bit浮点运算单元,这么GT200就相当于一个30关键双精度64Bit处理器,但GPU频率要比CPU低很多,所以GT200理论64Bit浮点运算能力大约与Intel顶级八关键至强处理器相当。双精度运算量是单精度八倍,所以理论浮点运算能力只有原来1/8,GT280双精度64Bit浮点运算能力大约在90GFLOPS左右。2.1.2CUDA软件架构CUDA主要提供了CUDAC和对应COMPILER,CUDA库,CUDARUNTIMEAPI和CUDADRIVERAPI。CUDAC其实就是C扩展;CUDA库包含了很多有用数学应用,如CUFFT等;CUDARUNTIME其实就是个JIT编译器,动态地将PTX中间代码编译成符合实际平台硬件代码,并作特定优化;CUDADRIVER则是直接对应API与GPU打交道接口;Nvcc编译器能够将CUDAC编译成纯C或者PTX或者GPUBIN。图2.2CUDA软件架构下面以GT200系列为例,分析一下CUDA运行情况,

在CUDA中程序执行区域分为两部分,CPU和GPU——HOST和DEVICE,任务组织和发送是在CPU里完成,但并行计算是在GPU里完成,每当CPU碰到需要并行计算任务,则将要做运算组织成kernel,然后分配给GPU去执行。CUDA在把任务正式提交给GPU前,会对kernel做些处理,让kernel符合GPU体系架构,能够把GPU想想成拥有上百个核CPU,把kernel当成一个要创建为线程函数,所以CUDA要将kernel创建上百个thread送到GPU中各个核上去运行,但为了愈加好利用GPU资源,提升并行度,CUDA还要将这些thread加以优化组织,将能利用共有资源线程组织到一个threadblock中,同一threadblock中thread能够经过shareDmemory共享数据,每个threadblock最高可拥有512个线程。拥有一样维度一样kernelthreadblock被组织成一个grid,而CUDA处理任务最大单元便是grid了。这是CUDA中能够使用内存种类:

registers(Read-writeper-thread)

localmemory(Read-writeper-thread)

sharedmemory(Read-writeper-block)

globalmemory(Read-writeper-grid)

constantmemory(Read-onlyper-grid)

texturememory(Read-onlyper-grid)

GridGridGlobalMemoryBlock(0,0)SharedMemoryThread(0,0)RegistersThread(1,0)RegistersBlock(1,0)SharedMemoryThread(0,0)RegistersThread(1,0)RegistersHost图2.3CUDA线程层次grid是怎样在GPU上执行呢?首先,每个SM最多能分配8个threadblock或者1024个thread,以待执行,然后将这些thread组织成warp,每个warp包含32个thread,因为SP执行延迟通常是4个周期,类似执行管线长度有4级,所以每个SP同时能够执行4条相同指令来充分消除这些延迟而一个SM中有8个SP,所以能够同时执行32个指令。可见GT200SM一次可执行不一样数据32条相同指令,而且能够同时乱序执行32个warp,因为很多指令执行都是有延迟,比如等候输入等,所以这时候就能够切换到另外一个不用等候warp指令执行了。很显然SM没有分支预测部分,也没有错误恢复机制,SM假设没有随机执行指令,所以在碰到分支时候,SM必须等候分支跳转地址计算完成才取下面指令,而后才开始继续工作。2.2ATISTREAMAMD/ATI企业在其GPGPU通用计算产品Stream中采取了Brook改进版本Brook+作为高级开发语言。Brook+编译器工作方式与Brook不一样,提升了效率。在推出Brook+1.3,在语法和编程模型上有显著改进,并具备有效线程间数据通信伎俩,遗憾是,因为推广不力,AMD将不再继续升级BROOK+,转而推进并支持OPENCL。

ATI流计算模型包含了一套软件系统以及ATI流处理器。下列图展示了ATI流处理模块之间关系:

图2.4ATISTREAM架构ATI流计算软件为客户端用户提供了一个灵活完整接口,从而使开发人员充分利用ATI硬件特征进行流计算。

软件主要分为下面几个模块:编译器:把Brook+内核代码编译成为独立C++文件以及IL代码。流处理器设备驱动:ATI流计算抽象模型(CAL)。性能分析工具:StreamKernelAnalyzer,能够及时编译Brook+,IL代码,而且分析程序性能。性能库:AMD关键数学库(ACML),这部分是专用于特定领域。在最新一代ATI流处理器中,编程模型应用一个通用Shader语言。可编程流处理器能够执行用户指定各种程序,这些程序被称为内核函数(Kernel)。这些流处理器能够以一个单指令多数据(SIMD)形式执行一些与图形完全无关任务。这种编程模型被称为流计算,内存中存放大量相同类型数据能够被分配到不一样SIMD引擎中进行处理,从而生成输出数据。每一个在SIMD引擎中被处理实例被称作为线程(Thread)。在每个Pass里,能够有大量线程被映射到一个矩形区域中,这个矩形区域被称为执行区域(DomainofExecution)。流计算处理器为每组线程都分配到一组线程处理器(ThreadProcessor)中,直到全部线程都被处理。只有之前线程完成计算之后,后面线程才能够得四处理。下列图为一个简化ATI流计算模型:

图2.5STREAM架构流计算模型

图2.6流处理器简易模型上图为ATI流处理器简易模型。不一样型号GPU会有不一样性能参数(比如SIMD引擎数量),不过基本都是一样模型。一个流处理器里面包含很多SIMD引擎。每个SIMD引擎又包含了很多Thread处理器,每个线程处理器能够对于独立数据进行内核所要求操作。线程处理器还不算是最小处理单元,一个线程处理器里面还包含了一定数量流计算关键,这些关键才是最基本进行处理单元,他们能够进行整数,单精度浮点数,双精度浮点数等操作。在同一时间内,一个SIMD引擎中全部线程处理器都执行相同指令集,不一样SIMD引擎是能够执行不一样指令。

图2.7ATISTREAM硬件架构一个线程处理器中能够同时最多处理五条指令。我们看到上图中,一个线程处理器中有五个Streamcore。其中一个是能够计算超越函数,剩下四个能够同时计算当精度浮点数。双精度浮点数处理是经过把四个streamcore合起来才能够处理,所以相对来说要慢一些。除了streamcore,每个线程处理器实际还包含一个流控制器,他能够处理一些条件分支情况。不一样型号GPU细节参数都是不一样。比如,在ATIRadeon3870GPU(RV670)这款GPU里面一共包含了4个SIMD引擎,每个SIMD引擎里面有16个线程处理器,而且每个处理器里面有5个streamcore。一共是320个物理处理关键单元。但同一个cycle中,每个SIMD引擎中全部线程处理器都必须执行同一指令。为了隐藏内存访问所带来延迟,线程在发送了内存访问命令之后会被立刻切换。GPU流处理器里面Cache并没有CPU多,对于内存访问优化是经过线程之间切换来进行。在一个线程处理器中,每4个cycle中,实际能够对于线程处理器指定四条指令。比如,还是刚才那个3870例子中,16个线程处理器执行一样指令,每个线程处理器中能够一次执行四条指令(因为每个线程处理器中有4个streamcore)。实际上,从外部看,3870SIMD引擎能够同时处理64条指令。被同时执行全部线程集合被称为wavefront。这里面我们能够了解为3870wavefront大小是64。wavefront大小是依照GPU型号不一样而可变。比如,HD2600和HD2400wavefront大小分别是32和16,而AMDFireStream9170wavefront大小就是64了。在ATI流计算模型中,有三种内存模型:host端内存:这部分内存就是host程序数据内存等。他能够被host端访问,不过不能被GPUkernel访问。PCIe内存:这部分内存能够被host端或者GPU端访问,不过要做好同时工作。在CAL里面要用calCtxIsEventDone函数,Brook+和OpenCL都已经把这些内容透明了,用户能够无视。Local内存:这里局部是相对于GPU来说,那么很显然,这种内存是能够被GPU访问,不过不能被host端访问。有三种方式能够拷贝内存到流处理器内存(局部内存)中:经过calResMap经过calCtxMemCopy经过一些自定义内核函数从PCIe内存中拷贝。高效流处理器分配机制能够很好隐藏内存访问所带来延迟。访问全局内存cycle数量级在200左右,而访问sharedmemory或者register就会在几个cycle内搞定。这个差距是非常大。所认为了能够有效隐藏全局访问延迟,我们需要让计算更密集。就是说在尽可能少访问内存情况下,多进行计算操作。另外还要有足够线程数量,上面例子是个最简单例子,访问全局延迟远远要大于四个指令读取命令。一定要尽可能确保线程数量足够,这么才能最好利用GPU硬件特征。当然,这里绝对不是说为了愈加好利用硬件,要增加一些无关计算,以及一些无用线程。线程当然是越少越快,不过假如少到一定程度,甚至比streamcore数量还要少,GPU利用率是非常低。2.3INTELLarrabeeLarrabee将是Intel第一款独立图形处理器。它将是一款能够执行和多核CPU一样任务、不过经过提供更多处理数据通道来交付更多并行性多核处理器。Larrabee与AMD、NVIDIA通用计算图形处理器技术不一样,后二者使用StreamProcessing(流处理)来满足对GPU计算需求。而Larrabee基于传统x86架构,是一个可编程多关键架构,不一样版本会有不一样数量关键,并使用经过调整x86指令集,性能上将会达成万亿次浮点运算级别。值得注意是,Larrabee中处理关键为次序执行关键,与CPU中乱序执行关键不一样。在Larrabee内部,每一个处理关键都能够发出2条指令,这种架构是继承了最初飞跃处理器设计。首先Larrabee架构具备衍生自双指令执行Pentium处理器纯量管线,并采取具备完整连贯性高速缓存架构短执行管线。Larrabee架构提供显著最新改良技术,如宽幅向量处理单元、多线程、64位延伸指令,以及精密指令预取功效。这将促使可用之运算能力大幅提升,并能发挥程序设计师对英特尔架构熟悉度及轻易入门程序开发优势。同时Larrabee执行流水线阶层非常短,最初Pentium处理器执行流水线仅有5个阶层,这意味着拥有不错运算效率。Larrabee将包含数个支持绘图及其余应用程序固定功效逻辑区块,这些运算单元被慎重选取以平衡及强化每瓦效能,并对架构弹性与可编程化能力有所贡献。Larrabee原生程序设计模式支持高度平行运算应用程序,亦包含采取非规则性数据结构运算。这项特征将促使绘图API开发、新绘图算法更加快速创新,以及在绘图处理器上执行以现有个人计算机软件开发工具软件所实作之真正通常目标运算。图2.7三种架构对比在算矢量处理单元部分。Pentium因为设计年代久远,未曾出现过SIMD单指令多数据单元,而Larrabee在这方面有了巨大飞跃,支持16路矢量ALU算数逻辑单元。其运算效能非常强大,这16路能够同时执行32bit浮点操作,这比INTEL所生产过任何处理器都要强大许多。介于Larrabee本身架构优势,这些矢量单元会愈加好发挥其作用。INTEL在指令预取方面会为Larrabee做更多海量并行数据处理方面优化。Larrabee全部超强性能,都是基于这16路矢量ALU逻辑运算单元。这仅仅是Larrabee一个关键,当它用于处理3D图像时候,其内部还有很多关键在并行工作。另外,INTEL还对Larrabee架构指令集扩展进行了优化改进。比如16-Widevector指令,streamprocessing最好化缓存控制指令等。另外64-bit指令也得到了支持。简单得说就是以x86基本指令集为基础加上适当streamprocessing指令。另外听说当前GPU原生指令集与CPU指令集非常相同。INTEL关于Larrabee指令扩展并没有进行详细介绍。GPU也有L2缓存因为基于Pentium处理器架构,所以Larrabee一样沿用了完整L1/L2缓存设计。在显存控制器方面,AMD和NVIDIAGPU使用是64bit显存控制器,而且在芯片内只有一组控制器。鉴于INTELLarrabee采取多关键设计,内部需要更多显存带宽,Larrabee将采取1024-bit双向环形总线,单向传输位宽为512-bit。在加上GDDR5显存助力,Larrabee将会有不错性能表现。Larrabee支持超高速相关性缓存,而且能够跨越关键通信。L2高速缓存能够被分割为2个部分,同时能够用环形总线保持他们数据一致性。这么能够促进信息愈加好被传递,也让繁重数据处理变得愈加轻松。假如Larrabee全部处理关键都经过一个双向环形总线连接,每个方向提供512bit位宽。这条总线工作频率,可能与Larrabee主频相同。我们假设一下Larrabee运行频率为2GHz以上,那么这条总线将会提供非常高带宽吞吐量,而且它工作频率要远远高于AMDGPU。除此之外,Larrabee还同时能够支持4路硬件线程。而Larrabee也能够在CPU内关键进行4组套转换。INTELCPU比如Nehalem都支持2-way多线程,Larrabee则为4-waymulti-threadCPU。而GPU产品中支持多线程则极少。GPU产品通常配置有数十以上线程硬件转换功效。比如GeForceGT200在32存放器/线程时转换为16warp。依照Larrabee资料,硬件多线程设计是为了在进行编译时候降低二级缓存等候时间为目标。这与GPU硬件多threading不一样。另外Larrabee硬件多线程比GPU少原因是架构上不一样。值得注意是,INTEL指出Larrabee“全方面支持IEEE标准单、双精度浮点运算”。相较于GPGPU来说,它最大优势就在于采取了大家熟悉x86架构。现在多数软件工程师仍不熟悉怎样将GPU应用在多任务处理及平行运算上,这点就占了不少优势。但遗憾是,Intel近日表示将推迟Larrabee图形处理器商业公布,原本Intel计划在明年推出这款芯片,现在也没有公布新公布日期。Intel最初计划在开始销售这款多核芯片,不过现在日程却落后下来,Intel表示这款芯片还处于开发阶段,并仍将致力于交付这款图形芯片,并将在明年深入讨论这一计划。Intel将在明年公布面向开发者Larrabee样本,以及一系列写入和测试针对这款芯片工具。2.4OpenCL

双核处理器计算机主导市场已经快有5个年头了,但为数众多应用软件到现在为止仍不能很好支持双核CPU,就算能够支持双核,在未来面对四核、八核或更多关键处理器时又要重新开发。这个问题都是因为平台差异造成,也正因为这种差异存在,严重降低了软件在各个平台之间移植和运行效率,为了处理这个问题,6月中旬,负责推广OpenGL等开放式行业标准KhronosGroup宣告,它将正式组建一个工作组,起草针对CPU和GPU这么异架构系统进行并行计算编程无偿开放式API标准OpenCL(OpenComputingLanguage,即开放计算语言)。

OpenCL是第一个面向异构系统通用目标并行编程开放式、无偿标准,也是一个统一编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便代码,而且广泛适适用于多关键处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其余并行处理器,在游戏、娱乐、科研、医疗等各种领域都有宽广发展前景。

图2.8OpenCL想成为各种处理器应用一个交集正因为Apple等很多大企业支持,OpenCL从项目立项到去年12月份公布1.0标准,之间仅用了6个月时间;而且现在宣称支持OpenCL,并参加其中组员几乎涵盖了全球主要处理器、计算芯片供给商。

图2.9已经宣告支持OpenCLIT企业为了确保通用计算,OpenCL从五个方面进行了要求,这其中现有硬件平台,也一样包含有软件平台。1.系统调用全部硬件资源首先,OpenCL能够调用系统内全部计算资源,也就是说不论是CPU、GPU,还是今后额外加入协处理器,全部都能够在公共计算平台上得到调用。今后用户在使用基于OpenCL标准编写程序时,再也不会出现CPU占用率100%,而GPU占用率仅有1%这么不平衡现象了。在此基础上,OpenCL还要加紧运算速度并提升运算效率,这个特点有点类似与现在分布式计算(也称为“云计算”)——不一样地方在于,云计算将庞大运算任务分拆为很多小份,然后分配给互联网上各台计算机;而OpenCL要做事情是将电脑中一个或者多个运行程序按运算量,平衡分配给系统中各个运算部分。图2.10OPENCL架构OpenCL将系统中存放器抽象成一个全局内存模型,比如我们使用计算机有4GB内存、1GB显存,但在OpenCL看来就是一个5GB存放器整体。不光是PC系统,对于嵌入式设备中常见ARM、DSP、MIPS等处理关键,OpenCL也能够提供良好支持。假如嵌入式处理器中集成有支持OpenCL规范3D、视频加速模块,这些模块将饰演与ARM协处理器类似角色,深入加强系统性能。为了达成各种处理器平台集中调用,OpenCL会将系统中各个处理器或者处理关键看作一个个处理单元。每个处理单元既能够自行处理数据,又能够经过OpenCL内核进行相互交流、提升工作效率。换句话讲,程序员在写程序时候面向是OpenCL内核,他不用去管这个程序需要调用CPU,又或者调用GPU,将这些事情甩给OpenCL内核去完成就能够了。2.也是C扩展对计算机编程有所了解人都知道,现在计算机语言种类繁多,最基础机器语言生涩难懂,所以程序员们多使用高级语言。在高级语言中,又以C语言用途最广、历史也非常悠久,不论是微软C++语言,又或者NVIDIACUDAAPI都基于C语言架构体系。所以OpenCL也将C语言作为并行程序模型基础,这么能够让广大程序员轻松上手,并加紧OpenCL程序研发速度以及确保可移植性。3.与现有软件体系通用OpenCL能否打开市场关键原因就是能否实现与现有软件资源对接,并快速推出新软件。举个最显著例子,能从OpenCL中获益最大当属GPU通用计算程序,一直以来GPU硬件发展和OpenGL(及其它3DAPI,如DirectX)都是相辅相成;所以,OpenGL即使只是面向3D处理领域程序接口,但其调用GPU资源能力和效率是毋庸置疑。在此基础之上,OpenCL在制订详细规范时,就能够充分利用OpenGL现有一些特点,“依葫芦画瓢”,从而能够以更加快速度和更高效率来完成GPU通用计算程序。4.实现硬件平台上通用正如文章开始时所说那样,现在软件开发商往往要针对多个平台开发同一款软件。这么一来,参加开发程序员就要吃透每一个硬件平台结构和开发特征,这么才能做出发挥该平台特点软件产品。毫无疑问地说,这是一个痛苦过程,不但要极大提升软件开发成本,也会因为开发周期过长而失去市场先机。OpenCL就很好地考虑到这点,在未来融入OpenCL设计软件将大大提升其跨平台时兼容性,不但要在PC、游戏主机、服务器这么大块头上实现通用,还要向下囊括掌上设备以及嵌入式平台,即各种便携游戏机、智能手机等等。我们能够构想一下,未来程序开发人员只需要编写一套程序安装包,然后用用户自行对照自己硬件条件,经过调整相关设置来实现不一样体系平台、不一样性能平台之间程序通用性。这么一来,OpenCL在实现通用计算同时,也完成了在各个硬件平台上跨平台运行。5.承前启后,向上兼容在PC(x86)平台上,各类软件能够说95%以上实现向上兼容,为了确保程序延续性,OpenCL标准在制订之初就考虑了向上兼容问题,这点相信也是从x86架构上得到启发。OpenCL开发人员表示,经过可扩展API以及通用库文件来确保未来新硬件平台也能够运行今天软件。这么就让OpenCL有了愈加好平台延续性,为未来发展扎实了基础。OpenCL并不是第一个基于通用计算标准,不过三家竞争激烈半导体巨头,在支持OpenCL问题上却出奇一致。即使现有通用计算平台已经在分布式运算、视频加速方面取得了一定进展,不过利用GPU或者是其它处理器进行通用计算依然是一个新兴市场。假如没有一个强有力通用开放协议来支持,任何企业都难以凭借一己之力快速和有效推广通用计算理念。有了OpenCL支持,通用计算市场这块蛋糕将会快速膨胀,这对于任何一家参加其中企业来说,都远远优于独自推广自己专属平台。即使OpenCL现在只是一个襁褓中婴儿,处于主流操作系统(微软)不支持、软硬件开发未上正轨阶段,不过不论怎样,OpenCL向整个IT业走向通用计算大路上迈出了主要一步。按照其描绘蓝图,未来软硬件都将从全平台加速中取得极大性能提升。以IT产业发展速度,相信在很快未来,OpenCL和通用计算必将贯通整个IT产业,带来系统设计和搭配新理念,并大幅提升硬件系统性能功耗比。

2.5directcomputer在OpenCL组员当中,缺乏了一个有分量名字——Microsoft,其实微软自有打算。微软DirectCompute是一个全新GPU计算应用程序接口(API),运行于GPU架构之上,它与OpenCL一样,为开发人员提供了并行计算API。当前DX10GPU以及未来DX11GPU都能够支持DirectCompute。它让开发人员能够利用GPU大规模并行计算能力,创造出引人入胜消费级和专业级计算应用程序。在3月于美国加州旧金山举行游戏开发者大会(GDC)上,NVIDIA率先展示了预定年底推出DirectX11中主要功效即关于并行计算功效DirectCompute,NVIDIA展现三款Demo运行于NVIDIA现有CUDA架构上,WindowsVista和Windows7皆适用。现有DX10类GPU和未来DX11CUDA架构皆将支持DirectCompute,这让开发人员能够充分利用NVIDIAGPU强大平行运算能力。DirectCompute在现在两亿颗DirectX10GPU和未来DirectX11GPU上运行良好。我们知道,下一代主流操作系统Windows7关键组成部分首次包含了GPU(图形处理器)计算,这也意味着GPU不再仅用于图形。在Windows7中,CPU与GPU组成了协同处理环境。它们分工是,CPU运算非常复杂序列代码,而GPU则运行大规模并行应用程序。所以,CPU与GPU功效平衡,能够提供更加快、更可视化用户体验。而Windows7中增添最主要一个组成部分,就是针对GPU支持运算应用程序DirectComputeAPI。这种API使用户能够享受非凡视觉体验和互动体验,比如高质量视频、照片等娱乐方式、方便快速与设备互动、反应更加快更灵敏电脑、逼真游戏效果等。双核处理器早已经成为PC系统标准配置,三核、四核更是进入主流市场,然而,现在只有为数不多游戏产品能够对多核平台提供良好支持,原因在于为多核平台编程十分困难,只有高水准开发者才能够胜任,但显然并不是全部游戏企业都有这么一流好手。所以,直到今天为主,仍有很多数游戏都还只能在单线程下工作,即只能支持CPU单核运作,其它关键计算力无法得到充分发掘。只要开发者采取DirectX11作为开发平台,那么代码本身就能直接支持多核平台,DirectX11在底层接管了多核平台资源分配问题。DirectX11预示着多线程游戏真正步入现实,我们才能够说多关键处理器被真正派上了用场。对于一套四核游戏平台,当某个渲染场景中有些人像和它三个镜像,DirectX11就会开启四个线程进行并行处理,效率显然要比现在单线程处理方式快上数倍。而更令人兴奋是:多线程技术不但适适用于DirectX11平台,它同时也能够让现有DirectX10硬件受益。比如说基于DirectX11开发新款游戏,能够很好支持多线程,而当它在DirectX10硬件平台上运行时,多核优化机能依然有效,前提是AMD和NVIDIA必须为各自DX10硬件开发出对应驱动软件才行——就现在看来,这项工作进展非常顺利。在DirectX11中,HLSL(MS'sHighLevelShaderLanguage,微软高级程序语言)也被升级到5.0版本。HLSL与C语言比较类似,新版本改进就是新增了类(Class)和接口(interface)支持,实现了面向对象支持。这么升级显然顺应了时尚,不过我们相信依然会有很多程序员表示不满,因为HLSL5.0依然还不支持指针功效。

DirectX11技术改进是渐进式,并紧紧围绕着开发者需求,多线程、Tessellation镶嵌化技术、ComputeShader通用计算着色器、面向对象HLSL5.0,这些特征都极具实用价值,开发者没有拒绝理由。在微软定义中,GPGPU和数据并行处理属于一样概念,它们能够经过GPU新并行处理模式ComputeShader来实现,ComputeShader整合在Direct3D之中,能够支持更多通用架构,通用数据结构和通用算法。ComputeShader主要特征包含以下几个方面:一是可预测线程调用。二是在线程之间共享存放器,从而减轻存放器压力,降低无须要计算和I/O。三是离散写入,增加了灵活性,能够读/写任意数据结构,允许加入新算法以及整合Direct3D资源。它目标应用包含图像/后处理、物理效果、光线追踪、A-Buffer/OIT以及人工智能等等。ComputerShader并不像顶点着色器(VertexShader)和像素着色器(PixelShader)那样作为管线一部分,而是与管线整合在一起。从管线输出场景图像经过ComputeShader加工(比如加上光线追踪效果或者物理加速效果),最终输出成为最终图像。我们已经看到,一些新近上市应用程序能够利用GPU(图形处理器)计算能力。它们展现了大幅性能提升。DirectCompute将让开发人员能够更轻易地编写应用程序以及为数以百万计更多用户带来这些优势、提升数字媒体应用程序性能。DirectCompute经过让数以百万计Windows7操作系统用户都能够触及这项技术,将使GPU计算从小众市场迈入主流。“这当然意味着,在软件行业中,编写可利用GPU(以及愈加好地利用多个CPU关键)特定种类应用程序将变得愈加普遍。不论是OpenCL、DirectCompute还是GPU特有开发套件,GPU计算都将成为计算行业向前发展一支主要力量。”2.6小结让GPU进行通用计算已经显示出广泛应用前景,NVIDIA和AMD都推出了相关处理方案。伴随OpenCL公布,计算将迈上一个新台阶,它将掀起GPU和CPU革命高潮,这就是异构化计算API时代。现在,AMD和NVIDIA两家企业都已经推出了用于通用计算硬件平台,还发展出Stream和CUDA架构。不过,在开发者和硬件之间还有一条巨大鸿沟——怎样让一样程序运行于不一样厂商平台上,而OpenCL这个API出现,将填平这道鸿沟。就如同3D游戏,用户不论用哪家厂商显示芯片都无所谓,只要芯片能够支持游戏使用API就足够了。另首先,在英特尔努力下,Larrabee脚步已经离我们越来越近,这种划时代CPU架构看起来像是CPU和GPU混合体。在OpenCL问世之前,NVIDIA已经推出了CUDA架构,而且出售了使用GPU芯片进行并行计算Tesla系列计算产品。CUDA属于架构范围,如同处理器X86架构一样,它包含指令集ISA和硬件计算引擎,还包含一款C语言编译器,并支持C/C++/FORTRAN/OpenCL/DirectX11等通用语言和API。12月10日,在OpenCL公布之后两天,NVIDIA宣告CUDA支持OpenCL。

尽管如此,NVIDIA依然希望在OpenCL或者DirectX11之外保留自己一些东西,尤其是CUDAC语言,它是C语言扩展,能够用于CUDA平台计算工具开发。CUDAC语言更适合使用高级C语言用户,通常程序员不需要熟悉图形语言就能够使用CUDA,而OpenCL则可访问较低层次硬件。经过生成PTX代码,最终这些代码被GPU执行。现在在异构化计算进度上,AMD比NVIDIA稍显落后。AMD也更紧迫地宣告了Stream将支持OpenCL,而且将努力推进API开放进程,同为KhronosOpenCL工作组关键组员,AMD显然更不愿意看到竞争对手CUDA坐大。所以极力支持OPENCL标准,现在AMD方面一样支持OpenCL最新版本。从定位来讲,OpenCL重视是给出一个开发平台,只要是支持OpenCL硬件,不论是GPU,还是CPU,甚至DSP芯片等,都能够运行在这个平台上开发软件,不需依赖于特定硬件。而现在DirectCompute则更关注与Direct3D中图形运算部分紧密配合,给用户带来愈加逼真效果,GPU平台上应用才是它强项。在Windows平台上,DirectX占据显著优势,尤其是游戏领域,继续使用DirectX11才是最好方法。对于应用软件而言,到底是采取ComputerShader,还是OpenCL,或者是CUDAC语言以及Brook+,要看开发商详细情况。比如对高清编辑、图形图像方面应用,能够通用于多家GPU平台ComputerShader和OpenCL可能会受到欢迎。在非Windows平台上,OpenCL将起到更主要作用,它或许会囊括移动和嵌入式平台娱乐应用以及科学计算等领域。Larrabee采取可编程方式实现图形运算,即使它是如假包换CPU,但在某种意义上,它也是一个“软件GPU”。从图形管线历史发展示意图中能够看到,可编程化趋势是自DirectX7以来时尚,而Larrabee能够用软件虚拟出除了材质部分以外DirectX10图形处理管线,对于DirectX11、OpenGL以及OpenCL等API,Larrabee也能经过不一样程序实现它们,这种方式可能代表了未来时尚。三.GPGPU发展趋势3.1并行处理大趋势对于CPU未来发展,因为摩尔定律即将抵达极限,不论从制程角度还是发烧量问题,都使得经过提升主频来加速计算变得不那么实惠。Intel和AMD也很早就意识到了这个问题,所以将目光投降了多核CPU。并行处理器,这个原本只有服务器和大型机才有技术,如今也飞入了寻常百姓家。这种变革影响,对整个信息产业,从底层硬件到上层软件,都是非常深远。多核(MultiCore)发展是处理器并行归宿,也是真正意义上可连续发展CPU并行处理方向。因为不论是流水线还是超线程,都是对单关键运算潜力挖掘,性能提升总会榨干或者极难继续榨一天。另一个很大不一样是,流水线和超线程只需要CPU内部优化,上层程序不需要任何改动即可坐享受性能提升;而多核应用中,编译器和软件中并行算法会占有更主要地位。可是一旦变革完成,实现完整可扩充多核架构,就能够不停添加内核和改良软件算法迎来按级数增加性能大提升时代。全球著名电子技术类期刊《EE

Times》评选出十大新兴技术中,并行处理技术名列其中,并认为“并行处理技术已经以双核和四核个人电脑处理器以及用于嵌入应用多核异质处理器形式存在。不过,业界迄今仍对多核处理器怎样编程,以及怎样充分发挥其运算能力与功率效率知之甚少。自多核处理器问世以来,这便是信息技术关键问题之一,困扰着整个业界,至今仍未得到完全处理。现在,OpenCL、Cuba等倡议向我们描绘了美好前景,提出了将图形处理器用作通用处理器以及现场可编程门阵列(FPGA)和软件可编程处理器阵列前景。”在双核伊始时候,曾有一期《程序员》专题讨论双核处理器和并行\o"软件资讯"软件设计方法,感觉未来软件工程师一定要知道怎样为多核处理器写程序才能够。但4年过去了,对于大部分软件工程师好像一切都没有什么改变。但大多数人还没觉察,我们正在经历着整个计算架构变革,美国试验室小伙子们,早就开始研究怎样高效利用1000个内核处理器海洋(Seaofprocessors),微软正在向.netframwork添加更完善并行类库和支持,云计算、虚拟化市场也正野心勃勃准备迎接真正多核时代暴发性发展。当CPU进入双核多核,软件架构进入分布式计算云计算时代后,他们共同点并行计算逐步成为一个新热点。在这个大背景下,GPU并行处理能力无疑会引发业界极大重视,NVIDIA总裁甚至鼓吹GPU将主导并行计算,即使有些言过其实,不过GPU必定会在通用计算领域占据一席之地。3.2分久必合,GPU与CPU趋于融合\o"CPU"CPU设计宗旨就是要从指令流中得到最高处理效能,即要用最短时间完成一项任务,这就是串行计算,但串行计算架构\o"CPU"CPU天生就不适合高性能计算领域所强调并行计算工作,这是为何\o"CPU"CPU现在成为了高性能计算性能提升瓶颈。相形之下,始于图形处理\o"GPU"GPU一开始就是被设计来处理大规模并行计算,数千万多边形和像素并行处理使得\o"GPU"GPU在发展同时不停地加入更多处理关键并完善并行处理能力。INTEL中央架构与规划部门总经理庞思立(StephenS.Pawlowski)谈到,CPU引入多线程、多核、众核等技术,并行性能也是越来越强,在向高吞吐量计算演进,而GPU也不再受限于以往固定功效,在向通用计算演进,但这两种架构都需要有好可编程性,而实际上,程序员们已经习惯了X86架构,所以,最终这两种架构会走向融合,也就是说,不论用什么样硬件,软件开发人员都能够使用IA指令集来编程,让软件能够同时跑在CPU和GPU上面,而不是象现在这么需要分别针对这两种架构去编程。正是基于此,英特尔计划推出其GPU产品Larrabee和同时支持CPU与GPUCt编程语言。IntelClarkdale/Arrandale将会实现将显示关键与处理器关键封装在一起,在时,SandyBridge将会晤世。对此,AMD行动并未落后,AMD自从收购ATI之后,已经成为全球唯一一家能够提供CPU、GPU和芯片组厂商,AMD企业早在就公布了“Fusion”计划,而后又把宣传口号变为“TheFutureisFusion”,同时打造Fusion品牌。AMD将会于推出首款代号为LlanoFusion处理器,该处理器将会基于32nm工艺,由Globalfoundries负责生产。Llano将会集成四个处理器关键以及一个图形处理关键,不过AMD将其称为APU(AcceleratedProcessingUnit)。它目标是将经过图形处理器实现具备照片真实感图像和中央处理器强大处理功效融合为一体。AMD认为:“融聚战略也印证了这一点,用户和市场需要不再是单纯处理器性能,而是在卓越平台、出众GPU以及AMD将率先推出Fusion芯片所能够帮助客户提升竞争力能力。”针对此方案,AMDCTOHester表示:“X86指令集通用性当然愈加好一些,但它执行效率并不好,并不适合高性能并行计算处理。”所以,AMD采取分离设计,将GPU指令集整合于CPU之内,作为CPU指令集补充。NVIDIA首席科学家Kirk博士似乎也表示了一样看法,他认为X86交换性会给流处理器设计带来难度,而NVIDIA则是针对GPU开发适合流计算架构。很显著,NVIDIA和AMD都不可能轻易向英特尔指令集妥协,彼此在未来高并行性计算领域竞争是能够预见。3.3GPU性能成长空间依旧巨大图形处理器(GPU)用于通用计算(GPGPU)及其相关方面问题现在已成为一个热门话题。实际上,整个IT产业都已经敏锐地意识到了GPU通用计算将给PC带来革命性改变,进而影响到CPU发展。所以,不论NVIDIA、AMD,还是英特尔,都纷纷投身这一领域,从而拉开新一轮技术竞赛序幕。近日,AMD旗舰产品RV870已经超越NVIDIAGT200系列,RV870单精度浮点运算能力为2720GFLOPS,双精度浮点运算能力为单精度1/5,也高达544GFLOPS。GT285单精度浮点运算能力为1063GFLOPS,但双精度下降为1/8,仅133GFLOPS。而NVIDIA则表示将在推出新一代旗舰产品FERMIGT300系列,将大幅度提升处理能力,尤其是通用计算方面,下面简单介绍一下。图3.1Fermi基本计算单元FERMI全部流处理器现在都符合IEEE754-浮点算法(Cypress也是如此)和完整32位整数算法。同时全方面引入还有积和熔加运算(FusedMultiply-Add/FMA),每循环操作数单精度512个、单精度256个(G200仅支持单精度FMA)。全部一切都符合业界标准,计算结果不会产生意外偏差。双精度浮点(FP64)性能大大提升,峰值执行率能够达成单精度浮点(FP32)1/2,而过去只有1/8,双精度预计可达624GFlops。G80/GT200都是8个流处理器组成一组SM(StreamingMultiprocessor),Fermi增加到了32个,最多16组,少于GT20030组,但流处理器总量从240个增至512个。除了流处理器,每组SM还有4个特殊功效单元(SpecialFunctionUnitSFU),用于执行抽象数学和插值计算,GT200每组SM都有16KB共享内存,由其中8个SP使用。它们不是缓存(cache),而是软件管理内存(memory),能够写入、读取数据。为了满足应用程序和通用计算需要,Fermi引入了真正缓存,每组SM拥有64KB可配置内存(共计1MB),可分成16KB共享内存加48KB一级缓存,或者48KB共享内存加16KB一级缓存,可灵活满足不一样类型程序需要。整个芯片拥有一个容量768KB共享二级缓存,执行原子内存操作(AMO)时候比GT200快5-20倍。Fermi全局分配逻辑则能够向整个系统发送多个并行内核,应用程序在GPU和CUDA模式之间切换时间也快得多了,NVIDIA宣称是GT20010倍。外部连接亦有改进,Fermi现在支持和CPU之间并行传输,而之前都是串行。NVIDIAFermi存放器文件、一级缓存、二级缓存、DRAM全部完整支持ECC错误校验,这一样是为Tesla准备,之前我们也提到过。Fermi统一了寻址空间,简化为一个指令,内存地址取决于存放位置:最低位是当地,然后是共享,剩下是全局。这种统一寻址空间是支持C++必需前提。GT80/GT200寻址空间都是32-bit,最多搭配4GBGDDR3显存,而Fermi一举支持64-bit寻址,即使实际寻址只有40-bit,支持显存容量最多也可达惊人1TB,现在实际配置最多6GBGDDR5。NVIDIAFERMI主要技术特点总结:-支持下一代IEEE754-双精度浮点标准-支持ECC(错误校验码)以提升可靠性和精准度-一级、二级多层缓存体系-支持C++编程语言-支持最多1TB系统内存-并行内核执行、快速上下文切换、10倍速度原子指令、64位虚拟寻址空间、系统调用与递归函数NVIDIA首席科学家、高级副总裁WilliamJ.Dally在近日设计自动化会议(DAC)上发演出讲指出,GPU浮点计算性能今后会每两年翻一番,从而在达成20TFlops,是当前最高水平大约15倍。GPU图形关键现在拥有几百个处理关键,多年后就会提升一个数量级,确切地说有望在六年后增加到大约5000个之多,拥有20TFlops浮点性能。单就NVIDIA而言,从55nm工艺、240个流处理器(GT200b)进步到11nm和5000个,中间必定会经历架构上革命性改变。经过长达、每年52%改进,单线程处理器(CPU)性能提升在就已终止,不过GPU这种并行处理器仍能每年带来超出70%性能提升。过去间,\o"GPU"GPU计算能力飞速发展,基本上平均6个月就性能翻倍,预计\o"GPU"GPU浮点性能将每两年翻一番3.4GPU通用计算成为教育科研热点截止到现在全球已经有超出250所大学开设了CUDA编程和GPU计算课程,仅在上个季度CUDA开发工具包就被下载了超出90,000次。据统计,全球超级计算研究中,有12%论文是基于NvidiaGPU。在全球掀起GPU计算浪潮同时,中国科研院所、高等学府和企业在包含油气勘探、离散模拟、三维扫描等领域利用GPU计算方面走到了世界前沿。如今,中科院、清华大学、中国同济大学、上海交大、西安交大等7所高校已经将基于CUDA架构并行计算课程融入其教学之中,其中中科院和清华大学已经走到全球CUDA应用前列。中国科学院过程工程研究所和清华大学不但开设了CUDA编程课程普及GPU计算,而且还成功将GPU计算应用到大量科学以及工程设计研究项目中并取得CUDA卓越中心称号,在此之前,CUDA卓越中心已经在哈佛大学、剑桥大学等五所学府设置。清华大学计算机系高性能所(HPC)陈文光教授表示:“清华大学已经展开对CUDA编程多项研究和应用,并开展了深入增强GPU可编程性研究工作。相对于传统CPU计算来说,GPU为大规模并行计算提供了一个新选择,具备很大发展潜力。”无独有偶,INTEL新型GPU,Larrabee项目其实是隶属于Tera-Scale计划(“万亿级别计算研究项目”。这个计划主要工作内容,就是分析未来内人们对电脑及服务器应用需求。这一计划包括研究领域非常广泛,共有超出400间大学、美国国防部高等研究计划局(DARPA),以及像是微软与惠普等相关企业,共同为Larrabee应用进行研究。美国橡树岭国家试验室宣告一项新超级计算机计划,将采取nVidia下一代GPU架构Fermi。依照双方共同公布申明,橡树岭国家试验室超级电脑,将用来研究能源与气候变迁,速度可望比现在最快超级电脑更加快十倍。这个新架构将同时采取nVidia绘图处理器,和英特尔、AMD或其余厂商生产CPU。橡树岭电脑与运算科学副试验室主任JeffNichols在申明中表示,FermiGPU可促成以往不可能实现“重大科学突破”。他说:“借由nVidia技术帮助,橡树岭得以提出在未来内,创造一个能提供亿亿次(exascale,1018次方)运算运算平台。”橡树岭也宣告将创设一个混合多关键集团(HybridMulticoreConsortium),专注在不一样类型之处理器架构运算。这个集团目标是与开发者合作,研究在混用CPU与GPU下一代超级电脑上,执行应用软件。11月16日,TOP500.org公布了第34届全球超级计算机500强排行榜,我国首台千万亿次超级计算机系统“天河一号”由国防科大研制成功“天河一号”中拥有6144颗处理器,能够提供200万亿次计算性能,但作为千万亿次超级计算机,这么成绩显然有些名不副实。其实“天河一号”最关键部分是采取了2560颗AMDHD4870x2GPU,GPU计算即使在广泛性上不如CPU,但只要环境适宜,GPU将展现出远超CPU计算能力,这在“天河一号”中已经得到了印证。2560颗AMDHD4870x2GPU帮助,“天河一号”超级计算机峰值性能达成了1.206PFlops,Linpack测试性能超出0.5603PFlops,能够说AMDGPU为“天河一号”贡献了超出80%计算性能。四.GPGPU特点和经典应用4.1GPGPU特点GPU硬件架构因为与CPUX86架构差异非常大,而且基于GPU通用计算也处于发展早期,所以针对软件开发和算法选择方面具备鲜明特点。下面简单分析下GPGPU优势与劣势:(1)高效并行性这一功效主要是经过GPU多条绘制流水线并行计算来表现。在现在主流GPU中,配置多达16个片段处理流水线,6个顶点处理流水线。多条流水线能够在单一控制部件集中控制下运行,也能够独立运行。GPU顶点处理流水线使用MIMD方式控制,片段处理流水线使用SIMD结构。相对于并行机而言,GPU提供并行性在理想性价比基础上,为很多适合于在GPU上进行处理应用提供了一个很好并行方案。(2)数据密集型细颗粒运算详细来说,GPU专用于处理数据并行计算(同一程序在许多数据元素上并行执行)、具备高运算密度(算术运算与内存操作百分比)特点。因为同一程序为每个数据元素执行,所以对高级流控制具备较低要求;又因为在许多数据元素上执行并具备高运算密度,所以内存访问延迟能够使用计算而非大数据高速缓存来隐藏。(3)超长图形流水线GPU超长图形流水线设计以吞吐量最大化为目标(如NVIDIAGeForce3流水线有800个阶段),所以GPU作为数据流并行处理机,在对大规模数据流并行处理方面具备显著优势。当然也具备无法回避劣势,它定位是取代部分CPU计算任务,所以对于一些CPU擅长领域,GPU是无能为力。(4)精度不够现在GT200芯片对于double运算性能非常差(64bit运算单元在每个SM中只有一个,所以运算速度只有32bit数据八分之一到十二分之一左右。),不过NVIDIA已经在GT300中大幅加强了双精度计算性能,可达成单精度二分之一。(5)控制流简单NVIDIASM没有预测执行机制,也没有错误回滚机制,对于复杂指令处理,计算性能下降显著。(6)线程间存在通信壁垒CUDA中每个线程存放器都是私有,它们只能经过长度较小sharedmemory或者访问延迟较长globalmemory来进行通信。(7)与CPU之间带宽较低因为GPU是以PCI-E接口方式与CPU进行通信,PCI-E(16GB/s)带宽不可防止限制了host和device数据交流。(8)软件开发难度大GPU通用计算对开发者要求较高,必须深入了解硬件,熟悉运行机制,这么才能得到愈加好优化程序,进而才能发挥GPU峰值性能。4.2GPGPU经典应用尽管GPU通用计算技术还在发展之中,不过因为它巨大性能优势和优良性价比,近几年,GPU通用计算应用(主要是基于CUDA架构GPU)还是取得令人瞩目标结果。图4.1CUDA现在所取得一些成就下面简明介绍一些经典应用(CUDA):(1)在宝钢,使用异构计算技术使得冶金过程模拟时间从一天缩短到两分钟,效率提升了50倍以上。(2)在清华大学,采取\o"GPU"GPU使得过去要用一个小时三维图像重构降低到几十秒甚至几秒钟,将实时重构不可能变为可能。(3)在中国科学院北京基因组研究所,采取\o"GPU"GPU+\o"CPU"CPU混共计算平台做基因比对比传统\o"CPU"CPU集群快30倍,而功耗降低5倍,成本降低10倍。(4)癌症研究:用于癌症研究Autodock软件提速,据美国国家癌症研究所汇报,模拟速度提升高达12倍,将等候结果时间从2个小时缩短至10分钟。AutoDock作者、美国斯克利普斯研究所GarrettMorris博士表示:“从久远角度来讲,我们只希望能够经过SiliconInformATIcs企业产品来加速找到各种疾病治疗新药。其中包含从癌症到阿耳茨海默氏症、从艾滋病到疟疾等各种疾病。”

(5)气象分析:美国国家大气研究中心气象研究和预报(WRF)模型计算,WRF1%已经过CUDA实现,整体速度提升了20%,节约了一个星期分析时间。(6)医学成像:数字层析X射线摄影组合是一个早期胸部肿瘤X射线透视法,能够使癌症对乳房组织损害被更早检测、发觉。在这种应用中,美国马萨诸塞州综合医院就使用了NVIDIAGPU产品,经过对X射线透视所获取数据进行高强度计算来重建图像。马萨诸塞州综合医院在图像重建过程中取得了100倍速度提升,使用一台PC只用5分钟就能够完成计算,使医生很快就能够得到成像图片并给出诊疗结果。(7)生物医学核磁共振成像植入设备模拟:著名美国波士顿科学国际有限企业就是一个设计和制造起搏器和其余一些生物医学植入设备企业,他们使用了NVIDIAGPU运算技术加速整个计算过程。经过NVIDIA并行GPU架构,模拟过程执行速度提升了25倍。不但速度方面提升很多,在成本方面也比过去使用CPU集群时大大降低。(8)石油与天然气勘探:现在,石油与天然气勘探正变得越来越困难。大型油气储备带经常处于地表下很深地方以至于难于勘测。比如最近在墨西哥湾发觉油田就处于海床下0英尺深地方。为了解释地质数据,就必须对取得与处理大量地震数据。休斯敦Headwave(一个专门从事地质数据分析企业)处理方案也经过NVIDIAGPU技术,并使用CUDASDK来运行。地球物理学者能够更加快速筛选他们数据,即便这些数据多达几TB容量。过去处理这些多达几TB数据需要数月计算时间,而使用NVIDIAGPU计算技术后,计算速度比过去提升了20倍。所以说,没有NVIDIAGPU计算技术,即时演算这些数据是不可能,石油与天然气企业将成为这项新技术直接收益者。(9)分子动力学模拟:在分子动力学模拟领域内,模拟复杂分子系统需要要花费大量时间,并使用复杂计算机集群。位于Urbana-Champaign美国伊利诺伊大学研究人员就使用了NVIDIAGPU产品用于计算生物分子、离子相互作用,结果是运算速度比过去采取CPU集群提升了100倍。

使用GPU工作站后,实际运算速度达成了705gigaflops。这么非凡成绩也使得生物科学研不再被

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论