在存在可能的存储器别名的情况下并行化循环.pdf

上传人:a1 文档编号:177201 上传时间:2018-01-31 格式:PDF 页数:21 大小:3.36MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410095115.3

申请日:

2014.03.14

公开号:

CN104050025A

公开日:

2014.09.17

当前法律状态:

实审

有效性:

审中

法律详情:

专利申请权的转移IPC(主分类):G06F 9/46变更事项:申请人变更前权利人:亚德诺半导体技术公司变更后权利人:亚德诺半导体集团变更事项:地址变更前权利人:百慕大群岛(英)哈密尔顿变更后权利人:百慕大群岛(英)哈密尔顿登记生效日:20150106|||实质审查的生效IPC(主分类):G06F 9/46申请日:20140314|||公开

IPC分类号:

G06F9/46; G06F9/45

主分类号:

G06F9/46

申请人:

亚德诺半导体技术公司

发明人:

M·G·佩尔金斯; J·L·瑞德福特; K·桑海

地址:

百慕大群岛(英)哈密尔顿

优先权:

2013.03.15 US 61/788,471; 2014.03.07 US 14/200,788

专利代理机构:

中国国际贸易促进委员会专利商标事务所 11038

代理人:

金晓

PDF下载: PDF下载
内容摘要

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

权利要求书

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

2.
  如权利要求1所述的方法,其中启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。

3.
  如权利要求1所述的方法,其中服从遵守所述初始标量循环的循环携带依赖性,启用最大数目的向量通道以获得最大加速。

4.
  如权利要求1所述的方法,其中处理器被配置来确定可启用仅一个向量通道以再生所述标量循环的所述语义。

5.
  如权利要求1所述的方法,其中硬件具有用以规定启用多少向量通道的机构,并且其中所述硬件包括模式寄存器,所述模式寄存器含有启用的通道的数目,或所述硬件包括屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。

6.
  如权利要求5所述的方法,其中所述硬件具有用以依赖于在运行时间的存储地址的测试来设定所述模式寄存器以启用所述最大数目的向量通道的机构。

7.
  如权利要求5所述的方法,其中所述硬件具有依赖于所述启用的通道的数目来更改所述循环的迭代的数目的机构。

8.
  如权利要求1所述的方法,其中SIMD分级循环允许所述循环在并非向量化因数的倍数的向量长度上运行。

9.
  如权利要求1所述的方法,其中归纳变量的增量是通过在所述循环中启用的向量通道的数目来按比例缩放的。

10.
  如权利要求1所述的方法,其中所述方法包括跨越当前根据模式寄存器启用的向量通道来执行约简,所述约简进一步包括求和、逐位运算、最小值或最大值。

11.
  如权利要求1所述的方法,其中所述方法包括将值从在循环的最后迭代中使用的最后向量通道复制到存储器或复制到已知的寄存器位置。

12.
  一种用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的设备,所述设备包括:
用于执行硬件指令的至少一个处理元件,所述硬件指令在运行时间测试存储地址;以及
模式或寄存器,所述模式或寄存器被设定来使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。

13.
  如权利要求12所述的设备,其中启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。

14.
  如权利要求12所述的设备,其中所述模式或寄存器规定启用多少向量通道,并且其中所述模式或寄存器包括模式寄存器,所述模式寄存器含有启用的通道的数目,或所述模式或寄存器包括屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。

15.
  如权利要求14所述的设备,其中所述至少一个处理元件具 有用以依赖于在运行时间的存储地址的测试来设定所述模式或寄存器以启用所述最大数目的向量通道的机构。

16.
  如权利要求14所述的设备,其中所述至少一个处理元件具有依赖于所述启用的通道的数目来更改所述循环的迭代的数目的机构。

17.
  如权利要求12所述的设备,其中所述至少一个处理元件跨越当前根据模式寄存器启用的向量通道来执行约简,所述约简进一步包括求和、逐位运算、最小值或最大值。

18.
  如权利要求12所述的设备,其中所述至少一个处理元件将值从在循环的最后迭代中使用的最后向量通道复制到存储器或复制到已知的寄存器位置。

19.
  至少一种机器可读非暂时性存储介质,其上存储有指令以用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度,其中所述指令在由至少一个处理器执行时使所述至少一个处理器执行以下操作:
执行硬件指令,所述硬件指令在运行时间测试存储地址;以及
设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据(SIMD)通道以便并行地运行。

20.
  如权利要求19所述的机器可读非暂时性存储介质,其中启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。

说明书

