异构多核SoC处理器内部存储架构优化
2022-09-13张多利宋宇鲲
张 玄,张多利,宋宇鲲
(合肥工业大学 电子科学与应用物理学院,安徽 合肥 230009)
随着单核处理器性能提升受到限制,研究者将研究重点转向了高性能多核处理器。通过增加处理器的核心数来提高处理器性能逐渐成为集成电路设计的趋势[1]。伴随着片上处理器核数的增多以及处理器性能的提升,对存储带宽的要求也逐渐提高,因此带来了“存储墙”问题[2],例如最新的DDR4存储带宽为2 133 Mbit·s-1,而目前多核处理器的主频高达6 GHz[3]。
为了解决访存带宽受限、访存延迟过大等问题,目前普遍采用多级缓存来缓解处理器速度与片外存储速度匹配度不高的问题。多级缓存又可分为分布式缓存设计、集中式缓存设计以及可重构缓存设计[4]等方案。文献[5~6]提出了面向阵列处理器的分布式Cache结构,使用多个处理单元(Processing Element , PE),通过多级仲裁访问多个Cache组,可快速命中数据,缓解处理器速度与片外存储速度之间的差异。但是这种增加了一层Cache网络的方案会增加面积和功耗,且PE组与Cache组之间的互联访问过于复杂。文献[7]采用集中式缓存设计,在DDR接口侧耦合了一组大容量Cache,并且结合多路并行访存结构来访问外部存储。大容量Cache能增加访存带宽,但会消耗大量SRAM,使整个系统面积增加。文献[8]使用可重构缓存设计方案,能将集中式缓存设计的一些处于闲置状态的二级存储资源重构为本地私有缓存。这种结构特异性较强,但需要二级缓存有大量空闲时间,仅适用于特定资源节点。文献[9]针对嵌入式应用的技术需求,优化了存储体系中各层次的权重,并探讨了层次化存储。本文在层次化存储的基础上,基于NOC网络的特性,复用网络中一些闲置的分布式存储资源,并研究了分布式存储的集中控制使用。
本文基于分布式缓存、集中式控制的结构,设计了一种可复用本地空闲存储资源,并将其用作二级缓存的层次化存储结构[9]来缓解存片内外存储速度不匹配的问题。本文将系统中一些长时间不用的功能单元(例如专用硬件加速器、矩阵求逆器等)的存储资源进行统一编址,使其在逻辑功能上为共享存储结构,在物理结构上为分布式存储结构;然后将这些统一编址管理的存储块作为二级缓存,供其他运算节点存取数据,节省了片上存储资源,也减小了面积。为了最大程度利用外部存储器带宽,可采取层次化存储方案,设置多路并行访存接口来访问外部存储器,提高数据的访存效率。
1 目标系统及数据组织模型
1.1 目标系统
目标系统为面向高密度计算的异构多核系统[10-12](Heterogeneous Multi-Core System,HMCS)。该系统是一种路由通讯系统,主体通讯架构由数据层、配置层、状态层等搭建。该系统上挂载了多个计算单元(Computing Unit,CU)、存储单元(Memory Unit,MU)、输入输出接口(I/O)、主控制器(Main Controller,MC)和可复用缓存控制器(Reusable Cache Controller,RCC)等,结构如图 1所示,其中计算簇和接口簇可根据需要灵活布局。该系统可执行高阶矩阵运算(Matrix Operations,MO)、快速傅里叶运算(Fast Fourier Transform,FFT)、通用浮点运算(General Floating point Processor,GFP)和可重构计算(Reconfigurable Computing Unit,RCU)等功能。执行一次FFT运算时,I/O口请求通过以太网或者PCIE接口导入任务配置信息以及运算源数据到MU,然后MC接受请求信息,解析配置信息,并分配运算单元。与此同时,通过下发控制指令去MU取源数据,并将其送到各个运算节点。各节点运算完成后,将数据写回到MU,此处的MU指外部存储器DDR3。
图1 异构多核系统结构图Figure 1. Structure diagram of heterogeneous multi-core system
1.2 数据组织模型
为了适应系统粗粒度、高密度的计算特性,本设计中的数据采用“二级矩阵[10]”形式来组织和管理数据。如图 2所示是一级矩阵,其内部嵌套多个二级矩阵块。引入矩阵带来以下优势:(1)便于对数据进行分割处理;(2)便于封装和拓展,例如可以增加矩阵维度;(3)任务访存请求的指令解析更加方便快捷。“二级矩阵”需与存储中的真实访存地址之间进行地址转换,下文给出地址转换规则,并建立参数模型。
ADDR=(P1,P2,M,N,E,S,A)
(1)
式中,P1(y,x)表示一级矩阵坐标,y∈[0,M-1],x∈[0,N-1];P2(y1,x1)表示二级矩阵坐标,y1∈[0,E-1],x1∈[0,S-1];M表示一级矩阵行数;N表示一级矩阵列数;E表示二级矩阵行数;S表示二级矩阵列数;A表示存储的起始地址,图2中的A为0。通过以上参数可以得到二级矩阵数据块内行与行之间的地址跳变,如式(2)所示。
JUMP_ADDR=(N-1)×S+1
(2)
任何一个二级矩阵块的起始地址如式(3)所示。
Start_ADDR=A+(S×N×E×y)+(S×x)
(3)
通过这7个参数可以快速定位任一矩阵块,并访问数据。
图2 两级矩阵数据组织形式图Figure 2. Diagram of two-level matrix data organization
以二级矩阵为基本存储单位,单个运算单元一次能处理一个二级矩阵数据,所以可以将一个一级矩阵分割成多个二级矩阵,再将二级矩阵分给不同的运算单元进行计算,充分利用多核并行计算来减少任务计算时间。由上述模型可知,二级矩阵块数i=M×N,若分给x(由系统特性知1≤x≤8,且i=x×N,C为整数) 个运算单元,则每个运算单元需要处理的运算单元个数为
(4)
那么,第n个运算单元以此类推,取第n个、n+x个、n+2x个直到n+(z-1)×x个数据组进行计算。
2 多核系统中本地存储块可复用设计
本文将网络中一些长时间空闲不用的存储节点统一编址管理,然后用作二级缓存,供其他节点访存数据。这样设计不仅减少了处理器访问外部存储的频率,节省了访存时间,还增加了处理器的访存带宽,提高了数据访存效率。访存带宽Bs=Bd +Bl,其中Bd为外部存储带宽,Bl为可复用二级缓存带宽[13-14]。
2.1 可复用节点的选择
复用本地节点的存储资源(下文称“可复用节点”,例如FFT、MO等节点)需要具备两个基本特点:(1)该节点所空闲的时间需足够长,防止私有存储和共享存储来回切换导致系统工作效率降低;(2)合适的位置。该位置不可距离普通计算节点(下文称“运算节点”,例如GFP、RCU等运算节点)过远,否则会导致网络链路过长、结构设置复杂化、数据存取效率降低。综合上述特点并结合系统任务特性,本文设置连续空闲时间为tx(0≤x≤n),则平均连续空闲时间如式(5)所示。
(5)
整个运算时间周期为T,当不含有FFT类型的任务时,FFT存储资源空闲周期为T;当含有FFT操作的任务时,FFT存储资源空闲周期如式(6)所示。
(6)
2.2 可复用系统架构设计
参考快表[15-16](Translation Lookaside Buffer,TLB)查询原理,将网络中可复用节点统一编址,节点内也采用首地址加偏移地址的形式做成一个查找表,即节点坐标+首地址RAM块坐标+偏移地址,快速访存所需数据。缓存任务由主控制器通过配置网下发。缓存控制器根据任务的优先级将任务分类存储并下发,优先级如表1所示,表中优先级自高向低排列。可复用二级存储结构设计如图 3所示:缓存控制模块(Cache_ctrl_top)主要实现缓存任务存储和下发、空闲节点判断回收、读写缓存任务命中下发、节点RAM的读写分配、节点RAM块状态记录等功能;地址解析模块(Addr_cfg_gen)负责计算网络中传来的读写地址;任务仲裁模块(Ach_top)主要完成访存任务的仲裁存储并按优先级下发任务;Dch为多路并行数据通道模块,访问DDR3_ip;Data_Type为不同的任务类型,具有不同的优先级。
表1 不同类型任务优先级及占用数据通道资源
图3 可复用二级存储结构设计图Figure 3. Design diagram of reusable secondary memory structure
主控制器会下发写缓存任务和读缓存任务。当缓存控制器通过配置网接收到写缓存任务时,缓存控制器会根据缓存内各个节点的空闲情况以及节点空闲的位置,根据写入节点坐标与预判断的读出节点的曼哈顿距离[17-18],选择两者节点坐标曼哈顿距离的平均值节点作为目的节点,并在选定好节点后建立连接,通过数据网传输数据。同理,当接收到读缓存任务时,解析读任务配置信息,判断出所读数据批次和数据量,然后根据快表找到所需数据所在位置,通过数据网读出数据到目的节点。读写请求流程如图 4所示,左侧表为读缓存请求流程,右边表示写缓存流程。
图4 读写缓存流程图Figure 4. Flow chart of read and write cache
2.3 变长批量数据请求的页表设计
为了减少处理器因访问大容量内存而导致的性能下降,引入了TLB。本文TLB中的项由两部分组成,即标识和数据。标识中存放的是虚拟地址的一部分,数据部分存放物理页号以及其他一些辅助信息。假设内存页大小是256×64 bit,则TLB中有64项,采用直接映射方式时的TLB变换原理如图5所示。因为页大小是256×64 bit,所以虚拟地址的0~7 bit作为页内地址偏移。由于一批数据所占块数不同,所以虚拟地址的8~13 bit记录块长度。TLB表有64项,所以虚拟地址的14~19 bit作为TLB表项的索引,20~25 bit则为一批数据的批标识。假如虚拟地址的14~19 bit是1,那么就会查询TLB的第1项,从中取出标识,与虚拟地址的20~25位作比较,如果相等,表示TLB命中,反之则表示TLB失靶。
图5 TLB命中示意图Figure 5. Schematic diagram of TLB hit
在写数据时,如图6所示,需要用RAM1作为第2个查找表,记录所需的数据块,同时用RAM2记录数据块的地址,这样在释放时可以清楚地知道数据块被释放的地址,使其可以被再次回收使用。当TLB命中时,则说明命中所需批次数据块的首地址,那么根据首地址以及所需数据的块数,可将所需全部数据按顺序读出。
图6 读写数据块位置记录示意图Figure 6. Schematic diagram of position record of read and write data blocks
3 实验验证
本文将可复用的缓存架构设计集成到Xilinx XC7V2000T FPGA上的目标HMCS中,加载一些任务,验证其功能并对性能进行评估。测试流程为:待系统初始化后,上位机经以太网口导入配置信息和源数据到外部存储DDR3中;配置信息再从DDR3通过片上网络传送到主控制器中。主控制器为各运算簇分配算力,开始运算任务;运算完成后的数据经片上网络存储在外部存储中,随后经以太网打包传送至上位机;上位机将运算结果数据与理论数据进行对比,从而验证系统的性能。
平均数据传输并行度(Data Transfer Parallelism,DTP)表示系统并行执行的访存任务的平均数目。该值越大,则说明多核并行计算度高,需要的周期越少。由于系统中旁路数据通道最多6组并行,而缓存组最多8路并行,所以平均DTP的计算如式(7)所示。
(7)
计算访存比(Ratio of Computation time to Access time,RCA)的定义为:在一次任务计算过程中,计算所消耗周期数TC与访存所消耗周期数TM的比值,以此描述任务的复杂度。
(8)
系统性能测试共有3组实验,各组实验特征如表2所示。
表2 实验组特征表
3.1 资源消耗
本文所设计的可复用存储架构中有两种类型的可复用节点FFT和MO,每种可复用类型有8组,每组有14块BRAM,每块大小为2 k×64 bit。本文方法总体所消耗的资源如表 3所示,其相比文献[7]中的方法多耗费Slice LUT,但节省了Block RAM36,因此在片上资源较少且可以节省面积;与文献[10]方法对比,虽然资源消耗相似,但是本文所涉及结构的性能有较大提升。
表3 资源消耗表
3.2 实验1
实验1的目的是测试没有计算任务的数据存取。以矩阵转置为实验对象,有6个CU参与运算,每个运算单元在不同的矩阵规模下运行2 048次,在每种矩阵规模下取平均值给出实验结果。图7表示平均任务执行周期数,图8表示平均DTP对比图。此时DDR基本无空闲带宽,所以理论上与普通存储架构性能接近。
图7 实验1任务执行周期数Figure 7. Number of task execution cycles of experiment 1
图8 实验1数据传输并行度Figure 8. Data transmission parallelism of experiment 1
由上述实验结果对比图可知,实验1的任务执行周期数加速比的平均值为1.011,性能提升1.1%;平均DTP加速比的平均值为1.016,性能提升1.6%。这是由于实验1的矩阵转置没有计算过程,片上网络与外部存储一直在交换数据,DDR3无空闲带宽,没有用到片上共享存储,所以性能与文献[10]接近。
3.3 实验2
实验2是不包含FFT任务的简单计算。将FFT作为共享缓存使用,以8个RCU进行简单的单精度浮点运算为实验对象。每个RCU在不同矩阵规模下运行2 048次,在不同的矩阵规模下取平均值给出实验结果。图9表示平均任务执行周期数,图10表示平均DTP对比图,此实验理论上可获得最佳性能。
图9 实验2执行周期数Figure 9. Number of task execution cycles of experiment 2
图10 实验2数据传输并行度Figure 10. Data transmission parallelism of experiment 2
由上述实验结果可知,实验2的任务执行周期数加速比平均值为1.406,性能提升40.6%,平均DTP加速比的平均值为1.412,性能提升41.2%。在本实验中,RCU复数运算的中间数据不用回到外部存储中,其暂时寄存在二级共享缓存中,减少了系统与外部存储交换数据的频率,并且没有共享存储和私有存储之间的转换,从而使得本文方法与文献[10]方法相比,在性能上得到了提升。该实验结果也与理论结果相符,但是随着数据量的增加,由于缓存容量有限,所以性能提升幅度减少,加速比也呈下降趋势。
3.4 实验3
实验3是流水线任务,实验对象为8个FFT、6个RCU和6个GFP的混合运算。数据流从FFT到RCU再到GFP,当系统完成FFT任务时,可切换为共享存储使用,作为RCU流到GFP的二级缓存。每个CU在不同的矩阵规模下运行2 048次,取平均值在不同数据规模下的实验结果。图11表示平均任务执行周期数,图12表示平均DTP对比图。此实验涉及到FFT在共享存储与私有存储之间的切换,所以理论上的性能提升效果介于实验1与实验2之间。
图11 实验3执行周期数Figure 11. Number of task execution cycles of experiment 3
图12 实验3数据传输并行度Figure 12. Data transmission parallelism of experiment 3
由上述实验结果对比图可知,实验3的任务执行周期数加速比平均值为1.133,性能提升13.3%,平均DTP加速比的平均值为1.164,性能提升16.4%。这是由于实验3是流模式混合运算,当系统中的FFT任务完成后,FFT本地存储资源切换为共享缓存,在RCU数据流到GFP时可以同时提供数据以增加GFP访存带宽,从而显著提升性能。但是,当数据量明显增加时,由于缓存容量有限,所以性能受到限制,加速效果降低,平均DTP变缓,整体平均加速比在实验1与实验2之间,与理论结果相符。
3.5 实验综合性能评估
从上述3组实验结果可以看出,与文献[10]的系统架构相比,在没有FFT任务且片外存储有空闲带宽的情况下,本文方法获得了40%的性能提升,即使含有FFT的任务,本文方法的性能也有一定幅度提升。本系统特性的任务FFT一般作为加速器使用,所以在执行加速任务后,会空闲大量周期。与文献[7]相比,本文架构节约了大量片上SRAM资源和面积。综上所述,本系统存储架构符合系统任务特性,其性能也比已有架构有所提升。
4 结束语
本文设计了一种用于异构多核SoC系统中的可复用本地存储资源的层次化存储架构。该架构将本地长时间闲置的存储资源作为二级共享缓存,增加了总访问带宽,缓解了片外存储与片内访存的速度差异,提高了存储访问性能。实验结果表明,该存储架构节省了69.36%的片上SRAM资源,对于含有FFT类型的任务,平均性能提高41.2%,整体任务计算时间平均减少约40.6%。