CN103930883B - 用于响应于矢量访问指令的交叉数据访问的方法和装置 - Google Patents
用于响应于矢量访问指令的交叉数据访问的方法和装置 Download PDFInfo
- Publication number
- CN103930883B CN103930883B CN201280047433.1A CN201280047433A CN103930883B CN 103930883 B CN103930883 B CN 103930883B CN 201280047433 A CN201280047433 A CN 201280047433A CN 103930883 B CN103930883 B CN 103930883B
- Authority
- CN
- China
- Prior art keywords
- data access
- instruction
- access
- vector
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 239000013598 vector Substances 0.000 title claims abstract description 244
- 230000004044 response Effects 0.000 title claims abstract description 32
- 238000000034 method Methods 0.000 title claims description 32
- 230000015654 memory Effects 0.000 claims description 26
- 238000013500 data storage Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 claims description 18
- 238000012545 processing Methods 0.000 claims description 13
- 238000012360 testing method Methods 0.000 claims description 13
- 241001269238 Data Species 0.000 claims description 6
- 230000002159 abnormal effect Effects 0.000 claims description 5
- 230000002265 prevention Effects 0.000 claims description 3
- 238000000605 extraction Methods 0.000 claims description 2
- 238000002372 labelling Methods 0.000 description 31
- 238000013139 quantization Methods 0.000 description 16
- 238000004590 computer program Methods 0.000 description 15
- 230000008707 rearrangement Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000002349 favourable effect Effects 0.000 description 4
- 235000013399 edible fruits Nutrition 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004907 flux Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开了一种用于响应于已解码矢量数据访问指令而访问存储在数据存储内的数据的矢量数据访问单元。所述数量数据访问指令中的每一个包括指示要被执行的数据访问的多个元素,所述元素处于在所述矢量数据访问指令内处于一定顺序,对应数据访问被指挥以所述顺序在所述矢量数据访问指令内被执行。所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,所述数据访问排序电路被配置成:响应于接收到至少两个已解码矢量数据访问指令,所述至少两个已解码矢量数据访问指令中的前者在所述至少两个已解码矢量指令中的后者之前被接收,并且所述至少两个已解码矢量数据访问指令之一是写入指令,并且响应于来自所述至少两个已解码矢量数据访问指令的数据访问可以被交叉至有限程度的指示,用于:针对所述至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中的哪一个是下一个要被针对所述矢量数据访问指令来执行的数据访问,所述数据访问以所述被指挥的顺序被执行;针对所述矢量数据访问指令中的每一个来确定指示所述下次数据访问的元素;取决于所述至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们对应多个元素内的所述位置,选择所述下次数据访问中的一个作为要被向所述数据存储发出的下次数据访问,其约束条件是:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置与指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置之间的差小于预定值。
Description
技术领域
本发明涉及数据处理领域,并且更具体地涉及用于访问多个数据存储位置的矢量指令。
发明背景
一种用于改进数据处理设备的性能的已知技术是提供支持执行矢量操作的电路。对至少一个矢量操作数执行矢量操作,其中每个矢量操作数包括多个操作数元素。执行矢量操作涉及在(一个或多个)矢量操作数内的各个操作数元素上重复地应用操作。
在支持矢量操作的性能的典型数据处理系统中,将会提供矢量寄存器库(register bank)以用于存储矢量操作数。因此,例如,矢量寄存器库内的每一个矢量寄存器可以存储包括多个操作数元素的矢量操作数。
在高性能的实现方式中,还已知的是提供可以并行地对矢量操作数内的各个操作数元素执行所需要的矢量操作的矢量处理电路(通常称为SIMD(单指令多数据)处理电路)。在可替代实施例中,标量处理电路可以仍用于实施矢量操作,但是在这种情况下,矢量操作是通过经由标量处理电路迭代地执行一个操作来实施,其中每次迭代对矢量操作数的不同操作数元素进行操作。应注意,存在其中一些矢量元素可以被一起处理的中间实现方式。
矢量数据访问指令各自指挥多个数据访问。一般来说,处理设备将不能在单个周期中以与彼此并行的方式来执行由矢量访问指令所规定的所有数据访问,访问一般将需要若干周期。如果多个矢量数据访问指令正在被执行,那么如果可以使来自不同矢量数据访问指令的数据访问与彼此交叉,则可以提高访问速度。这是由于有机会将操作合并至这样的交叉所引入的有关地址,并且由于有可能发现另外的并行性。
在一些情况下,所执行的访问彼此完全独立,并且可以允许它们之间的交叉从而提高访问的速度。在其他情况下,它们可能并不彼此独立,并且因此,它们被约束成以指令流次序来执行。
图1示出了根据现有技术的用于访问地址a0至a7的矢量访问指令、之后是用于访问地址b0至b7的矢量访问指令的实例。在这些指令在其中不允许交叉并且其中在一个时钟周期中可以发出两个数据访问请求的系统中被处理的情况下,那么,数据访问请求b7将会在接收指令七个时钟周期后被发出。
将会希望的是,提供一种用于支持在还支持标量操作的数据处理设备内执行矢量操作的改进技术。
发明内容
从第一方面来看,本发明提供了一种用于响应于已解码矢量数据访问指令来访问存储在数据存储内的数据的矢量数据访问单元,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问,所述多个元素在所述矢量数据访问指令内处于一定顺序,所述对应数据访问被指挥以该顺序在所述矢量数据访问指令内被执行;所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,所述数据访问排序电路被配置成:响应于接收到至少两个已解码矢量数据访问指令,所述至少两个已解码矢量数据访问指令中的前者在所述至少两个已解码矢量指令中的后者之前被接收,并且所述至少两个已解码矢量数据访问指令之一是写入指令;并且响应于来自所述至少两个已解码矢量数据访问指令的数据访问可以被交叉至有限程度的指示,用于:针对所述至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中的哪一个是下一个要被针对所述矢量数据访问指令来执行的数据访问,所述数据访问以所述被指挥顺序被执行;针对所述矢量数据访问指令中的每一个来确定指示所述下次数据访问的元素;取决于所述至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们对应多个元素内的所述位置,选择所述下次数据访问中的一个作为要被向所述数据存储发出的下次数据访问,其约束条件是以下两项之间的差小于预定值:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置,和指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置。
本发明意识到,指定要被执行的多个数据访问的矢量指令可能需要若干周期来执行,并且如果可以执行不同矢量指令内的访问的交叉,则可能是有利的。例如,一般来说,有利的是在存储之前实行加载,因为处理器可能通常需要在其可以执行后续动作之前执行加载,并且因此减少加载的等待时间与减少存储的等待时间相比通常将会对性能具有更大影响。
然而,在交叉指令之前,人们需要知道这样做是安全的。这一般需要对访问进行地址比较以核实同一地址没有被正在被记录的访问请求中的任一个访问。地址一般相当长,并且因此,这些地址比较的执行是昂贵的。此外,地址比较的数量对于矢量操作来说是大的,因为单个矢量存储器操作可以使用八个不同地址。因此,能够缓冲/重新排序4个矢量存储器访问的矢量加载/存储单元将必须能够缓冲/重新排序32个地址。本发明意识到,矢量存储器访问可能能够被显著地重新排序,而无需确保安全性通常所需的大量的地址比较。具体来说,本发明意识到,在正确矢量化的循环中,数据访问免于RAW(写后读)和WAW(写后写)危害,并且因此,仅需要执行地址比较的一个子集来允许数据访问的安全交叉。
因此,本发明允许交叉,其条件是:指示所述下次数据访问的所述元素在所述矢量数据访问指令中的后者的所述多个元素内的数值位置,和指示所述下次数据访问的所述元素在先前的矢量访问数据指令的所述多个元素内的数值位置之间的差小于预定值,换句话说,来自后来的矢量数据访问指令的访问的进度受到先前的矢量数据访问指令的进度的约束。应注意,需要知道的是这两个数值位置的相对值,并且相对值可以通过减法或通过任何其他比较手段来确定。
在一些实施例中,所述约束进一步包括:由来自所述先前的矢量数据访问指令的元素所指示的数据访问请求不是在由定位在所述后来的矢量数据访问指令中的所述多个元素中的相应位置处的元素所指示的数据访问请求之后被发出。
该约束可以是:事实上现在允许后来的矢量数据访问指令部分地赶上先前的矢量数据访问指令。这意味着由一个指令所指挥的一些元素访问可以在由后续指令所指挥的元素访问之前或与其并行地被执行。
在一些实施例中,所述数据访问排序电路被配置用于:优先选择来自所述后来的矢量数据访问指令的所述下次数据访问请求作为所述要被发出的下次数据访问请求,而不是来自所述先前的矢量数据访问指令的所述下次数据访问请求,其条件是满足所述约束。
在满足该约束的情况下,排序电路可以优先选择来自后来的指令的数据访问请求,而不是来自先前的指令的数据访问请求。这加强交叉而不会引起危害。
在一些实施例中,所述数据访问排序电路被配置用于:在同一时钟周期中以与彼此并行的方式发出至少两个数据访问请求;所述数据访问排序电路被配置用于:选择所述下次访问和至少一个另外的数据访问来并行地发出,所述至少一个另外的数据访问请求是以下各项中的至少一项:
由所述矢量数据访问指令中继指示所述下次访问的所述元素之后的元素所指示的至少一个数据访问;以及
来自所述矢量数据访问指令中的不包括指示所述下次访问的所述元素的一个指令的所述下次访问中的至少一个;
取决于与所述下次数据访问被选择时相同的约束来选择所述至少一个另外的数据访问。
在可以并行地选择数据访问请求的情况下,则相同约束可以用于选择要被发出的两个数据访问请求。
在一些实施例中,所述要被访问的数据存储包括多存储器库的一个库。
数据存储可以是多存储器库内的库。在这样一种情况下,可以将存储器内的库看作各自具有它们自己的约束的单独的独立存储单元。如果情况是这样,则允许存储器访问并行地进行,从而允许更高的通量,尽管你确实具有分离和重新组合对不同库的访问的开销。因此,在一些实施例中,可能有利的是将多存储器库看作单个数据存储,而在其他实施例中,独立地看待每个库。
如以上所指出,在一些实施例中,所述数据存储包括存储器的多个库,而每个库独立于其他库,其中所述数据访问排序电路被配置成:在选择所述至少一个另外的数据访问时,不对在同一时钟周期中所选择的不同库的访问之间的访问施加所述约束。
当独立地看待库时,则不对不同库之间的访问施加约束,而仍对同一库的访问施加约束。
在一些实施例中,矢量数据访问单元包括与彼此并行地布置的至少两个矢量数据访问模块,每个模块被配置用于接收所述至少两个矢量数据访问指令中的对应的一个,所述数据访问排序电路包括:
所述矢量数据访问模块中的每一个中的计数器,该计数器用于存储所述对应矢量数据访问指令的指示所述下次数据访问的所述元素的所述位置的指示;以及
用于比较所述计数器的值的比较电路;
与所述矢量数据访问模块中的每一个相关的发出电路,该发出电路用于发出所述下次数据访问请求;
所述数据访问电路,所述数据访问电路被配置用于:响应于所述比较电路指示如果发出所述下次数据访问请求,则将不会满足所述约束,而向所述矢量数据访问模块之一的所述发出电路传输信号,从而阻止由所述模块发出所述下次数据访问请求。
在存在并行布置的矢量数据访问模块的情况下,则每个模块可以具有指示下次数据访问的元素在矢量内的位置的计数器,和用于比较这些计数器的比较电路。取决于确保满足所需要的约束的比较结果来发出被发出的下次数据访问请求。
在一些实施例中,矢量数据访问单元包括与彼此并行布置的至少两个矢量数据访问模块,模块各自被配置用于接收所述至少两个矢量数据访问指令中的对应的一个,并且其中所述数据存储包括缓存,缓存包括多个缓存线,所述缓存线中的每一个存储多个数据项,所述数据访问排序电路包括:
检测电路,该检测电路用于确定来自所述矢量数据访问模块的要被在同一时钟周期中执行的数据访问请求是否去往同一缓存线,并且响应于确定所述数据访问请求正在组合所述数据访问,以使得所述数据访问作为同一数据访问被执行。
可能有利的是在访问缓存时具有以下检测电路,该检测电路确定同一缓存线是否被来自不同矢量数据访问模块的访问请求访问。使访问交叉至一定程度的能力可以允许组合在一个程序流内彼此靠近出现并且去往同一缓存线的一些访问请求。访问缓存在功率上是昂贵的,并且如果同一缓存线将被两个数据访问请求访问,那么如果可以组合这些访问以形成单个访问,则将会是有利的。一些访问模式是这样以使得缓存线将有可能被后续访问请求访问,并且因此,使访问请求交叉的能力结合用以检测对同一缓存线的访问的检测电路在一些情况下可以在效率上提供显著改进。
在一些实施例中,所述至少两个矢量数据访问指令包括矢量加载指令和矢量存储指令中的至少两个,所述矢量数据访问单元进一步包括:
矢量寄存器存储器,其用于存储各自包括多个矢量操作数的多个矢量,所述矢量中的至少两个包括多个地址,所述地址指示由所述至少两个矢量数据访问指令中的对应一个所指示的所述多个数据访问的数据存储位置。
本发明的第二方面提供了一种用于处理数据的数据处理设备,该数据处理设备包括:用于提取要被处理的指令的提取电路;用于对所述指令进行解码的解码电路;被配置用于响应于所述已解码指令执行操作的处理电路;以及根据本发明的第一方面的所述矢量数据访问单元,该单元用于响应于矢量数据访问指令而访问要被处理的所述数据。
在一些实施例中,所述解码电路被配置成:响应于指示允许有限交叉的指令,用于向所述矢量数据访问单元提供以下所述指示:来自所述先前的和后来的矢量数据访问指令的数据访问可以进行有限程度的交叉。
具有被配置用于响应将会指示何处允许有限交叉的指令的解码电路可能是有利的。具有这样的指令允许矢量数据访问单元知道是否比较元素位置并且确定是否满足约束。如果不允许交叉,那么这类比较是不需要的并且不产生益处。存在指令流的一部分其中交叉是适当的并且其他部分其中交叉是不适当的。因此,这个指令可能是特别有利的。
在一些实施例中,指示允许有限交叉的所述指令包括以下各项中的至少一个:矢量加载指令、矢量存储指令、开始有限交叉指令、用于设置有限交叉标记的指令以及用于设置矢量控制寄存器的指令。
指示有限交叉的指令可以是指示这个指令或它可以是如矢量加载指令或矢量存储指令的指令的特殊指令。可能的是,一直可以交叉矢量加载和矢量存储,并且从而检测出这些中的一个是足以指示可以允许交叉。可替代地,在一些实施例中,存在标记,该标记被设置以指示该情况,并且因此,用于设置这个标记或用于设置矢量控制寄存器的指令可以是指示现在允许交叉的指令。
在一些实施例中,指示允许有限交叉的所述指令包括所述开始有限交叉指令,并且所述开始有限交叉指令包括指示交叉程度的所述预定值。
在指示允许有限交叉的指令是开始有限交叉指令的情况下,则这个指令可以包括指示交叉程度的预定值。这可能是有用的,因为指令流的一些区段可以允许一定量的交叉,而其他区段可以允许不同量的交叉。在指令内具有预定值允许为代码的不同区段执行不同量的交叉。
在一些实施例中,所述解码电路被配置用于:响应于指示不再允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自矢量数据访问指令的数据访问不能交叉至有限程度。
还可以存在以下指令,该指令指示不再允许有限交叉并且对元素位置的比较不再适当。
这个指令可以是停止有限交叉指令,或它可以是反向分支指令。
反向分支指令指示正在进入代码的其中交叉为不适当的一部分,并且因此,如果辨识出这个部分,则不需要具有另外的停止交叉指令。
在一些实施例中,数据处理设备进一步包括标记数据存储,该存储器用于存储指示来自所述先前的和后来的矢量数据访问指令的数据访问可以被交叉至有限程度的标记值,所述矢量数据访问单元包括用以检测所述标记值的检测器。
如之前所指出,具有标记值以指示数据访问可以被交叉可能是适当的。
在这样的情况下,异常可以清除这个标记值,因为异常将会指示正在处理代码的不同部分,并且在代码的这个不同部分中使数据访问交叉可能不再适当,并且因此,在发生异常时清除标记将会使得操作能够保持安全。
本发明的第三方面提供了一种编译计算机程序的方法,所述方法包括:
分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问;
在以下情况下在所述程序内识别第一矢量数据访问指令和第二数据矢量指令:来自所述第一和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误;
在所述计算机程序中在所述第一矢量数据访问指令之前插入开始有限交叉指令,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一和第二矢量数据访问指令的数据访问可以被交叉至有限程度;
所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及
将所述计算机程序转变成适用于在数据处理系统上执行的代码。
可以在编译阶段将可以发生交叉的指示插入至所述代码中。在此阶段,分析代码并且可以确定:交叉是适当的。在这样的情况下,编译器可以生成开始有限交叉指令,该指令可以被插入至代码中以向处理器指示:可以发生有限交叉。
在一些实施例中,所述开始有限交叉指令包括所述预定值。
安全的交叉量将取决于代码,并且因此,对于编译器来说可能适当的是:将可能的交叉的程度的指示插入至开始有限交叉指令中。
在一些实施例中,所述编译的方法包括另外的步骤:在所述所识别的矢量数据访问指令之后插入停止有限交叉指令。
至于开始交叉指令,当编译代码时,可以确定何处交叉是适当的,并且在必要时插入停止指令。
在可以被交叉的第一和第二矢量数据访问指令是在循环内的情况下,则开始和停止交叉指令可以被布置在许多位置中。例如,可以在循环之前或该循环内生成开始交叉指令,而在该循环内或该循环外生成停止交叉指令。
在其中在计算机程序内识别了反向分支的其他实施例中,这些反向分支是可以被处理系统理解的,以指示在仅有开始交叉指令被插入至代码中的情况下应停止交叉,并且在反向分支定位在所述交叉区域的末端处的情况下不应停止交叉指令。
根据本发明的第四方面,提供了一种用于编译计算机程序的编译器,该编译器包括:分析电路,该分析电路用于分析所述计算机程序并且识别所述计算机程序内的循环,并将所述循环内的标量指令转换成矢量指令,其中所述矢量指令包括矢量数据访问指令,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示要被执行的数据访问;在以下情况下在所述程序内识别第一矢量数据访问指令和第二数据矢量指令:来自所述第一和第二矢量数据访问指令的数据访问的有限交叉将不会引起数据错误;指令生成电路,该指令生成电路用于生成开始有限交叉指令,并且用于在所述计算机程序中在所述第一矢量数据访问指令之前插入所述开始有限交叉指令,所述开始有限交叉指令向矢量数据访问单元提供以下指示:来自所述第一和第二矢量数据访问指令的数据访问可以被交叉至有限程度;所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问;以及转变电路,该转变电路用于将所述计算机程序转变成适用于在数据处理系统上执行的代码。
根据本发明的第五方面,提供了一种方法,该方法响应于至少两个矢量数据访问指令并且响应于由所述矢量数据访问指令所指定的数据访问可以被交叉至一定程度的指示,向数据存储发出数据访问请求,其中所述矢量数据访问指令中的每一个列出要被执行的多个顺序数据访问,所述方法包括以下步骤:针对所述至少两个矢量数据访问指令中的每一个,确定所述多个顺序数据访问中的哪一个是要被执行的下次数据访问;针对要被执行的所述下次数据访问中的每一个,确定所述下次数据访问与所述其他下次数据访问相比在所述矢量数据访问指令中的所述多个顺序数据访问的所述列表中的相对位置;取决于所述相对位置,从所述至少两个矢量数据访问指令中的任一个选择要被发出的所述下次数据访问中的一个作为对所述数据存储的下次访问,以使得来自所述先前的和后来的矢量数据访问指令的前者的数据访问不是在在所述先前的和后来的矢量数据访问请求的后者的顺序访问的所述列表中处于对应位置的访问之后被发出。
根据本发明的第六方面,提供了一种包括开始有限交叉指令和后续的第一和第二矢量数据访问指令的计算机程序产品,所述开始有限交叉指令在由数据处理器执行时,控制所述数据处理器开始由所述第一和第二后续矢量数据访问指令所指定的数据访问的有限交叉指令,以使得响应于所述第一和第二矢量数据访问指令而被执行的访问可以被交叉至有限程度;所述有限程度是,在以下情况下发出由来自所述第二矢量数据访问指令的元素所指示的下次数据访问:从所述第一数据访问指令的指示下次数据访问的所述元素的数值位置减去所述元素在所述第二矢量数据访问指令的所述多个元素内的数值位置小于预定值,并且如果该差值不小于所述预定值,则发出来自所述第一矢量数据访问指令的数据访问。
根据本发明的第七方面,提供了一种以非暂态方式存储以下计算机程序的计算机程序产品,该计算机程序用于控制计算机为对应于根据本发明的第一方面的数据处理设备的程序指令提供虚拟机器执行环境。
从以下要被结合附图阅读的对说明性实施例的详细描述将会显见本发明的以上及其他目标、特征以及优点。
附图说明
图1示出了用于其中不允许交叉的双发出处理器中的两个矢量指令的数据访问的时序;
图2示出了根据本发明的一个实施例的数据处理设备的一部分;
图3示出了根据本发明的一个实施例的矢量加载存储单元;
图4示出了根据本发明的一个实施例的用于访问存储在多个存储器库中的数据的多矢量加载/存储单元;
图5示出了根据本发明的一个实施例的用于访问多个存储器库的多矢量加载存储单元;
图6a示出了根据本发明的一个实施例的一种编译程序的方法中的步骤;
图6b示出了根据本发明的一个实施例的编译器;
图7示出了根据本发明的一个实施例的允许一些缓存访问的联合的多矢量存储单元;
图8a示出了来自其中执行联合的图7的多矢量加载存储单元的数据访问;
图8b示出了在指令之间和之内发生联合的情况下的数据访问;并且
图9示出了安全或不安全地交叉的图1中所示的矢量访问指令;
图10示出了图1中所示的矢量访问指令的联合的访问模式;
图11示出了另外的联合的访问模式;
图12示出了联组的访问模式;
图13示出了另外的联组的访问模式;
图14示出了不安全联组的访问模式;并且
图15示出了安全交叉联组的访问模式;并且
图16示出了根据本发明的一个实施例的虚拟机器实现方式。
具体实施方式
图2示出了根据本发明的一个实施例的数据处理设备5的一部分。该图仅示出了矢量处理部分,并且还可能存在标量处理电路、标量加载/存储单元以及标量寄存器库,以使得可以解码并执行矢量和标量指令二者。
在这个设备中存在:保存要被处理的指令的指令队列30、用于解码这些指令的解码电路40以及用于处理由解码电路40解码的矢量指令的矢量处理电路50。在这个实施例中,还存在存储用于矢量处理电路的控制值的矢量控制寄存器60。这些控制值可以呈用于使得矢量指令能够仅应用于某些矢量操作数的掩码的形式,或它们可以是控制矢量处理的其他控制值。
在这个实施例中,还存在矢量加载存储单元10,该单元用于接收矢量数据访问指令,并且用于响应于这些访问指令而执行对存储器系统的访问。还存在用于存储在处理矢量指令中所使用的矢量的矢量寄存器库70。
因此,例如,如果矢量数据访问指令被解码,则这个矢量寄存器库可以引用要被访问的多个地址,并且这些地址可以存储在矢量寄存器库70内的矢量中。类似地,对应于多个地址的多个数据元素也将存储在矢量寄存器库70内的矢量中。
在这个实施例中,还存在由矢量处理电路响应于检测到其中访问可以与彼此交叉至一定程度的矢量数据访问指令而设置的标记80。因此,在处理期间,当检测到这类指令时,设置标记;并且当这类指令已经由矢量加载存储单元10执行和要被执行不允许交叉的其他指令时,清除标记。以这种方式,矢量加载存储单元知道来自不同矢量访问指令的单独访问是可以交叉至有限程度还是完全不能交叉。
这个标记可以称为已核实地址状态标记,当其被设置时,该标记指示一些交叉可以在要被访问的地址遵守某些规则时发生。
虽然对交叉的约束可以多种方式来表达,一种方式是:考虑是与第一矢量的元素号“j”相关的第一元素访问还是与第二矢量的元素号“k”相关的第二元素访问。对交叉的最简单约束之一是:如果j小于k(j<k),则第一元素访问必须总是在第二元素访问之前被执行,但是如果j大于或等于k,则可以颠倒顺序(即,第二元素访问可以在第一元素访问之前被执行)。在本文件中,我们通过假设交叉必须满足“j<k”约束来描述这个约束。
为简化用于异常处理的支持件,可以在发生异常时清除已核实地址状态标记。(这将禁用最优化直到再次设置该标记,因此,在遇见异常时保留已核实地址状态标记与性能之间存在权衡。)
标记可以由指令流内的开始和停止指令来设置,这些指令通过设置标记来指示现在可以发生交叉。这些指令可以是单独的指令或它们可以与其他指令组合。例如,可以将反向分支看作停止指令,并因此清除标记。
此外,因为一个循环迭代的开始也是先前的循环迭代的结束,所以在循环中可能有用的是使开始和停止指令组合成单个指令。这表现得像循环迭代之间的界线,其指示在不执行依赖性核实的情况下,不能安全地对来自不同循环迭代的元素访问进行重新排序。
开始指令可以指示合法重新排序的不同模式。例如,代替如以上要求“j<k”,该开始指令可以指示:如果“j<=k”,则可以对元素访问进行重新排序,或更普遍地,对于某一常数“d”,如果“j<k+d”,则可以对元素访问进行重新排序。(如果循环包括像“...=A[i+d];A[i]=...”的代码,则发生这种模式。)如果是这种情况,那么需要有用于这个常数“d”的存储器,并且该存储器示出为图3中的存储器85。
代替使用开始和停止指令,可以使用“部分界线”。鉴于常规界线阻止对界线两侧的元素访问进行重新排序,如果“j<k”,“部分界线”阻止对元素访问进行重新排序。
代替使用开始和停止指令,我们可以具有设置当前“界线状态”的指令。界线状态可以是“完整、部分或无”中的一种。当前界线状态通过在存储器访问之前插入隐性界线或部分界线或无界线来影响所有后续存储器访问。将当前界线状态设置成“部分”表现得像开始指令,并且将当前界线状态设置成“完整”表现得像停止指令。
图3更详细地示出了图2的矢量加载存储单元10。在这个矢量加载存储单元存储器在比较电路57,该比较电路用于对从两个未决矢量数据访问指令接收的索引值12和14进行比较,索引值指示特定数据访问请求在对应指令内的元素位置。还存在选择电路58,该选择电路取决于比较结果来选择要被发出的下次数据访问请求。
矢量加载存储单元10还包括标记值存储器80,该存储器用于存储由处理器设置的标记值,并且在被设置时向LSU 10指示:由两个矢量数据访问指令所指定的单独的数据访问可以交叉至一定程度。单独的数据访问可以交叉的程度由存储在预定值存储器85中的值来确定。这个值由解码器设置,并且提供交叉程度的指示。
在这个实例中,标记80被设置,因此允许交叉,并且存储器85中的预定值为零。这指示来自两个矢量数据访问指令的数据访问可以交叉的程度是来自第二数据访问指令的访问不可赶上来自第一数据访问指令的对应访问的程度。换句话说,索引1(指示来自第一矢量数据访问指令的当前未决数据访问在所述指令内的位置)必须大于索引2(指示来自第二矢量数据访问指令的当前未决数据访问在所述指令内的位置)。如果满足了这个约束,那么向存储器发出来自第二指令的数据访问;如果未满足,那么向存储器发出来自第一指令的数据访问。
因此,访问进行,并且索引计数器12和14随着来自它们对应指令的访问被执行而增量。因此,如果索引1和索引2初始为0,那么比较电路57将会确定两个值是相等的,并且因此未满足索引1大于索引2的要求,并且选择电路58因此选择来自指令1的数据访问,并且用于指令1的地址0随数据访问被发出,并且索引1的值增量。然后,对两个索引值的比较发现索引1大于索引2,并且因此,满足来自指令2的访问索引必须小于来自指令1的访问索引的约束,并且尽管然后在理论上可进行选择,但是优先地选择来自指令2的访问。因此,来自指令2的地址0用于访问下一个数据元素。应注意,如果这个加载存储单元可以在单个周期中访问两个指令,那么这两个指令将会在第一周期中被选择并且一起被执行。矢量加载存储单元以这种方式继续选择要被执行的访问。以这种方式,在类似时间处理该两个指令并且减少指令2的等待时间。
如先前所指出,存在用于存储值的预定值存储器85。在先前所描述的实施例中,选择标准仅仅是:来自第二指令的访问不可赶上第一指令,并且因此这个值被设置成零。然而,在一些情况下,可以存在不同要求,并且如果情况是这样,则预定值85存储不同预定值,并且选择标准可以是:索引2与索引1之间的差应小于这个所存储的预定值。假设满足了这个标准,那么可以选择访问中的任一个,但是优先地选择来自后来的指令的数据访问。
图5示出了根据本发明的一个实施例的用于访问存储在多个存储器库中的数据的多矢量加载/存储单元。在这方面,具有聚集分散矢量存储器访问指令的程序可以具有高地址带宽(即,每周期可以向存储器系统呈现许多地址),并且因此,受益于每周期可执行多个访问的存储器系统。这经常通过以下来实现:将存储器系统分成许多独立地可访问的库并且布置地址映射,以使得矢量存储器访问通常将会访问多个库,从而允许访问与彼此并行地被执行。这种联组可应用于存储器系统的若干不同部分:TLB、L1缓存、L2缓存、DRAM控制器等。
在图5中,矢量加载存储单元10包括两个部件15和17,第一部件15响应于第一矢量数据访问指令而访问数据,并且第二部件17响应于第二矢量数据访问指令而访问数据。
这些部件15、17二者分别具有寄存器存储器25和27,这些寄存器存储器用于存储未决矢量数据访问指令的地址元素并且用于存储对应于这些访问指令的数据。因此,如果未决指令是写入指令,则要被由写入指令所存储的数据将会保留在寄存器内。而如果未决指令是读出指令,则在寄存器存储器在用于存储所读出的数据的空间。
在每个部件中还存在库比较器35和37,库比较器分析要被访问的数据元素的地址并且确定要被从该地址访问存储器库100、102、104以及107中的哪一个存储器库。
因此,第一矢量数据访问指令在矢量加载存储单元部件15处被接收并且存储在寄存器25中。第二矢量数据访问指令在矢量加载存储单元部件17处被接收并且存储在寄存器27中。在这个实例中,这些指令都是写入指令。
索引计数器45和47分别初始地设置成0,并且访问寄存器25和27中对应于这些矢量访问请求的第一地址元素,并且确定该地址处于哪一个库内。比较单元57对两个索引进行比较,并将结果发送至库访问控制单元90。除了访问由索引47所指定的地址元素之外,还访问矢量加载存储单元15中的下一个地址元素,以便确定所指定的地址元素处于哪一个库中。这个信息的全部被提供给确定应将哪些访问传输至存储器系统的库访问控制单元90。
图4更详细地示出了图5的库访问控制单元90。如以上所指出,在这个单元处接收来自两个加载存储单元部件15、17的信号。在这个实例中,存在由库访问控制单元90考虑的三个未决访问请求,这些信号各自包括地址、与地址相关的数据以及该地址是读出的还是写入的指示。这三个信号包括用于来自从第一矢量加载存储单元部件15所接收的第一矢量数据访问指令的元素aj和aj+1的两个数据访问请求,和来自从第二矢量加载存储单元部件17所接收的第二矢量数据访问指令的一个数据访问请求bk。
还发送指示要被在哪一个库中找到这些地址的额外信息。针对每个库,由比较电路109将此额外信息与库ID进行比较,并且确定对于所述库来说哪些访问是未决的。如果仅存在一个访问对于特定库来说是未决的,那么将所述访问传输至所述库并且允许所述访问进行。
然而,如果存在多于一个访问对于一个库来说是未决的,那么访问优先次序电路95确定要被选择哪一个访问将首先被执行。该电路响应于来自加载/存储单元10内的比较电路57的信号来对此进行确定。这个比较电路确定k是否小于j。如果k小于j,那么可以选择并且选择bk。如果k不小于j,那么来自第二数据访问指令的访问实际上已经追上来自第一矢量数据访问指令的访问,并且它们需要被禁止一段时间,直到第一矢量数据访问指令再次领先。在这种情况下,访问aj被给予优先次序。在aj不与bk去往同一库而aj+1却去往这个库的情况下,则优先次序电路95将会基于k是否小于j+1来确定选择哪一个访问。如果k小于J+1,则可以选择bk。然而,如果j+1小于k,则访问aj+1将会具有优先次序。
以这种方式,在特定周期期间,库可以彼此独立地被访问,并且不在去往不同库的访问之间强制执行、而是对去往同一库的访问强制执行通常强制执行的约束。这清楚地允许执行更多访问,但是却具有另外的比较和控制电路的开销。
总之,安全地交叉库内的访问的存储器系统的简单实现由以下各项组成:
-指示代码块的开始和结束的一对新指令
-加载存储单元
o具有指示该加载存储单元是否正在以“已核实地址状态”执行的标记
o该加载存储单元在遇到开始指令时设置该标记,并且在遇到结束指令时清除该标记。
o具有各自包括以下各项的两个矢量存储器单元(VMU):
·指示下一个要被访问哪一个元素的元素索引j或k
·指示VMU正在执行读出、写入还是闲置的标记
·高达2个未决元素访问的缓冲区,其由地址组成,和如果访问是写入,还包括每个未决元素访问的值。
·对未决元素访问的数量的计数
·用于每个未决元素访问的库识别逻辑
o具有用以比较两个VMU中的元素索引的比较器
o具有四个库,各自包括:
·用以从任何VMU中选择任何未决元素访问的复用器
·如下用以选择未决元素访问[aj,a(j+l)]和[bk,b(k+l)]的控制逻辑:
·如果j<k:
o如果aj和bk都是用于这个库,则选择bk
o否则,不对这个库执行访问
·如果j>=k:
o如果aj和bk都是用于这个库,则选择bk
o如果aj用于这个库并且bk用于一个不同库,则选择aj
o如果bk用于这个库并且aj用于一个不同库,则选择bk
o如果aj和bk用于不同库:
·如果a(j+l)用于这个库,则选择a(j+l)
·否则,不对这个库执行访问
o具有用以根据从每个VMU中所选择的访问的数量来更新j和k的值的逻辑。
这种实现可以各种方式来改进,包括将其与稍后所描述的联合实现方式结合,这样使得可以将对同一库的访问联合成单个访问。
图6a示出了一个流程图,其示出一种用于编译矢量化代码的方法。在这个实施例中,编译器辨识计算机程序中的包括标量指令的循环,并且将这些标量指令转换成矢量指令。该编译器辨识到,使循环矢量化的任务包括:执行分析以确定存在哪些存储器依赖性。所以,如果编译器成功地使该循环矢量化,则该编译器已经知道:矢量化的循环内的存储器访问并不冲突。因此,编译器意识到可以发生数据访问的交叉,并且为了向处理代码的处理系统指示可以发生该交叉,该编译器在循环本体的开始生成开始指令并且在循环本体的结尾生成结束指令。
可以各种方式来改善这个基本方案:
在一些情况下,编译器可以插入指示合法重新排序的不同模式的已修改开始指令。例如,如果该编译器确定:代码块内部所执行的所有访问去往不同地址,那么该编译器可以发射以下开始指令,该开始指令指示:满足约束“j<=k”的重新排序是正确的或任何重新排序是正确的。
在US 2008/0288754中公开了一种“CheckHazard”指令,其测试两个矢量以确定一个矢量的位置j中的任何地址是否与另一个矢量的某一位置k(j<k)中的任何地址重叠。这个指令可以用于动态地测试(并处理)将会阻止使循环矢量化的任何重叠。这个指令尤其良好地与本发明的实施例进行工作,因为实际上,该指令执行测试以核实交叉是否可能。还存在检查位置以使得j<=k的CheckHazardX指令。因此,在这个指令已经用于测试代码的情况下,可以通过设置标记或通过使用开始有限交叉指令来向数据处理系统提供访问可以交叉的指示。
尽管编译器可以由软件形成,但是在一些情况下,编译器可以由硬件形成。图6b示意性地示出了硬件编译器,其中向分析电路输入指令流,在该分析电路处分析指令流并识别循环并且形成矢量代码。还识别代码的其中这类矢量交叉的部分,并且将开始和停止指令插入至代码中,该代码然后由转变电路转变成可以由处理电路执行的代码。
图7示出了访问同一缓存的两个矢量加载存储单元如何可以具有允许它们的访问联合的另外的控制电路的实例。在这方面,图7示意性地示出了两个矢量加载存储单元15和17,这两个单元具有:相关控制电路,该相关控制电路起作用以对来自每个加载存储单元的访问的索引进行比较,以核实未破坏任何交叉规则;以及联合电路59,该联合电路核实未决数据访问的地址,并且在它们去往同一线并且使它们联合将不会破坏交叉规则的情况下,将它们联合成单个访问。
联合去往同一缓存线的访问以便既提高性能又减少能量是有利的。在矢量访问中,联合通常在单个矢量访问内执行以在矢量内开拓局部性,但是联合对于在两个矢量访问中的对应元素位置之间存在显著局部性是常见的。例如,使包括这两个语句的循环矢量化:
A[i][j].x=p;
A[i][j].y=q;
将会产生包括两个矢量存储指令的循环,并且在该循环的给定迭代中,第一矢量存储指令可以写到地址:[1000,2000,3000,4000,...],而第二矢量存储指令写到[1004,2004,3004,4004,...]。在这种情况下,在每个矢量访问内不存在局部性,但是在矢量访问之间存在相当大的局部性,并且理想地,访问将会以顺序[1000,1004,2000,2004,3000,3004,4000,4004,...]来执行。
这允许访问联合成如示出具有访问a0和b0联合成单个访问的联合的访问模式的图8a中所示的单个访问。
事实上,在矢量访问内以及矢量访问之间可以找到空间局部性。例如,第一矢量访问可以访问地址为[1000,1008,1016,1024,...]的元素,而第二矢量访问可以访问地址为[1004,1012,1020,1028,...]的元素。在这种情况下,所希望的是联合矢量访问内的元素访问并且联合矢量访问之间的访问。其中来自第一矢量操作的多对元素访问与来自第二矢量操作的多对元素访问联合的图8b中示出了这种情况。与没有联合的16个周期或如果联合仅出现在矢量之间或矢量之内的8个周期相比,这在4个周期中执行。
以下给出如何可以使代码矢量化和交叉如何可以提高性能的一些简单实例。
顺序代码(矢量化之前)
因为第一vstore与第二vload之间的可能的冲突,所以这允许有限交叉。
不限制交叉(即,允许无约束地对矢量加载/存储从新排序)将会快速但错误:一个可能排序的写入(从vstore)和读出(从vload)将会错误地在到a[0]的写入之前执行从a[0]的读出。
无任何交叉将会正确但不必要地减速,因为将会需要在开始从a[0]..a[7]的读出之前执行到a[0]..a[7]的所有写入。
在具有有限交叉的情况下(即,允许到元素k的加载在从元素j的存储之前发生,只要j<k),矢量化代码快速地运行并且正确。
由于对代码做出小的改变,需要稍微改变比较的具体细节(并且实例变得更实际一些)
在具有这个改变的情况下,强制执行的条件是“j<k+d”。
为了使这发生,我们可以将d的值编码成“开始有限交叉”指令,这样使得VMU中的比较硬件知道测试“j<k+d”。
最后,应注意,本发明的实施例的显著优势在于:不需要地址比较器来支持交叉,有可能添加地址比较器以允许超过由有限交叉直接支持的重新排序的额外重新排序。也就是说,允许循环的一个迭代和下一个迭代之间的访问、循环或下一个矢量化循环之前/之后的代码的小量交叉。因为比较器具有更少工作要做,所以可以更少比较器和/或通过更经常地对比较器进行时钟门控来实现良好的性能。
以下参照图9至图15陈述对本发明的实施例的各种特征的概述。
图9a示出了第一安全交叉访问模式,示出时间从左到右进行,并且来自第一矢量访问的元素访问a0至a7与来自第二矢量访问的元素访问b0至b7在各自的线上。注意,如果j<k,则访问aj在访问bk之前发生。
图9b示出了另一种安全交叉访问模式,示出时间从左到右进行,并且来自第一矢量访问的元素访问a0至a7与来自第二矢量访问的元素访问b0至b7在各自的线上。注意,如果j<k,则访问aj在访问bk之前发生。
图9c示出了不安全访问模式,示出时间从左到右进行,并且来自第一矢量访问的元素访问a0至a7与来自第二矢量访问的元素访问b0至b7在各自的线上。注意,访问b1在访问a1之前发生,如果a1和b1访问同一地址,则这将会给出错误结果。(b2和a2也被错误地重新排序。)
以下描述关于去往同一缓存线的访问和去往联组存储器的访问的联合的两个实施例。
如以上指出,为简化用于异常处理的支持件,可以在发生异常时清除已核实地址状态标记。(这将禁用最优化直到遇到另一个开始指令,因此在遇见异常时保留已核实地址状态标记与性能之间存在权衡。)
-可以将开始和停止指令与其他指令组合。例如,可以将反向分支看作停止指令。
-因为一个循环迭代的开始也是先前的个循环迭代的结尾,所以将开始和停止指令组合成单个指令是有用的。这表现得像循环迭代之间的指示在未执行依赖性核实的情况下不能安全地对来自不同循环迭代的元素访问进行重新排序的界线。
-开始指令可以指示合法重新排序的不同模式。例如,代替如以上要求“j<k”,该开始指令可以指示:如果“j<=k”,则可以对元素访问进行重新排序,或更普遍地,对于某一常数“d”,如果“j<k+d”,则可以对元素访问进行重新排序。(如果循环包括像“...=A[i+d];A[i]=...”的代码,则发生这种模式。)
-代替使用开始和停止指令,我们可以使用“部分界线”。鉴于常规界线阻止对界线两侧的元素访问进行重新排序,如果“j<k”,则“部分界线”阻止对元素访问进行重新排序。
-代替使用开始和停止指令,我们可以具有设置当前“界线状态”的指令。界线状态可以是“完整、部分或无”中的一种。当前界线状态通过在存储器访问之前插入隐性界线或部分界线或无界线来影响所有后续存储器访问。将当前界线状态设置成“部分”表现得像开始指令,并且将当前界线状态设置成“无”表现得像开停止指令。
“CheckHazard”指令测试两个矢量的地址以确定一个矢量的位置j中的任何地址是否与另一个矢量的某一位置k(j<k)中的任何地址重叠。这个指令可以用于动态地测试(并处理)将会阻止使循环矢量化的任何重叠。这个指令尤其良好地与本发明的实施例进行工作,因为该指令所测试的正是我们所关心的情况。(还存在检查位置以使得j<=k的CheckHazardX指令。)
还描述了一种能够将开始/停止指令发射成矢量化代码的编译器。这需要:
-编译器,该编译器使循环矢量化
-并且该编译器在循环本体的开始处插入开始指令并且在该循环本体的结尾处插入结束指令。(使循环矢量化的任务包括:执行分析以确定存在哪些存储器依赖性。所以,如果编译器成功地使该循环矢量化,则该编译器已经知道:矢量化的循环内的存储器访问并不冲突。)
可以各种方式来改善这个基本方案:
-在一些情况下,替代地,编译器可以在循环之前插入开始指令并且在循环之后插入结束指令。例如,如果该编译器确定:由循环所执行的所有访问去往不同地址,则该编译器可以这样做。
-在一些情况下,编译器可以插入指示合法重新排序的不同模式的已修改开始指令。例如,如果该编译器确定:代码块内部所执行的所有访问去往不同地址,那么该编译器可以发射以下开始指令,该开始指令指示:“j<=k”是正确的或重新排序是正确的。
联合缓存访问
联合去往同一缓存线的访问以便既提高性能又减少能量是有用的。在矢量访问中,联合通常在单个矢量访问内执行以在矢量内开拓局部性,但是联合对于在两个矢量访问中的对应元素位置之间存在显著局部性是常见的。例如,使包括这两个语句的循环矢量化:
A[i][j].x=p;
A[i][j].y=q;
将会产生包括两个矢量存储指令的循环,并且在该循环的给定迭代中,第一矢量存储指令可以写到地址:[1000,2000,3000,4000,...],而第二矢量存储指令写到[1004,2004,3004,4004,...]。在这种情况下,在每个矢量访问内不存在局部性,但是在矢量访问之间存在相当大的局部性,并且理想地,访问将会以顺序[1000,1004,2000,2004,3000,3004,4000,4004,...]来执行。
这允许访问联合成如以下图10中所示的单个访问。
以下描述能够执行这样的联合的本发明的实施例的实现。
-指示代码块的开始和结束的一对新指令
-加载存储单元
o具有指示该加载存储单元是否正在以“已核实地址状态”执行的标记
o该加载存储单元在遇到开始指令时设置该标记,并且在遇到结束指令时清除该标记。
o具有各自包括以下各项的两个矢量存储器单元(VMU):
■指示下一个要被存储哪一个元素的元素索引
■指示VMU正在执行读出、写入还是闲置的标记
■指示VMU中是否存在未决访问的标记(如果不是闲置)
■下一个未决访问的地址(如果存在未决访问)
■下一个未决访问的值(如果该未决访问是写入)
o具有用以比较两个VMU中的元素索引的比较器
o具有用以比较VMU的下一个未决访问的地址是否去往同一缓存线的比较器
o具有用以从一个VMU或另一个中选择下一个元素的复用器,以使得:
■当清除了已核实地址状态标记时,从第一VMU取得访问,除非第一VMU闲置或两个访问都是读出。
■当设置了已核实地址状态标记时,如果j<=k并且下一个未决访问去往同一缓存线,则将来自第一和第二VMU的访问组合成单个访问。
■当设置了已核实地址状态标记,并且下一个未决访问去往不同缓存线且j<k时,选择来自第二VMU的访问。
■否则,选择来自第二VMU的访问。
应理解,这种实现方式使用单个地址比较器来检测可以联合的元素访问,并且仅需要同时存储来自两个矢量指令中的每一个的一个元素访问。在不利用本发明的实施例的情况下,同一程度的重新排序将会需要同时存储来自第一矢量操作的所有元素访问,并且将会需要7个地址比较器(用于为8的矢量长度)。
事实上,在矢量访问内以及矢量访问之间可以找到空间局部性。例如,第一矢量访问可以访问地址为[1000,1008,1016,1024,...]的元素,而第二矢量访问可以访问地址为[1004,1012,1020,1028,...]的元素。在这种情况下,所希望的是联合矢量访问内的元素访问并且联合矢量访问之间的访问。其中来自第一矢量操作的多对元素访问与来自第二矢量操作的多对元素访问联合的图11中示出这种情况。与没有联合的16个周期或如果联合仅出现在矢量操作之间或如果联合仅出现在矢量操作之内的8个周期相比,这在4个周期中执行。
图11示出了联合的访问模式,示出时间从左到右进行,并且来自第一矢量访问的元素访问a0至a7与来自第二矢量访问的元素访问b0至b7在各自的线上。注意,来自第一矢量操作的连续元素访问已经与彼此联合并且与来自第二矢量操作的连续元素访问联合,并且这些联合在同时发生。
可以通过以下方式来改善以上实现以支持这种行为:
-使两个VMU扩展,以便
o缓冲多个访问的地址(和数据,用于写入)
o比较每个VMU内的相邻元素访问的地址,以识别每个VMU内的连续元素访问(它们是联合的候选元素访问)的序列。如果顺序地向VMU添加元素访问,那么这要求每个VMU有一个额外的比较器。
-如果下一个元素访问的地址去往同一缓存线并且第一VMU包括去往所述缓存线的m个连续访问且第二VMU包括去往所述缓存线的n个连续访问,那么来自第一VMU的m个元素和来自第二VMU的“min(j+m,k+n)-k”个元素可以联合成单个缓存访问。
联组存储器访问
具有聚集分散矢量存储器访问指令的程序可以具有高地址带宽(即,每周期可以向存储器系统呈现更多地址),并且因此,受益于每周期可执行多个访问的存储器系统。这经常通过以下来实现:将存储器系统分成许多独立地可访问的库并且布置地址映射,以使得矢量存储器访问通常将会访问多个库,从而允许访问与彼此并行地被执行。这种联组可应用于存储器系统的若干不同部分:TLB、L1缓存、L2缓存、DRAM控制器等。例如,可以将缓存分成四个独立地可访问的库B0、B1、B2以及B3,和元素的地址的比特位6和7,所述比特位用于选择这四个库中的哪一个用于存储所述地址。由元素访问a0至a7组成的矢量访问可以通过检查每个元素访问的地址的比特位6和7并且将该地址定向至这四个库之一来执行。图12示出了将会采用按顺序每周期高达2个元素访问地发出元素访问的矢量存储器单元由去往地址[60,76,92,108,124,140,156,172](这些地址映射到库[B0,B1,B1,B1,B1,B2,B2,B2,B2,B3]上)的矢量访问产生的访问模式。完整矢量操作需要6个周期,即使没有库执行多于4个元素访问。
图13示出了访问模式,如果第一矢量操作之后是去往地址[192,132,196,136,200,140,204,144](这些地址映射到库[B3,B2,B3,B2,B3,B2,B3,B2]上)的第二矢量操作,则将会在不处于已核实地址状态下时产生该访问模式。因为访问模式不是处于已核实地址状态下(即,并未使用本发明的实施例),没有来自第二矢量操作的元素访问被执行,直到来自第一矢量操作的所有元素访问之后。两个矢量操作需要10个周期来完成。
图14示出了允许第二矢量操作与第一矢量操作并行地进行是不安全的。注意,在此图中,访问a5和访问b5都是去往地址140,并且在访问a5之前错误地执行访问b5。(如果这个顺序是合法的,这将需要7个周期。)
图15示出了正确地执行的同一访问模式。即使访问b5可在第三个周期中获得,但是该访问被延迟直到已经执行访问a5之后,以便确保:访问在每个库内安全地交叉。还应注意,访问b4不是在a4之前执行,因为不可能确定它们是否访问同一库直到它们二者都是可访问的。同样,访问b6不是在访问a6之前执行。通过利用本发明的实施例,这种访问模式在8个周期中完成,这节省了2个周期。
最后,值得注意的是,尽管并不需要地址比较器来支持交叉,但是有可能添加地址比较器以允许超过由本发明的实施例直接支持的重新排序的额外重新排序。也就是说,允许循环的一个迭代与下一个迭代之间的访问、循环或下一个矢量化循环之前/之后的代码的小量交叉。因为比较器具有更少工作要做,所以我们可以更少比较器和/或更经常地对比较器进行时钟门控来实现良好的性能。
图16示出了可以使用的虚拟机器的实现方式。在前述实施例就用于操作支持所关注的技术的具体处理硬件的设备和方法而言实施本发明的同时,还有可能提供硬件装置的所谓的虚拟机器实现方式。这些虚拟机器实现方式在以下主机处理器530上运行,该主机处理器通常运行支持虚拟机器程序510的主机操作系统520。典型地,需要大型的强大处理器来提供以合理速度执行的虚拟机器实现方式,但是在一些情况下可以证明这样的方法是有效的,如当出于兼容性或重新使用原因而希望运行本属于另一个处理器的代码时。虚拟机器程序510能够执行应用程序(或操作系统)500以给出与通过由此类真实硬件装置执行程序所将会给出结果相同的结果。因此,对要被执行的数据访问的排序可以使用虚拟机器程序510从应用程序500内执行。
尽管本文已经参照附图详细地址描述了本发明的说明性实施例,但是应理解,本发明并不限于这些明确的实施例,并且在不脱离由所附权利要求书所限定的本发明的范围的情况下,可以由本领域的技术人员对本发明做出各种变更和修改。
Claims (18)
1.一种用于响应于已解码矢量数据访问指令来访问存储在数据存储内的数据的矢量数据访问单元,所述矢量数据访问指令中的每一个指定多个元素,所述元素中的每一个指示所要执行的数据访问,所述多个元素在所述矢量数据访问指令内处于一定顺序,其所对应的数据访问被指令以该顺序进行执行;
所述矢量数据访问单元包括数据访问排序电路,所述数据访问排序电路用于向所述数据存储发出由所述元素所指示的数据访问请求,响应于接收到至少两个已解码矢量数据访问指令以及响应于来自所述至少两个已解码矢量数据访问指令的数据访问能够被交叉至有限程度的指示,其中所述至少两个已解码矢量数据访问指令中的先前的矢量数据访问指令在所述至少两个已解码矢量数据访问指令中的后来的矢量数据访问指令之前被接收,并且所述至少两个已解码矢量数据访问指令中的一个是写入指令,所述数据访问排序电路被配置为:
针对至少两个矢量数据访问指令中的每一个,根据所述元素在所述多个元素内的位置,确定由所述多个元素指示的所述多个数据访问中要针对所述矢量数据访问指令被执行的下次数据访问,所述数据访问以所指令的顺序被执行;
针对所述矢量数据访问指令中的每一个,确定指示了所述下次数据访问的元素;
依据至少两个矢量数据指令被接收的顺序和指示所述下次数据访问的所述元素相对于彼此在它们相应的多个元素内的位置,选择所述下次数据访问中的一个作为向所述数据存储发出的下次访问,其约束是:在所述矢量数据访问指令中的后者的所述多个元素内指示所述下次数据访问的所述元素的数值位置与在先前的矢量访问数据指令的所述多个元素内指示所述下次数据访问的所述元素的数值位置之间的差小于预定值。
2.根据权利要求1所述的矢量数据访问单元,其中所述约束还包括:来自所述先前的矢量数据访问指令的元素所指示的数据访问请求不是在后来的矢量数据访问指令中位于所述多个元素中的相应位置处的元素所指示的数据访问请求之后被发出的。
3.根据任一前述权利要求所述的矢量数据访问单元,其中所述数据访问排序电路被配置用于:如果满足所述约束,优先于来自所述先前的矢量数据访问指令的所述下次数据访问请求,选择来自所述后来的矢量数据访问指令的所述下次数据访问请求作为要发出的下次数据访问请求。
4.根据权利要求1至2中任一项所述的矢量数据访问单元,其中所述数据访问排序电路被配置为:在同一时钟周期中彼此并行地发出至少两个数据访问请求;
所述数据访问排序电路被配置为:选择所述下次访问和至少一个另外的数据访问来并行地发出,所述至少一个另外的数据访问请求是以下各项中的至少一项:
由所述矢量数据访问指令中继指示所述下次访问的所述元素之后的元素所指示的至少一个数据访问;以及
来自所述矢量数据访问指令中的不包括指示了所述下次访问的所述元素的一个矢量数据访问指令的所述下次访问中的至少一个;
依据与选择所述下次数据访问相同的约束来选择的所述至少一个另外的数据访问。
5.根据权利要求1至2中任一项所述的矢量数据访问单元,其中要被访问的所述数据存储包括多库存储器中的一个库。
6.根据权利要求4所述的矢量数据访问单元,其中所述数据存储包括多个存储器库,每库与其他库独立,其中所述数据访问排序电路被配置为:在选择所述至少一个另外的数据访问时,不将所述约束施加到在同一时钟周期中为不同库选择的访问之间的访问上。
7.根据权利要求1至2中任一项所述的矢量数据访问单元,包括彼此并行布置的至少两个矢量数据访问模块,各自被配置为接收所述至少两个矢量数据访问指令中的相应的一个,所述数据访问排序电路包括:
所述矢量数据访问模块中的每一个中的计数器,所述计数器用于存储对于对应的矢量数据访问指令中指示所述下次数据访问的所述元素的所述位置的指示;以及
用于比较所述计数器的值的比较电路;
与所述矢量数据访问模块中的每个相关联以发出下次数据访问请求的发出电路;
所述数据访问电路被配置为:响应于所述比较电路指示如果发出所述下次数据访问请求,则将不会满足所述约束,而向所述矢量数据访问模块中的一个的发出电路发送信号,该信号阻止由该模块发出所述下次数据访问请求。
8.根据权利要求1至2中任一项所述的矢量数据访问单元,包括彼此并行布置的至少两个矢量数据访问模块,各自被配置为接收所述至少两个矢量数据访问指令中的相应的一个,并且其中所述数据存储包括缓存,所述缓存包括多个缓存线,所述缓存线中的每一个存储多个数据项,所述数据访问排序电路包括:
检测电路,该检测电路用于确定来自所述矢量数据访问模块的要在同一时钟周期中被执行的数据访问请求是否去往同一缓存线,并且响应于确定这些数据访问请求去往同一缓存线,对所述数据访问进行组合以使得所述数据访问作为同一数据访问被执行。
9.根据权利要求1至2中任一项所述的矢量数据访问单元,其中所述至少两个矢量数据访问指令包括矢量加载指令和矢量存储指令中的至少两个,所述矢量数据访问单元还包括:
矢量寄存器存储,所述矢量寄存器存储用于存储各自包括多个矢量操作数的多个矢量,所述矢量中的至少两个包括多个地址,所述地址指示由所述至少两个矢量数据访问指令中的相应的一个所指示的所述多个数据访问的数据存储位置。
10.一种用于处理数据的数据处理设备,包括:
用于提取要被处理的指令的提取电路;
用于对所述指令进行解码的解码电路;
被配置为响应于已解码指令而执行操作的处理电路;以及
如任一前述权利要求所述的矢量数据访问单元,所述矢量数据访问单元用于响应于矢量数据访问指令对要被处理的数据进行访问。
11.根据权利要求10所述的数据处理设备,
其中所述解码电路被配置为:响应于指示允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自先前和后来的矢量数据访问指令的数据访问能够进行有限程度的交叉。
12.根据权利要求10或11所述的数据处理设备,其中指示允许有限交叉的所述指令包括以下各项中的至少一个:矢量加载指令、矢量存储指令、开始有限交叉指令、用于设置有限交叉标记的指令以及用于设置矢量控制寄存器的指令。
13.根据权利要求12所述的数据处理设备,其中指示允许有限交叉的所述指令包括所述开始有限交叉指令,并且所述开始有限交叉指令包括指示交叉的程度的预定值。
14.根据权利要求11所述的数据处理设备,其中所述解码电路被配置为:响应于指示不再允许有限交叉的指令,向所述矢量数据访问单元提供以下指示:来自矢量数据访问指令的数据访问不能进行有限程度的交叉。
15.根据权利要求14所述的数据处理设备,其中指示不再允许有限交叉的所述指令包括停止有限交叉指令和反向分支指令中的至少一个。
16.根据权利要求10至11中任一项所述的数据处理设备,还包括标记数据存储,所述标记数据存储用于存储指示来自所述先前的和后来的矢量数据访问指令的数据访问能够进行有限程度的交叉的标记值,所述矢量数据访问单元包括检测所述标记值的检测器。
17.根据权利要求16所述的数据处理设备,所述数据处理设备响应于发生异常而被配置为清除所述标记值。
18.一种向数据存储发出数据访问请求的方法,所述数据访问请求是响应于至少两个矢量数据访问指令并且响应于由矢量数据访问指令规定的数据访问能够进行一定程度的交叉的指示而发出的,其中所述矢量数据访问指令中的每一个列出要被执行的多个顺序数据访问,所述方法包括以下步骤:
针对所述至少两个矢量数据访问指令中的每一个,确定所述多个顺序数据访问中要被执行的下次数据访问;
针对要被执行的所述下次数据访问中的每一个,确定所述下次数据访问与其他下次数据访问相比在所述矢量数据访问指令中的所述多个顺序数据访问的列表内的相对位置;
依据所述相对位置,从所述至少两个矢量数据访问指令之一中选择要被发出的所述下次数据访问中的一个作为去往所述数据存储的下次访问,以使得来自先前的和后来的矢量数据访问指令的前者的数据访问不是在在所述先前的和后来的矢量数据访问请求的后者的顺序访问的所述列表中处于对应位置处的访问之后被发出。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/200,656 | 2011-09-28 | ||
US13/200,656 US9021233B2 (en) | 2011-09-28 | 2011-09-28 | Interleaving data accesses issued in response to vector access instructions |
PCT/GB2012/052383 WO2013045919A1 (en) | 2011-09-28 | 2012-09-26 | Interleaving data accesses issued in response to vector access instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103930883A CN103930883A (zh) | 2014-07-16 |
CN103930883B true CN103930883B (zh) | 2017-02-15 |
Family
ID=47023028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280047433.1A Active CN103930883B (zh) | 2011-09-28 | 2012-09-26 | 用于响应于矢量访问指令的交叉数据访问的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (2) | US9021233B2 (zh) |
JP (1) | JP6463633B2 (zh) |
KR (1) | KR102048213B1 (zh) |
CN (1) | CN103930883B (zh) |
GB (1) | GB2508751B (zh) |
WO (1) | WO2013045919A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436469B2 (en) * | 2011-12-15 | 2016-09-06 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table |
US8983979B2 (en) * | 2012-01-13 | 2015-03-17 | Hewlett-Packard Development Company, L.P. | Controlling access to stored information |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US9600442B2 (en) * | 2014-07-18 | 2017-03-21 | Intel Corporation | No-locality hint vector memory access processors, methods, systems, and instructions |
US10275247B2 (en) * | 2015-03-28 | 2019-04-30 | Intel Corporation | Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices |
US10198264B2 (en) * | 2015-12-15 | 2019-02-05 | Intel Corporation | Sorting data and merging sorted data in an instruction set architecture |
US10248419B2 (en) * | 2016-03-09 | 2019-04-02 | International Business Machines Corporation | In-memory/register vector radix sort |
GB2549737B (en) * | 2016-04-26 | 2019-05-08 | Advanced Risc Mach Ltd | An apparatus and method for managing address collisions when performing vector operations |
GB2554096B (en) * | 2016-09-20 | 2019-03-20 | Advanced Risc Mach Ltd | Handling of inter-element address hazards for vector instructions |
DE102017207876A1 (de) * | 2017-05-10 | 2018-11-15 | Robert Bosch Gmbh | Parallelisierte Verarbeitung |
GB2564853B (en) * | 2017-07-20 | 2021-09-08 | Advanced Risc Mach Ltd | Vector interleaving in a data processing apparatus |
GB2573119A (en) * | 2018-04-24 | 2019-10-30 | Advanced Risc Mach Ltd | Maintaining state of speculation |
GB2587426B (en) * | 2019-09-30 | 2022-04-06 | Advanced Risc Mach Ltd | Atomic range compare and modify operations |
US20240086162A1 (en) * | 2022-09-09 | 2024-03-14 | Microsoft Technology Licensing, Llc | Interleaved machine instruction placement in memory |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4870569A (en) * | 1985-11-15 | 1989-09-26 | Fujitsu Limited | Vector access control system |
EP0620533A2 (en) * | 1993-04-13 | 1994-10-19 | Nec Corporation | Vector processor |
US5590353A (en) * | 1993-07-15 | 1996-12-31 | Hitachi, Ltd. | Vector processor adopting a memory skewing scheme for preventing degradation of access performance |
EP1569091A2 (en) * | 2004-02-23 | 2005-08-31 | Nec Corporation | Vector processing apparatus with instruction re-ordering |
CN1672128A (zh) * | 2002-07-26 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 用于并行访问多个矢量元素的方法和设备 |
CN102156637A (zh) * | 2011-05-04 | 2011-08-17 | 中国人民解放军国防科学技术大学 | 向量交叉多线程处理方法及向量交叉多线程微处理器 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6052471B2 (ja) * | 1980-05-14 | 1985-11-19 | 富士通株式会社 | ベクトル演算処理システム |
JPS58134365A (ja) * | 1982-02-03 | 1983-08-10 | Hitachi Ltd | ベクトル処理装置 |
US4789925A (en) | 1985-07-31 | 1988-12-06 | Unisys Corporation | Vector data logical usage conflict detection |
JPH06103495B2 (ja) * | 1987-02-12 | 1994-12-14 | 日本電気株式会社 | 情報処理装置 |
JPS6462764A (en) * | 1987-09-03 | 1989-03-09 | Agency Ind Science Techn | Vector computer |
US5043867A (en) * | 1988-03-18 | 1991-08-27 | Digital Equipment Corporation | Exception reporting mechanism for a vector processor |
DE68928113T2 (de) | 1988-04-01 | 1997-10-09 | Nippon Electric Co | Reihenfolgesteuersystem zur Behandlung von Befehlen |
JP2870254B2 (ja) * | 1991-10-02 | 1999-03-17 | 日本電気株式会社 | 仮想計算機の入出力割り込み処理方式 |
JPH06230964A (ja) * | 1993-02-01 | 1994-08-19 | Hitachi Ltd | キャッシュメモリを備えた計算機 |
JPH06274525A (ja) * | 1993-03-19 | 1994-09-30 | Hitachi Ltd | ベクトルデータプリフェッチ制御装置 |
US6208207B1 (en) | 1999-05-05 | 2001-03-27 | Simon Fraser University | Adaptive linearizer for RF power amplifiers |
JP3733842B2 (ja) | 2000-07-12 | 2006-01-11 | 日本電気株式会社 | ベクトルスキャタ命令制御回路及びベクトル型情報処理装置 |
JP3789320B2 (ja) * | 2001-06-12 | 2006-06-21 | エヌイーシーコンピュータテクノ株式会社 | ベクトル処理装置及び該装置を用いた追い越し制御方法 |
US7734676B2 (en) * | 2001-06-27 | 2010-06-08 | International Business Machines Corporation | Method for controlling the number of servers in a hierarchical resource environment |
GB2475653B (en) * | 2007-03-12 | 2011-07-13 | Advanced Risc Mach Ltd | Select and insert instructions within data processing systems |
US8060728B2 (en) | 2007-05-14 | 2011-11-15 | Apple Inc. | Generating stop indicators during vector processing |
US8078847B2 (en) * | 2007-05-14 | 2011-12-13 | Apple Inc. | Detecting memory-hazard conflicts during vector processing |
US8131979B2 (en) * | 2008-08-15 | 2012-03-06 | Apple Inc. | Check-hazard instructions for processing vectors |
GB2464292A (en) * | 2008-10-08 | 2010-04-14 | Advanced Risc Mach Ltd | SIMD processor circuit for performing iterative SIMD multiply-accumulate operations |
US8972698B2 (en) | 2010-12-22 | 2015-03-03 | Intel Corporation | Vector conflict instructions |
-
2011
- 2011-09-28 US US13/200,656 patent/US9021233B2/en active Active
-
2012
- 2012-09-26 CN CN201280047433.1A patent/CN103930883B/zh active Active
- 2012-09-26 JP JP2014532473A patent/JP6463633B2/ja active Active
- 2012-09-26 GB GB1403770.9A patent/GB2508751B/en active Active
- 2012-09-26 KR KR1020147009601A patent/KR102048213B1/ko active IP Right Grant
- 2012-09-26 WO PCT/GB2012/052383 patent/WO2013045919A1/en active Application Filing
-
2015
- 2015-03-23 US US14/665,142 patent/US9483243B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4870569A (en) * | 1985-11-15 | 1989-09-26 | Fujitsu Limited | Vector access control system |
EP0620533A2 (en) * | 1993-04-13 | 1994-10-19 | Nec Corporation | Vector processor |
US5590353A (en) * | 1993-07-15 | 1996-12-31 | Hitachi, Ltd. | Vector processor adopting a memory skewing scheme for preventing degradation of access performance |
CN1672128A (zh) * | 2002-07-26 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 用于并行访问多个矢量元素的方法和设备 |
EP1569091A2 (en) * | 2004-02-23 | 2005-08-31 | Nec Corporation | Vector processing apparatus with instruction re-ordering |
CN102156637A (zh) * | 2011-05-04 | 2011-08-17 | 中国人民解放军国防科学技术大学 | 向量交叉多线程处理方法及向量交叉多线程微处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN103930883A (zh) | 2014-07-16 |
GB2508751B (en) | 2020-09-02 |
JP6463633B2 (ja) | 2019-02-06 |
JP2014532221A (ja) | 2014-12-04 |
US9021233B2 (en) | 2015-04-28 |
US20150261512A1 (en) | 2015-09-17 |
KR20140071425A (ko) | 2014-06-11 |
US20130080737A1 (en) | 2013-03-28 |
WO2013045919A1 (en) | 2013-04-04 |
GB201403770D0 (en) | 2014-04-16 |
US9483243B2 (en) | 2016-11-01 |
GB2508751A (en) | 2014-06-11 |
KR102048213B1 (ko) | 2019-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103930883B (zh) | 用于响应于矢量访问指令的交叉数据访问的方法和装置 | |
US8019977B2 (en) | Generating predicate values during vector processing | |
US9513922B2 (en) | Computer system and a method for generating an optimized program code | |
US8078847B2 (en) | Detecting memory-hazard conflicts during vector processing | |
US8060728B2 (en) | Generating stop indicators during vector processing | |
US8082420B2 (en) | Method and apparatus for executing instructions | |
US8019976B2 (en) | Memory-hazard detection and avoidance instructions for vector processing | |
US6889318B1 (en) | Instruction fusion for digital signal processor | |
US8181001B2 (en) | Conditional data-dependency resolution in vector processors | |
US8176299B2 (en) | Generating stop indicators based on conditional data dependency in vector processors | |
US20090249026A1 (en) | Vector instructions to enable efficient synchronization and parallel reduction operations | |
US20130086564A1 (en) | Methods and systems for optimizing execution of a program in an environment having simultaneously parallel and serial processing capability | |
US8745360B2 (en) | Generating predicate values based on conditional data dependency in vector processors | |
US9513915B2 (en) | Instruction merging optimization | |
US20130262839A1 (en) | Instruction merging optimization | |
US20130054939A1 (en) | Integrated circuit having a hard core and a soft core | |
US10338926B2 (en) | Processor with conditional instructions | |
US20040059894A1 (en) | Process for running programs on processors and corresponding processor system | |
CN111258950A (zh) | 原子访存方法、存储介质、计算机设备、装置和系统 | |
WO2017072600A1 (en) | Run-time code parallelization using out-of-order renaming with pre-allocation of physical registers | |
US20090031118A1 (en) | Apparatus and method for controlling order of instruction | |
CN111258653B (zh) | 原子访存方法、存储介质、计算机设备、装置和系统 | |
US11403108B2 (en) | Exception handling | |
CN116610366A (zh) | 基于优先级的gpgpu分支处理架构及方法 | |
MXPA98002291A (en) | Apparatus for detection based on region of interference between reordered memory operations in a process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |