1. 引言
多核数字信号处理器(DSP)是近年来针对高性能嵌入式应用而出现的一类多核微处理器(CMP)。相比传统的单核处理器,多核处理器在提高并行处理能力的同时也需要更高的存储带宽和更灵活的存储结构。便笺存储器(SPM)是一种小容量的片上存储器,具有全局地址空间,可以由访存指令直接访问。SPM仅仅包含存储阵列和译码逻辑,没有Cache那样复杂的Tag比较逻辑和替换策略,在电路面积和功耗方面比Cache更具优势。另外,SPM采用固定的存储映射方式,没有访问失效问题,能够保证单拍(或确定节拍)的访问时间,便于用户显式地管理和调度其中的数据,适合嵌入式实时计算的特点。
根据多核DSP的应用需求,并结合SPM的结构特征和共享存储的编程优势,本文提出了一种面向多核DSP的快速共享数据缓冲池FSDP,对其进行了设计实现和模拟分析。分析结果表明,FSDP对于DSP核间细粒度共享数据(例如某些全局变量、公共系数矩阵等)的传输具有很高的效率,相比类似的VS-SPM结构能够将程序性能提高37%,与传统的共享数据Cache结合使用能够将异构多核DSP的性能提高13%。
本文的组织结构如下。第2部分介绍了国内外的研究现状,第3部分介绍了异构多核DSP的总体结构原型,第4部分详细介绍了FSDP的组成结构、访问方法和同步机制。第5部分介绍了设计优化方法,构建了关于最佳单体容量的分析模型。第6部分介绍了设计实现和模拟分析结果。最后一部分总结了全文。
2. 相关工作
近年来,国外学者在SPM领域已经展开了积极的研究。Banakar等人针对计算密集型应用,使用专用工具(CACTI)计算出了各种容量的SPM和Cache的面积和功耗,使用Trace模拟器进行了性能对比。结果表明,同样容量的SPM的平均功耗比Cache降低了40%。Issenin等人也认为,如果通过数据重用技术,将经常使用的数据放在小容量的SPM中,用片内局部传输代替片外全局传输,不但可以节省约一半的功耗,而且大大提高了传输效率。Kandemir和Suhendra等人基于一种虚拟共享便笺式存储器(VS-SPM)的多核处理器原型,如图1所示。通过任务映射、调度、SPM划分和数据分配等编译优化算法,提高片内数据重用性,减少不必要的片外访存,其宣称的实验结果能够把嵌入式应用的性能提高80%。
这些已有的工作主要是从软件的角度研究如何优化SPM的存储分配与管理,而且大部分是基于单核处理器的研究,对于多核处理器环境下SPM的体系结构研究还不够充分。特别在共享存储的方式下,必须根据实际应用中核间数据共享与传输的特点,研究速度快、结构灵活的SPM存储结构。本文提出的FSDP采用多体并行和交叉访问的方式,访问延迟小,存取速度快;提供了硬件信号灯和软件查询两种同步机制,同步开销低,编程使用灵活。
3. 异构多核DSP总体结构
图1 异构多核DSP“SDSP”的总体结构
异构多核DSP“SDSP”的总体结构如图1所示,它由四个精简的32位浮点DSP核与一个32位的RISC核构成。DSP核采用课题组自行研制的32位高性能浮点DSP“YHFT-DSP700”的精简内核。该DSP内核主频300MHz,8流出超长指令字(VLIW)结构。四个DSP内核共享存储空间。每个DSP核具有私有的一级数据Cache(L1D)和一级指令Cache(L1P),共享二级Cache/SRAM(L2)和FSDP。FSDP与L1D处于同一个存储层次,具有不可Cache的全局存储空间,可以被四个DSP核的访存指令直接访问。
RISC核采用开放体系结构与源码的LEON处理器。LEON是一款高度可配置的32位通用RISC处理器,兼容SPARC V8指令集,采用7级整数流水线,指令Cache和数据Cache分离。片上集成了AMBA 2.0总线,挂接存储控制器、PCI模块、CAN接口等外设模块。
4. 快速共享数据缓冲池FSDP体系结构
FSDP是一个四通道共享存储结构,每个DSP核对应一个通道,每个通道包括两个大小相同的存储体SAi和SBi(i=1,2,3,4)、存控逻辑和读写队列。四个通道依次顺序编址,通过高速交叉开关(Crossbar)构成整个共享数据缓冲池,如图2所示。另外,FSDP采用了一组控制寄存器,通过公共的配置总线与四个DSP核相连,用于同步/互斥、状态查询、优先级控制等操作。
图2 FSDP的组成结构及其与DSP核的连接关系
FSDP采用多体并行交叉访问的机制,提供了“私有”和“共享”两种工作模式,支持多个DSP核的并行访问与核间数据流的传输。FSDP基于释放一致性共享存储模型,为用户提供了硬件自动阻塞和软件手工查询两种同步机制。多核DSP程序产生 的中间结果、公共变量、系数常量、查找表等数据结构都可以通过FSDP实现快速的细粒度数据传输与交换。而大批量的全局数据和用户程序则存放在片外存储器中,通过两级Cache进行访问。下面,本文将详细介绍FSDP的组成结构和关键技术。
4.1 带旁路的读写队列与解耦的存控逻辑
为了缓存因访问冲突或同步失败而被阻塞的读/写访问,我们为每个DSP核分别设置了读/写队列,直接缓存各个DSP核Load/Store单元发出的访问请求。为了缩短访问延迟,我们为读/写队列设置了旁路逻辑。当没有访问冲突且核间同步握手成功时,读写请求不需进入读写队列,由旁路逻辑将请求直接发送给相应的存控逻辑。这一设计缩短了访问延迟,有效增强了FSDP的传输效率。下图3给出了带旁路的读写队列结构。为了加快地址译码速度,本文将地址译码逻辑和访问控制逻辑进行了解耦处理,将译码器置于旁路逻辑之前,缩短控制逻辑的关键路径,提高了FSDP的访问速度。
图3 带旁路的读写队列
4.2 双模式操作与交叉访问
本文为FSDP设计了“私有”和“共享”两种工作模式。
在私有模式下,任意DSP核DSP-i只能读写与其对应通道内的两个存储体SAi和SBi(i=1,2,3,4),不能访问其他的通道;
在共享模式下,每个DSP核可以读取另外三个通道的数据,但不能向其中写入数据。任意DSP核必须通过其对应通道的两个存储体与其他DSP核交换共享数据。
可见,在私有模式下,所有的存储体都不存在访问竞争,访问速度快。在共享模式下,FSDP不存在多核写冲突的问题,简化了维护数据一致性的硬件开销,提高了核间共享数据的传输速度,有利于提高嵌入式应用的实时性。
在任务流水的计算模式下,DSP核间的共享数据相继构成“生产者-消费者”关系:前一个核的计算输出直接作为下一个核的计算输入。为了有效支持这种传输模式,我们在FSDP中采用了交叉访问的机制:
当“生产者”DSP-i向存储体SAi写入第一块共享数据之后,释放该存储体,转而向SBi写入第二块共享数据;
“消费者”DSP-j(j≠i)启动读访问,从SAi读出第一块共享数据;
当这一过程完成后,双方交叉,DSP-i释放存储体SBi,向SAi写入第三块共享数据,DSP-j则从SBi读出第二块共享数据,依此类推,直至传输完成。
因此,在写入第一块共享数据之后,读写操作就可以并行执行。当双方的计算负载均衡,速度匹配的时候,DSP核之间可以进行流水传输,同步等待延迟最小,传输效率达到最高。
4.3 释放一致性模型与基于信号灯的快速同步机制
在共享存储的释放一致性(RC)模型中,同步操作包括“获取”和“释放”两种操作,分别用于取得对共享存储单元的独占性访问权和解除这一访问权。参照基本的RC模型,本文为FSDP设计了一套简洁、高效的控制逻辑和同步机制。
首先,为每个存储体设置3个“信号灯”寄存器,分别对应除本通道之外的其他3个DSP核,作为同步/互斥操作的硬件锁。“信号灯”寄存器映射了全局共享的物理地址,通过公共配置总线与四个DSP核相连。每个“信号灯”具有“点亮”和“熄灭”两种状态,分别表示存储体内的共享数据“已写入”和“已读出”。DSP核通过同步指令改写“信号灯”寄存器的状态,实现核间的同步操作。具体的数据一致性协议为:
当“生产者”DSP-i向某个存储体写入共享数据后,将其“信号灯”置为“点亮”状态。若这批共享数据有2~3个“消费者”,则点亮相应的2~3个“信号灯”。在某个“信号灯”处于“熄灭”状态时,相应的DSP核对该存储体的读请求全部进入读队列等待。
当“消费者”DSP-j读出某个存储体的共享数据后,将该存储体与自己对应的“信号灯”置为“熄灭”状态。当某个存储体的所有3个“信号灯”都“熄灭”时,该存储体被释放,处于可写状态;否则,DSP核对该存储体的写请求全部进入写队列等待。
“点亮”和“熄灭”信号灯的顺序一致性由DSP核对公共配置总线的独占性访问来保证。
需要说明的是,DSP核不一定要将其对应的存储体写满才能点亮“信号灯”,一次同步操作所传输的数据量最小可以是一个字节,最大不超过单个存储体的容量。
由于FSDP的访存通路与同步操作通路(即配置总线)是相互分离的,因此可能出现同步操作指令通过配置总线先于访存指令提前执行的错误情况。本文通过软件延迟槽的方式解决这一问题:由编译器通过指令调度技术,在最后一条共享数据的读指令和“熄灯”指令之间插入1~2条无关指令或空操作(NOP),作为等待共享数据返回的延迟槽,确保最后一个读请求被处理之后再执行“熄灯”操作。具体所需的软件延迟槽数量取决于DSP流水线的设计。对于本文而言,如果DSP核在发出Load指 令的第3拍没有接收到返回的数据,则暂停指令派发,因此只需要2个延迟槽。图4给出了两个DSP核i和j传递共享数据的实例。
(a)延迟槽与同步操作的程序实例
(b)存储体的内容变化与信号灯状态
图4 两个DSP核通过两个存储体传递共享数据的例子
本文最终的优化设计表明,任意两个DSP核利用一对LOAD-STORE指令再加上一次同步操作,总共只需4拍即可完成一个共享数据字的传递,从而实现了核间细粒度共享数据的快速传输。当需要传输的共享数据量超过FSDP单通道存储容量时,可以将数据分块,进行多次传输。
除了这种对程序员透明的硬件同步机制之外,FSDP还支持基于软件查询的同步机制。即在每次改变信号灯状态前,插入一段查询“信号灯”状态的例程,然后根据查询的结果决定程序的流向。
4.4 消除读访问冲突
在FSDP的共享模式下存在多DSP核同时读一个存储体的冲突。虽然利用仲裁逻辑配合队列机制可以缓解冲突,但是,这种方式降低了FSDP的并行性。另外,可以采用存储体复制或者采用多端口存储体的方式。为此,本文进行了对比实验,结果表明,4个1KB大小的单端口SRAM在工作频率和面积上都优于4端口1KB的全定制SRAM模块,而且单端口SRAM可以由EDA工具快速编译生成,便于设计实现。因此,对于FSDP这类小容量的便笺存储器,本文采用存储体复制的方式解决访问冲突:将原来的每个存储体换成4个同样大小的单端口存储体,构成具有4个虚拟端口的存储体,如图5所示。
在处理读写访问时,存控逻辑自动进行数据写复制和读端口的分配工作,读写过程中对用户都是透明的。这种方式完全消除了多核的读访问冲突,实现了最大的共享访问带宽,提高了FSDP的并行性和实时性。
图5 存储体复制构成虚拟多端口存储体
5. 性能分析
5.1 分析模型与设计实现
本文构建了整个SDSP的C语言模拟器SDSP-Sim。SDSP-Sim是一个时钟精确的模拟器,能够运行经过编译和手工分配的多核DSP应用程序,报告程序运行的各种统计信息和计算结果。每个处理器核占用一个模拟进程,RISC与DSP核之间采用进程通信的方式传输控制信息。本文以MediaBench基准程序集为基础,选择了6组典型的多媒体类与通信类应用程序,用于评测FSDP的性能,如表1所示。为了满足多核DSP的并行计算需求,对于原来复杂度较低的一些测试程序,例如PEGWIT和JPEG_c,本文扩大了它们的数据集。对于MP3解码程序MP3_d则将其扩展为两路并行解码器2MP3_d。由于SDSP的并行编译器开发工作还没有完成,本文仍采用手工的方式对测试程序进行并行化映射。
表1 用于性能评测的测试程序说明
本文采用SMIC 0.13μm CMOS工艺库对FSDP进行了设计实现。其中各存储体采用EDA工具生成的单端口SRAM。下表2给出了FSDP的各项设计指标。其中,“无阻塞读延迟”是指在同步成功且没有冲突的情况下,从DSP核发出读请求到获得返回数据之间的时间间隔。
表2 0.13μm CMOS工艺下四通道FSDP的各项性能指标
5.2 性能对比
对于多核处理器共享SPM的研究,前人的工作主要是针对SPM的编译优化和数据划分算法的研究。文献0介绍的VS-SPM(虚拟共享便笺存储器)原型结构与本文的FSDP有类似之处,它根据SPM与处理器核的关系,将SPM分成本地SPM和远程SPM,各个处理器核通过共享总线访问各SPM模块。下表3对比了本文的FSDP与VS-SPM在结构上的差异。VS-SPM主要是针对编译优化和数据划分算法优化而设计的,其硬件优化程度和访问速度都不及FSDP,而且没有解决多个处理器核并行访问冲突的问题,不支持核间数据的流水传输。
表3 FSDP与VS-SPM的结构对比
本文建立了VS-SPM的结构模型,将DSP核间同样一批共享数据先后映射到VS-SPM和FSDP的存储空间上,分别得到两种结构下程序的执行时间TVS-SPM和TF-SDP,然后按照(1)式计算出FSDP相对VS-SPM的性能加速比。
图6给出了6组测试程序的实验结果。结果表明,通过FSDP在DSP核之间传输共享数据相比通过VS-SPM传输具有明显的性能优势,6组程序的平均性能加速比达到了1.37。
图6 FSDP相对VS-SPM的性能加速比
在引入FSDP之前,异构多核DSP主要通过共享L2 Cache传输DSP核间的共享数据。为了评测FSDP对系统性能的加速作用,本文比较了下列三种数据映射方式下异构多核DSP的计算性能:
仅用L2 Cache:DSP核间的共享数据全部通过L2传输;
仅用FSDP:DSP核间的共享数据全部通过FSDP传输;
FSDP + L2:将DSP核间的不规则共享数据映射到FSDP的地址空间,其余的共享数据流仍通过L2传输。
利用SDSP-Sim软件模拟器分别得到上述三种映射方式下程序的执行时间,然后以第一种映射方式下的执行时间为基准,计算出另外两种方式的性能加速比,结果如图7所示:
图7 三种数据映射方式下系统的计算性能对比
实验结果表明,在FSDP + L2 Cache方式下,程序的性能是最高的。6组程序的平均性能加速比为1.13。本文分析认为:
对于核间共享数据包含大量细粒度数据和不规则数据流的应用程序(例如PEGWIT和RASTA),仅用FSDP相比仅通过L2 Cache传输共享数据具有更高的计算性能;
对于核间共享数据量较大和数据流分布比较密集的应用程序(例如2MP3_d和MPEG2_e),仅用FSDP传输共享数据的计算性能较低,这是因为FSDP对共享数据的分块处理使得同步开销在执行时间中的比例增大,影响了总执行时间;
FSDP与共享数据Cache结合使用进一步提高了共享存储多核DSP的片内数据重用性,减少了对片外数据的长延迟访问,因而能够获得最佳的计算性能。其中,对于需要紧耦合共享的小容量数据或者非常不规则的短数据流,优先选择通过FSDP传输,减少通过共享Cache的长延迟访问开销;反之,对于大块数据的共享或者规则数据流的传输,则宜采用共享Cache的方式,降低数据频繁分块的同步开销。
5.3 扩展性分析
在消除了FSDP的访问冲突之后,所有DSP核可以同时访问不同的存储体。理论上来看,FSDP的访问带宽可以随着DSP核数量的增长而线性增长,具有良好的可扩展性。为此,我们进行了分析与实验。定义B为FSDP的有效访问带宽,即在考虑访存延迟和工作频率的情况下所有DSP核访问FSDP的实际存储带宽;N表示DSP核的数量。本文在N=1~8的情况下分别对FSDP进行了单独的设计实现,得到了B与N的关系,如图8所示。
图8 FSDP有效访问带宽与DSP核数量的关系
由实验结果可见,当N小于5时, B快速增长,与N呈近似的线性关系。随着N的进一步增大,DSP核与存储体之间的控制逻辑开销、互连总线和交叉开关端口数量以O(N2)量级增长,FSDP的工作频率开始下降,访问延迟越来越大,FSDP的有效访问带宽增长十分缓慢。因此,FSDP更适合于5核以内的多核DSP。当DSP核数量超过8核以上时,我们将以4核为一个超节点进行结构扩展。超节点内部采用FSDP实现紧耦合的数据传输,超节点之间通过片上网络(NoC)或者其他共享存储结构进行数据传输。
7 结束语
相比传统的Cache结构,便笺式存储器具有更灵活的结构、简洁的控制逻辑、更低的访问延迟和方便的数据管理等诸多优势。本文针对多核DSP架构设计的快速共享数据缓冲池FSDP结合了便笺式存储器的结构特点和共享存储结构的编程需要,采用软/硬件联合的设计方法,为多核DSP之间传输细粒度共享数据提供了一个紧耦合的快速通路,相比共享二级Cache和DMA传输方式具有更好的传输效率,是一种新型而实用的、可扩展多核共享存储结构。今后,我们将深入研究面向多核处理器的高性能共享存储结构,增强片上存储的可扩展性和可重构能力,进一步提高多核SoC的存储带宽。