CN102804135B - 用于处理向量指令的数据处理设备和方法 - Google Patents

用于处理向量指令的数据处理设备和方法 Download PDF

Info

Publication number
CN102804135B
CN102804135B CN201080025004.5A CN201080025004A CN102804135B CN 102804135 B CN102804135 B CN 102804135B CN 201080025004 A CN201080025004 A CN 201080025004A CN 102804135 B CN102804135 B CN 102804135B
Authority
CN
China
Prior art keywords
skip
instruction
vector
processing unit
passage
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
Application number
CN201080025004.5A
Other languages
English (en)
Other versions
CN102804135A (zh
Inventor
安德里亚斯·比约克伦
埃里克·佩尔松
欧拉·休格森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN102804135A publication Critical patent/CN102804135A/zh
Application granted granted Critical
Publication of CN102804135B publication Critical patent/CN102804135B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

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)

Abstract

提供了用于处理向量指令的数据处理设备和方法。该数据处理设备具有具备被布置为存储数据元素的多个寄存器的寄存器数据储存库。向量处理单元随后被用于运行向量指令序列,该向量处理单元具有多个并行处理通道,并且能够访问寄存器数据储存库,以便在向量指令序列的运行期间从寄存器数据储存库读出数据元素和向寄存器数据储存库写入数据元素。跳过指示存储装置维护并行处理通道的每个通道的跳过指示符。向量处理单元响应于向量跳过指令来执行更新操作,以在跳过指示存储装置内设置用于确定的一个或多个通道的跳过指示符。向量处理单元响应于向量运算指令来对输入到多个并行处理通道的数据元素并行地执行运算,但是从运算的执行中排除其相关联的跳过指示符已被设置的任何通道。这允许在每个并行处理通道内有条件地执行由向量指令指定的运算,而不必对指定这些运算的向量指令做任何修改。

Description

用于处理向量指令的数据处理设备和方法
技术领域
本发明涉及一种用于处理向量指令的数据处理设备和方法。
背景技术
向量处理是在数据处理系统中变得越来越平常的处理技术。向量处理单元已被开发用于执行这样的向量处理运算,并且允许同时对多个数据元素执行运算。向量处理单元提供多个并行处理通道(lane)以使得当数据元素被输入这些并行处理通道时,可以在这些并行处理通道内并行地执行数据处理运算。这使得相比于标量处理技术能够实现明显的性能益处,标量处理技术需要顺序地执行数据处理运算多次,其中通常对于每次迭代使用不同的数据元素。
US 2007/0250681描述了这样的向量处理单元,在在此所描述的系统中,该向量处理单元采取执行主处理器需要的向量处理运算的协同处理器的形式。作为提供作为协同处理器的向量处理单元的替代方法,可以通过复制标准处理器的基础架构的核心处理元件中的一部分并增加允许在这些单元中同时处理多个数据元素的特殊指令来扩展标准处理器的基础架构。
存在可以从向量处理的使用中受益的许多种数据处理运算。例如,计算机图形硬件和视频游戏控制台主要依赖于它们的架构中的向量处理器以提供高性能的图形处理功能。
将由向量处理单元处理的数据元素通常被排列成数据元素的向量,每个向量包括多个数据元素,并且每个向量中的每个数据元素形成不同并行处理通道的输入数据元素。
尽管以上讨论的向量处理方法在输入向量中的全部数据元素都需要经过特定数据处理运算的情形中可以产生非常显著的性能益处,但是出现了这样的情形,其中期望使得特定运算的执行在不同并行处理通道中是有条件的。根据这样的方法,输入数据元素的向量将仍然被提供给向量处理单元,但是由特定向量指令指定的运算将不一定在全部并行处理通道中被执行。
然而,将这样的条件性编码在定义将对输入数据元素执行的向量运算的向量指令中是个复杂的问题,并且很有可能导致明显增大这样的指令的大小。因此,通常的情况是,当需要这样的条件性时,不使用向量处理单元,而是在标量处理单元内执行一系列标量运算来对需要执行该运算的数据元素子集执行所需运算。
然而,这对性能的影响很大,并且期望即使在要求每个并行处理通道内的条件运行的情形中也允许实现使用向量处理单元的性能益处。
发明内容
从第一方面来看,本发明提供一种数据处理设备,包括:寄存器数据储存库,该寄存器数据储存库具有被布置为存储数据元素的多个寄存器;向量处理单元,该向量处理单元用于运行向量指令序列,向量处理单元具有多个并行处理通道,并且能够访问寄存器数据储存库,以便在所述向量指令序列的运行期间从寄存器数据储存库读出数据元素和向寄存器数据储存库写入数据元素;跳过指示存储装置,该跳过指示存储装置用于维护所述并行处理通道的每个通道的跳过指示符;该向量处理单元,响应于所述向量指令序列内的向量跳过指令,执行更新操作,以在跳过指示存储装置内设置用于多个通道中的确定的一个或多个通道的跳过指示符;并且该向量处理单元响应于所述向量指令序列内的向量运算指令,对输入到所述多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道。
根据本发明,针对每个并行处理通道维护跳过指示符。跳过指示符随后被用来在被向量处理单元运行时导致更新操作被执行,结果,用于确定的一个或多个并行处理通道的跳过指示符被设置。
当运行向量运算指令时,向量处理单元被布置为参考每个并行处理通道的跳过指示符,并且从由向量运算指令指定的运算的执行中排除其相关联的跳过指示符已被设置的任何通道。
因此,通过针对每个并行处理通道使用这样的跳过指示符,并且使用向量跳过指令来设置这些跳过指示符,可以在每个并行处理通道内提供对向量运算指令的有条件的运行,而不需要修改向量运算指令本身。因此,这使得能够实现向量处理单元的利用率的提升,这是因为给定从这些运算的执行中有选择地排除一个或多个并行处理通道的能力,可能不得不另外以串行方式执行的运算现在可以使用向量处理单元被并行地处理。
虽然在一个实施例中,向量跳过指令的运行可以促使所有通道都经历更新操作,而不论用于那些通道的跳过指示符是否已经被设置,但是,在一个实施例中,当运行向量跳过指令时,向量处理单元从更新操作中排除当该向量跳过指令被运行时已经被设置了的任何跳过指示符。因此,在此实施例中,当向量跳过指令被运行时已经被设置了的任何跳过指示符被从更新操作中排除,并且因此,向量跳过指令本身的应用可以被使得是有条件的。
跳过指示符可以采取各种形式。然而,在一个实施例中,每个跳过指示符包括跳过计数值,跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时被认为是未被设置的。在这样的实施例中,向量处理单元响应于向量跳过指令来将所述确定的一个或多个通道的跳过计数值设置为预定非零值,并且,对于序列内的每个向量指令,如果所述跳过计数值在向量指令被运行时是已被设置的,则向量处理单元被布置为递减跳过计数值而不是执行由该向量指令指定的运算。结果,将被跳过的后续向量指令的数目可以根据跳过计数值被初始设置成的预定非零值而不同。此外,在其中向量跳过指令本身仅仅针对还未被设置的跳过指示符而被执行的实施例中,将明白,随着时间过去,各个跳过计数值将采用不同的值,并且因此,各个跳过计数值通过上述递减处理被清除的时间点将不同。这允许向量跳过指令的嵌套,允许复杂的条件操作序列在向量处理单元内被执行,而不必对向量运算指令本身做任何修改。而是,经过任何特定向量运算的并行处理通道通过相关联的向量运算指令被运行时的各种跳过计数值的状态而被确定。
在一个实施例中,跳过计数值可以是仅允许单个后续向量指令被跳过的单比特值,但是在可替换实施例中,可以提供多比特跳过计数值。通过提供多比特跳过计数值,可以实现跳过功能的复杂嵌套。
跳过计数值通过向量跳过指令被设置成的预定非零值可以是固定的。然而,在一个实施例中,预定非零值被指定为向量跳过指令的操作数(operand)。
如之前所提及的,对于每个运行的向量指令,如果跳过计数值在该指令被运行时是已被设置的,则跳过计数值被递减而不是执行由向量指令指定的预算。在一个实施例中,这不仅适用于向量元素指令也适用于向量跳过指令本身。
在一个实施例中,当运行向量跳过指令时,将仅针对在跳过指令被运行时还未被设置(即还不是零值)的那些跳过指示符执行更新操作。在一个这样的实施例中,向量跳过指令的运行将只会促使相关的跳过指令被设置,并且针对那些“刚设置”的跳过指示符不通过向量跳过指令的运行采取任何进一步的动作。然而,在可替换实施例中,向量跳过指令可以被布置为递减所有设置的跳过计数值,不论那些设置的跳过计数值是在向量跳过指令被执行之前被设置的,还是由于向量跳过指令的执行而刚刚被设置的。在这样的实施例中,将明白,预定的非零值通常将至少为2,以确保向量跳过指令后的至少一个指令被跳过。
作为将跳过指示符布置为经由向量跳过指令被设置并随后在每个后续向量指令的执行时被递减直到返回到零的跳过计数值的替换,在一个实施例中,每个跳过指示符保持设置,直到向量处理单元运行向量跳过结束指令来清除设置的跳过指示符为止。给定特定大小的跳过指示存储装置,相比于经由跳过指示存储装置内的跳过计数值来进行指定,这样的方法将允许在所识别的通道中跳过更长的指令序列。
在其中跳过指示符保持设置直到向量处理单元运行跳过结束指令来清除设置的跳过指示符为止的实施例中,设置的跳过指示符可以被实现为单比特值。按照跳过指示符的设置,当在运行期间遇到每个后续的向量指令时,在跳过指示符已被设置的通道中不采取动作,并且因此,在该通道内不执行由这些随后的向量指令指定的运算。当遇到跳过结束指令时,跳过指示符随后被清除,以使得在该通道内将不运行后续指令。在又一实施例中,跳过指示符可以是给定的多比特值,其中仅跳过结束指令导致该多比特值被递减。这允许执行嵌套以使得跳过结束指令的具体实例可以促使某些通道的跳过指示符被清除(因为跳过值被递减为零),而对于其他通道,递减步骤将仍然使跳过指示符可设置(因为递减仍然使计数值是非零的)。
在一个实施例中,可以结合使用如下两种形式的跳过指示符:在每次随后运行的向量指令的发生时被递减的跳过计数值形式的跳过指示符,以及保持设置直到跳过结束指令的运行为止的跳过指示符。以下,如果为了清楚有必要,保持设置直到跳过结束指令的运行为止的后一类型的跳过指示符将被称为“短跳过”指示符。具体地,在一个实施例中,除了短跳过计数值以外,所述跳过指示存储装置还包括用于所述并行处理通道的每个的长跳过指示符。另一向量跳过指令随后被提供,该另一向量跳过指令当被向量处理单元执行时导致用于确定的一个或多个通道的每个通道的长跳过指示符被设置,而不是那些通道的跳过计数值被设置,长跳过指示符在每个向量指令被执行时保持设置。
如以上所讨论的,长跳过指示符可以是单比特值,在该情况中,向量处理单元响应于跳过结束指令来清除每个设置的长跳过指示符。可替换地,每个长跳过指示符包括长跳过计数值,该长跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时是未被设置的。响应于另一向量跳过指令,该向量处理单元导致用于所述确定的一个或多个通道的每个通道的长跳过计数值被递增,并且向量处理单元响应于向量跳过结束指令来递减每个设置的长跳过计数值。
因此,在这样的实施例中,虽然短跳过计数值在它们已被设置之后在每个向量指令发生时被递减,但是长跳过计数值仅因为跳过结束指令而被递减,并且其他类型的向量指令将不会导致那些长跳过计数值被递减。
跳过指示存储装置可以以各种方式布置。在一个实施例中,跳过指示存储装置可以包括用于存储用于每个并行处理通道的短跳过指示符的第一寄存器和用于存储用于每个并行处理通道的长跳过指示符的第二寄存器。
然而,在可替换实施例中,跳过指示存储装置可以包括以如下方式用于存储用于每个并行处理通道的跳过指示符的单个寄存器:跳过指示符针对每个通道被编码,从而标识其是短跳过指示符还是长跳过指示符。具体地,在一个实施例中,每个跳过指示符可被向量处理单元设置成第一组多个非零值中的任一个来标识设置的短跳过计数值,并且可被设置成不在所述第一组多个非零值中的至少一个预定非零值来标识设置的长跳过指示符。作为具体示例,考虑其中跳过指示存储装置为每个跳过指示符提供4比特的值的情形,至少值“1111”可以被保留来标识设置的长跳过指示符。在一个特定实施例中,允许1和13之间的短跳过计数值被指定。因此,在这样的实施例中,如果在向量指令后需要长于13的跳过,则将需要使用长跳过指示符而不是短跳过指示符。
在一个实施例中,向量跳过指令将确定的一个或多个通道的跳过指示符将被设置成的预定非零值指定为跳过指示符操作数。虽然另一向量跳过指令可以是与该向量跳过指令完全不同的指令,但在一个实施例中,向量跳过指令和该另一向量跳过指令二者具有相同的形式,但是该另一向量跳过指令将空值指定为跳过指示符操作数,从而将另一向量跳过指令与向量跳过指令区分开。
存在向量处理单元可以用来确定哪些通道的跳过指示符将在向量跳过指令运行时被设置的许多方式。在一个实施例中,向量跳过指令直接地标识其跳过指示符将被设置的一个或多个通道。因此,作为示例,向量跳过指令的具体形式可以指定所有奇数通道的跳过指示符应被设置,另一形式的向量跳过指令可以指定所有偶数通道的跳过指示符应当被设置,或者更一般地,向量跳过指令可以标识某一形式的比特掩码,从而标识哪些通道的跳过指示符应被设置。
然而,在可替换实施例中,向量跳过指令不直接标识其跳过指示符将被设置的通道,而是响应于向量跳过指令,向量处理单元针对每个通道是否满足评估一个或多个预定条件,并且根据所述评估来标识其跳过指示符将被设置的所述确定的一个或多个通道。
在一个实施例中,其跳过指示符被设置的通道是满足一个或多个预定条件的通道。然而,将明白,在可替换实施例中,其跳过指示符被设置的通道可以被选成不满足一个或多个预定条件的那些通道。
存在可以促使向量处理单元在运行向量跳过指令时评估是否满足一个或多个预定条件的许多方式。在一个实施例中,向量处理单元在向量跳过指令的运行期间可以执行所需测试来检查是否满足预定条件。然而,在可替换实施例中,数据处理设备还包括用于存储所述并行处理通道的每个通道的至少一个条件代码的条件代码存储装置以及被布置为针对每个通道通过检查所述至少一个条件代码是否被设置来所述一个或多个预定条件是否满足。条件代码通常被在数据处理系统内,其中诸如比较指令之类的各种指令被用来评估当程序运行时的特定条件,并且相应地设置条件代码。条件代码的一些示例是等于(EQ)、不等于(NEQ)、大于(GT)、小于(LT)代码等。对于具有多个并行处理通道的向量处理单元,这些条件代码可以针对每个并行处理通道被指定。在这样的实施例中,向量跳过指令可以指定需要设置的一个或多个条件代码以便触发对用于相关通道的跳过指示符的设置。作为示例,向量跳过指令可以标识出:应当为被设置了“大于”条件代码的那些通道设置跳过指示符。
存在针对其跳过指示符被设置的通道将该通道从由向量指令指定的运算的执行中排除的许多方式。在一个实施例中,可以在一开始就防止在通道内执行用于实现运算的实际计算。然而,在可替换实施例中,实际上允许那些计算在通道内发生,但是所产生的结果值随后被丢弃,从而就系统的其余部分而言,实际上将该通道从运算的执行中排除出去。从控制的角度来看,相比于实际地防止在通道内发生计算,基于跳过指示符的值有选择地丢弃结果这种方式常常更容易实现。
用于存储向量处理单元能够利用的数据元素的寄存器数据储存库可以采用各种形式。然而,在一个实施例中,寄存器数据储存库包括向量寄存器组,向量寄存器组包括多个向量寄存器,每个向量寄存器存储将被提供给所述向量处理单元内的不同并行处理通道的多个数据元素。在一个实施例中,单个向量寄存器可以存储对于将被提供给向量处理单元内的每个并行处理通道的一个数据元素足够的数据元素。
在一个实施例中,向量处理单元和相关联的寄存器数据储存库可以被形成为单独的、专门的向量处理器。这样的处理器可以利用用作更大系统内的协同处理器来代表主处理器执行处理操作。在可替换实施例中,向量处理单元可以形成在一个或多个不同分支中支持标量运算的处理器内的相邻处理分支。因此,在这样的实施例中,数据处理设备还包括标量处理单元以及与标量处理单元相关联的标量寄存器组。在一个实施例中,标量处理单元和向量处理单元可以具有单独的指令取出和指令译码单元,但是在一个可替换实施例中,指令取出和指令译码单元在标量处理单元和向量处理单元之间被共享。
在一个实施例中,向量处理单元是允许在任何一次的运行过程中具有多个向量指令的流水线处理单元。
维护用于每个并行处理通道的跳过指示符的跳过指示存储装置可以以各种方式实现。例如,跳过指示存储装置可以由寄存器数据储存库中的寄存器之一提供。然而,在可替换实施例中,跳过指示存储装置由向量处理单元内的内部存储装置形成,在一个具体实施例中,跳过指示存储装置由与流水线向量处理单元的运行级相关联的内部状态寄存器提供。
从第二个方面来看,本发明提供一种用于在数据处理设备内处理向量指令的方法,数据处理设备包括具有被布置为存储数据元素的多个寄存器的寄存器数据储存库,以及用于运行向量指令序列的向量处理单元,向量处理单元具有多个并行处理通道,并且能够访问寄存器数据储存库,以便在所述向量指令序列的运行期间从寄存器数据储存库读出数据元素和向寄存器数据储存库写入数据元素,方法包括以下步骤:在跳过指示存储装置内维护所述并行处理通道的每个通道的跳过指示符;响应于所述向量指令序列内的向量跳过指令,执行更新操作,以在跳过指示存储装置内设置所述多个通道中的确定的一个或多个通道的跳过指示符;以及响应于所述向量指令序列内的向量运算指令,对输入到多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道。
从第三个方面来看,本发明提供一种包括计算机可读指令的计算机程序产品,计算机可读指令当在计算机上运行时促使该计算机执行如本发明的第二个方面的处理向量指令的方法。
从第四个方面来看,本发明提供一种数据处理设备,包括:寄存器数据储存库装置,寄存器数据储存库装置具有用于存储数据元素的多个寄存器装置;向量处理装置,该向量处理装置用于运行向量指令序列,所向量处理装置用于提供多个并行处理通道,并且用于能够访问所述寄存器数据储存库装置,以便在所述向量指令序列的运行期间从寄存器数据储存库装置读出数据元素和向寄存器数据储存库装置写入数据元素;跳过指示存储装置,该跳过指示存储装置用于维护所述并行处理通道的每个通道的跳过指示符;向量处理装置,响应于所述向量指令序列内的向量跳过指令,用于执行更新操作,以在跳过指示存储装置内设置所述多个通道中的确定的一个或多个通道的跳过指示符;并且该向量处理装置响应于所述向量指令序列内的向量运算指令,用于对输入到所述多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道。
附图说明
将参考附图中所示的本发明的实施例仅以示例方式来进一步描述本发明,其中:
图1示意性地图示出根据实施例的处理器的至少一部分;
图2示意性地图示出根据实施例的处理器;
图3示意性地图示出根据实施例的向量寄存器组;
图4是图示出根据实施例的方法的流程图;
图5更详细地图示出根据一个实施例的图2的向量运行路径的运行级内设置的元件;
图6是示意性地图示出根据一个实施例的向量指令的运行的流程图;
图7是更详细地图示出根据一个实施例的当运行向量指令时在每个通道内执行的处理的流程图;
图8A至图8C示意性地图示出根据不同实施例所使用的跳过计数器寄存器的不同格式;
图9是图示出根据一个实施例的当使用图8C的跳过计数器寄存器时可以使用的组合编码的表格;以及
图10是示意性地图示出根据一个实施例的跳过计数器的使用的示图。
具体实施方式
图1示意性地图示出根据实施例的处理器100的至少一部分。处理器100包括专用向量处理单元(在此也称为向量运行单元)102,其中来自已译码指令的控制信号被馈送到该专用向量处理单元102。处理器100优选是流水线处理器,专用向量运行单元102可以包括用于算术逻辑运算104、数据存储器存取106和寄存器写回108的各级。与专用向量运行单元102相关联地,提供向量寄存器组110,向量寄存器组110包括第一数目k个向量寄存器,每个向量寄存器包括第二数目l个数据元素,其中,每个数据元素具有第三数目m个比特,例如如图3中所示。向量处理单元包括多个并行处理通道,并且在一个实施例中,当运行指定一个或多个输入向量计算器的向量指令时,每个通道接收来自每个指定的输入向量寄存器的数据元素中的一个。因此,如图3中所示意地示出的,在此实施例中,每个向量寄存器可以被视为存储了用于l个并行处理通道的数据元素。
在接收到来自已译码向量指令的控制信号时,专用向量运行单元102从向量寄存器组110读取必要的值,并且当已译码向量指令是通过流水线被运行的时,写回级将任意新的寄存器值馈送给寄存器组以供写入。在一些实施例中,还将提供转发路径以允许一个运算的结果值作为输入被直接反馈给后续运算,而不需要再从向量寄存器组110读取这些值。
如稍后将更详细讨论的,在接收到并运行跳过指令时,专用向量运行单元102控制与每个并行处理通道相关联的跳过指示符,即跳过计数器,跳过指示符的值指示由跟随在该跳过指令之后的一个或多个后续向量指令指定的运算是否应当在对应的并行处理通道中被执行。
如上所述,在一个实施例中,跳过指示符包括在跳过指令执行时被指派一值的跳过计数器。具体地,跳过计数器被设置非零值来标识一个或多个后续向量指令将在相关联的通道中被跳过,并且当为零值时认为是未被设置的,从而指示在相关联的通道中应当不发生跳过。因此,在这样的实施例中,只要跳过计数器为零,则在通道上执行下一个向量指令的运算。跳过计数器的非零值在一个实施例中被用来指示相关联的运算将不在通道上被执行的随后指令的数目,并且当每个向量指令在跳过指令之后被执行时,对于具有已被设置的跳过计数器的每个通道而言,向量运行单元递减相关跳过计数器而不是在那个通道中执行运算。当已经过去了所指示的指令数目时,跳过计数器被设置回零值,并且再随后的指令可以在通道上被执行。
作为使用被设置成某一非零值并且随后在每一后续向量指令被运行时递减的跳过计算器的替换,跳过指示符可以通过跳过指令被设置,并且随后保持设置直到运行跳过结束指令位置。在一个实施例中,跳过结束指令的运行将任何已设置跳过指示符清除(clear),以使得任何随后的指令的运算之后在相关联的通道中被执行。可替换的跳过指令可以被布置为递增跳过计算器,并且跳过结束指令被布置为递减跳过计数器,以使得跳过指令和相关联的跳过结束指令的嵌套组合可以被使用。
跳过计数器可以以各种方式实现。例如,除了用零作为清除(无跳过)值以外的表示也是可以的。在一个实施例中,跳过计数器对于每个通道是4比特字段,但是其他数目的比特也可以被分配给每个跳过计数器。
如稍后将更详细地讨论的,在一个实施例中,可以使用如下两种跳过指示符:采取因每个后续向量指令(在此称为短跳过指示符)的运行而被递减的跳过计数器的形式的跳过指示符和在跳过结束指令被执行之前一直保持设置的跳过指示符(在此称为长跳过指示符)。
专用向量运行单元102的算术逻辑运算104可以被布置为执行各种算术逻辑运算(诸如逻辑与(AND)、逻辑或(OR)、异或(XOR)和逻辑非(NOT))、偏移运算(诸如LSR、LSL、ASR和ROT)、相加、相减和相乘运算以及最小值和最大值运算(即找到每个通道内的最小值和最大值)。除了在每个通道上独立执行的这些运算以外,通道间的运算也是可能的,即,在通道之间交换或复制数据的运算。因此,可以有选择地进行对任意通道上的任意这些运算的排除。
图2示意性地示出根据一个实施例的处理器200。处理器具有一般运行单元202(在此也称为一般运行路径)和与一般运行单元202相关联的一般寄存器组204。处理器200还具有向量运行单元206(在此也称为向量运行路径)和相关联的向量寄存器组208,与参考图1所示的布置类似。该处理器还包括一般运行单元202和向量运行单元206常用的指令取出和指令译码单元。在一个实施例中,指令取出和指令译码单元包括指令取出级210,指令取出级210被布置为例如通过向程序存储器(诸如指令缓存)发送程序计数器值以便读出下一指令来取出指令。在一个实施例中,指令取出和指令译码单元还包括指令译码级212,指令译码级212被布置为从指令比特产生用于运行的控制信号。指令译码级212还被布置为区分向量指令和一般指令,其中在一般指令的情况中,则控制信号被提供给一般运行单元202,并且在向量指令的情况中,则控制信号被提供给向量运行单元206。控制信号可以被视作“已译码指令”。在向量跳过指令的情况中,适当的控制信号被提供给向量运行单元206,其中跳过指令如之前参考图1所概述的那样被运行。
图3示意性地图示出根据实施例的向量寄存器组300。向量寄存器组300包括第一数目k个向量寄存器。每个向量寄存器包括第二数目l个数据元素(针对l个并行处理通道中的每一个通道有一个数据元素),其中每个数据元素包括第三数目m个比特,即,每个寄存器包括l×m个比特。根据一个实施例,存在16个向量寄存器,每个向量寄存器具有128个比特,每128个比特被分割成8个数据元素,每个数据元素具有16个比特,即k=16,l=8,m=16。k、l、m的其他值当然也同样是可以的。
图4是图示出根据实施例的方法的流程图。在向量跳过指令的接收即指令取出时,指令被识别为向量指令并且在向量跳过指令译码步骤400中被译码,其中,用于运行的控制信号随后被提供给如上所述的向量运行单元206以用于在跳过指令运行步骤402中运行。
存在向量运行单元206可以用于确定哪些通道的跳过指示符将在向量跳过指令的运行时被设置的方式。在一个实施例中,向量跳过指令直接标识其跳过指示符将被设置的一个或多个通道。因此,作为一个示例,特定形式的向量跳过指令可以指定所有的奇数通道的跳过指示符应当被设置,另一形式的向量跳过指令可以指定所有偶数通道的跳过指示符应当被设置,或者更一般地,向量跳过指令可以识别标识哪些通道的跳过指示符应当被设置的任意形式的比特掩码。
然而,在可替换实施例中,向量跳过指令并不直接标识其跳过指示符将被设置的通道,而是,响应于向量跳过指令,向量运行单元206针对每个通道评估是否满足一个或多个预定条件,并且根据所述评估来识别出其跳过指示符将被设置的一个或多个通道。
不论使用以上何种方法,对于被判定为其跳过指示符将被设置的每个通道,用于该通道的跳过指示符随后在跳过指示符设置步骤404中被设置,以使得在运算禁用步骤406中,基于那些通道的跳过指示符来针对那些通道禁用一个或多个随后向量指令的运算。
图5示意性地图示出根据一个实施例的向量运行单元206的运行级220内所设置的某些元素。内部状态寄存器500被用于存储运行级220所需的数据元素以便执行其所要求的运算。因此,对于将一个或多个向量寄存器指定为源操作数的向量运算指令,所需要的来自那些向量寄存器的数据元素将被存储在内部状态寄存器500内以用于由ALU电路502在执行由该指令指定的算术逻辑运算时存取。
另外,内部状态寄存器500包括被用作跳过计数器寄存器506的一个或多个寄存器,它们被用来为每个并行处理通道维护跳过计数值。当向量跳过指令被运行时,对应的控制信号被从指令译码级212传递给运行级220,跳过计数器更新电路504执行更新操作以便使用前述技术来设置一个或多个跳过计数器寄存器506内的一个或多个跳过计数器。通常,对于其中相关联的跳过计数器已经是非零的任意通道而言,更新操作被省略,并且因此,更新操作只影响当前跳过计数器值为零的那些通道的跳过计数器的值。这允许向量跳过指令的嵌套,允许复杂的条件运算序列在向量处理内被执行,而不必对向量运算指令本身做任何修改。而是,经历任何特定向量运算的并行处理通道由相关联的向量运算指令被运行时的各个跳过计数值的状态确定。在跳过指示符是为每个通道设置的实施例中,向量运算的运行可以用以下伪代码表示,其中假定存在8个并行处理通道(通道0至7)
这里,skip_counter[I]是指用于通道I的跳过计数器。从上述伪代码可见,运算被施加于具有为零的跳过计数器的任何通道,但是对于具有非零跳过计数器的那些通道,运算不被执行而是跳过计数值被递减1。
每当遇到向量跳过指令(即,可以设置跳过计数器的指令)时,与遇到普通指令一样,仅其跳过计数器被清除(即为零)的通道受到影响。对于每个这样的通道,与跳过指令相关联的条件在该通道上被测试,并且如果条件满足,则用于该通道的跳过计数器被设置为将被跳过的指令数。这一般被指定为跳过指令的操作数,并且因此作为自变量“new_skip_value”被传递。对于每个随后被运行的向量指令,跳过计数器原本为非零的通道将它们的跳过计数器的值递减1。以上实施例的向量跳过指令可以用以下伪代码表示:
其中,条件代码CC例如可以eq=equal(等于)、ne=not equal(不等于)、gt=greater than(大于)、ge=greater or equal than(大于等于)、lt=less than(小于)、le=less or equal than(小于等于)。
有时,优选使用这样的结构,其中许多指令被跳过,但是跳过计数器只能计数到由跳过计数器字段限定的某一值,例如对于4比特计数器是15。然而,在一个实施例中,也有可能编码长跳过,该长跳过仅当遇到用于结束跳过特征的向量跳过结束指令时才被终止。这可以通过如下方式来实现:通过提供用于存储长跳过指示符的完全单独的跳过计数器寄存器,或通过将每通道的单个跳计数器的一个或多个确定的值(例如,数字14和15)预留为特殊长度的跳过代码,并且随后修改上述伪代码运算。具体而言,用于VOP(一般向量指令)、VSCC(向量跳过指令)和VEND(向量跳过结束指令)的适当伪代码运算如下:
因此,在以上示例中,可见用于一般向量指令VOP的伪代码一般如前所述,但是现在跳过计数器仅针对具有非零跳过计数器的那些通道被递减,如果跳过计数值小于14的话。因此,如果跳过计数值是14或15,则在相关联的通道中不执行运算,并且也不发生跳过计数器的递减。
考虑向量跳过指令VSCC,则对于具有零跳过计数值的每个通道,如果用于该通道的条件代码被满足,则现在存在可以更新跳过计数值的两种方式,如果向量跳过指令编码长跳过(这通常通过将该指令的跳过指示符操作数设置成空值来进行),则跳过计数器被设置为15,在该实施例中,15的值编码一个长跳过。否则,跳过计数器被设置为将通常由向量跳过指令的跳过指示符操作数指定的跳过值。
考虑VSCC指令的跳过计数器递减功能,如果用于任何特定通道的跳过计数器在向量跳过指令被运行时少于14(即,跳过计数器编码短跳过),则跳过计数器被递减。另外,即使用于任何特定通道的跳过计数器不少于14,如果向量跳过指令编码长跳过,则跳过计数器仍然被递减。后一递减操作允许两个长跳过的嵌套,其中第一长跳过指令将跳过计数器设置为15(意味着一个长跳过),并且第二被嵌套的长跳过指令随后针对已经受到第一长跳过指令的影响的通道将跳过计数器减小为14(意味着两个长跳过)。因此,该递减操作实际上标识了由于以上编码引起的长跳过数目的有效递增。
关于向量跳过结束指令VEND,对于每个通道,测试跳过计数器是否大于或等于14(即,用于该通道的跳过计数器是否编码了长跳过),并且如果是,则该跳过计数器被如图所示地修改。由于该实施例的编码,其中14的值指示两个长跳过,并且15的值指示一个长跳过,这给出了长跳过计数的有效递减。具体地,如果当前跳过计数值是14,则其上升为15,并且如果当前计数值为15,则由于递增的模16特征,其被重置为零。如果跳过计数器不大于等于14但是大于零,则VEND指令的发生仅仅促使跳过计数器被递减1,就像对于任何其它向量指令一样。
图6是图示出根据本发明的实施例如何处理向量指令的流程图。在步骤600,等待接收向量指令,并且一旦向量指令已被接收到(即已被指令取出级210取出),其随后在步骤605处被指令译码级212译码成随后被发送至向量运行路径206的控制信号。如框610所示,这随后导致特定系列的步骤在每个并行处理通道中被并行地执行,该处理由步骤615、620和625示出。一旦该系列步骤已经在每个通道中被并行地执行,则如框630中所示,并行的处理步骤结束,并且处理返回到步骤600来等待下一向量指令的运行。
在每个通道中被执行来实现根据一个实施例的步骤615、620和625的处理在图7中被示意性地示出。该处理开始于步骤700,并且在步骤705处,判断用于该通道的短跳过计数值(即短跳过指示符)是否为零。如果短跳过计数值是非零的,则处理分支到步骤710,其中针对该通道确定跳过计数值。之后,处理继续进行到步骤760,其中,处理结束,因为不需要进一步的处理。
值得注意的是,在步骤705,被评估来判断是否非零的仅仅是短跳过计数值。在一些实施例中,仅短跳过计数值将被利用,但是在一些实施例中,长跳过计数值也被使用,在该情况中,则需要附加步骤715、720和725。具体地,在步骤705处对短跳过计数值的分析之后,随后可以在步骤715处判断用于通道的长跳过计数值是否为零。如前所述,短跳过计数值和长跳过计数值可以被存储在单独的跳过寄存器中,或者可替换地,在一个实施例中,可以通过将一个或多个跳过计数值保留为长跳过计数值而被编码在单个寄存器内。如果长跳过计数值是非零的,则在步骤720处判断正被运行的指令是否是向量跳过结束指令。如果是,则用于通道的长跳过计数值在步骤725处被递减并且处理随后结束于步骤760。从之前的讨论,将明白,在以上实施例中,跳过计数值14指示2个长跳过,跳过计数值15指示1个长跳过,并且跳过计数值0指示无长跳过,步骤725处的递减实际上涉及跳过计数值的递增(或者从14递增为15或者从15递增为0)。
如果指令不是向量跳过结束指令,则在步骤727处判断该指令是否是长向量跳过指令(即编码长跳过的向量跳过指令)。如果是,则用于通道的长跳过计数在步骤728处被递增。从之前的讨论中,将明白,在以上实施例中,跳过计数值14指示两个长跳过并且跳过计数值15指示1个长跳过,步骤728处的递增实际上涉及跳过计数值从15到14的递减。因此,经由步骤727和728,任何长向量跳过指令无条件地将具有非零长跳过计数的任何通道的长跳过计数递增1,这是因为这些长跳过技计数将由于长向量跳过指令的对应向量跳过结束指令而被递减1。
如果在步骤727处判定指令不是长向量跳过指令,则不需要任何动作,并且处理仅仅结束于步骤760。
如果为通道设置的短跳过计数值和任何长跳过计数值是零,则处理继续进行到步骤730。在步骤730,判断当前指令是否是向量跳过指令。如果不是,则由指令指定的所需运算在步骤735处被执行,之后,处理结束于步骤760。因此,可见,仅在通道的跳过计数值(如果使用短跳过计数值和长跳过计数值二者,则这二者都)未被设置即为零时,由任何向量运算指令指定的运算才在通道中被执行。
如果在步骤730判定当前指令是向量跳过指令,则在步骤740中评估是否满足通道的条件代码。作为示例,向量跳过指令可以指定仅在由向量处理单元为通道维护的特定条件代码被设置的情况下,跳过指示符才应当被设置。如果条件代码不满足,则不需要进一步的动作,并且处理结束于760。然而,如果条件代码满足,则处理继续进行到步骤745。
在步骤745,是否已经通过向量跳过指令指定了值域操作数(rangeoperand)(该值域操作数在此也称为跳过指示符操作数)。如果这样的值域操作数被指定,则这指示该向量跳过指令意图设置短跳过计数器,并且因此,在这种情况下,处理继续进行到步骤750,其中用于通道的短跳过计数被设置成指定的值域操作数。之后,处理结束于步骤760。然而,如果在步骤745处判定空的值域操作数被指定,则这意味着该向量跳过指令意图为通道设置长跳过指令,并且因此,处理分支到步骤744,其中用于通道的长跳过计数值被递增,之后,处理结束于步骤760。从之前的讨论,将明白,在以上实施例中,跳过计数值15指示1个长跳过,并且跳过计数值0指示无长跳过。步骤755处的递增实际上涉及将跳过计数值设置为15来标识一个长跳过。
存在许多布置跳过计数器寄存器506的方式。在一个实施例中,仅短跳过计数器被使用,并且如图8A中所示,单个跳过计数器寄存器800可以被设置来存储用于每个通道的短跳过计数值。在一个实施例中,每个跳过计数值是4比特,并且因此,在其中存在8个并行处理通道的示例中,跳过计数器寄存器将是32比特的寄存器。
在可替换实施例中,长跳过计数值也可以针对每个并行处理通道被提供,并且可以在单独的寄存器内被编码。相应地,如图8B中所示,第一寄存器85可以用于存储用于每个通道的跳过计数值(即短跳过指示符),而第二寄存器810可以用于存储用于每个通道的长计数值(即长跳过指示符)。
还将明白,在某些实施例中,可以布置为:仅使用长跳过指示符,并且不提供短跳过计数值。在该示例中,可以提供诸如图8A的寄存器800之类的单个寄存器。在此情况中,寄存器为每个通道提供长跳过计数值。在该示例实施例中,向量跳过指令将设置长跳过计数值,并且仅向量跳过结束指令的发生将促使这些值被递减。随后将对其长跳过计数值为零的标准向量指令运行标准向量指令,并且对于其长跳过计数值被设置了(即非零)的任何通道,仅仅忽略标准向量指令。
如图8C中所示,对于其中短跳过计数值和长跳过计数值都被使用的实施例,则可以仍然使用单个跳过计数器寄存器815来编码用于每个通道的跳过计数值。在这样的实施例中,可以通过使用具体的跳过计数值来编码任何长跳过计数值。在一个特定示例中,值14和15被保留以用于长跳过计数,如图9的表中示意性地示出的。
如图9中所示,对于每个并行处理通道,跳过计数值可以被设置为组合编码值0至15中的任一个。值0指示既不设置短跳过计数器也不设置长跳过计数器,并且相应地参考图7,对于其跳过计数器具有组合编码0的任何通道,随后是通过步骤705和715的“是”路径。1和13之间的值可以被设置为组合编码以便指定所设置的短跳过计数。当每个后续的向量指令被运行时,这将促使用于该通道的所设置的短跳过值被递减(而不是由向量指令指定的运算被执行),直到该值最终达到零为止,当该值为0时,后续的向量指令将在该通道中被执行。因此,考虑图7的示例,如果在步骤705被评估时组合编码具有1和13之间的值,则处理将分支到步骤710,其中,短跳过计数值将被递减。
如图9中所示,组合编码值14和15被保留以用于长跳过计数,并且因此,如果对于特定通道,组合编码是14或15,则随后是从步骤705开始的“是”路径将并且在步骤715,随后将没有路径。如果在步骤720处,VEND指令正被运行,则长跳过计数将被递减。如图9中所示,这将意味着如果当前组合编码是14(标识长跳过计数2),则其现在将被设置成15(标识长跳过计数1),并且如果当前组合编码是15,则其现在将被清除为0。
图10示意性地图示出例如其中提供4个并行处理通道的短跳过计数器的使用。在该示例中,假定当VMUL指令(乘法指令)被运行时,通道1和3具有跳过计数值0并且通道0和2分别具有跳过计数值1和4。这意味着,乘法指令仅在通道1和3中被执行。虽然在一个实施例中,通道0和2内的相关组件仍然可以照样执行乘法运算,但是在通道0和2的任一者中都不发生目的地寄存器va的更新。这意味着,数据元素va0和va2保持不变而数据元素va1和va3被更新以反映乘法运算的结果。
对于通道0和2,跳过计数器随后被递减以使得在乘法运算已被运行之后,用于通道1和3的跳过计数器保持为0,并且用于通道0和2的跳过计数器现在分别是1和3。图10仅仅叙述了非常简单的示例,但是通常将是这样的情况:会存在更多通道。此外,向量跳过指令可以按照需要被嵌套以允许复杂的指令序列在各个通道内被有条件地运行。
以下是可以使用嵌套的向量跳过指令序列来运行的指令序列的示例。具体地,在该示例中,三个值的中值被输出作为向量v3。因此,通过这些指令的运行,将输入寄存器中用于相同通道的三个值的中值针对每个通道而输出:
vmov v3,v2//针对每个通道,v2被复制到v3中。这里,“推测”中值是v2中的值(如果不是,则其将被如下覆写)
vsgt v0,v1,4//针对每个通道,比较v0和v1,并且如果v0>v1,则将跳过值设置为4
vsgt v1,v2,1//现在已知v0<=v1(针对每个通道,比较v1和v2,并且如果v1>v2,则将跳过值设置为1)
vmov v3,v1//现在已知v1<=v2,中值是v1
vsgt v2,v0,1//现在已知v0<=v1(针对每个通道,比较v2和v0,并且如果v2>v0,则将跳过值设置为1)
vmov v3,v0//现在已知v2<=v0,中值为v0
vsle v0,v1,4//针对每个通道,比较v0和v1,并且如果v0<=v1,则将跳过值设置为4
vsle v1,v2,1//现在已知v0>v1(针对每个通道比较v1和v2,并且如果v1<=v2,则将跳过值设置为1)
vmov v3,v1//现在已知v1>v2,中值是v1
vsle v2,v0,1//现在已知v0>v1(针对每个通道,比较v2和v0,并且如果v2<=v0,则将跳过值设置为1)
vmov v3,v0//现在已知v2>v0,中值是v0
通过向量跳过指令的序列(vsgt和vsle),可以在每个通道中独立地执行复杂的测试树,以便找到每个通道中的中值数据元素值。将明白,在第一移动指令之后,所有后续移动指令将依赖于遇到这些移动指令时用于那些通道的跳过计数器的值而在每个通道中被有条件地执行。
通过以上对实施例的描述,将明白,这样的实施例提供在向量处理单元内处理向量运算的一种特别灵活和有效的方式。具体地,可以有条件地执行由向量处理单元提供的每个并行处理通道内的运算,而不需要修改制定那些向量运算的向量指令。而是,向量跳过指令被用来设置用于每个并行处理通道的跳过指示符,其中后续向量指令仅在其跳过指示符已被设置的通道中被执行。在其中跳过指示符采取跳过计数器的形式的实施例中,可以嵌套跳过指令以使得复杂的条件运算序列可以在每个并行处理通道中被独立地执行。这因此使得能够实现向量处理单元的利用率的增加,因为给定从这些运算的执行中有选择地排除一个或多个并行处理通道的能力,可能不得不另外以串行方式执行的运算现在可以使用向量处理单元被并行地处理。
虽然上述技术可以由运行包括上述指令的本地指令序列的硬件执行,但是将明白,在可替换实施例中,这样的指令可以在虚拟机环境中被执行,其中,这些指令对于虚拟机是本地的,但是虚拟机是通过在具有不同本地指令集的硬件上运行的软件来实现的。虚拟机环境可以提供仿真完整指令集的运行的完整虚拟机环境或者可以是部分的虚拟机环境,例如仅包括本技术的指令的一些指令被硬件捕获并由部分虚拟机进行仿真。
更具体地,上述向量跳过、向量运算和向量跳过结束指令可以作为完整或部分虚拟机的本地指令被执行,其中虚拟机与其底层的硬件平台相结合操作来提供上述向量处理。
虽然已经在此描述了具体实施例,但是,将明白,本发明不限于此,并且在本发明的范围内可以对其进行许多修改和添加。例如,在不偏离本发明的范围的情况下,可以利用从属权利要求的特征对以下独立权利要求的特征进行各种组合。

Claims (20)

1.一种数据处理设备,包括:
寄存器数据储存库,所述寄存器数据储存库具有被布置为存储数据元素的多个寄存器;
向量处理单元,所述向量处理单元用于运行向量指令序列,所述向量处理单元具有多个并行处理通道,并且能够访问所述寄存器数据储存库,以便在所述向量指令序列的运行期间从所述寄存器数据储存库读出数据元素和向所述寄存器数据储存库写入数据元素;
跳过指示存储装置,所述跳过指示存储装置用于维护所述并行处理通道的每个通道的跳过指示符;
所述向量处理单元响应于所述向量指令序列内的向量跳过指令,执行更新操作,以在所述跳过指示存储装置内设置所述多个并行处理通道中的确定的一个或多个通道的跳过指示符;并且
所述向量处理单元响应于所述向量指令序列内的向量运算指令,对输入到所述多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道,
其中,每个所述跳过指示符包括跳过计数值,所述跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时被认为是未被设置的;
所述向量处理单元响应于所述向量跳过指令来将所述确定的一个或多个通道的跳过计数值设置为预定非零值;并且
对于所述向量指令序列内的每个向量指令,如果所述跳过计数值在所述向量指令被运行时是已被设置的,则所述向量处理单元被布置为递减所述跳过计数值,而不是执行由该向量指令指定的运算。
2.如权利要求1所述的数据处理设备,其中,当运行所述向量跳过指令时,所述向量处理单元从所述更新操作中排除当所述向量跳过指令被运行时已被设置的任何跳过指示符。
3.如权利要求1所述的数据处理设备,其中,所述预定非零值被指定为所述向量跳过指令的操作数。
4.如权利要求1或2所述的数据处理设备,其中,当运行所述向量跳过指令时,所述向量处理单元被布置为递减所有设置的跳过计数值。
5.如权利要求1所述的数据处理设备,其中:
所述跳过指示存储装置还维护所述并行处理通道的每个通道的长跳过指示符;
另一向量跳过指令被提供,所述另一向量跳过指令当被所述向量处理单元运行时,导致所述确定的一个或多个通道的每个通道的长跳过指示符被设置,而不是那些通道的跳过计数值被设置;
所述长跳过指示符在每个向量指令被运行时保持被设置。
6.如权利要求5所述的数据处理设备,其中:
所述向量处理单元响应于向量跳过结束指令来清除每个设置的长跳过指示符。
7.如权利要求5所述的数据处理设备,其中:
每个长跳过指示符包括长跳过计数值,所述长跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时被认为是未被设置的;
响应于所述另一向量跳过指令,所述向量处理单元导致所述确定的一个或多个通道的每个通道的长跳过计数值被递增;并且
所述向量处理单元响应于向量跳过结束指令来递减每个设置的长跳过计数值。
8.如权利要求5至7中任一项所述的数据处理设备,其中:
所述跳过指示存储装置包括用于存储所述并行处理通道的每个通道的跳过指示符的第一寄存器和用于存储所述并行处理通道的每个通道的长跳过指示符的第二寄存器。
9.如权利要求5至7中任一项所述的数据处理设备,其中,
所述跳过指示存储装置包括用于存储所述并行处理通道的每个通道的跳过指示符的寄存器,每个跳过指示符能被所述向量处理单元设置成第一组多个非零值中的任一个来标识设置的跳过计数值,并且能被设置成不在所述第一组多个非零值中的至少一个预定非零值来标识设置的长跳过指示符。
10.如权利要求5至7中任一项所述的数据处理设备,其中,所述向量跳过指令将所述确定的一个或多个通道的跳过指示符将被设置成的预定非零值指定为跳过指示符操作数,并且所述另一向量跳过指令将空值指定为所述跳过指示符操作数,从而将所述另一向量跳过指令与所述向量跳过指令区分开。
11.如权利要求1所述的数据处理设备,其中,所述向量跳过指令直接地标识其跳过指示符将被设置的一个或多个通道。
12.如权利要求1所述的数据处理设备,其中,响应于所述向量跳过指令,所述向量处理单元针对每个通道评估一个或多个预定条件是否满足,并且根据所述评估来标识其跳过指示符将被设置的所述确定的一个或多个通道。
13.如权利要求12所述的数据处理设备,其中,所述确定的一个或多个通道是满足所述一个或多个预定条件的那些通道。
14.如权利要求12或13所述的数据处理设备,还包括:
条件代码存储装置,所述条件代码存储装置用于存储所述并行处理通道的每个通道的至少一个条件代码;
所述向量处理单元被布置为针对每个通道通过检查所述至少一个条件代码是否被设置来评估是否满足所述一个或多个预定条件。
15.如权利要求1所述的数据处理设备,其中,对于从所述运算的执行中排除的任何通道,所述运算在该通道内被执行,但是通过在该通道内执行该运算所产生的结果值被丢弃。
16.如权利要求1所述的数据处理设备,其中:
所述寄存器数据储存库包括向量寄存器组,所述向量寄存器组包括多个向量寄存器,每个向量寄存器存储将被提供给所述向量处理单元内的不同并行处理通道的多个数据元素。
17.如权利要求1所述的数据处理设备,还包括:
标量处理单元;
与所述标量处理单元相关联的标量寄存器组;以及
在所述标量处理单元和所述向量处理单元之间共享的指令取出和指令译码单元。
18.如权利要求1所述的数据处理设备,其中,所述向量处理单元是在任何一次的运行过程中允许多个向量指令的流水线处理单元。
19.一种用于在数据处理设备内处理向量指令的方法,所述数据处理设备包括具有被布置为存储数据元素的多个寄存器的寄存器数据储存库,以及用于运行向量指令序列的向量处理单元,所述向量处理单元具有多个并行处理通道,并且能够访问所述寄存器数据储存库,以便在所述向量指令序列的运行期间从所述寄存器数据储存库读出数据元素和向所述寄存器数据储存库写入数据元素,所述方法包括以下步骤:
在跳过指示存储装置内维护所述并行处理通道的每个通道的跳过指示符;
响应于所述向量指令序列内的向量跳过指令,执行更新操作,以在所述跳过指示存储装置内设置所述多个并行处理通道中的确定的一个或多个通道的跳过指示符;
响应于所述向量指令序列内的向量运算指令,对输入到所述多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道;
每个所述跳过指示符包括跳过计数值,所述跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时被认为是未被设置的;
响应于所述向量跳过指令,将所述确定的一个或多个通道的跳过计数值设置为预定非零值;并且
对于所述向量指令序列内的每个向量指令,如果所述跳过计数值在所述向量指令被运行时是已被设置的,则递减所述跳过计数值,而不是执行由该向量指令指定的运算。
20.一种数据处理设备,包括:
寄存器数据储存库装置,所述寄存器数据储存库装置具有用于存储数据元素的多个寄存器装置;
向量处理装置,所述向量处理装置用于运行向量指令序列,所述向量处理装置用于提供多个并行处理通道,并且用于能够访问所述寄存器数据储存库装置以便在所述向量指令序列的运行期间从所述寄存器数据储存库装置读出数据元素和向所述寄存器数据储存库装置写入数据元素;
跳过指示存储装置,所述跳过指示存储装置用于维护所述并行处理通道的每个通道的跳过指示符;
所述向量处理装置,响应于所述向量指令序列内的向量跳过指令,用于执行更新操作,以在所述跳过指示存储装置内设置所述多个并行处理通道中的确定的一个或多个通道的跳过指示符;并且
所述向量处理装置,响应于所述向量指令序列内的向量运算指令,用于对输入到所述多个并行处理通道的数据元素并行地执行运算,但是从所述运算的执行中排除其相关联的跳过指示符已被设置的任何通道,
其中,每个所述跳过指示符包括跳过计数值,所述跳过计数值当具有非零值时被认为是已被设置的,并且当具有零值时被认为是未被设置的;
所述向量处理装置响应于所述向量跳过指令来将所述确定的一个或多个通道的跳过计数值设置为预定非零值;并且
对于所述向量指令序列内的每个向量指令,如果所述跳过计数值在所述向量指令被运行时是已被设置的,则所述向量处理装置递减所述跳过计数值,而不是执行由该向量指令指定的运算。
CN201080025004.5A 2009-06-05 2010-05-28 用于处理向量指令的数据处理设备和方法 Active CN102804135B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0909756.9 2009-06-05
GB0909756.9A GB2470782B (en) 2009-06-05 2009-06-05 A data processing apparatus and method for handling vector instructions
PCT/GB2010/001067 WO2010139941A1 (en) 2009-06-05 2010-05-28 A data processing apparatus and method for handling vector instructions

