两个特点:
可重构计算采用的是一种将指令流驱动处理器的功能灵活性和数据流驱动处理器的高能量效率
(即性能功耗比) 结合在一起的计算方式,其在性能、功耗和功能灵活性等芯片的关键指标之间具有更好的平衡。
可重构计算处理器可以在运行时通过配置流来动态改变运算单元阵列的功能 ,然后通过数据流来驱动运算单元阵列进行计算,因此是一种由配置流和数据流来共同驱动的计算方式。
计算密集、数据间依赖关系较弱、运算形式规则且具备较强并行性、控制流和数据流能够有效分离等
颗粒度指的是数据的最小位宽 。
将应用程序通过任务划分、代码变换、任务调度及映射等过程,最终将应用程序编译生成可重构计算处理器中主控制器的控制码和可重构硬件的配置信息
传统计算技术:基于指令流驱动,基于数据流驱动都有缺陷

与传统的指令流驱动处理器一样,可重构处理器也主要由控制单元、数据通路、存储器和输入/输出接口组成
与指令流处理器的主要差别在于,控制单元通过配置信息而不是指令来控制数据通路的行为,存储器当中所存储的指令也被配置信息所取代
数据通路由运算单元阵列PEA组成,阵列内部继承了众多基本算术运算单元(如加法器,乘法器等)和逻辑运算单元(如与、或、非等逻辑门),控制单元通过配置信息来选择和组织这些运算单元,以实现特定的功能
PEA实例:
数据通路通常包含多个PEA:
这些PEA被片上程序管理器(On-chip program manager)——硬件模块加以控制,以最大限度地提高PEA的计算效率
PE 通常由一个算术逻辑单元 (ALU),多个多路选择器 (MUX)、以及输入输出寄存器组成

可重构计算处理器的控制单元通过配置信息来选择 ALU 的不同功能,选择MUX 的不同输入,并选择存储在不同的寄存器里,从而实现单个 PE 的功能重构,进一步就实现了PEA 的功能重构
核心设计参数:PE的颗粒度、PEA的同构和异构方式、PEA的配置方式和配置深度、PEA的拓扑结构和路由策略、PEA的接口技术、PEA的计算模型
片上程序管理器配合可重构计算处理器的编译器,最大限度的挖掘程序间的并行性,动态地协调不同粒度PEA间, 以及PEA与控制单元间的关系,控制 PEA 进行并发的配置和运算,最终能够以最小的时间和能耗代价,实现多道程序的并发执行 ;而且片上程序管理器还负责PEA的数据流和配置流的管理
可重构计算处理器的配置流和数据流控制包括了PEA内部、PEA与存储器之间、PEA与片上互联网络间的配置流和数据流管理等
影响:片上程序管理器的系统架构和运行方式,很大程度上决定了可重构计算处理器的性能
控制单元的主要功能是读入并高速缓冲配置信息,然后将这些配置信息作用到 PEA 上
关键难点:如何将配置信息的读入时间,以及将配置信息作用到 PEA 上的时间缩短,以充分发挥PEA的运算性能
核心问题:

控制单元在逻辑上通常由多层高速配置信息缓存器与相应的配置信息读写和解析逻辑组成
与指令流驱动处理器的高速指令缓存器区别是:一套配置信息往往是针对一个甚至多个任务来设计的,因此配置信息的 Cache Miss 所带来的额外开销将会更加巨大 。但由于编译器生成配置信息的过程中,某些时候是知道配置信息之间的前后顺序的,这可以一定程度上降低 Cache Miss 带来的损害
存储单元是可重构计算处理器的核心组件,其数量的多少和组织方式直接影响着整个芯片的面积和系统的功耗
基于片上网络的分布式存储结构可以进行并行的数据存储、传输及交换
片上分布式存储器设计研究的核心内容:存储颗粒的选择、存储子系统与 PEA 和网络接口设计、存储单元的访问机制选择
核心工作即是对输入的应用程序进行代码分析,利用软硬件协同设计的方法将应用程序划分成软件运行部分代码和硬件执行部分代码,然后针对各部分的程序代码进行各自的编译处理,分别生成可重构计算处理器中主控制器的控制码和可重构硬件的配置信息
PEA 中的计算阵列的规模是有限的,而计算任务需要的计算资源往往超过 PEA 所能提供的计算资源,则在任务编译的时候,需要对输入的任务进行时域划分,将任务划分成一系列相互依赖的子任务模块集。最后将这些子任务分时映射到 PEA 中的计算阵列中,达到分时复用计算阵列的目的 。
应用程序可划分为控制密集型代码段和计算密集型代码段
4个方面的关键技术:代码变换及优化、任务时域划分、内部存储器管理和配置信息优化
在任务编译器当中,处理的高级编程语言多是面向过程的语言,算法程序中包含的可并行计算的代码段较少,并且在程序中不是以显式表达式的形式出现。为了有效地提高算法程序的执行性能,则必须充分挖掘高级编程语言代码中并行计算度高的程序块。
有关研究表明:在各类应用程序中核心循环体占据了程序大量的计算时间,由于循环运算会涉及迭代间的数据依赖,因此需要对循环体进行有效展开。
在此基础上进一步挖掘各个迭代间的并行运算,常见的代码变换及优化技术包括:循环展开、标量替换、仿射变换等。
可重构计算阵列的规模是有限的,而计算任务需要的计算资源往往超过 PEA 所能提供的计算资源 。只有通过将大任务划分成若干个子任务,采取分时复用硬件资源的方式,才能在有限的硬件上实现超过自身计算资源的任务 。
任务时域划分是将某个任务在时域上划分为一系列相互关联的多个子任务 (也称为子模块),子任务计算规模满足硬件约束,多个子任务将分时复用同一硬件资源,依次动态配置计算阵列完成各自的功能,从而等效的完成大任务所描述的功能 。
当多个子任务在同一个可重构硬件中运行时,由于子任务间存在着数据依赖关系,则在编译生成配置信息的过程中,需综合考虑各个子任务间的数据交互,通过内部存储器管理提高计算性能 。
解决两个主要问题:
(1)算子多目标输出时的数据交互:
当某个子任务中的某个算子存在多个输出目标时,为保证数据的正确性,需对可重构硬件内部的存储资源进行有效的管理,降低存储资源的占用率。通常可以通过变量生存周期分析、算子重排序等技术,降低存储资源占用率,提高计算性能
(2)子任务间的数据交互:
当某个子任务需要较多的中间数据作为输入时,由于这些数据存储位置松散,不利于数据块操作,因此需对这些松散数据进行重排,一方面提取当前子任务所需的运算数据,另一方面提高访存效率,通常可以通过子任务关联度分析、数据拼接等技术来提高访存效率
在动态可重构计算系统中,依靠配置信息的动态切换技术来改变硬件重构平台的功能特性。
针对多个子任务的配置信息,如能消除配置信息的冗余,压缩配置信息的体积,将极大地提高可重构计算处理器的计算性能 。
形成冗余配置信息的直接原因是子任务间存在结构相似或者相近的算子连接子图
两个方面来消除配置信息中的冗余:
国内外对可重构通用计算的研究: