`
jubincn
  • 浏览: 231887 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

GPU及相关技术简介

 
阅读更多
<style type="text/css"> <!-- @page { margin: 0.79in } P { margin-bottom: 0.08in } --> </style> 什么是GPU

GPUGraphicsProcessing Unit)是图形处理器的简称,这个概念是由NVIDIA公司在发布GeForce256绘图处理芯片时首先提出。

GPU使显卡减少了对CPU的依赖,并分担了部分原本是由CPU所担当的工作,尤其是在进行3D图形处理时,功效更加明显。GPU所采用的核心技术有硬件座标转换与光源、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等。


GPU简史

图形芯片最初用作固定功能图形管线。随着时间的推移,这些图形芯片的可编程性日益增加,在此基础之上NVIDIA?(英伟达?)推出了第一款GPU(图形处理器)1999-2000年间,计算机科学家,与诸如医疗成像和电磁等领域的研究人员,开始使用GPU(图形处理器)来运行通用计算应用程序。他们发现GPU(图形处理器)具备的卓越浮点性能可为众多科学应用程序带来显著的性能提升。这一发现掀起了被称作GPGPUGPU(图形处理器)通用计算)的浪潮。

此处需要解决的问题为GPGPU要求使用图形编程语言来对GPU(图形处理器)进行编程,如OpenGLCg等。开发人员需要使其科学应用程序看起来像图形应用程序,并将其关联到需要绘制三角形和多边形的问题。这一方法限制了GPU(图形处理器)的卓越性能在科学领域的充分发挥。

NVIDIA®
(英伟达™)认识到了让更多科学群体使用这一卓越性能的强大优势,决定投资来修改GPU(图形处理器),使其能够完全可编程以支持科学应用程序,同时还添加了对于诸如CC++Fortran等高级语言的支持。此举最终推动诞生了面向GPU(图形处理器)的CUDA架构。

GPU计算的特点

  • GPU/CPU架构比较

GPU在处理能力和存储器带宽上相对于CPU有明显优势,在成本和功耗上也不需要付出太大代价。由于图形渲染的高度并行性,使得GPU可以通过增加并行处理单元和存储器控制单元的方式提高处理能力和存储器带宽。GPU设计者将更多的晶体管用作执行单元,而不是像CPU那样用作复杂的控制单元和缓存并以此来提高少量执行单元的执行效率。下图对CPUGPU中的逻辑架构进行了对比。



  • 强大的浮点计算能力


CPU的整数计算、分支、逻辑判断和浮点运算分别由不同的运算单元执行,此外还有一个浮点加速器。因此,CPU面对不同类型的计算任务会有不同的性能表现。而GPU是由同一个运算单元执行整数和浮点计算,因此,GPU的整型计算能力与其浮点能力相似。


  • 更高的内存带宽(MemoryBandwidth)

GPU运算相对于CPU还有一项巨大的优势,那就是其内存子系统,也就是GPU上的显存[1]。当前桌面级顶级产品3通道DDR3-1333的峰值是32GB/S,实测中由于诸多因素带宽在20GB/S上下浮动。AMDHD 4870512MB使用了带宽超高的GDDR5显存,内存总线数据传输率为3.6T/s或者说107GB/s的总线带宽。存储器的超高带宽让巨大的浮点运算能力得以稳定吞吐,也为数据密集型任务的高效运行提供了保障。

还有,从GTX200HD4870系列GPU开始,AMDNVIDIA两大厂商都开始提供对双精度运算的支持,这正是不少应用领域的科学计算都需要的。NVIDIA公司最新的Fermi架构更是将全局ECCErrorChecking and Correcting)、可读写缓存、分支预测等技术引入到GPU的设计中,明确了将GPU作为通用计算核心的方向。


  • 延迟与带宽

GPU高显存带宽和很强的处理能力提供了很大的数据吞吐量,缓存不检查数据一致性,直接访问显存延时可达数百乃至上千时钟周期。

CPU:通过大的缓存保证线程访问内存的低延迟,但内存带宽小,执行单元太少,数据吞吐量小,需要硬件机制保证缓存命中率和数据一致性。



适于GPU计算的场景

尽管GPU计算已经开始崭露头角,但GPU并不能完全替代X86解决方案。很多操作系统、软件以及部分代码现在还不能运行在GPU上,所谓的GPU+CPU异构超级计算机也并不是完全基于GPU进行计算。一般而言适合GPU运算的应用有如下特征:

  • 运算密集。

  • 高度并行。

  • 控制简单。

  • 分多个阶段执行。

GPU计算的优势是大量内核的并行计算,瓶颈往往是I/O带宽,因此适用于计算密集型的计算任务。



可编程的图形处理器

传统GPU有一个特征就是只实现固定功能的渲染流水线,

而不具备可编程能力。那些3DAPI(例如Direct3D OpenGL)与图形硬件交互时都是作为一个状态机来实现的。用户通过3DAPI 提供的函数设置好相应的状态,比如变换矩阵、

材质参数、光源参数、纹理混合模式等,然后传入顶点流。图形硬件则利用内置的固定渲染流水线和渲染算法对这些顶点进行几何变换、光照计算、光栅化、纹

理混合、雾化操作、最终将处理结果写入帧缓冲区。这种渲染体系限制用户只能使用图形硬件中固化的各种渲染算法。


这虽然可以满足那些对渲染质量要求不高

的应用,但难以实现那些需要更高的灵活性和客户定义的实时图形应用。用户已经无法满足于基于顶点的近似和简单的多纹理混合,

它们需要硬件加速的角色动画支持,需要使用定制的光照模型,需要非真实渲染(卡通渲染、素描渲染)。对于这些灵活需求,如果在GPU硬件中为其设计单独的专用电路显然是不现实的。

因此,硬件可编程性成了唯一可行之路。


为了解决这一难题,现代GPU3D渲染流程中加入了两个可编程处理器,

顶点处理器(VertexEngineVE)和像素处理器(PixelEnginePE)。它们都由算术逻辑单元和相应的寄存器组成。

这两个可编程引擎分别可以取代相应的固定流水线。顶点处理器和像素处理器都没有内存的概念,所有的运算都在寄存器之上进行。


除了顶点处理器和像素处理器之外,

还有两个着色器的概念被引入可编程图

形处理器之中。顶点着色器(VertexShaderVS)就是运行于VE之上的程序,它的工作是进行几何变换和光照计算等操作。而运行于PE之上的像素着色器(PixelShaderPS)则主要进行纹理混合等操作。


可编程处理器和着色器为GPU提供了更加强大和灵活的3D渲染能力,也给

GPGPU的诞生提供了条件,在3D引擎发的展史上具有十分重要的意义。图形处理器的基本体系结构如图2-4所示。



图形处理器体系结构流程图



GPU

GPGPUGeneralPurpose computing onGPU)是通用图形处理器计算的简称,是指使用GPU来进行3D图形以外的计算,常用于数据密集的科学与工程计算中。

GPU
计算的模式是GPU+CPU,即在异构协同处理计算模型中将CPUGPU结合起来加以利用。应用程序的串行部分在CPU上运行,而计算任务繁重的部分则由GPU来加速。这些通用计算常常与图形处理没有任何关系。由于现代图形处理器强大的并行处理能力和可编程流水线,令流处理器可以处理非图形数据。特别在面对单指令流多数据流(SIMD),且数据处理的运算量远大于数据调度和传输的需要时,通用图形处理器在性能上大大超越了传统的中央处理器应用程序。


传统GPU通用计算的使用

最早的GPGPU开发直接使用图形学API编程。这种开发方式要求程序员将数据打包成纹理,将计算任务映射为对纹理的渲染过程,用汇编或者高级着色语言(如GLSLCgHLSL)编写shader程序,然后通过图形学APIDirect3DOpenGL)执行。2003年斯坦福大学的IanBuck等人对ANSIC进行扩展,开发了基于NVIDIACgBrook源到源编译器。Brook可以将类似CbrookC语言通过brcc编译器编译为Cg代码,隐藏了利用图形学API实现的细节,大大简化了开发过程。但早期的Brook编译效率很低,并且只能使用像素着色器(PixelShader)进行运算。受GPU架构限制,Brook也缺乏有效的数据通信机制。AMD在其GPGPU通用计算产品Stream中采用Brook的改进版本Brook+作为高级开发语言。Brook+的编译器工作方式与Brook不同,提高了效率。


目前的GPU开发环境

CG(C for Graphics)是为GPU编程设计的高级绘制语言,由NVIDIA和微软联合开发,微软版本叫HLSLCGNVIDIA版本。Cg极力保留C语言的大部分语义,并让开发者从硬件细节中解脱出来,Cg同时也有一个高级语言的其他好处,如代码的易重用性,可读性得到提高,编译器代码优

CUDAComputeUnified DeviceArchitecture,统一计算架构)是由NVIDIA所推出的一种集成技术,是该公司对于GPGPU的正式名称。通过这个技术,用户可利用NVIDIAGeForce8以后的GPU和较新的QuadroGPU进行计算。亦是首次可以利用GPU作为C-编译器的开发环境。NVIDIA营销的时候,往往将编译器与架构混合推广,造成混乱。实际上,CUDA架构可以兼容OpenCL或者自家的C-编译器。无论是CUDAC-语言或是OpenCL,指令最终都会被驱动程序转换成PTX代码,交由显示核心计算。

ATIStreamAMD针对旗下图形处理器(GPU)所推出的通用并行计算技术。利用这种技术可以充分发挥AMDGPU的并行运算能力,用于对软件进行加速或进行大型的科学运算,同时用以对抗竞争对手的nVIDIACUDA技术。与CUDA技术是基于自身的私有标准不同,ATIStream技术基于开放性的OpenCL标准。

OpenCL(Open Computing Language,开放计算语言)是一个为异构平台编写程序的框架,此异构平台可)CPUGPU或其他类型的处理器组成。OpenCL由一门用于编写kernels(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。

OpenCL类似于另外两个开放的工业标准OpenGLOpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织KhronosGroup掌管。

下面是对几种GPU开发环境的简单评价:

CG:优秀的图形学开发环境,但不适于GPU通用计算开发

ATIStream:硬件上已经有了基础,但只有低层次汇编才能使用所有的硬件资源。高层次的brook是基于上一代GPU的,缺乏良好的编程模型。

OpenCL:开放标准,抽象层次较低,较多对硬件的直接操作,代码需要根据不同硬件优化。

CUDA:仅能用于NVIDIA的产品,发展相对成熟,效率高,拥有丰富的文档资源。

分享到:
评论

相关推荐

    GPU编程技术

    2GPU简介GPUVS CPU34GPU图形绘制管线Shade Language(着色语言)5CG编程GPU简介:GPU前途无限光明◆自诞生起,GPU就将摩尔定律的定义大大扩展。研究表明,从993年开始,GPU的性能以每年2.8倍的速度增长,这个数字大...

    CUDA技术的例子:通用的GPU编程简介CUDA by Example An Introduction to General-Purpose GPU Programming

    CUDA技术的例子:通用的GPU编程简介

    GPU编程之进击的优化-李修宇.docx

    尾章 GPU编程优化技术总结 4.1.0 CUDA设备上的优化技术 4.1.1 访存优化 4.1.2 指令优化 4.1.3 内核调用优化 4.2.0 GCN设备上的优化技术 4.2.1 访存优化 4.2.2 指令优化 4.2.3 内核调用优化 4.3 构建性能可...

    Tesla GPU架构分析3

    1.简介Tesla GPU 的 20 系列产品家族基于代号为“Fermi”的下一代 CUDA 架构,支持技术与企业计算所“必备”的诸多特性,其中包括 C++支持

    Tesla GPU架构分析5

    一、简介:registered: V100 Tensor Core 是有史以来极其先进的数据中心 GPU,能加快 AI、高性能计算 (HPC) 和图形技术的发展。32GB 两种配置,

    GPU高性能编程CUDA实战.(桑德斯).聂雪军等.扫描版

    在加入NVIDIA公司之前,他曾在ATI技术公司、Apple公司以及Novell公司工作过。Edward Kandrot是NVIDIA公司CUDA算法小组的高级软件工程师。他在代码优化和提升性能等方面拥有20余年的工作经验,参与过Photoshop和...

    基于python+Tensorflow+opencv的胶囊表面缺陷检测+检测凹陷和缺失部分涉及到GPU加速(毕设&课设&项目开发

    基于python+Tensorflow+opencv的胶囊表面缺陷检测+检测凹陷和缺失部分涉及到GPU加速,适合毕业设计、课程...主要目的是做一个基于图像的胶囊表面缺陷检测,结合opencv和图像处理技术,再通过深度学习训练个模型达到效果

    (matlab程序)使用 GPU 和代码加速杂波模拟.rar

    该示例将样本矩阵反演 (SMI) 算法(流行的时空自适应处理 (STAP) 技术之一)应用于具有六元素均匀线性阵列 (ULA) 的机载雷达接收的信号。该示例重点比较 GPU、代码生成和 MATLAB 解释器之间的杂波模拟性能。您...

    gpu-rest-engine, 使用 Docker 和的Caffe的REST API.zip

    gpu-rest-engine, 使用 Docker 和的Caffe的REST API 简介这个库展示了如何使用 NVIDIA gpu实现低延迟图像分类( 推理)的REST服务器。 这是对 GRE软件的初步演示,可以让你构建自己的加速 microservices 。演示使用了...

    Udacity_GPU_Prog:我的工作与CS 344的Udacity并行编程简介有关

    Udacity_GPU_Prog 我的工作与《 Udacity并行编程简介》(CS 344)有关。我正在学习本课程,目的是提高我对GPU并行编程的专业知识,并且在几乎每组讲座之后,都有一些问题集使学生能够练习所教授的技能。 在这里,我...

    CUDA中文手册.pdf+技术文档+不带标签

    第 1 章 CUDA 简介 1.1 作为数据并行计算设备的图形处理器 1.2 CUDA:一种 GPU 计算的新架构 1.3 文档结构

    matlab复变函数指数函数代码-gpu:旧的商业回购

    通过工作示例和说明为基础打下基础,将展示各种速度优势,并且对普通技术人员来说是无法克服的。 该主题不应令人畏惧,也不应该被典型的人认为是遥不可及的。 如果某些规则可以保持直截了当,那么可以获得越来越复杂...

    《实时碰撞检测算法技术》

    内容简介 《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分...

    实时碰撞检测算法技术

    实时碰撞检测算法技术内容简介:本书详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分...

    matlab复变函数指数函数代码-GPU-SuperComputing-HPC-:回购是针对高性能计算和并行处理而完成的工作的汇总,并且着重于

    通过工作示例和说明为基础打下基础,将展示各种速度优势,并且对普通技术人员来说是无法克服的。 该主题不应令人畏惧,也不应该被典型的人认为是遥不可及的。 如果某些规则可以保持直截了当,那么可以获得越来越复杂...

    graphics-workshop:通过编写GPU着色器来学习计算机图形学!

    该代码旨在在现代GPU上实时运行,而无需任何其他软件。 随意发挥创造力,以产生美学上令人愉悦的结果! 内容 -每个简介 -推荐的整个研讨会的工作方式 -有关如何设置自动部署的说明 入门 该研讨会涵盖了片段着色器...

    Facebook AI实验室开源的相似性搜索库Faiss.zip

    通过一系列实验表明,在单一或多GPU配置中运行的中到大规模的最近邻搜索任务上,我们的方法大幅度优于先前技术。图片选自论文(图片6):从 Yfcc100M 数据集的 9500 万张图像上构建的高准确度 k-NN 图。第一张和最后...

    新一代超频软件GPUTool简介

    随着电脑知识的日渐普及,超频风气盛行,不管是针对处理器或针对显卡设计的超频软件都在不断推陈出新,使得对硬件认识不深的普通用户也可以尽享...OPUTooUlll是着名技术网站TechPowerUp自己研发的免费软件,功能相比上

    SketchUp插件-室内建筑渲染器插件 Thea Render v3.5.173.1970 + v2.2.1016.1877

    它是一种独特的渲染器,能够在有偏真实感、无偏和GPU模式下使用最先进的技术进行渲染。在Thea Render中,我们使用最精确的物理模型创建了大量高度真实的材质。这些模型旨在产生高度节能的材料组合。

    摄像头利用javaccp技术基于免安装opencv.zip

    Opencv简介 Opencv是计算机视觉中经典的专用库,其支持多语言,跨平台,功能强大。Opencv-Python为Opencv提供了Python接口,使得使用者在Python中能够调用C/C++,在 保证易读性和运行效率的前提下,实现所需的功能...

Global site tag (gtag.js) - Google Analytics