《OpenACC并行编程实战》—— 第1章 并行编程概览 1.1 加速器产品

简介: 本节书摘来自华章出版社《OpenACC并行编程实战》一 书中的第1章,第1.1节,作者何沧平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第1章 并行编程概览 对绝大多数人而言,编程语言只是一个工具,讲究简单高效。

本节书摘来自华章出版社《OpenACC并行编程实战》一 书中的第1章,第1.1节,作者何沧平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第1章

并行编程概览
对绝大多数人而言,编程语言只是一个工具,讲究简单高效。科学家的主要精力应该用在科研创新活动上,编程工作仅仅是用来验证创新的理论,编程水平再高也不可能获得诺贝尔奖。对学生和企业程序员而言,技术无穷尽,永远学不完,不用即忘,应该认清技术发展方向,学习有前途的技术,不浪费青春年华。
OpenACC语言专为超级计算机设计,因此读者需要了解超级计算机的技术演进方向,特别是主流加速器的体系架构、编程模型,看清OpenACC的应用场景,有的放矢。普通读者虽然不会用到大型机群,但小型机群甚至单台服务器、普通显卡的计算模式都是相同的。
最近几年的著名超级计算机(见附录A)均采用加速器作为主要计算部件,可预见未来几年的上层应用仍将围绕加速器展开。

1.1 加速器产品

超级计算机的加速器历史上有多种,本节只介绍当前流行的两种:英伟达GPU和英特尔融核处理器。加速器的物理形态是PCIe板卡,样子大致如图1.1所示,图1.2是拆掉外壳后的样子,正中央的是GPU芯片,芯片周围的小黑块是显存颗粒,金黄色的边缘处是与PCIe连接的金手指,通过PCIe插槽与CPU相连。图1.3中的机架式服务器左下部装有4块GPU卡,图1.4是服务器的主板俯视图,箭头处就是4个PCIe插槽。
从逻辑关系上来看,目前市场在售的英特尔服务器CPU中已经集成了内存控制器和PCIe通道。2颗CPU通过1个或2个QPI接口连接,CPU通过内置的内存控制器连接DDR3

<img src="https://yqfile.alicdn.com/8ddeddfadb1ccea0e3d6412778ae100870cb2fb1.png" width="" height="">


或DDR4内存条,GPU加速器通过PCIe总线与CPU相连(图1.5)。2016年6月主流的英特尔至强E5-2600 v3和E5-2600 v4 CPU每颗拥有40个PCIe Lan,而每块GPU的接口需要16个PCIe Lan,因此每颗CPU上最多全速挂载2块GPU。有些服务器的PCIe ×16插槽上只安排×8,甚至×4的信息速率,可以挂载更多的GPU。
<img src="https://yqfile.alicdn.com/39c711ac924434953338f83a55bbaf9a71469905.png">


英特尔融核处理器在服务器上的位置与GPU一样,不再赘述。
1.1.1 英伟达GPU
通用计算GPU是英伟达公司发明的,每隔2~3年就会升级硬件架构。通用计算GPU
的第一代架构代号是G80,每8个核心封装在一起称为一个流式多处理器(Streaming Multiprocessor,SM),2个流多处理器共用一块L1缓存,所有的核心共用L2缓存,任意核心都能访问芯片外部的GPU显存(图1.6中的FB)。从图1.6中可以看出,G80架构GPU产品最多可以有128个核心。
<img src="https://yqfile.alicdn.com/061ea8748114fb92bb1e73ea94eacea9f05662a3.png">


接下来的架构代号是GT200,然后是Fermi。Fermi架构(图1.7)最多包含14个流式多处理器,每个流式多处理器包含32个核心。6个DRAM接口,1个PCIe接口(图1.16中的Host Interface)。
流式多处理器内部组件也相当多(图1.8):1个指令缓存(Instruction Cache),2组Warp调度器(Warp Scheduler)、分发单元(Dispatch Unit),一堆寄存器;最重要的是32个核心,每个核心拥有一个单精度浮点单元和一个整数单元;16个Load/Store单元;4个特殊功能单元(Special Function Unit),负责计算双精度浮点数、三角函数、超越函数、倒数、平方根等。共享内存+L1缓存共64KB,可以灵活配置。
接下来是Kepler架构(图1.9),这一代架构最大可以包含15个流式多处理器(Streamong Multiprocessor extreme,SMX)和6个64 位内存控制器。不同的产品型号将使用不同的配置,可以包含13或14个SMX,多种参数都有升级和更改。Kepler 架构的主要设计目标是提高用电效率,台积电的28nm 制造工艺在降低功耗方面起着重要的作用。Kepler 架构还提高了双精度计算能力。
<img src="https://yqfile.alicdn.com/77b15993c2ffb350310806c60ac383211fa2ce0e.png" width="" height="">
<img src="https://yqfile.alicdn.com/eb77433d6c2a16c4d2d844eabe4eae3d8388dc53.png" width="" height="">


流式多处理器SMX(图1.10)包含192个单精度核心、64个双精度单元、32个特殊功能单元(SFU)和32个加载/存储单元(LD/ST)、3个Warp调度器、6个分发器、一大堆寄存器。每个核心由1个浮点计算单元和1个整数算术逻辑单元组成,支持融加(FMA)运算。每个SMX拥有64KB的片上存储器,可配置为48KB的共享存储器和16KB的L1缓存,或配置为16KB的共享内存和48KB的L1缓存。
这里简要介绍市面的主力GPU产品型号,见表1.1。
<img src="https://yqfile.alicdn.com/a4d085d3294437ecec1c982aba6286c8063b235b.png" width="" height="">
<img src="https://yqfile.alicdn.com/78831247b9a92634eec2f9a5cc36af59a46360cb.png" width="" height="">


2016年4月,英伟达在GPU技术会议(GPU Technology Conference)上发布了新一代Pascal架构和旗舰产品Tesla P100,引入一些新特性。
极致性能:为高性能计算、深度学习等计算领域设计。双精度浮点峰值5.3 Tflops,单精度浮点峰值10.6 Tflops,专为深度学习设计的半精度浮点峰值达到惊人的21.2 Tflops。按双精度峰值对比,Tesla P100是同期主力高端CPU英特尔至强E5-2680 v4的10倍。按照深度学习应用性能对比,Tesla P100是E5-2680 v4的20倍。
NVLink:为应用扩展性全新设计的高速、高带宽互连协议。
HBM2:快速、大容量、高效片上堆叠式内存。
统一内存:用统一的代码来管理主机CPU内存和GPU内存,方便开发代码。
Pascal最强劲的是GP100硬件架构(图1.11),包含60个Pascal流式多处理器和8个512位内存控制器(共4096位)。每个流式多处理器拥有64个CUDA核心和4个纹理单元。GP100共有3840个单精度核和240个纹理单元。每个内存控制器附带512KB的L2缓存,每个HBM2堆叠内存由一对内存控制器管理。L2缓存共计4096KB。Tesla P100共配置有56个流式多处理器。
<img src="https://yqfile.alicdn.com/1544b61b8f2b71d96bc1e73589bf3d91769ac39e.png" width="" height="">


GP100的第6代流式多处理器架构提升了CUDA核心的利用率和能源效率,可以运行在更高的频率上。每个流多处理器包含64个单精度(FP32)CUDA核心,分成两部分,每部分32个;含有1个指令缓冲器,1个Warp调度器,2个分发单元。与前面的Kepler、Maxwell流式多处理器相比,每个核心分到的寄存器数量增多,从而可以运行更多的线程。由于增加了流式多处理器,共享内存总量也相应增加,合并带宽也翻番。每个流式多处理器中更多的共享内存、寄存器、Warp,使代码可以更高效地执行。Pascal架构中的FP32 CUDA核心新增一项功能:既能处理16位精度又能处理32位精度的指令和数据,FP16操作的吞吐率是FP32的2倍。
如图1.12所示,每个流式多处理器拥有32个双精度浮点单元,是单精度核心的一半。共享内存独占64KB,不再与L1缓存相互调配。纹理和L1缓存共用一块缓存,可以灵活配置。
<img src="https://yqfile.alicdn.com/617e693e9c6472bb44ba7d12b39df7979f9aaf8e.png" width="" height="">


Tesla P100的高带宽内存(High Bandwidth Memory 2,HBM2)跟前面几代相比有显著变化:从GPU芯片封装的外部移到了内部(图1.13),安装在同一块基板上,距离更近,传输更快。由于在竖直方向进行堆叠,占用的芯片面积更小,16GB的容量原来需要十几个GDDR5颗粒,现在只需要4个HBM2颗粒。
HBM2内存带来的另一个好处是原生支持错误校验码(Error Correcting Code,ECC)功能。有些应用会用到很多块GPU,计算时间也很长,对数据差错十分敏感,一旦中间步骤有微小误差,后续计算就会将误差迅速放大,污染最终结果。ECC技术能够检测并纠正1位差错。
<img src="https://yqfile.alicdn.com/896249d98228c3d8ea290b4486a82eb248bcbe6f.png" width="" height="">


先前使用的GDDR5显存内部不提供ECC功能,仅能侦测GDDR5总线上的错误,内存控制器中的错误或DRAM自身的错误都不能侦测。Kepler架构GPU的ECC功能实现方法是划出6.25%的容量专门用来存放校验数据,从而内存带宽将损失12%~15%。
由于HBM2自带ECC功能,Tesla P100就不再损失内存容量和内存带宽。Tesla P100的寄存器、共享内存、L1缓存、L2缓存和HBM2内存都能侦测2位错误并纠正1位错误。

1.1.2 英特尔至强融核处理器

2012年,英特尔推出至强Phi融核处理器,代号Knights Corner,融核处理器又称为MIC(Many Integrated Core)。物理形态上跟GPU一样是PCIe板卡(图1.14),分为被动散热和主动散热(带风扇),具体分为6个型号(表1.2),市面上常用的型号是5110P和7120。

<img src="https://yqfile.alicdn.com/2ca0b49acfa9a997f9589fc734e7162468c2ddfa.png" width="" height="">
<img src="https://yqfile.alicdn.com/4ec365a8e4e3ee144de64469854ff7bf6efa0598.png" width="" height="">


此代架构MIC拥有最多63个核心(图1.15),每个核心有512KB的L2缓存,所有核心使用双向环互连。每个核心有一个512位向量处理单元,支持4个硬件线程,线程并发隐藏延时。
<img src="https://yqfile.alicdn.com/a06638246856e81deeb582fba483af4740b57424.png" width="" height="">


MIC上编程模式有4种(图1.16):主机模式(Multicore Only)、卸载模式(Multicore Hosted with Many-core Offload)、对称模式(Symmetric)、原生模式(Many-Core Only)。主机模式中只使用主机CPU,不在MIC上运行代码;卸载模式跟GPU的模式类似,将部分代码卸载到MIC上运行;对称模式将CPU核心和MIC核心一视同仁,但是两种核心的运算能力不一样,极易导致负载不均;原生模式只使用MIC运行程序,CPU空闲。实际上,常用的还是卸载模式和原生模式。
<img src="https://yqfile.alicdn.com/299a2b5f67f2b098ba0ddb655c758c422ea31904.png" width="" height="">


此代MIC的理论性能是同时期主流CPU的3.2~3.45倍,实测性能2.2~2.9倍。因此,使用MIC编写运行程序不要期待过高的加速比。
第二代MIC的代号为Knights Landing,开发版于2016年4月开始发货,已经不是PCIe板卡,而是可以独立运行的CPU。
Knights Landing由36片组成(图1.17),每片包含2个CPU核心,每个核心包含2个VPU(Vector Processing Units,向量处理器单元)。物理形态上,不再是协处理器,而是真正的中央处理器,与通常的CPU一样使用。每个CPU核心可以运行4个线程,芯片的乱序执行也有实质性提升,每个线程的性能提高约3倍,整个处理器的理论峰值约为3Tflops。芯片上有16GB MCDRAM(Multi-Channel DRAM)内存,6个内存通道支持高达384GB DDR4外部内存。与Knights Corner中的环状拓扑结构不同,新款处理器中使用了网状的拓扑结构。尽管图1.17显示为6×7,但是由于封装方面的一些问题,布局上可能会调整为4×9。
与2016年2月发布的英特尔至强系列CPU的主力型号E5-2680 v4(主频2.4GHz,14核心,理论峰值537.6Gflops)相比,Knights Landing的理论峰值提高至约5.6倍。
<img src="https://yqfile.alicdn.com/22f1e290f785f7540e1759656c41a153716b7a14.png" width="" height="">

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
设计模式 负载均衡 并行计算
|
机器学习/深度学习 调度 容器
助力深度学习!阿里开源可插拔 GPU 共享调度工具
根据 Gartner 对全球 CIO 的调查结果显示,人工智能将成为 2019 年组织革命的颠覆性力量。对于人工智能来说,算力即正义,成本即能力,利用 Docker 和 Kubernetes 代表云原生技术为 AI 提供了一种新的工作模式,将 GPU 机器放到统一的资源池进行调度和管理,这避免了GPU 资源利用率低下和人工管理的成本。
4222 0
|
异构计算
《OpenACC并行程序设计:性能优化实践指南》一 3.8 优化GPU内核
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.8节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1024 0
|
并行计算 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 3.9 增加GPU任务并行
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.9节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1320 0
|
并行计算
《OpenACC并行程序设计:性能优化实践指南》一 3.11 小结
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.11节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1083 0
|
测试技术 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 导读
这是一本关于并行编程的书,不仅仅介绍OpenACC语法或从文档中收集的信息,更介绍了如何编写实际的、高性能的以及可移植的程序,这些程序可以运行在从CPU到GPU的大量设备上。具体而言,书中演示了使用PGI、Cray和PathScale等供应商提供的编译器编译示例代码,并在Intel x86处理器、Cavium 96核64位ARMv8处理器芯片集和NVIDIA GPU上运行。
2196 0
《OpenACC并行程序设计:性能优化实践指南》一 第1章 从串行编程到并行编程
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1176 0
|
异构计算
《OpenACC并行程序设计:性能优化实践指南》一 2.5 在多核系统中并行运行
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.5节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1224 0
|
程序员
《OpenACC并行程序设计:性能优化实践指南》一 2.3 描述数据移动
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.3节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1274 0
|
存储 缓存 程序员
《多核与GPU编程:工具、方法及实践》----1.3 现代计算机概览
现代计算机模糊了Flynn分类的界限。为了获取更高性能,根据其测试的层次,现代计算机既是MIMD也是SIMD。 通过小型化和改进半导体材料增加晶体管数目,现代计算机目前主要有两种趋势。
2586 0

热门文章

最新文章