CN101048731B - 用于单指令、多数据执行引擎的循环指令 - Google Patents

用于单指令、多数据执行引擎的循环指令 Download PDF

Info

Publication number
CN101048731B
CN101048731B CN2005800331592A CN200580033159A CN101048731B CN 101048731 B CN101048731 B CN 101048731B CN 2005800331592 A CN2005800331592 A CN 2005800331592A CN 200580033159 A CN200580033159 A CN 200580033159A CN 101048731 B CN101048731 B CN 101048731B
Authority
CN
China
Prior art keywords
instruction
mask register
loop
passage
relevant
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.)
Expired - Fee Related
Application number
CN2005800331592A
Other languages
English (en)
Other versions
CN101048731A (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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN101048731A publication Critical patent/CN101048731A/zh
Application granted granted Critical
Publication of CN101048731B publication Critical patent/CN101048731B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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/30058Conditional branch instructions
    • 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/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]
    • 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]
    • G06F9/38873Iterative single instructions for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

根据一些实施例,为单指令、多数据(SIMD)执行引擎提供循环指令。例如,当在执行引擎接收到第一循环指令时,可以将n位循环掩码寄存器中的信息复制至n位宽,m个条目深的循环堆栈中。

Description

用于单指令、多数据执行引擎的循环指令
背景技术
为了提高处理系统的性能,在单个指令周期中对数据的多个操作数可以同时执行一个指令。这样的指令可以称为单指令,多数据(SIMD)指令。例如,八通道SIMD执行引擎可以同时执行八个32位操作数数据的指令,每个操作数被映射到SIMD执行引擎的唯一的计算通道。在非SIMD处理器的情况下,指令可以为“循环”指令,以使得相关的一组指令可能需要被执行多次(例如,特定次数或直到满足某条件)。
附图说明
图1和2示出了处理系统;
图3示出了根据一些实施例的SIMD执行引擎;
图4-5示出了根据一些实施例的执行DO指令的SIMD执行引擎;
图6-8示出了根据一些实施例的执行REPEAT指令的SIMD执行引擎;
图9示出了根据一些实施例的执行BREAK指令的SIMD执行引擎;
图10示出了根据一些实施例的方法的流程图;
图11-14示出了根据一些实施例的执行嵌套循环指令的SIMD执行引擎;
图15示出了根据一些实施例的能够执行循环和条件指令的SIMD执行引擎;
图16示出了根据一些实施例的方法的流程图;
图17-18示出了根据一些实施例的SIMD执行引擎的例子;
图19示出了根据一些实施例的系统的框图;
图20示出了根据一些实施例的执行CONTINUE指令的SIMD执行引擎;
图21示出了根据一些实施例的处理CONTINUE指令的方法的流程图。
具体实施方式
这里描述的一些实施例与“处理系统”有关。如这里所使用的,词组“处理系统”可以指处理数据的任意设备。处理系统例如可以与处理图形数据和/或其他类型的媒体信息的图形引擎相关联。在一些例子中,处理系统的性能可以使用SIMD执行引擎而提高。例如,SIMD执行引擎可以同时对多通道数据执行单个浮点SIMD指令(例如,为了加速变换和/或表现三维几何图形)。其他处理系统的例子包括中央处理器(CPU)和数字信号处理器(DSP)。
图1示出了包括SIMD执行引擎110的一种类型的处理系统100。在这种情况下,执行引擎110接收指令(例如,从指令存储单元中)连同四分量数据向量(例如,向量分量X、Y、Z和W,每个具有多个位,安排为在SIMD执行引擎110的对应通道0至3上处理)。引擎110然后可以对向量中的所有分量同时执行指令。这样的方式叫做“横向”、“通道平行”或“结构阵列”实现。尽管这里说明的实施例与四通道SIMD执行引擎110相关,但应注意,SIMD执行引擎可以具有大于1的任意数量的通道(例如,实施例可以与三十二通道执行引擎相关)。
图2示出了包括SIMD执行引擎210的另一类型的处理系统200。在这种情况下,执行引擎210接收指令连同数据的四个操作数,其中每个操作数都与不同的向量相关(例如,从向量0至3的四个X分量)。引擎210然后可以在单个指令周期中对所有操作数同时执行该指令。这样的方式叫做“纵向”、“通道串行”或“阵列结构”实现。
根据一些实施例,SIMD指令可以是“循环”指令,表示要被执行的一组相关的指令,例如,执行特定次数或直到满足特定条件。例如,考虑下面的指令:
DO{
指令序列
}WHILE<条件>
这里,只要“条件为真”就将执行指令的序列。然而,当以SIMD形式执行这样的指令时,不同的通道对<条件>测试会有不同的结果。例如,可以定义条件以使只要Varl不为零(并且指令序列可以适当地操作Varl)就应执行指令序列。在这种情况下,Varl可以对一个通道为零对另一个通道不为零。
图3示出了根据一些实施例的四通道SIMD执行引擎300。该引擎300包括四位循环掩码寄存器310,其中每个位与相应的计算通道相关。该循环掩码寄存器310可以包括,例如,引擎300中的硬件寄存器。该引擎300也可以包括四位宽的循环“堆栈”320。如这里所使用的,术语“堆栈”可以指用于存储并重构在先的掩码值的任何装置。堆栈的一个例子可以是每通道一位堆栈装置。
循环堆栈320可以包括,例如,一系列硬件寄存器、存储单元、和/或硬件寄存器和存储单元的组合。尽管图3所示的引擎300、条件掩码寄存器310以及条件堆栈320为四通道宽,但是注意,实现可以是其他数量的通道宽度(例如,x通道宽度),并且每个计算通道可以能够处理y位操作数,只要计算通道、掩码通道、和循环堆栈通道之间为1∶1对应。
引擎300可以接收并同时对四个不同通道的数据(例如,与四个计算通道相关)执行指令。注意,在某些情况下,需要少于四个通道(例如,当少于四个有效操作数时)。因此,可以用指示哪个通道具有有效操作数以及哪个通道不具有有效操作数的初始化向量来初始化循环掩码寄存器310(例如,操作数i0至i3,用1指示相关通道当前有效)。然后,循环掩码向量310可以被用于避免不必要的处理(例如,可以仅对在循环掩码寄存器310中被设置为“1”的那些操作数执行指令)。根据另一个实施例,循环掩码寄存器310被简单初始化为全“1“(例如,假设所有通道总是有效的)。在一些情况下,循环掩码寄存器310中的信息可以与其他寄存器中的信息组合(例如,通过布尔AND操作)并且结果可以被存储在一个全局执行掩码寄存器中(然后,其可以用于避免不必要或不恰当的处理)。
图4-5示出了根据一些实施例的,执行DO指令的四通道SIMD执行引擎400。如前所述,引擎400包括循环掩码寄存器410和循环堆栈420。然而,在这种情况下,循环堆栈420是m个条目的深度。应注意,例如,在十个条目深度的堆栈的情况下,堆栈420中的头四个条目可以是硬件寄存器,而其余六个条目被存储在存储器中。
当引擎400接收循环指令(例如,DO指令)时,如图4中所示,循环掩码寄存器410中的数据被复制到循环堆栈420的顶部。此外,循环信息被存储在循环掩码寄存器410中。该循环信息可以初始指示例如,当第一次遇到DO指令时,四个通道中的哪些是有效的(例如,操作数d0至d3,用“1”指示相关的通道有效)。
然后根据循环掩码寄存器410对每个通道执行与DO循环相关的指令组。例如,如果循环掩码寄存器410为“1110”,则将对与三个最高位操作数相关而不与最低位操作数相关的数据执行循环中的指令(例如,因为所述通道当前无效)。
当遇到与DO指令相关的WHILE语句时,为有效的通道评估条件,并且该结果被存储回循环掩码寄存器410(例如,通过布尔AND操作)。例如,如果在遇到WHILE语句之前,循环掩码寄存器410为“1110”,则对与三个最高位操作数相关的数据评估条件。然后结果被存储在循环掩码寄存器410中。如果循环掩码寄存器410中至少一位仍为“1”,则再次对所有具有循环掩码寄存器值“1”的通道执行循环指令组。作为示例,如果与WHILE语句相关的条件结果为“110x”(其中,因为通道无效,所以不评估x),则“1100”可以被存储在循环掩码寄存器410中。当与循环相关的指令被再次执行时,引擎400将仅对与两个最高位操作数相关的数据执行。在这种情况下,可以避免不必要的和/或不适当的对循环的处理。注意,如果更新仅限于有效通道,则不需要任何布尔AND操作。
当最终遇到WHILE语句并且条件被评估为循环掩码寄存器410中的所有位现已为“0”时,循环完成。这样的条件在图5中示出。在这种情况下,来自循环堆栈420的顶部的信息(例如,初始向量),被返回至循环掩码寄存器410中,并且随后的指令可以被执行。也就是说,循环堆栈420顶部的数据可以被传送回循环掩码寄存器410中,以恢复在进入循环之前指示那个通道包含有效数据的内容。然后,可以对与有效的通道相关的数据执行其他的指令。从而,SIMD引擎400可以有效地处理循环指令。
除了DO指令,图6-8示出了根据一些实施例的,执行REPEAT指令的SIMD执行引擎600。如前所述,引擎600包括四位循环掩码寄存器610和四位宽、m个条目深度的循环堆栈620。在这种情况下,引擎600还包括一组计数器630(例如,一系列硬件寄存器串、存储单元和/或硬件寄存器与存储单元的组合)。例如,可以利用值为“1”的初始化向量i0至i6来初始化循环掩码寄存器610,其指示相关通道具有有效操作数。
当引擎600遇到与REPEAT循环相关的INT COUNT=<整数>指令时,如图6所示,值<整数>可以被存储在计数器630中。当遇到REPEAT指令时,如图7所示,循环掩码寄存器610中的数据被复制到循环堆栈620的顶部。此外,循环信息被存储至循环掩码寄存器610。循环信息可以初始指示,例如,当第一次遇到REPEAT指令时,四个通道中的哪一个有效(例如,操作数r0至r6,用“1”表示相关通道有效)。
然后根据循环掩码寄存器610对每个通道执行与REPEAT循环相关的指令组。例如,如果循环掩码寄存器610为“1000”,则仅对与最高位操作数相关的数据执行循环中的指令。
当到达REPEAT循环的结束时(例如,由“}”或下一个指令所指示),减小每个与有效通道相关的计数器630。根据一些实施例,如果任意计数器630已到达零,那么循环掩码寄存器610中的相关位被设置为零。如果循环掩码寄存器610中的至少一位和/或计数器630仍为“1”,则REPEAT块被再次执行。
当循环掩码寄存器610中的全部位和/或计数器630为“0”时,REPEAT循环完成。这种状态在图8中示出。在这种情况下,来自循环堆栈620的信息(例如,初始化向量),被返回至循环掩码寄存器610,并且随后的指令可以被执行。
图9示出了根据一些实施例的,执行BREAK指令的SIMD执行引擎600。特别地,BREAK指令在REPEAT循环内并且在X大于Y时执行。在这个示例中,对于两个最高位通道,X大于Y,并且对于其他的通道不大于Y。在这种情况下,循环掩码向量的相应位被设置为“0”。如果循环掩码向量610中的全部位为“0”,则可以中止REPEAT循环(并且循环堆栈620的顶部可以返回到循环掩码寄存器410)。注意,多于一个的BREAK指令可能存在于循环中。考虑例如下列指令:
 DO{
    指令
    BREAK<条件1>
    指令
    BREAK<条件2>
    指令
}While<条件3>
在这种情况下,如果满足条件1或2,则BREAK指令可以被执行。
图10是根据一些实施例的方法的流程图。这里说明的流程图不意味着按固定的顺序执行动作,实施例可以以任意有效的顺序进行。注意,这里说明的任何方法可以通过硬件、软件(包括微代码)、固件或这些方式的任意组合来执行。例如,存储介质可以在其上存储指令,当由机器执行这些指令时,将导致根据这里所述任意实施例的行为。
在1002,循环指令被接收。例如,可以由SIMD执行引擎遇到DO或REPEAT指令。然后,在1004,循环掩码寄存器中的数据被传送到循环堆栈的顶部,并且循环信息被存储在循环掩码寄存器1006中。例如,哪个通道当前具有有效操作数的指示可以被存储在循环掩码寄存器中。
在1008,根据循环掩码寄存器中的信息执行与循环指令相关的指令,直到完成循环。例如,可以执行与DO循环或REPEAT循环相关的指令块,直到循环掩码寄存器中的所有位为“0”。当循环执行完毕,在1010,可以将循环堆栈顶部的信息移回循环掩码寄存器。
如参考图3所述,循环堆栈可以为一个条目的深度。然而,当循环多于一个条目深度时,SIMD引擎能够处理嵌套的循环指令(例如,当第二循环块“嵌套”在第一循环块中时)。例如,考虑如下指令集:
DO{
   第一指令子集
   DO{
      第二指令子集
   }WHILE<第二条件>
   第三指令子集
}WHILE<第一条件>
在这种情况下,当第一条件为真时,应该对适当的通道执行第一和第三指令子集,只有当第一和第二条件均为真时,才执行第二指令子集。
图11-14示出了SIMD执行引擎1100,其包括循环掩码寄存器1110(例如,用初始化向量初始化)以及多个条目深的循环堆栈1120。如图12所示,当遇到第一DO指令时,循环掩码寄存器1110中的信息被复制到堆栈1120的顶部(i0至i3),第一循环信息被存储到循环掩码寄存器1110(d10至d13)中。然后,按照循环掩码寄存器1110中的信息所指示的,引擎1100可以对数据的多个操作数执行与所述第一循环指令相关的循环块。
图13示出了根据一些实施例的另一个嵌套循环指令(例如,第二DO语句)的执行。在这种情况下,当前在循环掩码寄存器1110中的信息(d10至d13)被复制到堆栈1120的顶部。从而,之前在堆栈1120顶部的信息(例如初始化向量i0至i3)已经被下压了一个条目。引擎1100还将第二循环信息存储至循环掩码寄存器(d20至d23)。
然后,按照循环掩码寄存器1110中的信息所指示的,可以执行与第二循环指令相关的循环块(例如,并且,每次第二块被执行,可以基于与第二循环的WHILE指令相关的条件更新循环掩码寄存器1110)。当第二循环的WHILE指令最终导致循环掩码寄存器1110的每个位都为“0”时,如图14所示,循环堆栈1120的顶部的数据(例如,d10至d13)可以被移回循环掩码寄存器1110。然后可以根据循环掩码寄存器1120执行其他指令。当第一循环块完成时(图4中未示出),初始化向量将被传送回循环掩码寄存器1110并且可以对与有效通道相关的数据执行其他指令。
注意到循环堆栈1120的深度可以与引擎1100支持的循环指令嵌套的层数相关。根据一些实施例,循环堆栈1120仅为单个条目深(例如,堆栈实际上可以是n操作数宽的寄存器)。还应注意,循环掩码寄存器1110中的“0”位可以指示多个不同事物,例如:(i)相关的通道没有被使用,(ii)不满足当前循环的相关WHILE条件,或(iii)不满足更高层循环的相关条件。
根据一些实施例,SIMD引擎还可以支持“条件”指令。例如,考虑下面的一组指令:
IF(条件)
   指令子集
