一种面向多核DSP的小容量紧耦合快速共享数据池
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单通道存储容量时,可以将数据分块,进行多次传输。
评论