用于从代码语句生成SIMD代码的方法和系统技术方案

技术编号:11650765 阅读:105 留言:0更新日期:2015-06-25 23:00
本发明专利技术涉及一种用于从代码语句生成SIMD代码的方法和系统。从包括非同构代码语句的代码语句生成SIMD代码。接收代码语句,每个代码语句具有采用相应操作符顺序的一个或多个操作符,并且每个操作符具有类型和关联的操作数。所接收的代码语句中的至少两个代码语句在不同操作符顺序位置中具有相同类型的操作符。在每个所述代码语句中,针对相同类型的操作符标识第一操作符顺序位置。对于每个所述代码语句,针对操作符顺序位置在所述第一操作符顺序位置之前的操作符及其关联的操作数生成代码。至少基于所标识的第一操作符顺序位置、对应的操作符类型以及与所标识的操作符顺序位置处的操作符类型关联的操作数,生成SIMD代码。

【技术实现步骤摘要】
用于从代码语句生成SIMD代码的方法和系统
本公开一般地涉及用于代码生成的软件开发工具,更具体地说,涉及编译代码以便在针对单指令多数据(SIMD)执行配置的机器上执行。
技术介绍
SIMD配置的计算机包括多个处理元件,它们同时针对多个数据点执行相同的操作。SIMD处理元件通常用于同时对多组数值进行相加或相乘,以便实现多媒体编码和呈现以及科学应用。在没有编译器支持的情况下使用SIMD指令实现算法可能需要用户知道有关数据对齐、体系架构特定指令集和SIMD寄存器大小的限制。编译器可以允许用户通过从用户的标量代码生成支持SIMD的代码,利用SIMD处理元件的速度。
技术实现思路
本公开的各实施例公开一种用于从包括非同构代码语句的代码语句生成SIMD代码的方法、计算机程序产品和系统。一个或多个处理器接收多个代码语句,每个代码语句具有采用相应操作符顺序的一个或多个操作符。每个操作符具有类型和关联的操作数。所述多个代码语句中的至少两个代码语句在不同操作符顺序位置中具有相同类型的操作符。所述一个或多个处理器在所述至少两个代码语句的每一个中,针对所述相同类型的操作符标识第一操作符顺序位置。对于所述至少两个代码语句的每一个,所述一个或多个处理器针对操作符顺序位置在所述第一操作符顺序位置之前的操作符及其关联的操作数生成代码。所述一个或多个处理器至少基于所标识的第一操作符顺序位置、对应的操作符类型,以及与所标识的操作符顺序位置处的操作符类型关联的操作数,生成SIMD代码。附图说明从以下将结合附图阅读的对本专利技术的示例性实施例的详细说明,本专利技术的特性和优点将变得显而易见。附图的各种特性不按比例,因为各图是为了清晰起见,促进所属
的技术人员结合详细说明理解本专利技术。在附图中:图1示出显示根据本公开的一个实施例的标量代码语句的数据并行表示和标量代码语句的数据并行机会的示例性包;图2示出根据本公开的一个实施例的SIMD优化编译器环境的功能框图;图3是示出根据本公开的一个实施例的有序选择准备例程的操作的流程图;图4是根据本公开的一个实施例的示例性包的示意图;图5a和5b是示出根据本公开的一个实施例的选择例程的操作的流程图;图6-14示出根据本公开的一个实施例的用于从数据并行机会中选择操作符匹配以便优化的包的示例性处理;图15示出根据本公开的一个实施例的SIMD优化编译器环境的计算设备的组件的框图。具体实施方式在计算中,代码的基本块是程序中具有仅一个入口点和仅一个出口点的代码部分。编译器通常将程序分解为其基本块,作为生成编译代码的第一步。生成支持SIMD的代码的典型编译器从标量代码的基本块中的“同构”代码模式生成支持SIMD的代码。当代码的基本块中的多个代码语句或同构代码语句全部按照相同顺序在多个代码语句中包含相同操作符(例如乘法),并且将操作符应用于存储器相邻操作数时,存在同构代码模式。某些编译器可以通过剥离和展开循环,将循环中的代码主体分解为基本块,作为一种用于在展开的循环主体中标识同构代码语句的方式。这些同构代码语句可以表示数据并行机会,以便编译器使用SIMD指令进行优化。本公开的各实施例可以允许编译器扩展数据并行机会以便进行SIMD优化。各种实施例可以有利地优化来自非同构代码语句以及同构代码语句的代码,以便生成SIMD指令。本公开的各实施例可以使用标量代码的数据并行表示(以下称为“包(pack)”),以便生成支持SIMD的代码。不同于仅打包来自同构标量代码的代码语句的典型编译器,本公开的某些实施例可以打包同构和非同构语句两者的数据并行表示。图1示出显示根据本公开的一个实施例的同构和非同构标量代码语句110的数据并行表示以及标量代码语句110的数据并行机会190的示例性包180。如下面详细描述的那样,包创建器210从标量代码语句110创建包180和数据并行机会190。在一个实施例中,每个标量代码语句110a-110d可以在包180中表示为语句阵列,例如行A-行D。语句阵列中的操作符可以具有操作符在阵列中的位置顺序。在一个实施例中,每个语句阵列可以是语句树的后序表示,其中语句阵列的较低指数在左侧,并且较高指数的右侧。每个语句阵列可以由包180中的行(例如行A到行D)表示,并且是有序的以便维护标量代码语句在基本块中的原始顺序。例如,行A表示标量代码语句110a,行B表示标量代码语句110b等。如图所示,包180是标量代码语句110a-110d的语句树的示例性后序表示。在此示例性实施例中,所有操作数位于其对应的操作符的左边。其它实施例可以将操作数定位在其操作符左边之外的位置,甚至定位在包180外部的位置,只要可以针对包180中的每个操作符确定操作数位置即可。某些实施例可以在包180中包括信息,该信息指示操作数数据类型、操作数位置,以及每个语句阵列和每个语句阵列中的每个操作符的已处理指示符。在针对语句阵列和操作符生成编译代码之后,这些语句阵列和操作符被视为已处理。在一个实施例中,包180可以包括非线性化地址表达式以及线性化地址表达式作为操作数。例如,位于包180中的(行A,列1)处的操作数“R[1]”(例如表示阵列中的地址)是示例性非线性化地址表达式。可以在代码生成期间对非线性化地址表达式进行解析。各种实施例可以创建包,以便包中的每个语句阵列与其相邻语句阵列具有数据并行机会。某些实施例可以将包的大小限制为仅包括足够的语句阵列,以便使用每个语句阵列中的一个操作数填充SIMD寄存器。数据并行机会190表示包180中进行SIMD优化的机会,并且可以将这些机会表示为包180中的操作符位置,以下称为“操作符匹配”。数据并行机会190中的每组操作符匹配190a-190e表示来自包180中的一个或多个语句阵列的相同操作符的位置。每组操作符匹配190a-190e可以包括来自包180中的每个语句阵列的最多一个操作符匹配。数据并行机会190中的一组示例性操作符匹配190a将包180位置(行A,列3)的乘法操作符与包180位置(行B,列3)、(行C,列3)和(行D,列3)的乘法操作符相匹配,作为可以优化为一个SIMD指令的一组潜在标量指令操作符。某些实施例可以在包180中嵌入数据并行机会。各种编译器实施例可以将数据并行机会190中的匹配操作符190a-190e的全部或子集优化为SIMD指令,或者不优化任何匹配操作符。有关从数据并行机会190中选择哪些匹配操作符以便优化为SIMD指令的考虑可以包括但不限于操作数数据类型、架构SIMD寄存器大小、原始标量代码的顺序保留,以及收集和分散SIMD寄存器的操作符的操作数的成本。各种编译器实施例可以生成代码,该代码将数据并行机会190优化为单个SIMD指令、多个SIMD指令、SIMD和标量指令的组合,或者标量指令序列。图2示出根据本公开的一个实施例的SIMD优化编译器环境299的功能框图。SIMD优化编译器环境299包括计算设备222。计算设备222表示计算设备、系统或环境,其包括编译器200以及标量代码语句110、包180、数据并行机会190、窗口290和生成的SIMD代码指令295的存储,它们全部例如可以存储在有形存储设备上,该有形存储设备例如包括有形存储设备(多个)1530(图15)或可移动有形存储设备(本文档来自技高网
...
用于从代码语句生成SIMD代码的方法和系统

【技术保护点】
一种用于从包括非同构代码语句的代码语句生成SIMD代码的方法,所述方法包括:一个或多个处理器接收多个代码语句,每个代码语句具有采用相应操作符顺序的一个或多个操作符,每个操作符具有类型和关联的操作数,所述多个代码语句中的至少两个代码语句在不同操作符顺序位置中具有相同类型的操作符;所述一个或多个处理器在所述至少两个代码语句的每一个中,针对所述相同类型的操作符标识第一操作符顺序位置;对于所述至少两个代码语句的每一个,所述一个或多个处理器针对操作符顺序位置在所述第一操作符顺序位置之前的操作符及其关联的操作数生成代码;以及所述一个或多个处理器至少基于所标识的第一操作符顺序位置、对应的操作符类型以及与所标识的操作符顺序位置处的操作符类型关联的操作数,生成SIMD代码。

【技术特征摘要】
2013.12.23 US 14/1384241.一种用于从包括非同构代码语句的代码语句生成单指令多数据SIMD代码的方法,所述方法包括:一个或多个处理器接收多个代码语句,每个代码语句具有采用相应操作符顺序的一个或多个操作符,每个操作符具有类型和关联的操作数,其中操作数包括:线性化地址表达式、非线性化地址表达式、存储器相邻操作数,以及非存储器相邻操作数,所述多个代码语句中的至少两个代码语句在不同操作符顺序位置中具有相同类型的操作符;所述一个或多个处理器在所述至少两个代码语句的每一个中,针对所述相同类型的操作符标识第一操作符顺序位置;对于所述至少两个代码语句的每一个,所述一个或多个处理器针对操作符顺序位置在所述第一操作符顺序位置之前的操作符及其关联的操作数生成代码;以及所述一个或多个处理器至少基于所标识的第一操作符顺序位置、对应的操作符类型以及与所标识的操作符顺序位置处的操作符类型关联的操作数,生成SIMD代码。2.根据权利要求1的方法,其中针对操作符及其关联的操作数生成代码包括:标识在所述第一操作符顺序位置之前的第二操作符顺序位置;在所述至少两个代码语句的每一个中,针对具有与所述第二操作符顺序位置对应的操作符类型的操作符标识第三操作符顺序位置;对于所述至少两个代码语句的每一个,针对操作符顺序位置在所述第三操作符顺序位置之前的操作符及其关联的操作数生成代码;以及至少基于所标识的第二和第三操作符顺序位置、对应的操作符类型以及与所标识的操作符顺序位置处的所述操作符类型关联的操作数,生成SIMD代码。3.根据权利要求1的方法,其中针对操作符及其关联的操作数生成代码进一步包括生成SIMD代码。4.根据权利要求2的方法,其中针对操作符及其关联的操作数生成代码进一步包括生成SIMD代码。5.根据权利要求1的方法,其中操作符顺序包括以下之一:操作符优先顺序,以及操作符在语句中的位置顺序。6.根据权利要求1的方法,其中操作符包括:加法和减法操作符、乘法和除法操作符、存储操作符、转换操作符。7.一种计算机可读存储介质,其上存储有用于从包括非同构代码语句的代码语句生成单指令多数据SIMD代码的计算机程序,所述计算机程序包括用于执行以下操作的程序指令:一个或多个处理器接收多个代码语句,每个代码语句具有采用相应操作符顺序的一个或多个操作符,每个操作符具有类型和关联的操作数,其中操作数包括:线性化地址表达式、非线性化地址表达式、存储器相邻操作数,以及非存储器相邻操作数,所述多个代码语句中的至少两个代码语句在不同操作符顺序位置中具有相同类型的操作符;所述一个或多个处理器在所述至少两个代码语句的每一个中,针对所述相同类型的操作符标识第一操作符顺序位置;对于所述至少两个代码语句的每一个,所述一个或多个处理器针对操作符顺序位置在所述第一操作符顺序位置之前的操作符及其关联的操作数生成代码;以及所述一个或多个处理器至少基于所标识的第一操作符顺序位置、对应的操作符类型以及与所标识的操作符顺序位置处的操作符类型关联的操作数,生成SIMD代码。8.根据权利要求7的计算机可读存储介质,其中针对操作符及其关联的操作数生成代码包括:标识在所述第一操作...

【专利技术属性】
技术研发人员:E·阿米里C·M·巴顿D·M·帕梅洛R·希尔韦拉
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1