响应于矢量访问指令发出的交叉数据访问的制作方法

文档序号:6496630阅读:251来源:国知局
响应于矢量访问指令发出的交叉数据访问的制作方法
【专利摘要】公开了一种用于响应于已解码矢量数据访问指令而访问存储在数据存储内的数据的矢量数据访问单元。所述数量数据访问指令中的每一个包括指示要被执行的数据访问的多个元素,所述元素处于在所述矢量数据访问指令内处于一定顺序,对应数据访问被指挥以所述顺序在所述矢量数据访问指令内被执行。所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,所述数据访问排序电路被配置成:响应于接收到至少两个已解码矢量数据访问指令,所述至少两个已解码矢量数据访问指令中的前者在所述至少两个已解码矢量指令中的后者之前被接收,并且所述至少两个已解码矢量数据访问指令之一是写入指令,并且响应于来自所述至少两个已解码矢量数据访问指令的数据访问可以被交叉至有限程度的指示,用于:针对所述至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中的哪一个是下一个要被针对所述矢量数据访问指令来执行的数据访问,所述数据访问以所述被指挥的顺序被执行;针对所述矢量数据访问指令中的每一个来确定指示所述下次数据访问的元素;取决于所述至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们对应多个元素内的所述位置,选择所述下次数据访问中的一个作为要被向所述数据存储发出的下次数据访问,其约束条件是:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置与指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置之间的差小于预定值。
【专利说明】响应于矢量访问指令发出的交叉数据访问
【技术领域】
[0001]本发明涉及数据处理领域,并且更具体地涉及用于访问多个数据存储位置的矢量指令。
[0002]发明背景
[0003]一种用于改进数据处理设备的性能的已知技术是提供支持执行矢量操作的电路。对至少一个矢量操作数执行矢量操作,其中每个矢量操作数包括多个操作数元素。执行矢量操作涉及在(一个或多个)矢量操作数内的各个操作数元素上重复地应用操作。
[0004]在支持矢量操作的性能的典型数据处理系统中,将会提供矢量寄存器库(register bank)以用于存储矢量操作数。因此,例如,矢量寄存器库内的每一个矢量寄存器可以存储包括多个操作数元素的矢量操作数。
[0005]在高性能的实现方式中,还已知的是提供可以并行地对矢量操作数内的各个操作数元素执行所需要的矢量操作的矢量处理电路(通常称为SMD (单指令多数据)处理电路)。在可替代实施例中,标量处理电路可以仍用于实施矢量操作,但是在这种情况下,矢量操作是通过经由标量处理电路迭代地执行一个操作来实施,其中每次迭代对矢量操作数的不同操作数元素进行操作。应注意,存在其中一些矢量元素可以被一起处理的中间实现方式。
[0006]矢量数据访问指令各自指挥多个数据访问。一般来说,处理设备将不能在单个周期中以与彼此并行的方式来执行由矢量访问指令所规定的所有数据访问,访问一般将需要若干周期。如果多个矢量数据访问指令正在被执行,那么如果可以使来自不同矢量数据访问指令的数据访问与彼此交叉,则可以提高访问速度。这是由于有机会将操作合并至这样的交叉所引入的有关地址,并且由于有可能发现另外的并行性。
[0007]在一些情况下,所执行的访问彼此完全独立,并且可以允许它们之间的交叉从而提高访问的速度。在其他情况下,它们可能并不彼此独立,并且因此,它们被约束成以指令流次序来执行。
[0008]图1示出了根据现有技术的用于访问地址a0至a7的矢量访问指令、之后是用于访问地址b0至b7的矢量访问指令的实例。在这些指令在其中不允许交叉并且其中在一个时钟周期中可以发出两个数据访问请求的系统中被处理的情况下,那么,数据访问请求b7将会在接收指令七个时钟周期后被发出。
[0009]将会希望的是,提供一种用于支持在还支持标量操作的数据处理设备内执行矢量操作的改进技术。

【发明内容】

[0010]从第一方面来看,本发明提供了一种用于响应于已解码矢量数据访问指令来访问存储在数据存储内的数据的矢量数据访问单元,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问,所述多个元素在所述矢量数据访问指令内处于一定顺序,所述对应数据访问被指挥以该顺序在所述矢量数据访问指令内被执行;所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,所述数据访问排序电路被配置成:响应于接收到至少两个已解码矢量数据访问指令,所述至少两个已解码矢量数据访问指令中的前者在所述至少两个已解码矢量指令中的后者之前被接收,并且所述至少两个已解码矢量数据访问指令之一是写入指令;并且响应于来自所述至少两个已解码矢量数据访问指令的数据访问可以被交叉至有限程度的指示,用于:针对所述至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中的哪一个是下一个要被针对所述矢量数据访问指令来执行的数据访问,所述数据访问以所述被指挥顺序被执行;针对所述矢量数据访问指令中的每一个来确定指示所述下次数据访问的元素;取决于所述至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们对应多个元素内的所述位置,选择所述下次数据访问中的一个作为要被向所述数据存储发出的下次数据访问,其约束条件是以下两项之间的差小于预定值:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置,和指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置。
[0011]本发明意识到,指定要被执行的多个数据访问的矢量指令可能需要若干周期来执行,并且如果可以执行不同矢量指令内的访问的交叉,则可能是有利的。例如,一般来说,有利的是在存储之前实行加载,因为处理器可能通常需要在其可以执行后续动作之前执行加载,并且因此减少加载的等待时间与减少存储的等待时间相比通常将会对性能具有更大影响。
[0012]然而,在交叉指令之前,人们需要知道这样做是安全的。这一般需要对访问进行地址比较以核实同一地址没有被正在被记录的访问请求中的任一个访问。地址一般相当长,并且因此,这些地址比较的执行是昂贵的。此外,地址比较的数量对于矢量操作来说是大的,因为单个矢量存储器操作可以使用八个不同地址。因此,能够缓冲/重新排序4个矢量存储器访问的矢量加载/存储单元将必须能够缓冲/重新排序32个地址。本发明意识至IJ,矢量存储器访问可能能够被显著地重新排序,而无需确保安全性通常所需的大量的地址比较。具体来说,本发明意识到,在正确矢量化的循环中,数据访问免于RAW(写后读)和WAW(写后写)危害,并且因此,仅需要执行地址比较的一个子集来允许数据访问的安全交叉。
[0013]因此,本发明允许交叉,其条件是:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置,和指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置之间的差小于预定值,换句话说,来自后来的矢量数据访问指令的访问的进度受到先前的矢量数据访问指令的进度的约束。应注意,需要知道的是这两个数值位置的相对值,并且相对值可以通过减法或通过任何其他比较手段来确定。
[0014]在一些实施例中,所述约束进一步包括:由来自所述先前的矢量数据访问指令的元素所指示的数据访问请求不是在由定位在所述后来的矢量数据访问指令中的所述多个元素中的相应位置处的元素所指示的数据访问请求之后被发出。
[0015]该约束可以是:事实上现在允许后来的矢量数据访问指令部分地赶上先前的矢量数据访问指令。这意味着由一个指令所指挥的一些元素访问可以在由后续指令所指挥的元素访问之前或与其并行地被执行。
[0016]在一些实施例中,所述数据访问排序电路被配置用于:优先选择来自所述后来的矢量数据访问指令的所述下次数据访问请求作为所述要被发出的下次数据访问请求,而不是来自所述先前的矢量数据访问指令的所述下次数据访问请求,其条件是满足所述约束。
[0017]在满足该约束的情况下,排序电路可以优先选择来自后来的指令的数据访问请求,而不是来自先前的指令的数据访问请求。这加强交叉而不会引起危害。
[0018]在一些实施例中,所述数据访问排序电路被配置用于:在同一时钟周期中以与彼此并行的方式发出至少两个数据访问请求;所述数据访问排序电路被配置用于:选择所述下次访问和至少一个另外的数据访问来并行地发出,所述至少一个另外的数据访问请求是以下各项中的至少一项:
[0019]由所述矢量数据访问指令中继指示所述下次访问的所述元素之后的元素所指示的至少一个数据访问;以及
[0020]来自所述矢量数据访问指令中的不包括指示所述下次访问的所述元素的一个指令的所述下次访问中的至少一个;
[0021]取决于与所述下次数据访问被选择时相同的约束来选择所述至少一个另外的数据访问。
[0022]在可以并行地选择数据访问请求的情况下,则相同约束可以用于选择要被发出的两个数据访问请求。
[0023]在一些实施例中,所述要被访问的数据存储包括多存储器库的一个库。
[0024]数据存储可以是多存储器库内的库。在这样一种情况下,可以将存储器内的库看作各自具有它们自己的约束的单独的独立存储单元。如果情况是这样,则允许存储器访问并行地进行,从而允许更高的通量,尽管你确实具有分离和重新组合对不同库的访问的开销。因此,在一些实施例中,可能有利的是将多存储器库看作单个数据存储,而在其他实施例中,独立地看待每个库。
[0025]如以上所指出,在一些实施例中,所述数据存储包括存储器的多个库,而每个库独立于其他库,其中所述数据访问排序电路被配置成:在选择所述至少一个另外的数据访问时,不对在同一时钟周期中所选择的不同库的访问之间的访问施加所述约束。
[0026]当独立地看待库时,则不对不同库之间的访问施加约束,而仍对同一库的访问施加约束。
[0027]在一些实施例中,矢量数据访问单元包括与彼此并行地布置的至少两个矢量数据访问模块,每个模块被配置用于接收所述至少两个矢量数据访问指令中的对应的一个,所述数据访问排序电路包括:
[0028]所述矢量数据访问模块中的每一个中的计数器,该计数器用于存储所述对应矢量数据访问指令的指示所述下次数据访问的所述元素的所述位置的指示;以及
[0029]用于比较所述计数器的值的比较电路;
[0030]与所述矢量数据访问模块中的每一个相关的发出电路,该发出电路用于发出所述下次数据访问请求;
[0031]所述数据访问电路,所述数据访问电路被配置用于:响应于所述比较电路指示如果发出所述下次数据访问请求,则将不会满足所述约束,而向所述矢量数据访问模块之一的所述发出电路传输信号,从而阻止由所述模块发出所述下次数据访问请求。
[0032]在存在并行布置的矢量数据访问模块的情况下,则每个模块可以具有指示下次数据访问的元素在矢量内的位置的计数器,和用于比较这些计数器的比较电路。取决于确保满足所需要的约束的比较结果来发出被发出的下次数据访问请求。
[0033]在一些实施例中,矢量数据访问单元包括与彼此并行布置的至少两个矢量数据访问模块,模块各自被配置用于接收所述至少两个矢量数据访问指令中的对应的一个,并且其中所述数据存储包括缓存,缓存包括多个缓存线,所述缓存线中的每一个存储多个数据项,所述数据访问排序电路包括:
[0034]检测电路,该检测电路用于确定来自所述矢量数据访问模块的要被在同一时钟周期中执行的数据访问请求是否去往同一缓存线,并且响应于确定所述数据访问请求正在组合所述数据访问,以使得所述数据访问作为同一数据访问被执行。
[0035]可能有利的是在访问缓存时具有以下检测电路,该检测电路确定同一缓存线是否被来自不同矢量数据访问模块的访问请求访问。使访问交叉至一定程度的能力可以允许组合在一个程序流内彼此靠近出现并且去往同一缓存线的一些访问请求。访问缓存在功率上是昂贵的,并且如果同一缓存线将被两个数据访问请求访问,那么如果可以组合这些访问以形成单个访问,则将会是有利的。一些访问模式是这样以使得缓存线将有可能被后续访问请求访问,并且因此,使访问请求交叉的能力结合用以检测对同一缓存线的访问的检测电路在一些情况下可以在效率上提供显著改进。
[0036]在一些实施例中,所述至少两个矢量数据访问指令包括矢量加载指令和矢量存储指令中的至少两个,所述矢量数据访问单元进一步包括:
[0037]矢量寄存器存储器,其用于存储各自包括多个矢量操作数的多个矢量,所述矢量中的至少两个包括多个地址,所述地址指示由所述至少两个矢量数据访问指令中的对应一个所指示的所述多个数据访问的数据存储位置。
[0038]本发明的第二方面提供了 一种用于处理数据的数据处理设备,该数据处理设备包括:用于提取要被处理的指令的提取电路;用于对所述指令进行解码的解码电路;被配置用于响应于所述已解码指令执行操作的处理电路;以及根据本发明的第一方面的所述矢量数据访问单元,该单元用于响应于矢量数据访问指令而访问要被处理的所述数据。
[0039]在一些实施例中,所述解码电路被配置成:响应于指示允许有限交叉的指令,用于向所述矢量数据访问单元提供以下所述指示:来自所述先前的和后来的矢量数据访问指令的数据访问可以进行有限程度的交叉。
[0040]具有被配置用于响应将会指示何处允许有限交叉的指令的解码电路可能是有利的。具有这样的指令允许矢量数据访问单元知道是否比较元素位置并且确定是否满足约束。如果不允许交叉,那么这类比较是不需要的并且不产生益处。存在指令流的一部分其中交叉是适当的并且其他部分其中交叉是不适当的。因此,这个指令可能是特别有利的。
[0041]在一些实施例中,指示允许有限交叉的所述指令包括以下各项中的至少一个:矢量加载指令、矢量存储指令、开始有限交叉指令、用于设置有限交叉标记的指令以及用于设置矢量控制寄存器的指令。
[0042]指示有限交叉的指令可以是指示这个指令或它可以是如矢量加载指令或矢量存储指令的指令的特殊指令。可能的是,一直可以交叉矢量加载和矢量存储,并且从而检测出这些中的一个是足以指示可以允许交叉。可替代地,在一些实施例中,存在标记,该标记被设置以指示该情况,并且因此,用于设置这个标记或用于设置矢量控制寄存器的指令可以是指示现在允许交叉的指令。
[0043]在一些实施例中,指示允许有限交叉的所述指令包括所述开始有限交叉指令,并且所述开始有限交叉指令包括指示交叉程度的所述预定值。
[0044]在指示允许有限交叉的指令是开始有限交叉指令的情况下,则这个指令可以包括指示交叉程度的预定值。这可能是有用的,因为指令流的一些区段可以允许一定量的交叉,而其他区段可以允许不同量的交叉。在指令内具有预定值允许为代码的不同区段执行不同量的交叉。
[0045]在一些实施例中,所述解码电路被配置用于:响应于指示不再允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自矢量数据访问指令的数据访问不能交叉至有限程度。
[0046]还可以存在以下指令,该指令指示不再允许有限交叉并且对元素位置的比较不再适当。
[0047]这个指令可以是停止有限交叉指令,或它可以是反向分支指令。
[0048]反向分支指令指示正在进入代码的其中交叉为不适当的一部分,并且因此,如果辨识出这个部分,则不需要具有另外的停止交叉指令。
[0049]在一些实施例中,数据处理设备进一步包括标记数据存储,该存储器用于存储指示来自所述先前的和后来的矢量数据访问指令的数据访问可以被交叉至有限程度的标记值,所述矢量数据访问单元包括用以检测所述标记值的检测器。
[0050]如之前所指出,具有标记值以指示数据访问可以被交叉可能是适当的。
[0051]在这样的情况下,异常可以清除这个标记值,因为异常将会指示正在处理代码的不同部分,并且在代码的这个不同部分中使数据访问交叉可能不再适当,并且因此,在发生异常时清除标记将会使得操作能够保持安全。
[0052]本发明的第三方面提供了一种编译计算机程序的方法,所述方法包括:
[0053]分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问;
[0054]在以下情况下在所述程序内识别第一矢量数据访问指令和第二数据矢量指令:来自所述第一和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误;
[0055]在所述计算机程序中在所述第一矢量数据访问指令之前插入开始有限交叉指令,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一和第二矢量数据访问指令的数据访问可以被交叉至有限程度;
[0056]所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及[0057]将所述计算机程序转变成适用于在数据处理系统上执行的代码。
[0058]可以在编译阶段将可以发生交叉的指示插入至所述代码中。在此阶段,分析代码并且可以确定:交叉是适当的。在这样的情况下,编译器可以生成开始有限交叉指令,该指令可以被插入至代码中以向处理器指示:可以发生有限交叉。
[0059]在一些实施例中,所述开始有限交叉指令包括所述预定值。
[0060]安全的交叉量将取决于代码,并且因此,对于编译器来说可能适当的是:将可能的交叉的程度的指示插入至开始有限交叉指令中。
[0061]在一些实施例中,所述编译的方法包括另外的步骤:在所述所识别的矢量数据访问指令之后插入停止有限交叉指令。
[0062]至于开始交叉指令,当编译代码时,可以确定何处交叉是适当的,并且在必要时插入停止指令。
[0063]在可以被交叉的第一和第二矢量数据访问指令是在循环内的情况下,则开始和停止交叉指令可以被布置在许多位置中。例如,可以在循环之前或该循环内生成开始交叉指令,而在该循环内或该循环外生成停止交叉指令。
[0064]在其中在计算机程序内识别了反向分支的其他实施例中,这些反向分支是可以被处理系统理解的,以指示在仅有开始交叉指令被插入至代码中的情况下应停止交叉,并且在反向分支定位在所述交叉区域的末端处的情况下不应停止交叉指令。
[0065]根据本发明的第四方面,提供了一种用于编译计算机程序的编译器,该编译器包括:分析电路,该分析电路用于分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,其中所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问;在以下情况下在所述程序内识别第一矢量数据访问指令和第二数据矢量指令:来自所述第一和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误;指令生成电路,该指令生成电路用于生成开始有限交叉指令,并且用于在所述计算机程序中在所述第一矢量数据访问指令之前插入所述开始有限交叉指令,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一和第二矢量数据访问指令的数据访问可以被交叉至有限程度;所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及转变电路,该转变电路用于将所述计算机程序转变成适用于在数据处理系统上执行的代码。
[0066]根据本发明的第五方面,提供了一种方法,该方法响应于至少两个矢量数据访问指令并且响应于由所述矢量数据访问指令所指定的数据访问可以被交叉至一定程度的指示,向数据存储发出数据访问请求,其中所述矢量数据访问指令中的每一个列出要被执行的多个顺序数据访问,所述方法包括以下步骤:针对所述至少两个矢量数据访问指令中的每一个,确定所述多个顺序数据访问中的哪一个是要被执行的下次数据访问;针对要被执行的所述下次数据访问中的每一个,确定所述下次数据访问与所述其他下次数据访问相比在所述矢量数据访问指令中的所述多个顺序数据访问的所述列表中的相对位置;取决于所述相对位置,从所述至少两个矢量数据访问指令中的任一个选择要被发出的所述下次数据访问中的一个作为对所述数据存储的下次访问,以使得来自所述先前的和后来的矢量数据访问指令的前者的数据访问不是在在所述先前的和后来的矢量数据访问请求的后者的顺序访问的所述列表中处于对应位置的访问之后被发出。
[0067]根据本发明的第六方面,提供了一种包括开始有限交叉指令和后续的第一和第二矢量数据访问指令的计算机程序产品,所述开始有限交叉指令在由数据处理器执行时,控制所述数据处理器开始由所述第一和第二后续矢量数据访问指令所指定的数据访问的有限交叉指令,以使得响应于所述第一和第二矢量数据访问指令而被执行的访问可以被交叉至有限程度;所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问。
[0068]根据本发明的第七方面,提供了一种以非暂态方式存储以下计算机程序的计算机程序产品,该计算机程序用于控制计算机为对应于根据本发明的第一方面的数据处理设备的程序指令提供虚拟机器执行环境。
[0069]从以下要被结合附图阅读的对说明性实施例的详细描述将会显见本发明的以上及其他目标、特征以及优点。
【专利附图】

【附图说明】
[0070]图1示出了用于其中不允许交叉的双发出处理器中的两个矢量指令的数据访问的时序;
[0071]图2示出了根据本发明的一个实施例的数据处理设备的一部分;
[0072]图3示出了根据本发明的一个实施例的矢量加载存储单元;
[0073]图4示出了根据本发明的一个实施例的用于访问存储在多个存储器库中的数据的多矢量加载/存储单元;
[0074]图5示出了根据本发明的一个实施例的用于访问多个存储器库的多矢量加载存储单元;
[0075]图6a示出了根据本发明的一个实施例的一种编译程序的方法中的步骤;
[0076]图6b示出了根据本发明的一个实施例的编译器;
[0077]图7示出了根据本发明的一个实施例的允许一些缓存访问的联合的多矢量存储单元;
[0078]图8a示出了来自其中执行联合的图7的多矢量加载存储单元的数据访问;
[0079]图Sb示出了在指令之间和之内发生联合的情况下的数据访问;并且
[0080]图9示出了安全或不安全地交叉的图1中所示的矢量访问指令;
[0081]图10示出了图1中所示的矢量访问指令的联合的访问模式;
[0082]图11示出了另外的联合的访问模式;
[0083]图12示出了联组的访问模式;
[0084]图13示出了另外的联组的访问模式;[0085]图14示出了不安全联组的访问模式;并且
[0086]图15示出了安全交叉联组的访问模式;并且
[0087]图16示出了根据本发明的一个实施例的虚拟机器实现方式。
【具体实施方式】
[0088]图2示出了根据本发明的一个实施例的数据处理设备5的一部分。该图仅示出了矢量处理部分,并且还可能存在标量处理电路、标量加载/存储单元以及标量寄存器库,以使得可以解码并执行矢量和标量指令二者。
[0089]在这个设备中存在:保存要被处理的指令的指令队列30、用于解码这些指令的解码电路40以及用于处理由解码电路40解码的矢量指令的矢量处理电路50。在这个实施例中,还存在存储用于矢量处理电路的控制值的矢量控制寄存器60。这些控制值可以呈用于使得矢量指令能够仅应用于某些矢量操作数的掩码的形式,或它们可以是控制矢量处理的其他控制值。
[0090]在这个实施例中,还存在矢量加载存储单元10,该单元用于接收矢量数据访问指令,并且用于响应于这些访问指令而执行对存储器系统的访问。还存在用于存储在处理矢量指令中所使用的矢量的矢量寄存器库70。
[0091]因此,例如,如果矢量数据访问指令被解码,则这个矢量寄存器库可以引用要被访问的多个地址,并且这些地址可以存储在矢量寄存器库70内的矢量中。类似地,对应于多个地址的多个数据元素也将存储在矢量寄存器库70内的矢量中。
[0092]在这个实施例中,还存在由矢量处理电路响应于检测到其中访问可以与彼此交叉至一定程度的矢量数据访问指令而设置的标记80。因此,在处理期间,当检测到这类指令时,设置标记;并且当这类指令已经由矢量加载存储单元10执行和要被执行不允许交叉的其他指令时,清除标记。以这种方式,矢量加载存储单元知道来自不同矢量访问指令的单独访问是可以交叉至有限程度还是完全不能交叉。
[0093]这个标记可以称为已核实地址状态标记,当其被设置时,该标记指示一些交叉可以在要被访问的地址遵守某些规则时发生。
[0094]虽然对交叉的约束可以多种方式来表达,一种方式是:考虑是与第一矢量的元素号“j”相关的第一元素访问还是与第二矢量的元素号“k”相关的第二元素访问。对交叉的最简单约束之一是:如果j小于k(j〈k),则第一元素访问必须总是在第二元素访问之前被执行,但是如果j大于或等于k,则可以颠倒顺序(即,第二元素访问可以在第一元素访问之前被执行)。在本文件中,我们通过假设交叉必须满足“j〈k”约束来描述这个约束。
[0095]为简化用于异常处理的支持件,可以在发生异常时清除已核实地址状态标记。(这将禁用最优化直到再次设置该标记,因此,在遇见异常时保留已核实地址状态标记与性能之间存在权衡。)
[0096]标记可以由指令流内的开始和停止指令来设置,这些指令通过设置标记来指示现在可以发生交叉。这些指令可以是单独的指令或它们可以与其他指令组合。例如,可以将反向分支看作停止指令,并因此清除标记。
[0097]此外,因为一个循环迭代的开始也是先前的循环迭代的结束,所以在循环中可能有用的是使开始和停止指令组合成单个指令。这表现得像循环迭代之间的界线,其指示在不执行依赖性核实的情况下,不能安全地对来自不同循环迭代的元素访问进行重新排序。
[0098]开始指令可以指示合法重新排序的不同模式。例如,代替如以上要求“j〈k”,该开始指令可以指示:如果“j〈 = k”,则可以对元素访问进行重新排序,或更普遍地,对于某一常数“d”,如果“j〈k+d”,则可以对元素访问进行重新排序。(如果循环包括像=A[i+d] ;A[i]=”的代码,则发生这种模式。)如果是这种情况,那么需要有用于这个常数“d”的存储器,并且该存储器示出为图3中的存储器85。
[0099]代替使用开始和停止指令,可以使用“部分界线”。鉴于常规界线阻止对界线两侧的元素访问进行重新排序,如果“ j〈k”,“部分界线”阻止对元素访问进行重新排序。
[0100]代替使用开始和停止指令,我们可以具有设置当前“界线状态”的指令。界线状态可以是“完整、部分或无”中的一种。当前界线状态通过在存储器访问之前插入隐性界线或部分界线或无界线来影响所有后续存储器访问。将当前界线状态设置成“部分”表现得像开始指令,并且将当前界线状态设置成“完整”表现得像停止指令。
[0101]图3更详细地示出了图2的矢量加载存储单元10。在这个矢量加载存储单元存储器在比较电路57,该比较电路用于对从两个未决矢量数据访问指令接收的索引值12和14进行比较,索引值指示特定数据访问请求在对应指令内的元素位置。还存在选择电路58,该选择电路取决于比较结果来选择要被发出的下次数据访问请求。
[0102]矢量加载存储单元10还包括标记值存储器80,该存储器用于存储由处理器设置的标记值,并且在被设置时向LSUlO指示:由两个矢量数据访问指令所指定的单独的数据访问可以交叉至一定程度。单独的数据访问可以交叉的程度由存储在预定值存储器85中的值来确定。这个值由解码器设置,并且提供交叉程度的指示。
[0103]在这个实例中,标记80被设置,因此允许交叉,并且存储器85中的预定值为零。这指示来自两个矢量数据访问指令的数据访问可以交叉的程度是来自第二数据访问指令的访问不可赶上来自第一数据访问指令的对应访问的程度。换句话说,索引I (指示来自第一矢量数据访问指令的当前未决数据访问在所述指令内的位置)必须大于索引2(指示来自第二矢量数据访问指令的当前未决数据访问在所述指令内的位置)。如果满足了这个约束,那么向存储器发出来自第二指令的数据访问;如果未满足,那么向存储器发出来自第一指令的数据访问。
[0104]因此,访问进行,并且索引计数器12和14随着来自它们对应指令的访问被执行而增量。因此,如果索引I和索引2初始为0,那么比较电路57将会确定两个值是相等的,并且因此未满足索引I大于索引2的要求,并且选择电路58因此选择来自指令I的数据访问,并且用于指令I的地址O随数据访问被发出,并且索引I的值增量。然后,对两个索引值的比较发现索引I大于索引2,并且因此,满足来自指令2的访问索引必须小于来自指令I的访问索引的约束,并且尽管然后在理论上可进行选择,但是优先地选择来自指令2的访问。因此,来自指令2的地址O用于访问下一个数据元素。应注意,如果这个加载存储单元可以在单个周期中访问两个指令,那么这两个指令将会在第一周期中被选择并且一起被执行。矢量加载存储单元以这种方式继续选择要被执行的访问。以这种方式,在类似时间处理该两个指令并且减少指令2的等待时间。
[0105]如先前所指出,存在用于存储值的预定值存储器85。在先前所描述的实施例中,选择标准仅仅是:来自第二指令的访问不可赶上第一指令,并且因此这个值被设置成零。然而,在一些情况下,可以存在不同要求,并且如果情况是这样,则预定值85存储不同预定值,并且选择标准可以是:索引2与索引I之间的差应小于这个所存储的预定值。假设满足了这个标准,那么可以选择访问中的任一个,但是优先地选择来自后来的指令的数据访问。
[0106]图5示出了根据本发明的一个实施例的用于访问存储在多个存储器库中的数据的多矢量加载/存储单元。在这方面,具有聚集分散矢量存储器访问指令的程序可以具有高地址带宽(即,每周期可以向存储器系统呈现许多地址),并且因此,受益于每周期可执行多个访问的存储器系统。这经常通过以下来实现:将存储器系统分成许多独立地可访问的库并且布置地址映射,以使得矢量存储器访问通常将会访问多个库,从而允许访问与彼此并行地被执行。这种联组可应用于存储器系统的若干不同部分:TLB、LI缓存、L2缓存、DRAM控制器等。
[0107]在图5中,矢量加载存储单元10包括两个部件15和17,第一部件15响应于第一矢量数据访问指令而访问数据,并且第二部件17响应于第二矢量数据访问指令而访问数据。
[0108]这些部件15、17 二者分别具有寄存器存储器25和27,这些寄存器存储器用于存储未决矢量数据访问指令的地址元素并且用于存储对应于这些访问指令的数据。因此,如果未决指令是写入指令,则要被由写入指令所存储的数据将会保留在寄存器内。而如果未决指令是读出指令,则在寄存器存储器在用于存储所读出的数据的空间。
[0109]在每个部件中还存在库比较器35和37,库比较器分析要被访问的数据元素的地址并且确定要被从该地址访问存储器库100、102、104以及107中的哪一个存储器库。
[0110]因此,第一矢量数据访问指令在矢量加载存储单元部件15处被接收并且存储在寄存器25中。第二矢量数据访问指令在矢量加载存储单元部件17处被接收并且存储在寄存器27中。在这个实例中,这些指令都是写入指令。
[0111]索引计数器45和47分别初始地设置成0,并且访问寄存器25和27中对应于这些矢量访问请求的第一地址元素,并且确定该地址处于哪一个库内。比较单元57对两个索引进行比较,并将结果发送至库访问控制单元90。除了访问由索引47所指定的地址元素之夕卜,还访问矢量加载存储单元15中的下一个地址元素,以便确定所指定的地址元素处于哪一个库中。这个信息的全部被提供给确定应将哪些访问传输至存储器系统的库访问控制单元90。
[0112]图4更详细地示出了图5的库访问控制单元90。如以上所指出,在这个单元处接收来自两个加载存储单元部件15、17的信号。在这个实例中,存在由库访问控制单元90考虑的三个未决访问请求,这些信号各自包括地址、与地址相关的数据以及该地址是读出的还是写入的指示。这三个信号包括用于来自从第一矢量加载存储单元部件15所接收的第一矢量数据访问指令的元素a]和aj+1的两个数据访问请求,和来自从第二矢量加载存储单元部件17所接收的第二矢量数据访问指令的一个数据访问请求bk。
[0113]还发送指示要被在哪一个库中找到这些地址的额外信息。针对每个库,由比较电路109将此额外信息与库ID进行比较,并且确定对于所述库来说哪些访问是未决的。如果仅存在一个访问对于特定库来说是未决的,那么将所述访问传输至所述库并且允许所述访问进行。
[0114]然而,如果存在多于一个访问对于一个库来说是未决的,那么访问优先次序电路95确定要被选择哪一个访问将首先被执行。该电路响应于来自加载/存储单元10内的比较电路57的信号来对此进行确定。这个比较电路确定k是否小于j。如果k小于j,那么可以选择并且选择bk。如果k不小于j,那么来自第二数据访问指令的访问实际上已经追上来自第一矢量数据访问指令的访问,并且它们需要被禁止一段时间,直到第一矢量数据访问指令再次领先。在这种情况下,访问\_被给予优先次序。在\_不与bk去往同一库而aJ+1却去往这个库的情况下,则优先次序电路95将会基于k是否小于j+Ι来确定选择哪一个访问。如果k小于J+1,则可以选择bk。然而,如果j+1小于k,则访问aj+1将会具有优先次序。
[0115]以这种方式,在特定周期期间,库可以彼此独立地被访问,并且不在去往不同库的访问之间强制执行、而是对去往同一库的访问强制执行通常强制执行的约束。这清楚地允许执行更多访问,但是却具有另外的比较和控制电路的开销。
[0116]总之,安全地交叉库内的访问的存储器系统的简单实现由以下各项组成:
[0117]-指示代码块的开始和结束的一对新指令
[0118]-加载存储单元
[0119]O具有指示该加载存储单元是否正在以“已核实地址状态”执行的标记
[0120]O该加载存储单元在遇到开始指令时设置该标记,并且在遇到结束指令时清除该
己 O
[0121]ο具有各自包括以下各项的两个矢量存储器单元(VMU):
[0122].指示下一个要被访问哪一个元素的元素索引j或k
[0123].指示VMU正在执行读出、写入还是闲置的标记
[0124].高达2个未决元素访问的缓冲区,其由地址组成,和如果访问是写入,还包括每个未决元素访问的值。
[0125]?对未决元素访问的数量的计数
[0126].用于每个未决元素访问的库识别逻辑
[0127]ο具有用以比较两个VMU中的元素索引的比较器
[0128]O具有四个库,各自包括:
[0129].用以从任何VMU中选择任何未决元素访问的复用器
[0130].如下用以选择未决元素访问[aj,a (j+1)]和[bk, b (k+1)]的控制逻辑:
[0131]?如果 j〈k:
[0132]ο如果aj和bk都是用于这个库,则选择bk
[0133]ο否则,不对这个库执行访问
[0134]?如果 j> = k:
[0135]ο如果aj和bk都是用于这个库,则选择bk
[0136]ο如果aj用于这个库并且bk用于一个不同库,贝U选择aj
[0137]ο如果bk用于这个库并且aj用于一个不同库,则选择bk
[0138]ο如果aj和bk用于不同库:
[0139].如果a (j+1)用于这个库,则选择a (j+1)
[0140]?否则,不对这个库执行访问
[0141]ο具有用以根据从每个VMU中所选择的访问的数量来更新j和k[0142]的值的逻辑。
[0143]这种实现可以各种方式来改进,包括将其与稍后所描述的联合实现方式结合,这样使得可以将对同一库的访问联合成单个访问。
[0144]图6a示出了一个流程图,其示出一种用于编译矢量化代码的方法。在这个实施例中,编译器辨识计算机程序中的包括标量指令的循环,并且将这些标量指令转换成矢量指令。该编译器辨识到,使循环矢量化的任务包括:执行分析以确定存在哪些存储器依赖性。所以,如果编译器成功地使该循环矢量化,则该编译器已经知道:矢量化的循环内的存储器访问并不冲突。因此,编译器意识到可以发生数据访问的交叉,并且为了向处理代码的处理系统指示可以发生该交叉,该编译器在循环本体的开始生成开始指令并且在循环本体的结尾生成结束指令。
[0145]可以各种方式来改善这个基本方案:
[0146]在一些情况下,编译器可以插入指示合法重新排序的不同模式的已修改开始指令。例如,如果该编译器确定:代码块内部所执行的所有访问去往不同地址,那么该编译器可以发射以下开始指令,该开始指令指示:满足约束“j〈 = k”的重新排序是正确的或任何重新排序是正确的。
[0147]在US2008 / 0288754中公开了一种“CheckHazard”指令,其测试两个矢量以确定一个矢量的位置j中的任何地址是否与另一个矢量的某一位置k(j〈k)中的任何地址重叠。这个指令可以用于动态地测试(并处理)将会阻止使循环矢量化的任何重叠。这个指令尤其良好地与本发明的实施例进行工作,因为实际上,该指令执行测试以核实交叉是否可能。还存在检查位置以使得j〈 = k的CheckHazardX指令。因此,在这个指令已经用于测试代码的情况下,可以通过设置标记或通过使用开始有限交叉指令来向数据处理系统提供访问可以交叉的指示。
[0148]尽管编译器可以由软件形成,但是在一些情况下,编译器可以由硬件形成。图6b示意性地示出了硬件编译器,其中向分析电路输入指令流,在该分析电路处分析指令流并识别循环并且形成矢量代码。还识别代码的其中这类矢量交叉的部分,并且将开始和停止指令插入至代码中,该代码然后由转变电路转变成可以由处理电路执行的代码。
[0149]图7示出了访问同一缓存的两个矢量加载存储单元如何可以具有允许它们的访问联合的另外的控制电路的实例。在这方面,图7示意性地示出了两个矢量加载存储单元15和17,这两个单元具有:相关控制电路,该相关控制电路起作用以对来自每个加载存储单元的访问的索引进行比较,以核实未破坏任何交叉规则;以及联合电路59,该联合电路核实未决数据访问的地址,并且在它们去往同一线并且使它们联合将不会破坏交叉规则的情况下,将它们联合成单个访问。
[0150]联合去往同一缓存线的访问以便既提高性能又减少能量是有利的。在矢量访问中,联合通常在单个矢量访问内执行以在矢量内开拓局部性,但是联合对于在两个矢量访问中的对应元素位置之间存在显著局部性是常见的。例如,使包括这两个语句的循环矢量化:
[0151]A[i] [j].X = p ;
[0152]A[i][j].y = q;
[0153]将会产生包括两个矢量存储指令的循环,并且在该循环的给定迭代中,第一矢量存储指令可以写到地址:[1000,2000,3000,4000,...],而第二矢量存储指令写到[1004,2004,3004,4004,...]。在这种情况下,在每个矢量访问内不存在局部性,但是在矢量访问之间存在相当大的局部性,并且理想地,访问将会以顺序[1000,1004,2000, 2004,3000,3004,4000,4004,...]来执行。
[0154]这允许访问联合成如示出具有访问a0和bO联合成单个访问的联合的访问模式的图8a中所示的单个访问。
[0155]事实上,在矢量访问内以及矢量访问之间可以找到空间局部性。例如,第一矢量访问可以访问地址为[1000,1008,1016,1024,...]的元素,而第二矢量访问可以访问地址为[1004,1012,1020,1028,...]的元素。在这种情况下,所希望的是联合矢量访问内的元素访问并且联合矢量访问之间的访问。其中来自第一矢量操作的多对元素访问与来自第二矢量操作的多对元素访问联合的图8b中示出了这种情况。与没有联合的16个周期或如果联合仅出现在矢量之间或矢量之内的8个周期相比,这在4个周期中执行。
[0156]以下给出如何可以使代码矢量化和交叉如何可以提高性能的一些简单实例。
[0157]顺序代码(矢量化之前)
[0158]
【权利要求】
1.一种用于响应于已解码矢量数据访问指令来访问存储在数据存储内的数据的矢量数据访问单元,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示所要执行的数据访问,所述多个元素在所述矢量数据访问指令内处于一定顺序,其所对应数据访问被指令以该顺序进行执行; 所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,响应于接收到至少两个已解码矢量数据访问指令以及响应于来自所述至少两个已解码矢量数据访问指令的数据访问能够被交叉至有限程度的指示,其中所述至少两个已解码矢量数据访问指令中的前者在所述至少两个已解码矢量指令中的后者之前被接收,并且所述至少两个已解码矢量数据访问指令中的一个是写入指令,所述数据访问排序电路被配置为: 针对至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中要针对所述矢量数据访问指令被执行的下次数据访问,所述数据访问以所指令的顺序被执行; 针对所述矢量数据访问指令中的每一个,确定指示了所述下次数据访问的元素; 依据至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们相应的多个元素内的位置,选择所述下次数据访问中的一个作为向所述数据存储发出的下次数据访问,其约束是:在所述矢量数据访问指令中的后者的所述多个元素内指示所述下次数据访问的所述元素的数值位置与在先前的矢量访问数据指令的所述多个元素内指示所述下次数据访问的所述元素的数值位置之间的差小于预定值。
2.根据权利要求1所述的矢量数据访问单元,其中所述约束还包括:来自所述先前的矢量数据访问指令的元素所指示的数据访问请求不是在后来的矢量数据访问指令中位于所述多个元素中的相应位置处的元素所指示的数据访问请求之后被发出的。
3.根据任一前述权利要求所述的矢量数据访问单元,其中所述数据访问排序电路被配置用于:如果满足所述约束,优先于来自所述先前的矢量数据访问指令的所述下次数据访问请求,选择来自所述后来的矢量数据访问指令的所述下次数据访问请求作为要发出的下次数据访问请求。
4.根据任一前述权利要求所述的矢量数据访问单元,其中所述数据访问排序电路被配置为:在同一时钟周期中彼此并行地发出至少两个数据访问请求; 所述数据访问排序电路被配置为:选择所述下次访问和至少一个另外的数据访问来并行地发出,所述至少一个另外的数据访问请求是以下各项中的至少一项: 由所述矢量数据访问指令中继指示所述下次访问的所述元素之后的元素所指示的至少一个数据访问;以及 来自所述矢量数据访问指令中的不包括指示了所述下次访问的所述元素的一个矢量数据访问指令的所述下次访问中的至少一个; 依据与选择所述下次数据访问相同的约束来选择的所述至少一个另外的数据访问。
5.根据任一前述权利要求所述的矢量数据访问单元,其中所述要访问的数据存储包括多库存储器中的一个库。
6.根据权利要求4所述的矢量数据访问单元,其中所述数据存储包括多个存储器库,每库与 其他库独立,其中所述数据访问排序电路被配置为:在选择所述至少一个另外的数据访问时,不将所述约束施加到在同一时钟周期中为不同库选择的访问之间的访问上。
7.根据任一前述权利要求所述的矢量数据访问单元,包括彼此并行布置的至少两个矢量数据访问模块,各自被配置为接收所述至少两个矢量数据访问指令中的相应的一个,所述数据访问排序电路包括: 所述矢量数据访问模块中的每一个中的计数器,所述计数器用于存储对于对应的矢量数据访问指令中指示所述下次数据访问的所述元素的所述位置的指示;以及 用于比较所述计数器的值的比较电路;与所述矢量数据访问模块中的每个相关联以发出下次数据访问请求的发出电路; 所述数据访问电路被配置为:响应 于所述比较电路指示如果发出所述下次数据访问请求,则将不会满足所述约束,而向所述矢量数据访问模块中的一个的发出电路发送信号,该信号阻止由该模块发出所述下次数据访问请求。
8.根据权利要求1至6中任一项所述的矢量数据访问单元,包括彼此并行布置的至少两个矢量数据访问模块,各自被配置为接收所述至少两个矢量数据访问指令中的相应的一个,并且其中所述数据存储包括缓存,所述缓存包括多个缓存线,所述缓存线中的每一个存储多个数据项,所述数据访问排序电路包括: 检测电路,该检测电路用于确定来自所述矢量数据访问模块的要在同一时钟周期中被执行的数据访问请求是否去往同一缓存线,并且响应于确定这些数据访问请求去往同一缓存线,对所述数据访问进行组合以使得所述数据访问作为同一数据访问被执行。
9.根据任一前述权利要求所述的矢量数据访问单元,其中所述至少两个矢量数据访问指令包括矢量加载指令和矢量存储指令中的至少两个,所述矢量数据访问单元还包括: 矢量寄存器存储,所述矢量寄存器存储用于存储各自包括多个矢量操作数的多个矢量,所述矢量中的至少两个包括多个地址,所述地址指示由所述至少两个矢量数据访问指令中的相应的一个所指示的所述多个数据访问的数据存储位置。
10.一种用于处理数据的数据处理设备,包括: 用于提取要被处理的指令的提取电路; 用于对所述指令进行解码的解码电路; 被配置为响应于已解码指令而执行操作的处理电路;以及 如任一前述权利要求所述的矢量数据访问单元,所述矢量数据访问单元用于响应于矢量数据访问指令对要被处理的数据进行访问。
11.根据权利要求10所述的数据处理设备, 其中所述解码电路被配置为:响应于指示允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自先前和后来的矢量数据访问指令的数据访问能够进行有限程度的交叉。
12.根据权利要求10或11所述的数据处理设备,其中指示允许有限交叉的所述指令包括以下各项中的至少一个:矢量加载指令、矢量存储指令、开始有限交叉指令、用于设置有限交叉标记的指令以及用于设置矢量控制寄存器的指令。
13.根据权利要求12所述的数据处理设备,其中指示允许有限交叉的所述指令包括所述开始有限交叉指令,并且所述开始有限交叉指令包括指示交叉的程度的预定值。
14.根据权利要求11所述的数据处理设备,其中所述解码电路被配置为:响应于指示不再允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自矢量数据访问指令的数据访问不能进行有限程度的交叉。
15.根据权利要求14所述的数据处理设备,其中指示不再允许有限交叉的所述指令包括所述停止有限交叉指令和反向分支指令中的至少一个。
16.根据权利要求10至15中任一项所述的数据处理设备,还包括标记数据存储,所述标记数据存储用于存储指示来自所述先前的和后来的矢量数据访问指令的数据访问能够进行有限程度的交叉的标记值,所述矢量数据访问单元包括检测所述标记值的检测器。
17.根据权利要求16所述的数据处理设备,所述数据处理设备响应于发生异常而被配置为清除所述标记值。
18.—种编译计算机程序的方法,包括: 分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个规定了多个元素,所述元素中的每一个指示要被执行的数据访问; 在程序内识别第一矢量数据访问指令和第二数据矢量访问指令,其中对于来自所述第一矢量数据访问指令和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误; 先于所述第一矢量数据访问指令将开始有限交叉指令插入到所述计算机程序中,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一矢量数据访问指令和第二矢量数据访问指令的数据访问能够被交叉至有限程度; 所述有限程度是,如果从第一数据访问指令中指示下次数据访问的元素的数值位置中减去所述第二矢量数据访问指令的所述多个元素内指示下次数据访问的元素的数值位置小于预定值,则发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:并且如果其不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及 将所述计算机程序转变成适用于在数据处理系统上执行的代码。
19.根据权利要求18所述的编译计算机程序的方法,包括初始分析步骤,该初始分析步骤识别所述计算机程序内的循环并且将所述循环内的标量指令转换成矢量指令。
20.根据权利要求18或19所述的编译计算机程序的方法,其中所述开始有限交叉指令包括所述预定值。
21.根据权利要求18至20中任一项所述的编译计算机程序的方法,其中识别所述第一矢量数据访问指令和第二矢量数据访问指令的步骤包括:在对于来自所述第一矢量数据访问指令、第二矢量数据访问指令和至少一个另外的矢量数据访问指令的数据访问的有限交叉不会引起数据错误的情况下,识别至少一个另外的矢量数据访问指令:;并且 所述有限程度是,如果从先前的矢量数据访问指令中的一个的指示下次数据访问的元素的数值位置中减去后来的矢量数据访问指令的所述多个元素内指示下次数据访问的元素的数值位置小于预定值,则发出由来自所识别的矢量数据访问指令中在所述计算机程序代码中后来发生的一个矢量数据访问指令的元素所指示的下次数据访问;并且如果其不小于所述预定值,则发出来自所述先前的矢量数据访问指令的数据访问。
22.根据权利要求18至21中任一项所述的编译计算机程序的方法,包括另一步骤:在所述所识别的矢量数据访问指令之后插入停止有限交叉指令。
23.根据权利要求18至22中任一项所述的编译计算机程序的方法,包括另一步骤:分析所述指令并识别所述计算机程序内的反向分支,并且在所述反向分支位于所述交叉区域的末端的情况下,仅插入开始交叉指令而不插入停止交叉指令。
24.一种用于编译计算机程序的编译器,包括:分析电路,所述分析电路用于分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个规定多个元素,所述元素中的每一个指示要被执行的数据访问;在所述程序内识别第一矢量数据访问指令和第二矢量数据访问指令,其中对于来自所述第一矢量数据访问指令和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误; 指令生成电路,所述指令生成电路用于生成开始有限交叉指令,并且用于先于所述第一矢量数据访问指令将所述开始有限交叉指令插入所述计算机程序,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一和第二矢量数据访问指令的数据访问能够进行有限程度的交叉; 所述有限程度是,如果从第一数据访问指令中指示下次数据访问的元素的数值位置中减去所述第二矢量数据访问指令的所述多个元素内指示下次数据访问的元素的数值位置小于预定值,则发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:并且如果其不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及 将所述计算机程序转变成适用于在数据处理系统上执行的代码。
25.一种方法,所述方法响应于至少两个矢量数据访问指令并且响应于由矢量数据访问指令规定的数据访问能够进行一定程度的交叉,而向数据存储发出数据访问请求,其中所述矢量数据访问指令中的每一个列出要被执行的多个顺序数据访问,所述方法包括以下步骤: 针对所述至少两个矢量数据访问指令中的每一个,确定所述多个顺序数据访问中要被执行的下次数据访问; 针对要被执行的所述下次数据访问中的每一个,确定所述下次数据访问与其他下次数据访问相比在所述矢量数据访问指令中的所述多个顺序数据访问的列表内的相对位置; 依据所述相对位置,从所述至少两个矢量数据访问指令之一中选择要被发出的所述下次数据访问中的一个作为去往所述数据存储的下次访问,以使得来自所述先前的和后来的矢量数据访问指令的前者的数据访问不是在在所述先前的和后来的矢量数据访问请求的后者的顺序访问的所述列表中处于对应位置处的访问之后被发出。
26.一种以非暂态形式存储计算机程序的计算机程序产品,所述计算机程序包括开始有限交叉指令和后续的第一和第二矢量数据访问指令,所述开始有限交叉指令在由数据处理器执行时,控制所述数据处理器开始由所述第一和后续的第二矢量数据访问指令所规定的数据访问的有限交叉指令,以使得响应于所述第一和第二矢量数据访问指令而被执行的访问能够进行有限程度的交叉; 所述有限程度是,如果从第一数据访问指令中指示下次数据访问的元素的数值位置中减去所述第二矢量数据访问指令的所述多个元素内指示下次数据访问的元素的数值位置小于预定值,则发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:并且如果其不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问。
27.一种以非暂态形式存储计算机程序的计算机程序产品,所述计算机程序用于控制计算机为对应于如权利要求10至17 中任一项所述的数据处理设备的程序指令提供虚拟机器执行环境。
【文档编号】G06F9/30GK103930883SQ201280047433
【公开日】2014年7月16日 申请日期:2012年9月26日 优先权日:2011年9月28日
【发明者】阿拉斯塔尔·大卫·瑞德 申请人:Arm 有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1