可重构计算处理器技术
Tips
可重构计算
两个特点:
- 制造后芯片的功能单元具有可重构能力
- 能实现很大程度的算法到计算引擎的空间映射
可重构计算方式
可重构计算采用的是一种将指令流驱动处理器的功能灵活性和数据流驱动处理器的高能量效率
(即性能功耗比) 结合在一起的计算方式,其在性能、功耗和功能灵活性等芯片的关键指标之间具有更好的平衡。
可重构计算处理器可以在运行时通过配置流来动态改变运算单元阵列的功能 ,然后通过数据流来驱动运算单元阵列进行计算,因此是一种由配置流和数据流来共同驱动的计算方式。
可重构计算应用领域特点
计算密集、数据间依赖关系较弱、运算形式规则且具备较强并行性、控制流和数据流能够有效分离等
颗粒度
颗粒度指的是数据的最小位宽 。
任务编译
将应用程序通过任务划分、代码变换、任务调度及映射等过程,最终将应用程序编译生成可重构计算处理器中主控制器的控制码和可重构硬件的配置信息
为什么可重构计算
传统计算技术:基于指令流驱动,基于数据流驱动都有缺陷
- 指令流驱动的处理器通常具有很强的灵活性,但指令驱动的执行方式、有限的运算单元和存储带宽,使得此类处理器的整体性能和功耗很不理想;
- 数据流驱动的处理器计算类型称为定制计算或者专用计算,专用计算根据特定的应用来定制电路结构,无需指令集,其执行速度因而很快、功耗很低,但其灵活性和扩展性很差,无法满足层出不穷、不断演进的应用需求。
可重构计算处理器的硬件架构
![1554254030036](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554254030036.png)
与传统的指令流驱动处理器一样,可重构处理器也主要由控制单元、数据通路、存储器和输入/输出接口组成
可重构的实现
与指令流处理器的主要差别在于,控制单元通过配置信息而不是指令来控制数据通路的行为,存储器当中所存储的指令也被配置信息所取代
数据通路由运算单元阵列PEA组成,阵列内部继承了众多基本算术运算单元(如加法器,乘法器等)和逻辑运算单元(如与、或、非等逻辑门),控制单元通过配置信息来选择和组织这些运算单元,以实现特定的功能
数据通路
PEA实例:![1554255381992](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554255381992.png)
- 运算单元PE通过路由逻辑互相连接组成PEA
- PEA通过I/O buffer和AHB接口与存储器交换数据
- PEA通过Config context buffer和AHB接口与控制单元和存储器交换配置信息
- PEA通过Interrupt接口向控制单元发送中断信号
数据通路通常包含多个PEA:![1554258133141](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554258133141.png)
这些PEA被片上程序管理器(On-chip program manager)——硬件模块加以控制,以最大限度地提高PEA的计算效率
运算单元阵列(PEA)设计要点
PE 通常由一个算术逻辑单元 (ALU),多个多路选择器 (MUX)、以及输入输出寄存器组成
![1554260871374](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554260871374.png)
可重构计算处理器的控制单元通过配置信息来选择 ALU 的不同功能,选择MUX 的不同输入,并选择存储在不同的寄存器里,从而实现单个 PE 的功能重构,进一步就实现了PEA 的功能重构
核心设计参数:PE的颗粒度、PEA的同构和异构方式、PEA的配置方式和配置深度、PEA的拓扑结构和路由策略、PEA的接口技术、PEA的计算模型
- PE的颗粒度选择:颗粒度越小,灵活性越大,但配置信息多;颗粒度越大,配置信息少,但灵活性小,对低位宽数据的运算效率低下。影响:很大程度上影响了重构的通信代价和计算性能
- PEA的同构和异构方式选择:同构的PE阵列相对规整,控制简单,实现起来容易,但灵活性小;异构的PE阵列相对灵活,但控制逻辑复杂。影响:控制逻辑复杂程度;PE阵列能够支持的配置模板数量
- PEA的配置方式和配置深度选择:静态配置的方式控制逻辑简单,但无法体现实时重构的特性,灵活性小;动态配置灵活性高,但控制逻辑复杂,面积消耗大。较小的配置深度对硬件资源要求小,但对并行计算的支持能力较低;较大的配置深度对硬件资源的要求较高,对调度能力的要求也高。影响:很大程度上决定了PE阵列的计算性能
- PEA的拓扑结构和路由策略选择:复杂的拓扑和路由策略可以实现较完整的互连,但是重构的通信代价和面积开销都比较大;简单的拓扑和路由策略又不足够灵活 。影响:很大程度上决定了PE阵列的灵活程度
- PEA的接口方式选择:PE阵列和控制单元得过于紧密,通信代价很小, 但是灵活性不够;耦合得过于松散,通信代价太高,控制单元对PE阵列的控制力随之减弱。影响:对数据吞吐率有重要影响,很大程度上决定了并行操作是否能够高效地进行
- PEA的计算模型选择:如单指令多数据SIMD、多指令多数据MIMD等。影响:决定了PE阵列计算方法,一定程度上决定了阵列的并行运行程度
片上程序管理器
为什么需要片上程序管理器
片上程序管理器配合可重构计算处理器的编译器,最大限度的挖掘程序间的并行性,动态地协调不同粒度PEA间, 以及PEA与控制单元间的关系,控制 PEA 进行并发的配置和运算,最终能够以最小的时间和能耗代价,实现多道程序的并发执行 ;而且片上程序管理器还负责PEA的数据流和配置流的管理
可重构计算处理器的配置流和数据流控制包括了PEA内部、PEA与存储器之间、PEA与片上互联网络间的配置流和数据流管理等
影响:片上程序管理器的系统架构和运行方式,很大程度上决定了可重构计算处理器的性能
控制单元
控制单元的主要功能是读入并高速缓冲配置信息,然后将这些配置信息作用到 PEA 上
关键难点:如何将配置信息的读入时间,以及将配置信息作用到 PEA 上的时间缩短,以充分发挥PEA的运算性能
核心问题:
- 如何设计出一种特定的配置信息表达方式 (类似指令流驱动处理器的指令集设计)
- 如何压缩配置信息的数量
- 如何将配置信息的传递与运算阵列的执行最大程度的并行起来
![1554262435371](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554262435371.png)
控制单元在逻辑上通常由多层高速配置信息缓存器与相应的配置信息读写和解析逻辑组成
与指令流驱动处理器的高速指令缓存器区别是:一套配置信息往往是针对一个甚至多个任务来设计的,因此配置信息的 Cache Miss 所带来的额外开销将会更加巨大 。但由于编译器生成配置信息的过程中,某些时候是知道配置信息之间的前后顺序的,这可以一定程度上降低 Cache Miss 带来的损害
存储单元
存储单元是可重构计算处理器的核心组件,其数量的多少和组织方式直接影响着整个芯片的面积和系统的功耗
基于片上网络的分布式存储结构可以进行并行的数据存储、传输及交换
片上分布式存储器设计研究的核心内容:存储颗粒的选择、存储子系统与 PEA 和网络接口设计、存储单元的访问机制选择
可重构计算处理器的编译技术
任务编译
核心工作即是对输入的应用程序进行代码分析,利用软硬件协同设计的方法将应用程序划分成软件运行部分代码和硬件执行部分代码,然后针对各部分的程序代码进行各自的编译处理,分别生成可重构计算处理器中主控制器的控制码和可重构硬件的配置信息
任务编译器架构
PEA 中的计算阵列的规模是有限的,而计算任务需要的计算资源往往超过 PEA 所能提供的计算资源,则在任务编译的时候,需要对输入的任务进行时域划分,将任务划分成一系列相互依赖的子任务模块集。最后将这些子任务分时映射到 PEA 中的计算阵列中,达到分时复用计算阵列的目的 。
应用程序可划分为控制密集型代码段和计算密集型代码段
- 控制密集型的代码段将在任务编译器中插入相关的标记信息 (即添加调用接口标记),该部分代码将编译成控制器中运行的控制码序列
- 计算密集型代码段,在任务编译器中将对该型代码进行代码变换,并在变换的基础上进行代码优化,提高这部分代码的执行效率,优化结束后,代码转换为任务编译器的中间表达 ,计算密集型代码段将最终映射成 PEA 的配置信息, 则此时还需对中间表示的任务进行映射 。任务映射过程中,还需解决两个关键问题:内部存储器管理和配置信息优化
任务编译关键技术
4个方面的关键技术:代码变换及优化、任务时域划分、内部存储器管理和配置信息优化
1.代码变换及优化
为什么要代码变换及优化
在任务编译器当中,处理的高级编程语言多是面向过程的语言,算法程序中包含的可并行计算的代码段较少,并且在程序中不是以显式表达式的形式出现。为了有效地提高算法程序的执行性能,则必须充分挖掘高级编程语言代码中并行计算度高的程序块。
如何实现代码变换及优化
有关研究表明:在各类应用程序中核心循环体占据了程序大量的计算时间,由于循环运算会涉及迭代间的数据依赖,因此需要对循环体进行有效展开。
在此基础上进一步挖掘各个迭代间的并行运算,常见的代码变换及优化技术包括:循环展开、标量替换、仿射变换等。
2.任务时域划分
为什么要任务时域划分
可重构计算阵列的规模是有限的,而计算任务需要的计算资源往往超过 PEA 所能提供的计算资源 。只有通过将大任务划分成若干个子任务,采取分时复用硬件资源的方式,才能在有限的硬件上实现超过自身计算资源的任务 。
如何实现任务时域划分
任务时域划分是将某个任务在时域上划分为一系列相互关联的多个子任务 (也称为子模块),子任务计算规模满足硬件约束,多个子任务将分时复用同一硬件资源,依次动态配置计算阵列完成各自的功能,从而等效的完成大任务所描述的功能 。
3.内部存储器管理
为什么需要内部存储器管理
当多个子任务在同一个可重构硬件中运行时,由于子任务间存在着数据依赖关系,则在编译生成配置信息的过程中,需综合考虑各个子任务间的数据交互,通过内部存储器管理提高计算性能 。
如何实现内部存储器管理
解决两个主要问题:
(1)算子多目标输出时的数据交互:![1554291216065](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554291216065.png)
当某个子任务中的某个算子存在多个输出目标时,为保证数据的正确性,需对可重构硬件内部的存储资源进行有效的管理,降低存储资源的占用率。通常可以通过变量生存周期分析、算子重排序等技术,降低存储资源占用率,提高计算性能
(2)子任务间的数据交互:![1554291570804](C:\Users\Li Tianyang\AppData\Roaming\Typora\typora-user-images\1554291570804.png)
当某个子任务需要较多的中间数据作为输入时,由于这些数据存储位置松散,不利于数据块操作,因此需对这些松散数据进行重排,一方面提取当前子任务所需的运算数据,另一方面提高访存效率,通常可以通过子任务关联度分析、数据拼接等技术来提高访存效率
4.配置信息优化
为什么要配置信息优化
在动态可重构计算系统中,依靠配置信息的动态切换技术来改变硬件重构平台的功能特性。
针对多个子任务的配置信息,如能消除配置信息的冗余,压缩配置信息的体积,将极大地提高可重构计算处理器的计算性能 。
如何实现配置信息优化
形成冗余配置信息的直接原因是子任务间存在结构相似或者相近的算子连接子图
两个方面来消除配置信息中的冗余:
- 通过分析冗余信息比特率中的统计相关性,利用传统的数据压缩方法来减小配置信息体积;
- 通过直接分析子任务数据流图(DFG)的相关性,来减少配置信息生成
面向通用计算的可重构技术
国内外对可重构通用计算的研究:
- 采用特定的软硬件架构:如集成各种颗粒度的可重构处理器适应控制密集型的计算,可将应用范围大大扩大;如不用软件编译器而用片上的硬件资源去产生配置信息,再去驱动可重构阵列进行计算,从而大大增强可重构计算的通用性;
- 可重构计算在高性能计算领域的应用
可重构通用计算的技术问题
- 可重构硬件通常采用阵列化的结构,这使得可重构硬件对计算密集型任务具有很好的技术性能,而对控制密集型的任务则相对低效 ;
- 在通用计算系统中,不可避免的会遇到外设的响应和控制问题;
- 在内存管理、程序引导、任务调度、进程/线程管理等方面都有全新的问题 需要解决。