CPU和GPU真融合 APU异构系统架构解析
泡泡网CPU频道5月28日 任何一种处理器芯片的发展,都是为了要面向未来的应用而设计的。那么我们就从最近几年的互联网、PC、平板、智能手机的应用和交互形式来看,新一代处理器应该满足什么样的需求:
1. 用户越来越希望能够借助手势、眼睛、身体,用自然表达的方式和机器交互;
2. 人们更加追求高像素、高清电影和视频交互;
3. 基于社交网络的应用和游戏应用会越来越多地介入到人的生活当中;
4. 越来越多的人喜欢大屏幕,越来越多的人喜欢在同一时间协同工作,而不是像以前的点对点工作方式,协同工作会增加效率;
5. 云计算作为下一代互联网、或整个人类在生存环境当中特别需要看重的一种应用。
市面上所有的应用包括未来应用基本上都是基于这几大类,那这些东西对CPU的要求又是什么呢?
1. 性能与效率
目前有两大处理器:CPU和GPU。不管CPU还是GPU,所有人都在追求性能,但性能受制于半导体制造工艺的限制,又不能无限制的提升,否则功耗和成本就无法控制,应用领域会受到严重的限制。所以现在很多人都看重“每瓦性能”,或者是说效率。
2. 功能与架构
在处理器发展历史中,为了解决各种特定的问题,不断有互不兼容的特定功能计算模块被加入系统,却很少从全局优化的角度加以考察。计算机整体效率不高的现状正是这种设计模式的直接后果。常见情况是软件的计算负载被调度在一个并不适合当前任务的模块上低效执行。
无论X86架构还是ARM架构都是同步处理器系统,一种处理器系统能否解决所有的运算?CPU和GPU都有独特的运算能力,他们有没有被用于执行最适合自己架构的应用?处理器是用来处理器数据的,而数据是在不同的子系统中来回搬迁的,而搬迁数据的难易程度又会严重影响处理器的效率。
3. 应用与开发
硬件的性能需要软件来发挥,软件开发者需要强大的编程模型来充分利用新的计算能力。应用软件需要支持和兼容广泛的硬件平台也日益变得重要。对开发者而言,随着平台种类的不断增多,目前反复移植代码的惯常方法必然难以为继。
综上,处理器产业需要一种新的发展思路——让处理器架构更加高效, 才能在上述需求交织的复杂环境中前行。这种新的思路需承诺在功耗、性能、可编程性和可移植性这四个维度上同时都有改进。
计算机从诞生之日起就配有中央处理器,即执行通用计算任务的CPU。但在过去的二、三十年中,主流的计算系统同时配置了其他计算处理单元,其中最常见的是图形处理器(GPU)。最初,GPU应用于并行化的特殊的图形计算。随着时间推移,GPU的绝对计算能力越来越强,而专用芯片的特点则逐渐淡化,此消彼长的结果是,GPU可以较好的性能-功耗比完成通用并行计算的任务。
今天数量越来越多的主流应用要求兼具高性能和低功耗的素质,并行计算是达成目标的唯一途径。但是,当前的CPU和GPU是分立设计的处理器,不能高效率地协同工作,编写同时运行于CPU和GPU的程序也是相当麻烦。由于CPU和GPU拥有独立的地址空间,应用程序不得不明确地控制数据在CPU和GPU之间的流动。
CPU代码通过系统调用向GPU发送任务,此类系统调用一般由GPU驱动程序管理,而驱动程序本身又受到其他调度程序管理。这么多的环节造成了很大的调用开销,以至于,只有在任务所需处理的数据规模足够大,任务的并行计算量足够大时,这样的调用开销才是划算的。而其他的调用形式,比如由GPU向CPU发送任务,或者GPU向自己发送任务,在今天则根本不被支持!
为了充分释放并行处理器的计算能力,架构设计者必须打破既有格局,采用新的思路。设计者必须重塑计算系统,把同一个平台上分立的处理单元紧密整合成为不断演进单颗处理器,同时无需软件开发者的编程方式发生重大的改变,这是HSA设计中的首要目标。
为此,异构系统架构(HSA,Heterogeneous System Architecture)创造了一种更佳的处理器设计,展示了CPU和GPU被无缝集成后所带来的益处和潜能。通过HSA,程序可以在统一的地址空间中建立数据结构,在最合适的处理器上创建任务。处理器之间的数据交互不过是传递一个指针。多个计算任务之间通过coherent memory,barrier,和atomic等操作来保证数据的同步(和多核CPU的方式相同)。
HSA用一句话来概括就是:一种智能计算架构,通过无缝地分配相应的任务至最适合的处理单元,使CPU、GPU和其他处理器和谐工作在单一芯片上。
上一代APU虽然已经将CPU和GPU无缝融合在了一起,但并没有实现“分配相应的任务至最适合的处理单元”,这就是HSA架构的精髓,也是AMD未来APU想要努力实现的方向。
HSA系统的几大特性:
1. 任何处理单元的数据可以轻易地被其它处理单元所访问;
2. 异构计算不仅包括GPU,还包括其它专用处理单元或协处理器;
3. 编程人员不用知道程序在什么处理单元上运行;
4. GPU和其它处理单元无缝访问虚拟内存,解决数据搬迁瓶颈,数据无需复制。
HSA成功的一个关键是最小化应用程序移植的代价。从过去的经验来看,要求软件供应商修改代码以适应新的硬件的这种做法充其量只能获得有限度的成功。对于厂商专有解决方案就更是如此了。要成为主流技术,必须降低使用者的门槛。这就是HSA的设计思路。HSA解决方案为应用程序员提供了硬件、接口、通用的中间语言和基本的运行时环境,封装并隐藏了内存一致性,任务调度管理等等复杂的底层细节。
我们的系统中会有很多处理器、音频处理器、视频处理器、固定功能加速器,图形信号处理器等,很多时候这些处理器都是需要协同工作的,实际上在异构系统当中已经变成可能,由完全一致性的共享内存使整个处理器的各个子系统一次性的可见变成一种可能。HSA架构下,GPU也是支持C++的,最重要的是CPU指针,在现在操作系统当中,内存实际上是通过虚拟内存的管理来实现的,实际上在异构系统当中最重要的变化是这种配置是全局可见的,在未来GPU将变成可抢占性的,意味着操作系统是可以参与调配的。
可以看到,在硬件层面,HSA架构当中的异构统一内存访问是一项关键技术,因此有必要详细介绍一下UMA:
一个真正的UMA系统中,所有的计算核心共享一个单一的内存地址空间,而NUMA采用非统一内存访问的GPU计算系统,不同的地址需要额外的数据来实现堆栈管理,频繁的拷贝,同步和地址转换增加了编程复杂性。HSA恢复GPU到统一内存访问,异构计算取代GPU计算。
hUMA的主要特性:
1. 双向的一致性,CPU和GPU任何一个处理单元做出的更新对其他的处理单元都是可见的。
2. GPU支持分页内存管理,GPU可以产生缺页异常,不再受限于传统的页表锁定内存;
3. 系统整体内存空间的全局管理,CPU和GPU进程可以从整个内存空间中动态分配内存。
以往的处理器都不支持hUMA架构,此时数据需要在CPU和GPU之间复制,CPU先把数据从内存复制到显存中,等GPU完成计算之后,再从显存中复制到内存中。如此频繁的转移数据,会浪费不少处理器时间,导致处理器效能不高,同时占据了大量的系统总线带宽。
未来处理器采用hUMA架构之后,数据就无需复制了,CPU只需将指针传递到GPU,GPU处理完毕后,CPU就可以直接读取结果,这样将极大的提高处理器效能,并降低对总线带宽的占用。
最后再来回顾一下hUMA架构的特性:整体内存空间访问、分页内存、双向一致性、GPU快速访问系统内存、动态内存分配。值得一提的是,目前已经上市的APU产品还不能支持hUMA架构,AMD会在下半年发布的下一代APU产品中提供支持,届时异构计算的效能将会得到释放。
如果意图在更广泛的应用中被采纳,HSA必须超越自身,不再仅仅是某个硬件厂商的独家解决方案。软件开发者的理想一直是“一次编码,处处运行”,实现这个理想需要具备一个跨平台和跨设备的基础架构。这也是HSA的愿景。HSA基金会由此成立,作为一个开放的工业标准组织,基金会的工作是把计算产业的参与者们联合到同一面旗帜之下。HSA的五家创始会员分别是:AMD、ARM、Imagination Technologies、MediaTek, TI和Samsung。
HSA基金会的目标是协助系统设计者把CPU、GPU这样不兼容的计算单元很好地整合在一起,消除计算单元之间数据共享和任务调用的开销。透过HSA中间语言(HSAIL, HSA Intermediate Language),不同的硬件实现向上暴露出统一的软件接口。HSAIL也是所有底层软件模块、开发工具一致的目标平台。同时,HSAIL足够灵活并且接近硬件,各个硬件厂商可以高效地把它映射到自己的硬件设计上。HSAIL也解放了程序员,后者不必为不同硬件平台裁剪自己的代码,同一套代码可以顺利运行在不同CPU/GPU配置的系统上。
由于HSA是面向未来的架构,所以首先需要软件开发者配合,他们开发出来高质量高性能的软件,再加上操作系统层面的支持,最终用户将会得到丰富完美的体验,当然这需要较长的时间才能实现并完善。
硬件方面,一旦处理器使用HSA架构之后,异构计算的效率将会大幅提高,这样就能用相同尺寸和成本的芯片提供更高的性能,OEM厂商可以降低产品的整体厚度和重量,产品拥有更长的电池续航,从而给用户带来更好的使用体验。
由于目前还没有支持HSA的处理器产品问世,所以所有的技术介绍及数据都来自于AMD内部。AMD大中华区游戏,软件及异构计算合作与技术总监楚含进向大家分享了HSA架构的应用实例——人脸识别技术:
人脸识别技术看似简单,实则是通过暴力计算的方式来实现,处理器需要在一张图片中画出无数个搜索框,从中寻找人脸的关键特征,一张1080p像素的全高清图片需要分析200万次……
一张图片中可能会有无数个人脸,处理器一开始并不知道人脸有多大,所以需要不断地对图片进行缩放从而寻找合适大小的脸。
最终,人脸识别的过程被细分为22个阶段,每一个搜索框都需要重复这22个阶段,如果是静态图像还好,动态视频的话30FPS就需要每秒1.4万亿次的计算能力……而且这个速度仅能识别正面人脸。
经过测试,这22个阶段中,并不是所有阶段都是GPU处理速度更快,也有CPU占据明显优势的,也有性能速度差不多的,毕竟两者计算架构完全不同,适应不同的运算。
22个阶段CPU和GPU各有所长,最终根据效率高低,第0阶段让CPU独立计算,第9-22阶段让GPU独立计算,而1-8阶段让CPU和GPU协同计算会更快一些。
最终经过测试获得的数据显示,HSA为CPU和GPU智能分配任务后,人脸识别速度提高了2.5倍之多!
这个案例意味着什么呢?我们再来回顾一下本文第一页提到的内容:用户越来越希望能够借助手势、眼睛、身体,用自然表达的方式和机器交互——没错,体感!然后呢?游戏机——索尼PS4和微软Xbox One——它们都用的是AMD下一代的APU,都是基于HSA架构而设计的,而且是低功耗的CPU架构搭配为计算优化的GCN GPU架构!
只有HSA架构才能彻底的将GPU强大的运算能力释放出来,从而降低对CPU的依赖,大幅提升性能功耗比,降低应用开发难度,这就是索尼和微软不约而同的选用AMD APU的根本原因,否则传统PC架构优异CPU搭配独立显卡不是更好么?游戏机硬件一旦确立,未来5年内甚至更长时间都不会再改变,因此必须选用前瞻性的架构,索尼的微软为次世代游戏主机选择了HSA和APU,PC同样是大势所趋,让我们一同期待AMD下一代桌面级APU的表现吧!■<