技术领域
[0001] 本
发明属于
高性能计算并行化处理技术领域,特别涉及一种程序向量化过程中动静结合的内存别名分析处理方法及装置。
背景技术
[0002] 并行程序是提高程序性能的有效手段,它通过多个执行部件同时执行任务来加快程序运行速度。程序并行优化是指将串行程序通过分析变换生成更高效的并行程序,是一种语句的重排序变换,程序变换需要保证其合法性,这个合法性是由依赖关系来保证的。
指针是一种常用的语法特征,指针参数传递、堆空间的使用等指针操作增加了程序设计的灵活性和处理能
力。同时,也给程序分析带来了困难,即,指针的指向
位置难以精确确定。多个指针指向同一
块内存,可以互相称之为内存的别名。当程序中存在大量的指针时,如果无法确定指针指向的内存块是否有重叠,会保守地将指针作为别名来处理。别名引起了程序语句间的大量依赖,而依赖关系决定了程序是否能够并行执行。程序开发手段的多样化,编程技巧的多样化和实际应用的复杂化,导致我们实际得到的程序往往存在大量的别名,向量化作为一种语句重排序变换,其并行性发掘不希望受别名影响,因此,精确分析别名和尽量消除别名对于程序的向量并行优化是非常重要的。
发明内容
[0003] 为此,本发明提供一种程序向量化过程中动静结合的内存别名分析处理方法及装置,以实现简化或消除别名对向量并行性发掘的影响。
[0004] 按照本发明所提供的设计方案,一种程序向量化过程中动静结合的内存别名分析处理方法,包含:
[0005] 针对向量化过程中循环体内的所有内存引用,构建待测内存引用对集合;
[0006] 程序编译阶段,通过静态分析确定待测内存引用对别名状态,该待测内存引用对别名状态分为别名状态、非别名状态和不确定状态;
[0007] 针对不确定状态,在程序运行过程中动态检测内存引用对的别名状态;并针对程序编译阶段和运行过程中别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0008] 作为本发明内存别名分析处理方法,进一步地,收集向量化过程中循环体内的所有内存引用,将其两两组合,得到待测内存引用对,其中,两两组合中,至少包含指针引用和内存写操作。
[0009] 作为本发明内存别名分析处理方法,进一步地,收集循环体内的内存引用,该内存引用包含指针和内存写操作。
[0010] 作为本发明内存别名分析处理方法,进一步地,动态检测内存引用对的别名状态中,通过判定内存引用指针对应内存块是否重叠,以实现在程序运行过程中对待测内存引用对的别名状态检测。
[0011] 作为本发明内存别名分析处理方法,进一步地,动态检测中,针对别名状态和非别名状态生成对应的代码版本;针对别名版本和别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名版本和非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0012] 作为本发明内存别名分析处理方法,进一步地,向量化
框架中,通过设定是否满足
迭代空间访存的最大跨度的判定条件,以检测内存引用指针对应内存块是否重叠。
[0013] 作为本发明内存别名分析处理方法,进一步地,动态检测中若存在多个待测内存引用对时,则将每个待测内存引用对的判定条件通过逻辑与运算进行连接,以实现动态检测中多个待测内存引用对别名状态的判定。
[0014] 更进一步地,本发明还提供一种程序向量化过程中动静结合的内存别名分析处理装置,包含:数据收集模块、静态分析模块和动态分析模块,其中,
[0015] 数据收集模块,用于针对向量化过程中循环体内的所有内存引用,构建待测内存引用对集合;
[0016] 静态分析模块,用于在程序编译阶段,通过静态分析确定待测内存引用对别名状态,该待测内存引用对别名状态分为别名状态、非别名状态和不确定状态;
[0017] 动态分析模块,用于针对静态分析模块中的不确定状态,在程序运行过程中动态检测内存引用对的别名状态;并针对程序编译阶段和运行过程中别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0018] 更进一步地,本发明还提供一种计算机可读存储介质,其上存储有
计算机程序,所述计算机程序被处理器执行时实现如上述的程序向量化过程中动静结合的内存别名分析处理的步骤。
[0019] 更进一步地,本发明还提供
服务器,包含
存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上述的程序向量化过程中动静结合的内存别名分析处理的步骤。
[0020] 本发明的有益效果:
[0021] 本发明通过动静结合的别名分析和处理,实现向量化过程中对别名的有效预处理,通过静态别名检测、运行时别名动态检测以及代码多版本等生成不存在别名的代码版本,从而降低依赖分析的复杂度,为程序的向量并行化提供
支撑;可以有效提升程序代码编译器的向量并行识别能力,有利于编译器自动生成更高效的SIMD向量并行代码,能够提升CPU中SIMD部件的并行优势,进而提高程序的运行性能,保证程序的运行效率,具有较好的应用前景。
附图说明:
[0022] 图1为本发明
实施例中内存别名分析处理方法
流程图;
[0023] 图2为本发明实施例中内存别名示意图;
[0024] 图3为本发明实施例中动静结合内存别名检测原理示意;
[0025] 图4为本发明实施例中内存别名分析处理装置示意图。具体实施方式:
[0026] 为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
[0027] 指针参数传递、堆空间的使用等指针操作中,指针的指向位置难以精确确定。多个指针指向同一块内存,可以互相称之为内存的别名,如图2所示。当程序中存在大量的指针时,如果无法确定指针指向的内存块是否有重叠,会保守地将指针作为别名来处理。别名引起程序语句间的大量依赖,而依赖关系决定程序是否能够并行执行。为提升SIMD程序向量并行化效率,本发明实施例,参见图1所示,提供一种程序向量化过程中动静结合的内存别名分析处理方法,包含如下内容:
[0028] S101)针对向量化过程中循环体内的所有内存引用,构建待测内存引用对集合;
[0029] S102)程序编译阶段,通过静态分析确定待测内存引用对别名状态,该待测内存引用对别名状态分为别名状态、非别名状态和不确定状态;
[0030] S103)针对不确定状态,在程序运行过程中动态检测内存引用对的别名状态;并针对程序编译阶段和运行过程中别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0031] 静态别名检测技术,是指在编译阶段进行静态的别名分析,该阶段仅能分析出确定的非别名引用。运行时动态别名检测技术,是指在程序运行时刻自动检测内存引用的别名情况。通过动静结合的别名分析和处理,实现向量化过程中对别名的有效预处理,通过静态别名检测及运行时别名动态检测,降低依赖分析的复杂度,为程序的向量并行化提供支撑。
[0032] 作为本发明实施例中的内存别名分析处理方法,进一步地,收集向量化过程中循环体内的所有内存引用,将其两两组合,得到待测内存引用对,其中,两两组合中,至少包含指针引用和内存写操作。
[0033] 作为本发明实施例中的内存别名分析处理方法,进一步地,收集循环体内的内存引用,该内存引用包含指针和内存写操作。
[0034] 循环体中收集所有的内存引用,包括数组和指针,将收集到的内存引用两两组合(至少包含一个指针引用,同时至少包含一个内存写操作),得到待测内存引用对。如代码示例1中的程序段,其待测内存引用对为{ptrA-ptrB,ptrA-C,ptrA-ptrC,ptrB-ptrC,ptrB-C,ptrC-C}
[0035]
[0036] 通过静态分析访存重叠情况,将待测内存引用对分为三种情况:别名、非别名、不确定。代码示例1中互为别名的内存引用对有:ptrC-C,非别名的内存引用对有:ptrA-C,ptrA-ptrC,ptrB-ptrC,ptrB-C,不确定的内存引用对有:ptrA-ptrB。对于确定为别名的情况,需要进一步分析别名指向的距离等信息,对于非别名的情况可直接判定该内存引用对不存在依赖。
[0037] 作为本发明实施例中的内存别名分析处理方法,进一步地,动态检测内存引用对的别名状态中,通过判定内存引用指针对应内存块是否重叠,以实现在程序运行过程中对待测内存引用对的别名状态检测。
[0038] 对于静态分析难以给出结果的内存引用对,生成运行时检测代码,即在运行时检测两个指针对应地内存块是否有重叠。如代码示例2,其中的A和B可能是别名,实际上只需要保证在循环的迭代空间内A和B无访存重叠即可保证它们不是别名。
[0039]
[0040] 作为本发明实施例中的内存别名分析处理方法,进一步地,动态检测中,针对别名状态和非别名状态生成对应的代码版本;针对别名版本和别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名版本和非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0041] 参见图3所示,针对动态别名检测结果,实施代码多版本,即针对别名或非别名的情况分别生成对应的代码版本。别名版本中的相应内存引用对存在依赖,需要进一步分析其依赖距离;非别名版本中的相应内存引用对不存在依赖,可简化依赖图,利于进一步向量化。
[0042] 作为本发明实施例中的内存别名分析处理方法,进一步地,向量化框架中,通过设定是否满足迭代空间访存的最大跨度的判定条件,以检测内存引用指针对应内存块是否重叠。
[0043] 如代码示例2,其中的A和B可能是别名,实际上只需要保证在循环的迭代空间内A和B无访存重叠即可保证它们不是别名。迭代空间内A和B访存的最大跨度为16*4,因此无访存重叠的条件,即运行时检测条件为(|A-B|>=16*4)。在实际程序中,可能存在大量的指针引用,每个指针对之间都可能存在别名,插入的运行时检测代码较多,可能会抵消掉向量化的性能提升。对于迭代次数小的循环,可不做处理。
[0044] 作为本发明实施例中的内存别名分析处理方法,进一步地,动态检测中若存在多个待测内存引用对时,则将每个待测内存引用对的判定条件通过逻辑与运算进行连接,以实现动态检测中多个待测内存引用对别名状态的判定。
[0045] 更进一步地,本发明实施例还提供一种程序向量化过程中动静结合的内存别名分析处理装置,参见图4所示,包含:数据收集模块101、静态分析模块102和动态分析模块103,其中,
[0046] 数据收集模块101,用于针对向量化过程中循环体内的所有内存引用,构建待测内存引用对集合;
[0047] 静态分析模块102,用于在程序编译阶段,通过静态分析确定待测内存引用对别名状态,该待测内存引用对别名状态分为别名状态、非别名状态和不确定状态;
[0048] 动态分析模块103,用于针对静态分析模块中的不确定状态,在程序运行过程中动态检测内存引用对的别名状态;并针对程序编译阶段和运行过程中别名状态的内存引用对,判定该内存引用对存在依赖关系,针对非别名状态的内存引用对,则判定该内存引用对无依赖关系。
[0049] 更进一步地,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的程序向量化过程中动静结合的内存别名分析处理的步骤。
[0050] 更进一步地,本发明还提供服务器,包含存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上述的程序向量化过程中动静结合的内存别名分析处理的步骤。
[0051] 除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
[0052] 本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
[0053] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0054] 在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
[0055] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0056] 附图中的流程图和
框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于
硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0057] 在本
申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信
接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0058] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0059] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0060] 所述功能如果以
软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对
现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动
硬盘、
只读存储器(ROM,Read-Only Memory)、
随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0061] 最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉
本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行
修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以
权利要求的保护范围为准。