在存在可能的存储器别名的情况下并行化循环
相关申请的交叉引用
本申请要求2013年3月15日提交的标题名称为“A METHOD TO PARALLELIZE LOOPS IN THE PRESENCE OF POSSIBLE MEMORY ALIASES”的美国申请61/788,471的优先权,所述美国申请在此以引用的方式整体并入本文中。
技术领域
本公开一般来说涉及并行处理,并且更具体来说涉及并行化循环。
背景技术
现代硬件技术通过使用多个处理元件(PE)来提供增加处理速度的能力,所述多个处理元件各自可以执行分开的并行操作;这样的处理有时被称为并行处理或并行化。为了在处理中利用来自并行化的潜在加速,编译器可确定是否可并行化源代码。例如,如果循环的每一迭代不依赖于循环的任何先前迭代,则编译器可并行化循环-被称为向量化。这样的依赖性通常是以存储器别名的形式-即,其中多个指针引用单个存储地址。编译器可在编译时间尝试证明这样的潜在存储器别名不存在,以使得编译器可产生并行代码。
附图说明
根据以下详细描述和附图最好地理解本公开。应强调的是,根据行业中的标准惯例,各种特征并没有按比例描绘并且仅用于图解说明目的。事实上,为了论述的清晰性,可任意增大或减小各种特征的尺 寸。
图1为根据本说明书的一个或多个实施方案的用于在存在可能的存储器别名的情况下并行化循环的例示性逻辑的流程图。
图2为根据本说明书的一个或多个实施方案的包括含有启用的通道的数目的寄存器的例示性硬件实行方案的框图。
图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通道(或向量通道)来运行。启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。有利地,这使得单个循环能够正确地执行而不考虑输入阵列和输出阵列刚好在存储器中何处(例如,不考虑别名是否存在)。此外,服从遵守初始标量循环的循环携带依赖性,启用最大数目的向量通道以获得最大加速。
根据本说明书的一个实行方案在芯片的指令集架构(ISA)及其可见寄存器组中可为明显的。指令的细节可用许多方式来实行(例如,将别名测试分解为多个指令、组合多个别名测试或使用局限于2的幂的VECLEN)。如本说明书中通篇所论述,指令可被利用来测试别名并且因此确定向量长度寄存器或PE屏蔽寄存器。此外,根据本说明书实行的指令可容许循环中的可变向量长度。
在一个实行方案中,硬件可允许循环以标量模式或使用多个SIMD通道来运行。例如,考虑以上定义的函数add()。如果存在以下两个调用点:
add(&a[1],&a[0],&b[0]);
以及
add(&a[4],&a[0],&b[0]);
则当执行第一调用(即,add(&a[1],&a[0],&b[0]))时,处理器可确定&a[1]和&a[0]仅为存储器中分开(例如,基于阵列中的对象或基元的大小)的一个迭代,并且因此可启用仅一个向量通道来再生循环的初始标量语义。因此,循环可用标量模式执行。然而,在第二调用(即,add(&a[4],&a[0],&b[0]))期间,处理器可确定可使用与标量循环相同的语义并行地执行循环的四个迭代。因此,可启用四个向量通道,并 且循环从而可提供4倍的速度增加。因此,硬件启用在运行时间的存储地址的测试,并且使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的SIMD通道以便并行地运行。
如以下进一步描述,本公开提供示例性实施方案,所述示例性实施方案以非限制性实施例的方式包括以下特征中的一个或多个:
特征1:硬件具有用以规定启用多少个向量通道(VECLEN)的机构。例如,所述机构可为模式寄存器,所述模式寄存器含有启用的通道的数目,或所述机构可为屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。
特征2:硬件具有用以基于在运行时间的存储地址的测试来设定模式寄存器以启用最大数目的向量通道的装置。
另外,以下特征中的一个或多个可改善标量/向量循环的效率或适用性:
特征3:硬件具有取决于启用的通道的数目(例如,基于特征2启用的通道的数目)来更改循环的迭代的数目的装置。例如,如果处理器具有使用专用循环计数寄存器的用于计数的循环的硬件支持,则这个循环计数寄存器可通过将标量迭代的数目除以并行启用的向量通道的数目来初始化。
特征4:SIMD分级循环允许容许循环在并非向量化因数(例如,在运行时间启用的向量通道的数目)的倍数的向量长度上运行的能力。
特征5:归纳变量尤其是表示在循环中使用的存储地址的那些归纳变量的增量是通过在循环中启用的向量通道的数目来按比例缩放的。
特征6:用以跨越当前根据模式寄存器启用的向量通道来执行约 简(求和、逐位运算、最小值或最大值)的装置。
特征7:用以将值从循环的最后迭代中使用的最后向量通道复制到存储器或复制到已知寄存器位置的装置。
现转向附图,图1为根据本说明书的一个或多个实施方案的用于在存在可能的存储器别名的情况下并行化循环的例示性逻辑的流程图。在这个实施例中,逻辑100包括:开始点102;确定任何潜在可并行化的循环是否剩余在函数中104;发出循环的并行版本以并行执行VECLEN个迭代108;确定所有潜在的别名是否在编译时间为可解决的110;在硬件中将VECLEN寄存器设定为等于与硬件兼容的最大值112;在硬件中将VECLEN寄存器设定为等于指针之间的最小别名距离114;以及结束点106。可在编译器、运行时间引擎、运行时间环境、处理器中的任何一个中完全地或部分地实行逻辑100。此外,程序102至114或其部分可分布在一个或多个部件当中。
逻辑100从开始点102开始。开始点102可与其它逻辑、例程、应用程序或线程的开始点/结束点一致。另外,在开始点102处,可初始化、检索或存取数据(例如,对象、值、变量等)以用于在逻辑100中使用。
接下来,在程序104处,确定任何潜在可并行化的循环是否剩余在函数中104。潜在可并行化的循环为(例如)在无别名存在于输入到循环的指针之间的情况下可并行化的循环。基于所述确定,逻辑可发出用于并行化循环的代码。然而,如果没有这样的潜在可并行化的循环剩余在函数中,则逻辑100前进到结束点106。
如果确定潜在可并行化的循环剩余在函数中,则根据程序108,逻辑100发出循环的并行版本以执行VECLEN个迭代。如以上相对于特征1所描述,硬件可使用模式寄存器(例如,VECLEN寄存器)规定启用的向量通道的数目。在程序108处发出的代码可利用VECLEN寄存器的值来确定循环的迭代的数目以便在运行时间并行 化。有利地,逻辑100可发出代码的单个版本,所述单个版本允许基于硬件寄存器来在运行时间确定循环的并行迭代的数目。代码的这单个版本允许基于在运行时间的两个或两个以上地址的测试来串行(例如,VECLEN=1)或并行(例如,VECLEN>1)执行代码的灵活性。
根据程序110,在编译时间,确定是否所有潜在的别名为可解决的。如以上所述,可能不存在充分的信息来证明别名在编译时间是否存在。然而,如果逻辑100可在编译时间证明无别名存在,则逻辑可发出代码来并行化所述代码(例如,在程序108处)。例如,如果循环仅存取在存储器中可证明为独立的两个全局阵列,则逻辑可确定在这样的循环中的所有潜在的别名在编译时间皆为可解决的。
如果确定所有潜在的别名皆为可解决的,则根据程序112,将VECLEN寄存器设定为等于与硬件兼容的最大值。例如,如果编译的代码将在具有各自含四个向量通道的四个处理元件的硬件上执行,则与这样的硬件兼容的VECLEN的最大值为4×4(即,4个PE各自具有4个向量通道)或16。在这种情况下,逻辑可将VECLEN寄存器设定为16以用于并行化循环,并且因此并行地执行循环的16个迭代。VECLEN寄存器可为模式寄存器,所述模式寄存器含有启用的通道的数目,或VECLEN寄存器可为屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。
如果确定所有潜在的别名皆为不可解决的,则根据程序114,将VECLEN寄存器设定为等于指针之间的最小别名距离。可将指针的值与在循环内存取的其它指针进行比较。例如,可在每一指针与所有其它指针之间依次进行成对比较,以确定VECLEN的一组潜在值。在程序114处设定的VECLEN寄存器为根据特征1的硬件机构的一个实行方案。根据特征2,可基于在运行时间的存储地址的测试来设定VECLEN寄存器的值以规定启用的向量通道的数目。
在程序112或程序114中的任一个处设定VECLEN寄存器之后, 逻辑100返回到程序104以确定任何潜在可并行化的循环是否剩余在函数中。如果否,则逻辑100可在结束点106处结束。结束点106可充当用于其它逻辑、例程、应用程序或线程的开始点/结束点。例如,结束点106可引导处理器在接收到后续查询时执行从开始点102开始的逻辑。
现转向本说明书的其它实行方案,可使用向量加法的上述实施例(即,以上add()函数)来说明特征1、2、3、4和5。以下伪码对应于针对这样的函数产生的标准标量循环代码:
Loop N;//开始N个迭代的循环
r0=[i0+=4];//加载b[i],并且使地址寄存器递增至阵列中的下一个元素
r1=[i1+=4];//加载c[i],并且使地址寄存器递增至阵列中的下一个元素
r0=r0+r1;//将向量元素相加
[i2+=4]=r0;//存储a[i],并且使地址寄存器递增至阵列中的下一个元素
endloop
注意,r0和r1中的每一个对应于数据寄存器,并且i0、i1和i2中的每一个对应于寻址寄存器,所述寻址寄存器含有存储地址。
在一个实行方案中,例如,根据特征1,使用模式寄存器(例如,VECLEN寄存器)来扩充硬件,所述模式寄存器含有启用的向量通道的数目。作为一个实例,模式寄存器可为在逻辑100中(例如,在程序108、112和114处)提及的VECLEN寄存器。对于标量代码,将模式寄存器设定为1-启用单个向量通道。在到达循环之前模式寄存 器处于这个状态中。为简单起见,可以假定用于硬件的架构包括多个相同的PE,以使得对于每一PE复制寄存器文件。因此,寄存器'r2'例如可被视为一组寄存器,每一PE上一个寄存器,在每一PE的寄存器文件中的相同地方。
例如,图2为根据本说明书的一个或多个实施方案的包括含有启用的通道的数目的模式寄存器的例示性硬件实行方案的框图。在这个实施例中,硬件200包括VECLEN寄存器202、具有对应的SWAR通道206的处理元件零(PE0)204、具有对应的SWAR通道210的处理元件一(PE1)208、具有对应的SWAR通道214的处理元件二(PE2)212和具有对应的SWAR通道218的处理元件n-1(PEn-1)216。硬件200中的每一处理元件皆具有4个SWAR通道。因此,系统200中的SWAR通道的总数等于n的4倍。VECLEN寄存器202控制处理元件(例如,204、208、212和216)和SWAR通道(例如,206、210、214和218)的启用。在这个实施例中,VECLEN寄存器202设定为8;因此,启用来自总共4×n个SWAR通道中的仅8个SWAR通道。因此,启用SWAR通道206a、206b、206c、206d、210a、210b、210c和210d中的每一个,同时停用SWAR通道214a、214b、214c、214d、218a、218b、218c和218d。可基于在运行时间的存储地址的测试来设定存储在VECLEN寄存器202中的值,以启用遵守初始标量循环的语义的最大数目的SIMD通道(和/或向量通道)。
在图4中,VECLEN寄存器202展示为处于其设定为等于8的状态中。然而,VECLEN寄存器202可被更新来规定不同的数目(例如,基于在运行时间的指针的测试)。VECLEN寄存器202可设定为任何值,其中0<VECLEN≤(n*每一PE中的向量通道的数目);在这个实施例中,VECLEN可为使得0<VECLEN≤(n*4)的值。在一个实行方案中,VECLEN的值可限于为2的幂的值(即,1、2、4、8等)。
硬件200可支持标量模式(例如,串行模式;非并行模式;单指令单数据(SISD)模式等)或并行模式(例如,多向量通道模式、SIMD 模式等),因此VECLEN寄存器202可包括模式的指示符。模式可在运行时间被设定(且/或更新),并且因此可支持基于在运行时间的存储地址的测试来有条件地进入标量模式或并行模式。
硬件200可使用数据对齐信息来确定是否存在任何循环携带依赖性或别名。对于全局阵列,编译器可例如基于阵列的存储器位置来了解别名是否存在。另外,对于函数参数,编译器可执行程序间分析(IPA)以尝试证明指针指向相异的对象(例如,证明别名不存在)。如果参数为例如指向单个对象阵列中的不同对象的指针,则系统可确定参数之间的差异(例如,指针的存储地址的差异)的量。在一些情况下,已知的数据对齐信息可足以确定循环携带依赖性是否存在。例如,指向开始在双字边界上对齐的32位整数的两个指针不具有对先前迭代的循环携带相依性。在一个实行方案中,编译器可基于数据对齐信息来向量化循环。在这种情况下,编译器可使用IPA来传播关于部件之间(例如,从调用者到被调用者)的数据对齐的信息。
例如,根据特征2,例示性架构可包括用以测试用于别名的地址寄存器的装置。例如,alias()函数可基于地址寄存器中的存储地址的测试来设定VECLEN(例如,VECLEN寄存器202)的值。存在许多定义这样的指令的方式。可如下实行用于alias()的指令:

