[转载]异构系统架构标准——HSA

[转载]异构系统架构标准——HSA

https://blog.csdn.net/u010945683/article/details/46377241

 前几天看到一则新闻AMD发新Carrizo处理器http://digi.tech.qq.com/a/20150603/009450.htm 。这是第一个完整支持HSA1.0标准的产品。因为当时HSA是新生标准,没有进入市场的产品,因此对于这个标准以前只知道是关于异构计算的,没有过多的探究。这次借这个机会深入了解一下。

异构初窥

      在异构系统架构(Heterogeneous System Architecture,简称HSA)上进行并行运算的异构计算(Heterogeneous Computing)技术从上世纪80年代产生,是并行/分布计算领域里的热点之一。

       常见的计算单元有很多,例如CPU(中央处理器)、GPU(图形处理器)、协处理器、DSP(信号处理器)、ASIC(专用集成电路)、FPGA(现场可编程门阵列)。我们都知道诸如CPU主要应对的是逻辑密集运算,而GPU则是用于复杂数学运算,今天数量越来越多的主流应用要求兼具高性能和低功耗的素质,并行计算是达成目标的唯一途径。但是,当前的CPU和GPU是分立设计的处理器,不能高效率地协同工作,编写同时运行于CPU和GPU的程序也是相当麻烦。由于CPU和GPU拥有独立的地址空间,应用程序不得不明确地控制数据在CPU和GPU之间的流动, CPU代码通过系统调用向GPU发送任务,此类系统调用一般由GPU驱动程序管理,而驱动程序本身又受到其他调度程序管理。这么多的环节造成了很大的调用开销,以至于,只有在任务所需处理的数据规模足够大,任务的并行计算量足够大时,这样的调用开销才是划算的,因此很容易遇到计算瓶颈。HSA的提出就是为了应对如今日益复杂的计算要求,把同一个平台上分立的处理单元紧密整合成为不断演进单颗处理器(SOC)。下图就是HSA基金会的成员,可以看到其中有许多重量级的参与者,有软件供应商(ORACLE)、IP核供应商(ARM),也有半导体制造公司(TI),还有电子自动化设计一类的公司(Synopsys、Cadence),以及一些著名高校。

      

HSA系统架构

       1.0标准对HSA架构的系统的特征进行了描述,其中包含一些必须有的特征,也有一部分可以由厂商自己决定是否加入的,下面是对于HSA系统最基本特征的描述:

  • 共享虚拟内存
  • 缓存链接域(包括主CPU、计算核心以及内联I/O总线)
  • 内存寻址扁平化
  • 一致的系统字节顺序
  • 在所有HSA架构的系统组件(最小至原子级的部件)中基于内存的信号和同步的基本单元
  • 原子级的内存操作
  • HSA系统时间戳(提供HSA系统中的同一视角)
  • 硬件层面上用户模式的队列拥有任务级的低延迟调度
  • AQL(Architected Queuing Language)接口
  • 核心调度
  • 最大延迟可保证的抢占式内核切换
  • 核心错误报告机制(与主CPU相同详细级别)
  • 核心调试基础架构
  • HSA平台拓扑
  • 支持图像操作

 

HSA平台架构

      下面只对其中小部分Requirement具体描述。

拓扑结构

       下图是HSA架构的一个简单示例,只有一个节点,包含核心和存储资源。


       如果是一个更复杂的HSA系统,其中有一系列的主CPU、核心以及分布在多个系统组件的五个HSA存储节点,那么它的整体拓扑结构就如下图所示。

       对于复杂的HSA系统,为了随机的添加或者移除部件,系统必须提供一种识别和通知机制,使得HSA运行环境和软件可以不断枚举各个部件,以更新整个拓扑结构,同时也为了能在部件被识别的同时,得到各个部件的特性。HSA需要如下图一样的结构,用以描述整个系统中的Agent队列。

Architected Queuing Language

       一个遵循HSA标准的系统应该为核心调度提供命令接口。这个命令接口就是AQL(Architected Queuing Language)。AQL使各个核心得以建立自己的命令数据包,并将其加入队列。AQL也支持核心依照AQL格式输入命令。AQL定义了一下几种数据包类型。

  • 供应商自定义数据包
  • 无效数据包

       当整个队列初始化或read_index在增加时,数据包格式会被设置为无效。

  • 核心调度数据包
  • 代理调度数据包
  • Barrier-AND数据包

       这个数据包可以被代理加入队列中,用以延迟处理后面的数据包。

  • Barrier-OR数据包

       这个数据包可以被代理加入队列中,用以延迟处理后面的数据包。

 

       发送的数据包类型在AQL数据头描述。

图像操作

       遵循标准的平台应该视情况为HSA软件提供定义和使用图像对象的能力(支持一维至三维图像)。图像的格式只能从预先定义的格式里面选择。核心可以通过一个不透明的“指针”对图像的值进行操作。这个指针被HSA运行环境建立且只针对某一个核心。一个图像对象可以被设置为只读/只写/可读可写。除此之外,图像还有以下额外的要求。

  • 图像被HSA平台建立,可能被从全局段里复制的数据初始化。初始化后,图像结构不再保留在全局段的引用,同时数据不再被存储在全局段内。
  • 一个图像对象只能被一个核心使用,且这个核心在图像被建立时就应该声明。
  • 图像数据只能通过接口访问。
  • 图像数据的存储布局应该按定义的实现,并且对于在同一个HSA平台上的不同Agent不必相同。
  • 图像不占用共享虚拟内存的地址空间。这样做的结果就是必须通过接口访问。
  • 图像操作对于被HSA平台定义的内存排序没有影响。
  • 当图像的读写属性(只读/只写/可读可写)被修改后,指定的核心不会改变。
  • 当只读/只写的图像数据被写/读后结果不保证。

APU发展史

       为了达到上面提到的融合加速的目的,AMD公司提出了APU概念。从最初宣布到最终发布,APU花了足足四年半的光阴,看似简单的CPU、GPU整合为何如此费力?原因就是这不简单。如果只是做另一种集成显卡,那是再容易不过了,但是要把CPU、GPU两种不同的计算单元有机地融合到一颗芯片中,还要发挥二者各自的最高效率,出色地完成串行和并行计算任务,就需要在方方面面保证它们俩的和谐共处,包括各自适当的规模、超高的晶体管集成度、先进的芯片制造工艺、高速的互联总线架构、共享低延迟的内存模式、适当的成本、足够的编程与软件支持,等等。正是在这些方面经历了深入的探索之后,AMD才最终完成了APU,绘就了一张宏伟蓝图。

       为了达到这个目标,AMD将整个计划分为了四步:第一步,物理整合,CPU、GPU集成到单独一颗芯片上;第二步,平台优化,融合互连增强CPU、GPU之间的交互能力;第三步,架构整合,实现CPU、GPU内存统一寻址;第四步,架构和系统整合,从硬件到软件完全实现异构计算支持。

       2011年的Llano就代表着第一步,2012年的Trinity则是第二步,第三步则是2013年底的Kaveri,而如今的第四步将由Carrizo迈出。

 

参考资料:

AMD 和异构系统架构(HSA),http://mt.sohu.com/20150326/n410358764.shtml

http://www.amd.com/Documents/ISSCC-presentation-CN.pdf 

CPU和GPU真融合 APU异构系统架构解析,http://www.pcpop.com/doc/0/911/911103_all.shtml

HSA-SysArch-1.01,http://download.csdn.net/detail/u010945683/8780611

你可能感兴趣的:(linux)