CN109074256A - 在执行向量操作时管理地址冲突的装置及方法 - Google Patents
在执行向量操作时管理地址冲突的装置及方法 Download PDFInfo
- Publication number
- CN109074256A CN109074256A CN201780024882.7A CN201780024882A CN109074256A CN 109074256 A CN109074256 A CN 109074256A CN 201780024882 A CN201780024882 A CN 201780024882A CN 109074256 A CN109074256 A CN 109074256A
- Authority
- CN
- China
- Prior art keywords
- instruction
- vector
- address
- execution
- executing
- 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.)
- Granted
Links
- 239000013598 vector Substances 0.000 title claims abstract description 324
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000007689 inspection Methods 0.000 claims abstract description 125
- 238000012545 processing Methods 0.000 claims abstract description 70
- 230000004044 response Effects 0.000 claims abstract description 40
- 238000004590 computer program Methods 0.000 claims description 4
- 230000005611 electricity Effects 0.000 claims description 4
- 230000009467 reduction Effects 0.000 claims description 4
- 238000001514 detection method Methods 0.000 claims description 3
- 230000001052 transient effect Effects 0.000 claims description 2
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 abstract description 10
- 230000033228 biological regulation Effects 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 29
- 230000008901 benefit Effects 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 3
- 235000013399 edible fruits Nutrition 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- HJCCZIABCSDUPE-UHFFFAOYSA-N methyl 2-[4-[[4-methyl-6-(1-methylbenzimidazol-2-yl)-2-propylbenzimidazol-1-yl]methyl]phenyl]benzoate Chemical compound CCCC1=NC2=C(C)C=C(C=3N(C4=CC=CC=C4N=3)C)C=C2N1CC(C=C1)=CC=C1C1=CC=CC=C1C(=O)OC HJCCZIABCSDUPE-UHFFFAOYSA-N 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- 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
-
- 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/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- 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
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
提供了一种在执行向量操作时管理地址冲突的装置及方法。该装置具有:用于存储向量操作数的寄存器存储装置,各个向量操作数包含多个元素;及用于执行指令以执行由这些指令指定的操作的执行电路。该执行电路具有用于执行存储器访问操作以在该寄存器存储装置与存储器之间移动这些向量操作数的访问电路,及用于使用这些向量操作数执行数据处理操作的处理电路。该执行电路可经排列以迭代地执行向量循环,其中在每个迭代期间,该执行电路执行指令序列以实现该向量循环。该序列包括标识多个存储器地址的检查指令,并且该执行电路响应于执行该检查指令以确定在该多个存储器地址中是否存在地址危险条件。针对该向量循环的每次迭代,该执行电路响应于执行确定无该危险地址条件的该检查指令而当执行该指令序列时采用预设级别的向量化来实现该向量循环。相比之下,在存在地址危险条件时,在执行该指令序列时该执行电路采用降低级别的向量化以实现该向量循环。已发现此方法提供用于动态调节在该向量循环的每个迭代期间采用的向量化级别的低等待时间机制,使得能够向量化代码,同时在存在地址危险条件时仍实现高效性能。
Description
技术领域
本技术是关于一种在执行向量操作时管理地址冲突的装置及方法。
背景技术
一种用于改良数据处理装置性能的已知技术是提供用以支持向量操作执行的电路。对至少一个向量操作数执行向量操作,其中各个向量操作数包含多个元素。执行向量操作随后涉及在(一个或多个)向量操作数中跨过各种元素重复地应用操作。
在某些实施方式中,亦已知提供向量处理电路(通常称为SIMD(单指令多数据)处理电路),该向量处理电路提供并行处理的多个通道以在向量操作数中各种元素上并行执行操作。
经由使用向量操作,当与一连串等效标量操作的性能相比时可实现显著性能益处。
适用于SIMD的传统程序通常执行常规存储器访问并且经常遵循线性存储器寻址方案,这使得从标量代码直接变换为向量代码。在这种情况中,在循环迭代之间不存在依赖性且向量化是不复杂的,因为当同时处理向量元素时不存在可能的竞态条件。遗憾地,在吾人期望向量化以获取性能的众多现实程序中,在标量代码中的迭代之间存在非显然量之依赖性。在这种情形中,可难以预测若向量化该代码则可在运行时显现的地址冲突之频率。
由此,通常必须于编译阶段采取保守方法,由此若无法精确预测地址冲突的存在,则可不向量化代码,并且由此将牺牲任何潜在性能增益。
试图引入机制以在地址向量中动态分析地址冲突的先前尝试具有显著等待时间问题,这可限制由其等用途实现的任何潜在益处。
期望提供减轻上述问题的机制。
发明内容
在一个示例配置中,提供一种装置,其包含:寄存器存储装置,用以存储向量操作数,各个向量操作数包含多个元素;执行电路,用以执行指令以执行由这些指令指定的操作,该执行电路包含用以执行存储器访问操作以在该寄存器存储装置与存储器之间移动这些向量操作数的访问电路;及用以使用这些向量操作数执行数据处理操作的处理电路;该执行电路被布置为迭代地执行向量循环,在每个迭代期间该执行电路被布置为执行指令序列来实现该向量循环,该序列包括标识多个存储器地址的检查指令,且该执行电路响应于执行该检查指令以确定在该多个存储器地址中是否存在地址危险条件;针对该向量循环的每次迭代,该执行电路响应于该检查指令的执行确定无该地址危险条件而当执行该指令序列时采用预设级别的向量化来实现该向量循环,并且响应于该检查指令的执行确定存在该地址危险条件而当执行该指令序列时采用降低级别的向量化来实现该向量循环。
在另一示例配置中,提供一种当在装置中执行向量操作时管理地址冲突的方法,该装置具有:用以存储向量操作数的寄存器存储装置,各个向量操作数包含多个元素;及用以执行指令以执行由这些指令指定的操作的执行电路,该执行电路执行存储器访问操作以在该寄存器存储装置与存储器之间移动这些向量操作数,及使用这些向量操作数执行数据处理操作,该方法包含:迭代地执行向量循环;在每个迭代期间,在该执行电路中执行指令序列以实施该向量循环,该序列包括标识多个存储器地址的检查指令,且该执行电路响应于执行该检查指令以确定在该多个存储器地址中是否存在地址危险条件;并且针对该向量循环的每次迭代,响应于该检查指令的执行确定无该地址危险条件而当执行该指令序列时采用预设级别的向量化来实施该向量循环,且响应于该检查指令的执行确定存在该地址危险条件而当执行该指令序列时采用降低级别的向量化来实现该向量循环。
在另一示例配置中,提供一种以非暂态形式存储计算机程序的计算机程序产品,用于控制计算机以提供对应于根据上文所讨论的配置的装置的用于程序指令的虚拟机执行环境。
在又一示例配置中,提供一种装置,其包含:寄存器存储装置构件,用于存储向量操作数,各个向量操作数包含多个元素;执行构件,用于执行指令以执行由这些指令指定的操作,该执行构件包含用于执行存储器访问操作以在该寄存器存储装置构件与存储器之间移动这些向量操作数的访问构件,及用于使用这些向量操作数执行数据处理操作的处理构件;该执行构件,用于迭代地执行向量循环,在每个迭代期间,该执行构件用于执行指令序列以实施该向量循环,该序列包括标识多个存储器地址的检查指令,且该执行构件用于响应于执行该检查指令确定在该多个存储器地址中是否存在地址危险条件;针对该向量循环的每次迭代,该执行构件响应于行该检查指令的执行确定无该地址危险条件而当执行该指令序列时采用预设级别的向量化来实现该向量循环,并且响应于该检查指令的执行确定存在该地址危险条件而当执行该指令序列时采用降低级别的向量化来实现该向量循环。
附图说明
本技术将仅以示例的方式参考如在附图中所说明的其实施例进一步描述,其中:
图1是根据一个实施例的装置的框图;
图2是根据一个实施例说明使用图1的装置执行向量循环的流程图;
图3是根据替代实施例说明使用图1的装置执行向量循环的流程图;
图4是根据又一实施例说明使用图1的装置执行向量循环的流程图;
图5根据一个实施例示意性地说明可如何对在执行检查指令期间所需的比较分组;
图6是根据一个实施例说明旋转器及比较器可如何使用以合并根据图5所示的分组的多个地址比较的框图;
图7A至图7E是用以说明检查指令的替代变体的示图,该检查指令可用于一个实施例中,其中需要地址冲突检测的相关地址向量含有连续存储器地址;
图8是根据一个实施例示意性地说明可如何执行编译操作以确定在特定向量循环中使用的适当形式的检查指令的流程图;
图9是说明根据插入向量循环中的检查指令的类型的经向量化代码相对于标量实施的潜在加速的示图;
图10根据一个实施例示意性地说明数据处理装置的虚拟机实施方式。
具体实施方式
在参考附图讨论实施例之前,提供对实施例的以下描述。
在一个实施例中,提供一种装置,其具有:用以存储向量操作数的寄存器存储装置,其中各个向量操作数包含多个元素;及用以执行指令以执行由这些指令指定的操作的执行电路。该执行电路具有用以执行存储器访问操作以在该寄存器存储装置与存储器之间移动这些向量操作数的访问电路及用以使用这些向量操作数执行数据处理操作的处理电路。该执行电路可被布置为迭代地执行向量循环,并且在每个迭代期间将执行指令序列以实施该向量循环。根据所述的实施例,该序列包括标识多个存储器地址的检查指令,并且该执行电路响应于执行该检查指令以确定在多个存储器地址中是否存在地址危险条件。根据所述的实施例,针对向量循环的每次迭代,该执行电路响应于执行检查指令确定无地址危险而当执行指令序列以实现该向量循环时采用预设级别的向量化。相比之下,响应于检查指令的执行确定存在地址危险条件,该执行电路被布置为当执行该指令序列以实现该向量循环时采用降低级别的向量化。
所述的技术提供用于在向量循环的每个迭代期间动态确定存在或无地址危险条件的有效机制。该方法提供低等待时间的解决方案,通过使在向量循环的任何特定迭代期间采用的该级别向量化受在向量循环的该迭代中执行该检查指令的结果直接影响。具体地,尽管提供预设级别的向量化,针对其中执行检查指令确定存在地址危险条件的任何特定迭代,该执行电路可被布置为直接采用降低级别的向量化以处理该地址危险条件,该机制因此实现在该向量循环的每个迭代期间采用的向量化级别中的动态转换。
此方法使代码能够向量化,并且针对所得地址危险而言,可出现以基于向量循环迭代有效处理向量循环迭代。归因于与该机制相关的低等待时间,已发现当与等效标量处理相比时在地址冲突可在执行向量操作时出现的各种情况中提供显著性能益处。由于所采用的向量化级别可在该向量循环的每次迭代上动态改变,在其中一些迭代具有地址冲突及其他迭代不具有的情况中此可提供显著性能益处。
存在可实现预设级别的向量化及降低级别的向量化的多种方式。在一个实施例中,该执行电路响应于执行检查指令确定无地址危险条件而通过执行指令序列中的第一多个指令来采用预设级别的向量化以实现该向量循环。相比之下,该执行电路响应于检查指令的执行确定存在地址危险条件而通过迭代地执行指令序列中的第二多个指令来采用降低级别的向量化哟实现该向量循环。
由此,在此实施例中,执行检查指令的结果通过当检测到地址危险条件时提供含有第二多个指令的有效后馈路径来直接影响在该循环中的控制流。通过有效提供后馈路径,此方法实现原本认为不能经向量化的标量代码的向量化。具体地,标量代码可经向量化,并且经由在该向量循环的每个迭代期间执行检查指令,无论何时检测到地址危险条件,处置皆可传递至后馈路径。在该后馈路径中迭代执行第二多个指令可随后通过避免地址危险确保发生正确处理。
存在可导致该检查指令的执行影响在该向量循环的当前迭代中采用的向量化级别的数种方式。在一个实施例中,该执行电路响应于执行该检查指令以产生指示是否存在地址危险条件的结果数据,用于由在该序列中的随后指令参考。
结果数据可采取各种形式。例如,可将其写入系统寄存器以由随后指令参考。或者,可在更新一个或多个旗标(诸如由执行电路参考的条件旗标)时直接表示结果数据。通过此方法,随后指令的操作可受由结果数据更新的那些旗标的当前状态影响。例如,在一个实施例中,随后指令是分支指令,当由执行电路执行时,该分支指令参考一个或多个旗标以确定是否执行第一多个指令或是否迭代地执行第二多个指令。由此,通过此方法,该分支指令可被布置为取决于设定为执行该检查指令的结果的旗标有条件地分支至第二多个指令。因此,在无地址危险条件时,执行该分支指令将仅仅导致该处理为对第一多个指令进行,而在存在危险条件时,执行该分支指令将导致指令流分支至第二多个指令,其可随后迭代地执行以实现该向量循环的当前迭代所需的处理。
第二多个指令可采取各种形式。在一个实施例中,其等包含导致执行电路对个别元素操作的标量指令,且实现该向量循环所需的第二多个指令的迭代执行的数目是取决于与预设级别的向量化相关的向量操作数中主动元素的数目。因此,仅以示例的方式,若在与预设级别的向量化相关的向量操作数中存在八个主动元素,则第二多个指令可执行八次以实现向量循环的当前迭代,在每个迭代期间,对与原本已执行的并行处理的通道之一相关的标量值操作的第二多个指令使得维持默认级别的向量化,并且因此使得执行第一多个指令。
然而,在替代实施例中,第二多个指令可不包含标量指令,而是第二多个指令可由在与默认级别的向量化相比时对降低数目的向量元素操作的向量指令构成。例如,在一个实施例中,该执行电路响应于行该检查指令的执行以产生具有初始谓词值的保护谓词,且第二多个指令包含导致该执行电路对一个或多个向量操作数的元素的子集并行操作的向量指令,该子集是由该保护谓词标识。在第二多个指令的每次迭代上,更新保护谓词的谓词值以排除由任何先前迭代操作的一个或多个向量操作数的任何元素。因此,根据此方法,仍必须迭代地执行第二多个指令以处理与向量循环的当前迭代相关的向量操作数的全部元素,但在第二多个指令的每次迭代中,并行处理多个元素。这使向量化级别降低以避免地址危险问题,同时仍然使得向量化级别在向量循环的当前迭代中达成。
在一个实施例中,主谓词可用于标识在向量操作数中的主动元素。因此,甚至当采用预设级别的向量化时,可能并非全部在向量操作数中指定的元素在向量循环的当前迭代中处理。因此,当判定存在地址危险条件以采用包含第二多个指令的后馈路径时,确保不操作未由主谓词标识为主动元素的向量操作数的任何元素也是重要的。在一个实施例中,这通过限制保护谓词以标识元素子集来达成,这些元素是通过主谓词标识的主动元素。
尽管在如上文所述的一些实施例中,降低级别的向量化是通过提供分开的后馈路径来实施,并导致执行该检查指令直接影响在该循环中的控制流,使得在存在地址危险条件时使用该后馈路径,在替代实施例中,可并非必须提供此分开的后馈路径。具体地,根据替代实施例,预设级别的向量化标识第一数目的主动元素,且响应于检查指令的执行确定无地址危险条件,该执行电路被布置为当执行该指令序列以实现该向量循环时并行处理第一数目的元素。然而,当检查指令的执行确定存在地址危险条件时,该执行电路响应于执行该检查指令的执行以产生将主动元素的数目降低至小于第一数目的主动元素的第二数目的控制输出,而当执行该指令序列以实现该向量循环时通过并行处理第二数目的元素导致该执行电路采用降低级别的向量化。
因此,根据此方法,不是取决于执行该检查指令的结果导致控制流改变,该检查指令的执行可用于取决于检查结果直接改变所处理的主动元素的数目。因此,在向量循环的每个迭代期间,所处理的主动元素的数目可取决于针对该特定迭代检查电路的结果而改变。因此,针对其中未检测到地址危险条件的任何迭代,该预设的第一数目的元素可并行执行,但针对其中检测到地址危险条件的任何迭代,则处理可对由检查指令的结果确定的降低数目的主动元素进行。这使得该检查结果直接控制在向量的每个迭代期间处理的元素数目,使得在一个迭代接一个迭代级别上动态调节向量化的程度。
在一个实施例中,于向量循环的每次迭代的开始处,该执行电路被布置为返回到采用预设级别的向量化。因此,所采用的向量化级别的任何降低是于向量循环的各个开始处重置的,使得只要可能便采用全部预设级别的向量化。
存在可标识在存在地址危险条件时处理的第二数目的主动元素的数种方式。在一个实施例中,在执行检查指令时通过执行电路产生的控制输出包含标识形成第二数目的主动元素的主动元素的保护谓词。
在执行检查指令时执行的检查操作的性质可取决于实施例而变化。在一个实施例中,检查指令指定包含多个主动地址元素的至少一个向量操作数,并且在执行该检查指令时,该执行电路被布置为比较各个主动地址元素与各个其他主动地址元素以确定是否存在地址危险条件。
在替代实施例中,检查指令可指定与第一序列的连续地址相关的第一地址及与第二序列的连续地址相关的第二地址,并且在执行该检查指令时,该执行电路被布置为取决于在第一地址与第二地址之间的差确定存在地址危险条件。
此方法可提供在可引起地址冲突的地址的相关向量各者指定连续地址序列的情况中用于执行必需比较的有效机制。
存在可基于计算的差检测地址危险条件的存在的数种方式。例如,在一个实施例中,假设第一地址是x且第二地址是z,若差z-x大于或等于向量长度,或为负或0,则可确保将不存在地址危险条件。然而,若差z-x小于向量长度并大于0,则将出现地址危险条件。
在替代实施例中,可替代地判定执行检查以检测其中在第一地址与第二地址之间的绝对差不大于或等于向量长度的情况。若绝对差小于向量长度,这可指示存在地址危险条件。然而,应注意基于绝对差的检查可产生一些伪阳性,由于当计算的带符号的整数结果z-x小于向量长度并且亦为负或等于0时,实际上不存在竞态条件。
尽管在一个实施例中,检查指令可被布置为导致该执行电路执行所需检查操作并产生直接影响向量循环迭代的剩余处置所需的结果数据,在替代实施例中,进一步性能改良可通过结合检查操作与其他操作来获得。例如,在一个实施例中,检查指令是检查及存储器访问指令,该执行电路响应于执行该检查及存储器访问指令以执行检查操作来确定在多个存储器地址中是否存在地址危险条件,同时亦相对于多个存储器地址执行存储器访问操作。
存储器访问操作可采取各种形式。例如,其可采取用于使用由检查及存储器访问指令指定的多个存储器地址自存储器撷取数据的集中操作形式。通过合并检查指令与存储器访问指令的功能,可能隐藏检查操作的等待时间。亦已经发现,在某些实例中,用以执行存储器访问操作所需的一些处理可重新用于检查操作。
进一步益处亦可通过将检查及存储器访问操作结合至单个指令中来达成。例如,在确定存在地址危险条件时,执行电路可被布置为终止存储器访问操作的任何剩余部分。因此,这允许取决于地址危险检查结果提早终止存储器访问操作的一些部分。这可因此避免执行非必需的操作并因此改良装置的总效率。
在一个实施例中,处理电路可包含专用检查电路以在执行检查指令时执行检查操作。然而,在替代实施例中,不一定提供此专用检查电路,并且替代地在经提供以用于执行数据处理操作的处理电路中的现存处理单元可重新用于在执行检查指令时执行必需检查操作。
在一个此实施例中,在该处理单元中旋转器电路及比较器电路用于合并在执行检查操作期间需要的一个或多个地址比较。因此,在处理单元中的现存硬件可用于当执行检查操作时改良执行所需地址比较的效率。
如先前提及,在一些实施例中,检查操作的结果可用于当执行在向量循环中的一个或多个随后指令时直接更新由执行电路引用的条件旗标。然而,在替代实施例中,该装置可还包含危险检查状态寄存器,该执行电路被布置为将通过执行检查指令产生的结果数据存储至该危险检查状态寄存器中。这可提供一些益处,例如在指令编码空间非常受限的情况中。例如,在此情况中,可判定经由单个指令合并检查操作与另一操作,诸如在检查及存储器访问指令的先前示例中。使用检查操作的结果可随后在不需要检查操作的情况中被忽略。具体地,在此情况中,尽管危险检查状态寄存器可利用该结果更新,随后指令可不引用危险检查状态寄存器,并由此执行该指令可有效地仅执行指定的存储器访问操作。这因此使得单个指令能够被布置为取决于需要来执行标准存储器访问操作或具有相关地址冲突检查的存储器访问操作。在期望使用地址冲突检测的情况中,随后指令可例如被布置为读取危险检查状态寄存器的内容并适当地设定条件旗标,随后分支指令可随后如先前讨论执行,其中控制流随后取决于如何设定条件旗标并因此是否已检测到地址危险条件。在另一实施例中,检查及存储器访问指令可直接设定条件旗标。
在一个实施例中,各个向量操作数包含N个元素,且N个主动元素是与默认级别的向量化相关使得执行电路响应于检查指令的执行确定无该地址危险条件而当执行该指令序列以实现向量循环时并行处理N个元素。因此,在此实施例中,假设各个指定向量操作数的全部元素是主动元素,并且经受适当处理。
然而,在替代实施例中,各个向量操作数包含N个元素,主谓词标识为主动元素,元素的数目小于或等于N,且预设级别的向量化对应于由主谓词标识的主动元素,使得执行电路响应于检查指令的执行确定无地址危险条件而当执行该指令序列以实施向量循环时并行处理由主谓词标识的主动元素。因此,经由使用主谓词,在各个向量操作数中指定的元素子集可标识为在向量循环迭代中待处理的主动元素。
在一些实施例中,可提供检查指令的多个不同变体。例如,无论何时检测到地址危险条件,一种变体可被布置为设定一个或多个旗标,但不撷取关于哪些地址元素引起地址危险的任何信息,而另一变体可被布置为产生保护谓词,其值取决于其中在(一个或多个)输入向量的元素中何处检测到地址冲突。发明人意识到检查指令的不同变体可取决于实际上检测到的地址冲突的统计性质使得达成不同级别的性能改良。在一个实施例中,可采用该装置以维持关于当执行指令序列时检测到的地址危险条件的信息,其中该信息变得为编译程序可用以使得随时间重新编译该代码。
具体地,在一个实施例中,该装置还包含计数器电路以维持关于针对先前执行的指令序列的地址危险条件的出现的历史数据,并且该执行电路被布置为在控制包括多个不同类型的检查指令的指令集下操作。历史数据随后可变得为编译程序可用以使该编译程序考虑到历史数据确定哪种类型的检查指令在向量循环中使用。
该编译程序可以是静态编译程序,或可以是运行时使用的动态编译程序,用以取决于历史数据动态改变执行的指令序列。
历史数据可采取各种形式。例如,在一段时期内,可在一个实施例中仅仅计数地址危险条件的出现。在替代实施例中,可额外或替代地试图撷取在各个向量长度中检测到的地址冲突的数目。已发现用于最佳改良性能的检查指令类型可不仅取决于所检测到的地址冲突的总数,但亦取决于那些地址冲突是否群集在特定向量长度中或更均匀地分散在向量循环的迭代中而变化。通过维持撷取地址冲突的总数及关于这些地址冲突如何群集在向量长度群组中的信息二者的历史数据,这可为该编译程序提供适宜信息以确定如何最佳使用检查指令的不同变体以改良性能。
现将参考附图描述特定实施例。
如先前提及,在吾人期望向量化以获得性能的众多现实程序中,在标量代码中的迭代之间存在非显然量的地址依赖性。出于说明的缘故,考虑到数种使用情况。作为第一使用情形,将考虑直方图问题,其中期望执行以下操作:
for(x=0;x<SIZE;x++){
A[C[x]]++;
}
本质上,针对x值序列,该操作涉及自将用于形成地址的数组C获得数据、于该地址访问数据值A、及随后使该数据值增加1。
若可保证不存在竞态条件(即,无地址冲突),则用于关键循环的向量假码可如下表示:
·以偏移x自数组C执行连续读取至向量寄存器zC中
·使用在zC中的指针从数组A集中并将结果写入向量寄存器zA中
·将#1添加至zA中的每个元素
·使用在zC中的指标散布向量zA
·使x增加向量长度
·若为该情形,则检查x小于数组的大小并继续迭代
因此,自数组C获得指针向量并且存储在向量寄存器zC中,并且随后使用在向量寄存器zC中的各种指针集中来自数组A的数据值。一旦向量寄存器zA使用在寄存器zC中的指针填充有自数组A获得的数据值,则将数值1添加至每个数据值,并使用在寄存器zC中的相同指针将所得数据值散布回存储器。重复此过程直至x不再小于对该操作指定的数组的大小。
应了解,通过向量化直方图操作,这可显著增加性能。然而,若存在在数组C中的一些条目可引用相同地址元素的可能性,并且若此地址冲突恰好存在于索引的单个向量中(即,用于向量循环的一个迭代中的地址向量),则上述方法将导致不正确结果(具体地,一个或多个数据值可不增加正确量)。如后文将参考所述实施例所更详细讨论,不是避免一起向量化(这将导致低性能),所述的技术利用向量循环中能够使上文提及的竞态条件在运行时得以检测并采取适当行为的检查指令。
作为第二使用情形,考虑到存储器复制(Memcpy)问题,这需要执行以下操作:
for(x=0;x<SIZE;x++){
A[x]=B[x];
}
此操作将数据从一个数组复制至另一数组。由于在该循环内不存在控制代码,此代码一般是用于向量化的良好候选。然而,代码不能经安全地向量化而不将足够提示提供至编译程序,因为尚不清楚向量化是否导致任何地址冲突(数组A与B可重迭)。在众多情况中,实际上于运行时不存在危险,但编译程序大体采取保守方法并且将不向量化其中存在歧义的代码,藉以牺牲任何性能增益。然而,如将在后文讨论,通过采用本文所述的检查指令的使用,可能于运行时标识潜在危险,并采取适当正确动作,因此允许受益于向量化的性能改良,甚至当编译时尚不知晓当执行代码时是否将出现任何危险。
在更详细讨论根据所述实施例提供的检查指令之前,将首先参考图1描述可执行指令的装置。具体地,图1说明根据一个实施例的数据处理装置,其中将由该装置执行的指令置于指令队列100中,这些指令从该指令队列传递至解码电路105。解码电路解码指令以产生置于发布队列110中的某些控制信息,此控制信息有时被称为微操作(micro-ops)。发布队列将随后将适当控制信息分配至形成该装置的执行电路的相关处理单元,以导致执行由所接收的指令指定的操作。
可认为执行电路包含处理电路115及向量加载/存储单元(LSU)145,该处理电路由数个单元构成以执行特定数据处理操作,该向量加载/存储单元用于在存储器与向量寄存器文件140之间任一方向上移动向量操作数。
在图1所说明的示例中,处理电路115是由多个向量处理单元120、125、130、135形成。由此,在发布队列110中标识的浮点操作将转发到用于处置的浮点单元(FPU)135,倍增及/或乘法累计操作将传递至乘法累计(MAC)单元130,且标准算术操作将传递至算术逻辑单元(ALU)125。可提供专用检查单元120以用于执行后文更详细讨论的检查指令,以执行必需地址比较操作来确定是否存在地址危险条件。如后文将讨论,取决于所执行的检查指令的变体,所需地址比较操作的结果可导致在谓词寄存器文件150的谓词寄存器之一中设定一个或多个旗标155及/或设定保护谓词。作为具有单独专用检查单元的替代,在该处理电路中预存在单元之一可用于执行用以执行检查指令所需的操作。例如,如后文将讨论,在一个实施例中,ALU 125可用于执行检查指令,并由此用于设定在谓词寄存器文件150中的旗标155及/或保护谓词。
向量处理电路115所需的各种输入操作数将在向量寄存器文件140中自源寄存器读取。此外,由各个单元产生的结果操作数将通常被存储回在向量寄存器文件140中的目的寄存器。加载及存储指令将用于导致LSU 145执行对应加载及存储操作以导致将操作数数据从存储器加载向量寄存器文件140的指定寄存器中,或用于将一个或多个向量寄存器的内容存储回存储器。
可提供数个系统寄存器160,其内容用于控制数据处理装置的操作。如将在后文更详细描述,在一个实施例中,作为直接设定旗标155的替代,检查操作的结果可存储在危险检查状态寄存器(HCSR)165中,以用于以后由处理电路执行的一个或多个随后指令参考。
如亦将在后文更详细讨论,可提供一个或多个地址冲突统计计数器170以用于维持关于当在该装置中执行向量操作时检测到的地址冲突的数目的历史数据。在为该装置可用的指令集包括该检查指令的数种不同变体的情况中,已发现通过维持关于地址冲突的适当统计计数器,这使得编译程序代码能够评估检查指令的哪些变体最可能给出较佳性能改良,从而允许重新编译该代码以考虑由统计计数器维持的历史数据。这将在后文参考图8及图9讨论。
根据后文所述的实施例,图1的装置可被布置为迭代地执行向量循环,并且在每个迭代期间,该执行电路被布置为执行指令序列来实施该向量循环,其中该序列包括标识待检查多个存储器地址是否存在地址危险条件的检查指令。根据所述的实施例,观察到检查指令的数种不同变体。第一种变体如下:
变体1:CHECK Pg,Zn.<T> //flag-setting only
输入操作数Zn标识含有地址元素向量的向量寄存器。操作数Pg标识含有主谓词的谓词寄存器,该主谓词用于标识在向量操作数Zn中哪些地址元素是主动地址元素。地址元素可直接标识地址,或替代地可以是与基址结合以标识该地址本身的指针/偏移。在一个实施例中,指定此主谓词是可选的,并且在无指定的主谓词时,假设在向量操作数Zn中全部地址元素是主动地址元素。最后,参数T标识数据类型,例如32位数据、64位数据、等等。这因此标识在向量操作数中各个元素的大小。在执行检查指令时,处理电路115比较各个主动地址元素与各个其他主动地址元素以确定是否有任何地址元素是相同的,并且在检测到此情况时产生指示存在地址危险条件的输出。根据上文提及的变体1,输出导致设定一个或多个条件旗标155以指示存在或不存在地址危险条件。
当考虑先前描述的直方图问题的第一使用情形时,现将参考图2更详细讨论变体1检查指令的使用。于步骤200,初始化偏移x,随后于步骤205使用偏移x将一连串指针(地址元素)加载向量寄存器zC中。若需要,于步骤205使用偏移x执行的连续地址加载将考虑主谓词信息。随后,于步骤210,通过执行先前提及的检查指令检查已加载寄存器zC中的指针是否存在地址冲突,并相应地设定旗标155。若指定主谓词,则该检查操作将受主谓词限制以排除任何非主动地址元素。
于步骤215,随后确定旗标是否指示存在地址冲突。若否,则此指示在向量寄存器zC中全部主动地址元素是唯一的,并且由此可采用预设级别的向量化用于向量循环的当前迭代。出于说明的缘故,将假设存在八个主动地址元素A、B、C、D、E、F、G及H,并且因此当采用预设级别的向量化时,并行处理全部八个地址。
由此,在执行检查操作检测到无任何地址冲突时,该过程进行至步骤220,其中使用在向量操作数寄存器zC中的全部地址指针从存储器集中数据,其中将所得数据写入向量寄存器zA中。随后,于步骤225,对所加载数据执行所需向量操作或数个向量操作,其中将结果写回向量寄存器zA中。考虑到先前直方图问题,此步骤全部所需应将一添加至已加载寄存器zA中的各个数据值,但应了解针对其他类型操作,一个或多个不同向量操作可替代地于步骤225执行。若需要,步骤225可被限制以不处理关于并行处理的非主动通道的任何数据。例如,当执行向量操作时考虑主谓词是有用的以避免可能出现与非主动通道相关的任何异常。
于步骤230,使用在操作数寄存器zC中的相同地址指针将在向量寄存器zA中的数据随后散布回存储器。若已指定主谓词,则散布操作受主谓词限制。
于此点,应了解向量循环迭代已并行处理八个通道的数据,并且由此已考虑八个地址。由此,于步骤235,偏移x增加了向量长度,随后于步骤240确定是否存在待处理的任何更多数据。若不存在,则该过程于步骤245结束,而假设存在待处理的更多数据,则该过程返回步骤205以执行向量循环的下一迭代。
若于步骤215确定条件旗标指示地址冲突,则根据图2所述的实施例,通过分支至由图2的右手侧所示的步骤序列实施的后馈路径采用降低级别的向量化。仅以示例的方式,假设八个地址元素序列是A、B、C、D、E、F、C、H并且由此因为地址元素C的两次出现而存在地址冲突。该过程可在此情况中通过执行在检查指令后的条件分支指令导致分支至后馈路径,其中分支指令分支至后馈路径,不论由执行检查指令设定的旗标是否指示存在地址危险条件。
于步骤250,谓词经初始化以仅标识用于处理的单个通道。因此,在第一迭代上,该谓词可经初始化至值“10000000”,假设存在根据预设级别的向量化的八个处理通道。随后,于步骤255,该谓词用于自操作数寄存器zC选择一个指针,在第一迭代中这标识对应于地址A的指针。随后,于步骤260,加载由该地址标识的标量数据元素,执行所需向量操作(诸如当考虑先前的直方图问题时使该值增加1),并且随后使用标识的指标将该结果存储回存储器。
随后,于步骤265确定是否存在待处理的任何更多主动通道,主动通道的数目取决于指定的任何主谓词。假设存在待处理的更多主动通道,则该过程进行至步骤270,不论谓词是否经调节以标识关于已指定的任何主谓词的下一主动通道。随后,该过程返回步骤255。仅以示例的方式,若主谓词将全部八个通道标识为含有主动元素,或不指定主谓词,应了解步骤255、260、265的过程逐个针对每个地址元素重复八次,随后于步骤265确定不存在待处理的更多主动通道。于此点,该处理返回至全向量路径,并且具体而言返回步骤235,此处偏移x现增加了向量长度。于此点,适当地使偏移x增加向量长度,因为在向量寄存器zC中全部主动地址元素将已通过迭代执行在图2的右手侧中说明的步骤来处理。该过程可随后经由步骤240进行至下一向量循环迭代。
根据变体1的检查指令,应了解当执行步骤210时,地址比较过程可在一些情况中提早终止。具体地,一旦已检测到地址冲突,可相应地设定旗标,并且不需要执行任何进一步地址比较以确定是否存在任何进一步地址冲突。这可提供非常有效的检查过程。
此外,将看到后馈路径是以非常有效的方式实施。具体地,尽管所需数据以标量方式加载,不需要执行任何标量操作以加载所需地址,因为全部所需地址是在向量寄存器zC中可用的,并且通过使用并调节如先前参考步骤250、270讨论的谓词,继而可能标识待处理的各个主动地址元素而不执行用于这些地址元素的任何进一步加载操作。
应了解图2的过程可以各种方式实现。然而,为了完整,以下代码序列说明可用于执行图2的过程的一个示例实施方式:
根据检查指令的第一种变体,地址冲突的任何发生导致设定相关旗标或数个旗标,并且为了处理分支至后馈路径,此处当前向量循环迭代实际上由标量操作的迭代序列实施。根据替代实施例,该检查指令可更进一步而不仅仅设定旗标,并且具体而言可设定保护谓词以准确标识哪些地址引起冲突。如后文参考图3所讨论,尽管这将一些额外步骤引入检查操作的实施方式,其允许后馈路径由在降低的向量长度上操作的向量操作的迭代执行来实现,并且因此可使得更快速地实现后馈路径。由此,在一个实施例,检查指令的第二种变体如下;
变体2:
CHECK Pd.<T>,Pg/Z,Zn.<T>//flag-setting with predicate
//generation
在此变体中,操作数Zn再次标识待对其执行检查操作的地址元素的向量,其中类型信息T标识在该向量中各个元素的大小。此外,可变Pd标识结果谓词,将保护谓词信息存储至该结果谓词中以指示主动元素属于直至并且包括出现第一地址冲突的元素的第一元素集合。又,类型信息T用于标识由谓词信息的各个项目管理的各个地址元素的大小。与变体1一样,主谓词可经由谓词寄存器Pg标识,在此示例中,“/Z”指示在结果谓词中,由主谓词指示的任何非主动通道应归零。这确保结果谓词仅可以是主谓词的子集。
图3是说明可被执行以实现向量循环的每次迭代以执行与先前参考图2所讨论者等效的操作的步骤序列的流程图。步骤300及305对应于图2的步骤200及205,并且由此导致向量寄存器zC填充有使用偏移x自存储器撷取的数据项序列,其中这些数据项各者形成地址元素。于步骤310,响应于执行检查指令的变体2来执行检查操作导致检查在向量寄存器zC中各个指针每一者是否有地址冲突,相应地设定旗标,并且此外设定保护谓词以指示主动地址元素属于直至并包括出现第一冲突的元素的第一元素集合。如先前讨论,当设定保护谓词时,这受主谓词限制,并且因此相对于与由主术语指示的非主动通道相关的任何地址元素未发现地址冲突。
随后,该过程进行至步骤315,其中使用在向量操作数zC中的指针集中数据,并且将结果写入向量寄存器zA中。
于步骤320,访问旗标以指示是否已发现地址冲突。若否,该过程进行至步骤325、330、335、340,其对应于图2的步骤225、230、235、240。与图2的步骤225一样,在图3的步骤325期间,向量操作可受限于仅在加载数据上执行,该加载数据标识为在由主谓词指示的并行处理的主动通道中,假设已指定主谓词。
若于步骤320确定这些旗标指示存在地址冲突,则该过程经由执行分支指令分支至后馈路径,例如使用与先前参考图2所讨论相同的机制。仅出于说明的缘故,假设当执行图3的操作时发现与针对先前参考图2所讨论的特定示例发现者相同的地址冲突,并且因此在并行处理第三及第七通道中发现地址元素C。由此,该过程进行至步骤350,此处主要谓词经初始化为主谓词的副本。出于以下讨论的目的,假设主谓词是p0,保护谓词是p1及主要谓词是p2。如下文更详细讨论,产生主要谓词的原因是因为在后馈路径的每个迭代期间,更新主要谓词值,并且不期望破坏需要出于其他目的维持的主谓词值。
该过程随后进行至步骤355,此处对加载数据元素执行向量操作并将结果写入寄存器zA中。视情况,步骤355的执行关于保护谓词受限以避免执行任何非必需数据处理操作。然而,在其他实施例中,归因于排列向量处理电路的方式,仅可有效在并行处理的全部通道上执行操作,并且随后丢弃关于保护谓词不需要的结果。
于步骤360,针对由保护谓词标识的数据元素,使用在向量寄存器zC中的相关指针将这些数据元素散布回存储器。随后,于步骤365,清除对应于经处理通道的在主要谓词中的区域,产生经更新的主要谓词p2。该过程随后进行至步骤370,此处确定是否存在待处理的任何剩余通道。若不存在,则处理可返回全向量路径,并且具体而言该过程可分支至步骤335。然而,假设存在待处理的剩余通道,则执行进一步检查操作以检查在受主要谓词限制的向量操作数zC中的指标以产生下一保护谓词。假设出于说明的缘故,主谓词将全部八个通道标识为主动,且地址冲突是如图3所说明,即,地址元素是A、B、C、D、E、F、C、H,则初始保护谓词原本为“11100000”。在通过步骤355、360、365的第一迭代之后,则主要谓词应更新以变为“00011111”并且由此当执行步骤375时,该步骤中检查过程受新的主要谓词限制,这可产生经更新的保护谓词“00011111”,因此未发现进一步地址冲突。
在步骤375之后,则于步骤380,使用在zC中的指针集中数据并将结果写入寄存器zA中。于步骤380必须再次集中数据,由于于步骤360执行的散布操作将潜在地改变所需的一个或多个数据项的值,并且因此依赖先前已于步骤315集中的数据是不适当的。该过程随后返回步骤355,此处执行后馈路径的下一迭代。
下一文本讨论在图3的过程中使用的各种谓词的特定示例形式。出于说明的缘故,假设主谓词是形式“11111100”,假设存在根据预设级别的向量化并行处理的八个通道。这标识全部通道(除最后两个通道之外)含有主动元素。当于步骤310执行地址冲突检查时,假设在产生初始保护谓词中的此结果是形式“11100000”。存在地址冲突将于步骤320检测到,并且该过程将分支至后馈路径,其中主要谓词p2经初始化以等于主谓词,并且因此采用值“11111100”。在后馈路径的第一迭代期间,在于步骤360执行散布操作之后,主要谓词将于步骤365更新以采用新的形式“00011100”,即,作为后馈路径的第一迭代的结果减少已经处理的前三个通道。
在于步骤375执行进一步检查之后,这将导致更新保护谓词。出于说明的缘故,假设在第五通道与第六通道之间标识另一地址冲突并且由此更新保护谓词p1以变为“00011000”。
在后馈路径的第二迭代期间,在于步骤360的散布操作之后,于步骤365更新主要谓词以采取形式“00000100”。随后于步骤375执行的检查是正常检查,因为仅存在一个剩余主动地址元素,并且由此所得保护谓词将是形式“00000100”。因此,后馈路径的最后迭代有效地是标量迭代,随后处理返回全向量路径以开始下一向量循环迭代。
应了解图3的过程可以各种方式实施,但用于实施图3的过程的一个示例代码序列如下:
在参考图2及图3所说明的示例二者中,在向量循环的每次迭代中,可能在存在检测到的地址危险条件时通过分支至后馈路径选择性降低在该迭代中采用的向量化的级别。然而,在替代实施例中,在向量循环的迭代中可采用降低级别的向量化而不提供分开的后馈路径。图4是说明根据此替代实施例执行的步骤的流程图,假设在图4中执行变体2的检查指令,并且由此产生保护谓词。步骤400、405及410与图3的300、305及310相对应,于步骤410不需要设定任何旗标除外,因为不存在取决于这种旗标的状态判定是否继续预设级别的向量化或分支至后馈路径的随后分支指令。
相反,该过程在步骤410之后进行至步骤415,此处使用在向量寄存器zC中的指针自存储器集中数据值的向量,其中将结果写入向量寄存器zA。若需要,在一个实施例中,集中操作可受于步骤410产生的保护谓词限制。
随后,该过程进行至步骤420,此处对加载数据执行向量操作,将结果随后写回目的寄存器zA。再次,若需要,这些操作可关于保护谓词受限,使得这些操作仅对由保护谓词标识的主动元素执行。
该过程随后进行至步骤425,此处使用在向量寄存器zC中的指针散布在向量寄存器zA中的数据,但受保护谓词限制。由此,应了解仅在散布操作期间写回存储器的结果数据涉及保护谓词已基于于步骤410执行的检查操作标识为主动的处理通道。因此,应了解,在未检测到地址冲突条件时,在执行步骤415、420及425期间采用预设级别的向量化,藉以处理全部主动通道,仅受指定的任何主谓词限制。然而,在检测到地址危险条件的情况中,在步骤415、420、425期间通过关于保护谓词限制至少散布操作采用降低级别的向量化,这仅将由主谓词指示的通道的子集标识为主动通道。随后,于步骤430,偏移x增加了保护谓词计数。因此,若保护谓词仅标识三个主动通道,偏移x将增加3。相比之下,在未检测到地址冲突条件的任何迭代中,保护谓词将有效标识在所处理的通道上不存在限制,并且由此在此迭代中,于步骤430偏移x将增加向量长度。
于步骤435,确定是否存在待处理的更多数据,并且若存在,该过程返回步骤405。应注意,于步骤405,不考虑在先前迭代中是采用预设级别的向量化还是降低级别的向量化,该过程将总是返回用于下一迭代的预设级别的向量化,并且由此加载向量寄存器zC中的指针数目将取决于向量长度。
当于步骤435确定不存在待处理的更多数据时,则该过程于步骤440结束。
尽管在图4的上文描述中,假设所执行的检查指令实质上与变体2相同,尽管不一定设定有任何旗标,在替代实施例中,可使用检查指令的另一变体,而不是生成保护谓词,该变体将指示在当前迭代期间处理的主动元素的数目产生为输出。在未检测到地址冲突时,该数目将仅仅指示正常向量长度,并且在该迭代中下游处理将因此不受限制,而非受针对该操作指定的任何主谓词限制。然而,在存在检测的地址冲突条件时,该数目将标识在当前迭代中处理的降低数目的主动元素,并且因此针对该迭代采用降低级别的向量化。
除参考先前图讨论的检查指令的上述变体之外,亦可能产生结合检查操作与其他操作的变体。例如,在一个实施例中,该检查操作可与存储器访问操作结合,使得在执行该单个指令时,执行上述检查操作二者,但此外关于由该指令指定的多个存储器地址执行存储器访问操作。作为一个特定示例,可产生检查指令的变体以提供危险感知集中操作,本文称为变体3并如下说明:
变体3:LDCHECK Zd.<T>,Pg/Z,[<Xn|SP>,<Zm>.<T>]
在此示例中,标量寄存器Xn或堆栈指针寄存器SP是用于含有基底指针,并且向量寄存器Zm随后提供偏移向量,其中类型字段T标识在该向量寄存器中的元素大小。向量寄存器Zd标识用于集中操作的目的寄存器,且类型字段T标识在该向量中含有的数据元素的大小。主谓词可经由谓词寄存器Pg指定,并且注释“/Z”标识若通过主谓词将等效通道标记为非主动,则在结果向量Zd中的任何数据元素将归零。
当执行此加载检查指令时,针对地址冲突的检查可在处理电路115中执行,而LSU145执行集中操作。通过重迭执行检查操作与集中操作,这可实现进一步性能改良。在此情况中,有效地双重开始集中及检查操作,其可使得关于即将发生的地址冲突的信息能够提早终止集中并节省时间。因此,在此实施例中,存在选项以基于危险检查结果提供提早终止集中操作,使得一旦已检测到危险,不执行集中操作的随后阶段。在一些实施例中,亦可能采用可用于执行集中操作以辅助地址检查操作的硬件,藉以提供特别有效的实施方式。
当执行此结合的检查与集中指令时,根据先前描述的实施例,检查操作的结果可用于设定CPU条件旗标以指示存在或无竞态条件。然而,或者,检查结果可用于设定CPU系统或状态寄存器,诸如先前参考图1讨论的HCSR寄存器165。例如,HCSR寄存器可被布置为提供由于地址冲突而未执行加载访问的信息并且将含有布尔(Boolean)值,例如,“1”集合接着连续数个“0”(其中“0”在其中检测到冲突的第一通道之后的通道中开始)。可随后单独地添加代码以于与若通过单独指令集合执行检查相比的较低成本检查状态位。
因此,可检查状态位并若需要状态位随后用以设定条件旗标,以在存在地址冲突时实施降低级别的向量化。
此方法的额外益处是当期望仅仅实施标准向量加载操作时(即,其中不需要检查)亦可使用相同指令。具体地,在该情况中,检查仍将与加载并行执行,其中将结果写入HCSR寄存器,但可随后仅仅忽视HCSR寄存器的内容。在指令编码空间受限,并且由此难以发现足够编码空间以单独地编码可期望的全部各种指令时,此方法可以是非常有用。
尽管在变体1、2及3的检查指令的上述讨论中,提供单个输入向量操作数,在替代实施例中,这些变体各者亦可被设计为采取第二输入向量操作数。这可例如用于存在从任意存储器位置的第一集合的集中操作的情形中,并且随后提供所加载及处理的数据值以将操作散布至任意存储器位置的第二集合。此使用情形可发生(例如)在执行原地数据变换的算法中。
当考虑到其中使用各种所描述的检查指令的情况,可考虑执行所需检查操作中所涉及的等待时间。等待时间涉及需要执行的比较,并且各种比较针对具有向量长度六(并且因此包含向量元素0至5)的向量在图5中突出显示。如由线500所示,向量元素5需要与向量元素4、3、2、1及0各者相比。类似地,如由线505所示,向量元素4需要与向量元素3、2、1及0相比。此外,向量元素3需要与由线510指示的向量元素2、1及0相比,而向量元素2需要与由线515所指示的向量元素1及0相比。最后,向量元素1需要与由线520指示的向量元素0相比。在图5中的虚线说明如何分组这些比较。针对给定向量长度VL,必须执行的比较的数目是(VL-1)x(VL)/2。因此,针对向量长度6,需要15个比较,如在图5中示意性地图示。
然而,在执行变体1的检查指令与执行变体2的检查指令的间存在等待时间差。具体地,当考虑到变体1时,可能使用在现代CPU中的大部分现有数据路径。具体地,如图6所示,旋转器550可用于将输入之一提供至比较器560,而其他输入来自源向量操作数。此方法有效组合并“压缩(compacts)”或“折迭(folds)”在图5中标记的分组。这一般是可在执行(in-flight)中执行的排列之一,此时数据正在被送入在CPU中的整数个执行管线中。使用此旋转器,相对轻型实施方式可提供与VL/2成正比例的等待时间。如图6所示,来自比较器的输出可随后用于设定CPU条件旗标570。先前讨论的检查指令的变体2具有较高等待时间,因为比较的顺序很重要,并且由此需要扫描向量的各个子部分。
可针对正在处理的地址向量是关于连续地址的情况产生检查指令的额外变体。具体地,在访问连续存储器位置的使用情形中,诸如先前讨论为“使用情形2”的存储器复制情况,此等指令可以是有用的,并且通过提供用于执行必需地址冲突检查的更有效机制。具体地,由于存储器访问是连续的,可大体上简化检查指令。当考虑存储器复制操作时这在图7A中说明,在存储器复制操作中数据自连续源地址600的向量复制,其中将该数据随后写入连续目的地址610的向量中。利用取决于在各向量中元素的数目及这些元素的大小的向量长度的知识,可能仅使用标量操作数执行所需地址冲突检测。具体地,检查指令可指定来自源向量的地址元素及来自目的向量的对应地址元素之一,在一个实施例中,假设第一元素x0及z0是用于检查操作的所选择的地址元素。如于步骤620图示,当具有这些两个标量地址元素时,检查操作可随后确定差z0-x0是否大于或等于向量长度,或为负的或0。若如此,则可确保当从源地址600的向量复制数据时将不存在地址冲突并且随后将该数据写入目的地址610的向量中。然而,若差z0-x0小于该向量长度并且大于0,则将出现地址冲突。
于步骤630,可取决于比较结果设定CPU条件旗标,以在差z0-x0小于向量长度并且大于0时标识地址冲突。
在替代实施例中,可出于实施方式原因判定于步骤620执行不同检查,并且具体而言执行检查以检测作为输入提供的两个标量地址值之间的绝对差不大于或等于向量长度的情况。若绝对差小于向量长度,这可指示存在冲突,并且可由此于步骤630设定条件旗标。然而,从先前提及的参考图7A的步骤620讨论的不等式,应了解基于绝对差的检查将产生一些伪阳性,因为当带符号的计算整数结果z0-x0是小于向量长度并且亦为负的或等于0时,实际上不存在无竞态条件。
可产生检查指令的变体以执行在图7A中讨论的检查,并且以下变体4及5是分别作为变体1及2的替代所提供的检查指令的这样的变体:
变体4:
CHECK<T>Pg,Xn,Xm//flag-setting only
变体5:
CHECK<T>Pd.<T>,Pg/Z,Xn,Xm//flag-setting with predicate
//generation.
如变体4所示,提供两个标量输入值Xn及Xm,它们分别标识含有地址元素x0及z0的寄存器。若需要,可提供主谓词以标识主动通道的数目,并且类型信息T是用于标识数据元素大小,藉以实现计算向量长度VL。当计算有效向量长度时亦可使用谓词信息。例如,若在图7的示例中排除最后两个数据元素通道,则有效向量长度是地址元素大小的六倍,而非有效向量长度是地址元素大小的八倍,并且当确定差z0-x0是大于还是等于相关向量长度,或为负的或0时这可考虑在内。
上文变体5是变体4的谓词生成版本,该变体产生谓词,在未检测到冲突(例如,若差z0-x0大于或等于向量长度,或是负的或0)时在各主动通道中的结果设定为“真”。然而,在检测到冲突的情况中,并且假设差z0-x0是“y”,则产生谓词,其中“y”元素的连续集合设定为真,并且将剩余元素设定为假。这可用作循环的控制屏蔽。
设定检查机制的上文谓词是以示例的方式在图7B至图7E中说明。图7B说明值的初始序列,其中A是目的地指标且B是源指标。若向量长度是8,将在此示例中看到基于于图7A的步骤620执行的检查检测到冲突。图7C说明若作为一系列标量操作执行存储器复制(memcpy)操作存储器的内容是什么,并且因此指示针对操作的任何向量化形式的所需结果。图7D说明若向量化存储器复制(memcpy)操作而不采用所述实施例的检查机制时产生的存储器内容。
最后,图7E图示若执行变体5的检查指令则在一个实施例中可形成的保护谓词,此谓词随后用于确保在每个迭代期间仅处理三个元素,并且因此获得在图7C中说明的结果。
应进一步注意,可针对其中连续加载的元素发生逆转的情形导出特殊检查指令的推论定义。
当用于由图1的装置使用而提供的指令集提供了检查指令的多种不同变体时,可能编译程序不可静态地确定所关注的众多工作负荷的最佳变体。为了利用由上文讨论的检查指令的不同变体提供的各种性能益处的优点,可采用先前提及的地址冲突统计计数器170。在一个实施例中,这些计数器可不仅用以标识在任何给定时期中检测到的冲突总数,亦(或替代地)标识向量内冲突的总数,即,在特定向量长度中冲突的数目。通过在计数器170中记录此信息,这使软件能够估计每个地址向量的向量内冲突的平均数目。此统计可随后由动态优化工具或智能运行时间使用以选择针对给定计算工作负荷的最佳指令变体。这参考图8的流程图以示例的方式说明,其说明使用统计计数器信息执行的动态编译过程。
于步骤700,维持地址冲突统计计数器给定时段。于步骤705,确定是否已超过预定时间,并且若否,则该过程返回步骤700,此处由于由该装置执行指令序列,继续维持地址冲突计数器。一旦已超过预定时间,则于步骤710分析地址冲突统计计数器以确定每地址向量的向量内冲突的平均数目。此信息随后用于于步骤715选择适当检查指令,随后,于步骤720将所选择的检查指令变体连同任何相关指令序列(例如先前参考图2及图3的示例讨论的后馈路径指令)随后插入该代码中。随后,于步骤725,在返回步骤700之前可视情况重置该计数器。
图9是用于说明此编译过程可有多有用的示图,并且具体而言可获得的加速益处形成不同变体可如何取决于在向量内冲突中的向量的百分数而不同。具体地,在图9中的结果图标针对变体1检查指令及变体2检查指令向量化代码相对标量实施方式的潜在加速,这取决于发生的向量内冲突的向量百分数。针对变体1,存在单个曲线750,由于自图2的先前讨论清楚可见,当采用变体1时,任何地址冲突导致向量循环的当前迭代作为标量操作的迭代序列执行。然而,针对变体2,加速取决于在特定向量中检测到的地址冲突的数目。在图9中所示的“numparts”值指示实现向量循环的当前迭代所需的在图3的后馈路径中迭代的数目。自该图显而易见,当在向量中地址冲突的平均数目是低时变体2是有利的,并且随着向量内地址冲突的数目增加,加速降低。
亦应注意,随着向量长度增加,在向量中存在一个以上冲突的可能性亦增加,并且由此针对较宽向量,变体1检查指令可按比例缩放得更好。
图10说明可使用的虚拟机实施方式。尽管先前描述的实施例根据用于操作支持相关技术的特定处理硬件的装置及方法来实施本技术,亦有可能提供硬件元素的所谓的虚拟机实施方式。这些虚拟机实施方式在主处理器830上运行,该主处理器通常运行支持虚拟机程序810的主操作系统820。通常,需要大型强力处理器以提供按合理速度执行的虚拟机实施方式,但此方法在某些环境中可为合理的,诸如当出于兼容性或出于再使用的原因需要运行另一处理器本端代码时。虚拟机程序810能够执行应用程序(或操作系统)800以给出与由此实际硬件元素执行该程序给出者相同的结果。因此,程序指令(包括上述检查指令)可使用虚拟机程序810在应用程序800中执行。
从上文所述的实施例中,将看到当向量化具有不常规或非线性存储器访问型式的代码时,使用上述检查指令提供潜在存储器依赖破坏问题的低额外负担的解决方式。已发现所述技术可大幅度改良具有间接存储器引用的程序(具体而言其存储器访问是未成熟的那些)性能并且使得难以或不可能静态证明不存在竞态条件,或甚至确定针对不同向量长度的此等危险的平均频率。
在本申请中,使用用语“被配置为”以意指装置的元件具有能够执行所定义操作的配置。在此上下文中,“配置”意指硬件或软件的互连布置或方式。例如,装置可具有提供所定义操作的专用硬件,或者处理器或其他处理装置可被程序化以执行该功能。“被配置为”并不暗指装置元件需要以任何方式改变以便提供所定义操作。
尽管本文已参考所附附图详细地描述本发明的说明性实施例,但应理解,本发明并不限于这些精确实施例且本领域技术人员可在不脱离如所附权利要求所定义的本发明的范围和精神的情况下在其中实施各种改变、添加及修改。例如,从属权利要求的特征可与独立权利要求的特征进行各种组合,而不脱离本发明的范围。
Claims (25)
1.一种装置,包含:
寄存器存储装置,用以存储向量操作数,各个向量操作数包含多个元素;
执行电路,用以执行指令以执行由所述指令指定的操作,所述执行电路包含用以执行存储器访问操作以在所述寄存器存储装置与存储器之间移动所述向量操作数的访问电路和用以使用所述向量操作数来执行数据处理操作的处理电路;
所述执行电路被布置为迭代地执行向量循环,在每个迭代期间,所述执行电路被布置为执行指令序列以实现所述向量循环,所述序列包括检查指令以标识多个存储器地址,并且所述执行电路响应于执行所述检查指令以确定在所述多个存储器地址中是否存在地址危险条件;
针对所述向量循环的每次迭代,所述执行电路响应于所述检查指令的执行确定无所述地址危险条件而在执行所述指令序列时采用预设级别的向量化来实现所述向量循环,并且响应于所述检查指令的执行确定存在所述地址危险条件而在执行所述指令序列时采用降低级别的向量化来实现所述向量循环。
2.如权利要求1所述的装置,其中:
所述执行电路响应于所述检查指令的执行确定所述无所述地址危险条件,而通过执行在所述指令序列中的第一多个指令来采用所述默认级别的向量化以实现所述向量循环;以及
所述执行电路响应于所述检查指令的执行确定所述存在所述地址危险条件,而通过迭代地执行在所述指令序列中的第二多个指令来采用所述降低级别的向量化以实现所述向量循环。
3.如权利要求2所述的装置,其中,所述执行电路响应于所述检查指令的执行而生成指示所述地址危险条件是否存在的结果数据,用于由在所述序列中的随后指令引用。
4.如权利要求3所述的装置,其中,所述结果数据包含一个或多个旗标,并且所述随后指令为分支指令,当其被所述指令电路执行时引用所述一个或多个旗标以确定是否执行所述第一多个指令或是否迭代地执行所述第二多个指令。
5.如权利要求2-4中任一项所述的装置,其中,所述第二多个指令包含导致所述执行电路对个别元素操作的标量指令,并且实现所述向量循环所需的所述第二多个指令的迭代执行的数目取决于与所述预设级别的向量化相关的所述向量操作数的主动元素的数目。
6.如权利要求2-4中任一项所述的装置,其中:
所述执行电路响应于所述检查指令的执行而生成具有初始谓词值的保护谓词;
所述第二多个指令包含导致所述执行电路对一个或多个向量操作数的所述元素的子集并行操作的向量指令,所述子集由所述保护谓词标识;以及
在所述第二多个指令的每次迭代中,更新所述保护谓词的所述谓词值以排除由任何前述迭代操作的所述一个或多个向量操作数的任何元素。
7.如权利要求6所述的装置,其中,所述保护谓词受限制以标识由主谓词标识的主动元素的所述元素的子集。
8.如权利要求1所述的装置,其中:
所述默认级别的向量化标识主动元素的第一数目,并且所述执行电路被布置为:响应于所述检查指令的执行确定存在所述无所述地址危险条件,而在执行所述指令序列时并行处理所述第一数目的元素来实现所述向量循环;以及
所述执行电路响应于所述检查指令的执行而在执行所述检查指令确定存在所述地址危险条件时产生将主动元素的所述数目降低至小于所述第一数目的主动元素的第二数目的控制输出,而导致所述执行电路在执行所述指令序列时通过并行处理所述第二数目的元素来采用所述降低级别的向量化以实现所述向量循环。
9.如权利要求8所述的装置,其中,于所述向量循环的每次迭代的所述开始处,所述执行电路被布置为返回到采用所述预设级别的向量化。
10.如权利要求8或9所述的装置,其中,所述控制输出包含标识形成所述第二数目的主动元素的所述主动元素的保护谓词。
11.如前述权利要求中任一项所述的装置,其中,所述检查指令指定包含多个主动地址元素的至少一个向量操作数,并且所述执行电路被布置为在执行所述检查指令时比较各个主动地址元素与各个其他主动地址元素以确定所述地址危险条件是否存在。
12.如权利要求1-10中任一项所述的装置,其中,所述检查指令指定与第一序列的连续地址相关的第一地址及与第二序列的连续地址相关的第二地址,并且所述执行电路被布置为在执行所述检查指令时根据在所述第一地址与所述第二地址之间的差确定存在所述地址危险条件。
13.如前述权利要求中任一项所述的装置,其中,所述检查指令是检查及存储器访问指令,所述执行电路响应于所述检查及存储器访问指令的执行以执行检查操作来确定在所述多个存储器地址中是否存在所述地址危险条件,同时亦相对于所述多个存储器地址执行存储器访问操作。
14.如权利要求13所述的装置,其中,在确定存在所述地址危险条件时,所述执行电路被布置为终止所述存储器访问操作的任何剩余部分。
15.如前述权利要求中任一项所述的装置,其中,所述处理电路包含专用检查电路以在执行所述检查指令时执行检查操作。
16.如权利要求1-14中任一项所述的装置,其中,所述处理电路包含用于执行数据处理操作的处理单元,且所述处理单元在执行所述检查指令时重新用于执行检查操作。
17.如权利要求16所述的装置,其中,在所述处理单元中旋转器电路及比较器电路被用于合并在所述执行所述检查操作期间需要的一个或多个地址比较。
18.如前述引用权利要求3的权利要求中任一项所述的装置,还包含危险检查状态寄存器,所述执行电路被布置为将由执行所述检查指令产生的所述结果数据存储至所述危险检查状态寄存器中。
19.如前述权利要求中任一项所述的装置,其中,各个向量操作数包含N个元素,并且N个主动元素是与所述默认级别的向量化相关使得所述执行电路响应于所述检查指令的执行确定无所述地址危险条件而在执行所述指令序列时并行处理N个元素来实现所述向量循环。
20.如权利要求1-18中任一项所述的装置,其中,各个向量操作数包含N个元素,主谓词将小于或等于N的元素的数目标识为主动元素,并且所述默认级别的向量化对应于由所述主谓词标识的所述主动元素,使得所述执行电路响应于所述检查指令的执行确定无所述地址危险条件,而在执行所述指令序列时并行处理由所述主谓词标识的所述主动元素来实现所述向量循环。
21.如前述权利要求中任一项所述的装置,还包含:
计数器电路,用以维持有关针对先前执行的指令序列出现所述地址危险条件的历史数据;以及
所述执行电路被布置为在包括多个不同类型的检查指令的指令集的控制下操作;
藉以所述历史数据变得为编译程序可用以使所述编辑器能够考虑到所述历史数据确定哪种类型的检查指令用于所述向量循环中。
22.如权利要求21所述的装置,其中,针对所选择的时段,所述历史数据标识检测到的地址冲突的总数及在所述向量操作数的向量长度中检测到的地址冲突的数目的至少一者。
23.一种在装置中当执行向量操作时管理地址冲突的方法,所述装置具有:用以存储向量操作数的寄存器存储装置,各个向量操作数包含多个元素;及用以执行指令以执行由所述指令指定的操作的执行电路,所述执行电路执行存储器访问操作以在所述寄存器存储装置与存储器之间移动所述向量操作数,并且使用所述向量操作数执行数据处理操作,所述方法包含以下步骤:
迭代地执行向量循环;
在每个迭代期间,在所述执行电路中执行指令序列以实现所述向量循环,所述序列包括标识多个存储器地址的检查指令,并且所述执行电路响应于执行所述检查指令以确定在所述多个存储器地址中是否存在地址危险条件;以及
针对所述向量循环的每次迭代,响应于所述检查指令的执行确定无所述地址危险条件,而在执行所述指令序列时采用预设级别的向量化来实现所述向量循环,并且响应于所述检查指令的执行确定存在所述地址危险条件,而在执行所述指令序列时采用降低级别的向量化来实现所述向量循环。
24.一种以非暂态形式存储计算机程序的计算机程序产品,用于控制计算机以提供用于对应于如权利要求1-22中任一项所述的装置的程序指令的虚拟机执行环境。
25.一种装置,其包含:
寄存器存储装置构件,用于存储向量操作数,各个向量操作数包含多个元素;
执行构件,用于执行指令以执行由所述指令指定的操作,所述执行构件包含用于执行存储器访问操作以在所述寄存器存储装置构件与存储器之间移动所述向量操作数的访问构件及用于使用所述向量操作数执行数据处理操作的处理构件;
所述执行构件用于迭代地执行向量循环,在每个迭代期间,所述执行构件用于执行指令序列以实现所述向量循环,所述序列包括标识多个存储器地址的检查指令,并且所述执行构件用于响应于所述检查指令的执行确定在所述多个存储器地址中是否存在地址危险条件;
针对所述向量循环的每次迭代,所述执行构件响应于所述检查指令的执行确定无所述地址危险条件而在执行所述指令序列时采用预设级别的向量化来实现所述向量循环,并且响应于所述检查指令的执行确定存在所述地址危险条件而在执行所述指令序列时采用降低级别的向量化来实现所述向量循环。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1607261.3 | 2016-04-26 | ||
GB1607261.3A GB2549737B (en) | 2016-04-26 | 2016-04-26 | An apparatus and method for managing address collisions when performing vector operations |
PCT/GB2017/050960 WO2017187130A1 (en) | 2016-04-26 | 2017-04-06 | An apparatus and method for managing address collisions when performing vector operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109074256A true CN109074256A (zh) | 2018-12-21 |
CN109074256B CN109074256B (zh) | 2023-02-28 |
Family
ID=58548749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780024882.7A Active CN109074256B (zh) | 2016-04-26 | 2017-04-06 | 在执行向量操作时管理地址冲突的装置及方法 |
Country Status (9)
Country | Link |
---|---|
US (1) | US11132196B2 (zh) |
EP (1) | EP3449356B1 (zh) |
JP (1) | JP6913693B2 (zh) |
KR (1) | KR102379894B1 (zh) |
CN (1) | CN109074256B (zh) |
GB (1) | GB2549737B (zh) |
IL (1) | IL262198B (zh) |
TW (1) | TWI733798B (zh) |
WO (1) | WO2017187130A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111158755A (zh) * | 2019-11-29 | 2020-05-15 | 华东师范大学 | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 |
CN117093268A (zh) * | 2023-10-19 | 2023-11-21 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10713746B2 (en) | 2018-01-29 | 2020-07-14 | Microsoft Technology Licensing, Llc | FIFO queue, memory resource, and task management for graphics processing |
US10719268B2 (en) * | 2018-06-29 | 2020-07-21 | Microsoft Technology Licensing, Llc | Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor |
JP7124608B2 (ja) * | 2018-09-28 | 2022-08-24 | 日本電気株式会社 | 計算機および計算方法 |
US10963252B2 (en) * | 2019-05-24 | 2021-03-30 | Texas Instruments Incorporated | Vector maximum and minimum with indexing |
GB2585202B (en) * | 2019-07-01 | 2021-11-24 | Advanced Risc Mach Ltd | An apparatus and method for speculatively vectorising program code |
CN117891509A (zh) * | 2024-03-18 | 2024-04-16 | 芯来智融半导体科技(上海)有限公司 | 数据访存方法、装置、计算机设备和存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0297893A2 (en) * | 1987-07-01 | 1989-01-04 | Digital Equipment Corporation | Apparatus and method for recovering from page faults in vector data processing operations |
CN1030487A (zh) * | 1987-07-01 | 1989-01-18 | 数字设备公司 | 在向量数据处理运算中从缺页故障中恢复的设备和方法 |
US20080288759A1 (en) * | 2007-05-14 | 2008-11-20 | Gonion Jeffry E | Memory-hazard detection and avoidance instructions for vector processing |
US20080288744A1 (en) * | 2007-05-14 | 2008-11-20 | Apple Inc. | Detecting memory-hazard conflicts during vector processing |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN103383640A (zh) * | 2012-04-02 | 2013-11-06 | 苹果公司 | 提高向量分解循环的性能 |
GB201317874D0 (en) * | 2013-10-09 | 2013-11-20 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing speculative vector access operations |
US20150089187A1 (en) * | 2013-09-24 | 2015-03-26 | Apple Inc. | Hazard Check Instructions for Enhanced Predicate Vector Operations |
CN104487941A (zh) * | 2012-07-11 | 2015-04-01 | Arm有限公司 | 在向量处理过程中控制处理数据元素的顺序 |
CN104603745A (zh) * | 2012-09-28 | 2015-05-06 | 英特尔公司 | 用于独立数据上递归计算的向量化的读和写掩码更新指令 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0812661B2 (ja) | 1988-04-01 | 1996-02-07 | 日本電気株式会社 | 命令処理順序制御システム |
DE69031443T2 (de) * | 1989-06-30 | 1998-04-23 | Digital Equipment Corp | Verfahren und Anordnung zur Steuerung von Schattenspeichern |
US5471628A (en) * | 1992-06-30 | 1995-11-28 | International Business Machines Corporation | Multi-function permutation switch for rotating and manipulating an order of bits of an input data byte in either cyclic or non-cyclic mode |
US6219780B1 (en) * | 1998-10-27 | 2001-04-17 | International Business Machines Corporation | Circuit arrangement and method of dispatching instructions to multiple execution units |
US7941584B2 (en) * | 2009-03-26 | 2011-05-10 | Arm Limited | Data processing apparatus and method for performing hazard detection |
US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
US9021233B2 (en) * | 2011-09-28 | 2015-04-28 | Arm Limited | Interleaving data accesses issued in response to vector access instructions |
CN104081336B (zh) * | 2011-12-23 | 2018-10-23 | 英特尔公司 | 用于检测向量寄存器内的相同元素的装置和方法 |
US10241793B2 (en) * | 2013-03-15 | 2019-03-26 | Analog Devices Global | Paralleizing loops in the presence of possible memory aliases |
CN104969179B (zh) | 2013-03-15 | 2019-07-16 | 英特尔公司 | 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统 |
GB2523823B (en) * | 2014-03-07 | 2021-06-16 | Advanced Risc Mach Ltd | Data processing apparatus and method for processing vector operands |
US9891913B2 (en) * | 2014-12-23 | 2018-02-13 | Intel Corporation | Method and apparatus for performing conflict detection using vector comparison operations |
-
2016
- 2016-04-26 GB GB1607261.3A patent/GB2549737B/en active Active
-
2017
- 2017-04-06 JP JP2018554767A patent/JP6913693B2/ja active Active
- 2017-04-06 KR KR1020187033191A patent/KR102379894B1/ko active IP Right Grant
- 2017-04-06 WO PCT/GB2017/050960 patent/WO2017187130A1/en active Application Filing
- 2017-04-06 US US16/090,357 patent/US11132196B2/en active Active
- 2017-04-06 CN CN201780024882.7A patent/CN109074256B/zh active Active
- 2017-04-06 EP EP17717832.4A patent/EP3449356B1/en active Active
- 2017-04-25 TW TW106113721A patent/TWI733798B/zh active
-
2018
- 2018-10-08 IL IL262198A patent/IL262198B/en active IP Right Grant
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0297893A2 (en) * | 1987-07-01 | 1989-01-04 | Digital Equipment Corporation | Apparatus and method for recovering from page faults in vector data processing operations |
CN1030487A (zh) * | 1987-07-01 | 1989-01-18 | 数字设备公司 | 在向量数据处理运算中从缺页故障中恢复的设备和方法 |
US20080288759A1 (en) * | 2007-05-14 | 2008-11-20 | Gonion Jeffry E | Memory-hazard detection and avoidance instructions for vector processing |
US20080288744A1 (en) * | 2007-05-14 | 2008-11-20 | Apple Inc. | Detecting memory-hazard conflicts during vector processing |
CN103383640A (zh) * | 2012-04-02 | 2013-11-06 | 苹果公司 | 提高向量分解循环的性能 |
CN104487941A (zh) * | 2012-07-11 | 2015-04-01 | Arm有限公司 | 在向量处理过程中控制处理数据元素的顺序 |
CN104603745A (zh) * | 2012-09-28 | 2015-05-06 | 英特尔公司 | 用于独立数据上递归计算的向量化的读和写掩码更新指令 |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
US20150089187A1 (en) * | 2013-09-24 | 2015-03-26 | Apple Inc. | Hazard Check Instructions for Enhanced Predicate Vector Operations |
GB201317874D0 (en) * | 2013-10-09 | 2013-11-20 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing speculative vector access operations |
Non-Patent Citations (2)
Title |
---|
C. JESSHOPE: "Implementing an efficient vector instruction set in a chip multi-processor using micro-threaded pipelines", 《IEEE》 * |
刘秉峰: "YHFT-Matrix编译器向量化技术的研究与实现", 《中国优秀硕士论文电子期刊网 信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111158755A (zh) * | 2019-11-29 | 2020-05-15 | 华东师范大学 | 用于消除simd向量化程序中缓存缺失的多向量交错执行方法 |
CN117093268A (zh) * | 2023-10-19 | 2023-11-21 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
CN117093268B (zh) * | 2023-10-19 | 2024-01-30 | 超睿科技(长沙)有限公司 | 一种向量处理方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20190114172A1 (en) | 2019-04-18 |
KR102379894B1 (ko) | 2022-03-30 |
JP2019517060A (ja) | 2019-06-20 |
US11132196B2 (en) | 2021-09-28 |
GB2549737A (en) | 2017-11-01 |
CN109074256B (zh) | 2023-02-28 |
TW201738737A (zh) | 2017-11-01 |
KR20180137521A (ko) | 2018-12-27 |
JP6913693B2 (ja) | 2021-08-04 |
EP3449356B1 (en) | 2020-01-22 |
EP3449356A1 (en) | 2019-03-06 |
TWI733798B (zh) | 2021-07-21 |
IL262198B (en) | 2020-09-30 |
WO2017187130A1 (en) | 2017-11-02 |
IL262198A (en) | 2018-11-29 |
GB2549737B (en) | 2019-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109074256A (zh) | 在执行向量操作时管理地址冲突的装置及方法 | |
KR101832656B1 (ko) | 컴파일러 최적화를 위한 메모리 참조 메타데이터 | |
US8176299B2 (en) | Generating stop indicators based on conditional data dependency in vector processors | |
Nugteren et al. | CLTune: A generic auto-tuner for OpenCL kernels | |
US8181001B2 (en) | Conditional data-dependency resolution in vector processors | |
KR102304216B1 (ko) | 벡터 계산 장치 | |
US8745360B2 (en) | Generating predicate values based on conditional data dependency in vector processors | |
GB2553783A (en) | Vector multiply-add instruction | |
US11226821B2 (en) | Computer processor employing operand data with associated meta-data | |
CN108139907A (zh) | 向量数据传送指令 | |
US20110302394A1 (en) | System and method for processing regular expressions using simd and parallel streams | |
JP6908601B2 (ja) | ベクトルロード命令 | |
US11853734B2 (en) | Compiler-initiated tile replacement to enable hardware acceleration resources | |
US8706795B2 (en) | SIMD integer addition including mathematical operation on masks | |
US9921838B2 (en) | System and method for managing static divergence in a SIMD computing architecture | |
US10152310B2 (en) | Fusing a sequence of operations through subdividing | |
US10496433B2 (en) | Modification of context saving functions | |
US20180088948A1 (en) | Efficient vectorization techniques for operands in non-sequential memory locations | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
TW201823972A (zh) | 向量產生指令 | |
CN113015958A (zh) | 实现掩蔽向量指令的系统和方法 | |
US20220391216A1 (en) | Graphics processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |