CN104932982A - 一种消息访存的编译方法及相关装置 - Google Patents
一种消息访存的编译方法及相关装置 Download PDFInfo
- Publication number
- CN104932982A CN104932982A CN201410108230.XA CN201410108230A CN104932982A CN 104932982 A CN104932982 A CN 104932982A CN 201410108230 A CN201410108230 A CN 201410108230A CN 104932982 A CN104932982 A CN 104932982A
- Authority
- CN
- China
- Prior art keywords
- memory access
- node
- access node
- chained list
- nodal community
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种消息访存的编译方法,包括:获取消息式内存的访存序列;确定所述访存序列中各个访存节点的节点属性;根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
Description
技术领域
本发明涉及通信领域,尤其涉及一种消息访存的编译方法及相关装置。
背景技术
在日常的计算机运算过程中,会经常通过访存指令读取内存中的参数,而这个访存密度是非常大的,因此,若能够对一些访存指令进行合并,则可以减小计算机的运算开销。
现有技术中有一种数据流分析的访存合并优化方法,具体包括以下步骤:
1)利用编译器收集整个程序的访存操作信息,将所得信息存入一个映射表;
2)由编译器对程序中的所有基本块构造支配图和后支配图;
3)对程序中的所有读操作做反向数据流分析,更新基本块的输入数据集和输出数据集;
4)对程序中的所有写操作,进行正向数据流分析,更新基本块的输入数据集和输出数据集;
5)根据步骤3)和步骤4)所得到的基本块的输入数据集和输出数据集,对每一个访存操作,判断该访存操作所在基本块的输入数据集合中的访存操作是否可与该访存操作合并,并为输入数据集中所有可以与当前访存操作做合并的访存操作建立一个集合;
6)判断用于保存可合并的访存操作的集合是否为空,若为空,则跳转到步骤10),否则,执行下一步;
7)对步骤5)所得集合中的所有元素,分别计算各个元素对应的访存操作与当前访存操作之间的合并密度;
8)从步骤7)所得到的结果中,选择合并密度最大的访存操作,将该访存操作与当前访存操作进行合并,生成新的访存操作;
9)判断所合并的访存操作的类型,若访存操作为读操作,则将访存操作所在基本块的读操作替换为对临时寄存器的读操作,并跳转到步骤
13),若访存操作为写操作,执行下一步;
10)访存操作为写操作,将访存操作所在基本块的写操作替换为对源操作数寄存器的写;
11)在写操作合并时,如果两个写操作的数据位置相邻,则到步骤13);否则,执行下一步;
12)两个写操作的数据位置不相邻,则遍历支配图中一个写操作原来所在基本块的所有祖先节点,寻找位于这些节点中的一个读操作,使得该读操作读取中间间隔部分的数据,如果找到该读操作,则在合并的写操作之前插入指令,将中间间隔部分的数据写入源操作数寄存器,如果找不到这样的读操作,则在支配图上该写操作原来所在基本块的父节点对应的基本块处,插入这样的读操作;
13)转步骤3);
14)结束。
上述现有技术主要是将地址相邻或者相近的两个或多个访存指令合并为一条多字节的访存指令,并合并后的访存指令存放在寄存器或局部存储器中,原先的访存指令会被替换为对寄存器或局部存储器的直接访问的指令。
在上述现有技术中,当所要访问的存储数据不相邻时,需要生成新的访存指令,增大了处理的开销,而在实际应用中,存储数据不相邻的情况经常出现,因此,新的访存指令会占用较大开销。
发明内容
本发明实施例提供了一种消息访存的编译方法及装置,用于提供一种适用于在全程序中进行大范围消息合并的方法。
本发明实施例第一方面提供的消息访存的编译方法,包括:
获取消息式内存的访存序列;
确定所述访存序列中各个访存节点的节点属性;
根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
在第一方面的第一种可能实现的方法中,所述访存序列包括:
访存操作的类型,访存节点的标识,访存节点的节点属性。
在第一方面的第二种可能实现的方法中,所述节点属性包括:动作属性和结构属性。
结合第一方面的第二种可能实现的方法,在第三种可能实现的方法中,所述确定所述访存序列中各个访存节点的节点属性之后,根据所述节点属性对访存节点的数据存储位置进行调整之前,包括:
根据所述各个访存节点的节点属性生成节点树链表;
所述根据所述节点属性对访存节点的数据存储位置进行调整,具体包括:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。
结合第一方面的第三种可能实现的方法,在第四种可能实现的方法中,所述根据所述各个访存节点的节点属性生成节点树链表,具体包括:
确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
结合第一方面的第三种可能实现的方法,在第五种可能实现的方法中,所述根据所述各个访存节点的节点属性生成节点树链表,具体还包括:
以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
结合第一方面的第四或五种可能实现的方法,在第六种可能实现的方法中,所述根据所述各个访存节点的节点属性生成节点树链表之前,还包括:
确定所述各个访存节点的标识序号;
所述依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径之后,还包括:
根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点。
结合第一方面的第六种可能实现的方法,在第七种可能实现的方法中,所述根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,具体包括:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
在第一方面的第八种可能实现的方法中,所述根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续之后,还包括:
对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。
本发明实施例第二方面提供编译装置,包括:
获取单元,用于获取消息式内存的访存序列;
属性确定单元,用于确定所述访存序列中各个访存节点的节点属性;
调整单元,用于根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
在第二方面的第一种可能实现的方法中,所述访存序列包括:
访存操作的类型,访存节点的标识,访存节点的节点属性。
在第二方面的第二种可能实现的方法中,所述节点属性包括:动作属性和结构属性。
结合第二方面的第二种可能实现的方法,在第三种可能实现的方法中,所述装置还包括:
链表生成单元,用于根据所述各个访存节点的节点属性生成节点树链表;
所述调整单元还用于根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。
结合第二方面的第三种可能实现的方法,在第四种可能实现的方法中,所述链表生成单元具体用于:
确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
结合第二方面的第三种可能实现的方法,在第五种可能实现的方法中,所述链表生成单元具体还用于:
以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
结合第二方面的第四或五种可能实现的方法,在第六种可能实现的方法中,所述链表生成单元具体还用于:确定所述各个访存节点的标识序号;根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点。
结合第二方面的第六种可能实现的方法,在第七种可能实现的方法中,根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
在第二方面的第八种可能实现的方法中,所述装置还包括:
合并单元,用于对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,会先获取消息式内存的访存序列,再确定所述访存序列中各个访存节点的节点属性,根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,当需要生成访存指令时,可以生成若干能够一次性对连续大范围存储数据进行访存的访存指令,提高了消息访存的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例消息访存的编译方法的一个流程示意图;
图2是本发明实施例消息访存的编译方法的另一个流程示意图;
图3是本发明实施例消息访存的编译方法的一个程序示意图;
图4是本发明实施例中节点树链表建立方法的一个示意图;
图5是本发明实施例中访存节点的数据存储位置调整的一个示意图;
图6是本发明实施例中访存指令合并的一个示意图;
图7是本发明实施例编译装置的一个结构示意图;
图8是本发明实施例编译装置的一个计算机结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种消息访存的编译方法及装置,用于为用户提供便捷、灵活的业务触发操作。
请参阅图1,本发明实施例中消息访存的编译方法的一个实施例包括:
101、获取消息式内存的访存序列;
编译装置获取消息式内存的访存序列,具体的,所述访存序列包括:对访存节点的的操作类型,访存节点的标识,访存节点的节点属性。
其中,所述对访存节点的的操作类型可以包括:加载(Load)和存储(store)。
所述消息式内存为一种具有可变粒度、异步等特点的内存模型。
102、确定所述访存序列中各个访存节点的节点属性;
编译装置确定所述访存序列中各个访存节点的节点属性,具体的,所述节点属性包括:动作属性和结构属性。
其中,动作属性可以包括加载操作,存储操作等。
其中,结构属性可以进一步划分层级,访存节点可以有仅一个层级的结构属性,也可以有或两个以上层级的结构属性。如,队列结构(AOS,Array OfStruct)中的访存节点A【0】.f1,最高层级为队列层级A,次高层级为队列层级A中的结构层级【0】,最后层级为队列层级A中的结构层级【0】中的节点层级f1。
103、根据所述节点属性对访存节点的数据存储位置进行调整。
编译装置根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
具体的,本发明实施例中的节点属性相同可以理解为至少有一种节点属性相同,而在实际应用中,由于节点属性包括有动作属性和结构属性,而结构属性又可以进一步划分为多个层级,因此,一种节点属性可以理解为动作属性中的不同动作的任意一种,或结构属性中的不同结构层级的任意一种。具体可以根据实际场景和实际需求,将节点属性的相近度较高的访存节点相邻排列,使得后续对访存指令进行合并的效果越好。
需要说明的是,在结构属性中,最高层级不同的访存节点的结构属性是肯定不一样的,结构属性的相近度是自上往下开始算的(即上一层级相同了,下一层级才有可能相同);如,访存节点A【0】.f1和访存节点B【0】.f1,虽然结构层级【0】和节点层级f1的标识都一样,但是,最高层级(队列层级)不一样,因此,访存节点A【0】.f1和访存节点B【0】.f1在结构属性没有相同点;又如,访存节点A【0】.f1和访存节点A【1】.f1,虽然节点层级f1的标识都一样,但节点层级的上一层级(结构层级)不一样,因此,这两个访存节点只有一个结构属性相同。
在实际应用中,消息式内存的访存指令相对于普通内存的访存指令,具有访存长度不定的特点(指的是,在不超过最大访存长度的情况下,访存长度不定),因此,普通内存在对访存指令进行组包时,多数情况下会出现冗余的情况;而,消息式内存在对访存指令进行组包时,则可以根据需要调整访存指令的大小,在本发明实施例的应用场景下,更内容适配实际情况(根据访存节点的多少和节点属性的相似度)进行访存指令的组包,提高了消息资源的利用率。
在本发明实施例中,会先获取消息式内存的访存序列,再确定所述访存序列中各个访存节点的节点属性,根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,当需要生成访存指令时,可以生成若干能够一次性对连续大范围存储数据进行访存的访存指令,提高了消息访存的效率。
在实际应用中,在确定了访存序列中各个访存节点的节点属性之后,可以根据各个访存节点的节点属性的情况,生成节点树链表,便于后续对访存节点的数据存储位置进行调整,具体请参阅图2实施例,本发明实施例中消息访存的编译方法的另一个实施例包括:
201、获取消息式内存的访存序列;
编译装置获取消息式内存的访存序列,具体的,所述访存序列包括:对访存节点的的操作类型,访存节点的标识,访存节点的节点属性。
其中,所述对访存节点的的操作类型可以包括:加载(Load)和存储(Store)。
所述消息式内存为一种具有可变粒度、异步等特点的内存模型。
202、确定所述访存序列中各个访存节点的节点属性;
编译装置确定所述访存序列中各个访存节点的节点属性,具体的,所述节点属性包括:动作属性和结构属性。
其中,动作属性可以包括加载操作,存储操作等。
其中,结构属性可以进一步划分层级,访存节点可以有仅一个层级的结构属性,也可以有或两个以上层级的结构属性。如,队列结构(AOS,Array OfStruct)中的访存节点A【0】.f1,最高层级为队列层级A,次高层级为队列层级A中的结构层级【0】,最后层级为队列层级A中的结构层级【0】中的节点层级f1。
203、根据所述各个访存节点的节点属性生成节点树链表;
编译装置根据所述各个访存节点的节点属性生成节点树链表。
具体的,节点树链表的根节点可以有两种划分方法:
一、先确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在这种情况中,在生成节点树链表时,可以设定,属于同一动作属性的根节点相邻排列。
二、以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在节点树链表的节点中,包括以下几种节点类型:
标量节点(scalar node)、队列节点(array node)、结构节点(structure node)和混合节点(complex node)。
其中,叶子节点看可以为标量节点(scalar node)和混合节点(complexnode)。
可选的,所述根据各个访存节点的节点属性生成节点树链表之前,还可以根据访存节点的标识确定访存节点的标识序号,如访存节点A【0】.f1,其标识为A【0】.f1,其标识序号为在结构层级为“0”,在节点层级为“1”。在依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径之后,可以根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点,最后生成节点树链表。
可以理解的是,在实际应用中,在同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列,更加便于对访存节点的数据存储位置进行调整,并且,访存指令的合并效果更好。
204、根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整;
编译装置根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
其中,由于访存节点的结构属性可以有多个层级,因此,若在非节点层级(即在节点树链表中为非叶子节点)中,层级由高至低,同一层级的结构属性也需要根据访存节点的标识序号,由小至大或由小至大依次排列。
具体的,本发明实施例中的节点属性相同可以理解为至少有一种节点属性相同,而在实际应用中,由于节点属性包括有动作属性和结构属性,而结构属性又可以进一步划分为多个层级,因此,一种节点属性可以理解为动作属性中的不同动作的任意一种,或结构属性中的不同结构层级的任意一种。具体可以根据实际场景和实际需求,将节点属性的相近度较高的访存节点相邻排列,使得后续对访存指令进行合并的效果越好。
需要说明的是,在结构属性中,最高层级不同的访存节点的结构属性是肯定不一样的,结构属性的相近度是自上往下开始算的(即上一层级相同了,下一层级才有可能相同);如,访存节点A【0】.f1和访存节点B【0】.f1,虽然结构层级【0】和节点层级f1的标识都一样,但是,最高层级(队列层级)不一样,因此,访存节点A【0】.f1和访存节点B【0】.f1在结构属性没有相同点;又如,访存节点A【0】.f1和访存节点A【1】.f1,虽然节点层级f1的标识都一样,但节点层级的上一层级(结构层级)不一样,因此,这两个访存节点只有一个结构属性相同。
205、对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并。
编译装置对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。如,对“加载”和“存储”两种动作属性的访存指令进行合并。
在本发明实施例中,在对访存指令进行组包时,可以按最大访存长度对对访存指令进行组包,也可以根据访问节点的实际情况(访存节点的多少和节点属性的相似度)灵活的设定访存指令的访存长度此处具体不作限定。
在实际应用中,消息式内存的访存指令相对于普通内存的访存指令,具有访存长度不定的特点(指的是,在不超过最大访存长度的情况下,访存长度不定),因此,普通内存在对访存指令进行组包时,多数情况下会出现冗余的情况;而,消息式内存在对访存指令进行组包时,则可以根据需要调整访存指令的大小,在本发明实施例的应用场景下,更内容适配实际情况进行访存指令的组包,提高了消息资源的利用率。
为了便于理解,下面以一具体应用场景对上述的实施例中描述的消息访存的编译方法再进行详细描述,请参考图3至图6,具体为:
请参考图3,图中为一段使用了AOS的运算程序,左侧为源程序的代码,右侧为运行这个程序所要执行的访存序列,其中的访存指令依次为:
Load A【0】.f1
Load A【1】.f1
Load A【2】.f1
Store m
Load B【1】.f2
Store n
Load A【0】.f2
Load A【1】.f2
Load A【2】.f2
Store p
Load B【2】.f1
Store q
编译装置先确定所述访存序列中各个访存节点的节点属性,其中包括两个动作属性“Load”和“Store”,在“Load”操作的访存节点中,可以分为三层结构属性,分别为“队列层级”、“结构层级”和“节点层级”。
其次,编译装置根据所述各个访存节点的节点属性生成节点树链表,访存序列中各个访存节点在节点树链表中对应的链表路径如图4所示。
再次,编译装置根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。访存节点的数据存储位置调整后如图5所示。
最后,编译装置对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,其中,合并后的访存指令依次为:
Mbm Load A
Mbm Load B【1】.f2,Load B【2】.f1
Mbm Store m n p q
由于,编译装置对各个访存节点的数据存储位置进行了调整,使得访存指令合并的概率增大,从而减少了访存指令发送的开销。
上面仅以一些例子对本发明实施例中的应用场景进行了说明,可以理解的是,在实际应用中,还可以有更多的应用场景,具体此处不作限定。
下面对用于执行上述消息访存的编译方法的本发明编译装置的实施例进行说明,其逻辑结构请参考图7,本发明实施例中的编译装置一个实施例包括:
获取单元701,用于获取消息式内存的访存序列;
属性确定单元702,用于确定所述访存序列中各个访存节点的节点属性;
调整单元703,用于根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
具体的,所述访存序列包括:
访存操作的类型,访存节点的标识,访存节点的节点属性。
具体的,所述节点属性包括:动作属性和结构属性。
可选的,所述装置还包括:
链表生成单元704,用于根据所述各个访存节点的节点属性生成节点树链表;
所述调整单元703还用于根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。
可选的,所述链表生成单元704具体用于:
确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
可选的,所述链表生成单元704具体还用于:
以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
可选的,所述链表生成单元704具体还用于:确定所述各个访存节点的标识序号;根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点。
可选的,所述调整单元703具体用于:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
可选的,所述装置还包括:
合并单元705,用于对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。
下面对上述各个单元的操作进行详细描述:
获取单元701获取消息式内存的访存序列,具体的,所述访存序列包括:对访存节点的的操作类型,访存节点的标识,访存节点的节点属性。
其中,所述对访存节点的的操作类型可以包括:加载(Load)和存储(store)。
所述消息式内存为一种具有可变粒度、异步等特点的内存模型。
属性确定单元702确定所述访存序列中各个访存节点的节点属性,具体的,所述节点属性包括:动作属性和结构属性。
其中,动作属性可以包括加载操作,存储操作等。
其中,结构属性可以进一步划分层级,访存节点可以有仅一个层级的结构属性,也可以有或两个以上层级的结构属性。如,队列结构(AOS,Array OfStruct)中的访存节点A【0】.f1,最高层级为队列层级A,次高层级为队列层级A中的结构层级【0】,最后层级为队列层级A中的结构层级【0】中的节点层级f1。
链表生成单元704根据所述各个访存节点的节点属性生成节点树链表。
具体的,节点树链表的根节点可以有两种划分方法:
一、先确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在这种情况中,在生成节点树链表时,可以设定,属于同一动作属性的根节点相邻排列。
二、以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在节点树链表的节点中,包括以下几种节点类型:
标量节点(scalar node)、队列节点(array node)、结构节点(structure node)和混合节点(complex node)。
其中,叶子节点看可以为标量节点(scalar node)和混合节点(complexnode)。
可选的,所述根据各个访存节点的节点属性生成节点树链表之前,还可以根据访存节点的标识确定访存节点的标识序号,如访存节点A【0】.f1,其标识为A【0】.f1,其标识序号为在结构层级为“0”,在节点层级为“1”。在依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径之后,可以根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点,最后生成节点树链表。
可以理解的是,在实际应用中,在同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列,更加便于对访存节点的数据存储位置进行调整,并且,访存指令的合并效果更好。
调整单元703根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
其中,由于访存节点的结构属性可以有多个层级,因此,若在非节点层级(即在节点树链表中为非叶子节点)中,层级由高至低,同一层级的结构属性也需要根据访存节点的标识序号,由小至大或由小至大依次排列。
具体的,本发明实施例中的节点属性相同可以理解为至少有一种节点属性相同,而在实际应用中,由于节点属性包括有动作属性和结构属性,而结构属性又可以进一步划分为多个层级,因此,一种节点属性可以理解为动作属性中的不同动作的任意一种,或结构属性中的不同结构层级的任意一种。具体可以根据实际场景和实际需求,将节点属性的相近度较高的访存节点相邻排列,使得后续对访存指令进行合并的效果越好。
需要说明的是,在结构属性中,最高层级不同的访存节点的结构属性是肯定不一样的,结构属性的相近度是自上往下开始算的(即上一层级相同了,下一层级才有可能相同);如,访存节点A【0】.f1和访存节点B【0】.f1,虽然结构层级【0】和节点层级f1的标识都一样,但是,最高层级(队列层级)不一样,因此,访存节点A【0】.f1和访存节点B【0】.f1在结构属性没有相同点;又如,访存节点A【0】.f1和访存节点A【1】.f1,虽然节点层级f1的标识都一样,但节点层级的上一层级(结构层级)不一样,因此,这两个访存节点只有一个结构属性相同。
合并单元705对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。如,对“加载”和“存储”两种动作属性的访存指令进行合并。
在本发明实施例中,在对访存指令进行组包时,可以按最大访存长度对对访存指令进行组包,也可以根据访问节点的实际情况(访存节点的多少和节点属性的相似度)灵活的设定访存指令的访存长度此处具体不作限定。
在实际应用中,消息式内存的访存指令相对于普通内存的访存指令,具有访存长度不定的特点(指的是,在不超过最大访存长度的情况下,访存长度不定),因此,普通内存在对访存指令进行组包时,多数情况下会出现冗余的情况;而,消息式内存在对访存指令进行组包时,则可以根据需要调整访存指令的大小,在本发明实施例的应用场景下,更内容适配实际情况进行访存指令的组包,提高了消息资源的利用率。
请再参见图8,本发明实施例还提供了一种编译装置,可包括:
输入装置810,输出装置820,存储器830和处理器80(编译装置中的处理器的数量可以为一个或多个,图8中以一个处理器为例)在本发明的一些实施例中,输入装置810,输出装置820,存储器830和处理器840可通过总线或其它方式连接,其中,图8中通过总线连接为例。
其中,所述输入装置810执行如下步骤:
获取消息式内存的访存序列,具体的,所述访存序列包括:对访存节点的的操作类型,访存节点的标识,访存节点的节点属性。
其中,所述对访存节点的的操作类型可以包括:加载(Load)和存储(store)。
所述消息式内存为一种具有可变粒度、异步等特点的内存模型。
所述存储器830存储所述访存序列。
其中,所述处理器840执行如下步骤:
处理器840确定所述访存序列中各个访存节点的节点属性,具体的,所述节点属性包括:动作属性和结构属性。
其中,动作属性可以包括加载操作,存储操作等。
其中,结构属性可以进一步划分层级,访存节点可以有仅一个层级的结构属性,也可以有或两个以上层级的结构属性。如,队列结构(AOS,Array OfStruct)中的访存节点A【0】.f1,最高层级为队列层级A,次高层级为队列层级A中的结构层级【0】,最后层级为队列层级A中的结构层级【0】中的节点层级f1。
处理器840根据所述各个访存节点的节点属性生成节点树链表。
具体的,节点树链表的根节点可以有两种划分方法:
一、先确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在这种情况中,在生成节点树链表时,可以设定,属于同一动作属性的根节点相邻排列。
二、以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
在节点树链表的节点中,包括以下几种节点类型:
标量节点(scalar node)、队列节点(array node)、结构节点(structure node)和混合节点(complex node)。
其中,叶子节点看可以为标量节点(scalar node)和混合节点(complexnode)。
可选的,所述根据各个访存节点的节点属性生成节点树链表之前,还可以根据访存节点的标识确定访存节点的标识序号,如访存节点A【0】.f1,其标识为A【0】.f1,其标识序号为在结构层级为“0”,在节点层级为“1”。在依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径之后,可以根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点,最后生成节点树链表。
可以理解的是,在实际应用中,在同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列,更加便于对访存节点的数据存储位置进行调整,并且,访存指令的合并效果更好。
处理器840根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
其中,由于访存节点的结构属性可以有多个层级,因此,若在非节点层级(即在节点树链表中为非叶子节点)中,层级由高至低,同一层级的结构属性也需要根据访存节点的标识序号,由小至大或由小至大依次排列。
具体的,本发明实施例中的节点属性相同可以理解为至少有一种节点属性相同,而在实际应用中,由于节点属性包括有动作属性和结构属性,而结构属性又可以进一步划分为多个层级,因此,一种节点属性可以理解为动作属性中的不同动作的任意一种,或结构属性中的不同结构层级的任意一种。具体可以根据实际场景和实际需求,将节点属性的相近度较高的访存节点相邻排列,使得后续对访存指令进行合并的效果越好。
需要说明的是,在结构属性中,最高层级不同的访存节点的结构属性是肯定不一样的,结构属性的相近度是自上往下开始算的(即上一层级相同了,下一层级才有可能相同);如,访存节点A【0】.f1和访存节点B【0】.f1,虽然结构层级【0】和节点层级f1的标识都一样,但是,最高层级(队列层级)不一样,因此,访存节点A【0】.f1和访存节点B【0】.f1在结构属性没有相同点;又如,访存节点A【0】.f1和访存节点A【1】.f1,虽然节点层级f1的标识都一样,但节点层级的上一层级(结构层级)不一样,因此,这两个访存节点只有一个结构属性相同。
处理器840对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。如,对“加载”和“存储”两种动作属性的访存指令进行合并。
在完成访存指令的合并之后,输出装置820输出所述合并后的访存指令。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (18)
1.一种消息访存的编译方法,其特征在于,包括:
获取消息式内存的访存序列;
确定所述访存序列中各个访存节点的节点属性;
根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
2.根据根据权利要求1所述的方法,其特征在于,所述访存序列包括:
访存操作的类型,访存节点的标识,访存节点的节点属性。
3.根据根据权利要求1所述的方法,其特征在于,所述节点属性包括:动作属性和结构属性。
4.根据根据权利要求3所述的方法,其特征在于,
所述确定所述访存序列中各个访存节点的节点属性之后,根据所述节点属性对访存节点的数据存储位置进行调整之前,包括:
根据所述各个访存节点的节点属性生成节点树链表;
所述根据所述节点属性对访存节点的数据存储位置进行调整,具体包括:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。
5.根据根据权利要求4所述的方法,其特征在于,所述根据所述各个访存节点的节点属性生成节点树链表,具体包括:
确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
6.根据根据权利要求4所述的方法,其特征在于,所述根据所述各个访存节点的节点属性生成节点树链表,具体还包括:
以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
7.根据根据权利要求5或6所述的方法,其特征在于,
所述根据所述各个访存节点的节点属性生成节点树链表之前,还包括:
确定所述各个访存节点的标识序号;
所述依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径之后,还包括:
根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点。
8.根据根据权利要求7所述的方法,其特征在于,所述根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,具体包括:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
9.根据根据权利要求1所述的方法,其特征在于,所述根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续之后,还包括:
对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。
10.一种编译装置,其特征在于,包括:
获取单元,用于获取消息式内存的访存序列;
属性确定单元,用于确定所述访存序列中各个访存节点的节点属性;
调整单元,用于根据所述节点属性对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续。
11.根据根据权利要求10所述的装置,其特征在于,所述访存序列包括:
访存操作的类型,访存节点的标识,访存节点的节点属性。
12.根据根据权利要求10所述的装置,其特征在于,所述节点属性包括:动作属性和结构属性。
13.根据根据权利要求12所述的装置,其特征在于,所述装置还包括:
链表生成单元,用于根据所述各个访存节点的节点属性生成节点树链表;
所述调整单元还用于根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整。
14.根据根据权利要求13所述的装置,其特征在于,所述链表生成单元具体用于:
确定所述访存节点中最上层级的结构属性,并以所述最上层级的结构属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
15.根据根据权利要求13所述的装置,其特征在于,所述链表生成单元具体还用于:
以所述动作属性作为所述节点树链表的根节点,再依次根据所述访存节点的各个层级的结构属性确定所述访存节点的链表路径,生成节点树链表。
16.根据根据权利要求14或15所述的装置,其特征在于,
所述链表生成单元具体还用于:确定所述各个访存节点的标识序号;根据所述各个访存节点的标识序号,在节点树链表的叶子节点中依次排列所述各个访存节点。
17.根据根据权利要求16所述的装置,其特征在于,所述调整单元具体用于:
根据所述节点树链表中访存节点的位置关系,对访存节点的数据存储位置进行调整,使得节点属性相同的访存节点的数据存储位置连续,且同一层级的结构属性下,访存节点的数据存储位置根据所述标识序号由小至大或由小至大依次排列。
18.根据根据权利要求10所述的装置,其特征在于,所述装置还包括:
合并单元,用于对访存序列中访问节点属性相同,且存储地址相邻的访存节点的访存指令进行合并,生成合并后的访存指令,所述合并后的访存指令的访存长度小于或等于所述消息式内存的最大访存长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410108230.XA CN104932982B (zh) | 2014-03-21 | 2014-03-21 | 一种消息访存的编译方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410108230.XA CN104932982B (zh) | 2014-03-21 | 2014-03-21 | 一种消息访存的编译方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104932982A true CN104932982A (zh) | 2015-09-23 |
CN104932982B CN104932982B (zh) | 2019-02-12 |
Family
ID=54120154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410108230.XA Active CN104932982B (zh) | 2014-03-21 | 2014-03-21 | 一种消息访存的编译方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104932982B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110689418A (zh) * | 2019-09-27 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 账单生成方法及装置 |
CN114154092A (zh) * | 2021-11-18 | 2022-03-08 | 网易有道信息技术(江苏)有限公司 | 用于对网页进行翻译的方法及其相关产品 |
CN117971501A (zh) * | 2024-03-28 | 2024-05-03 | 北京壁仞科技开发有限公司 | 一种数据访问方法、设备、存储介质及程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1462004A (zh) * | 2002-05-31 | 2003-12-17 | 思科技术公司 | 用于产生和使用改进的树形位图数据结构的方法和装置 |
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
-
2014
- 2014-03-21 CN CN201410108230.XA patent/CN104932982B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1462004A (zh) * | 2002-05-31 | 2003-12-17 | 思科技术公司 | 用于产生和使用改进的树形位图数据结构的方法和装置 |
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110689418A (zh) * | 2019-09-27 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 账单生成方法及装置 |
CN114154092A (zh) * | 2021-11-18 | 2022-03-08 | 网易有道信息技术(江苏)有限公司 | 用于对网页进行翻译的方法及其相关产品 |
CN114154092B (zh) * | 2021-11-18 | 2023-04-18 | 网易有道信息技术(江苏)有限公司 | 用于对网页进行翻译的方法及其相关产品 |
CN117971501A (zh) * | 2024-03-28 | 2024-05-03 | 北京壁仞科技开发有限公司 | 一种数据访问方法、设备、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN104932982B (zh) | 2019-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8224825B2 (en) | Graph-processing techniques for a MapReduce engine | |
CN102866954B (zh) | 内存分配的方法及装置 | |
CN107885499A (zh) | 一种接口文档生成方法及终端设备 | |
CN105224237A (zh) | 一种数据存储方法及装置 | |
CN104881466B (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN103370691A (zh) | 管理缓冲器溢出状况 | |
CN103995855A (zh) | 存储数据的方法和装置 | |
US20100185827A1 (en) | Refactoring virtual data storage hierarchies | |
KR102061466B1 (ko) | 메모리 관리를 위한 보존 가비지 콜렉팅 및 정수 태깅 기법 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN106446061A (zh) | 用于存储虚拟机镜像的方法及设备 | |
CN103034544A (zh) | 一种用户态与内核态共享内存的管理方法和装置 | |
CN106970929A (zh) | 数据导入方法及装置 | |
CN109918658A (zh) | 一种从文本中获取目标词汇的方法及系统 | |
CN103688257A (zh) | 元数据管理方法和装置 | |
CN105094924A (zh) | 镜像文件的导入方法及装置 | |
CN105677903A (zh) | 获取数据的方法和装置、计算机设备 | |
CN105574032A (zh) | 规则匹配运算方法及装置 | |
CN104932982A (zh) | 一种消息访存的编译方法及相关装置 | |
CN105701128A (zh) | 一种查询语句的优化方法和装置 | |
CN109684517A (zh) | 一种历史数据存储方法、读写方法、存储装置和设备 | |
CN115202589B (zh) | 放置组成员选择方法、装置、设备及可读存储介质 | |
CN103559106B (zh) | 一种数据的备份方法、装置及系统 | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
CN106156065B (zh) | 一种文件持久化方法、删除方法以及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |