在存在可能的存储器别名的情况下并行化循环的方法技术

技术编号:10445058 阅读:163 留言:0更新日期:2014-09-17 20:34
在一个特定实施例中,本公开提供一种用以在存在无法在编译时间解决的可能的存储器别名的情况下确定可能用于循环的并行化程度的有效机构。提供硬件指令,所述硬件指令在运行时间测试存储地址并且设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的SIMD(单指令多数据)通道以便并行地运行。列举了扩展这类指令的适用性或性能的其它硬件特征。

【技术实现步骤摘要】
相关申请的交叉引用本申请要求2013年3月15日提交的标题名称为“A METHOD TO PARALLELIZE LOOPS IN THE PRESENCE OF POSSIBLE MEMORY ALIASES”的美国申请61/788,471的优先权,所述美国申请在此以引用的方式整体并入本文中。
本公开一般来说涉及并行处理,并且更具体来说涉及并行化循环。
技术介绍
现代硬件技术通过使用多个处理元件(PE)来提供增加处理速度的能力,所述多个处理元件各自可以执行分开的并行操作;这样的处理有时被称为并行处理或并行化。为了在处理中利用来自并行化的潜在加速,编译器可确定是否可并行化源代码。例如,如果循环的每一迭代不依赖于循环的任何先前迭代,则编译器可并行化循环-被称为向量化。这样的依赖性通常是以存储器别名的形式-即,其中多个指针引用单个存储地址。编译器可在编译时间尝试证明这样的潜在存储器别名不存在,以使得编译器可产生并行代码。附图说明根据以下详细描述和附图最好地理解本公开。应强调的是,根据行业中的标准惯例,各种特征并没有按比例描绘并且仅用于图解说明目的。事实上,为了论述的清晰性,可任意增大或减小各种特征的尺寸。图1为根据本说明书的一个或多个实施方案的用于在存在可能的存储器别名的情况下并行化循环的例示性逻辑的流程图。图2为根据本说明书的一个或多个实施方案的包括含有启用的<br>通道的数目的寄存器的例示性硬件实行方案的框图。图3示出在具有两个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。图4示出在具有四个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。图5示出在具有八个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。具体实施方式概述根据本说明书的一个方面,公开一种用以在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的方法,所述方法包括:提供硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。根据本说明书的另一个方面,公开一种用以在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的设备,所述设备包括:用于执行硬件指令的至少一个处理元件,所述硬件指令在运行时间测试存储地址;以及模式或寄存器,所述模式或寄存器被设定来使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。根据本说明书的又一个方面,公开至少一种机器可读非暂时性存储介质,所述机器可读非暂时性存储介质上存储有指令以用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度,其中所述指令在由至少一个处理器执行时使所述至少一个处理器执行以下操作:执行硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。示例性实施方案的详细描述诸如C/C++等高级语言表达对标量类型进行操作的程序语义。例如,可如下实行用以将两个向量加在一起的函数:理论上,可以并行执行向量元素的单独相加。然而,为了这样做,编译器可确定在输入向量与输出向量之间不存在存储器别名,即,输入向量与输出向量的存储地址不彼此重叠。在以上情况下,例如,指针‘a’和‘b’可指向存储器的相关区域。例如,假如对以上函数的调用之一如下,则上述情况将会发生:add(&a[1],&a[0],&b[0]);在这种情况下,在加法循环中存在循环携带依赖性(即,循环的一个迭代依赖于在循环的先前迭代中计算的结果),并且可能无法并行地进行元素的求和。编译器可在编译时间尝试证明这样的潜在别名不存在,以使得可创建并行代码。然而,一些潜在别名可能在编译时间仍然无法解决。以下方法涉及解决阻止向量化的在编译时间无法解决的别名:1)编译器可用编译器备注或汇编注解的形式将无法解决的别名阻止向量化的信息提供给程序员。程序员然后可通过使用‘限制’限定词、编译指示或其它技术来改变其代码源,以帮助编译器解决别名。然而,在许多情况下程序员不知道代码如何工作(尤其是在维护第三方代码的情况下)。此外,这种方法可能并不适用于别名仅有时存在而并不总是出现的情况。2)编译器可发出别名的运行时间测试,并且发出循环的两个不同版本:向量化版本和标量版本。循环的适当版本依赖于别名是否存在而执行。对于这种方法的挑战是代码大小扩展和缺少向宽向量长度的可伸缩性(例如,具有不同向量化因数的许多不同循环对于宽向量机上的所有可能的别名距离创建有效代码)。3)在没有硬件支持的情况下(例如,在SHARC2116x上)有条件地打开SIMD模式可能具有以下挑战:(i)其可仅处理启用的一个向量通道(标量模式)或启用的两个向量通道(向量模式);(ii)其可能不提供特定指令来以有效方式检测别名;并且(iii)其可能不实行允许特定操作的特征,这依赖于启用的向量通道的数目。因此,这样的方法可能具有高的建立和拆除成本,并且可能无法向量化所有的潜在可向量化的循环。因此,存在编译器无法证明在输入阵列与输出阵列之间无别名存在的情况。因此,编译器可为保守的并且仅发出标量代码(例如,串行代码)。在一些情况下,别名存在,但是其可能并不是每次调用函数时都出现。因此,函数有时可以并行执行但是在其它调用期间必须串行执行。因此,一个挑战是找到一种方法来在可能的情况下从并行化获得加速,同时在别名确实存在的情况下也产生正确的代码。解决方案是将硬件支持增添到SIMD处理器(通过多个PE或寄存器内SIMD(SWAR)来支持单指令多数据指令的处理器)以允许单个循环以标量模式或使用启用的多个SIMD通道(或向量通道)来运行。启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。有利地,这使得单个循环能够正确地执行而不考虑输入阵列和输出阵列刚好在存储器中何处(例如,不考虑别名是否存在)。此外,服从遵守初始标量循环的循环携带依赖性,启用最大数目的向量通道以获得最大加速。根据本说明书的一个实本文档来自技高网...

【技术保护点】
一种用以在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的方法,所述方法包括:提供硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。

【技术特征摘要】
2013.03.15 US 61/788,471;2014.03.07 US 14/200,7881.一种用以在存在可能的存储器别名的情况下确定可能用于循
环的并行化程度的方法,所述方法包括:
提供硬件指令,所述硬件指令在运行时间测试存储地址;以及
设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运
行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道
以便并行地运行。
2.如权利要求1所述的方法,其中启用的并行化的量是由用于
指针别名使用的运行时间测试来确定的。
3.如权利要求1所述的方法,其中服从遵守所述初始标量循环
的循环携带依赖性,启用最大数目的向量通道以获得最大加速。
4.如权利要求1所述的方法,其中处理器被配置来确定可启用
仅一个向量通道以再生所述标量循环的所述语义。
5.如权利要求1所述的方法,其中硬件具有用以规定启用多少
向量通道的机构,并且其中所述硬件包括模式寄存器,所述模式寄存
器含有启用的通道的数目,或所述硬件包括屏蔽寄存器,所述屏蔽寄
存器控制启用哪些通道。
6.如权利要求5所述的方法,其中所述硬件具有用以依赖于在
运行时间的存储地址的测试来设定所述模式寄存器以启用所述最大
数目的向量通道的机构。
7.如权利要求5所述的方法,其中所述硬件具有依赖于所述启
用的通道的数目来更改所述循环的迭代的数目的机构。
8.如权利要求1所述的方法,其中SIMD分级循环允许所述循
环在并非向量化因数的倍数的向量长度上运行。
9.如权利要求1所述的方法,其中归纳变量的增量是通过在所
述循环中启用的向量通道的数目来按比例缩放的。
10.如权利要求1所述的方法,其中所述方法包括跨越当前根据
模式寄存器启用的向量通道来执行约简,所述约简进一步包括求和、
逐位运算、最小值或最大值。
11.如权利要求1所述的方法,其中所述方法包括将值从在循环
的最后迭代中使用的最后向量通道复制到存储器或复制到已知的寄
存器位置。
12.一种用于在存...

【专利技术属性】
技术研发人员:M·G·佩尔金斯J·L·瑞德福特K·桑海
申请(专利权)人:亚德诺半导体技术公司
类型:发明
国别省市:百慕大群岛;BM

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

1