CN1716185A - 用于单指令、多数据执行引擎的条件指令 - Google Patents
用于单指令、多数据执行引擎的条件指令 Download PDFInfo
- Publication number
- CN1716185A CN1716185A CNA2005100798012A CN200510079801A CN1716185A CN 1716185 A CN1716185 A CN 1716185A CN A2005100798012 A CNA2005100798012 A CN A2005100798012A CN 200510079801 A CN200510079801 A CN 200510079801A CN 1716185 A CN1716185 A CN 1716185A
- Authority
- CN
- China
- Prior art keywords
- condition
- instruction
- mask register
- data
- storehouse
- 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
- 238000011156 evaluation Methods 0.000 claims abstract description 4
- 238000000034 method Methods 0.000 claims description 26
- 238000010586 diagram Methods 0.000 description 7
- 241001269238 Data Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
Images
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
根据一些实施方案,提供了有条件的单指令、多数据指令。例如,可以在n通道的SIMD执行引擎处接收第一条件指令。可以基于多个通道的关联数据来评估第一条件指令,并且评估结果可被存储在n位条件屏蔽寄存器中。然后可以在所述执行引擎处接收第二条件指令,并且所述结果从所述条件屏蔽寄存器被拷贝到n位宽、m条目深的条件堆栈。
Description
技术领域
本发明涉及处理系统,更具体地,涉及用于单指令、多数据执行引擎的条件指令。
背景技术
为了改进处理系统的性能,可以在单个指令周期中对多个操作数的数据(operand ofdata)同时执行单指令、多数据(SIMD)指令。例如,八通道SIMD执行引擎可能对八个32位操作数的数据同时执行一条指令,每个操作数被映射到SIMD执行引擎的唯一计算通道。在一些情形中,指令可以是“有条件的”。即,只有满足预定的条件,才可能执行一个指令或一组指令。注意,在SIMD执行引擎的情况下,这样一个条件可能对某些通道满足,而对其他通道不满足。
发明内容
为解决以上问题,本发明提供了有条件的单指令、多数据指令。例如,可以在n通道的SIMD执行引擎处接收第一条件指令。可以基于多条通道的关联数据来评估第一条件指令,并且评估结果可被存储在n位条件屏蔽寄存器中。然后可以在所述执行引擎处接收第二条件指令,并且所述结果从所述条件屏蔽寄存器被拷贝到n位宽、m条目深的条件堆栈。
根据本发明的一个方面,提供了一种方法,包括:在n操作数的单指令、多数据执行引擎处接收第一条件指令;基于多个操作数的关联数据,评估所述第一条件指令;将所述评估的结果存储在n位条件屏蔽寄存器中;在所述执行引擎处接收第二条件指令;并且将所述结果从所述条件屏蔽寄存器拷贝到n位宽、m条目深的条件堆栈。
根据本发明的另一个方面,提供了一种装置,包括:n位条件屏蔽寄向量,其中所述条件屏蔽向量存储对(i)“if”指令条件和(ii)与多条通道相关联的数据进行评估的结果;和n位宽、m条目深的条件堆栈,该堆栈存储在所述评估结果之前存在于所述条件屏蔽向量中的信息。
根据本发明的又一个方面,提供了一种制品,包括其上存储有指令的存储介质,所述指令在被机器执行时导致:在n通道的单指令、多数据执行引擎处接收第一条件语句,对多条通道的关联数据同时评估所述第一条件语句,将所述评估的结果存储在n位条件屏蔽寄存器中;在所述执行引擎处接收第二条件语句;以及将所述结果从所述条件屏蔽寄存器拷贝到n位宽、m条目深的条件堆栈。
根据本发明的再一个方面,提供了一种系统,包括:处理器和图形存储单元,其中所述处理器包括:n位条件屏蔽寄向量,其中所述条件屏蔽向量存储对(i)第一“if”条件和(ii)与多条通道相关联的数据进行评估的结果;和n位宽、m条目深的条件堆栈,该堆栈在遇到第二“if”指令时用于存储所述结果。
附图说明
图1和图2图示了处理系统。
图3-5图示了根据一些实施方案的SIMD执行引擎。
图6-9图示了根据一些实施方案的SIMD执行引擎。
图10是根据一些实施方案的方法的流程图。
图11-13图示了根据一些实施方案的SIMD执行引擎。
图14是根据一些实施方案的方法的流程图。
图15是根据一些实施方案的系统的框图。
具体实施方式
这里所描述的一些实施方案与“处理系统”相关联。用在这里,短语“处理系统”可以指处理数据的任何设备。例如,处理系统可以与处理图形数据和/或其他类型的媒体信息的图形引擎相关联。在一些情形中,利用SIMD执行引擎可以改进处理系统的性能。例如,SIMD执行引擎可能对多个通道的数据(channel ofdata)同时执行单个浮点SIMD指令(例如,为了加速变换和/或绘制(rendering)三维几何形状)。
图1图示了包括SIMD执行引擎110的一种类型的处理系统100。在这种情形中,执行引擎(例如从指令存储单元)接收指令,一同接收的还有四分量数据向量(例如,向量分量X、Y、Z和W,每个分量具有多位,设置用于在SIMD执行引擎110的相应通道0到3上进行处理)。然后,引擎110可以对所述向量中的所有分量同时执行所述指令。这样一种方法被称为“水平”实现或者“结构数组”实现。
图2图示了包括SIMD执行引擎210的另一种类型的处理系统200。在这种情形中,执行引擎与四个操作数的数据一起接收指令,其中每个操作数与一个不同的向量(例如从向量0到3的四个X分量)相关联。然后,引擎210可以在单个指令周期中对所有的操作数同时执行所述指令。这样一种方法被称为“通道串行”实现或“数组结构”实现。
注意,一些SIMD指令可以是有条件的。例如考虑以下指令组:
IF(条件1)
第一组指令
ELSE
第二组指令
ENDIF
这里,当“条件1”为真时将执行第一组指令,而当“条件1”为假时将执行第二组指令。然而,当对多通道的数据同时执行这样的指令时,不同的通道可能产生不同的结果。也就是说,可能对一些通道需要执行第一组指令,而对其他通道则需要执行第二组指令。
图3-5图示了根据一些实施方案的四通道SIMD执行引擎300。引擎300包括四位的条件屏蔽寄存器310,其中每一位都与相应的计算通道相关联。条件屏蔽寄存器310例如可以由引擎300中的硬件寄存器构成。引擎300还可以包括四位宽、m条目深的条件堆栈320。条件堆栈320例如可以由系列硬件寄存器、存储器位置、和/或硬件寄存器和存储器位置的组合构成(例如在10条目深堆栈的情况下,堆栈320中的前面四个条目可能是硬件寄存器,而剩余的六个条目被存储在存储器中)。虽然在图3中示出的引擎300、条件屏蔽寄存器310和条件堆栈320都与四个通道相关联,但是要注意的是,多种实现可能与其他数量的通道相关联(例如,x通道的执行引擎),并且每条计算通道能够处理y位的操作数。
引擎300可以接收并同时执行用于四条不同通道数据(例如与四条计算通道相关联)的指令。注意,在一些情形中,可能需要少于四条的通道(例如,当有效操作数少于四个时)。结果,条件屏蔽寄存器310可以用初始化向量来初始化,所述初始化向量指示出哪些通道具有有效的操作数以及哪些通道没有(例如,操作数i0到i3,用“1”来表示相关联的通道当前被使能(enabled))。然后,条件屏蔽寄存器310被用来避免发生不必要的处理(例如,可能仅对条件屏蔽寄存器310中被置位为“1”的那些操作数执行指令)。根据一些实施方案,在条件屏蔽寄存器310中的信息可以与其他寄存器中的信息组合起来(例如,经由布尔AND运算),结果可被存储在总执行屏蔽寄存器(该寄存器于是可被用来避免不必要的或不适当的处理)中。
当引擎300接收到条件指令(例如“IF”语句)时,如图4所示,条件屏蔽寄存器310中的数据被拷贝到条件堆栈320的顶部。而且,根据条件屏蔽寄存器中的信息,对四个操作数中的每一个执行所述指令。例如,如果初始化向量是“1110”,则将为与三个最高有效操作数(MSB)相关联的数据来评估与IF语句相关联的条件,而对于最低有效位(LSB)则不进行评估(例如,因为该通道当前未被使能)。然后,结果被存储在条件屏蔽寄存器310中,并且可被用来避免为了与IF语句相关联的语句进行不必要的和/或不适当的处理。举例来说,如果与IF语句相关联的条件生成“110x”的结果(其中x未被评估,因为该通道未被使能),则可以将“1100”存储在条件屏蔽寄存器310中。当与IF语句相关联的其他指令随后被执行时,引擎300将只对与两个MSB相关联的数据执行上述指令(不对与两个LSB相关联的数据执行指令)。
当引擎300接收到“已到达与条件指令相关联的指令的末尾”的指示(例如“END IF”语句)时,如图5所示,位于条件堆栈320顶部的数据(例如初始化向量)可以被转移回条件屏蔽寄存器310中,恢复指示哪些通道在进入条件块之前包含有效数据的内容。然后,可以对与被使能的通道相关联的数据执行进一步的指令。结果,SIMD引擎300可以有效地处理条件指令。
根据一些实施方案,一个条件指令可以被“嵌套(nested)”在一组与另一个条件指令相关联的指令内部。例如考虑以下指令组:
IF(条件1)
第一组指令
IF(条件2)
第二组指令
END IF
第三组指令
END IF在这种情形中,当“条件1”为真时应当执行第一和第三组指令,只有当“条件1”和“条件2”都为真时才执行第二组指令。
图6-9图示了根据一些实施方案的、包括条件屏蔽寄存器610(例如用初始化向量进行初始化的)和条件堆栈620的执行引擎600。和前面一样,条件屏蔽寄存器610中的信息被拷贝到堆栈602的顶部,并且根据(i)条件屏蔽寄存器610中的信息和(ii)与第一条件指令相关联的条件(例如“条件1”)来评估各通道的数据。当执行第一条件指令(例如第一IF语句)时,评估的结果(例如r10到r13)被存储到条件屏蔽寄存器610中,如图7所示。引擎600然后可以对由条件屏蔽寄存器610中的信息所指示的多个操作数的数据执行与第一条件指令相关联的进一步指令。
图8图示了根据一些实施方案,另一个嵌套的条件指令(例如第二IF语句)的执行。在这种情形中,当前位于条件屏蔽寄存器610中的信息被拷贝到堆栈620的顶部。结果,先前处于堆栈620顶部的信息(例如初始化向量)被向下压入一个条目。然后,根据(i)当前位于条件屏蔽寄存器610中的信息(例如r10到r13)和(ii)与第二条件指令相关联的条件(例如“条件2”)来同时评估多个通道的数据。然后,这一评估的结果被存储到条件屏蔽寄存器中(例如r20到r23),并且可被引擎600用来对由条件屏蔽寄存器610中的信息所指示的多个操作数的数据执行与第二条件指令相关联的进一步指令。
当引擎600接收到“已到达与第二条件指令相关联的指令的末尾”的指示(例如“ENDIF”语句)时,如图9所示,位于条件堆栈620顶部的数据(例如r10到r13)可被移回条件屏蔽寄存器610中。然后可以根据条件屏蔽寄存器610执行进一步的指令。如果遇到了另一个END IF语句(在图9中未示出),则初始化向量将被转移回条件屏蔽寄存器610中,并且可以对与使能通道相关联的数据执行进一步的指令。
注意,条件堆栈620的深度可以与引擎600所支持的条件指令嵌套的级数相关联。根据一些实施方案,条件堆栈620仅是单条目深的堆栈(例如,该堆栈可能实际上是一个n操作数宽的寄存器)。
图10是例如可以参考这里所描述的一些实施方案而执行的方法的流程图。这里所描述的流程图不一定暗示着固定的动作顺序,可以按照可行的任何顺序来执行各个实施方案。注意,这里所描述的方法可以通过硬件、软件(包括微码)、固件或者这些手段的任意组合来实现。例如,存储介质可以在上面存储这样的指令,即这些指令在被机器执行时产生与这里所描述的任一实施方案相一致的性能。
在1002,对条件屏蔽寄存器进行初始化。例如,初始化向量可能基于当前被使能的通道,被存储在所述条件屏蔽寄存器中。根据另一个实施方案,条件屏蔽寄存器被简单地初始化为全1(例如,假定所有的通道一直被使能)。
在1004取得下一条SIMD指令。例如,SIMD执行引擎可能从存储单元接收指令。当该SIMD指令是“IF”指令时(在1006),在1008根据条件屏蔽寄存器来评估与所述指令相关联的条件。即,针对与条件屏蔽寄存器中具有“1”的通道相关联的操作数来评估所述条件。注意,在一些情形中,在条件屏蔽寄存器中,通道中可能有一个具有“1”,或者没有任何一条通道具有“1”。
在1010,条件屏蔽寄存器中的数据被转移到条件堆栈的顶部。例如,条件屏蔽寄存器的当前状态可被保存下来,以稍后在与“IF”语句相关联的指令已被执行后再恢复出来。然后在1012,评估的结果被存储在条件屏蔽寄存器中,并且该方法在1004处继续(例如可以取得下一条SIMD指令)。
当在1006处SIMD指令不是“IF”指令时,在1014处确定该指令是不是“END IF”指令。如果不是,则在1018执行该指令。例如,可以对由条件屏蔽寄存器所指示的多个通道的数据执行所述指令,并且堆栈中的剩余值向上移动一个位置。
当在1014确定遇到了“END IF”指令时,在条件堆栈顶部的信息在1016被移回到条件屏蔽寄存器中。
在一些情形中,条件指令与以下两者都有关联:(i)当条件为真时执行的第一组指令和(ii)当上述条件为假时(例如,与ELSE语句相关联)执行的第二组指令。图11-13图示了根据一些实施方案的SIMD执行引擎1100。和前面一样,引擎1100包括已初始化的条件屏蔽寄存器1110和条件堆栈1120。注意,在这种情形中,引擎1110能够同时对16个操作数的数据执行指令。根据这一实施方案,条件指令也包括与第二组指令相关联的地址。具体地说,当确定所述条件对于已被评估的所有操作数的数据(例如,对于既被使能又由于上层IF语句而未被屏蔽的通道)不为真时,引擎1 100将直接跳到所述地址。按照这种方式,因为可以避免在IF-ELSE对之间的不必要指令,所以可以改进引擎1100的性能。如果条件指令与ELSE指令没有关联,那么所述地址可能替换为与END IF指令相关联。根据另外一个实施方案,ELSE指令也可能包括END IF指令的地址。在这种情形中,当条件对每条通道都为真时,引擎1100可以直接跳到END IF指令(因此无需执行与ELSE相关联的任何指令)。
如图12所示,当遇到条件指令时,条件屏蔽寄存器1110中的信息被拷贝到条件堆栈1120中。此外,可以根据条件屏蔽寄存器1110,针对多条通道来评估与所述指令相关联的条件(例如,当没有上层IF指令未处理完时针对所有使能的通道),并将结果存储在条件屏蔽寄存器1110中(例如操作数r0到r15)。然后可以根据条件屏蔽寄存器1110来执行与IF语句相关联的指令。
当如图13中所示,遇到了ELSE指令时,引擎1100可能仅反转条件屏蔽寄存器1110中的所有操作数。按照这种方式,现在将会执行与关于所述IF指令未被执行的通道相关联的数据。然而,这样一种方法可能导致某些通道被不适当地设置为1,因而在ELSE下,当在这些通道上本不应当发生任何执行动作时而执行。例如,在进入IF-ELSE-END IF代码块时当前未被使能的通道应当对于IF指令和ELSE指令被屏蔽(例如,设置为0)。类似地,由于上层IF指令而现在被屏蔽的通道应当保持被屏蔽。为了避免这种问题,引擎1100在遇到ELSE指令时不是简单地反转条件屏蔽寄存器1110中的所有操作数,而是可以经由布尔运算将条件屏蔽寄存器1110中的当前信息与条件堆栈1120顶部的信息组合起来,所述布尔运算例如是新屏蔽=NOT(屏蔽)AND堆栈顶部。
图14是根据一些实施方案的方法的流程图。在1402,接收到条件SIMD指令。例如,SIMD执行引擎可以从存储单元取得IF指令。在1404,引擎于是可以(i)将条件屏蔽寄存器中当前的信息拷贝到条件堆栈,(ii)根据多个通道的数据和条件屏蔽寄存器来评估条件,并且(iii)将评估结果存储在条件屏蔽寄存器中。
如果在1406,被评估的通道中有任何一个为真,则可以在1408处,根据条件屏蔽寄存器来执行与IF指令相关联的第一组指令。可选地,如果在1406没有一条通道为真,那么可以跳过这些指令。
当遇到ELSE语句时,可以在1410处,经由每通道的布尔运算将条件屏蔽寄存器中的信息与条件堆栈顶部的信息组合起来,所述布尔运算例如是NOT(条件屏蔽寄存器)AND堆栈顶部。然后可以在1414执行(例如与ELSE指令相关联的)第二组指令,并且可以在1416处,从条件堆栈中恢复出条件屏蔽寄存器。可选地,如果在1412没有一条通道为真,那么可以跳过这些指令。
图15是根据一些实施方案的系统1500的框图。系统1500例如可能与媒体处理器相关联,所述媒体处理器适于记录和/或显示数字电视信号。系统1500包括图形引擎1510,该引擎具有与这里所描述的任意实施方案相一致的n操作数SIMD执行引擎1520。例如,SIMD执行引擎1520可能用一个n操作数的条件屏蔽向量来存储对(i)第一“if”条件和(ii)与多条通道相关联的数据进行评估的结果。SIMD执行引擎1520还可以具有一个n位宽、m条目深的条件堆栈,该堆栈在遇到第二“if”指令时存储所述结果。系统1500还可以包括存储SIMD指令的指令存储单元1530和存储图形数据(例如与三维图像相关联的向量)的图形存储单元1540。指令存储单元1530和图形存储单元1540例如可以由随机访问存储器(RAM)单元组成。
下面说明各种附加实施方案。它们不构成对所有可能实施方案的定义,本领域的技术人员将理解,很多其他实施方案都是可能的。此外,虽然以下实施方案为清楚起见被简要描述,但是本领域的技术人员将理解在必要的时候,如何对以上描述进行修改,以涵盖这些及其他实施方案和申请。
虽然已相对各自的条件屏蔽寄存器和条件堆栈描述了一些实施方案,但是任何一个实施方案可能仅与单个条件堆栈相关联(例如,并且当前屏蔽信息可能与堆栈中的顶部条目相关联)。
此外,虽然已描述了不同的实施方案,但是要注意的是,可以实现实施方案的任意组合(例如,IF语句和ELSE语句都可以包括地址)。而且,虽然各实施例使用“0”来指示未被使能的通道,但是根据其他实施方案,也可以用“1”来表示当前未被使能的通道。
这里所描述的几个实施方案纯粹是出于说明的目的。本领域的技术人员将会从这篇说明书中认识到,可以用仅由权利要求书限定的修改和变更来实现其他实施方案。
Claims (20)
1.一种方法,包括:
在n操作数的单指令、多数据执行引擎处接收第一条件指令;
基于多个操作数的关联数据,评估所述第一条件指令;
将所述评估的结果存储在n位条件屏蔽寄存器中;
在所述执行引擎处接收第二条件指令;以及
将所述结果从所述条件屏蔽寄存器拷贝到n位宽、m条目深的条件堆栈。
2.如权利要求1所述的方法,还包括:
基于所述条件屏蔽寄存器中的数据和多个操作数的关联数据,评估所述第二条件指令;
将所述第二条件指令的评估结果存储在所述条件屏蔽寄存器中;
根据所述条件屏蔽寄存器中的数据,执行与所述第二条件指令相关联的指令;
将所述条件堆栈的顶部移动到所述条件屏蔽寄存器;以及
根据所述条件屏蔽寄存器中的数据,执行与所述第一条件指令相关联的指令。
3.如权利要求1所述的方法,其中所述第一条件指令与(i)当条件为真时执行的第一组指令和(ii)当所述条件为假时执行的第二组指令相关联。
4.如权利要求3所述的方法,其中所述第一条件指令包括与所述第二组指令相关联的地址,并且所述的方法还包括:
当所述评估操作指示出所述第一条件指令对于关联数据的任何已评估位都不满足时,跳到所述地址。
5.如权利要求3所述的方法,还包括:
执行所述第一组指令;
经由布尔运算将所述条件屏蔽寄存器中的数据与所述条件堆栈顶部的数据组合起来;
将所述组合的结果存储在所述条件屏蔽寄存器中;以及
根据所述条件屏蔽寄存器中的数据执行所述第二组指令。
6.如权利要求1所述的方法,其中所述n操作数中每一个的关联数据都与一条通道相关联,并且所述的方法还包括在接收所述第一条件指令之前:
基于被使能来执行的通道,初始化所述条件屏蔽寄存器。
7.如权利要求1所述的方法,其中所述条件堆栈超过一个条目深。
8.一种装置,包括:
n位条件屏蔽向量,其中所述条件屏蔽向量存储对(i)“if”指令条件和(ii)与多条通道相关联的数据进行评估的结果;以及
n位宽、m条目深的条件堆栈,该堆栈存储在所述评估结果之前存在于所述条件屏蔽向量中的信息。
9.如权利要求8所述的装置,其中当执行相关联的“end if”指令时,所述信息从所述条件堆栈转移到所述条件屏蔽向量。
10.如权利要求8所述的装置,其中所述“if”指令与(i)在与真条件相关联的操作数上执行的第一组指令和(ii)在与假条件相关联的操作数上执行的第二组指令相关联。
11.如权利要求10所述的装置,其中所述“if”指令包括与所述第二组指令相关联的地址,并且当结果对每条通道都为假时,所述地址被存储在程序计数器中。
12.如权利要求10所述的装置,还包括完成以下操作的引擎:(i)执行第一组指令,(ii)将所述条件屏蔽向量中的信息与所述条件堆栈顶部的信息组合起来,(iii)将所述组合的结果存储在所述条件屏蔽向量中,以及(iv)执行第二组指令。
13.如权利要求8所述的装置,其中根据使能通道来初始化所述条件屏蔽向量。
14.如权利要求8所述的装置,其中所述条件堆栈是1条目深。
15.一种制品,包括:
其上存储有指令的存储介质,所述指令在被机器执行时导致:
在n通道的单指令、多数据执行引擎处接收第一条件语句,
对多条通道的关联数据同时评估所述第一条件语句,
将所述评估的结果存储在n位条件屏蔽寄存器中;
在所述执行引擎处接收第二条件语句;以及
将所述结果从所述条件屏蔽寄存器拷贝到n位宽、m条目深的条件堆栈。
16.如权利要求15所述的制品,其中所述第一条件语句:(i)与当条件为真时执行的第一组语句相关联,(ii)与当所述条件为假时执行的第二组语句相关联,并且(iii)包括与所述第二组语句相关联的地址,并且所述指令在被机器执行时还包括导致:
当所述评估操作指示出所述第一条件语句对所述n通道中任何一条的关联数据
不为真时,跳到所述地址。
17.如权利要求16所述的制品,其中所述指令在被机器执行时还包括导致:
基于所述条件屏蔽寄存器中的数据和n通道的关联数据,评估所述第二条件语句;
将所述第二条件语句的评估结果存储在所述条件屏蔽寄存器中;
根据所述条件屏蔽寄存器中的数据,执行与所述第二条件语句相关联的语句;
将所述条件堆栈的顶部转移到所述条件屏蔽寄存器;以及
根据所述条件屏蔽寄存器中的数据,执行与所述第一条件语句相关联的语句。
18.一种系统,包括:
处理器,所述处理器包括:
n位条件屏蔽向量,其中所述条件屏蔽向量存储对(i)第一“if”条件和(ii)与多条通道相关联的数据进行评估的结果;以及
n位宽、m条目深的条件堆栈,该堆栈在遇到第二“if”指令时用于存储所述结果;以及
图形存储单元。
19.如权利要求18所述的系统,其中当与所述第二“if”指令相关联的“end if”指令被执行时,所述结果从所述条件堆栈被转移到所述条件屏蔽向量。
20.如权利要求18所述的系统,还包括指令存储单元。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/879,460 | 2004-06-29 | ||
US10/879,460 US20050289329A1 (en) | 2004-06-29 | 2004-06-29 | Conditional instruction for a single instruction, multiple data execution engine |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1716185A true CN1716185A (zh) | 2006-01-04 |
CN100470465C CN100470465C (zh) | 2009-03-18 |
Family
ID=35159732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100798012A Expired - Fee Related CN100470465C (zh) | 2004-06-29 | 2005-06-29 | 用于单指令、多数据执行引擎的条件指令 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20050289329A1 (zh) |
EP (1) | EP1761846A2 (zh) |
JP (1) | JP2008503838A (zh) |
KR (1) | KR100904318B1 (zh) |
CN (1) | CN100470465C (zh) |
TW (1) | TWI287747B (zh) |
WO (1) | WO2006012070A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970511A (zh) * | 2013-01-28 | 2014-08-06 | 三星电子株式会社 | 能够支持多模式的处理器及其多模式支持方法 |
CN107729048A (zh) * | 2012-10-30 | 2018-02-23 | 英特尔公司 | 提供向量压缩和旋转功能的指令和逻辑 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060256854A1 (en) * | 2005-05-16 | 2006-11-16 | Hong Jiang | Parallel execution of media encoding using multi-threaded single instruction multiple data processing |
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 |
US7480787B1 (en) * | 2006-01-27 | 2009-01-20 | Sun Microsystems, Inc. | Method and structure for pipelining of SIMD conditional moves |
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 |
US8418154B2 (en) * | 2009-02-10 | 2013-04-09 | International Business Machines Corporation | Fast vector masking algorithm for conditional data selection in SIMD architectures |
JP5452066B2 (ja) * | 2009-04-24 | 2014-03-26 | 本田技研工業株式会社 | 並列計算装置 |
JP5358287B2 (ja) * | 2009-05-19 | 2013-12-04 | 本田技研工業株式会社 | 並列計算装置 |
US8850436B2 (en) * | 2009-09-28 | 2014-09-30 | Nvidia Corporation | Opcode-specified predicatable warp post-synchronization |
KR101292670B1 (ko) * | 2009-10-29 | 2013-08-02 | 한국전자통신연구원 | 벡터 프로세싱 장치 및 방법 |
US20170365237A1 (en) * | 2010-06-17 | 2017-12-21 | Thincl, Inc. | Processing a Plurality of Threads of a Single Instruction Multiple Data Group |
CN103988173B (zh) | 2011-11-25 | 2017-04-05 | 英特尔公司 | 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑 |
CN104137054A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 用于执行从索引值列表向掩码值的转换的系统、装置和方法 |
KR101893796B1 (ko) | 2012-08-16 | 2018-10-04 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
US20140289502A1 (en) * | 2013-03-19 | 2014-09-25 | Apple Inc. | Enhanced vector true/false predicate-generating instructions |
US9645820B2 (en) * | 2013-06-27 | 2017-05-09 | Intel Corporation | Apparatus and method to reserve and permute bits in a mask register |
US9952876B2 (en) | 2014-08-26 | 2018-04-24 | International Business Machines Corporation | Optimize control-flow convergence on SIMD engine using divergence depth |
CN107491288B (zh) * | 2016-06-12 | 2020-05-08 | 合肥君正科技有限公司 | 一种基于单指令多数据流结构的数据处理方法及装置 |
JP2018124877A (ja) * | 2017-02-02 | 2018-08-09 | 富士通株式会社 | コード生成装置、コード生成方法、およびコード生成プログラム |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4514846A (en) * | 1982-09-21 | 1985-04-30 | Xerox Corporation | Control fault detection for machine recovery and diagnostics prior to malfunction |
US5045995A (en) * | 1985-06-24 | 1991-09-03 | Vicom Systems, Inc. | Selective operation of processing elements in a single instruction multiple data stream (SIMD) computer system |
US5440749A (en) * | 1989-08-03 | 1995-08-08 | Nanotronics Corporation | High performance, low cost microprocessor architecture |
GB2273377A (en) * | 1992-12-11 | 1994-06-15 | Hughes Aircraft Co | Multiple masks for array processors |
US6125439A (en) * | 1996-01-24 | 2000-09-26 | Sun Microsystems, Inc. | Process of executing a method on a stack-based processor |
US6079008A (en) * | 1998-04-03 | 2000-06-20 | Patton Electronics Co. | Multiple thread multiple data predictive coded parallel processing system and method |
US7017032B2 (en) * | 2001-06-11 | 2006-03-21 | Broadcom Corporation | Setting execution conditions |
US20040073773A1 (en) * | 2002-02-06 | 2004-04-15 | Victor Demjanenko | Vector processor architecture and methods performed therein |
JP3857614B2 (ja) * | 2002-06-03 | 2006-12-13 | 松下電器産業株式会社 | プロセッサ |
-
2004
- 2004-06-29 US US10/879,460 patent/US20050289329A1/en not_active Abandoned
-
2005
- 2005-06-17 JP JP2007518145A patent/JP2008503838A/ja active Pending
- 2005-06-17 WO PCT/US2005/021604 patent/WO2006012070A2/en not_active Application Discontinuation
- 2005-06-17 EP EP05761782A patent/EP1761846A2/en not_active Withdrawn
- 2005-06-17 KR KR1020067027369A patent/KR100904318B1/ko not_active IP Right Cessation
- 2005-06-23 TW TW094120953A patent/TWI287747B/zh not_active IP Right Cessation
- 2005-06-29 CN CNB2005100798012A patent/CN100470465C/zh not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729048A (zh) * | 2012-10-30 | 2018-02-23 | 英特尔公司 | 提供向量压缩和旋转功能的指令和逻辑 |
CN107729048B (zh) * | 2012-10-30 | 2021-09-28 | 英特尔公司 | 提供向量压缩和旋转功能的指令和逻辑 |
CN103970511A (zh) * | 2013-01-28 | 2014-08-06 | 三星电子株式会社 | 能够支持多模式的处理器及其多模式支持方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100470465C (zh) | 2009-03-18 |
TW200606717A (en) | 2006-02-16 |
TWI287747B (en) | 2007-10-01 |
WO2006012070A3 (en) | 2006-05-26 |
EP1761846A2 (en) | 2007-03-14 |
US20050289329A1 (en) | 2005-12-29 |
KR100904318B1 (ko) | 2009-06-23 |
WO2006012070A2 (en) | 2006-02-02 |
JP2008503838A (ja) | 2008-02-07 |
KR20070032723A (ko) | 2007-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1716185A (zh) | 用于单指令、多数据执行引擎的条件指令 | |
CN1230735C (zh) | 在一个周期内处理乘累加运算 | |
CN1149478C (zh) | 从本地码有效调用Java方法的方法和设备 | |
CN1821952A (zh) | 处理系统的寄存器文件区域 | |
CN100480997C (zh) | 选择可实质同时处理的多重线程的系统与方法 | |
CN1279783A (zh) | 利用规格字段指令编码的处理器 | |
CN1977241A (zh) | 向量化多条输入指令的方法和装置 | |
CN101055644A (zh) | 绘图处理装置及其处理指令、数据和逻辑单元操作的方法 | |
CN1790310A (zh) | 用于单指令、多数据执行引擎标志寄存器的评估单元 | |
US20050251614A1 (en) | Processer | |
CN1821964A (zh) | 将本机函数内嵌到编译的Java代码中的方法和系统 | |
CN1258361A (zh) | 处理不同宽度的命令的vliw处理器 | |
CN101061460A (zh) | 用于混移运算的微处理器设备和方法 | |
CN1613054A (zh) | 控制指令集体系结构之间的二进制编码翻译的兼容水平 | |
CN1819011A (zh) | 显示屏分区再现的装置和方法 | |
CN1806225A (zh) | 在具有多指令集的数据处理设备内的指令编码 | |
Zhang | A novel parallel scan for multicore processors and its application in sparse matrix-vector multiplication | |
CN1320450C (zh) | 提供可变宽度的至少六路加法指令的方法及相应装置 | |
CN1826582A (zh) | 数据存取程序指令编码 | |
CN1547113A (zh) | 用于存取处理器中的暂存器的装置与方法 | |
CN112559169B (zh) | 资源分配方法以及装置 | |
CN1426547A (zh) | 基于流水线体系结构的微控制器的对抗方法 | |
CN1804789A (zh) | 具有包括数据部分和相关计数器的条目的硬件堆栈 | |
CN1684031A (zh) | 在缓存器架构处理器中管理堆栈转移的装置与方法 | |
CN1278223C (zh) | 应用于电脑游戏的脚本执行方法 |
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: 20090318 Termination date: 20160629 |