一种面向连续不对界向量数据访问的编译优化方法

xiaoxiao2021-3-1  166

一种面向连续不对界向量数据访问的编译优化方法
【技术领域】
[0001]本发明涉及计算机技术领域,更具体地说,本发明涉及一种面向连续不对界向量数据访问的编译优化方法。
【背景技术】
[0002]SIMD(Single Instruct1n Multiple Data,单指令多数据流)指一条指令完成对多个数据的操作。执行一条SIMD向量指令就等于同时对向量的所有标量元素进行操作。但是进行向量访存操作时,需要保证其访存内存的地址满足向量宽度的对界要求,否则不对界的向量访存会引发异常,操作系统收到异常信号后会将一条向量访存指令拆分成多条标量类型的访存指令,这样会极大的降低程序的性能。其中,对界是向量数据类型在内存中的存放有对界要求,以包含η个整数标量的向量为例,其在内存中的起始地址必须2n+2字节对界,不对界的向量访存会严重降低性能。
[0003]申威26011处理器中提供了专门的不对界向量访存指令,针对每一次不对界向量访存操作,将其拆分为两条不对界向量访存指令以及一条向量或指令,完成不对界向量访存的功能。
[0004]申威26011处理器提供的向量不对界访存指令功能如图1所示:每个向量包含η个元素,每个元素占用4个字节,则向量访存需要满足2η+2字节对界。0〈χ〈η。
[0005]不对界向量访存本身也要求访存地址满足单个向量元素宽度的对界要求。如图1所示,要从内存地址m*2n+2+4x读取向量长度的数据,因为该地址满足向量访存的对界要求,无法使用常规的向量访存指令实现。申威26011处理器首先将一次不对界向量访存拆分为两条向量不对界访存指令:VLDW_UL、VLDW_mLVLDW_UH指令读取向量的高位数据,即将内存地址从(m+l)*2n+2到(m+l)*2n+2+4x的数据加载到一个向量寄存器中,该向量寄存器的其余部分用0填充;VLDW_UL指令读取向量的低位数据,即将内存地址从m*2n+2+4x到(m+l)*2n+2的数据加载到另一个向量寄存器中,该向量寄存器的其余部分用0填充;然后对着两个向量寄存器中的数据执行一个向量的逻辑或(VBIS)操作,则产生的向量结果就是希望获得的数据。
[0006]申威26011处理器针对向量不对界访存操作的处理方法针对少量的不对界向量访存操作,对程序的性能影响不大;但是对于连续的向量不对界数据访问,由于每次不对界访存操作需要两条向量指令完成,其中包括两条访存指令,程序的性能仍然会受到很大影响。

【发明内容】