END IF
这里,指令子集在条件为“真”时被执行。然而,由于使用循环指令,当同时对多通道数据执行条件指令时,不同的通道可能产生不同的结果。也就是说,可能对一些通道需要执行指令的子集,而对其他通道不执行。
图15示出了根据一些实施例的四通道SIMD执行引擎1500。根据这里所述的任意实施例,引擎1500包括循环掩码寄存器1510和循环堆栈1520。
此外,根据该实施例,引擎1500包括四位条件掩码寄存器1530,其中每位与相应的计算通道关联。条件掩码寄存器1530可能包括,例如,引擎1500中的硬件寄存器。引擎1500还可以包括四位宽、m个条目深的条件堆栈1540。该条件堆栈1540可以包括,例如,一系列硬件寄存器、存储单元、和/或硬件寄存器和存储单元的组合(例如,在十个条目深的堆栈的情况下,堆栈1540的头四个条目可以为硬件寄存器,而其他剩余六个条目被存储在存储器中)。
条件指令的执行可以类似于循环指令的执行。例如,当引擎1500接收条件指令时(例如,“IF”语句),条件掩码寄存器1530中的数据可以被复制到条件堆栈1540的顶层。此外,可以根据条件掩码寄存器1530中的信息对四个操作数中的每一个执行指令。例如,如果初始化向量为“1110”,那么将对与三个最高位的操作数相关而不与最低位的操作数相关的数据评估与IF语句相关的条件(例如,因为通道当时无效)。然后,结果可以存储在条件掩码寄存器1530中并用于避免对与IF语句相关的语句的不必要的和/或不适当的处理。作为示例,如果与IF语句相关的条件产生“110x”的结果(其中,因为通道无效,所以x不被评估),那么“1100”可以被存储在条件掩码寄存器1530中。然后,当执行其他的与IF语句相关的指令时,引擎1500将仅对与两个最高位的操作数相关的数据执行。
当引擎1500接收已到达与条件指令相关的指令的结尾的指示时(例如,“END IF”语句),在条件堆栈1540的顶部的数据(例如,初始化向量)可以被传送回条件掩码寄存器1530,以恢复指示在进入条件块之前哪个通道包含有效数据的内容。然后,可以对与有效的通道相关的数据执行其它指令。因此,SIMD引擎1500可以有效地处理条件指令。
根据一些实施例,根据循环掩码寄存器1510和条件掩码寄存器1530执行指令。例如,图16是根据这种实施例的方法的示例。在1602,引擎1500接收下一个SIMD指令。在1604,如果对于特定通道的,在循环掩码寄存器1510中的位为“0”,则在1606不对该通道执行指令。在1608,如果条件掩码寄存器1530中的,对于该通道的位为“0”,则也不对该通道执行指令。只有当循环掩码寄存器1510和条件掩码寄存器1530中的位都为“1”时,在1610才执行指令。通过这种方式,引擎1500可以有效地执行循环和条件指令。
在一些情况下,条件指令可以被嵌套在循环指令中,和/或循环指令可以被嵌套在条件指令中。注意,BREAK可以发生在嵌套分支的n层内。从而,可以通过例如弹出<计数>次条件掩码向量来使条件堆栈不被破坏,以将其恢复到循环条目之前的状态。<计数>可以被跟踪,例如,通过使编译器跟踪循环指令和BREAK指令之间的条件指令的相关嵌套层。
图17示出了具有十六位循环掩码寄存器1710(每一位与对应的计算通道的十六个之一相关)以及十六位宽、m个条目深的循环堆栈1720的SIMD引擎1700。引擎1700可以接收并同时对十六个不同通道的数据(例如,与十六个计算通道相关的)执行指令。然而,由于可能会需要少于十六个通道,所以使用初始化向量i0至i15来初始化循环掩码寄存器,用“1”指示相关的通道是有效的。
如图18中所示,当引擎1700接收到DO指令时,循环掩码寄存器1710中的数据被复制到循环堆栈1720的顶部。此外,DO信息d0至d15被存储在循环掩码寄存器1710中。DO信息可以表示,例如,当遇到DO指令时,十六个通道中的哪些有效。
然后,根据循环掩码寄存器1710对每个通道执行第二组指令。当遇到WHILE指令时,引擎1700对每个有效的通道检查<标记>。该<标记>可以由例如,第二组指令中的一个(例如,刚好在WHILE指令之前的)来设置。如果对于任何通道没有<标记>为真,则DO循环完成。在这种情况下,初始化向量i0至i15可以被返回循环掩码寄存器1710,并且可以执行第三组指令。
如果至少有一个<标记>为真,则可以适当地更新该循环掩码寄存器1710,并且引擎1700可以跳至由<WHILE>指令定义的<地址>(例如,指向第二组指令的开始处)。
图19是根据一些实施例的系统1900的框图。该系统1900可以与例如,用于记录和/或显示数字电视信号的媒体处理器相关。系统1900包括图形引擎1910,图形引擎1910具有根据这里所述任意实施例的n操作数SIMD执行引擎1920。例如,SIMD执行引擎1920可以具有根据这里所述任意实施例的n操作数循环掩码向量及n操作数宽、m个条目深的循环堆栈。系统1900还可以包括用于存储SIMD指令的指令存储单元1930及用于存储图形数据(例如,与三维图像相关的向量)的图形存储单元1940。指令存储单元1930和图形存储单元1940可以包括例如,随机存取存储器(RAM)单元。
下面说明各种附加实施例。这些并不限定所有可能的实施例,并且本领域技术人员可以理解还有很多可能的实施例。此外,尽管下面的实施例为了清楚简要地进行了说明,但是如果需要的话,本领域技术人员能够理解如何对上述说明作出改变,以包含这些和其他的实施例和应用。
尽管已经参考分离的循环掩码寄存器及循环堆栈描述了一些实施例,但是,任何实施例可能仅与单个循环堆栈相关(例如,当前的掩码信息可以与堆栈中的顶部条目相关)。
此外,尽管已经描述了不同的实施例,但是还应该注意,可以实现实施例的任意组合(例如,REPEAT或BREAK语句以及ELSE语句可能包括地址)。此外,尽管示例中用“0”指示无效的通道,但是根据其他实施例,“1”可能代替用于指示通道当前无效。
此外,虽然这里将特定的指令描述为示例,但是实施例可以使用其他类型的指令来实现。例如,图20示出了根据一些实施例的、执行CONTINUE指令的SIMD执行引擎2000。特别地,CONTINUE指令在将要执行<整数>次的REPEAT循环中。然而,如果<条件>在通过循环的特定期间为真,则该次循环将被停止并且将开始下一次循环。例如,如果REPEAT循环将被执行十次,而<条件>在第五次执行循环时为真,那么将不执行CONTINUE之后的指令并且开始执行第六次循环。注意,另一方面,BREAK<条件>指令将完全结束循环的执行。
例如,考虑如下指令:
 DO{
   指令
   CONTINUE<条件1>
   指令
   CONTINUE<条件2>
   指令
}While<条件3>
在这种情况下,可能维护两个唯一的掩码:(i)如这里所述的“循环掩码”及(ii)“继续掩码”。继续掩码可以例如,类似于循环掩码,但其记录哪个执行通道不满足与循环中的CONTINUE指令相关的条件。如果通道为“0”(也就是说,不满足CONTINUE条件),则可以防止在该通道执行该次循环的剩余部分。
执行这种CONTINUE指令的一个方法如图21所示。根据这个实施例,在2102,刚好在循环条目之前,将执行掩码加载到循环掩码中(例如,指示哪个通道有效)。
在2104,在执行循环的第一指令之前,用循环掩码的值初始化继续掩码。在2106,当循环指令被执行时,确定哪个通道是有效的。例如,仅当循环掩码和继续掩码中的相关位等于一时可以执行。
在2108,遇到CONTINUE指令。在这一点,评估与CONTINUE指令相关的条件,并且适当地更新继续掩码。因此,在该次循环中,对于遇到CONTINUE指令的通道将不执行其它指令。
当在2110遇到循环的WHILE指令时,评估相关的条件。如果对于任何通道都满足WHILE指令的条件(不管继续掩码中的通道的位),则利用循环掩码再次初始化继续掩码,并且处理在2104继续。如果对于每个通道都不满足WHILE指令的条件,则循环在2112完成并且从堆栈恢复循环掩码。如果循环是嵌套的,则继续掩码可以被保存到继续堆栈中。当内层循环完成执行时,可以恢复循环和继续掩码。根据一些实施例,为循环掩码和继续掩码维护分离的堆栈。根据其他实施例,循环掩码和继续掩码可以被存储在单个堆栈中。
这里说明的多个实施例只是为了说明。本领域的技术人员根据这些描述可以认识到,在权利要求的范围内,可以对这些实施例进行各种修改和改变,以得到其他实施例。

