1、技术支持中心技术支持中心2010-01-282 图形处理器(GPU):graphics processing units 用于通用计算目的的图形处理器(GPGPU):General-Purpose computation on GPUs3 处理器硬件: 提高制程:130nm-90nm-65nm-45nm-32nm? 多核心: 2003年单核-双核-4核-2008年6核-? (12核?) 多线程: 多线程-单线程-多线程(Sun T1,Xeon Nahelam) 超长指令字(VLIW):安腾、Xeon(Woodcrest)、Opteron(Shanghai) 系统硬件: 加速部件:FPGA(CR
2、AY X4/X5),CELL(IBM Roadrunner) 高速网络:千兆-Myrinet/万兆-InfiniBand 软件: 采用消息传递的MPI并行化 采用共享内存的线程并行 编译器优化4CPU发展规律: “摩尔定律” :每18个月,同一面积芯片上可以集成的晶体管数量将翻一番,而价格下降一半 由于物理定律的限制,采用提高CPU制程和主频的办法遇到了工艺上的壁垒,暂时无法突破GPU发展规律: 1993年开始,GPU的性能以每年2.8倍的速度增长峰值发展趋势带宽发展趋势5GPU性能的飞跃 1993年开始,GPU的性能以每年2.8倍的速度增长。 1985年渲染1帧图片需要CRAY 1超级计算机
3、23小时 如今可以很容易的在1/30秒以内完成1帧的相对低廉的GPU设计和生产价格GPGPU浮点性能的快速发展 无法利用的浮点计算能力 比CPU高一个数量级的浮点性能年份年份CPUGPU2004Intel 3GHz Pentium 4Nvidia GeForce 6800 Ultra6 GFLOPS40 GFLOPS2006Intel 3.0 GHz Core2 DuoNVIDIA GeForce 8800 GTX24 GFLOPS330 GFLOPS2008Intel 3.0 GHz Xeon E5472Nvidia Tesla C106048 GFLOPS933 GFlops6CPU和GP
4、U的联系 都是计算机体系结构中的重要部分 超大规模集成电路元件 能够完成浮点运算功能GPU的设计目标与CPU是不同的: CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计。CPU的大部分晶体管主要用于构建控制电路和CacheCPU的5%是ALU,控制电路设计更加复杂CPU的内存延迟是GPU的1/10 GPU其实是由硬件实现的一组图形函数的集合。GPU控制电路相对简单,而且对Cache的需求小,所以可以把大部分的晶体管用于计算单元GPGPU的40%是ALUGPGPU的内存带宽是CPU的10倍7众多的处理单元(ALU)nVIDIA Tesla C1060具有240个ALU(1.
5、296GHz)AMD/ATI HD 4870 x2具有1600个ALU(0.75MHz)Intel/AMD处理器具有2个ALU高数据带宽的运算nVIDIA Tesla C1060内存带宽:102GB/sAMD/ATI HD 4870 x2内存带宽:230GB/s最新的I620r-G最大内存带宽:64GB/s高效的并行性在目前主流的GPU中,配置16个片段处理流水线,6个顶点处理流水线多条流水线可以在单一控制部件的集中控制下运行,也可以独立运行超长图形流水线超长图形流水线的设计以吞吐量的最大化为目标(如nVIDIA GeForce 3流水线有800个流水步)在对大规模的数据流并行处理方面具有明显
6、的优势。8在现代GPU概念出现以前,特殊的图形硬件只出现在诸如 Silicon Graphics(SGI)等图形工作站上,具有基于硬件的顶点变换和纹理映射功能.第一代现代图形处理第一代现代图形处理器器出现在1998 年后期,主要代表为 Nvidia TNT2,ATI Rage 和 3DFX Voodoo3.这些处理器主要处理光栅化部分,有些芯片支持多纹理,可以在光栅化过程中完成多幅纹理的融合操作.从 1999 年后期开始,第二代第二代GPUGPU(Nvidia GeForce256,GeForce 2 和 ATI Radeon 7500)可以处理顶点的矩阵变换和进行光照计算,但此时还未出现真正
7、的可编程性.第三代第三代GPU GPU (Nvidia GeForce3,GeForce4,ATI Radeon 8500,2001 年和 2002年早期)代表着第一次重要变革,这时可以将图形硬件的流水线作为流处理器来解释可以将图形硬件的流水线作为流处理器来解释. .顶点级出现可编程性顶点级出现可编程性,而在像素级出现有限的可编程性.在像素级程序中,访问纹理的方式和格式受到一定限制,只有定点数可用.正是这个时候,采用 GPU作通用计算开始出现.第四代第四代GPU GPU (Nvidia GeForce FX series,ATI Radeon 9700/9800)的像素和顶点可编程性更通用化,
8、可以包含上千条指令.依赖纹理更为灵活,可以用作索引进行查找.GPU GPU 具备了浮点功能具备了浮点功能, ,纹理不再限制在纹理不再限制在00,1,1范围范围, ,从而可以用作任意数组从而可以用作任意数组,这一点是对通用计算的一个重要贡献.第五代第五代GPU GPU 以 Nvidia GeForce 6800 为代表,功能相对以前更为丰富、灵活.顶点程序可以访问纹理,支持动态分支操作支持动态分支操作; ;像素程序开始支持分支操作像素程序开始支持分支操作, ,包括循环、包括循环、if/elseif/else、重复等、重复等, ,支持子函支持子函数调用数调用,64 位浮点纹理滤波和融合,多个绘制目
9、标. 第六代第六代GPU GPU (Nvidia Tesla C870, AMD FireStream 9250)的浮点运算能力已达到或接近浮点运算能力已达到或接近1TFLOPS,1TFLOPS,在此前提下,硬件厂商纷纷加大力度推广适用于自己GPU的编程模式.910地震模拟计算生物学商业风险计算医学成像模式识别信号处理物理仿真11SeismicCity公司软件在nVIDIA Tesla S870可以达到CPU配置20倍的性能提升Headwave解决方案让地球物理学家能够对他们的数据进行高级过滤处理,也能实现查看数TB的数据12 CUDA加速的WRF 代码 13使用 GPGPU加快高级 MRI
10、重建速度Stone 等人计算体层重建Batenburg, Sijbers, 等人14利用GPGPU加速HMMERScalable InformaticsMUMmerGPU:使用GPGPU进行高吞吐量DNA序列比对Schatz等人15 分子动力学(molecular dynamics,MD)模拟是认为分子之间作用力遵守牛顿力学的一种科学计算方法,现已广泛应用到生物、医药、材料、能源、机电的等领域中。 中国科学院过程工程研究所多相复杂系统国家重点实验室进行了GPGPU上的分子动力学(MD)模拟。16 UIUC大学NAMD和VMD程序在18个CPU的机群上有100倍的加速。 3个C870的工作站实际
11、达到705Gflops计算能力直接自洽场(SCF)计算Ufimtsev 以及 Martinez双电子积分评估安田幸司18 仿真一条单独的神经 需要每秒解200,000,000个微分方程 一条神经需40亿次浮点运算 这就意味着要处理一个感觉神经数组,需要进行超过10万亿次的浮点运算 用GPU实现模拟 与X86 CPU相比要快130倍19Black-Scholes option prizing4.7 GOptions/s加速比: up to 197X2021Tesla GPGPU可以看作之前的Nvidia Quadro专业卡的通用计算版本GTX200的240个流处理器被分为10组并行的材质处理簇T
12、PC( Texture Processing Cluster )每个TPC由3个流处理器单元SM( Streaming Multiprocessors )组成每个SM由8个流处理器SP(Stream Processor);每个TPC内的24个流处理器共享L1缓存(TPC的核内内存)每个SM可以支持1024个并行线程整个GTX200核心可以支持30720个线程C1060 GPGPU个人高性能计算机个人高性能计算机S1070 Server应用领域加速卡桌面高性能计算企业级机群GPU数目144处理器内核频率1.296 GHz1.296GHz1.2961.44GHz处理器核心数目240960960单精
13、度浮点峰值933 Gflops3.73Tflops3.73 to 4.14TFlops双精度浮点峰值78Gflops311Gflops311 to 345 GFlops专用内存4GB16GB16GB内存位宽512位 GDDR3512位 GDDR3512位 GDDR3内存带宽102GB/s408GB/s408GB/s安装环境dual slots 全长卡(X16 PCI-e) 40db桌面系统标准1U机架式功耗187.8W800W800WCUDA(统一计算设备架构)Compute Unified Device Architecture在nVIDIA GT200系列显卡和Tesla系列通用计算系统上
14、 C 语言的函式库来编写应用程序的软件开发环境, CUDA 主要分为 Library,runtime和Driver 三个部分nVIDIA CUDA为一款完整的软件开发方案,内含支持GPU的C语言编译器、调试工具( Debugger )、性能分析软件(Profiler)、驱动程序及标准函数库CUDA开发者社区:http:/ 程序执行区域 Host CPU Device(Kernel) GPU 分工 CPU调度 GPU运算 并行机制 海量线程 线程索引Index2526 2006年7月24日,AMD购并ATI 2006年11月,发布首款流处理器Fire Stream 580. 2007年11月,F
15、ire Stream 9170,处理能力达到500Gflops 2008年11月,Fire Stream 9270,处理能力达到1.2Tflops 2008年底推出 Stream SDK,将ATI 4870 x2引入高性能计算领域,浮点处理能力达到2.4Tflops。27CPUCPU发送指令发送指令GPUGPU接受命令接受命令, ,并执行命令并执行命令庞大的庞大的计算单元组计算单元组高带宽的高带宽的GPUGPU内存内存AMD FireStream 9250200 GFLOPS 双精度浮点峰值1 TFLOPS 单精度浮点峰值800个处理器核心处理器核心主频625MHz1 GB GDDR3 显卡内
16、存显存带宽:108.8GB/s单 PCIe 2.0 插槽功耗90WAMD FireStream 9270240 GFLOPS 双精度浮点峰值1.2 TFLOPS 单精度浮点峰值800个处理器核心处理器核心主频750MHz2 GB GDDR5 显卡内存显存带宽:108.8GB/s双 PCIe 2.0 插槽功耗160W29Radeon HD 4870 X2$2992.4 TFLOPS750 MHz 1600GDDR5 2 GB260 W双精度浮点处理能力双精度浮点处理能力核心频率核心频率处理器核心数量处理器核心数量内存类型内存类型显存容量显存容量最大功耗最大功耗显存带宽显存带宽230 GB/sec
17、30单精度浮点处理能力单精度浮点处理能力480 GFLOPS 模块化机架式4U机箱 可装入8个AMD FireStream 9270 流计算器 通过多个PCI-E光纤连接接到一个服务器族。 最长50米的PCIe 2.0光纤连接管道,带宽80Gbps 最多4条光纤通道,聚合带宽达到320Gbps 允许同时加速4台服务器 对所有操作系统透明支持 关键部件支持热插拔 FireStream Software Development Kit(SDK) Brook+ 基于C语言的面向GPGPU的高级编程语言 基于Standford大学的Brook语言 开源软件(SourceF) Libraries AMD
18、核心数学库(ACML) COBRA 图形图像库 第三方工具 RapidMind, etcCompilersLibrariesAvailable 3rd Party ToolsBrook+RapidmindACML/Cobra32为用户提供高性能为用户提供高性能的的APIAPI为用户提供为用户提供易用的编译器易用的编译器为用户提供便捷为用户提供便捷的应用函数库的应用函数库3334Larrabee是英特尔公司 CPU-GPU的芯片代号 ,它隶属于Intel万亿次计算计划,基于可编程架构,主要面向高端通用目的计算平台,至少有16个核心,主频1.7-2.5GHz,功耗则在150W以上,支持JPEG纹理
19、、物理加速、反锯齿、增强AI、光线追踪等特性。35 AMD首款Fusion处理器将会采用MCM模块式设计,即CPU一个模块、GPU一个模块,然后将二者组合在一起,与芯片级集成GPU和CPU相 比,这是生产混合处理器最简单有效的方便方法。首批上市的Fusion处理器采用的就是这种方法,它拥有两个独立的核心模块,一个为GPU,另一个为 CPU。这样的话,AMD就可以根据具体的应用情况推出多GPU和多CPU不同组合的Fusion处理器了。只有未来的第二代Fusion处理器才开始会采用原生整合GPU+CPU技术,AMD首款Fusion处理器的工程代号为Swift。37 计算能力:201.6 Tflop
20、s 系统组成 42台 TWINS服务器节点 84块ATI Radeon HD 4870 X2 GPGPU 互联网络:20G InfiniBand 曙光水冷机柜:4 应用软件 过程所多相实验室:粒子模拟 计算所&曙光公司参与程序移植(加速17倍) 节点:计算节点(A620r-T)IO节点(A620-FX) 网络:20G Infiniband计算网络1000Mb以太管理网络 控制系统系统:SKVM over IP 机群控制台 软件系统:操作系统GridView管理系统GNU/PGI编译器并行环境开发环境3940GPGPU并行编程模式(1/3) 图形API OpenGL 提供针对图形渲染的API 最
21、早由SGI开发、跨平台 Direct3D 一种基于OLE COM的API 依赖于Windows平台的DirectX OpenCL 针对异构系统并行编程计算的API 由Apple提出,收到多家硬件厂商支持(IBM, HP, NVIDIA) 由Khronos组织维护2022-6-941GPGPU并行编程模式(2/3) 通用计算编程接口 STREAM 包含: CAL 指令集 Brook+ 类C语言及编译器 特点: 板载内存带宽受限 支持汇编方式编程2022-6-942GPGPU并行编程模式(3/3) 通用计算编程接口 CUDA 包含: ISA 指令集 NVCC 编译器 特点: 利用显卡share m
22、emory带宽高 硬件升级代码可重用性好 数学库支持: CUFFT(离散快速傅立叶变换) CUBLAS(离散基本线性计算)2022-6-943CUDA架构详解 以NVIDIA Tesla C870图形卡为例介绍CUDA架构 CUDACompute Unified Device Architecture 峰值: 518Gflops/card 编程模式: CUDA v1.1 编译器: NVCC2022-6-944CUDA逻辑结构及内存结构(1/6) 在CUDA的程序架构中,程序执行区域分为两个部分:Host 与Device。 Host 指在CPU上执行的部分 Device指在GPU 上执行的部分,
23、这部分又称为“kernel” 通常,Host 程序会将需要并行计算的数据复制到 GPU 的显存,再由 GPU 执行 Device程序,完成后再由Host 程序将结果从GPU 显存中取回2022-6-945CUDA逻辑结构及内存结构(2/6) 在这个过程中,CPU担任的工作为控制 GPU执行,调度分配任务,并能做一些简单的计算,而大量需要并行计算的工作都交给 GPU 实现。 另外需要注意的是,由于 CPU 存取显存时只能通过 PCI-Express 接口,速度较慢,因此不能经常进行,以免降低效率。通常可以在程序开始时将数据复制进GPU显存,然后在 GPU内进行计算,直到获得需要的数据,再将其复制
24、到系统内存中。 2022-6-946CUDA逻辑结构及内存结构(3/6) 在程序实际运行时,CUDA 会产生很多在 Device 上执行的线程(thread),每个线程都会执行kernel 程序段,根据索引号(index)的不同,获取不同的数据进行计算。 2022-6-947CUDA逻辑结构及内存结构(4/6) 在CUDA架构下,GPU执行时的最小单位是线程。32至512 个线程组成一个块(block),每个块中的线程能存取同一块共用的显存(shared memory),快速进行同步2022-6-948CUDA逻辑结构及内存结构(5/6) 执行相同程序的块,可以组成格子(grid)。不同块中的
25、线程无法从对方的共用显存(shared memory)中读取数据,因此不同块中的线程合作效率较低。 利用这种模式,可以使程序不用担心 GPU 上实际能同时执行的线程数目限制。2022-6-949CUDA逻辑结构及内存结构(6/6) 例如,一个具有少量执行单元的 GPU,可能会把各个块中的线程循环执行,而非同时执行。 不同的格子可以执行不同的程序(即 kernel)。2022-6-950CUDA存储类型(1/3) 在CUDA架构中,要让线程可以使用各种变量,必须先将数据复制到 Device的显存中,由于 Device 的显存分别位于存储器(Dram)和芯片(Chip)上,因此在读取速度上有较大区
26、别,有表中所示的6种。registersread-write per-thread local memory read-write per-thread shared memory read-write per-block global memory read-write per-grid constant memory read-only per-grid texture memory read-only per-grid 2022-6-951CUDA存储类型(2/3) registers 和本地显存(local memory)是以线程为单位,同一个块中的每个线程都有自己的一份registe
27、rs和本地显存 共享显存(shared memory)则是存在于块中,让同一个块中的每一个线程共用。 上面这三种,都是在芯片上的显存,速度会比位于存储器上的显存快,但是容量相比也较小。2022-6-952CUDA存储类型(3/3) 格子中的全局显存(global memory)、常量显存(constant memory)、结构显存(texture memory)这三种显存可以让不同块中的线程一起使用,不同格子又具有各自的全局显存(global memory)、常量显存(constant memory)、结构显存(texture memory)。 这三种显存位于存储器,相比芯片中的显存,容量要大
28、得多。并且可以在同一个程序中的不同 kernel 中持续的存在和使用,常量显存(constant memory)和结构显存(texture memory)具有只读属性,利用快取的机制可以加速读取 。 合理利用各种显存存放不同的数据,可以有效提高程序执行效率。 2022-6-953CUDA并行处理问题(1/2) 存取的延迟问题 CPU 通常使用 cache 来减少存取内存的次数,以避免内存延迟影响到执行效率。GPU 大多没有 cache,采用并行化的方式来隐藏显存的读取延迟,即当第一个 thread需要等待显存读取结果时,开始执行第二个 thread,依次类推。 分支指令的问题 CPU通常利用分
29、支预测(Branch Prediction)、推测运算(Speculative Operation)等方式来减少分支指令造成的pipeline bubble。GPU则使用类似处理显存延迟的办法,通过多线程大量并行的方式能够弥补效率低的影响。 2022-6-954CUDA并行处理问题(2/2)因此,最适合利用 CUDA 处理的问题,是可以大量并行化的问题,一方面有效隐藏了显存的延迟,另一方面利用的 GPU 上大量的执行单元。而粒子模拟程序其大块的粒子空间区域正可以划分为许多并行的子区域,正好适合这种CUDA编程模式,只是在实现时需要注意多线程读写及边界处理情况。 2022-6-95556G80
30、GPU并行平台并行平台L2FBSPSPL1TFThread ProcessorVtx Thread IssueSetup / Rstr / ZCullGeom Thread IssuePixel Thread IssueInput AssemblerHostSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFSPSPL1TFL2FBL2FBL2FBL2FBL2FBAMD RV770GPU大规模并行计算(大规模并行计算(cuda)l操作系统l递归算法l桌面应用例如MS Wordl交互性应用例如DebuggerCPUGPU适用的应用适用的应用l油气勘探l
31、金融分析l医疗成像l有限元l基因分析l物理模拟l地理信息系统热点l搜索引擎l数据库、数据挖掘l数理统计分析l生物医药工程l导航识别l军事模拟l无线射频模拟l图像语音识别l潜在小结(1/2) CUDA编程模式开发要注意多线程读写、写写操作错误 CUDA编程模式性能优化: 每个线程访问的数据尽量是连续的 在计算过程中,尽量使数据从内存到显存中的拷贝一次完成 将计算过程中频繁用到的变量,存储到share memory或register中,合理利用芯片级显存 线程数尽量多2022-6-9101小结(2/2) 通过 CUDA 编程模式改造,可以大幅度的提升粒子模拟程序的计算性能,但是作为GPGPU编程模
32、式的一种,其仍有以下一些不足之处有待进一步完善:编程复杂度较大,比较CUDA编程模式与传统的x86 CPU编程模式可以看到,在CUDA 编程中,对于线程分配、线程边界的处理及多线程读写等问题,不但需要人为的设计,且设计结构的好坏极大程度影响了最终程序运行的性能。而这些工作,在 x86 CPU编程模式中,实现起来相对要方便的多,有的甚至可以交给编译器来做。而与 Cell 体系结构编程模式相比较,CUDA目前缺少主流的集成开发环境,因此软件开发工作量相对也会大一些;GPU的运算单元较多,因此对于不能高度并行化的程序,性能提升不大;在科学计算领域,往往对运算过程中的精度有一定要求,否则容易由于大量的迭代,导致结果不正确,而 CUDA 目前的版本双精度浮点运算支持不好,这限制了其在某些领域的应用; 不具备分支预测等复杂流程控制单元,因此对于具有高度分支的程序,效率较低; 目前GPGPU 编程模型尚不成熟,还没有公认的标准。 2022-6-9102