CGRA Basics
Coarse-Grained Reconfigurable Arrays
CGRA Basics
CGRA的名字来源于FPGA,这是一种比FPGA粒度[1]更大的RA。FPGA的粒度大小一般是单比特大小的逻辑门,而CGRA则是位宽大小的ISs.由于CGRA的粒度更大,因此其配置信息相较于粒度更小的FPGA而言,CGRA的配置信息更少,重构时间也将大幅度降低,因此,CGRA相比于FPGA最大的优点便是其支持动态可重构,可以在每个cycle中完成动态重构。因此CGRA某种程度上可以看作是一种动态重构FPGA。
一般来说,CGRA不会单独执行任务,往往其会跟通用处理器如RISC-V 一起协作完成相关任务。而CGRA的主要任务则是集中于高效处理任务中的一类循环。协作通用处理器则是进行完成非循环代码或者循环外的任务,这样处理的目的则是能让CGRA可以进一步采用循环中ILP(Instruction level paralism)的VLIW原理来加速循环内的任务执行。
不同于VLIW架构而言,CGRA能够从高ILP循环中得到高性能的原因主要有两点。
首先,CGRA能够提供相较于VLIW更多的ISs [2]。而更多的ISs可以提供更多的IPCs,从而提供更高的性能。另一方面,由于ISs的提高IPCs,因此在内存带宽上随之增加,因此可以在CGRA中采取在ASIPs,ASICs和其他的一些DSPs的特殊存储器层次,如stream buffers等。
第二点原因便是CGRA相比于VLIW而言,其ISs支持直接互联而不用通过RF(Resiter File)来传输数据。这样的结果便是更少的寄存器复制操作执行,从而提高了IC和解放了更多的ISs,以此获得了性能上的提高。
而对于CGRA获得更高的能效方面则是包含多种因素,上述中提到的ISs之间的直接连接则是可以减少数据传输,从而提高能效。另外一点便是ISs被布置到了2D矩阵上,所以具有很少端口的小RF可以分布在IS之间。这与(集群)VLIW架构中的多端口RF形成对比,VLIW架构基本上以一维设计为特征。
CGRA架构也存在两个缺点,第一,CGRA只支持简单循环任务,需要通用core来支持其他任务操作。其次,由于ISs之间的互联,CGRA的架构更加复杂,不存在RFs和ISs一对一的连接映射,这需要在编译器或编写者保留连接信息到对应的ISs上。因此,CGRA需要更加复杂的编译器技术自动映射代码到CGRA上。