以上实行方案通过比较指针的值来确定第一指针ptr1是否大于第二指针ptr2,即,ptr1>ptr2。例如,在像C或C++的语言中,每一指针的值是存储地址;因此,比较指针的值实际上是比较存储地址。此外,实行方案确定以存取大小的倍数测量的地址之间的差是否小于启用的向量通道的数目,即,(ptr1-ptr2)/sizeOf<VECLEN。距离可例如以位、字节来表达或表达为数据类型的倍数。例如,如果指向整数(整数值)阵列的两个指针分开8个字节(ptr1-ptr2=8个字节),则系统将差除以存储器中的整数的大小,例如4个字节,来确定值8/4=2。 这个值可表示可以并行运行且同时遵守初始标量循环的语义的通道的数目。假如这个函数是在启用4个向量通道的硬件上运行(即,如果VECLEN=4),则结果小于启用的向量通道的数目(即,2<4为真)。如果第一地址ptr1大于第二地址ptr2,并且(即,&&)可并行运行的通道的数目小于启用的向量通道的数目,则将VECLEN设定为所确定的可并行运行的通道的数目;如果两者都不为真,则将VECLEN设定为VECLEN的当前值(例如,VECLEN的值保持不变)。因此,将VECLEN的值设定为可并行运行的通道的最大数目。因此,alias()的以上实行方案表明用以在运行时间测试存储地址并且设定模式或寄存器(例如,VECLEN寄存器202)以使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的SIMD通道以便并行地运行的例示性指令。同样地,测试可用来设定屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。
可如下实行用于别名的地址寄存器的测试:
VECLEN=_MAX_VECTOR_LANES_ON_PROCESSOR_;//例如,如果机器能够并行进行16向量通道处理,则这将VECLEN设定为16。
alias(i2,i0,4);//将VECLEN设定为(i2>i0&&(i2-i0)/4<VECLEN)?(i2-i0)/4:VECLEN。
alias(i1,i0,4);//将VECLEN设定为(i1>i0&&(i1-i0)/4<VECLEN)?(i1-i0)/4:VECLEN。
注意,在以上实例中,在i0=&a[0],i1=&b[0]并且i2=&a[1]的情况下,这个序列将VECLEN设定为1,而对于i0=&a[0],i1=&b[0]并且i2=&a[4]的情况,这个序列将VECLEN设定为4。
以上alias()函数基于存储地址的测试来设定VECLEN的值。存在许多定义这类指令的方式。本公开的一个方面涉及用以在运行时间测试两个存储地址的值以容许基于地址之间的差来设定向量通道启用模式寄存器的指令。或者,用以测试用于别名的存储地址寄存器的指令的实行方案可设定模式寄存器(例如,设定为SISD模式或SIMD 模式)。指令可确定两个或两个以上地址之间的差是否允许向量化。基于所述确定,指令可设定模式(例如,与设定向量通道的数目相反或除设定向量通道的数目之外)。例如,如果差仅容许每次处理单个循环,则指令可将模式设定为等于SISD模式。然而,如果差容许每次处理多于一个循环,则指令可将模式设定为等于SIMD模式。可在运行时间进行这样的确定,以在模式寄存器中设定适当模式。
在一个实行方案中,例如,根据特征3,可基于启用的通道的数目来更改循环的迭代的数目。例如,以下伪码对应于根据特征3设置的例示性循环:
vloop N;//开始N/VECLEN个迭代的循环
r0=[i0+=4];//加载b[i],并且使地址寄存器递增至阵列中的下一组元素
r1=[i1+=4];//加载c[i],并且使地址寄存器递增至阵列中的下一组元素
r0=r0+r1;//将元素成对相加
[i2+=4]=r0;//存储a[i],并且使地址寄存器递增至阵列中的下一组元素
endloop
在这种情况下,将跳脱计数N除以启用的向量通道的数目(VECLEN)来确定循环的迭代的数目。这可与SIMD分级循环组合(例如,根据特征4)来考虑并非为VECLEN的倍数的N值。这后一特征可在循环的最后迭代中关闭所述向量通道中的一些来处理最终的奇元素。
注意,循环中的使地址寄存器递增的指令不是递增4,而是递增 VECLEN*4(例如,根据特征5)。这意味着,一旦第一迭代已经计算加法的VECLEN个元素,地址寄存器即被更新为指向向量的下一组元素。地址递增值可由VECLEN的当前值自动按比例缩放以便启用这个功能性。
为了说明特征6和特征7,使用另一个实施例。以下伪码对应于标量乘积计算,所述标量乘积计算已被增添至向量加法循环:

根据本说明书的一个实行方案,以下伪码对应于用于向量化以上add_and_dp()函数的代码:

r0=[i0+=4];//加载b[i],并且使地址寄存器递增至阵列中的下一组元素
r1=[i1+=4];//加载c[i],并且使地址寄存器递增至阵列中的下一组元素
r2+=r0*r1;//将元素成对相乘并且相加至运行的向量和
r0=r0+r1;//将元素成对相加
[i2+=4]=r0;//存储a[i],并且使地址寄存器递增至阵列中的下一组元素
endloop
r0=side_sum(r2);
以上代码表明例示性side_sum()函数的使用,所述例示性side_sum()函数能够执行标量代码(即,VECLEN=1)和并行代码(即,VECLEN>1)中的横向约简。例如根据特征6实行的side_sum指令将在r2中运行求和的VECLEN个向量元素相加,并且在PE0的r0中给出结果。
尽管可基于跨越所有可能的向量通道的所有PE的r2寄存器和后续side_sum的特定初始化来避免这个指令,但是单独指令的优点是依赖于VECLEN的运行时间值来最优化指令延时的可能性。为了表明这后一点,r0=side_sum(r2)在VECLEN=1时为简单的复制,但是在VECLEN=16时为16个值的相加;后者可能比前者花费更久的时间。
可使用以下伪码表明特征7,所述伪码可使用处理任意向量长度的循环机构(例如,根据特征4实行的循环机构):

