一种面向大规模粗粒度可重构系统存储系统的实现方法
技术领域
本发明涉及嵌入式可重构设计领域,尤其涉及一种面向大规模粗粒度可重构系统存储系统的实现方法,对面向媒体处理类粗粒度可重构系统的数据通路进行优化,通过块缓存的方式减少访问片外存储器的次数,使得可重构系统对数据的访问更为高效、性能更高。
背景技术
可重构计算的概念产生自上世纪60年代,加州大学洛杉矶分校G.Estrin教授在其里程碑式的文章中首先谈到这一概念,即计算机可以通过一个主处理器加上一组可重构硬件来组成。主处理器负责控制可重构硬件的行为,可重构硬件可以剪裁、重组,执行某一特定的任务。在可重构硬件上执行的任务结束以后,这部分硬件又被重新配置,从而可以执行其它任务。由于这个先进的概念远远超前于当时的技术水平,直到上世纪90年代之后,这一研究领域才重新获得人们的重视,各种不同的可重构计算技术层出不穷。人们从不同的研究和应用角度出发,对可重构计算体系结构的理解也不尽相同。比较公认的定义是由加州大学伯克利分校的可重构技术研究中心于1999年提出的一种广义的定义,将可重构计算体系结构视为一类计算机组织结构,具有区别于其它组织结构的两类突出特点:1、制造后芯片的可重构能力(区别于ASIC(Application Specific Integrated Circuit的简称,专用集成电路);2、能实现很大程度的算法到计算引擎的空间映射(区别于GPP(General Purpose Processor的简称,通用处理器)。凡具备以上两个特点的计算方式都属于可重构计算的范畴。可重构媒体处理软硬件架构正是符合上了上面的特点。除此以外,可重构媒体处理软硬件架构的特征还包括:1、算法的控制流与数据流分离:数据流由可重构计算引擎处理,处理器执行控制流并负责可重构计算引擎的重构;2、可重构计算引擎多采用PE(Process Element的简称,处理单元)阵列的结构实现。这种结构具有动态配置的特性,并且能实现算法指令、数据多个层次上的并行度。
可重构系统通过其中所包含的若干计算单元,并行地执行应用软件中的多个运算,获得了可以比拟专用集成电路的执行性能。但是随着处理器速度与存储器访问速度的差距不断增大,面向应用的SoC(System on Chip的简称,系统级芯片)芯片中存储子系统的访问延迟已经成为可重构系统性能、功耗和成本的瓶颈,很大程度上限制了整体性能的提升。如何优化可重构系统存储子系统,成为可重构系统研究的关键。
存储子系统主要包括片上和片外两个部分,片上存储器通常由高速SRAM(Static RAM的简称,静态随机存取存储器)构成。基于成本方面的考虑,嵌入式系统中通常以DRAM(Dynamic RAM的简称,动态随机存取存储器)芯片作为片外存储器,这其中又以SDRAM(Synchronous DRAM的简称,同步动态随机存储器)/DDR(Double Data Rate的简称,双倍速率同步动态随机存储器)芯片使用最为广泛。
传统的片外存储器SDRAM/DDR的物理组织结构上来看,它具有两个方面特点:1、它由Bank、Page(页)和Column(列)这三个基本单元构成,其中Page(页)又称Row(行);2、它支持以Burst方式(猝发方式)进行连续读写。在EMI(External Memory Interface的简称,外部存储接口)设计中,可以充分利用这两个特性来提高SDRAM/DDR芯片的性能。本质上,芯片并不能称为随机访问设备,因为它的三维组织结构使得内部不同存储单元的访问时间也不同。这主要是由Bank预充电(Precharge)和激活(Activation)延迟造成的。
对数据读取要在敏感放大器中进行,将要读取的Page(页)内容存放在敏感放大器的过程称为激活(Active)。每个Bank只有一个敏感放大器,也就是只能有一页数据处于被激活状态。对其他页数据读取时,需要进页预充电(Precharge),将敏感放大器的内容写回到SDRAM/DDR中,再激活需要读取的页数据。因此,SDRAM/DDR芯片进页访问时,EMI必须根据当前操作地址对应Bank的状态来发出不同的命令:如果该Bank中没有页处于激活状态,则首先激活当前操作地址对应的页;然后对当前操作地址对应的列进页读写操作;如果该Bank中有页处于激活状态(每个Bank只可能有一个页激活),则如果已经激活的页就是当前操作地址对应的页,则对当前操作地址对应的列进页读写操作;如果已经激活的页不是当前操作地址对应的页,则对该Bank进页预充电,将已经激活的页关闭;接下来激活当前操作地址对应的页;最后对当前操作地址对应的列进页读写操作。由此可见,SDRAM/DDR的这种页组织特性使得访问不同页的存储单元时,由于需要进页预充电(Precharge)和激活(Activation)的换页操作,造成了存储单元访问时间不同,换页过程带来的延时可能是读取时间的几倍至几十倍,其延时会导致性能的降低。而对于有海量运算能力的可重构系统,其需要有与其相对应的数据存储能力,其中一个很重要的存储单元是RPU(Reconfigurable Processing Unit的简称,可重构处理单元)内部的存储单元,当RPU在执行计算时,可以同时将下一次要计算的内容预取到内部存储单元。然而,SDRAM/DDR的行组织特性不利于面向媒体算法的MB(Macro Block的简称,宏块)预取。一般而言,媒体算法,如H.264(由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint VideoTeam)提出的高度压缩数字视频编解码器标准)、MPEG4(MPEG-4是为在国际互联网络上或移动通信设备(例如移动电话)上实时传输音/视频讯号而制定的最新MPEG标准)等,其图像是按帧(Frame)存放,每一帧图像按照光栅扫描方式存放在SDRAM/DDR中。由于媒体算法按MB处理,而MB中上下两行数据在地址空间中不连续,因此读取MB时可能会引起多次换行。例如,假设DDR每行存储1024Byte数据,媒体像素数据大小为1Byte,则对于分辨率为1080p即包含1920*1080像素的帧数据,由于帧内每行数据都分布在不同的DDR行中,因此当读取帧内MB时需要多次换行。可见,SDRAM/DDR的行组织结构使得从SDRAM/DDR到内部存储单元的块访问效率不高,由此造成的数据访问延迟极大的限制了可重构系统的性能。
多媒体应用的粗粒度可重构系统块数据预取是在RPU进行运算时已经将需要的数据预取出来,当进行下次数据运算时,数据则已经准备好,由此隐藏了数据传输时间,且MB数据在块缓存中按照块存储,RPU取数据也按照块进行,因此减少了SDRAM/DDR中的换页时间,极大的提高了系统性能,使得可重构系统速度更快。
发明内容
发明目的:为了克服现有技术中存在的不足,本发明提供一种面向大规模粗粒度可重构系统存储系统的实现方法,快速高效地完成粗粒度可重构系统中对外部存储器中数据的读取,通过提高粗粒度可重构系统的访问效率,从而提升粗粒度可重构系统的整体性能。
技术方案:为实现上述目的,本发明采用的技术方案为:
一种面向大规模粗粒度可重构系统存储系统的实现方法,针对的是具有一个以上RPU的粗粒度可重构系统,RPU作为主要的计算系统,具有海量的计算能力,因而需要该粗粒度可重构系统具有与RPU计算能力相应的数据存储能力。
本发明中的粗粒度可重构系统包括一个以上RPU、与RPU相应的块缓存和外部存储器,所述块缓存内设有带控制逻辑的存储器,用于从外部存储器中预取MB,本发明方法方法具体包括如下步骤:
(1)当RPU需要访问外部存储器中目标MB时,首先判断目标MB是否完全位于块缓存的存储器中;
(2)若步骤(1)中的判断结果为是,则RPU直接从块缓存中读取目标MB;
(3)若步骤(1)中的判断结果为否,则块缓存从外部存储器中预取包括目标MB及其周围数据的预取数据,返回步骤(2);
其中,RPU表示可重构处理单元,MB表示宏块。
在粗粒度可重构系统中依据多媒体算法的码流放置方式、并利用存储访问的空间局部性原理,在原有构架中增加了更适合于面向媒体处理的粗粒度可重构系统的计算的块缓存;若RPU需访问的目标MB位于块缓存中,则RPU可以直接从块缓存中读取目标MB,减少其访问外部存储器的时间,极大提高了整个可重构系统的性能。
所述块缓存更适用于外部存储器为SDRAM/DDR架构的粗粒度可重构系统,这样可以充分利用SDRAM/DDR行组织特性,避免了多媒体算法中MB数据按照光栅扫描方式组织的方式存放在SDRAM/DDR中,需要多次预充电/激活(Precharge/Active)操作而访问导致效率不高的情况,通过一次激活读取MB及其周围数据的方式即可对数据进行缓存,减少了访问时间。
所述块缓存包括两个从外部存储器中预取MB的子缓存模块,所述子缓存模块内设有带控制逻辑的存储器,两个子缓存模块缓存地址空间不重叠的MB,如前向和后向预测数据,可以根据具体码流进行配置,以获得最优的性能。
所述步骤(3)中,通过对偏移量(offset)、长度(length)和高度(height)三个参数的配置来调节相对于目标MB的预取数据的大小和位置,提高缓存数据在块缓存中被命中的概率,从而减少访问外部存储器的次数,最终实现系统性能的提升。
每次访问一个新的MB时,首先判断该MB是否在块缓存的存储器中,如果该MB位于块缓存的存储器中,则直接从中读取,无需再访问片外存储器;如果该MB全部不在或者部分不在块缓存得存储器中,则需要根据此访问的MB,来设置偏移量(offset)、长度(length)和高度(height)三个参数,重新从SDRAM/DDR中读取数据,同时刷新块缓存的存储器中的数据。
有益效果:本发明提供的一种面向大规模粗粒度可重构系统存储系统的实现方法,通过在粗粒度可重构系统中增加了一个存储单元——块缓存,使得在H.264/MPEG2这些多媒体算法中的帧数据在传输时可以按照块传输到可重构单元RPU中,极大的提高了数据传输效率;将MB及其周围数据预取到二级块缓存进行缓存,避免了直接从SDRAM/DDR中读取多媒体数据,提高了整个可重构系统的效率,增加了可重构系统的收益率。
附图说明
图1为多媒体算法的frame在块缓存中的组织视图与frame中的MB在SDRAM/DDR中物理映射图的对比;
图2为本发明提出的一种面向大规模粗粒度可重构系统关于存储系统的示意图;
图3为本发明提出的块缓存的硬件结构示意图;
图4所示为块缓存配置管理方法的流程图;
图5所示的为块缓存配置参数的意义;
图6为对块缓存中各参数的探索得到的最优块缓存配置。
具体实施方式
下面结合附图对本发明作更进一步的说明。
一种面向大规模粗粒度可重构系统存储系统的实现方法,一个以上RPU、与RPU相应的块缓存和外部存储器,所述块缓存内设有带控制逻辑的存储器,用于从外部存储器中预取MB。
图1为多媒体算法的frame在块缓存中的组织视图与frame中的MB在SDRAM/DDR中物理映射图的对比。一般而言,媒体算法,如H.264、MPEG4等,其图像是按帧存放,每一帧图像按照光栅扫描方式存放在中。由于媒体算法处理时,是按照MB进行,MB中上下两行数据在中地址空间不连续,因此读取MB时可能会引起的多次换行。例如,DDR一般每行含有1024Byte,对于H.264的亮度像素,每像素大小为1Byte。对于H.2641080p,帧大小为1920*1080,帧内每行数据都分布在DDR不同的行中,这样读取帧内MB时,需要多次换行。由此可见,SDRAM/DDR的行组织结构使得从SDRAM/DDR到内部存储单元的块访问变得效率不高。由此造成的数据访问延迟极大的限制了可重构系统的性能。
图2为本发明提出的一种面向大规模粗粒度可重构系统关于存储系统的整体视图。主要计算系统可重构单元RPU具有海量的计算能力,由此需要有与其相对应的数据存储能力,其中一个很重要的存储单元是可重构单元RPU内部存储器,当可重构单元RPU在执行计算时,可以同时将下一次要计算的内容预取到内部的存储单元。但是由于很多多媒体算法如H.264/MPEG2等的内容存储在片外SDRAM/DDR中,而SDRAM/DDR的行组织结构使得数据直接从SDRAM/DDR到内部存储器的访问变得效率不高。
图3所示的针对此问题设计出来的块缓存使得效率有很大的提高。块缓存由两个buffer和一个多路选择器MUX组成,每一个buffer分别包括一个存储块block和控制逻辑。每一个buffer包括一个存储块,可以配置成不同的逻辑,例如在H.264和MPEG2应用中,可以配置成一个亮度内存和两个相应的色度内存。当RPU需要取数据时,先将要取得的数据块缓存中的数据相比较,如果块缓存中有相应的数据,即命中,那么直接将比较后的亮度数据或色度数据通过多路选择器输出;否则,从SDRAM/DDR中取得相应的数据及其相邻数据到块缓存。
图4所示为块缓存配置管理的方法的流程图。当RPU发起一次访问的时候,首先块缓存的逻辑部分首先判断该MB是否在块缓存中。如果在缓存中,则发MB到RPU;如果MB不在或不全在块缓存中,则重新取数,并将结果发送到RPU中。例如,当访问一个MB,比如图5中的MB1,系统先到块缓存中,取block1上MB1及其周围的数据。当访问下一个MB时,系统经过比较,看块缓存中是否有相应数据在block1中。访问MB2上的数据时候,系统会检查MB2是否已经在block1中,此时,MB2在block1中,自然不需要去访问SDRAM/DDR,直接将在块缓存的MB2取出来;而MB3只有一部分数据在block1中,所以它需要更新块缓存,系统到block2中以取到相应的MB3。同样,当需要访问MB4时,发现MB4根本不在这两个block中,这个时候需要从SDRAM/DDR中取得数据以更新整个块缓存的存储器中的数据。
图5所示的为块缓存配置参数的意义。块缓存在此相当于二级缓存的作用,它将从SDRAM/DDR中预取数据,在RPU进行多媒体数据处理时候先将其需要的MB及其周围的数据预取出来,减少由于SDRAM/DDR的换行所带来的访问延时,而是按照block方式组织的存储,在取码流时按照MB整个取得使得其存储方式更有效率;块缓存的两个buffer可以分别存放前向和后向预取数据,针对不同的应用,可以对块缓存在偏移量-offset,长度-length和高度-height三个方面的合理调整来获到更好的效率。
长度-length和高度-height决定了预取block数据的形状。偏移量-offset代表了MB和预取block数据的位置关系。比如,在图3中的块缓存中,左上角MB和block1的位置分别为:A(X,Y),B(X’,Y’)。在下列等式中,可以算出B的位置:
X’=[x-length*offset]
Y’=[y-height*offset]
图6为对块缓存中各参数的探索得到的最优块缓存配置,其中:Offset表示偏移量,Height表示高度,Length表示长度,Hit ratio表示命中率,Profit ratio表示收益率。
由于对于不同的多媒体应用,block的大小不一样,需要对数据访问的效率也不一样。有两个公式可以来评估块缓存的性能。
(1)命中率(hit ratio)=击中数目/总的访问数目
(2)收益率(profit ratio)=1-优化后的访问时间/之前的访问时间
命中率代表了数据在块缓存中被成功取得的机会。低的命中率将会影响到它的整体性能。收益率则更直观,高的收益率代表了更好的性能,零值代表了没有优化,而负值代表块缓存降低了整体性能。为了得到和收益率一样高的命中率,在块缓存中,设置合适的偏移量,长度和高度非常重要,我们分别进行设计空间探索。这些探索是在forman_qcif_main.264流的基础上进行的。(a)图显示的是命中率,(b)图显示的是收益率。Line0和line1分别代表的是前向预测和后向预测。图6显示,综合命中率和收益率,15%~20%的偏移量效果最好,此时命中率和收益率都最高。在图6中长度方面的探索时,表明了大的尺寸可以获得更好的性能,然而,当长度大于64byte时,性能提升的幅度会变缓。因此,在芯片尺寸和性能方面的权衡之后,64byte是最佳尺寸。在图6中进行预测数据块高度探索时,右图中显示出,过大的高度,影响整体性能,使得收益率降低。当高度超过32Byte大,命中率几乎不增加,相反,收益率会下降,因为取不同行的数据时需要访问SDRAM/DDR的新的行,由此带来的代价使得整体性能下降。
以forman_qcif_main.264来为例,我们设计了对于预测块最好的参数:偏移量为20%,高度为32byte,长度为64byte。
表1为采用本发明优化方法对系统能耗进行优化的试验结果。对于不同的应用,可以配置块缓存的这三个参数,使之在不同的码流方面有很好的性能。比如,在本发明的基础上,对于H.264的foreman,其获得了43%的性能改善,对于H.264的Van.Helsing,其获得了32%的性能改善,对于MPEG2的city,其获得了37%的性能改善,对于MPEG2的mobile,其获得了35%的性能改善。
表1采用本发明优化方法对系统能耗进行优化的试验结果
上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。