Claims (27)

1.一种用于单指令、多数据执行引擎的循环指令的方法,包括:
在n通道单指令、多数据执行引擎接收第一循环指令;以及
从n位循环掩码寄存器向n位宽、m个条目深的循环堆栈中复制信息,其中n和m是整数;
在所述循环掩码寄存器中存储第一循环信息,该第一循环信息指示具有有效操作数的一个或多个通道;以及
基于所述第一循环信息,对所述通道执行所述第一循环指令。
2.如权利要求1所述的方法,其中,所述第一循环指令是与WHILE条件相关的DO指令,并且存储在所述循环掩码寄存器中的所述第一循环信息将至少部分基于对于与通道相关的至少一个操作数的所述WHILE条件的评估。
3.如权利要求2所述的方法,还包括:
根据所述循环掩码寄存器对至少一个通道执行一组与所述WHILE条件相关的指令;以及
根据所述WHILE条件的评估更新所述循环掩码寄存器。
4.如权利要求3所述的方法,还包括:
确定所述WHILE条件对于由所述循环掩码寄存器使其有效的至少一个通道仍然是满足的;以及
跳转至与所述WHILE指令相关的所述一组指令的开始。
5.如权利要求3所述的方法,还包括:
确定所述WHILE条件对于由所述循环掩码寄存器使其有效的任何通道都不再满足;以及
将所述信息从所述循环堆栈移至所述循环掩码寄存器。
6.如权利要求1所述的方法,其中,所述第一循环指令是REPEAT指令。
7.如权利要求6所述的方法,其中,为至少一个通道保持REPEAT计数器,并且所述方法还包括:
根据所述循环掩码寄存器对至少一个通道执行一组与所述REPEAT指令相关的指令;
将至少一个REPEAT计数器减一;并且
基于至少一个REPEAT计数器判断所述循环掩码寄存器是否应被更新。
8.如权利要求7所述的方法,还包括:
确定所述REPEAT计数器对于由所述循环掩码寄存器使其有效的至少一个通道不为零;以及
跳转至与所述REPEAT指令相关的所述一组指令的开始。
9.如权利要求7所述的方法,还包括:
确定所述REPEAT计数器对于由所述循环掩码寄存器使其有效的所有通道都为零;以及
将信息从所述循环堆栈移至所述循环掩码寄存器。
10.如权利要求1所述的方法,还包括:
在所述执行引擎接收第二循环指令;
将所述第一循环信息从所述循环掩码寄存器移至所述循环堆栈;
以及
将第二循环信息存储在所述循环掩码寄存器中。
11.如权利要求1所述的方法,还包括:
接收与所述第一循环指令以及通道相关的BREAK指令;以及
更新与所述通道相关的所述循环掩码寄存器的位。
12.如权利要求11所述的方法,还包括在接收所述BREAK指令之前:
在所述执行引擎接收第一条件指令;
基于相关数据的多个操作数,评估所述第一条件指令;
将所述评估的结果存储在n位条件掩码寄存器中;
在所述执行引擎接收第二条件指令;以及
将所述结果从所述条件掩码寄存器复制到n位宽、m个条目深度的条件堆栈中。
13.如权利要求12所述的方法,还包括在接收所述BREAK指令之后:
将所述条件堆栈中的至少一个条目移至所述条件掩码寄存器。
14.如权利要求1所述的方法,还包括:
接收与所述第一循环指令以及通道相关的CONTINUE指令;以及
更新与所述通道相关的所述循环掩码寄存器的位。
15.如权利要求1所述的方法,其中,根据所述循环掩码寄存器中的信息并且还根据条件掩码寄存器中的信息执行指令。
16.如权利要求1所述的方法,还包括在接收所述第一循环指令之前:
根据对于执行将使其有效的通道来初始化所述循环掩码寄存器。
17.如权利要求1所述的方法,其中,所述循环堆栈为一个条目的深度。
18.一种用于单指令、多数据执行引擎的循环指令的装置,包括:
n位循环掩码寄存器,其中,所述循环掩码寄存器用于为多个通道存储与第一循环指令相关的第一循环信息;以及
n位宽、m个条目深的循环堆栈,用于存储在所述第一循环指令之前存在于所述循环掩码寄存器中的信息。
19.如权利要求18所述的装置,还包括:
n位条件掩码寄存器,其中,所述条件掩码寄存器用于存储以下评估的结果:(i)IF指令条件和(ii)与多个通道相关的数据;以及
n位宽、m个条目深的条件堆栈,用于存储在所述结果之前存在于所述条件掩码寄存器中的信息。
20.如权利要求18所述的装置,其中,当与所述第一循环指令相关的全部指令都已经被执行时,所述在所述第一循环指令之前存在于所述循环掩码寄存器中的信息将被从所述循环堆栈中转移至所述循环掩码寄存器。
21.如权利要求18所述的装置,其中,所述第一循环指令是DO指令或REPEAT指令。
22.一种用于单指令、多数据执行引擎的循环指令的方法,包括:
在n通道单指令、多数据执行引擎接收第一DO指令;
将第一循环信息存储在n位循环掩码寄存器中;
在所述执行引擎接收第二DO指令;
将所述第一循环信息移至n位宽、m个条目深的循环堆栈中;以及
将第二循环信息存储在所述循环掩码寄存器中。
23.如权利要求22所述的方法,其中,该方法还包括:
当与所述第二DO指令相关的所有指令已经被执行时,将所述第一循环信息从所述循环堆栈中移入所述循环掩码寄存器。
24.如权利要求23所述的方法,其中,该方法还包括:
接收与所述第二DO指令以及通道相关的BREAK指令;以及
更新与所述通道相关的所述循环掩码寄存器的位。
25.一种用于单指令、多数据执行引擎的循环指令的系统,包括:
处理器,包括:
循环掩码寄存器,其中,所述循环掩码寄存器用于为多个通道存储与第一循环指令相关的第一循环信息,以及
m个条目深的循环堆栈,用于当由所述处理器执行第二循环指令时存储所述第一循环信息,其中,m是大于一的整数;以及图形存储单元。
26.如权利要求25所述的系统,其中,当与所述第二循环指令相关的全部指令已经被执行时,所述第一循环信息将被从所述循环堆栈传送至所述循环掩码寄存器。
27.如权利要求25所述的系统,还包括:
指令存储单元。
CN2005800331592A 2004-10-20 2005-10-13 用于单指令、多数据执行引擎的循环指令 Expired - Fee Related CN101048731B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/969,731 2004-10-20
US10/969,731 US20060101256A1 (en) 2004-10-20 2004-10-20 Looping instructions for a single instruction, multiple data execution engine
PCT/US2005/037625 WO2006044978A2 (en) 2004-10-20 2005-10-13 Looping instructions for a single instruction, multiple data execution engine

