当前的CPU和GPU是分立设计的处理器,不能高效率地协同工作,编写同时运行于CPU和GPU的程序也是相当麻烦。由于CPU和GPU拥有独立的地址空间,应用程序不得不明确地控制数据在CPU和GPU之间的流动。CPU代码通过系统调用向GPU发送任务,此类系统调用一般由GPU驱动程序管理,而驱动程序本身又受到其他调度程序管理。这么多的环节造成了很大的调用开销.

为了充分释放并行处理器的计算能力,架构设计者必须打破既有格局,采用新的思路。设计者必须重塑计算系统,把同一个平台上分立的处理单元紧密整合成为不断演进单颗处理器,同时无需软件开发者的编程方式发生重大的改变,这是HSA设计中的首要目标。

2012年6月份,AMD联合ARM、Imagination、联发科、德州仪器共同组建了非营利组织“异构系统架构基金会”(HSA Foundation),随后吸引了三星电子、高通以及大批行业公司、科研机构的加盟。

10年前这个消息公布之后,AMD还给业界画了一个大饼——未来是属于HSA异构运算的,十六年前54亿美元收购ATI公司也是为了CPU+GPU异构运算的大业,其中CPU负责通用运算及管理,GPU则依靠强大的浮点性能提供主要输出。

不过10年过去了,HSA并没有推出什么重要的产品,实际上这几年盟主AMD都不怎么提HSA异构的事了,尽管自家的APU产品还在推。

意大利网站bitchips日前表示AMD的HSA异构运算死了,要被埋葬了,CPU、GPU共处一个核心的APU也会停止了,未来将是CPU+GPU同一封装的天下(猜测可能是chiplets 芯粒基数,GPU和CPU封装在一起,但不是同一颗DIE).

APU,​​APU​​​是“Accelerated Processing Units”的简称,中文名字叫加速​​处理器​​​,是​​AMD​​融聚未来理念的产品,它第一次将处理器和独显核心做在一个晶片上,协同计算、彼此加速,同时具有高性能处理器和最新支持DX11独立显卡的处理性能,大幅提升电脑运行效率,实现了CPU​GPU​真正的融合。APU是处理器未来发展的趋势。

AMD HSA 异构计算架构和AMD-KFD内核驱动_架构

AMD HSA 异构计算架构和AMD-KFD内核驱动_异构_02

相比INTEL的酷睿系列集成显卡,APU的GPU所占面积要大很多,将近50%。

从APU的发展来看,AMD在做的事情是让CPU和GPU彻底融为一体,无论是AMD的Llano,还是Brazos,目标都是一致的。AMD认为,CPU和GPU的融合将分为四步进行:第一步是物理整合过程(Physical Integration),将CPU和GPU集成在同一块硅芯片上,并利用高带宽的内部总线通讯,集成高性能的​​内存控制器​​,借助开放的软件系统促成异构计算。第二步称为平台优化(Optimized Platforms),CPU和GPU之间互连接口进一步增强,并且统一进行双向​​电源管理​​,GPU也支持高级编程语言。第三步是架构整合(Architectural Integration),实现统一的CPU/GPU寻址空间、GPU使用可分页​​系统内存​​、GPU硬件可调度、CPU/GPU/APU内存协同一致。第四步是架构和​​系统整合​​(Architectural & OS Integration),主要特点包括GPU计算环境切换、GPU图形优先计算、独立显卡的PCI-E协同、任务并行运行实时整合等等。

HSA:

异构系统架构(HSA,Heterogeneous System Architecture)用一句话来概括就是:一种智能计算架构,通过无缝地分配相应的任务至最适合的处理单元,使CPU、GPU和其他处理器和谐工作在单一芯片上。上一代APU虽然已经将CPU和GPU无缝融合在了一起,但并没有实现“分配相应的任务至最适合的处理单元”,这就是HSA架构的精髓,也是​​AMD​​未来APU想要努力实现的方向。

PS:根据这段描述,似乎可以得出结论,APU是 HSA发展过程中的一个阶段,两者关系用欧拉图表示可以表示成:

AMD HSA 异构计算架构和AMD-KFD内核驱动_异构计算_03

HSA系统的几大特性:

   1. 任何处理单元的数据可以轻易地被其它处理单元所访问;
   2. 异构计算不仅包括GPU,还包括其它专用处理单元或协处理器;
   3. 编程人员不用知道程序在什么处理单元上运行;
   4. GPU和其它处理单元无缝访问虚拟内存,解决数据搬迁瓶颈,数据无需复制。

在硬件层面,HSA架构当中的异构统一内存访问是一项关键技术。

AMD在技术创新上相对intel已经保持了近十年的领先优势,从64位,直连架构,集成内存控制器,到APU,​​异构计算架构​​​等。APU对Sandybridge作为现有的竞争对手,主要优势在于APU DX11 3D加速技术领先于Sandybridge DX10技术至少一代。而双显卡交火加速也是APU独有的强项。APU还可用于多种应用加速,如Steady Video,Office PPT 3D 图形加速,Adobe、Arcsoft、​​暴风影音​​​、IE9、火狐等越来越多的软件都可受益于APU加速。AMD和Apple等业界领袖公司力推的OpenCL代表未来​​并行编程​​​与目前串行编程的完美结合,而APU在这个未来发展方向上具有很大的优势。功耗方面APU也有较好的表现,尤其在需要3D图形加速运算的场景更显优势。预计在未来几年强调超轻薄、低功耗、图形性能的大趋势中,APU会越来越占优势。而且APU在重整的​​HSA异构系统架构​​的新技术发展中也会越来越显出结构性的优势。

AMD显卡产品

在AMD官网的产品目录页,AMD将显卡产品线分为两个大系列分别展示,其中一个是传统的渲染显卡,而另一个则是GPGPU计算卡。

​https://www.amd.com/zh-hans/graphics​

渲染显卡部分展示传统的独立显卡,比如 Radeon系列,以及嵌入式和定制显卡,也对基于HSA架构的APU进行了介绍。 

AMD HSA 异构计算架构和AMD-KFD内核驱动_处理单元_04

而计算卡产品线则有MI200等产品,用于数据中心

AMD HSA 异构计算架构和AMD-KFD内核驱动_系统架构_05

AMDKFD内核驱动

作为 AMD 开源 HSA 异构计算核心的重要部分之一的 AMDKFD 内核驱动被纳入 Linux 3.19 内核,标志着 Linux 平台上的 HSA 计算基础架构完成。

本次合并入的 ​amdkfd 可以理解为在 DRM 子系统中提供了 CPU 与 GPU 沟通的快速通道,使得两者可以平等的访问内存资源而无需额外拷贝。结合前端时间同样​​开源的 HSA DRM 用户态组件​​改善,现有的 RadeonSI 开源驱动及 Mesa OpenCL State Tracker,Kaveri 系列 APU 即可实现异构计算。

AMDKFD在内核源码中的位置./linux-5.0/drivers/gpu/drm/amd

~/Workspace/linux/linux-5.0/drivers/gpu/drm/amd$ tree -L 1
.
├── acp
├── amdgpu
├── amdkfd
├── display
├── include
├── lib
└── powerplay

7 directories, 0 files
~/Workspace/linux/linux-5.0/drivers/gpu/drm/amd$

深入到代码,打开amdkfd/kfd_chardev.c文件,可以看到AMD KFD驱动是典型的字符设备,通过设备节点/dev/kfd 向外界暴露功能的。

AMD HSA 异构计算架构和AMD-KFD内核驱动_系统架构_06

字符设备驱动节点,主次设备号分别为238和0.

AMD HSA 异构计算架构和AMD-KFD内核驱动_架构_07

gpu目录下的核心代码在DRM目录,其他几个目录应该是GPU历史上不同时代的老驱动,在当前的主流终端上用不到。

AMD HSA 异构计算架构和AMD-KFD内核驱动_系统架构_08

进入DRM目录,可以看到内容分布是DRM源码实现和各个GPU vendor的显卡驱动。

AMD HSA 异构计算架构和AMD-KFD内核驱动_异构_09

 其中就包括amd,nouveau,mediateck等国外一线GPU大厂的显卡驱动代码,也有自诩为宇宙一线的hisilicon的所谓GPU的源码,不过代码量很小。

grep 字符驱动关键函数调用,发现只有三个地方调用了字符设备的API函数。对于没有创建字符设备节点的显卡驱动,可能是通过DRM的设备节点调用下来的。

AMD HSA 异构计算架构和AMD-KFD内核驱动_系统架构_10

以imagination为例,POWERVR的GPU驱动基于DRM框架,是字符设备,设备节点是/dev/dri/renderD128.

KFD

根据WIKI百科的介绍,KFD是kernel fusion driver的缩写,不像NVIDIA那样的吝啬,AMD已经将其GPU的源码全部开源,所以你从LINUX内核源码中看到的AMD GPU驱动是如假包换的正版驱动,没有类似N卡nouveau这样的玩意儿存在。

AMD HSA 异构计算架构和AMD-KFD内核驱动_处理单元_11

关于渲染和计算 GPU两种场景下和KFD&KMD的关系,理解如下:

AMD HSA 异构计算架构和AMD-KFD内核驱动_系统架构_12


结束