Publications (2)

Publication Number Publication Date
CN102804135A CN102804135A (zh) 2012-11-28
CN102804135B true CN102804135B (zh) 2015-07-22

Family

ID=40937010

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080025004.5A Active CN102804135B (zh) 2009-06-05 2010-05-28 用于处理向量指令的数据处理设备和方法

Country Status (5)

Country Link
US (1) US8661225B2 (zh)
JP (1) JP5512803B2 (zh)
CN (1) CN102804135B (zh)
GB (1) GB2470782B (zh)
WO (1) WO2010139941A1 (zh)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009528B2 (en) * 2008-08-15 2015-04-14 Apple Inc. Scalar readXF instruction for processing vectors
US8271832B2 (en) * 2008-08-15 2012-09-18 Apple Inc. Non-faulting and first-faulting instructions for processing vectors
US8938642B2 (en) * 2008-08-15 2015-01-20 Apple Inc. Confirm instruction for processing vectors
US8862932B2 (en) * 2008-08-15 2014-10-14 Apple Inc. Read XF instruction for processing vectors
US8489865B1 (en) * 2010-04-15 2013-07-16 Lockheed Martin Corporation Device, system, and method for single thread command chaining instructions from multiple processor elements
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN111831335A (zh) 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
CN107220029B (zh) * 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
US9557993B2 (en) * 2012-10-23 2017-01-31 Analog Devices Global Processor architecture and method for simplifying programming single instruction, multiple data within a register
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
US9830153B2 (en) * 2014-06-20 2017-11-28 Netronome Systems, Inc. Skip instruction to skip a number of instructions on a predicate
GB2536069B (en) * 2015-03-25 2017-08-30 Imagination Tech Ltd SIMD processing module
US9910826B2 (en) * 2015-03-27 2018-03-06 International Business Machines Corporation SIMD implementation of stencil codes
GB2548601B (en) * 2016-03-23 2019-02-13 Advanced Risc Mach Ltd Processing vector instructions
GB2548600B (en) * 2016-03-23 2018-05-09 Advanced Risc Mach Ltd Vector predication instruction
CN111651201B (zh) * 2016-04-26 2023-06-13 中科寒武纪科技股份有限公司 一种用于执行向量合并运算的装置和方法
US10838720B2 (en) * 2016-09-23 2020-11-17 Intel Corporation Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
GB2580068B (en) 2018-12-20 2021-02-24 Advanced Risc Mach Ltd Generating a vector predicate summary
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11327862B2 (en) 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
GB2613178B (en) * 2021-11-25 2024-01-10 Advanced Risc Mach Ltd Techniques for controlling vector processing operations
CN114840255B (zh) * 2022-07-04 2022-09-27 飞腾信息技术有限公司 处理数据的方法、装置及设备可读存储介质
CN115951936B (zh) * 2023-01-17 2023-05-26 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1656495A (zh) * 2002-05-24 2005-08-17 皇家飞利浦电子股份有限公司 标量/矢量处理器
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6059469A (ja) * 1983-09-09 1985-04-05 Nec Corp ベクトル処理装置
JPS6266377A (ja) * 1985-09-19 1987-03-25 Fujitsu Ltd マスクパタ−ン生成方式
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JP2826490B2 (ja) * 1995-09-27 1998-11-18 甲府日本電気株式会社 ベクトルデータ処理装置
US5799163A (en) * 1997-03-04 1998-08-25 Samsung Electronics Co., Ltd. Opportunistic operand forwarding to minimize register file read ports
DE01988453T1 (de) 2000-11-28 2004-04-22 Chipwrights Design, Inc., Newton Abwickeln einer konditionalen verarbeitung in einer prozessorarchitektur mit einem befehl und mehreren datenwegen
WO2002084451A2 (en) * 2001-02-06 2002-10-24 Victor Demjanenko Vector processor architecture and methods performed therein
GB2411745B (en) * 2004-03-02 2006-08-02 Imagination Tech Ltd Method and apparatus for management of control flow in a simd device
US20060101256A1 (en) * 2004-10-20 2006-05-11 Dwyer Michael K Looping instructions for a single instruction, multiple data execution engine
US20070250681A1 (en) 2006-04-10 2007-10-25 International Business Machines Corporation Independent programmable operation sequence processor for vector processing
US20080016320A1 (en) 2006-06-27 2008-01-17 Amitabh Menon Vector Predicates for Sub-Word Parallel Operations
US20080114975A1 (en) 2006-11-10 2008-05-15 Hsueh-Bing Yen Method and processing system for nested flow control utilizing predicate register and branch register
JP2009086870A (ja) * 2007-09-28 2009-04-23 Nec Computertechno Ltd ベクトル処理装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986025B2 (en) * 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
CN1656495A (zh) * 2002-05-24 2005-08-17 皇家飞利浦电子股份有限公司 标量/矢量处理器

Also Published As

Publication number Publication date
JP5512803B2 (ja) 2014-06-04
WO2010139941A1 (en) 2010-12-09
CN102804135A (zh) 2012-11-28
US20100312988A1 (en) 2010-12-09
GB0909756D0 (en) 2009-07-22
GB2470782A (en) 2010-12-08
GB2470782B (en) 2014-10-22
JP2012529096A (ja) 2012-11-15
US8661225B2 (en) 2014-02-25

Similar Documents

Publication Publication Date Title
CN102804135B (zh) 用于处理向量指令的数据处理设备和方法
JP6843113B2 (ja) メモリと複数のベクトルレジスタ間の複数のデータ構造を転送する装置および方法
TWI512617B (zh) 用於改良向量分割迴圈之效能的方法、處理器及系統
CN102103483B (zh) 汇聚和散布多个数据元素
CN104040492B (zh) 微处理器加速的代码优化器和依赖性重排序方法
TWI501148B (zh) 條件式比較指令
US9465613B2 (en) Instruction predication using unused datapath facilities
CN107851019B (zh) 用于执行叠接操作的设备和方法
KR20180066146A (ko) 벡터 데이터 전송 명령어
CN107810477A (zh) 解码的指令的重复使用
CN104011681A (zh) 向逻辑分区提供反映处理器核的独占使用的硬件线程特定信息
CN104040491A (zh) 微处理器加速的代码优化器
TW201349111A (zh) 抑制零述詞分支錯誤預測之分支錯誤預測行為
KR101618669B1 (ko) 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법
KR20180137521A (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
KR20180067582A (ko) 벡터 로드 명령어
GB2523823A (en) Data processing apparatus and method for processing vector operands
TW202113592A (zh) 用以在臆測執行期間認為安全時省略安全性檢查的硬體
US7162620B2 (en) Methods and apparatus for multi-processing execution of computer instructions
CN105404635B (zh) 字符串匹配的方法、设备和异构计算系统
CN109690536A (zh) 将多核指令踪迹从虚拟平台仿真器取到性能模拟模型的方法和系统
KR20110084915A (ko) 데이터 처리 장치
JPH05224927A (ja) プロセッサ
CN103282876A (zh) 数据元素的条件选择
WO2024126969A1 (en) Triggered-producer and triggered-consumer instructions

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