[0007]本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种面向连续不对界向量数据访问的编译优化方法,其能够针对连续的向量不对界数据访问,在硬件调整向量不对界访存指令的功能的基础上,通过软件的编译优化,有效利用了每条不对界访存指令获得的数据,极大地提高了程序的性能。
[0008]为了实现上述技术目的,根据本发明,提供了一种面向连续不对界向量数据访问的编译优化方法,包括:
[0009]第一步骤:对一个基本块内的所有指令按照依赖性关系自底向上进行遍历搜索;
[0010]第二步骤:当搜索到存在不对界向量数据访问关系的第一访存指令和第二访存指令时,对第一访存指令和第二访存指令进行检测以判断第一访存指令和第二访存指令是否满足预定条件;
[0011 ]第三步骤:在第一访存指令和第二访存指令满足预定条件的情况下,删除第一访存指令和第二访存指令中的一个访存指令;
[0012]第四步骤:将与被删除指令有关的数据依赖转移到未被删除的另一个访存指令上。
[0013]优选地,所述预定条件指的是第一访存指令和第二访存指令满足下述所有情况:
[0014]第一访存指令和第二访存指令的向量访存的基地址相同;
[0015]第一访存指令和第二访存指令的向量访存的偏移地址相同;
[0016]第一访存指令和第二访存指令的指令操作码相同,即是同类型的不对界向量访存指令;
[0017]第一访存指令和第二访存指令的访存的数据宽度相同;
[0018]第一访存指令和第二访存指令之间没有其他的存储操作对访存地址进行写操作,即前后两次不对界向量访存指令所访问的内存数据没有发生变化;
[0019]第一访存指令和第二访存指令之间有寄存器用于存放访存加载进来的数据。
【附图说明】
[0020]结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
[0021]图1示意性地示出了申威26011处理器的向量不对界访存指令。
[0022]图2示意性地示出了一种新的向量不对界访存的实现机制。
[0023]图3示意性地示出了连续的不对界向量访存操作示意。
[0024]图4示意性地示出了根据本发明优选实施例的面向连续不对界向量数据访问的编译优化方法的流程图。
[0025]图5示意性地示出了采用本发明前后的汇编码示例。
[0026]需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
【具体实施方式】
[0027]为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
[0028]图2示出了一种新的向量不对界访存的实现机制:只提供一条向量不对界访存指令VLDW_U,每次访存时首先将访存地址强制对界,然后从对界的地址读取向量长度的数据到向量寄存器中。此时读取的数据并非所需的数据。此外,这种新的向量不对界访存的实现机制中还提供了向量拼接指令(VC0NW),根据偏移地址,将两个向量寄存器中的数据拼接到一起。如图2所示:VC0NW指令根据不对界的地址,将左边一条VLDW_U指令获得的向量的高位部分和右边一条VLDW_U指令获得的向量的低位部分拼接在一起形成一个新的向量,这个新的向量就是希望获得的向量数据。
[0029]从表面上看,如果只是进行一次向量不对界访存,图1和图2的两种方法的开销是一样的,都是两条向量不对界访存指令和一条普通的向量指令。但是当出现连续的向量不对界数据访问时,第二种方法的优势就体现出来了。第一种方式的向量不对界访存指令并没有将一次向量访存所能获得数据都加载进来,存在着浪费。而第二种方式的VLDW_U指令每一次向量访存都加载进来一个向量宽度的数据,这就为连续的向量不对界数据访问提供了优化的空间。
[0030]本发明提出的面向连续不对界向量数据访问的编译优化方式就是在第二种向量不对界访问实现机制的基础上,针对程序特点,通过编译优化,消除冗余的向量访存指令,有效地提尚程序的性能。
[0031]本发明提出的面向连续不对界向量数据访问的编译优化是在编译器的代码生成阶段进行,是其中的窥孔优化的一部分。窥孔优化是编译器在代码生成阶段针对基本块内部的一种优化方法。在基本块内,指令有很好的顺序特性,往往可以根据指令序列的作用,寻找出一种更加高效的替代方式,从而达到优化效果。本发明主要考虑窥孔优化中对访存指令的优化。
[0032]窥孔优化对访存指令的优化为了保证程序的正确性,对能够进行优化的访存指令有着苛刻的要求,本发明只针对连续的不对界向量数据访问进行优化,对于相同访存地址指令的删除检测可以在一定程度上放开限制,只需要满足必要的条件即可。
[0033]从常见的程序特性上来看,连续的不对界向量数据访问以两种方式存在:一是程序员手工通过连续的调用不对界向量 访存函数接口依次对连续的地址空间进行向量访存,二是在循环体中调用不对界向量访存函数接口进行不对界向量访存,前后循环迭代之间的不对界向量访存地址存在连续性。前一种方式产生的不对界向量访存指令必然处于同一个基本块内,可以进行窥孔优化;后一种方式则在进行窥孔优化之前进行循环展开优化,使得同一个基本块内出现大量的不对界向量访存指令,然后再进行窥孔优化。
[0034]具体地,图4示意性地示出了根据本发明优选实施例的面向连续不对界向量数据访问的编译优化方法的流程图。
[0035]如图4所示,根据本发明优选实施例的面向连续不对界向量数据访问的编译优化方法包括:
[0036]第一步骤S1:对一个基本块内的所有指令按照依赖性关系自底向上进行遍历搜索;
[0037]第二步骤S2:当搜索到存在不对界向量数据访问关系的第一访存指令opl和第二访存指令op2时,对第一访存指令opl和第二访存指令op2进行检测以判断第一访存指令opl和第二访存指令op2是否满足预定条件;所述预定条件指的是第一访存指令opl和第二访存指令op2满足下述所有情况:
[0038]1、第一访存指令opl和第二访存指令op2的向量访存的基地址相同;
[0039]2、第一访存指令opl和第二访存指令op2的向量访存的偏移地址相同;
[0040]3、第一访存指令opl和第二访存指令op2的指令操作码相同,即是同类型的不对界向量访存指令;[0041 ] 4、第一访存指令opl和第二访存指令op2的访存的数据宽度相同;
[0042]5、第一访存指令opl和第二访存指令op2之间没有其他的存储操作对访存地址进行写操作,即前后两次不对界向量访存指令所访问的内存数据没有发生变化;
[0043]6、第一访存指令opl和第二访存指令op2之间有寄存器用于存放访存加载进来的数据。
[0044]第三步骤S3:在第一访存指令opl和第二访存指令op2满足预定条件的情况下,删除第一访存指令opl和第二访存指令op2中的一个访存指令;
[0045]第四步骤S4:将与被删除指令有关的数据依赖转移到未被删除的另一个访存指令上。
[0046]举例来说,在窥孔优化时,对一个基本块内的所有指令按照依赖性关系自底向上进行遍历搜索。当搜索到两条不对界向量访存指令opl和op2时,对opl和op2进行检测,符合以下条件则认为他们是对相同的地址进行访问,其中的一条指令可以删除掉:
[0047]l、opl和op2的向量访存的基地址相同;
[0048]2、opl和op2的向量访存的偏移地址相同;
[0049]3、opl和op2的指令操作码相同,即是同类型的不对界向量访存指令;
[0050]4、opl和op2的访存的数据宽度相同;
[0051]5、opl和op2之间没有其他的存储操作对访存地址进行写操作,即前后两次不对界向量访存指令所访问的内存数据没有发生变化;
[0052]6、opl和op2之间有寄存器用于存放访存加载进来的数据;
[0053]如果以上条件都满足,则可以将opl和oP2中的一条指令删除,假设删除opl,然后将与opl有关的数据依赖转移到op2上,至此则实现了对相同访存地址指令的删除。
[0054]如图3所示,连续的不对界向量数据访存,假设向量宽度为32字节,每个向量8个元素,每个元素占用4字节的存储空间,不对界访存的首地址在对界的地址上偏移了8个字节。假设连续进行4次不对界向量访存,不采用本发明的优化措施编译产生的汇编码如图5左侧所示,采用本发明进行优化后的汇编码如图5右侧所示,显而易见,本发明有效地减少的访存指令的数目,提高了程序的性能。对于连续的N次不对界向量访存操作,可以减少(N-1)条不对界向量访存指令。
[0055]本发明的面向连续不对界向量数据访问的编译优化方法的工作原理在于,结合循环展开优化和窥孔优化的相同访存地址指令删除优化,针对连续的不对界向量数据访问,有效地删除冗余的不对界向量访存指令,提高程序的性能。该优化方法对程序员透明。
[0056]本发明针对连续不对界向量数据访问带来的冗余访存指令,结合循环展开优化和窥孔优化,优化实现其中的相同访存地址指令删除。循环展开优化使得一个基本块内出现大量的不对界向量访存指令,这是窥孔优化实现的基础。窥孔优化中针对大量的不对界向量访存指令,对相同访存地址指令的检测进行优化,避免因为苛刻的检测条件使得能够优化的访存指令无法优化。最终使得所有的冗余的向量不对界访存指令都被删除掉。该方法在编译器中实现,对程序员完全透明。
[0057]此外,需要说明的是,除非特别说明或者指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
[0058]可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
【主权项】
1.一种面向连续不对界向量数据访问的编译优化方法,其特征在于包括: 第一步骤:对一个基本块内的所有指令按照依赖性关系自底向上进行遍历搜索; 第二步骤:当搜索到存在不对界向量数据访问关系的第一访存指令和第二访存指令时,对第一访存指令和第二访存指令进行检测以判断第一访存指令和第二访存指令是否满足预定条件; 第三步骤:在第一访存指令和第二访存指令满足预定条件的情况下,删除第一访存指令和第二访存指令中的一个访存指令; 第四步骤:将与被删除指令有关的数据依赖转移到未被删除的另一个访存指令上。2.根据权利要求1所述的面向连续不对界向量数据访问的编译优化方法,其特征在于,所述预定条件指的是第一访存指令和第二访存指令满足下述所有情况: 第一访存指令和第二访存指令的向量访存的基地址相同; 第一访存指令和第二访存指令的向量访存的偏移地址相同; 第一访存指令和第二访存指令的指令操作码相同,即是同类型的不对界向量访存指令; 第一访存指令和第二访存指令的访存的数据宽度相同; 第一访存指令和第二访存指令之间没有其他的存储操作对访存地址进行写操作,即前后两次不对界向量访存指令所访问的内存数据没有发生变化; 第一访存指令和第二访存指令之间有寄存器用于存放访存加载进来的数据。
【专利摘要】本发明提供了一种面向连续不对界向量数据访问的编译优化方法,包括:对一个基本块内的所有指令按照依赖性关系自底向上进行遍历搜索;当搜索到存在不对界向量数据访问关系的第一访存指令和第二访存指令时,对第一访存指令和第二访存指令进行检测以判断第一访存指令和第二访存指令是否满足预定条件;在第一访存指令和第二访存指令满足预定条件的情况下,删除第一访存指令和第二访存指令中的一个访存指令;将与被删除指令有关的数据依赖转移到未被删除的另一个访存指令上。
【IPC分类】G06F9/38
【公开号】CN105487839
【申请号】CN201510827879
【发明人】漆锋滨, 肖谦, 管茂林, 吴伟
【申请人】无锡江南计算技术研究所
【公开日】2016年4月13日
【申请日】2015年11月24日

最新回复(0)