(57)【要約】  単一命令複数データ処理デバイス（ＳＩＭＤ）は複数のプロセッシングエレメント（ＰＥ）を含む。各ＰＥは、複数のビットを格納するための実行マスクカウンタ（ＥＭＣ）レジスタを含む。ＥＭＣレジスタ内に格納されたマルチビットデータに応じてＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段が存在する。【選択図】図２
2007526571.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッシングエレメント（ＰＥ）を含む単一命令複数データ処理デバイス（ＳＩＭＤ）であって、
前記各ＰＥが、複数のビットを格納するための実行マスクカウント（ＥＭＣ）レジスタと、該ＥＭＣレジスタ内に格納されたマルチビットデータに応じて前記ＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段とを含む単一命令複数データ処理デバイス（ＳＩＭＤ）。
【請求項２】
前記ＰＥは、前記ＥＭＣレジスタ内に格納された前記データの事前決定値との比較に応じてディスエーブル及びイネーブルにされることを特徴とする請求項１に記載のＳＩＭＤ。
【請求項３】
イネーブル及びディスエーブルにするための前記手段は、条件又はループ命令の実行中に動作することを特徴とする請求項１又は請求項２に記載のＳＩＭＤ。
【請求項４】
ＰＥの前記ＥＭＣレジスタ内に格納された前記データを修正する手段を含む請求項１、請求項２、又は請求項３に記載のＳＩＭＤ。
【請求項５】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データへの複数の修正のうちの選択されたものを行う手段を含むことを特徴とする請求項４に記載のＳＩＭＤ。
【請求項６】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量だけインクリメントする手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項７】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量だけデクリメントする手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項８】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値に事前決定量を乗算する手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項９】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量で除算する手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項１０】
前記ＥＭＣレジスタ内の前記データ値は、プリミティブ多項式に基づくフィールドを用いることを特徴とする前記請求項のいずれかに記載のＳＩＭＤ。
【請求項１１】
同一の命令を実行するように構成された複数のプロセッサ要素ＰＥを含み、該ＰＥの各々がマルチビットＥＭＣレジスタを含むＳＩＭＤデバイス上でプログラムフローを制御する方法であって、
前記ＰＥによって実行されるべき条件命令を含む実行命令を前記各ＰＥに供給する段階と、
格納された前記ＥＭＣ値と実行中の条件命令で行われる条件判定とに応じて前記ＰＥ内のレジスタへのデータの書き込みをイネーブル／ディスエーブルにする段階と、
を含む方法。
【請求項１２】
前記各ＰＥの前記ＥＭＣレジスタ内に格納された前記データを修正する段階を含む請求項１１に記載の方法。
【請求項１３】
前記ＥＭＣレジスタ内に格納された前記データへの複数の可能な修正の中から選択する段階を含む請求項１２に記載の方法。
【請求項１４】
複数のＰＥ内のレジスタへのデータの書き込みがイネーブル又はディスエーブルのいずれであるかを判断し、該判断結果に応じて新しい命令に分岐する段階を含む請求項４から請求項１２のいずれかに記載の方法。
【請求項１５】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量だけインクリメントする段階を含む請求項１２に記載の方法。
【請求項１６】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量だけデクリメントする段階を含む請求項１２に記載の方法。
【請求項１７】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データに事前決定量を乗算する段階を含む請求項１２に記載の方法。
【請求項１８】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量で除算する段階を含む請求項１２に記載の方法。
【請求項１９】
前記ＥＭＣレジスタ内の前記データ値が、プリミティブ多項式に基づくフィールドを用いることを特徴とする請求項１２に記載の方法。
【請求項２０】
複数のＰＥを含むＳＩＭＤ上でプログラムフローを制御するための方法であって、
前記ＰＥに命令及びデータのシーケンスを供給する段階と、
前記ＰＥ上で前記命令を実行する段階と、
各ＰＥ上のＥＭＣレジスタ内に格納されたマルチビットデータ値に応じて各ＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする段階と、
あるＰＥのレジスタへのデータの書き込みがディスエーブルにされ、他のＰＥのレジスタへのデータの書き込みがイネーブルにされているときに、当該ＰＥのＥＭＣレジスタ内のマルチビット値を修正する段階と、
を含む方法。
【請求項２１】
全てのＰＥにおけるレジスタへのデータの書き込みがディスエーブルであるか否かを判定し、該判定の結果に応じて別の命令に分岐する段階を含む請求項１２に記載の方法。
【請求項２２】
複数のＰＥから構成され、各ＰＥが、ＥＭＣレジスタと、実行のために前記ＰＥに命令及びデータのシーケンスを供給する手段と、前記各ＰＥのＥＭＣレジスタ内に格納されたマルチビットデータ値に応じて前記各ＰＥ上のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段と、あるＰＥ内のレジスタへのデータの書き込みがディスエーブルにされ、他のＰＥ内のレジスタへのデータの書き込みがイネーブルにされているときに前記あるＰＥのＥＭＣレジスタ内のマルチビット値を修正する手段とを含むＳＩＭＤ。
【請求項２３】
全ての前記ＰＥ内のレジスタへのデータの書き込みがディスエーブルであるか否かを判定する手段と、前記判定の結果に応じて別の命令に分岐する手段とを含む請求項２２に記載のＳＩＭＤ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単一命令複数データ（ＳＩＭＤ）デバイスにおけるメソッドフロー管理の方法及び装置に関する。
【背景技術】
【０００２】
コンピューティングデバイスは、一般に４つの大きなカテゴリーに分類される。
１．単一命令／単一データ（ＳＩＳＤ）
２．複数命令／単一データ（ＭＩＳＤ）（稀なカテゴリー）
３．単一命令／複数データ（ＳＩＭＤ）
４．複数命令／複数データ（ＭＩＭＤ）
【０００３】
一番目のカテゴリーであるＳＩＳＤは、単一命令ストリームがデータの単一のセットに作用する、大半の既存のコンピュータデバイスを表す。四番目のＭＩＭＤは、Ｎ個のプロセッサ（すなわち命令）がデータのＮ個のセットに対して独立して実行することができる、プロセッサファーム及びあるスーパーコンピュータのようなシステムを表す。
【０００４】
三番目のカテゴリーであるＳＩＭＤは、これら２つの両極端の組み合わせである。図１を参照すると、一般的にＳＩＭＤデバイスは、命令ストリーム「１１」を解釈する単一の制御ユニット（ＣＵ）「１０」と、ＣＵの誘導により同期進行で動作する複数の一様で並列のプロセッシングエレメント（ＰＥ）「１２」のアレイを有する。通常、各ＰＥは、演算／論理ユニット（ＡＬＵ）、レジスタ、及び／又はメモリ及び／又は隣接するＰＥへのインターフェースを含む。
【０００５】
ｘ８６及びパワーＰＣなどの最新のＣＰＵの多くは、ＳＩＭＤサブユニットを制御する命令を含む。ＳＩＭＤシステムは、コンピュータグラフィックスを含む数多くのアプリケーションで用いられており、マルチメディアはより一般的になりつつある。
【０００６】
各サイクルにおいて、ＣＵは、同一のオペレーションを行うように全てのＰＥに命令する。実際には各ＰＥは、同一のプログラム、更にデータが異なることを除いては他のＰＥと同じコードラインを実行している。このことは、幾つかの興味深い制御フロー問題につながる。例えば、単純なＩＦ−ＴＨＥＮ−ＥＬＳＥ構成を有する以下の擬似コードを考える。
【０００７】
2007526571.tif 000003
【０００８】
各ＰＥは同一の命令を実行しているので、「ＩＦ」命令文に到達した時にジレンマに陥る。例えば「条件＿１」は、ローカルなＰＥのデータレジスタ値の判定値であると仮定する。ＰＥｊにおいて、「条件＿１」は「真」と評価し、「コードブロック＿３」ではなく「コードブロック＿２」の実行を要求し、ＰＥｋにはその逆を適用することができる。
【０００９】
従来技術の解決策は「マスキング」として知られる機能を含むことである。各ＰＥはブール型の「イネーブルレジスタ」ＥＲ「１３」を含み、イネーブルレジスタが「偽」の場合には、ＰＥ内のデータレジスタへの書き込みがディスエーブルになるようにする。従って、上記で与えられた単純な例は以下のようにリエンコードされる。
【００１０】
2007526571.tif 000004
【００１１】
ＰＥｊの場合には、「コードブロック＿３」が処理されるが、関連のＥＲがコードのその部分において「偽」に設定されているときには、あらゆる記憶レジスタを更新することは許されないので、完全に問題ではない。しかしながらこれは、特に単純な実施例であった点に留意すべきであり、より複雑な及び／又はネストされた制御フローコードではより綿密なコーディングが必要であることは明らかであろう。
【００１２】
「Ｃ」等の最新のプログラミング言語で一般に見られる他の構造化制御フロー構成が存在する。以下にこれらの構成の幾つかの極めて簡潔な要約を示す。
【００１３】
ネスティング：
制御フロー構成はネストすることができ、すなわち１つのものを別のものの中に埋め込むことができる。以下はネストした「ＩＦ」構成を用いた簡単な実施例である。
【００１４】
2007526571.tif 000005
【００１５】
「コードブロック＿２」は、「条件＿１」、次いで「条件＿２」の両方が通った場合にのみ実行されることになる。「コードブロック＿３」は、「コードブロック＿１」又は「コードブロック＿２」に到達した場合には「実行」されない。
【００１６】
複数方式ＩＦ−ＴＨＥＮ−ＥＬＳＩＦ−ＥＬＳＥ：
複雑な判断を生成するためにＩＦ−ＴＨＥＮ−ＥＬＳＥはネストすることができるが、以下の形態のチェーンとして表す方が好ましい場合がある。
【００１７】
2007526571.tif 000006
【００１８】
これは機能的に等価な以下のものよりも表現がより簡便である点に留意されたい。
【００１９】
2007526571.tif 000007
【００２０】
ループ：
例えばｗｈｉｌｅループである前置判定ループは、以下の形態をとる。
【００２１】
2007526571.tif 000008
【００２２】
この実施例では、「コードブロック＿１」を実行後に「条件＿１」が「真」の場合には、「コードブロック＿２」が実行されることになる。次いで、この条件が再判定され、「真」である場合には「コードブロック＿２」が再実行されることになる。このプロセスは、条件が成立しなくなるまで繰返し、その後「コードブロック＿３」が処理される。単純な変形形態である、後置判定ループは、「コードブロック＿２」が常に少なくとも一度は実行されるように最初の条件判定を行わない。
【００２３】
「ｂｒｅａｋｌｏｏｐ」及び「ｃｏｎｔｉｎｕｅｌｏｏｐ」：
ループは、「ｂｒｅａｋｌｏｏｐ」及び／又は「ｃｏｎｔｉｎｕｅｌｏｏｐ」命令文を使用することによって拡張することができる。ループ内で「ｂｒｅａｋｌｏｏｐ」に遭遇した場合には、その時点でループが直ちに終了したかのように、ループの内側（最も内側）の全ての後続の命令はスキップされ、制御はループの後に続く命令に進む。以下にコーディングの実施例を示す。
【００２４】
2007526571.tif 000009
【００２５】
「コードブロック＿１」を実行後に「条件＿２」が「偽」である場合には、「コードブロック＿３」が実行され、ループ条件は再判定されることになる。他方、「条件＿２」が「真」である場合には、「コードブロック＿２」が実行され、「ｂｒｅａｋｌｏｏｐ」コマンドに遭遇し、次いで、制御は直ちに「コードブロック＿４」に渡される。
【００２６】
「ｃｏｎｔｉｎｕｅｌｏｏｐ」命令文は、ループ本体内部の残りの命令をスキップするが、ループを終了しない。代わりに制御は次の反復に続く。上述の実施例において「ｂｒｅａｋｌｏｏｐ」を「ｃｏｎｔｉｎｕｅｌｏｏｐ」に置き換えると、「ｃｏｎｔｉｎｕｅｌｏｏｐ」に遭遇した後で制御は、ループの開始点に進み、「条件＿１」等を再判定することになる。
【００２７】
ｂｒｅａｋｌｏｏｐ及びｃｏｎｔｉｎｕｅｌｏｏｐ命令文は、これらが最も深くネストされたループではなく、外側のいずれかの親ループを参照するように拡張することができる点を留意されたい。
【００２８】
Ｒｅｔｕｒｎ及びＥｘｉｔコマンド：
「ｂｒｅａｋｌｏｏｐ」構成に関連して、幾つかの言語では、プロシージャが早期に終了し親関数に戻るべきことを示すために「Ｒｅｔｕｒｎ」命令文を採用している。「Ｅｘｉｔ」コマンドは、現時点でのプロセスを終了させる点で更に強いものであり、これはエラー処理において用いられる場合がある。
【００２９】
Ｃａｓｅ構成：
ｃａｓｅ命令文は、ＩＦ−ＴＨＥＮ−ＥＬＳＥの変形であり、単一の式の値に応じて異なるコードセクションを実行するために用いられる。典型的な実施例は以下の通りである。
【００３０】
2007526571.tif 000010
【００３１】
上述の実施例では、「式＿１」が「定数＿Ａ」又は「定数＿Ｂ」のいずれかであると評価された場合、「コードブロック＿１」が実行されることになる。「コードブロック＿１」の後の後続の「ＤＯＮＥ」は、ｃａｓｅ命令文がここで終了しなければならないことを示している。他方、式が「定数＿Ｃ」であると評価された場合、「コードブロック＿２」が実行される。このセクションの終了点には「ＤＯＮＥ」がないので、実行は「コードブロック＿３」に続く。「ＤＥＦＡＵＬＴ」のｃａｓｅは、式が列挙された値のいずれにも一致しない場合に選ばれる。
【００３２】
再帰：
この最後の構成は、コードセクションが自己を参照する場合を表す。これは最新のコンピュータ言語の一般的な機能であり、ほとんどの教科書で記載を見ることができる。一般に、かかる機能のサポートは、プログラムカウンタ及び他の関連する状態を保存するためのプログラムスタックを必要とする。
【００３３】
従来技術において複雑な条件コードを処理する１つの手法は、各ＰＥに適正なＥＲ値を計算させるようにＣＵが指示する命令を明示的に記述することである。次いで、各ＰＥ内の例えばローカルなプログラムレジスタ内に中間値が格納される。これは確かに極めて融通性を有するが、パフォーマンスを低下させる可能性の高い多くの追加命令を必要とする。
【００３４】
「ＳＩＭＤグラフィックスプロセッサ」（Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ（ＳＩＧＧＲＡＰＨ８４会報）、１８、（３）７７〜８２ページ、１９８４年７月）においてＬｅｖｉｎｔｈａｌ及びＰｏｒｔｅｒは、ビットレジスタの「スタック」からなる「フラグ実行スタック」を追加することによりＥＲ制御フラグを強化している。スタックとＥＲとの間で値をプッシュ及びポップするための命令を追加することで、ネストされた条件コードの幾つかの形態の極めて容易な実装を可能にしている。ＣＨＡＰ制御ユニットもまた、全てのＥＲ値が「偽」であるかどうかを判定する手段を含むように強化される。これにより、例えば、全てのＰＥにわたる「ｗｈｉｌｅ」ループの効率的な実装が可能になる。特に、個々のＰＥが「ループ判定ができない」場合は常に、他のＰＥがディスエーブルでなければループ反復を続けねばならないので、そのＰＥは、ＥＲを「偽」に設定するのみである。ＥＲがいつ「偽」であるかについての判定を用いる特殊な条件分岐命令は、全てのＰＥがループを完了したときに、ループ終了後の命令にＣＵがジャンプすることを可能にする。
【００３５】
「フラグ実行スタック」強化は、他のシステムが後に用いている強力な構成であるが、幾つかの欠点が無い訳ではない。第１に、ＥＲビットのみが直接アクセス可能であるので、「ｃｏｎｔｉｎｕｅｌｏｏｐ」等の上述の制御形態の幾つかは容易にはサポートされない。第２に、スタックの深さがＮ（すなわちＰＥ毎にＮビットの記憶領域）である場合に、制御の最大ネスティングの深さは〜Ｎレベルのみに制限される。
【００３６】
Ｌｅｖｉｎｔｈａｌ及びＰｏｒｔｅｒの方法の変形形態が、ＷＯ０２４６８８５（Ｒｅｄｆｏｒｄ）で提示されている。このシステムでは、スタックはカウンタ値によって置き換えられている。ＥＲ値が「保存される」ときに、ＥＲが「偽」である時は常に格納されているカウンタ値がインクリメントされ、そうでない場合は格納されたカウンタは修正されない。「リストア」時では、カウンタ値が（議論を進めるために）非ゼロである場合にはカウンタはデクリメントされてＥＲが「偽」に設定され、そうでない場合には、カウンタは修正されないままで、ＥＲが「真」に設定される。これは、インクリメント及びデクリメントユニットの追加によるコストがあるが、Ｎビットのカウンタに対して条件ネスティングの保証される安全最大レベルが最大２Ｎであるという点で、Ｌｅｖｉｎｔｈａｌ他の方法を改善している。実際にはこれは単にスタックのデータ圧縮の一形態であるので、幾つかの一般的な制御演算と全く同じ問題を依然として有している。
【００３７】
ＥＰＯ０３５６４７では、根本的に異なる手法がとられている。このシステムでは、各ＰＥは「プログラムカウンタ格納」及び「優先レジスタ」を含む幾つかの追加のマルチビットレジスタを有する。プログラムソースコードは、ラベルによって開始するか又は分岐後に生じ、更に分岐（条件及び非条件の）又は別のラベルによって終了するブロックに分割される興味深い方法で事前処理される。次いで、これらのブロックは解析され、一意の整数優先コードが割当てられる。優先値を用いる特殊な命令は、ブロックの開始点及び／又は終了点に追加される。
【００３８】
実行プロセスは複雑であり、最も低い優先度のものを見つけ出すために、全てのイナクティブＰＥの優先コード全体を検索することができる特定のハードウェアを必要とする。システムがブロック終了点に到達した時には、このシステムは上述のハードウェアを用いて最低優先度値を有するコードブロックを識別し処理する（プロセス内の全ての他のＰＥをディスエーブルにする）。
【００３９】
このシステムは、「スパゲティコード」と呼ばれる場合がある構成を含む任意の条件コードをある程度処理することができるが、ソースコードの静的な事前解析に起因して、この方法は再帰を取り扱うことができない。更に、最低優先度値を特定するための検索ハードウェアは極めて少数のＰＥにも許容できるが、極めて高価で、及び／又は中程度の数のＰＥでも大きなタイミング遅延を生じる可能性が高い。
【００４０】
【特許文献１】ＷＯ０２４６８８５（Ｒｅｄｆｏｒｄ）公報
【特許文献２】ＥＰＯ０３５６４７公報
【非特許文献１】「ＳＩＭＤグラフィックスプロセッサ」（Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ（ＳＩＧＧＲＡＰＨ８４会報）、１８、（３）７７〜８２ページ、１９８４年７月）
【発明の開示】
【課題を解決するための手段】
【００４１】
本発明の好ましい実施形態は、多数のＰＥを備えながら実装が比較的安価であり、「構造化プログラミング」において用いられる制御フロー構成の事実上全ての一般的な形態を容易にサポートすることを可能にする。これは、上述のような従来技術に伴う制御の制限及び／又はコストを回避し、更にソースコードの大きな事前処理を必要としないので、従ってコンパイルプロセスが簡素になる。
【００４２】
本出願人は、単一ビットのＥＲフラグをマルチビットに拡張することにより、これらのビットの少数の事前決定値について判定することができ、更に、小さな制御フロー命令セットを含めることで、ＳＩＭＤプロセッサ上での制御フローの管理を効率的にする手段を得ることができることを確認した。これは、命令実行の制御に単一ビットのＥＲフラグを用い、このフラグの管理が明示的なローカルレジスタ、スタック、カウンタ、又は優先値などの補助構造を用いて行われる従来技術とは異なる点に留意されたい。
【００４３】
本発明の実施形態によれば、複数のプロセッシングエレメント（ＰＥ）を含み単一命令複数データ処理デバイス（ＳＩＭＤ）であって、各ＰＥが、複数のビットを格納するための実行マスクカウント（ＥＭＣ）レジスタと、このＥＭＣレジスタ内に格納されたマルチビットデータに応じてそのＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段とを含むＳＩＭＤが提供される。
【００４４】
本発明の実施形態によれば、複数のＰＥを含むＳＩＭＤ上でプログラムフローを制御するための方法であって、該ＰＥに命令及びデータのシーケンスを供給する段階と、該ＰＥ上でこれらの命令を実行する段階と、各ＰＥ上のＥＭＣレジスタ内に格納されたマルチビットデータ値に応じて各ＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする段階と、あるＰＥのＥＭＣレジスタ内のマルチビット値をそのＰＥ上のレジスタへのデータの書き込みがディスエーブルにされ、他のＰＥ内のレジスタへのデータの書き込みがイネーブルにされているときに修正する段階を含む。
【発明を実施するための最良の形態】
【００４５】
ここで本発明の好ましい実施形態を、添付図面を参照しながら例証として詳詳細に説明する。本明細書では本発明の２つの特定の実施形態を説明する。第１のものは説明がより簡単であるので、本発明の作用をより良好に例示している。第２の実施形態は、利用される値の幾つかをコード化する方法の改善を詳述しており、この結果ハードウェア実装のコストが低減される。
【００４６】
図２を参照すると、第１の実施形態において各ＰＥの従来技術のＥＲフラグがマルチビットの「実行マスクカウント」レジスタ又はＥＭＣ「２０」と置き換えられている。各ＥＭＣは、関連する判定論理ユニット「２１」を有し、これはＥＭＣが幾つかの事前定義値の１つであるときに報告することができ、例えば、これらの事前定義判定は、「ＥＭＣがゼロ」、「ＥＭＣ＝１」、及び「ＥＭＣ＝２」である。他の値も利用可能である。関連の事前定義ＥＭＣ判定の結果を含むＰＥ毎の信号のセット「２２」がＣＵに供給される。これらの信号の目的は、以下で詳述されることになる。
【００４７】
ＥＭＣは、内部ＰＥレジスタに対する命令結果の書き戻しをディスエーブル／イネーブルにするのに用いられ、値が「ゼロ」のときには、書き戻しはイネーブルにされ、全ての非ゼロ値に対してはディスエーブルにされる。従来技術とは異なり、これはＥＭＣレジスタ内の全てのビットの判定である点に留意されたい。
【００４８】
プログラム又はプロセスの開始点において、全てのＥＭＣは事前決定値に初期化される。通常これらの値にはゼロが選ばれ、従って最初は全てのＰＥはイネーブルにされる。
【００４９】
（命令）
好ましい実施形態では、構造化制御フローをサポートするために５つの追加の制御命令が定義される。これらの命令は以下の通りである。
ＣｏｎｄＳｔａｒｔ        −  条件開始
ＣｏｎｄＥｌｓｅＩｆ      −  条件ＥＬＳＥ  ＩＦ
ＣｏｎｄＳｅｔＭａｓｋ    −  条件マスク設定
ＣｏｎｄＬｏｏｐＴｅｓｔ  −  条件ループ判定
ＣｏｎｄＥｎｄ            −  条件終了
しかしながら、これらの命令の変形形態（例えば追加又は修正）は当業者には明らかである点に留意されたい。
【００５０】
各制御命令は、当該命令の動作をパラメータ化するのに用いられる２つ又は３つの「即値データ」フィールドを有し、これらは擬似コードフォーマットを用いて簡潔に記述されることになる。これは明瞭化のために行われ、直接ハードウェア実装に対して最も効率的なものとはならない可能性がある点に留意されたい。よりハードウェア向きの実装は、後で説明されることになるが、他の代替形態は当業者には明らかになるであろう。次に上述の説明に続き、制御フローを実装するためにこれらを如何にして利用するのかに関する実施例を挙げる。
【００５１】
１）ＣｏｎｄＳｔａｒｔ（条件、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、ＪｕｍｐＴａｒｇｅｔ）
ＣｏｎｄＳｔａｒｔ命令は、ほとんどの制御フローブロックを開始するのに用いられ、３つのフィールドをとる。最初の「条件」は、ＰＥのＡＬＵによって行うことができるなんらかのブール判定を意味している。実施形態における説明を簡単にするために、これは、ＣＰＵ命令セットにおいて一般に見られる「条件コード」の判定（例えば、「負である」、「ゼロではない」、又は「真」）であるが、当業者であれば他の可能性も想定できるであろう。
【００５２】
２番目のフィールドであるＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔは、ローカルのＥＭＣ値を如何に調節するかを記述する。好ましい実施形態においては、これは２つの可能な値「１」又は「２」の選択だけを必要とする。最後のフィールドであるＪｕｍｐＴａｒｇｅｔは、特定の条件が適合するときにＣＵのプログラムカウンタを変更するのに用いられる。
【００５３】
要約すると、各ＰＥに対して、条件判定が成立しない、又はＥＭＣが非ゼロである場合には、ＥＭＣはＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔによって調節／インクリメントされる。全てのＥＭＣが非ゼロである場合には、ＣＵはＪｕｍｐＴａｒｇｅｔによって指示された命令にジャンプする。
【００５４】
命令の動作は次の擬似コードによって簡潔に要約される。
【００５５】
2007526571.tif 000011
【００５６】
動作はまた、図３に概略図で示されている。命令は、段階「１００」において「最初の」ＰＥを調べることから始まる。段階「１０１」で、全てのＰＥが調べられたかをチェックし、段階「１０２」に進む。ここでＰＥの状態に対する命令で要求されている条件を判定し、更にＥＭＣ値を調べる。条件が「偽」と評価され、或いはＥＭＣ値が非ゼロである場合には、処理は段階「１０３」に進み、そこでＥＭＣは、命令で指定される「ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ」だけインクリメントされる。次いで処理は段階「１０４」に進む。段階「１０２」において判定が「いいえ」の経路をとった場合、処理は段階「１０４」に進む。
【００５７】
段階「１０４」では、命令は次のＰＥ（存在する場合）に進み、段階「１０１」に戻る。全てのＰＥが１０２及び１０３によって処理されると、命令は段階「１１０」に進む。尚もゼロＥＭＣ値を有する幾つかのＰＥが存在する場合、標準的な方法でプログラムカウンタは次の命令「１１１」に進む。或いは、全てのＰＥがこの時点でディスエーブルであり、すなわち全てのＥＭＣ≠０である場合には、命令は段階「１１２」において「ＪｕｍｐＴａｒｇｅｔ」に分岐する。
【００５８】
２）ＣｏｎｄＥｌｓｅＩｆ（条件、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、ＪｕｍｐＴａｒｇｅｔ）
ＣｏｎｄＥｌｓｅＩｆ命令は主に、ｅｌｓｅ／ｅｌｓｅｉｆ文節に対して用いられ、並びにｃｏｎｔｉｎｕｅｌｏｏｐ及びｂｒｅａｋｌｏｏｐ命令文を実装するためにも用いられる。これは、ＣｏｎｄＳｔａｒｔと同じ３つのパラメータをとる。この機能は以下の通りである。
【００５９】
2007526571.tif 000012
【００６０】
この機能はまた、図４にも示されている。段階「１００」、「１０１」、「１０４」、「１１０」、「１１１」、及び「１１２」は、既に説明したものと同一である。段階「１０３」に代わる段階「１２０」では、ＥＭＣがゼロに対する等価性が判定され、等しい場合、ＥＭＣは命令の「ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ」に設定され「１２１」、制御は段階「１０４」に進む。段階「１２０」においてＥＭＣが非ゼロであれば、ＥＭＣは段階「１２２」において１に対する等価性が判定され、条件が判定される。これらの判定のいずれかが成立しない場合には、制御はこの場合もやはり段階「１０４」に進む。両方が通った場合には、ＥＭＣ値は段階「１２３」においてゼロに設定され、制御はやはり段階「１０４」に進む。
【００６１】
３）ＣｏｎｄＳｅｔＭａｓｋ（条件、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、ＪｕｍｐＴａｒｇｅｔ）
この命令は、ｂｒｅａｋｌｏｏｐ／ｃｏｎｔｉｎｕｅｌｏｏｐ、早期のｒｅｔｕｒｎ、及びｅｘｉｔ用に用いることができる。命令は以下のように動作する。
【００６２】
2007526571.tif 000013
【００６３】
この動作はまた図５に要約されている。これは、段階「１０２」及び「１０３」が「１３０」及び「１３１」でそれぞれ置き換えられている点を除けば、動作においてＣｏｎｄＳｔａｒｔ（すなわち図３）とほぼ同一である。段階「１３０」では、ＥＭＣはゼロに対する等価性について判定され、これが満たされ、且つ条件が「真」である場合には、制御は段階「１３１」に進み、ここでＥＭＣは命令で指定されているＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔに設定される。「１３０」の判定が成立しない場合には、制御は前と同様に段階「１０４」に渡される。
【００６４】
４）ＣｏｎｄＬｏｏｐＴｅｓｔ（条件、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、ＪｕｍｐＴａｒｇｅｔ）
これは、ループ構造の終了点において前置判定ループ及び後置判定ループの両方に対して用いられる。好ましい実施形態では、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔはやはり１又は２の値に制限されている。
【００６５】
2007526571.tif 000014
【００６６】
ここでも同様に、上述の説明の形態は簡単にすることが意図されている。効率化のために、ハードウェア実装は異なる構成を用いることができる。
【００６７】
この動作は図６に示されている。最初の段階「１４０」は、ブールフラグ「ＥｘｉｔＬｏｏｐ」を「真」に設定するものであり、次いで段階「１００」に進む。段階「１００」、「１０１」、及び「１０４」は、前の命令において説明されたものと同じ関数を実行する。段階「１０１」の後で尚ＰＥを処理している場合、方法は段階「１４１」に進む。いずれかのＰＥが尚も実行を必要としていることを示している、すなわち条件が「真」でありＥＭＣがゼロである場合、段階「１４２」へと進み、そうでなければ「１０４」へと進む。段階「１４２」においてＥｘｉｔＬｏｏｐのブール値は「偽」に設定される。
【００６８】
段階「１０１」で、全てのＰＥが判定されたと判断すると、制御は「１４３」に進み、ここでＥｘｉｔＬｏｏｐフラグを調べ、これが「偽」であれば制御は段階「１５０」に進み、そうでなければ「１６０」に進む。段階「１５０」はＰＥを通じて別の反復パスを開始し、「１５１」に続いて、反復が完了した時点を検出する。特定のＰＥを処理する際に、段階「１５２」では、そのＰＥがそのループを終了した直後であるかどうか、すなわちＥＭＣ＝０で且つ条件が「偽」であるかどうかを判断する。これが満たされない場合には、制御は段階「１５４」へと渡され、その他の場合には段階「１５３」に渡される。段階「１５３」では、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔがＥＭＣ値に加算され、制御は段階「１５４」に進み、ここで、次のＰＥへ移り、引続いて段階「１５１」へと移る。「１５１」で、全てのＰＥが処理されたことを示す場合には、段階「１５５」はＣＵプログラムカウンタを「ＪｕｍｐＴａｒｇｅｔ」に設定する。
【００６９】
段階「１６０」が選ばれた場合には、制御はＰＥを通じて異なる反復パスを開始し、段階「１６１」では全てのＰＥが処理された時点を判断する。段階１６２では、ＰＥのＥＭＣ値が調べられ、この値がＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔよりも小さい（或いは等しい）場合には、ＥＭＣはゼロに設定され「１６３」、その他の場合にはＥＭＣからこの値が減算される「１６４」。次いで、制御は段階「１６５」へ続き、ここで次のＰＥに進む。「１６１」で、全てのＰＥが処理されたと判断した場合には、段階「１６６」はＣＵプログラムカウンタを次の命令に進める。
【００７０】
５）ＣｏｎｄＥｎｄ（ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、ＪｕｍｐＴａｒｇｅｔ）
最後の命令は、制御フロー命令の終了点で用いられる。これは以下のように動作する。
【００７１】
2007526571.tif 000015
【００７２】
この動作はまた図７に示されている。この動作はｃｏｎｄｓｔａｒｔ（図３）のものと極めて類似しており、段階「１００」、「１０１」、「１０４」、「１１０」、「１１１」、及び「１１２」は同一であるが、段階「１０２」及び「１０３」は、以下のように「１７０」、「１７１」、及び「１７２」と置き換えられている。段階「１７０」において、ＥＭＣ値がＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔよりも小さいか、又はこれと等しい場合には、ＥＭＣは段階１７１において単純にゼロに設定され、その他の場合には段階「１７２」においてＥＭＣからＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔが減算される。好ましい実施形態ではＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔはここでも１又は２の値に制限されている。
【００７３】
（制御フロー構成の変換）
上述の命令は、前に説明した制御フロー構成を実装するのに用いられる。含まれる単純な原理をコンパイラの当業者に教示するためには、完全というには遠いが十分であるはずの幾つかの例を提示する。
【００７４】
例：「ＩＦ」構成：
以下のものは単純なｉｆ／ｅｌｓｅ命令文である。
【００７５】
2007526571.tif 000016
【００７６】
これは、次のように変換することができる。
【００７７】
2007526571.tif 000017
【００７８】
これは以下のように動作し、すなわちＣｏｎｄＳｔａｒｔは「ＩＦ」への進入時に実行される。ＰＥがイネーブルであり（ＥＭＣ＝０）、且つ「条件＿１」が「真」の場合は常に「コードブロック＿１」が実行されることになる。全ての他のＰＥにおいて、ＥＭＣはＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ、すなわち「＋１」だけインクリメントされる。アクティブなＰＥがない場合は、ＣＵは直ちにＥＬＳＥ＿ＡＤＤＲに分岐し、「コードブロック＿１」内の全ての命令をスキップする。
【００７９】
ＥＬＳＥ＿ＡＤＤＲでは、ＣｏｎｄＥｌｓｅＩｆはあらゆるイネーブルのＰＥをディスエーブルに設定し、「条件＿１」が成立しなかったあらゆるもの（すなわちＥＭＣ＝１であるもの）をイネーブルにすることになる。「ＩＦ」の終了点では、元のＥＭＣ値がＣｏｎｄＥｎｄ命令によってリストアされる。
【００８０】
「ＥＬＳＩＦ」文節を伴う「ＩＦ」はこれよりも若干複雑である。例えば次の擬似コードがある。
【００８１】
2007526571.tif 000018
【００８２】
これは、次のように変換されることになる。
【００８３】
2007526571.tif 000019
【００８４】
このコードでは、条件ループの開始点においてイネーブルにされたいずれかのＰＥが、コードセクションを実行すると、そのＥＭＣは２に設定されることになる。未だ判定を満たしていない全てのものが１のＥＭＣを有する。
【００８５】
修正されたＣｏｎｄＥｌｓｅＩｆ命令が、条件コードの更に「短絡」を実行することができるように、２つの「分岐アドレス」を有する別の実施形態を生成することが可能である。
【００８６】
実施例：ループ構成：
次の単純な「ｗｈｉｌｅ」命令文：
2007526571.tif 000020
は、以下のように変換することができる。
【００８７】
2007526571.tif 000021
【００８８】
「ｂｒｅａｋｌｏｏｐ」及び「ｃｏｎｔｉｎｕｅｌｏｏｐ」機能を伴うループをサポートするために、例えば以下：
2007526571.tif 000022
では、最初の「ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ」は代わりに「２」に設定され、「ｃｏｎｔｉｎｕｅｌｏｏｐ」及び「ｂｒｅａｋｌｏｏｐ」の状態を監視することができる。
【００８９】
例えば：
2007526571.tif 000023
【００９０】
「ｂｒｅａｋｌｏｏｐ」又は「ｃｏｎｔｉｎｕｅｌｏｏｐ」が「ＩＦ」内の唯一のコードである場合、単一のＣｏｎｄＳｅｔＭａｓｋ命令は、その実装において十分なものとなる。ＣｏｎｄＳｅｔＭａｓｋ値を増大させることにより、最内側のループだけでなく親ループも制御する拡張「ｂｒｅａｋｌｏｏｐ／ｃｏｎｔｉｎｕｅｌｏｏｐ」コマンドを実装することも可能である。
【００９１】
Ｃａｓｅ命令文はＥＬＳＩＦコードと極めて類似する方法で取り扱われるが、ＣＵのプログラムカウンタスタック及びＥＭＣ内のビット数によって決定される最大値までの再帰は、説明の手法によって自動的に処理される。
【００９２】
（ハードウェア構造）
ここで命令の演算のための好ましい構成を図８を参照しながら説明する。ＣＵが上述の制御フロー命令、命令「条件」「５０」、Ｏｐｅｒａｎｄ「５１」、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ「５２」、及びＪｕｍｐＴａｒｇｅｔ「５３」の１つを処理するときに、フィールドが抽出される。
【００９３】
「条件」「５０」は全てのＭ個のＰＥユニットに同時通信され、特定のレジスタ又は条件フラグ「６１」に対して判定される。各ＰＥに対して判定によってブールフラグが発生し、Ｍ個の結果ビット「６２」が生成される。上記で説明されたように、各ＰＥについてのＥＭＣ値「２０」が判定され「２１」、３つの事前決定値、すなわち０、１、又は２のうちの１つに一致するかどうかを判断し、３つのブールフラグが発生する。各フラグは他のＭ個のＰＥからの一致する値と共にグループ化され、「Ｉｓ０」、「Ｉｓ１」、及び「Ｉｓ２」に対応するＭビットの３つのセット「６３」「６４」「６５」を生成する。明らかにＭ個のＰＥのうちの１つに対応する特定のビット位置は、「６３」、「６４」、又は「６５」のうちの多くても１つだけが「真」となる可能性がある。
【００９４】
「判断演算」ユニット「７０」は、ＣｏｎｄｉｔｉｏｎＲｅｓｕｌｔ「６２」、ＥＭＣ値フラグの３つのセット「６３」から「６５」まで、及び命令オペランド「５１」、及び命令マスク「５２」をとり、命令に応答するため全てのＰＥのＥＭＣ値を調節する方法を決定する。選択可能な６つの可能な演算がある（些細な非演算選択肢を無視する）。これらの演算は以下のものである。
ＥＭＣに２を加算
ＥＭＣに１を加算
ＥＭＣを０にクリア
ＥＭＣを命令のＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ「５２」に設定
ＥＭＣから１を減算
ＥＭＣから２を減算
これらの選択は３ビットを用いて明確にコード化することができる。
【００９５】
あらゆる特定の命令においても、これらの演算のうち多くても１つが、特定のＰＥのＥＭＣへの適用を必要とし、更に全てのＰＥにわたって多くても２つだけの異なる演算が用いられることになる。第１の演算選択である「演算  １」「７１」は３ビットでコード化され、全ての「ＥＭＣ更新ユニット」「７６」にコピーされる。Ｍビットマスクである「演算１選択」「７２」は、Ｍ個のＥＭＣ更新ユニットのどのサブセットがこの演算を実行するべきであるかを示している。ＥＭＣ更新ユニットは要求された演算を単純に実行する。
【００９６】
同様に第２の可能な演算選択「演算２」「７３」もまた、これらのユニットのどれが演算を実行すべきかを示す別のＭビットマスク「演算２選択」「７４」と共に、全てのＥＭＣ更新ユニットに同時通信される。ここでもやはり、あらゆる特定のＥＭＣ更新ユニットも、２つの演算のうち多くとも１つのみを実行することになる。
【００９７】
「Ｓｅｔ  ＥＭＣ  ｔｏ  ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ」コマンドを実行するために、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔ「５２」もまた全てのＥＭＣ更新ユニットに同時通信される。
【００９８】
ユニット「７０」の残りの要求される関数は、ＣＵがどのようにプログラムカウンタを調整するべきかを決定するものである。ＣＵが「ＤｏＢｒａｎｃｈフラグ」「８０」をセットすると、ＣＵの「命令取り出しユニット」「８１」は、命令の「ＪｕｍｐＴａｒｇｅｔ」「５３」からの命令の取り出しを始めるためにプログラムカウンタを更新することになる。
【００９９】
ここで「演算判断」ユニット「７０」の動作の詳細は、以下の擬似コードにより要約される。
【０１００】
2007526571.tif 000024
2007526571.tif 000025
2007526571.tif 000026
【０１０１】
上述の機能はまた、図９に例示されている。段階「２００」において、現在の命令タイプが判定される。命令がＣｏｎｄＳｔａｒｔ又はＣｏｎｄＬｏｏｐＴｅｓｔのいずれかであれば、段階「２１０」に進み、その他の場合には段階「２０１」に進む。段階「２０１」において、命令がＣｏｎｄＳｅｔＭａｓｋ命令であれば、段階「２１１」に進み、その他の場合には段階「２０２」に進む。段階「２０２」において、命令がＣｏｎｄＥｎｄであれば、段階「２１２」に進み、その他の場合には命令はＣｏｎｄＥｌｓｉｆのはずであり、段階「２１３」に進む。
【０１０２】
段階「２１０」においてＭ個のブールフラグ「ＡｃｔｉｖｅＰＥ」は、ＣｏｎｄｉｔｉｏｎＲｅｓｕｌｔを伴うＩｓ０フラグのビット単位ＡＮＤに設定される。
段階「２１１」ではＡｃｔｉｖｅＰＥは、ＣｏｎｄｉｔｉｏｎＲｅｓｕｌｔのＮＯＴ（否定）を伴うＩｓ０フラグのビット単位ＡＮＤであるように設定される。
段階「２１２」では、命令のＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔが判定される。これが１に設定されている場合は、制御は「２１４」に進み、その他の場合（２のはずである）には、制御は「２１５」に進む。「２１４」では、ＡｃｔｉｖｅＰＥは、「Ｉｓ０  ｏｒ  Ｉｓｌ」に設定され、「２１５」では、ＡｃｔｉｖｅＰＥは、「Ｉｓ０  ｏｒ  Ｉｓ１  ｏｒ  Ｉｓ２」に設定される。
【０１０３】
段階「２１３」では、命令のＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔが判定される。これが０に設定されている場合、制御は段階「２１６」に渡され、その他の場合には「２１７」に渡される。「２１６」ではＡｃｔｉｖｅＰＥは、「Ｉｓ０  ｏｒ  （Ｉｓ１  ａｎｄ  ＣｏｎｄｉｔｉｏｎＲｅｓｕｌｔ）」に設定され、「２１７」ではＡｃｔｉｖｅＰＥは、「Ｉｓ１  ａｎｄ  ＣｏｎｄｉｔｉｏｎＲｅｓｕｌｔ」に設定される。
【０１０４】
段階「２１０」、「２１１」、「２１４」、「２１５」、「２１６」、又は「２１７」の後、制御は段階「２３０」に渡され、ここでＡｃｔｉｖｅＰＥがゼロベクトルである場合、ブールフラグ「ＤｏＢｒａｎｃｈ」が「真」に設定され、その他の場合には「偽」に設定される。
【０１０５】
段階「２３１」及び「２３２」では、命令タイプが再び判定され、ＣｏｎｄＬｏｏｐＴｅｓｔであった場合にはＤｏＢｒａｎｃｈ信号は反転される。制御は「２５０」に進む。
【０１０６】
段階「２５０」では、命令がＣｏｎｄＳｔａｒｔである場合、制御は段階「２６０」に進み、その他の場合には「２５１」に進み、ここで命令がＣｏｎｄＥｌｓｉｆである場合には、制御は段階「２６１」に進み、その他の場合には「２５２」に進み、ここで命令がＣｏｎｄＳｅｔＭａｓｋである場合には、制御は段階「２６２」に進み、その他の場合には「２５３」に進む。「２５３」において命令がＣｏｎｄＬｏｏｐＴｅｓｔである場合には、制御は「２６３」に進み、その他の場合には段階「２６４」に進む。
【０１０７】
段階「２６０」では、Ｏｐｅｒ＿１は、全ての非アクティブのＰＥについてイネーブルにされ、Ｏｐｅｒ＿２はディスエーブルにされ、制御は「２７０」に渡され、ここで命令のＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔを判定する。これが１である場合、制御は段階「２７１」に渡され、ここで「ＥＭＣＡｄｄ１」がＯｐｅｒ＿１として選ばれ、その他の場合には制御は「２７２」に渡され、ここで「ＥＭＣＡｄｄ２」がＯｐｅｒ＿１として選ばれる。
【０１０８】
段階「２６１」では、Ｏｐｅｒ＿１は「ＥＭＣＳｅｔ」に設定され、ＥＭＣ＝０により全てのＰＥについてイネーブルにされる。Ｏｐｅｒ＿２は「ＥＭＣＣｌｅａｒ」に設定され、ＥＭＣ＝１及び条件「真」で全てのＰＥについてイネーブルにされる。
【０１０９】
段階「２６２」では、Ｏｐｅｒ＿１は「ＥＭＣＳｅｔ」に設定され、ＥＭＣ＝０且つ条件＝「真」で、全てのＰＥについてイネーブルにされる。
【０１１０】
段階「２６３」は、ＤｏＢｒａｎｃｈフラグを調べることによってループが演算を続けるべきか、又は終了するべきかを判断する。ＤｏＢｒａｎｃｈフラグが「真」である場合、制御は段階「２８０」に進み、その他の場合には段階「２６４」に進み、ここでもＣｏｎｄＥｎｄコードを処理する。段階「２８０」で、ＥＭＣ＝０且つ条件が「偽」で、Ｏｐｅｒ＿１は全てのＰＥについてイネーブルにされ、Ｏｐｅｒ＿２はディスエーブルにされる。制御は段階「２７０」に渡される。
【０１１１】
段階「２６４」では、ＭａｓｋＡｄｊｕｓｔＡｍｏｕｎｔが判定され、この値が１である場合、制御は段階「２８１」に渡され、その他の場合には段階「２８２」に渡される。「２８１」では、Ｏｐｅｒ＿１は「ＥＭＣＳｕｂ１」に設定され、非ゼロのＥＭＣで全てのＰＥについてイネーブルにされ、Ｏｐｅｒ＿２はディスエーブルにされる。
【０１１２】
段階「２８２」では、Ｏｐｅｒ＿１は「ＥＭＣＣｌｅａｒ」に設定され、０又は１のいずれかのＥＭＣで全てのＰＥについてイネーブルにされ、Ｏｐｅｒ＿２は、全ての他のＰＥについて「ＥＭＣＳｕｂ２」に設定される。
【０１１３】
（第２の実施形態）
第２の好ましい実施形態では、ＥＭＣ値は整数として表す必要はなく、別の数学上の群を用い得る点認識することでハードウェアコストの節約を達成することができる。詳細には、この実施形態では、２を法とするプリミティブ多項式に基づくフィールドを用いる。これらは線形フィードバックシフトレジスタ又はＬＦＳＲにおいて頻繁に用いられている。
【０１１４】
このシステムにおける基本的な値／演算は以下のように置換される。
第１の実施形態の値又は演算            第２の実施形態における置換
値０                                  値１
１を加算                        ２を法とする多項式を乗算
２を加算                        ４を法とする多項式を乗算
２を減算                        １／４を法とする多項を乗算
１を減算                        １／２を法とする多項式を乗算
【０１１５】
ＥＭＣの所与のサイズ、すなわちＭビットについて、プリミティブ多項式は最小の利用可能な項数を有するように選ばれる。この実施形態においてＭは９であり、選ばれたプリミティブ多項式はｘ９＋ｘ５＋１である。「１を加算」に対する置換を実装するために、ＶＨＤＬなどのハードウェア記述言語に翻訳するのには自明である以下の擬似コードが用いられる。
【０１１６】
2007526571.tif 000027
【０１１７】
「１を減算」の置換は同様に以下の通りである。
【０１１８】
2007526571.tif 000028
【０１１９】
「２を加算」及び「２を減算」の等価物を評価するためには、これらの関数を２回用いる。
【０１２０】
これらの演算はハードウェア内への実装が相当安価となり、評価時間が一定であるといった利点をも有することは当業者には明らかであろう。これは、直線的な労力を要する可能性がある通常の整数の加算及び減算と比較すると極めて有利である。このシステムの極めて僅かな不利点は、（２Ｍ−１）の一意の値だけしか表すことができない（整数の２Ｍに対し）点であるが、加算／減算ハードウェアの実質的な節約を考慮すれば、Ｍを容易に増大させることができる。
【０１２１】
別の実施形態では、異なるサイズのＥＭＣを対応するプリミティブ多項式と共に用いることができる。
【図面の簡単な説明】
【０１２２】
【図１】ＳＩＭＤデバイスの典型的な構成を示す図である。
【図２】本発明の広範な概略図である。
【図３】好ましい実施形態のＣｏｎｄＳｔａｒｔ命令のフローチャートである。
【図４】好ましい実施形態のＣｏｎｄＥｌｓｉｆ命令のフローチャートである。
【図５】好ましい実施形態のＣｏｎｄＳｅｔＭａｓｋ命令のフローチャートである。
【図６】好ましい実施形態のＣｏｎｄＬｏｏｐＴｅｓｔ命令のフローチャートである。
【図７】好ましい実施形態のＣｏｎｄＥｎｄ命令のフローチャートである。
【図８】本発明の実施形態における制御フロー命令に応答してＰＥのイネーブル／ディスエーブルを制御するのに用いられるロジックの概要を示す図である。
【図９】図８のロジックのサブセットのフローチャートである。
【符号の説明】
【０１２３】
１０  制御ユニット
１１  プログラムメモリ
１２  プロセッシングエレメント
２０  実行マスクカウントレジスタ
２１  判定論理ユニット
【図１】
2007526571.tif 000029
【図２】
2007526571.tif 000030
【図３】
2007526571.tif 000031
【図４】
2007526571.tif 000032
【図５】
2007526571.tif 000033
【図６】
2007526571.tif 000034
【図７】
2007526571.tif 000035
【図８】
2007526571.tif 000036
【図９−１】
2007526571.tif 000037
【図９−２】
2007526571.tif 000038
【手続補正書】
【提出日】平成18年11月8日(2006.11.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッシングエレメント（ＰＥ）を含む単一命令複数データ処理デバイス（ＳＩＭＤ）であって、
前記各ＰＥが、複数のビットを格納するための実行マスクカウント（ＥＭＣ）レジスタと、該ＥＭＣレジスタ内に格納されたマルチビットデータの幾つかの事前決定値に応じて前記ＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段とを含む単一命令複数データ処理デバイス（ＳＩＭＤ）。
【請求項２】
前記ＰＥは、前記ＥＭＣレジスタ内に格納された前記データの事前決定値との比較に応じてディスエーブル及びイネーブルにされることを特徴とする請求項１に記載のＳＩＭＤ。
【請求項３】
イネーブル及びディスエーブルにするための前記手段は、条件又はループ命令の実行中に動作することを特徴とする請求項１又は請求項２に記載のＳＩＭＤ。
【請求項４】
ＰＥの前記ＥＭＣレジスタ内に格納された前記データを修正する手段を含む請求項１、請求項２、又は請求項３に記載のＳＩＭＤ。
【請求項５】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データへの複数の修正のうちの選択されたものを行う手段を含むことを特徴とする請求項４に記載のＳＩＭＤ。
【請求項６】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量だけインクリメントする手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項７】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量だけデクリメントする手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項８】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値に事前決定量を乗算する手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項９】
前記ＥＭＣレジスタ内に格納された前記データを修正する手段は、前記データ値を事前決定量で除算する手段を含むことを特徴とする請求項４又は請求項５に記載のＳＩＭＤ。
【請求項１０】
前記ＥＭＣレジスタ内の前記データ値は、プリミティブ多項式に基づくフィールドを用いることを特徴とする前記請求項のいずれかに記載のＳＩＭＤ。
【請求項１１】
同一の命令を実行するように構成された複数のプロセッサ要素ＰＥを含み、該ＰＥの各々がマルチビットＥＭＣレジスタを含むＳＩＭＤデバイス上でプログラムフローを制御する方法であって、
前記ＰＥによって実行されるべき条件命令を含む実行命令を前記各ＰＥに供給する段階と、
格納された前記ＥＭＣ値の幾つかの事前決定値と実行中の条件命令で行われる条件判定とに応じて前記ＰＥ内のレジスタへのデータの書き込みをイネーブル／ディスエーブルにする段階と、
を含む方法。
【請求項１２】
前記各ＰＥの前記ＥＭＣレジスタ内に格納された前記データを修正する段階を含む請求項１１に記載の方法。
【請求項１３】
前記ＥＭＣレジスタ内に格納された前記データへの複数の可能な修正の中から選択する段階を含む請求項１２に記載の方法。
【請求項１４】
複数のＰＥ内のレジスタへのデータの書き込みがイネーブル又はディスエーブルのいずれであるかを判断し、該判断結果に応じて新しい命令に分岐する段階を含む請求項４から請求項１２のいずれかに記載の方法。
【請求項１５】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量だけインクリメントする段階を含む請求項１２に記載の方法。
【請求項１６】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量だけデクリメントする段階を含む請求項１２に記載の方法。
【請求項１７】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データに事前決定量を乗算する段階を含む請求項１２に記載の方法。
【請求項１８】
前記修正段階は、前記ＥＭＣレジスタ内に格納された前記データを事前決定量で除算する段階を含む請求項１２に記載の方法。
【請求項１９】
前記ＥＭＣレジスタ内の前記データ値が、プリミティブ多項式に基づくフィールドを用いることを特徴とする請求項１２に記載の方法。
【請求項２０】
複数のＰＥを含むＳＩＭＤ上でプログラムフローを制御するための方法であって、
前記ＰＥに命令及びデータのシーケンスを供給する段階と、
前記ＰＥ上で前記命令を実行する段階と、
各ＰＥ上のＥＭＣレジスタ内に格納されたマルチビットデータ値の幾つかの事前決定値に応じて各ＰＥ内のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする段階と、
あるＰＥのレジスタへのデータの書き込みがディスエーブルにされ、他のＰＥのレジスタへのデータの書き込みがイネーブルにされているときに、当該ＰＥのＥＭＣレジスタ内のマルチビット値を修正する段階と、
を含む方法。
【請求項２１】
全てのＰＥにおけるレジスタへのデータの書き込みがディスエーブルであるか否かを判定し、該判定の結果に応じて別の命令に分岐する段階を含む請求項１２に記載の方法。
【請求項２２】
複数のＰＥから構成され、各ＰＥが、ＥＭＣレジスタと、実行のために前記ＰＥに命令及びデータのシーケンスを供給する手段と、前記各ＰＥのＥＭＣレジスタ内に格納されたマルチビットデータ値の幾つかの事前決定値に応じて前記各ＰＥ上のレジスタへのデータの書き込みをイネーブル及びディスエーブルにする手段と、あるＰＥ内のレジスタへのデータの書き込みがディスエーブルにされ、他のＰＥ内のレジスタへのデータの書き込みがイネーブルにされているときに前記あるＰＥのＥＭＣレジスタ内のマルチビット値を修正する手段とを含むＳＩＭＤ。
【請求項２３】
全ての前記ＰＥ内のレジスタへのデータの書き込みがディスエーブルであるか否かを判定する手段と、前記判定の結果に応じて別の命令に分岐する手段とを含む請求項２２に記載のＳＩＭＤ。
【国際調査報告】
2007526571.tif 000039
2007526571.tif 000040
2007526571.tif 000041