Publications (2)

Publication Number Publication Date
CN101048731A CN101048731A (zh) 2007-10-03
CN101048731B true CN101048731B (zh) 2011-11-16

Family

ID=35755316

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005800331592A Expired - Fee Related CN101048731B (zh) 2004-10-20 2005-10-13 用于单指令、多数据执行引擎的循环指令

Country Status (5)

Country Link
US (1) US20060101256A1 (zh)
CN (1) CN101048731B (zh)
GB (1) GB2433146B (zh)
TW (1) TWI295031B (zh)
WO (1) WO2006044978A2 (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7543136B1 (en) 2005-07-13 2009-06-02 Nvidia Corporation System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7617384B1 (en) * 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
GB2470782B (en) * 2009-06-05 2014-10-22 Advanced Risc Mach Ltd A data processing apparatus and method for handling vector instructions
US8627042B2 (en) 2009-12-30 2014-01-07 International Business Machines Corporation Data parallel function call for determining if called routine is data parallel
US8683185B2 (en) 2010-07-26 2014-03-25 International Business Machines Corporation Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set
US20140189296A1 (en) * 2011-12-14 2014-07-03 Elmoustapha Ould-Ahmed-Vall System, apparatus and method for loop remainder mask instruction
CN103946795B (zh) 2011-12-14 2018-05-15 英特尔公司 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法
CN104169867B (zh) * 2011-12-23 2018-04-13 英特尔公司 用于执行掩码寄存器至向量寄存器的转换的系统、装置和方法
CN107220029B (zh) * 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
WO2013095661A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value
CN111831335A (zh) 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN104081340B (zh) * 2011-12-23 2020-11-10 英特尔公司 用于数据类型的下转换的装置和方法
CN108519921B (zh) * 2011-12-23 2022-07-12 英特尔公司 用于从通用寄存器向向量寄存器进行广播的装置和方法
US9501276B2 (en) 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9952876B2 (en) 2014-08-26 2018-04-24 International Business Machines Corporation Optimize control-flow convergence on SIMD engine using divergence depth
US9928076B2 (en) * 2014-09-26 2018-03-27 Intel Corporation Method and apparatus for unstructured control flow for SIMD execution engine
US9983884B2 (en) 2014-09-26 2018-05-29 Intel Corporation Method and apparatus for SIMD structured branching
CN109032665B (zh) * 2017-06-09 2021-01-26 龙芯中科技术股份有限公司 微处理器中指令输出处理方法及装置
WO2019162738A1 (en) * 2018-02-23 2019-08-29 Untether Ai Corporation Computational memory

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6079008A (en) * 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
EP1117031A1 (en) * 2000-01-14 2001-07-18 Texas Instruments France A microprocessor
CN1532693A (zh) * 2003-03-24 2004-09-29 ���µ�����ҵ��ʽ���� 处理器和编译器

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6732253B1 (en) * 2000-11-13 2004-05-04 Chipwrights Design, Inc. Loop handling for single instruction multiple datapath processor architectures
US20040073773A1 (en) * 2002-02-06 2004-04-15 Victor Demjanenko Vector processor architecture and methods performed therein
US6986028B2 (en) * 2002-04-22 2006-01-10 Texas Instruments Incorporated Repeat block with zero cycle overhead nesting

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6079008A (en) * 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
EP1117031A1 (en) * 2000-01-14 2001-07-18 Texas Instruments France A microprocessor
CN1532693A (zh) * 2003-03-24 2004-09-29 ���µ�����ҵ��ʽ���� 处理器和编译器

Also Published As

Publication number Publication date
TWI295031B (en) 2008-03-21
WO2006044978A3 (en) 2006-12-07
TW200627269A (en) 2006-08-01
GB2433146A (en) 2007-06-13
WO2006044978A2 (en) 2006-04-27
GB2433146B (en) 2008-12-10
CN101048731A (zh) 2007-10-03
US20060101256A1 (en) 2006-05-11
GB0705909D0 (en) 2007-05-09

Similar Documents

Publication Publication Date Title
CN101048731B (zh) 用于单指令、多数据执行引擎的循环指令
CN100470465C (zh) 用于单指令、多数据执行引擎的条件指令
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
CN102067087B (zh) 环路控制系统及方法
CN102053817B (zh) 用于执行乘法累加运算的设备和方法
CN103250131B (zh) 包括用于早期远分支预测的影子缓存的单周期多分支预测
US20090313458A1 (en) Method and apparatus for vector execution on a scalar machine
US20090132878A1 (en) System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US20050251655A1 (en) Multi-scalar extension for SIMD instruction set processors
TWI728068B (zh) 複數乘法指令
KR20160046331A (ko) 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법
CN105960630A (zh) 用于执行分段操作的数据处理设备和方法
CN1199107C (zh) 控制使用动态反馈的指令转换
KR20040068721A (ko) 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
US7895417B2 (en) Select-and-insert instruction within data processing systems
US9952912B2 (en) Lock-free barrier with dynamic updating of participant count using a lock-free technique
US12061910B2 (en) Dispatching multiply and accumulate operations based on accumulator register index number
WO2020181670A1 (en) Control flow optimization in graphics processing unit
US7162620B2 (en) Methods and apparatus for multi-processing execution of computer instructions
JP3573506B2 (ja) 述語、及びブール式を解くためのコンピュータ・システム、及び方法
WO2013101114A1 (en) Later stage read port reduction
CN100498687C (zh) 具有包括数据部分和相关计数器的条目的硬件堆栈
Zhang Working towards efficient parallel computing of integral images on multi-core processors
CN111291320A (zh) 基于hxdsp芯片的双精度浮点复数矩阵运算优化方法
Bożejko et al. Minimal cycle time determination and golf neighborhood generation for the cyclic flexible job shop problem

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111116

Termination date: 20161013