一种编译器数据预取方法和装置的制作方法

文档序号:6379941阅读:323来源:国知局
专利名称:一种编译器数据预取方法和装置的制作方法
技术领域
本发明涉及数据处理领域,尤其涉及一种编译器数据预取方法和装置。
背景技术
由于高速缓存(Cache)复杂的硬件逻辑,使得在一些多核结构里不可容纳 Cache结构,取而代之的是硬件结构简单、占用面积小和功耗更低的软件管理片上存储器 (Scratch Pad Memory, SPM)0 SPM在带来高效能、低功耗的同时,也对于编程模型和编译优化提出了更高的要求和挑战。Cache可以由硬件自动维护数据的一致性,而SPM则需要由软件来实现一致性的维护以及管理数据在不同层次存储系统之间的移动,要在保证程序正确性的前提下,充分利用数据局部性和局存空间,开发计算与访存并行,尽量避免存储器碎片,合理选择数据放入片上存储器。
考虑到目前大多数包含SPM的嵌入式系统中都支持直接内存访问(Direct Memory Access, DMA)模式,现有的一种针对SPM预取的方法是,将层次存储分配(Memory Hierarchical Layer Assignment,MHLA)优化策略、预取算法和DMA模式结合,并引入优先级的概念,使用不同优先级的DMA来完成数据在主存和SPM之间的移动,引入双缓冲进行协同预取。这种结合了 DMA的预取技术既引入了已经比较成熟的MHLA优化策略,同时针对嵌入式的结构特点使用DMA模式来取代硬件Cache的自动控制数据移动,相对于Cache的硬件自动控制而言,DMA具有更好的灵活性和可控性,可有效避免盲目预取和冗余预取。
然而,上述现有技术缺乏软、硬件两方面的协同支持,其软件算法的开销会对整体性能造成较大的影响,而硬件方面SPM无法完成Cache的一些基本功能,给程序员造成较大负担。发明内容
本发明实施例提供一种编译器数据预取方法和装置,以实现高效的访存优化。
本发明实施例提供一种编译器数据预取方法,所述方法包括
提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址;
若在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据;
若在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
本发明实施例提供一种编译器数据预取装置,所述装置包括
硬件指令提供模块,用于提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址;
读取模块,用于若所述硬件指令提供模块在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据;
不命中处理模块,用于若所述硬件指令提供模块在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM 局存空间。
从上述本发明实施例可知,由于查询软件管理片上存储器中划分的局存空间是由硬件提供的硬件指令进行,而在SPM局存空间不能查询到主存地址对应的数据时,则进行不命中处理可通过软件算法实现。因此,与现有技术相比,本发明实施例提供的方法结合了软硬件协同Cache模型,软硬件协同完成数据的缓存管理,充分利用硬件的高效性和软件灵活性,以较小的硬件开销实现高效的访存优化,在此基础上实现了结合硬件支持和精简的预取算法的基于软硬件协同管理机制的编译器数据预取方法。由于很好地利用了硬件指令加速,在性能上要优于纯软件算法,同时也保证了软件算法的灵活性,便于实现相关技术。


为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,还可以如这些附图获得其他的附图。
图I是本发明实施例提供的编译器数据预取方法流程示意图2是本发明实施例提供的编译器数据预取装置结构示意图3是本发明另一实施例提供的编译器数据预取装置结构示意图4是本发明另一实施例提供的编译器数据预取装置结构示意图5是本发明另一实施例提供的编译器数据预取装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员所获得的所有其他实施例,都属于本发明保护的范围。
请参阅附图1,是本发明实施例提供的编译器数据预取方法流程示意图,主要包括步骤S101、步骤S102和步骤S103,具体地
S101,提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址。
在软件管理片上存储器(Scratch Pad Memory, SPM)上,划分出一部分连续空间作为Cache行,保存程序所需的数据,这一部分空间称为局存空间。需要说明的是,SPM上还会预留一部分指定空间,用于软件算法中一些基本变量和代码的保存,这部分空间不能作为局存空间来使用的。在局存空间上可以申请多个Cache,每个Cache的行数也可由用户指定。
在本发明实施例中,硬件指令由硬件提供,其携带的是数据在主存储器上的地址。 为了便于说明,在下文的描述中,数据在主存储器上的地址简称为“数据的主存地址”;查询SPM局存空间实际上是查询硬件指令携带的主存地址对应的数据是否存在于SPM局存空间。
S102,若在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据。
如前所述,SPM上预留的一部分指定空间用于保存软件算法中一些基本变量和代码。在本发明实施例中,“标签(tag)”作为其中一个变量,其以一个表的形式存在于SPM上预留的指定空间,每一个表项标记的是数据的主存地址与数据的局存地址的对应关系,因此,若查询到硬件指令携带的主存地址存在于tag中,则表明该主存地址对应的数据存在于SPM局存空间,即在SPM局存空间能够查询到主存地址对应的数据,从而直接读取主存地址对应的数据。
S103,若在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
若在SPM局存空间没有查询到主存地址对应的数据,即tag中没有标记该数据的主存地址与数据的局存地址的对应关系的表项,则根据硬件指令进行不命中处理以将数据预取到SPM局存空间,包括根据硬件指令,修改预取到SPM局存空间的数据的主存地址和局存地址对应关系,以使后续查询所述SPM局存空间时命中数据。由于SPM局存空间没有主存地址对应的数据,因此,首先根据数据的主存地址,将所述数据从主存空间搬移到SPM 局存空间,然后,按照数据在SPM局存空间的存储位置,建立数据的主存地址与数据在SPM 局存空间的局存地址之间的对应关系,即在tag中建立新的表项,标记数据的主存地址与数据的局存地址之间的对应关系。数据的主存地址与数据的局存地址之间的对应关系建立后,如果后续再次查询SPM局存空间时,由于tag中保存了该数据的主存地址与数据的局存地址之间的对应关系,因此,可以直接命中。
这里需要说明的是,要使当前数据的主存地址命中,首先要保证上一次的直接内存访问(Direct Memory Access, DMA)完成,在提供的硬件指令C0DC_SEARCH中,这种情形表现为等待上一次的预取DMA完成,确保当前数据已经在SPM局存空间中,然后切换tag中的主存地址和局存地址使命中;而对于提供的硬件指令C0DC_FETCH,由于C0DC_FETCH只有在预取DMA完成的情况下才会进入不命中处理,所以无需等待,直接切换tag中的主存地址和局存地址即可。对于每一个数组空间,需要申请一块独立的SPM局存空间。然而,在包含多个循环多个数组访问的程序中,若每个数组对应的SPM局存空间都是分离的,那么会需要很大的SPM局存空间才可以满足要求,而在实际情况中多数SPM局存空间在使用一次后就处在闲置状态。因此,可以采用循环利用局存空间的方法来解决这一问题,即,在同一循环的内部针对不同数组使用不同的局存Cache,当程序进入下一个循环后,由于上次利用的 SPM局存空间已处于闲置状态,因此,循环利用这些局存Cache。针对不同的访存类型,一般需要两个Cache或者三个Cache。
数据预取实现在不命中处理函数中,为了具有更好的适应性,本发明针对不同访存模式,即只读、只写、读写共存和跨步使用了不同的预取方法。数据预取结合了 DMA数据传输方式,以算法精简为目标,尽量减少不命中处理的开销,同时针对结构简单的循环提出了进一步简化的算法,在实际应用中具有良好的效果。
在根据硬件指令修改预取到SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询SPM局存空间时命中数据的另一实施例中,可以首先根据所述硬件指令, 对数据进行重用性和局部性分析。在编译器中实现本发明实施例提供的预取分析方法,基于0pen64原有的Mowry局部性分析机制,针对协同Cache的特点做一些相应的更改。所谓数据重用性,是指在某个层次的迭代空间内,某一块数据空间在不同的时间先后被访问,或者不同的数据引用访问同一块数据空间。由于本发明中对于跨步预取的支持,所以使得重用性的定义上也扩展了针对跨步特点的重用。重用性只有当数据的使用出现在它被替代之前才能转化为局部性,具有局部性的访存才有预取价值。重用性取决于Cache的大小以及在两重用数据之间进入Cache的数据量。在协同Cache中计算进入Cache的数据量时需要考虑跨步的因素,实际数据量应该是两重用数据之间的距离除以跨步的比值。
在对数据进行重用性和局部性分析后,再根据重用性和局部性分析的分析结果, 生成数据预取策略,即,若数据进行局部性分析的结果为该数据具有局部性,则分别根据所述具有局部性的数据的时间重用性、空间重用性或组重用性,使用不同的预取方式。具体地,对于时间重用性,与传统预取方式相同,仅在具有时间重用性的访存的第一次访问时进行预取,则在其后的重复访问时则会访问Cache中的数据;对于空间重用性,要根据 Cache大小来确定预取方式,例如,同一 Cache行可容纳k个数组元素,则在数组下标为 k的整数倍时进行数据的预取;对于组重用性,则在一个具有重用性的组里选择一个主要 (leading)元素,只在该主要元素被访问时进行预取,且同时考虑是否可以进行合并预取。
根据生成的预取策略,将可预取数据从主存空间搬移到SPM局存空间。最后,如前述实施例类似,按照可预取数据在SPM局存空间的存储位置,建立可预取数据的主存地址与可预取数据在SPM局存空间的局存地址之间的对应关系,即,在tag中建立新的表项,标记可预取数据的主存地址与可预取数据在SPM局存空间的局存地址之间的对应关系。
从上述本发明实施例提供的编译器数据预取方法可知,由于查询软件管理片上存储器中划分的局存空间是由硬件提供的硬件指令进行,而在SPM局存空间不能查询到主存地址对应的数据时,则进行不命中处理可通过软件算法实现。因此,与现有技术相比,本发明实施例提供的方法结合了软硬件协同Cache模型,软硬件协同完成数据的缓存管理,充分利用硬件的高效性和软件灵活性,以较小的硬件开销实现高效的访存优化,在此基础上实现了结合硬件支持和精简的预取算法的基于软硬件协同管理机制的编译器数据预取方法。由于很好地利用了硬件指令加速,在性能上要优于纯软件算法,同时也保证了软件算法的灵活性,便于实现相关技术。
请参阅附图2,是本发明实施例提供的编译器数据预取装置结构示意图。为了便于说明,仅仅示出了与本发明实施例相关的部分。附图2示例的编译器数据预取装置包括硬件指令提供模块201、读取模块202和不命中处理模块203,其中
硬件指令提供模块201,用于提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址;
读取模块202,用于若所述硬件指令提供模块201在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据;
不命中处理模块203,用于若所述硬件指令提供模块201在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
需要说明的是,以上编译器数据预取装置的实施方式中,各功能模块的划分仅是举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将所述编译器数据预取装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,实际应用中,本实施例中的相应的功能模块可以是由相应的硬件实现,也可以由相应的硬件执行相应的软件完成,例如,前述的读取模块,可以是具有执行前述若所述硬件指令提供模块在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据的硬件,例如读取器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备;再如前述的不命中处理模块,可以是具有执行前述若所述硬件指令提供模块在所述 SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间功能的硬件,例如不命中处理器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备(本说明书提供的各个实施例都可应用上述描述原则)。
附图2示例的不命中处理模块203可以包括地址修改子模块301,如附图3所示本发明另一实施例提供的编译器数据预取装置。地址修改子模块301用于根据所述硬件指令,修改预取到SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询SPM局存空间时命中数据。
附图3示例的地址修改子模块301可以包括第一数据搬移单元401和第一建立单元402,如附图4所示本发明另一实施例提供的编译器数据预取装置,其中
第一数据搬移单元401,用于根据所述数据的主存地址,将所述数据从主存空间搬移到所述SPM局存空间;
第一建立单元402,用于按照所述数据在所述SPM局存空间的存储位置,建立所述数据的主存地址与所述数据在所述SPM局存空间的局存地址之间的对应关系。
附图3示例的地址修改子模块301也可以包括分析单元501、策略生成单元502、 第二数据搬移单元503和第二建立单元504,如附图5所示本发明另一实施例提供的编译器数据预取装置,其中
分析单元501,用于根据所述硬件指令,对数据进行重用性和局部性分析;
策略生成单元502,用于根据所述重用性和局部性分析的分析结果,生成数据预取策略,即若数据进行局部性分析的结果为所述数据具有局部性,则策略生成单元502分别根据所述具有局部性的数据的时间重用性、空间重用性或组重用性,使用不同的预取方式。 具体地,对于时间重用性,与传统预取方式相同,仅在具有具有时间重用性的访存的第一次访问时进行预取,则在其后的重复访问时则会访问Cache中的数据;对于空间重用性,要根据Cache大小来确定预取方式,例如,同一 Cache行可容纳k个数组元素,则在数组下标为 k的整数倍时进行数据的预取;对于组重用性,则在一个具有重用性的组里选择一个主要 (leading)元素,只在该主要元素被访问时进行预取,且同时考虑是否可以进行合并预取;
第二数据搬移单元503,用于根据所述预取策略,将可预取数据从主存空间搬移到所述SPM局存空间;
第二建立单元504,用于按照所述可预取数据在所述SPM局存空间的存储位置,建立所述可预取数据的主存地址与所述可预取数据在所述SPM局存空间的局存地址之间的对应关系。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,比如以下各种方法的一种或多种或全部
提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址;
若在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据;
若在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
以上对本发明实施例提供的一种编译器数据预取方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种编译器数据预取方法,其特征在于,所述方法包括 提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址; 若在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据; 若在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
2.如权利要求I所述的方法,其特征在于,所述根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间包括 根据所述硬件指令,修改预取到所述SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询所述SPM局存空间时命中数据。
3.如权利要求2所述的方法,其特征在于,所述根据所述硬件指令,修改预取到所述SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询所述SPM局存空间时命中数据包括 根据所述数据的主存地址,将所述数据从主存空间搬移到所述SPM局存空间; 按照所述数据在所述SPM局存空间的存储位置,建立所述数据的主存地址与所述数据在所述SPM局存空间的局存地址之间的对应关系。
4.如权利要求2所述的方法,其特征在于,所述根据所述硬件指令,修改预取到所述SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询所述SPM局存空间时命中数据包括 根据所述硬件指令,对数据进行重用性和局部性分析; 根据所述重用性和局部性分析的分析結果,生成数据预取策略; 根据所述预取策略,将可预取数据从主存空间搬移到所述SPM局存空间; 按照所述可预取数据在所述SPM局存空间的存储位置,建立所述可预取数据的主存地址与所述可预取数据在所述SPM局存空间的局存地址之间的对应关系。
5.如权利要求4所述的方法,其特征在干,所述根据所述重用性和局部性分析的分析结果,生成数据预取策略包括 若数据进行局部性分析的结果为所述数据具有局部性,则分别根据所述具有局部性的数据的时间重用性、空间重用性或组重用性,使用不同的预取方式。
6.一种编译器数据预取装置,其特征在于,所述装置包括 硬件指令提供模块,用于提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址; 读取模块,用于若所述硬件指令提供模块在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据; 不命中处理模块,用于若所述硬件指令提供模块在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。
7.如权利要求6所述的装置,其特征在于,所述不命中处理模块包括 地址修改子模块,用于根据所述硬件指令,修改预取到所述SPM局存空间的数据的主存地址和局存地址对应关系以使后续查询所述SPM局存空间时命中数据。
8.如权利要求7所述的装置,其特征在于,所述地址修改子模块包括 第一数据搬移単元,用于根据所述数据的主存地址,将所述数据从主存空间搬移到所述SPM局存空间; 第一建立単元,用于按照所述数据在所述SPM局存空间的存储位置,建立所述数据的主存地址与所述数据在所述SPM局存空间的局存地址之间的对应关系。
9.如权利要求7所述的装置,其特征在于,所述地址修改子模块包括 分析単元,用于根据所述硬件指令,对数据进行重用性和局部性分析; 策略生成単元,用于根据所述重用性和局部性分析的分析结果,生成数据预取策略; 第二数据搬移単元,用于根据所述预取策略,将可预取数据从主存空间搬移到所述SPM局存空间; 第二建立単元,用于按照所述可预取数据在所述SPM局存空间的存储位置,建立所述可预取数据的主存地址与所述可预取数据在所述SPM局存空间的局存地址之间的对应关系O
10.如权利要求9所述的装置,其特征在于,所述策略生成単元具体用于若数据进行局部性分析的结果为所述数据具有局部性,则分别根据所述具有局部性的数据的时间重用性、空间重用性或组重用性,使用不同的预取方式。
全文摘要
本发明实施例提供一种编译器数据预取方法和装置,以实现高效的访存优化。所述方法包括提供硬件指令查询软件管理片上存储器SPM中划分的局存空间,所述硬件指令包含数据的主存地址;若在所述SPM局存空间查询到所述主存地址对应的数据,则读取所述主存地址对应的数据;若在所述SPM局存空间没有查询到所述主存地址对应的数据,则根据所述硬件指令进行不命中处理以将数据预取到所述SPM局存空间。本发明充分利用硬件的高效性和软件灵活性,以较小的硬件开销实现高效的访存优化,在此基础上实现了结合硬件支持和精简的预取算法的基于软硬件协同管理机制的编译器数据预取方法,在性能上要优于纯软件算法,保证了软件算法的灵活性。
文档编号G06F12/08GK102981883SQ20121042097
公开日2013年3月20日 申请日期2012年10月29日 优先权日2012年10月29日
发明者漆锋滨, 肖谦, 沈莉, 姜军, 王超 申请人:无锡江南计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1