JP2008503838A - 単一命令多重データ実行エンジンのための条件命令 - Google Patents
単一命令多重データ実行エンジンのための条件命令 Download PDFInfo
- Publication number
- JP2008503838A JP2008503838A JP2007518145A JP2007518145A JP2008503838A JP 2008503838 A JP2008503838 A JP 2008503838A JP 2007518145 A JP2007518145 A JP 2007518145A JP 2007518145 A JP2007518145 A JP 2007518145A JP 2008503838 A JP2008503838 A JP 2008503838A
- Authority
- JP
- Japan
- Prior art keywords
- condition
- instruction
- mask register
- data
- conditional
- 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.)
- Pending
Links
- 238000011156 evaluation Methods 0.000 claims abstract description 15
- 238000000034 method Methods 0.000 claims description 23
- 239000013598 vector Substances 0.000 claims description 23
- 230000009191 jumping Effects 0.000 claims 2
- 238000012545 processing Methods 0.000 description 13
- 238000013459 approach Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000000694 effects 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
- 230000009466 transformation Effects 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/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/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/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/3854—Instruction completion, e.g. retiring, committing or graduating
-
- 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
-
- 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]
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
いくつかの実施形態によれば、条件付きの単純命令多重データ(Single Instruction, Multiple Data)の命令が提供される。たとえば、第一の条件命令がnチャネルのSIMD実行エンジンで受け取られうる。この第一の条件命令は複数チャネルに対応するデータに基づいて評価されえ、評価の結果はnビットの条件マスクレジスタに保存されうる。次いで第二の条件命令が実行エンジンで受け取られえ、前記結果は条件マスクレジスタからnビット幅のm項目の深さの条件スタックにコピーされうる。
Description
処理システムのパフォーマンスを向上させるため、単純命令多重データ(SIMD: Single Instruction, Multiple Data)命令は単一の命令期間内に複数のオペランドデータについて同時に実行されうる。たとえば、8チャネルのSIMD実行エンジンはある命令を同時に8つの32ビットオペランドデータについて実行でき、各オペランドはSIMD実行エンジンの一意的な計算チャネルに割り当てられる。場合によっては、命令は「条件付き」であることがある。つまり、ある命令または命令の組は、ある所定の条件が満たされる場合にのみ実行されうるのである。SIMD実行エンジンの場合、そのような条件はいくつかのチャネルについては満たされるが他のチャネルについては満たされないといったことがありうることを注意しておく。
ここに記載されるいくつかの実施形態は「処理システム」に関する。ここでの用法では、「処理システム」の語句はデータを処理するいかなる装置をも指しうる。処理システムはたとえば、グラフィックデータおよび/またはその他の種類のメディア情報を処理するグラフィックエンジンに対応しうる。場合によっては、処理システムのパフォーマンスはSIMD実行エンジンの使用で向上させることができる。たとえば、SIMD実行エンジンは、複数チャネルのデータについて単一の浮動小数点SIMD演算を同時に実行しうる(たとえば、三次元幾何学図形の変換および/またはレンダリングを加速するために)。
図1は、SIMD実行エンジン110を含むある型の処理システム100を示している。この場合、実行エンジンは命令を、4成分データベクトル(たとえば、ベクトル成分X,Y,Z,Wのそれぞれが、SIMD実行エンジン110の対応するチャネル0ないし3で処理するために配列されたビットを有している)とともに受け取る(たとえば命令記憶ユニットから)。エンジン110は次いで、ベクトルの成分すべてについて前記命令を同時に実行しうる。そのようなアプローチは「水平的」または「構造の配列(array of structures)」実装と呼ばれる。
図2は、SIMD実行エンジン210を含む別のある型の処理システム200を示している。この場合、実行エンジンは命令を、ある異なるベクトル(たとえば、ベクトル0ないし3からの4つのX成分)にそれぞれ対応する4つのオペランドデータとともに受け取る。エンジン210は次いで、単一の命令期間内に前記オペランドすべてについて前記命令を同時に実行しうる。そのようなアプローチは「チャネル直列」または「配列の構造(structure of arrays)」実装と呼ばれる。
いくつかのSIMD命令は条件付きでありうることを注意しておく。たとえば、次の命令の組を考える。
IF(条件1)
第一の組の命令
ELSE
第二の組の命令
END IF
ここで、第一の組の命令は「条件1」が真であるときに実行されることになり、第二の組の命令は「条件1」が偽であるときに実行されることになる。しかし、そのような命令が複数チャネルのデータについて同時に実行されるとき、異なるチャネルが異なる結果を生じることがある。つまり、いくつかのチャネルについては第一の組の命令が実行される必要がある一方、他のチャネルについては第二の組の命令が実行される必要があるといったことがありうるのである。
第一の組の命令
ELSE
第二の組の命令
END IF
ここで、第一の組の命令は「条件1」が真であるときに実行されることになり、第二の組の命令は「条件1」が偽であるときに実行されることになる。しかし、そのような命令が複数チャネルのデータについて同時に実行されるとき、異なるチャネルが異なる結果を生じることがある。つまり、いくつかのチャネルについては第一の組の命令が実行される必要がある一方、他のチャネルについては第二の組の命令が実行される必要があるといったことがありうるのである。
図3〜5はいくつかの実施形態に基づく4チャネルSIMD実行エンジン300を示している。エンジン300は4ビットの条件マスクレジスタ310を含んでおり、該レジスタ内では各ビットは対応する計算チャネルに関連付けられている。条件マスクレジスタ310はたとえば、エンジン300内のハードウェアレジスタであってもよい。エンジン300は4ビット幅、m項目深さの条件スタック320をも含みうる。条件スタック320はたとえば、一連のハードウェアレジスタ、記憶位置および/またはハードウェアレジスタと記憶位置との組み合わせでありうる(たとえば、10項目深さのスタックの場合、スタック320中の最初の4項目はハードウェアレジスタで、残りの6項目はメモリに保存されるなど)。図3に示したエンジン300、条件マスクレジスタ310および条件スタック320は4つのチャネルに対するものであるが、実装はそれ以外のチャネル数に対してでもよく(たとえばxチャネル実行エンジン)、各計算チャネルはyビットオペランドを処理することができてもよい。
エンジン300は4つの異なるチャネルのデータ(たとえば4つの計算チャネルに対応するもの)について命令を受け取って同時に実行することができる。実施形態によっては必要とされるのが4チャネル未満であることもあることを注意しておく(たとえば有効なオペランドが4つ未満の場合)。結果として、条件マスクベクトル310は、どのチャネルが有効なオペランドをもち、どのチャネルがもたないかを示す初期化ベクトルで初期化されうる(たとえば、オペランドi0ないしi3について「1」が対応するチャネルが現在有効になっていることを示す)。次いで条件マスクベクトル310を使うことで不必要な処理を回避しうる(たとえば、条件マスクレジスタ310のうち「1」にセットされているオペランドについてのみ命令を実行するなど)。いくつかの実施形態によれば、条件マスクレジスタ310内の情報は他のレジスタ内の情報と組み合わされることができ(たとえばブール演算ANDを介して)、その結果は総合的な実行マスクレジスタ内に保存されうる(それは次いで不必要または不適切な処理を回避するために使用されうる)。
エンジン300が条件命令(たとえば「IF」文)を受け取るとき、図4に示したように、条件マスクレジスタ310内のデータが条件スタック320の一番上にコピーされる。さらに、その命令は、条件マスクレジスタ内の情報に従って4つのオペランドのそれぞれについて実行される。たとえば、初期化ベクトルが「1110」だったとすると、IF文に対応する条件は3つの最上位オペランド(MSB: Most Significant operands)に対応するデータについては評価されるが、最低位ビット(LSB: Least Significant Bit)に対応するデータについては評価されない(たとえば、そのチャネルは現在有効になっていないため)。次いで評価の結果が条件マスクレジスタ310内に保存され、そのIF文に関連した文についての不必要および/または不適切な処理を回避するために使用されることができる。例として、IF文に対応する条件が「110x」という結果を生じるとすると(ここでxはそのチャネルが有効になっていなかったため評価されなかったものである)、条件マスクレジスタ310には「1100」が保存されうる。次いでそのIF文に関連する他の命令が実行されるとき、エンジン300は2つのMSBに対応するデータについてのみ命令を実行する(2つのLSBに対応するデータについては実行しない)。
エンジン300が、条件命令に関連した命令の終わりに達したとの指示(たとえば「END IF」文)を受け取ると、図5に示したように、条件スタック320の一番上のデータ(たとえば初期化ベクトル)が条件マスクレジスタ310に転送されて戻され、条件ブロックにはいる前にどのチャネルが有効なデータを含んでいたかを示す内容が復元される。次いで有効になっているチャネルに対応するデータについてさらなる命令が実行されうる。結果として、SIMDエンジン300は効率的に条件命令を処理しうる。
いくつかの実施形態によれば、条件命令は、別の条件命令に関連する命令の組の中に「ネスト」されうる。たとえば、次の命令の組を考える。
IF(条件1)
第一の組の命令
IF(条件2)
第二の組の命令
END IF
第三の組の命令
END IF
この場合、第一および第三の組の命令は、「条件1」が真であるときに実行されるべきで、第二の組の命令は「条件1」と「条件2」の両方が真のときにのみ実行されるべきである。
第一の組の命令
IF(条件2)
第二の組の命令
END IF
第三の組の命令
END IF
この場合、第一および第三の組の命令は、「条件1」が真であるときに実行されるべきで、第二の組の命令は「条件1」と「条件2」の両方が真のときにのみ実行されるべきである。
図6〜9は、いくつかの実施形態に基づく、条件マスクレジスタ610(たとえば、初期化ベクトルで初期化されている)および条件スタック620を含むSIMD実行エンジン600を示している。前と同様、条件マスクレジスタ610内の情報はスタック620の一番上にコピーされ、諸チャネルのデータは(i)条件マスクレジスタ610内の情報および(ii)第一の条件命令に対応する条件(たとえば「条件1」)に従って評価される。その評価の結果(たとえばr10ないしr13)は、図7に示すように、第一の条件命令(たとえば第一のIF文)が実行されるときに条件マスクレジスタ610内に保存される。次いでエンジン600は、条件マスクレジスタ610内の情報によって指示される複数オペランドのデータについて第一の条件命令に関連するさらなる命令を実行しうる。
図8は、いくつかの実施形態に基づくもう一つのネストした条件命令(たとえば第二のIF文)の実行を示している。この場合、現在条件マスクレジスタ610内にある情報がスタック620の一番上にコピーされる。結果として、それまでスタック620の一番上にあった情報(たとえば初期化ベクトル)は一項目ぶん押し下げられている。複数チャネルのデータは、(i)現在、条件マスクレジスタ610内にある情報(たとえばr10ないしr13)および第二の条件命令に対応する条件(たとえば「条件2」)に従って同時に評価される。次いでこの評価の結果は条件マスクレジスタ610に保存され(たとえばr20ないしr23)、条件マスクレジスタ610内の情報によって指示される複数オペランドのデータについて第二の条件命令に関連するさらなる命令を実行するためにエンジン600によって使用されうる。
エンジン600が、第二の条件命令に関連した命令の終わりに達したとの指示(たとえば「END IF」文)を受け取ると、図9に示したように、条件スタック620の一番上のデータ(たとえばr10ないしr13)が条件マスクレジスタ610に移し戻されうる。次いで条件マスクレジスタ620に従ってさらなる命令が実行されうる。もう一つのEND IF文に遭遇した場合(図9には示さず)には、初期化ベクトルが条件マスクレジスタ610に転送して戻されることになり、有効になっているチャネルに対応するデータについてさらなる命令が実行されうる。
条件スタック620の深さは、エンジン600によってサポートされる条件命令ネストのレベル数に関連しうることを注意しておく。いくつかの実施形態によれば、条件スタック620は単一項目ぶんの深さしかない(たとえば、スタックは実際にはnオペランド幅のレジスタでありうる)。
図10は、ここに記載された実施形態のいくつかなどとの関連で実行されうる方法のフローチャートである。ここに記載されるフローチャートは必ずしも動作の固定した順序を含意するものではなく、諸実施例は実施可能ないかなる順序でも実行されうる。ここに記載される諸方法のいずれも、ハードウェア、ソフトウェア(マイクロコードを含む)、ファームウェアまたはこれらの手法の任意の組み合わせによって実行されうることを注意しておく。たとえば、記憶媒体は、機械によって実行されたときにここに記載される諸実施形態のいずれかに基づく実行につながる命令をその上に記憶しうる。
1002で、条件マスクレジスタが初期化される。たとえば、現在有効となっているチャネルに基づいて条件マスクレジスタに初期化ベクトルが保存されうる。別の実施形態では、条件マスクレジスタは単にすべて1に初期化される(たとえば、すべてのチャネルが常に有効にされていると想定される)。
1004では、次のSIMD命令が取得される。たとえば、SIMD実行エンジンは記憶ユニットから命令を受け取りうる。1006でSIMD命令が「IF」命令のとき、1008で該命令に対応する条件が条件マスクレジスタに従って評価される。すなわち、条件マスクレジスタ中「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を含む。この場合、エンジン1100はある命令を、16個のオペランドのデータについて同時に実行できることを注意しておく。この実施形態によれば、前記条件命令はまた、第二の組の命令に関連付けられたアドレスを含む。具体的に言うと、前記条件が評価されたどのオペランドのデータについても(たとえば、有効になっていて、かつより高レベルのIF文によりマスクされていない諸チャネルについて)真でないと判定されるときには、エンジン1100はそのアドレスに直接ジャンプすることになる。このようにして、IF‐ELSE対の間の不要な命令が回避されうるので、エンジン1100のパフォーマンスは改善されうる。前記条件命令がELSE命令に対応していない場合、前記アドレスはその代わりにEND IF命令に関連付けられうる。さらに別の実施形態によれば、ELSE命令はEND IF命令のアドレスをも含みうる。この場合、エンジン1100は、前記条件が全チャネルについて真である(したがって、該ELSEに関連付けられた命令のどれも実行される必要がない)ときには、END IF命令に直接ジャンプできる。
図12に示されるように、条件マスクレジスタ1110内の情報は、条件命令に遭遇したときに、条件スタック1120にコピーされる。さらに、その命令に対応する条件が複数チャネルについて、条件マスクレジスタ1110(たとえば、それより上のレベルのIF命令がペンディングになっていないときには、有効になっている全チャネルについてのもの)に従って評価され、その結果(たとえばオペランドr0ないしr15)は条件マスクレジスタ1110内に保存される。次いで条件マスクレジスタ1110に従ってIF文に関連する諸命令が実行されうる。
図13に示すように、ELSE命令に遭遇したときは、エンジン1100は単に条件マスクレジスタ1110内のオペランドすべてを反転させてもよい。このようにして、IF命令との関連で実行されなかったチャネルに対応するデータが、今、実行される。しかし、そのような手法はいくつかのチャネルが不適切に1にセットされ、よってそれらのチャネルに対して実行が起こらないべきときにELSEのもとで実行されてしまう結果になりうる。たとえば、IF‐ELSE‐END IFのコードブロックにはいったときに現在有効となっていなかったチャネルは、IF命令についてもELSE命令についてもどちらでもマスクされる(たとえば、0にセットされる)べきである。同様に、より上のレベルのIF命令のために現在マスクされているチャネルはマスクされたままとなるべきである。そのような問題を避けるため、ELSE命令に遭遇したときに条件マスクレジスタ1110内の全部のオペランドを単に反転させる代わりに、エンジン1100は条件マスクレジスタ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はここに記載されるいずれかの実施形態に基づくnオペランドのSIMD実行エンジン1520を有するグラフィックエンジン1510を含んでいる。たとえば、SIMD実行エンジン1520は(i)第一の「IF」条件文と(ii)複数チャネルに対応するデータとの評価の結果を保存するためのnオペランドの条件マスクベクトルを有しうる。SIMD実行エンジン1520は、第二の「IF」命令に遭遇したときに前記結果を保存するためのnビット幅でm項目の深さの条件スタックをも有しうる。システム1500は、SIMD命令を保存するための命令記憶ユニット1530およびグラフィックデータ(たとえば、三次元画像に対応するベクトル)を保存するためのグラフィック記憶ユニット1540をも含みうる。命令記憶ユニット1530およびグラフィック記憶ユニット1540はたとえばランダムアクセスメモリ(RAM)ユニットを有しうる。
以下、さまざまな追加的実施例を示す。これらは可能なすべての実施形態の定義をなすものではなく、当業者は他の多くの実施形態が可能であることを理解するであろう。さらに、以下の実施形態は明快のため手短に述べるが、当業者は必要とあらば上記の記述をどのように修正してこれらおよびその他の実施例および応用を取り入れるかは理解するであろう。
いくつかの実施形態について別個の条件マスクレジスタおよび条件スタックに関して述べてきたが、どの実施形態も単一の条件スタックのみに関連するものでもよい(たとえば、現在のマスク情報がスタック中の一番上の項目に対応しうる)。
さらに、種々の実施形態について述べてきたが、諸実施形態のいかなる組み合わせも実装されうることを注意しておく(たとえば、IF文とELSE文の両方がアドレスを含んでいてもよい)。さらに、例では「0」を有効になっていないチャネルを指示するために用いたが、他の実施形態によればチャネルが現在有効になっていないことを指示するために代わりに「1」を用いてもよい。
ここに記載された各実施形態は単に例示の目的のためである。当業者はこの記載から、請求項によってのみ限定される修正および変更を加えた他の実施形態が実施しうることを認識するであろう。
Claims (20)
- nオペランドの単一命令多重データ実行エンジンにおいて第一の条件命令を受け取り、
複数オペランドの対応するデータに基づいて第一の条件命令を評価し、
評価の結果をnビットの条件マスクレジスタに保存し、
前記実行エンジンにおいて第二の条件命令を受け取り、
前記結果を条件マスクレジスタからnビット幅でm項目の深さの条件スタックにコピーする、
ことを含むことを特徴とする方法。 - 第二の条件命令を条件マスクレジスタ内のデータおよび複数オペランドの対応するデータに基づいて評価し、
第二の条件命令の評価の結果を条件マスクレジスタに保存し、
第二の条件命令に関連する命令を条件マスクレジスタ内のデータに従って実行し、
条件スタックの一番上を条件マスクレジスタに移し、
第一の条件命令に関連する命令を条件マスクレジスタ内のデータに従って実行する、
ことをさらに含むことを特徴とする方法。 - 前記第一の条件命令が(i)ある条件が真であるときに実行されるべき第一の組の命令と、(ii)前記条件が偽のときに実行されるべき第二の組の命令とに関連していることを特徴とする、請求項1記載の方法。
- 前記第一の条件命令が前記第二の組の命令に関連するアドレスを含んでおり:
前記評価が、前記第一の条件命令が対応するデータのうち評価されたどのビットについても満たされないことを示している場合には、前記アドレスにジャンプすることをさらに含むことを特徴とする、請求項3記載の方法。 - 前記第一の組の命令を実行し、
条件マスクレジスタ内のデータを条件スタックの一番上のデータとブール演算を介して組み合わせ、
該組み合わせの結果を条件マスクレジスタ内に保存し、
前記第二の組の命令を条件マスクレジスタ内のデータに従って実行する、
ことをさらに含むことを特徴とする、請求項3記載の方法。 - 対応するデータのn個のオペランドのそれぞれがチャネルに対応しており、第一の条件命令を受け取るのに先立って:
実行のために有効にされるべきチャネルに基づいて条件マスクレジスタを初期化することをさらに含むことを特徴とする、請求項1記載の方法。 - 条件スタックが二項目以上の深さであることを特徴とする、請求項1記載の方法。
- (i)「if」命令の条件と(ii)複数チャネルに対応するデータとの評価の結果を保存するnビットの条件マスクベクトルと、
前記評価の結果に先立って条件マスクベクトル内に存在していた情報を保存する、nビット幅でm項目の深さの条件スタック、
とを有することを特徴とする装置。 - 対応する「end if」命令が実行されたときに前記情報が条件スタックから条件マスクベクトルに転送されることを特徴とする、請求項8記載の装置。
- 前記「if」命令が(i)真の条件に対応するオペランドに対して実行されるべき第一の組の命令と、(ii)偽の条件に対応するオペランドに対して実行されるべき第二の組の命令とに関連していることを特徴とする、請求項8記載の装置。
- 前記「if」命令が前記第二の組の命令に関連するアドレスを含んでおり、どのチャネルについても結果が偽のときに前記アドレスがプログラムカウンタに入れられることを特徴とする、請求項10記載の装置。
- (i)前記第一の組の命令を実行し、(ii)条件マスクベクトル内の情報を条件スタックの一番上の情報と組み合わせ、(iii)該組み合わせの結果を条件マスクベクトル内に保存し、(iv)前記第二の組の命令を実行するエンジンをさらに有することを特徴とする、請求項10記載の装置。
- 前記条件マスクベクトルが有効になっているチャネルに従って初期化されることを特徴とする、請求項8記載の装置。
- 前記条件スタックが1項目の深さであることを特徴とする、請求項8記載の装置。
- 機械によって実行されたときに下記、すなわち:
nチャネルの単一命令多重データ実行エンジンにおいて第一の条件文を受け取り、
複数チャネルの対応するデータについて第一の条件文を同時に評価し、
評価の結果をnビットの条件マスクレジスタに保存し、
前記実行エンジンにおいて第二の条件文を受け取り、
前記結果を条件マスクレジスタからnビット幅でm項目の深さの条件スタックにコピーする、
結果を生じる命令が保存されている記憶媒体
を有する物品。 - 前記第一の条件文が(i)ある条件が真であるときに実行されるべき第一の組の文と関連しており、(ii)前記条件が偽のときに実行されるべき第二の組の文に関連しており、(iii)前記第二の組の文に関連するアドレスを含んでおり、前記方法が:
前記評価が、前記第一の条件文がnチャネルの対応するデータのどれについても真でないことを示している場合には、前記アドレスにジャンプすることをさらに含むことを特徴とする、請求項15記載の物品。 - 前記方法が:
第二の条件文を条件マスクレジスタ内のデータおよびnチャネルの対応するデータに基づいて評価し、
第二の条件文の評価の結果を条件マスクレジスタに保存し、
第二の条件文に関連する文を条件マスクレジスタ内のデータに従って実行し、
条件スタックの一番上を条件マスクレジスタに転送し、
第一の条件文に関連する文を条件マスクレジスタ内のデータに従って実行する、
ことをさらに含むことを特徴とする、請求項16記載の物品。 - (i)第一の「if」の条件と(ii)複数チャネルに対応するデータとの評価の結果を保存するnビットの条件マスクベクトルと、
第二の「if」命令に遭遇したときに前記結果を保存する、nビット幅でm項目の深さの条件スタック、
とを含むプロセッサと、
グラフィック記憶ユニット、
とを有することを特徴とするシステム。 - 前記第二の「if」命令に対応する「end if」命令が実行されるときに前記結果が条件スタックから条件マスクベクトルに転送されることを特徴とする、請求項18記載のシステム。
- 命令記憶ユニットをさらに有することを特徴とする、請求項18記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/879,460 US20050289329A1 (en) | 2004-06-29 | 2004-06-29 | Conditional instruction for a single instruction, multiple data execution engine |
PCT/US2005/021604 WO2006012070A2 (en) | 2004-06-29 | 2005-06-17 | Conditional instruction for a single instruction, multiple data execution engine |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008503838A true JP2008503838A (ja) | 2008-02-07 |
Family
ID=35159732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007518145A Pending JP2008503838A (ja) | 2004-06-29 | 2005-06-17 | 単一命令多重データ実行エンジンのための条件命令 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20050289329A1 (ja) |
EP (1) | EP1761846A2 (ja) |
JP (1) | JP2008503838A (ja) |
KR (1) | KR100904318B1 (ja) |
CN (1) | CN100470465C (ja) |
TW (1) | TWI287747B (ja) |
WO (1) | WO2006012070A2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010257200A (ja) * | 2009-04-24 | 2010-11-11 | Honda Motor Co Ltd | 並列計算装置 |
JP2010271799A (ja) * | 2009-05-19 | 2010-12-02 | Honda Motor Co Ltd | 並列計算装置 |
KR20140023561A (ko) * | 2012-08-16 | 2014-02-27 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
JP2018124877A (ja) * | 2017-02-02 | 2018-08-09 | 富士通株式会社 | コード生成装置、コード生成方法、およびコード生成プログラム |
Families Citing this family (18)
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 |
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 | 英特尔公司 | 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑 |
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 |
US9606961B2 (en) * | 2012-10-30 | 2017-03-28 | Intel Corporation | Instruction and logic to provide vector compress and rotate functionality |
KR101603752B1 (ko) * | 2013-01-28 | 2016-03-28 | 삼성전자주식회사 | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 |
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 | 合肥君正科技有限公司 | 一种基于单指令多数据流结构的数据处理方法及装置 |
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 EP EP05761782A patent/EP1761846A2/en not_active Withdrawn
- 2005-06-17 WO PCT/US2005/021604 patent/WO2006012070A2/en not_active Application Discontinuation
- 2005-06-17 JP JP2007518145A patent/JP2008503838A/ja active Pending
- 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 (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010257200A (ja) * | 2009-04-24 | 2010-11-11 | Honda Motor Co Ltd | 並列計算装置 |
JP2010271799A (ja) * | 2009-05-19 | 2010-12-02 | Honda Motor Co Ltd | 並列計算装置 |
KR20140023561A (ko) * | 2012-08-16 | 2014-02-27 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
JP2014038624A (ja) * | 2012-08-16 | 2014-02-27 | Samsung Electronics Co Ltd | 動的データ構成のための方法及び装置 |
KR101893796B1 (ko) * | 2012-08-16 | 2018-10-04 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
JP2018124877A (ja) * | 2017-02-02 | 2018-08-09 | 富士通株式会社 | コード生成装置、コード生成方法、およびコード生成プログラム |
Also Published As
Publication number | Publication date |
---|---|
TW200606717A (en) | 2006-02-16 |
CN1716185A (zh) | 2006-01-04 |
TWI287747B (en) | 2007-10-01 |
KR20070032723A (ko) | 2007-03-22 |
CN100470465C (zh) | 2009-03-18 |
US20050289329A1 (en) | 2005-12-29 |
WO2006012070A2 (en) | 2006-02-02 |
EP1761846A2 (en) | 2007-03-14 |
WO2006012070A3 (en) | 2006-05-26 |
KR100904318B1 (ko) | 2009-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100904318B1 (ko) | 단일 명령, 다중 데이터 실행 엔진에 대한 조건형 명령 | |
WO2006044978A2 (en) | Looping instructions for a single instruction, multiple data execution engine | |
US10534841B2 (en) | Appartus and methods for submatrix operations | |
US7257695B2 (en) | Register file regions for a processing system | |
CA2626184A1 (en) | Integrated processor array, instruction sequencer and i/o controller | |
JP2011118743A (ja) | ベクトル型計算機及びベクトル型計算機の命令制御方法 | |
EP3326060B1 (en) | Mixed-width simd operations having even-element and odd-element operations using register pair for wide data elements | |
JP4901754B2 (ja) | 単一命令複数データ実行エンジンのフラグレジスタのための評価ユニット | |
US20060149938A1 (en) | Determining a register file region based at least in part on a value in an index register | |
WO2019141160A1 (zh) | 一种数据处理的方法及装置 | |
US7003651B2 (en) | Program counter (PC) relative addressing mode with fast displacement | |
EP1839126B1 (en) | Hardware stack having entries with a data portion and associated counter | |
CN111656319B (zh) | 利用特定数检测的多流水线架构 | |
JP7136343B2 (ja) | データ処理システム、方法、およびプログラム | |
US8001358B2 (en) | Microprocessor and method of processing data including peak value candidate selecting part and peak value calculating part | |
KR960015231A (ko) | 향상된 어드레스 지정 방법 및 시스템 | |
JP2007200090A (ja) | 半導体演算処理装置 | |
KR20230095775A (ko) | Ndp 기능을 포함하는 메모리 확장 장치 및 이를 포함하는 가속기 시스템 | |
WO2023199014A1 (en) | Technique for handling data elements stored in an array storage | |
WO2023199015A1 (en) | Technique for handling data elements stored in an array storage | |
CN115861026A (zh) | 数据处理方法、装置、计算机设备、存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080507 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080805 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20081202 |