注意,由函数返回的值为在循环期间计算的tmp的最后值。计算这个结果所在的向量通道依赖于如何设定VECLEN和N的值。因此,在编译时间不知道这个向量通道。存在至少两种方式来处理这种情形。第一,存储到存储器或复制到已知寄存器的新指令被定义成仅出现在最高编号的启用向量通道上。例如:
[i5]=last r0;//例如,如果启用PE0、PE1和PE2,并且停用PE3、PE4、PE5、PE6和PE7,则这将PE2的r0存储到i5中的存储器位置。
r3=last r0;//例如,如果启用PE0、PE1和PE2,并且停用PE3、PE4、PE5、PE6和PE7,则这将PE2的r0存储到PE0的r3。
或者,指令诸如:
r3=last r0,N;
使用初始跳脱计数N和VECLEN来确定最后值存在于哪个向量通道中,并且将其复制到PE0的r3。例如:
r3=last r0,13;
其中VECLEN=8,会将PE4的r0复制到PE0的r3。
根据本说明书实行的编译器可发出代码来并行化函数,其中并行化程度是基于硬件寄存器来在运行时间确定的。例如,可如下实行用以将一个向量中的值复制到另一个向量的函数:

编译器可编译并且发出(例如,在逻辑100的程序108处)代码的以下版本:

//Pn为地址寄存器,并且Rn为数据寄存器。
编译的代码将VECLEN的值初始化为8。然而,VECLEN的值在运行时间基于alias()函数的输出来更新(例如,根据特征1和特征2)。可根据在本说明书中提供的例示性指令中的任何一个来实行用于alias()的指令,如在编译的代码中引用的。在VECLEN个处理元件上并行执行循环(例如,LOOP),并且使循环重复8/VECLEN次。因为VECLEN的值是在运行时间设定的,所以循环的迭代的数目也是在运行时间确定的(例如,根据特征3)。因此,编译的代码可基于在运行时间确定的VECLEN的值并行地执行循环的多个迭代。
图3示出在具有两个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。具体来说,图3示出使用输入指针P0=0x1008和P1=0x1000并且在具有可并行执行的八个处理元件(例如,向量通道的最大数目为8)的硬件上运行以上代码编译代码(亦即,_cpy)的例示性结果。所述图展示出周期数和在周期上执行的指令的对应列(即,INSTRUCTION)、地址寄存器P0和P1的值、VECLEN的值、循环计数器(即,LC)的值和数据寄存器R0的值。在周期0至2上,初始化地址寄存器和VECLEN。在这个实施例中,将VECLEN初始化为等于8;然而,在周期3上,基于比较P0和P1的存储地址与硬件上可利用的处理元件的最大数目而将VECLEN从 8更新为2。循环的第一迭代在周期5和6上加载来自‘in’阵列的前两个值,并且将其存储到‘out’阵列上的对应位置。类似地,循环总共被重复四次,因为8/VECLEN=8/2=4。剩余的三个循环分别在周期7至8、9至10和11至12中完成。最后,函数在周期13上返回。在每一循环之后,归纳变量递增由在循环中启用的处理元件(或向量通道)的数目按比例缩放的值(例如,根据特征5)。例如,在周期5与周期7之间,基于2个处理元件被启用而使P0和P1中的值递增存取大小的两倍(以使得例如在循环的第一迭代中,P1含有数据元素in[0]的地址,而在第二迭代中,其含有数据元素in[2]的地址)。
图4示出运行根据本说明书的一个实行方案编译的与用于图3相同的代码的例示性结果,其中在运行时间,发现输入指针具有值P0=0x1010和P1=0x1000。再次,硬件具有可并行执行的八个处理元件。在图4中,VECLEN的值在周期4上被设定为4,而在图3中,VECLEN的值在周期4上被设定为2。所述差是由于在运行时间确定的寻址寄存器值的差造成的。再次,在每一迭代中,归纳变量增量由在循环中启用的处理元件(或向量通道)的数目按比例缩放(例如,根据特征5)。在图4中的实施例中,在周期5与周期7之间,基于启用的4个处理元件,P0和P1值递增存取大小的4倍(在这种情况下,在循环的第一迭代中,P1含有数据元素in[0]的地址,而在第二迭代中,其含有数据元素in[4]的地址)。
图5示出运行根据本说明书的一个实行方案编译的与用于图3和图4相同的编译代码的例示性结果。再次,硬件具有八个处理元件,所述处理元件可并行执行。在这个例示性输出中,编译器可确定不存在别名,因为输出指针具有小于输入指针的值(0x1010)的值(0x1000)。因此,在周期3上,VECLEN的值被设定为处理元件的最大数目,所述最大数目在这种情况下为8。因为cpy()函数在初始标量循环中仅执行8个迭代,所以在编译的并行代码的单个迭代中实现所有迭代。
如可从图3、图4和图5中示出的例示性结果看到,单个版本的 编译代码可至少部分基于在运行时间设定的硬件寄存器来在存在潜在别名的情况下正确地执行。用以在运行时间针对别名测试存储地址的指令(例如,用于alias()的指令)可设定寄存器以规定且/或启动向量通道以便使用循环的单个编译版本来开拓SIMD处理。
在以上实施方案的论述中,寄存器、开关、放大器和/或晶体管可容易地被替换、替代或以其它方式修改以便适应特定电路要求。此外,应注意的是,互补的电子装置、硬件、软件等的使用为实行本公开的教导提供同样可行的选项。
在一个示例性实施方案中,附图的任何数目的电路可实行于相关联电子装置的母板上。母板可为通用电路板,所述通用电路板可容纳电子装置的内部电子系统的各种部件,并且进一步提供用于其它外围设备的连接器。更具体来说,母板可提供系统的其它部件可借以电气通信的电气连接。任何适合的处理器(包括数字信号处理器、微处理器、支持芯片组等)、存储元件等可基于特定配置要求、处理需求、计算机设计等适当地连接至母板。诸如外部存储件、额外传感器、用于音频/视频显示的控制器和外围装置的其它部件可作为插入卡、经由电缆附接至母板,或集成到母板自身中。
在另一个示例性实施方案中,附图的电路可实行为独立模块(例如,相关联部件或电路被配置来执行特定应用或功能的装置)或实行为插入电子装置的专用硬件中的插入模块。注意,本公开的特定实施方案可容易地部分或完全包含在芯片上系统(SOC)封装中。SOC表示将计算机或其它电子系统的部件集成至单个芯片中的IC。其可含有数字功能、模拟功能、混合信号功能以及通常射频功能:上述所有功能可提供在单个芯片衬底上。其它实施方案可包括多芯片模块(MCM),其中多个分开的IC定位在单个电子封装内并且被配置来通过电子封装彼此密切地相互作用。在各种其它实施方案中,放大功能性可实行于专用集成电路(ASIC)、现场可编程门阵列(FPGA)和其它半导体芯片中的一个或多个硅核心中。
注意,以上参考附图论述的活动适用于涉及信号处理的任何集成电路,尤其是可执行专业化软件程序或算法的那些集成电路,所述专业化软件程序或算法中的一些可与处理数字化实时数据相关联。某些实施方案可涉及多DSP信号处理、浮点处理、信号/控制处理、固定函数处理、微控制器应用程序等。
在某些上下文中,本文论述的特征可适用于医疗系统、科学检测仪器、无线和有线通信、雷达、工业过程控制、音频和视频设备、电流感测、检测仪器(其可为高度精确的)和其它基于数字处理的系统。
此外,可在用于医学成像、病人监视、医疗检测仪器和家庭保健的数字信号处理技术中供给以上论述的某些实施方案。这可包括肺部监视器、加速度计、心率监视器、起搏器等。其它应用可涉及用于安全系统(例如,稳定控制系统、驾驶员辅助系统、制动系统、任何种类的娱乐信息和内部应用)的汽车技术。此外,传动系统(例如,混合车辆和电动车辆中的)在电池监视、控制系统、报告控制、维修活动等中可使用高精度数据转换产品。
此外,一些实施方案可应用于具有有限存储资源的数字信号处理技术中。例如,移动电话、移动健康跟踪装置、数码相机等可部分由于这类装置的紧凑大小而含有有限的存储资源。另外,这些装置可在嵌入式处理器上执行复杂的信号处理。有利地,本说明书的实施方案可产生紧凑的代码,从而耗费较少的存储器来执行。例示性应用可包含在移动电话上裁切图像、在移动健康跟踪装置上分析心率数据、在数码相机上将过滤器应用于图像等。进一步优点是本说明书的实施方案可最大化在运行时间的并行化的量,从而减少执行这样的应用程序所需的时间。
在另外的其它示例性情形中,本公开的教导可适用于包含过程控制系统的工业市场中,所述过程控制系统帮助驱动生产力、能量效率和可靠性。在消费者应用中,以上论述的信号处理电路的教导可用于 图像处理、自动聚焦和图像稳定(例如,用于数码照相机、便携式摄像机等)。其它消费者应用可包含用于家庭影院系统、DVD录像机和高清晰度电视机的音频和视频处理器。另外的其它消费者应用可涉及高级触摸屏控制器(例如,用于任何类型的便携式介质装置)。因此,这类技术可容易地为智能电话、平板计算机、安全系统、PC、游戏技术、虚拟现实、模拟训练等的部分。
还必须注意的是,本文概述的所有说明、尺寸和关系(例如,处理器和存储元件的数目、逻辑操作等)仅被提供用于例示和教导的目的。这样的信息可在不脱离本公开的精神或随附权利要求书的范围的情况下显著地变化。所述说明仅适用于一个非限制性实施例,并且因此,其应被视为如此。在前述描述中,已经参考特定处理器和/或部件布置描述了示例性实施方案。可在不脱离随附权利要求书的范围的情况下对这类实施方案进行各种修改和改变。因此,应以说明性意义而非限制性意义来考虑描述和图式。
注意,在本文提供的许多实施例的情况下,可针对两个、三个、四个或更多个电气部件描述相互作用。然而,已经出于清晰性并且仅作为实施例的目的而进行了描述。应了解,系统可用任何适合的方式巩固。根据类似的设计替代方案,附图中示出的部件、模块和元件中的任何一个可组合于各种可能的配置中,所有可能的配置明显地在本说明书的广泛范围内。在某些情况下,通过仅参考有限数目的电气元件来描述一组给定流程的功能性中的一个或多个可能更为容易。应了解,附图的电路及其教导是易于伸缩的,并且可适应大量部件以及更复杂/精致的布置和配置。因此,所提供的实施例不应限制范围或约束潜在应用于无数其它架构的电路的广泛教导。
注意,在本说明书中,对包含在“一个实施方案”、“示例性实施方案”、“一实施方案”、“另一个实施方案”、“一些实施方案”、“各种实施方案”、“其它实施方案”、“替代性实施方案”等中的各种特征(例如,元件、结构、模块、部件、步骤、操作、特性等)的参考旨在意 指任何这样的特征都包含在本公开的一个或多个实施方案中,但是可能或可能未必组合于相同实施方案中。
本领域技术人员可查明许多其它改变、置换、变化、更改和修改,并且本公开旨在涵盖属于随附权利要求书的范围内的所有这类改变、置换、变化、更改和修改。为了辅助美国专利商标局(USPTO)和另外关于这个应用颁发的任何专利的任何读者理解在此随附的权利要求书,申请人希望注意到,申请人:(a)不希望随附权利要求中的任一项援引35U.S.C.第112部分的第六(6)段,如其在于此提交的日期已存在,除非在特定权利要求中具体使用了词“用于……的装置”或“用于……的步骤”;并且(b)不希望通过说明书中的任何声明以并没有在随附权利要求书中以其它方式反映的任何方式来限制本公开。
其它注意点、实施例和实行方案
注意,上述设备的所有任选特征也可以相对于本文所述的方法或过程来实行,并且实施例中的细节可在任何地方使用于一个或多个实施方案中。
在第一实施例中,提供一种系统(其可包括任何适合的电路、分压器、电容器、电阻器、感应器、ADC、DFF、逻辑门、软件、硬件、链路等),所述系统可为任何类型的计算机的部分,所述系统可进一步包括连接至多个电子部件的电路板。所述系统可包括:用于使用第一时钟来计时从数字核心至宏指令的第一数据输出上的数据的装置,所述第一时钟为宏指令时钟;用于使用第二时钟来计时从宏指令的第一数据输出进入物理接口中的数据的装置,所述第二时钟为物理接口时钟;用于使用宏指令时钟来计时从数字核心至宏指令的复位输出上的第一复位信号的装置,所述第一复位信号输出用作第二复位信号;用于使用第三时钟来取样第二复位信号以产生取样复位信号的装置,所述第三时钟提供比第二时钟的速率更大的时钟速率;以及用于响应于取样复位信号的跃迁而使第二时钟复位为物理接口中的预定状态 的装置。
在这些情况(以上)下的‘用于……的装置’可包括(但不限于)与任何适合的软件、电路、集线器、计算机代码、逻辑、算法、硬件、控制器、接口、链路、总线、通信路径等一起使用本文论述的任何适合部件。在第二实施例中,系统包括存储器,所述存储器进一步包括机器可读指令,所述机器可读指令在执行时使系统执行以上所述活动中的任何活动。

在存在可能的存储器别名的情况下并行化循环.pdf_第1页
第1页 / 共21页
在存在可能的存储器别名的情况下并行化循环.pdf_第2页
第2页 / 共21页
在存在可能的存储器别名的情况下并行化循环.pdf_第3页
第3页 / 共21页
点击查看更多>>
资源描述

《在存在可能的存储器别名的情况下并行化循环.pdf》由会员分享,可在线阅读,更多相关《在存在可能的存储器别名的情况下并行化循环.pdf(21页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN104050025A43申请公布日20140917CN104050025A21申请号201410095115322申请日2014031461/788,47120130315US14/200,78820140307USG06F9/46200601G06F9/4520060171申请人亚德诺半导体技术公司地址百慕大群岛英哈密尔顿72发明人MG佩尔金斯JL瑞德福特K桑海74专利代理机构中国国际贸易促进委员会专利商标事务所11038代理人金晓54发明名称在存在可能的存储器别名的情况下并行化循环57摘要在一个特定实施例中,本公开提供一种用以在存在无法在编译时间解决的可能的存储器别名的情。

2、况下确定可能用于循环的并行化程度的有效机构。提供硬件指令,所述硬件指令在运行时间测试存储地址并且设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的SIMD单指令多数据通道以便并行地运行。列举了扩展这类指令的适用性或性能的其它硬件特征。30优先权数据51INTCL权利要求书2页说明书13页附图5页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书13页附图5页10申请公布号CN104050025ACN104050025A1/2页21一种用以在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的方法,所述方法包括提供硬件指令,所述硬。

3、件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。2如权利要求1所述的方法,其中启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。3如权利要求1所述的方法,其中服从遵守所述初始标量循环的循环携带依赖性,启用最大数目的向量通道以获得最大加速。4如权利要求1所述的方法,其中处理器被配置来确定可启用仅一个向量通道以再生所述标量循环的所述语义。5如权利要求1所述的方法,其中硬件具有用以规定启用多少向量通道的机构,并且其中所述硬件包括模式寄存器,所述模式寄存器含有启用的通道的数目。

4、,或所述硬件包括屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。6如权利要求5所述的方法,其中所述硬件具有用以依赖于在运行时间的存储地址的测试来设定所述模式寄存器以启用所述最大数目的向量通道的机构。7如权利要求5所述的方法,其中所述硬件具有依赖于所述启用的通道的数目来更改所述循环的迭代的数目的机构。8如权利要求1所述的方法,其中SIMD分级循环允许所述循环在并非向量化因数的倍数的向量长度上运行。9如权利要求1所述的方法,其中归纳变量的增量是通过在所述循环中启用的向量通道的数目来按比例缩放的。10如权利要求1所述的方法,其中所述方法包括跨越当前根据模式寄存器启用的向量通道来执行约简,所述约简进一步包。

5、括求和、逐位运算、最小值或最大值。11如权利要求1所述的方法,其中所述方法包括将值从在循环的最后迭代中使用的最后向量通道复制到存储器或复制到已知的寄存器位置。12一种用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的设备,所述设备包括用于执行硬件指令的至少一个处理元件,所述硬件指令在运行时间测试存储地址;以及模式或寄存器,所述模式或寄存器被设定来使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。13如权利要求12所述的设备,其中启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。14如权利要求12所述的设备,其中所述模式或寄。

6、存器规定启用多少向量通道,并且其中所述模式或寄存器包括模式寄存器,所述模式寄存器含有启用的通道的数目,或所述模式或寄存器包括屏蔽寄存器,所述屏蔽寄存器控制启用哪些通道。15如权利要求14所述的设备,其中所述至少一个处理元件具有用以依赖于在运行时间的存储地址的测试来设定所述模式或寄存器以启用所述最大数目的向量通道的机构。权利要求书CN104050025A2/2页316如权利要求14所述的设备,其中所述至少一个处理元件具有依赖于所述启用的通道的数目来更改所述循环的迭代的数目的机构。17如权利要求12所述的设备,其中所述至少一个处理元件跨越当前根据模式寄存器启用的向量通道来执行约简,所述约简进一步包。

7、括求和、逐位运算、最小值或最大值。18如权利要求12所述的设备,其中所述至少一个处理元件将值从在循环的最后迭代中使用的最后向量通道复制到存储器或复制到已知的寄存器位置。19至少一种机器可读非暂时性存储介质,其上存储有指令以用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度,其中所述指令在由至少一个处理器执行时使所述至少一个处理器执行以下操作执行硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。20如权利要求19所述的机器可读非暂时性存储介质,其中启用的。

8、并行化的量是由用于指针别名使用的运行时间测试来确定的。权利要求书CN104050025A1/13页4在存在可能的存储器别名的情况下并行化循环0001相关申请的交叉引用0002本申请要求2013年3月15日提交的标题名称为“AMETHODTOPARALLELIZELOOPSINTHEPRESENCEOFPOSSIBLEMEMORYALIASES”的美国申请61/788,471的优先权,所述美国申请在此以引用的方式整体并入本文中。技术领域0003本公开一般来说涉及并行处理,并且更具体来说涉及并行化循环。背景技术0004现代硬件技术通过使用多个处理元件PE来提供增加处理速度的能力,所述多个处理元件各。

9、自可以执行分开的并行操作;这样的处理有时被称为并行处理或并行化。为了在处理中利用来自并行化的潜在加速,编译器可确定是否可并行化源代码。例如,如果循环的每一迭代不依赖于循环的任何先前迭代,则编译器可并行化循环被称为向量化。这样的依赖性通常是以存储器别名的形式即,其中多个指针引用单个存储地址。编译器可在编译时间尝试证明这样的潜在存储器别名不存在,以使得编译器可产生并行代码。附图说明0005根据以下详细描述和附图最好地理解本公开。应强调的是,根据行业中的标准惯例,各种特征并没有按比例描绘并且仅用于图解说明目的。事实上,为了论述的清晰性,可任意增大或减小各种特征的尺寸。0006图1为根据本说明书的一个。

10、或多个实施方案的用于在存在可能的存储器别名的情况下并行化循环的例示性逻辑的流程图。0007图2为根据本说明书的一个或多个实施方案的包括含有启用的通道的数目的寄存器的例示性硬件实行方案的框图。0008图3示出在具有两个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。0009图4示出在具有四个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。0010图5示出在具有八个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。具体实施方式0011概述0012根据本说明书的一个方面,公开一种用以在存在可能的存储器别名的情况下确定可能用于。

11、循环的并行化程度的方法,所述方法包括提供硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行说明书CN104050025A2/13页5遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。0013根据本说明书的另一个方面,公开一种用以在存在可能的存储器别名的情况下确定可能用于循环的并行化程度的设备,所述设备包括用于执行硬件指令的至少一个处理元件,所述硬件指令在运行时间测试存储地址;以及模式或寄存器,所述模式或寄存器被设定来使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。。

12、0014根据本说明书的又一个方面,公开至少一种机器可读非暂时性存储介质,所述机器可读非暂时性存储介质上存储有指令以用于在存在可能的存储器别名的情况下确定可能用于循环的并行化程度,其中所述指令在由至少一个处理器执行时使所述至少一个处理器执行以下操作执行硬件指令,所述硬件指令在运行时间测试存储地址;以及设定模式或寄存器,所述模式或寄存器使循环的单个实例能够运行遵守初始标量循环的语义的最大数目的单指令多数据SIMD通道以便并行地运行。0015示例性实施方案的详细描述0016诸如C/C等高级语言表达对标量类型进行操作的程序语义。例如,可如下实行用以将两个向量加在一起的函数00170018理论上,可以并。

13、行执行向量元素的单独相加。然而,为了这样做,编译器可确定在输入向量与输出向量之间不存在存储器别名,即,输入向量与输出向量的存储地址不彼此重叠。在以上情况下,例如,指针A和B可指向存储器的相关区域。例如,假如对以上函数的调用之一如下,则上述情况将会发生0019ADD0020在这种情况下,在加法循环中存在循环携带依赖性即,循环的一个迭代依赖于在循环的先前迭代中计算的结果,并且可能无法并行地进行元素的求和。0021编译器可在编译时间尝试证明这样的潜在别名不存在,以使得可创建并行代码。然而,一些潜在别名可能在编译时间仍然无法解决。以下方法涉及解决阻止向量化的在编译时间无法解决的别名00221编译器可用。

14、编译器备注或汇编注解的形式将无法解决的别名阻止向量化的信息提供给程序员。程序员然后可通过使用限制限定词、编译指示或其它技术来改变其代码源,以帮助编译器解决别名。然而,在许多情况下程序员不知道代码如何工作尤其是在维护第三方代码的情况下。此外,这种方法可能并不适用于别名仅有时存在而并不总是出现的情况。00232编译器可发出别名的运行时间测试,并且发出循环的两个不同版本向量化版本和标量版本。循环的适当版本依赖于别名是否存在而执行。对于这种方法的挑战是代码大小扩展和缺少向宽向量长度的可伸缩性例如,具有不同向量化因数的许多不同循环对说明书CN104050025A3/13页6于宽向量机上的所有可能的别名距。

15、离创建有效代码。00243在没有硬件支持的情况下例如,在SHARC2116X上有条件地打开SIMD模式可能具有以下挑战I其可仅处理启用的一个向量通道标量模式或启用的两个向量通道向量模式;II其可能不提供特定指令来以有效方式检测别名;并且III其可能不实行允许特定操作的特征,这依赖于启用的向量通道的数目。因此,这样的方法可能具有高的建立和拆除成本,并且可能无法向量化所有的潜在可向量化的循环。0025因此,存在编译器无法证明在输入阵列与输出阵列之间无别名存在的情况。因此,编译器可为保守的并且仅发出标量代码例如,串行代码。在一些情况下,别名存在,但是其可能并不是每次调用函数时都出现。因此,函数有时可。

16、以并行执行但是在其它调用期间必须串行执行。因此,一个挑战是找到一种方法来在可能的情况下从并行化获得加速,同时在别名确实存在的情况下也产生正确的代码。0026解决方案是将硬件支持增添到SIMD处理器通过多个PE或寄存器内SIMDSWAR来支持单指令多数据指令的处理器以允许单个循环以标量模式或使用启用的多个SIMD通道或向量通道来运行。启用的并行化的量是由用于指针别名使用的运行时间测试来确定的。有利地,这使得单个循环能够正确地执行而不考虑输入阵列和输出阵列刚好在存储器中何处例如,不考虑别名是否存在。此外,服从遵守初始标量循环的循环携带依赖性,启用最大数目的向量通道以获得最大加速。0027根据本说明。

17、书的一个实行方案在芯片的指令集架构ISA及其可见寄存器组中可为明显的。指令的细节可用许多方式来实行例如,将别名测试分解为多个指令、组合多个别名测试或使用局限于2的幂的VECLEN。如本说明书中通篇所论述,指令可被利用来测试别名并且因此确定向量长度寄存器或PE屏蔽寄存器。此外,根据本说明书实行的指令可容许循环中的可变向量长度。0028在一个实行方案中,硬件可允许循环以标量模式或使用多个SIMD通道来运行。例如,考虑以上定义的函数ADD。如果存在以下两个调用点0029ADD0030以及0031ADD0032则当执行第一调用即,ADD/开始N个迭代的循环0052R0I04/加载BI,并且使地址寄存器。

18、递增至阵列中的下一个元素0053R1I14/加载CI,并且使地址寄存器递增至阵列中的下一个元素0054R0R0R1/将向量元素相加0055I24R0/存储AI,并且使地址寄存器递增至阵列中的下一个元素0056ENDLOOP0057注意,R0和R1中的每一个对应于数据寄存器,并且I0、I1和I2中的每一个对应于寻址寄存器,所述寻址寄存器含有存储地址。0058在一个实行方案中,例如,根据特征1,使用模式寄存器例如,VECLEN寄存器来扩充硬件,所述模式寄存器含有启用的向量通道的数目。作为一个实例,模式寄存器可为在逻辑100中例如,在程序108、112和114处提及的VECLEN寄存器。对于标量代码。

19、,将模式寄存器设定为1启用单个向量通道。在到达循环之前模式寄存器处于这个状态中。为简单起见,可以假定用于硬件的架构包括多个相同的PE,以使得对于每一PE复制寄存器文件。因此,寄存器R2例如可被视为一组寄存器,每一PE上一个寄存器,在每一PE的寄存器文件中的相同地方。0059例如,图2为根据本说明书的一个或多个实施方案的包括含有启用的通道的数目说明书CN104050025A6/13页9的模式寄存器的例示性硬件实行方案的框图。在这个实施例中,硬件200包括VECLEN寄存器202、具有对应的SWAR通道206的处理元件零PE0204、具有对应的SWAR通道210的处理元件一PE1208、具有对应的。

20、SWAR通道214的处理元件二PE2212和具有对应的SWAR通道218的处理元件N1PEN1216。硬件200中的每一处理元件皆具有4个SWAR通道。因此,系统200中的SWAR通道的总数等于N的4倍。VECLEN寄存器202控制处理元件例如,204、208、212和216和SWAR通道例如,206、210、214和218的启用。在这个实施例中,VECLEN寄存器202设定为8;因此,启用来自总共4N个SWAR通道中的仅8个SWAR通道。因此,启用SWAR通道206A、206B、206C、206D、210A、210B、210C和210D中的每一个,同时停用SWAR通道214A、214B、21。

21、4C、214D、218A、218B、218C和218D。可基于在运行时间的存储地址的测试来设定存储在VECLEN寄存器202中的值,以启用遵守初始标量循环的语义的最大数目的SIMD通道和/或向量通道。0060在图4中,VECLEN寄存器202展示为处于其设定为等于8的状态中。然而,VECLEN寄存器202可被更新来规定不同的数目例如,基于在运行时间的指针的测试。VECLEN寄存器202可设定为任何值,其中0PTR2。例如,在像C或C的语言中,每一指针的值是存储地址;因此,比较指针说明书CN104050025A7/13页10的值实际上是比较存储地址。此外,实行方案确定以存取大小的倍数测量的地址之。

22、间的差是否小于启用的向量通道的数目,即,PTR1PTR2/SIZEOFI0/例如,如果启用PE0、PE1和PE2,并且停用PE3、PE4、PE5、PE6和PE7,则这将PE2的R0存储到I5中的存储器位置。0098R3LASTR0/例如,如果启用PE0、PE1和PE2,并且停用PE3、PE4、PE5、PE6和PE7,则这将PE2的R0存储到PE0的R3。0099或者,指令诸如0100R3LASTR0,N0101使用初始跳脱计数N和VECLEN来确定最后值存在于哪个向量通道中,并且将其复制到PE0的R3。例如0102R3LASTR0,130103其中VECLEN8,会将PE4的R0复制到PE0的。

23、R3。0104根据本说明书实行的编译器可发出代码来并行化函数,其中并行化程度是基于硬件寄存器来在运行时间确定的。例如,可如下实行用以将一个向量中的值复制到另一个向量的函数0105说明书CN104050025A1210/13页130106编译器可编译并且发出例如,在逻辑100的程序108处代码的以下版本01070108/PN为地址寄存器,并且RN为数据寄存器。0109编译的代码将VECLEN的值初始化为8。然而,VECLEN的值在运行时间基于ALIAS函数的输出来更新例如,根据特征1和特征2。可根据在本说明书中提供的例示性指令中的任何一个来实行用于ALIAS的指令,如在编译的代码中引用的。在VE。

24、CLEN个处理元件上并行执行循环例如,LOOP,并且使循环重复8/VECLEN次。因为VECLEN的值是在运行时间设定的,所以循环的迭代的数目也是在运行时间确定的例如,根据特征3。因此,编译的代码可基于在运行时间确定的VECLEN的值并行地执行循环的多个迭代。0110图3示出在具有两个并行处理元件的硬件上运行根据本说明书的一个实行方案编译的代码的例示性结果。具体来说,图3示出使用输入指针P00X1008和P10X1000并且在具有可并行执行的八个处理元件例如,向量通道的最大数目为8的硬件上运行以上代码编译代码亦即,_CPY的例示性结果。所述图展示出周期数和在周期上执行的指令的对应列即,INST。

25、RUCTION、地址寄存器P0和P1的值、VECLEN的值、循环计数器即,LC的值和数据寄存器R0的值。在周期0至2上,初始化地址寄存器和VECLEN。在这个实施例中,将VECLEN初始化为等于8;然而,在周期3上,基于比较P0和P1的存储地址与硬件上可利用的处理元件的最大数目而将VECLEN从8更新为2。循环的第一迭代在周期5和6上加载来自IN阵列的前两个值,并且将其存储到OUT阵列上的对应位置。类似地,循环总共被重复四次,因为8/VECLEN8/24。剩余的三个循环分别在周期7至8、9至10和11至12中完成。最后,函数在周期13上返回。在每一循环之后,归纳变量递增由在循环中启用的处理元件。

26、或向量通道的数目按比例缩放的值例如,根据特征5。例如,在周期5与周期7之间,基于2个处理元件被启用而使P0和P1中的值递增存取大小的两倍以使说明书CN104050025A1311/13页14得例如在循环的第一迭代中,P1含有数据元素IN0的地址,而在第二迭代中,其含有数据元素IN2的地址。0111图4示出运行根据本说明书的一个实行方案编译的与用于图3相同的代码的例示性结果,其中在运行时间,发现输入指针具有值P00X1010和P10X1000。再次,硬件具有可并行执行的八个处理元件。在图4中,VECLEN的值在周期4上被设定为4,而在图3中,VECLEN的值在周期4上被设定为2。所述差是由于在运。

27、行时间确定的寻址寄存器值的差造成的。再次,在每一迭代中,归纳变量增量由在循环中启用的处理元件或向量通道的数目按比例缩放例如,根据特征5。在图4中的实施例中,在周期5与周期7之间,基于启用的4个处理元件,P0和P1值递增存取大小的4倍在这种情况下,在循环的第一迭代中,P1含有数据元素IN0的地址,而在第二迭代中,其含有数据元素IN4的地址。0112图5示出运行根据本说明书的一个实行方案编译的与用于图3和图4相同的编译代码的例示性结果。再次,硬件具有八个处理元件,所述处理元件可并行执行。在这个例示性输出中,编译器可确定不存在别名,因为输出指针具有小于输入指针的值0X1010的值0X1000。因此,。

28、在周期3上,VECLEN的值被设定为处理元件的最大数目,所述最大数目在这种情况下为8。因为CPY函数在初始标量循环中仅执行8个迭代,所以在编译的并行代码的单个迭代中实现所有迭代。0113如可从图3、图4和图5中示出的例示性结果看到,单个版本的编译代码可至少部分基于在运行时间设定的硬件寄存器来在存在潜在别名的情况下正确地执行。用以在运行时间针对别名测试存储地址的指令例如,用于ALIAS的指令可设定寄存器以规定且/或启动向量通道以便使用循环的单个编译版本来开拓SIMD处理。0114在以上实施方案的论述中,寄存器、开关、放大器和/或晶体管可容易地被替换、替代或以其它方式修改以便适应特定电路要求。此外。

29、,应注意的是,互补的电子装置、硬件、软件等的使用为实行本公开的教导提供同样可行的选项。0115在一个示例性实施方案中,附图的任何数目的电路可实行于相关联电子装置的母板上。母板可为通用电路板,所述通用电路板可容纳电子装置的内部电子系统的各种部件,并且进一步提供用于其它外围设备的连接器。更具体来说,母板可提供系统的其它部件可借以电气通信的电气连接。任何适合的处理器包括数字信号处理器、微处理器、支持芯片组等、存储元件等可基于特定配置要求、处理需求、计算机设计等适当地连接至母板。诸如外部存储件、额外传感器、用于音频/视频显示的控制器和外围装置的其它部件可作为插入卡、经由电缆附接至母板,或集成到母板自身。

30、中。0116在另一个示例性实施方案中,附图的电路可实行为独立模块例如,相关联部件或电路被配置来执行特定应用或功能的装置或实行为插入电子装置的专用硬件中的插入模块。注意,本公开的特定实施方案可容易地部分或完全包含在芯片上系统SOC封装中。SOC表示将计算机或其它电子系统的部件集成至单个芯片中的IC。其可含有数字功能、模拟功能、混合信号功能以及通常射频功能上述所有功能可提供在单个芯片衬底上。其它实施方案可包括多芯片模块MCM,其中多个分开的IC定位在单个电子封装内并且被配置来通过电子封装彼此密切地相互作用。在各种其它实施方案中,放大功能性可实行于专用集成电路ASIC、现场可编程门阵列FPGA和其它。

31、半导体芯片中的一个或多个硅核心中。0117注意,以上参考附图论述的活动适用于涉及信号处理的任何集成电路,尤其是可说明书CN104050025A1412/13页15执行专业化软件程序或算法的那些集成电路,所述专业化软件程序或算法中的一些可与处理数字化实时数据相关联。某些实施方案可涉及多DSP信号处理、浮点处理、信号/控制处理、固定函数处理、微控制器应用程序等。0118在某些上下文中,本文论述的特征可适用于医疗系统、科学检测仪器、无线和有线通信、雷达、工业过程控制、音频和视频设备、电流感测、检测仪器其可为高度精确的和其它基于数字处理的系统。0119此外,可在用于医学成像、病人监视、医疗检测仪器和家。

32、庭保健的数字信号处理技术中供给以上论述的某些实施方案。这可包括肺部监视器、加速度计、心率监视器、起搏器等。其它应用可涉及用于安全系统例如,稳定控制系统、驾驶员辅助系统、制动系统、任何种类的娱乐信息和内部应用的汽车技术。此外,传动系统例如,混合车辆和电动车辆中的在电池监视、控制系统、报告控制、维修活动等中可使用高精度数据转换产品。0120此外,一些实施方案可应用于具有有限存储资源的数字信号处理技术中。例如,移动电话、移动健康跟踪装置、数码相机等可部分由于这类装置的紧凑大小而含有有限的存储资源。另外,这些装置可在嵌入式处理器上执行复杂的信号处理。有利地,本说明书的实施方案可产生紧凑的代码,从而耗费。

33、较少的存储器来执行。例示性应用可包含在移动电话上裁切图像、在移动健康跟踪装置上分析心率数据、在数码相机上将过滤器应用于图像等。进一步优点是本说明书的实施方案可最大化在运行时间的并行化的量,从而减少执行这样的应用程序所需的时间。0121在另外的其它示例性情形中,本公开的教导可适用于包含过程控制系统的工业市场中,所述过程控制系统帮助驱动生产力、能量效率和可靠性。在消费者应用中,以上论述的信号处理电路的教导可用于图像处理、自动聚焦和图像稳定例如,用于数码照相机、便携式摄像机等。其它消费者应用可包含用于家庭影院系统、DVD录像机和高清晰度电视机的音频和视频处理器。另外的其它消费者应用可涉及高级触摸屏控。

34、制器例如,用于任何类型的便携式介质装置。因此,这类技术可容易地为智能电话、平板计算机、安全系统、PC、游戏技术、虚拟现实、模拟训练等的部分。0122还必须注意的是,本文概述的所有说明、尺寸和关系例如,处理器和存储元件的数目、逻辑操作等仅被提供用于例示和教导的目的。这样的信息可在不脱离本公开的精神或随附权利要求书的范围的情况下显著地变化。所述说明仅适用于一个非限制性实施例,并且因此,其应被视为如此。在前述描述中,已经参考特定处理器和/或部件布置描述了示例性实施方案。可在不脱离随附权利要求书的范围的情况下对这类实施方案进行各种修改和改变。因此,应以说明性意义而非限制性意义来考虑描述和图式。0123。

35、注意,在本文提供的许多实施例的情况下,可针对两个、三个、四个或更多个电气部件描述相互作用。然而,已经出于清晰性并且仅作为实施例的目的而进行了描述。应了解,系统可用任何适合的方式巩固。根据类似的设计替代方案,附图中示出的部件、模块和元件中的任何一个可组合于各种可能的配置中,所有可能的配置明显地在本说明书的广泛范围内。在某些情况下,通过仅参考有限数目的电气元件来描述一组给定流程的功能性中的一个或多个可能更为容易。应了解,附图的电路及其教导是易于伸缩的,并且可适应大量部件以及更复杂/精致的布置和配置。因此,所提供的实施例不应限制范围或约束潜在应用于无数其它架构的电路的广泛教导。说明书CN104050。

36、025A1513/13页160124注意,在本说明书中,对包含在“一个实施方案”、“示例性实施方案”、“一实施方案”、“另一个实施方案”、“一些实施方案”、“各种实施方案”、“其它实施方案”、“替代性实施方案”等中的各种特征例如,元件、结构、模块、部件、步骤、操作、特性等的参考旨在意指任何这样的特征都包含在本公开的一个或多个实施方案中,但是可能或可能未必组合于相同实施方案中。0125本领域技术人员可查明许多其它改变、置换、变化、更改和修改,并且本公开旨在涵盖属于随附权利要求书的范围内的所有这类改变、置换、变化、更改和修改。为了辅助美国专利商标局USPTO和另外关于这个应用颁发的任何专利的任何读。

37、者理解在此随附的权利要求书,申请人希望注意到,申请人A不希望随附权利要求中的任一项援引35USC第112部分的第六(6段,如其在于此提交的日期已存在,除非在特定权利要求中具体使用了词“用于的装置”或“用于的步骤”;并且B不希望通过说明书中的任何声明以并没有在随附权利要求书中以其它方式反映的任何方式来限制本公开。0126其它注意点、实施例和实行方案0127注意,上述设备的所有任选特征也可以相对于本文所述的方法或过程来实行,并且实施例中的细节可在任何地方使用于一个或多个实施方案中。0128在第一实施例中,提供一种系统其可包括任何适合的电路、分压器、电容器、电阻器、感应器、ADC、DFF、逻辑门、软。

38、件、硬件、链路等,所述系统可为任何类型的计算机的部分,所述系统可进一步包括连接至多个电子部件的电路板。所述系统可包括用于使用第一时钟来计时从数字核心至宏指令的第一数据输出上的数据的装置,所述第一时钟为宏指令时钟;用于使用第二时钟来计时从宏指令的第一数据输出进入物理接口中的数据的装置,所述第二时钟为物理接口时钟;用于使用宏指令时钟来计时从数字核心至宏指令的复位输出上的第一复位信号的装置,所述第一复位信号输出用作第二复位信号;用于使用第三时钟来取样第二复位信号以产生取样复位信号的装置,所述第三时钟提供比第二时钟的速率更大的时钟速率;以及用于响应于取样复位信号的跃迁而使第二时钟复位为物理接口中的预定。

39、状态的装置。0129在这些情况以上下的用于的装置可包括但不限于与任何适合的软件、电路、集线器、计算机代码、逻辑、算法、硬件、控制器、接口、链路、总线、通信路径等一起使用本文论述的任何适合部件。在第二实施例中,系统包括存储器,所述存储器进一步包括机器可读指令,所述机器可读指令在执行时使系统执行以上所述活动中的任何活动。说明书CN104050025A161/5页17图1说明书附图CN104050025A172/5页18图2说明书附图CN104050025A183/5页19图3说明书附图CN104050025A194/5页20图4说明书附图CN104050025A205/5页21图5说明书附图CN104050025A21。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1