(57)【要約】【解決手段】第１入力ベクトル内の各要素を第２入力ベクトルの全ての各要素と比較する第１比較回路を有する第１実行論理回路を含む、半導体チップ上で実装される処理コアを提供する。処理コアは、第１入力値を入力ベクトルの全ての各データ要素と比較する第２比較回路を有する、第２実行論理回路も含む。【選択図】図１Ａ
2014504418.tif 000002
【特許請求の範囲】
【請求項１】
半導体チップ上の電子回路により、
ａ）ベクトル演算の入力ベクトル内のデータ要素に対して実行されるデータ演算間の依存関係を特定する第１データ構造を生成する段階と、
ｂ）データのコンフリクトを生じることなく前記ベクトル演算により同時に演算が可能な前記入力ベクトルのデータ要素の位置を特定する第２データ構造を生成する段階であり、前記第２データ構造は、互いに依存関係にあるデータ演算の実行順序を示す第２データ構造を用いて前記第１データ構造のマスキングを行うことにより少なくとも部分的に生成される段階と、
ｃ）前記第２データ構造により参照されるデータ要素を用いて次の入力ベクトルを形成する段階と、
ｄ）前記次の入力ベクトルに対し前記ベクトル演算を実行する段階と、
前記ベクトル演算が前記入力ベクトルの全てのデータ要素の位置に対して実行されるまで前記ａ）、ｂ）、ｃ）、およびｄ）の段階を繰り返す段階と
を備え、
前記第１データ構造および前記第２データ構造はそれぞれ前記ａ）およびｂ）の段階のイテレーション毎に更新される、方法。
【請求項２】
前記ａ）の段階はまず、前記入力ベクトルの前記データ要素を対象とする指標のセット内の各指標を第２の指標のセットの他の指標と比較することにより実行される、請求項１に記載の方法。
【請求項３】
前記指標のセットと前記第２の指標のセットとは互いに同じセットである、請求項２に記載の方法。
【請求項４】
前記指標のセットと前記第２の指標のセットとは互いに異なるセットである、請求項２に記載の方法。
【請求項５】
前記ａ）の段階の次のイテレーションは、完了したばかりのイテレーションの第１データ構造を、前記データ要素の位置のうち、対応する演算がデータの依存関係に応じて遅らされたデータ要素の位置を対象とする指標を特定する第３データ構造に対してマスキングすることにより実行される、請求項２から４のいずれか１項に記載の方法。
【請求項６】
前記比較は第１処理コア命令を用いて実行され、
前記完了したばかりのイテレーションの第１データ構造の第３データ構造に対するマスキングは、第２処理コア命令を用いて実行される、請求項５に記載の方法。
【請求項７】
前記ｂ）の段階は、第３処理コア命令を用いて実行される、請求項６に記載の方法。
【請求項８】
前記次の入力ベクトルを形成する段階はさらに、前記第２データ構造を用いてギャザー命令を実行する段階を有する、請求項１から７のいずれか１項に記載の方法。
【請求項９】
前記ベクトル演算が前記次の入力ベクトルに対して実行された後、前記第２データ構造を用いてスキャッタ命令を実行する段階をさらに備える、請求項８に記載の方法。
【請求項１０】
ａ）ベクトル演算の入力ベクトル内のデータ要素に対して実行されるデータ演算間の依存関係を特定する第１データ構造を生成する第１論理回路と、
ｂ）データのコンフリクトを生じることなく前記ベクトル演算により同時に演算が可能な前記入力ベクトルのデータ要素の位置を特定する第２データ構造を生成する第２論理回路であり、互いに依存関係にあるデータ演算の実行順序を示す第２データ構造を用いて前記第１データ構造のマスキングを行うマスキング回路を有する前記第２論理回路と、
ｃ）前記第２データ構造により参照されるデータ要素を用いて形成される次の入力ベクトルに対しベクトル演算を実行するベクトル実行ユニットと、
ｄ）前記ベクトル演算が前記入力ベクトルの全てのデータ要素の位置に対して実行されるまで前記第２論理回路および前記ベクトル実行ユニットが実行する処理を順に繰り返す制御フローのイテレーションにおいて前記第１データ構造の更新をする第３論理回路と
を備え、
前記第２論理回路は、前記イテレーションにおいて前記第２データ構造を更新する、半導体チップ上の処理コア。
【請求項１１】
前記第１論理回路は、前記入力ベクトルの前記データ要素を対象とする指標のセット内の各指標を第２の指標のセットの他の指標と比較する比較回路を有する、請求項１０に記載の半導体チップ上の処理コア。
【請求項１２】
前記第３論理回路は、完了したばかりのイテレーションの第１データ構造を、前記データ要素の位置のうち、対応する演算がデータの依存関係に応じて遅らされたデータ要素の位置を対象とする指標を特定する第３データ構造に対してマスキングするマスキング回路を有する、請求項１１に記載の半導体チップ上の処理コア。
【請求項１３】
前記第１論理回路は前記処理コアの第１命令の実行ユニット内に配置され、
前記第２論理回路は前記処理コアの第２命令の実行ユニット内に配置され、
前記第３論理回路は、前記処理コアの第３命令の実行ユニット内に配置される、請求項１２に記載の半導体チップ上の処理コア。
【請求項１４】
前記次の入力ベクトルを形成するべく前記第２データ構造を用いてギャザー命令を実行する実行ユニットをさらに備える、請求項１０から１３のいずれか１項に記載の半導体チップ上の処理コア。
【請求項１５】
スキャッタ命令を実行する実行ユニットをさらに備える、請求項１４に記載の半導体チップ上の処理コア。
【請求項１６】
第１入力ベクトル内の各要素を第２入力ベクトル内の全ての各要素と比較する第１比較回路を有する第１実行論理回路と、
第１入力値を入力ベクトルの全ての各データ要素と比較する第２比較回路を有する第２実行論理回路と
を備える、半導体チップ上で実装される処理コア。
【請求項１７】
１組の入力ベクトルの同位置の要素を比較する第３実行論理回路比較回路をさらに備える、請求項１６に記載の処理コア。
【請求項１８】
ベクトル演算命令を実行するベクトル実行ユニットをさらに備える、請求項１７に記載の処理コア。
【請求項１９】
ギャザー命令を実行するギャザー実行論理回路をさらに備える、請求項１８に記載の処理コア。
【請求項２０】
スキャッタ命令を実行するスキャッタ実行論理回路をさらに備える、請求項１９に記載の処理コア。
【請求項２１】
前記第１実行論理回路および前記第２実行論理回路は同一の実行ユニット内に配置される、請求項１６から２０のいずれか１項に記載の処理コア。
【請求項２２】
ハードディスクドライブと、
処理コアと
を備え、
前記処理コアは、
ｉ）第１入力ベクトル内の各要素を第２入力ベクトル内の全ての各要素と比較する第１比較回路を有する第１実行論理回路と、
ｉｉ）第１入力値を入力ベクトルの全ての各データ要素と比較する第２比較回路を有する第２実行論理回路と
を有する、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の分野は、一般的にコンピュータサイエンスに関し、より詳細には、ベクトルコンフリクト命令に関する。
【背景技術】
【０００２】
コンピュータサイエンスの分野では、「スカラ」および「ベクトル」の２つのタイプのプロセッサアーキテクチャが広く知られている。スカラプロセッサは、単一のセットのデータに対する演算を実行するための命令を実行するよう設計されており、他方、ベクトルプロセッサは、複数のセットのデータに対する演算を実行するための命令を実行するよう設計されている。図１Ａおよび図１Ｂは、スカラプロセッサとベクトルプロセッサとを比較し、それらの間の基本的な差を表すための例を示す。
【０００３】
図１Ａは、単一のオペランドセットであるＡおよびＢが共にＡＮＤで連結され、単一の（または「スカラ」）結果Ｃを生成する（つまり、ＡＢ＝Ｃ）、スカラＡＮＤ命令の例を示す。対照的に、図１Ｂは、２つのオペランドセットであるＡ／ＢおよびＤ／Ｅのそれぞれが共に平行してＡＮＤで連結され、ベクトル結果Ｃ、Ｆを同時に生成する（つまり、Ａ．ＡＮＤ．Ｂ＝ＣおよびＤ．ＡＮＤ．Ｅ＝Ｆ）、ベクトルＡＮＤ命令の例を示す。
【０００４】
当技術分野で周知のように、典型的には、入力オペランドおよび出力結果の両方が、それぞれ専用のレジスタに格納される。例えば、多くの命令は、２つの入力オペランドを有する。よって、２つの別個の入力レジスタを用いて、一時的にそれぞれの入力オペランドが格納される。さらにこれらの同じ命令が、第３（結果）レジスタ内に一時的に格納されることになる出力値を生成する。図１Ａおよび１Ｂは、入力レジスタ１０１ａ、１０１ｂ、１０２ａ、１０２ｂおよび結果レジスタ１０３ａ、ｂのそれぞれを示す。「スカラ」と「ベクトル」とを比較したうえでのそれぞれの特徴を容易に認識出来るであろう。
【０００５】
つまり、図１Ａに示すスカラ設計の入力レジスタ１０１ａ、１０２ａは、スカラ値（それぞれＡおよびＢ）のみを保持する。同様に、図１Ａに示すスカラ設計の結果レジスタ１０３ａも、スカラ値（Ｃ）のみを保持する。対照的に、図１Ｂに示すベクトルシステムの入力レジスタ１０１ｂ、１０２ｂは、ベクトル（レジスタ１０１ｂ内にＡ、Ｄ、およびレジスタ１０２ｂ内にＢ、Ｅ）を保持する。同様に、図１Ｂに示すベクトルシステムの結果レジスタ１０３ｂは、ベクトル値（Ｃ、Ｆ）を保持する。用語の使用の都合上、図１Ｂに示すベクトルシステムのレジスタ１０１ｂ、１０２ｂ、１０３ｂのコンテンツは、全般的に「ベクトル」と呼ぶことが出来、ベクトル内の各スカラ値は、「要素」と呼ぶことが出来る。よって、一例として、レジスタ１０１ｂは「要素」Ａおよび「要素」Ｄからなる「ベクトル」Ａ、Ｄを格納している、と表現することが出来る。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ベクトル演算が、平行して実行される複数の演算の性能に対応するとすれば、入力ベクトルの一要素に対するある演算が、当該入力ベクトル内の他の要素に対して実行される他の演算への依存性を有する場合、ベクトル演算において課題が生じ得る。
【図面の簡単な説明】
【０００７】
添付図面において本願発明を例示するが、本願発明はそれら図面に示される実施形態に限定されるわけではない。同様の参照符号は同様の要素を指す。
【図１Ａ】図１Ａはスカラ処理を示す。
【図１Ｂ】図１Ｂはベクトル処理を示す。
【図２】図２は、ベクトルコンフリクトを検出するための命令により実施される方法を示す。
【図３】図３は、図２の方法の実施形態に係る擬似コード表現を示す。
【図４Ａ】図４Ａは第１ベクトルコンフリクト命令に関する。
【図４Ｂ】図４Ｂは第１ベクトルコンフリクト命令に関する。
【図５Ａ】図５Ａ（従来技術）はｖｐｔｅｓｔ命令に関する。
【図５Ｂ】図５Ｂ（従来技術）はｖｐｔｅｓｔ命令に関する。
【図６Ａ】図６Ａは第２ベクトルコンフリクト命令に関する。
【図６Ｂ】図６Ｂは第２ベクトルコンフリクト命令に関する。
【図７】図７は例示的な処理コアを示す。
【図８】図８は例示的なコンピューティングシステムを示す。
【発明を実施するための形態】
【０００８】
上記の背景技術に説明したようにベクトル演算には、入力ベクトル要素に対する任意の演算が、当該入力ベクトルの他の要素に対して実行される他の演算に対して依存性を有する場合に起こり得る課題がある。この特定の課題が起こり得る状況の一例は、「ギャザー」命令および「スキャッタ」命令を用いた場合である。
【０００９】
例えばギャザー命令は、データ配列の指標により特定されるデータ値を「集める」ことにより、後に続くベクトル演算の入力ベクトルを構成するのに用いられる。例えばデータ配列「Ａ」が１００のエントリを有する場合、「ｇａｔｈｅｒ  Ａ［１５；３４；６６；７８］」のギャザー命令によって、配列Ａの１５番目、３４番目、６６番目、および７８番目の指標位置におけるデータ値がフェッチされる。フェッチされたデータ値はその後、ベクトル演算に用いられる入力ベクトルのデータ要素を形成するのに用いられる。「スキャッタ」命令は「ギャザー」命令の反対の処理を行うものとして見なすことが出来る。詳細には、ｓｃａｔｔｅｒ  Ａ［１５；３４；６６；７８］のスキャッタ命令により、値（例えば、ベクトル演算により生成された出力ベクトルの各要素）が配列Ａの１５番目、３４番目、６６番目、および７８番目の指標位置に格納される。
【００１０】
よって、
Ｓ＜＝ｇａｔｈｅｒ  Ａ［ａ；ｂ；ｃ；ｄ］；
Ｔ＜＝ｖｅｃｔｏｒ  ｏｐｅｒａｔｉｏｎ  ｏｎ  Ｓ；
ｓｃａｔｔｅｒ（Ａ［ａ；ｂ；ｃ；ｄ］；Ｔ）
の命令シーケンスにより、１）Ａのａ、ｂ、ｃ、およびｄの指標位置からデータオペランドがフェッチされ、２）これらのオペランドに対しベクトル演算が実行され、３）結果の要素がそれぞれＡのａ、ｂ、ｃ、およびｄの指標位置に格納される。
【００１１】
場合によってはギャザー命令（およびスキャッタ命令）に与えられた指標値のセットに、ベクトル演算内の依存関係が反映されている。  例えば、
Ｓ＜＝ｇａｔｈｅｒ  Ａ［ａ；ｂ；ｃ；ａ］；
Ｔ＜＝ｖｅｃｔｏｒ  ｏｐｅｒａｔｉｏｎ  ｏｎ  Ｓ；
ｓｃａｔｔｅｒ  （Ａ［ａ；ｂ；ｃ；ａ］；Ｔ）
命令シーケンスには、左端のＡ［ａ］の値に対して実行されるベクトル演算が右端のＡ［ａ］の値に対して実行されるベクトル演算の結果に依存することが反映されている。つまり、正しい演算は、１）ｏｐｅｒａｔｉｏｎ（右端のＡ［ａ］）＝＞Ｒ；２）ｏｐｅｒａｔｉｏｎ（Ｒ）に対応する。データ間の依存性に関する対策が事前に取られていなければ、誤った結果が生成され得る。詳細には、この例において、Ａ［ａ］の最終的な結果は、ｏｐｅｒａｔｉｏｎ（Ｒ）ではなくｏｐｅｒａｔｉｏｎ（Ａ［ａ］）となる。
【００１２】
図２は、ベクトル演算に用いられる入力ベクトル内で特定された依存性を問題なく反映させる方法を示す。詳細には、図２の方法において、（例えば２以上の同一の値を有する指標により特定される）同一の入力ベクトル内の同一のオペランドに対する演算を同時に実行することを適切に避ける。代わりに、複数回現れる指標値のそれぞれのインスタンスに対して行われるサイクルを複数含む一連のサイクルによって、演算が分けて行われる。
【００１３】
例えば、入力ベクトルにおいて同一の指標値が３回現れる場合、ベクトル演算が３回行われる。このように、第２の演算は第１の演算の結果を入力オペランドとして用い、第３の演算は、第２の演算の結果を入力オペランドとして用いるので、データの依存性が反映される。
【００１４】
図３は、図２の方法の実施形態に係る擬似コードフローを示す。図４Ａ、４Ｂ、５Ａ、５Ｂ、６Ａ、６Ｂは図３の擬似コードフローの説明を補足する詳細を追加的に示す。図２を参照すると、まず互いに依存性を有する指標が特定される２０１。ここで互いに依存性を有する指標は、上述したように、同一の入力ベクトルの異なる要素を定める、配列の同一の指標に対応してもよい。図３を参照すると、ｂ＝７，２，７，１，７のように、配列の指標が特定されている。よって、右端の指標値、真ん中の指標値、および左端の指標値がそれぞれ同一の値（７）を有するので、依存性を有する指標が３つある。他の最初の制御ベクトルはｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３０であり、これはギャザー／ベクトル演算／スキャッタ処理のシーケンスにまだ用いられていないｂの要素を表す。フローの始まりにおいて、ｂの５つの全ての要素を示すｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ＝１  １  １  １  １は、まだ処理されていない。
【００１５】
図３の擬似コードは、ｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令３００の実行により、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１が生成されることを示す。図４Ａは、ｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令の方法４０１を示し、図４Ｂは、ｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令を実行するよう半導体チップ内に設計されるハードウェア論理設計を示す。図４Ａおよび図４Ｂに示すように、ｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令によって、任意の入力ベクトルの各要素が他の入力ベクトルの全ての各要素と比較され、それぞれの比較の結果が生成される４０１。図３に示す擬似コードの方法において、ｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令は、両方の入力に対して同一のベクトル（ｂ）を用いて実行される。
【００１６】
図４Ｂのハードウェア設計は、マルチプレクサ４１１およびデマルチプレクサ４１２のチャネル選択のそれぞれが適切に協働して動作するようにコントローラ４１０の動作を指示する、マイクロコード化された、および／または状態機械によるアプローチを用いて実施されてもよい。詳細には、コントローラ４１０が左側の指標レジスタ４１３の指標値のうち任意の値を多重化し、コンパレータシステム（ｃｏｍｐａｒａｔｏｒ  ｓｔｅｍ）４１４へと送る。コンパレータシステム４１４は選択された指標値を右側の指標レジスタ４１５内の全ての各指標値と比較する。デマルチプレクサ４１２はコンパレータシステム４１４の出力を、左側の指標レジスタ４１３の選択された値とアラインされた出力レジスタ４１６のセグメントへと向ける。代替的な方法においては、マルチプレクサ、デマルチプレクサ、およびコントローラが全くなくてもよいように、コンパレータシステムはｎ×ｎのコンパレータを有してもよい（つまり、出力レジスタ４１６内で生成される比較結果の各ビットに関し別個のコンパレータが存在する）。
【００１７】
図３のｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１の左端のセグメント３０２は、ｂの左端の値をｂの全ての値のそれぞれと比較した場合の比較結果を示す。セグメント３０２には（ｂの値ごとに１つの）５つの結果が示されており、セグメント３０２内の結果はｂの値のそれぞれとアラインされている。データ構造３０１の左端のセグメント３０２は「１０１０１」であり、これは、ｂの左端の値がｂの右端の値、ｂの真ん中の値、および自身（ｂの左端の値）に対して依存性を有することを示している。データ構造３０１のセグメント３０３は、ｂの左端から２番目の値（２）の比較に対応し、２の値がそれ自身以外に対して依存性を有さないことを示している（つまり、セグメント３０３が０１０００）。１０１０１の値を有するセグメント３０４は、ｂの真ん中の値（７）が、それ自身、ｂの左端の値、およびｂの右端の値に対して依存性を有することを示している。０００１０の値を有するセグメント３０５は、ｂの右端から２番目の値がそれ自身のみに対して依存性を有することを示している。１０１０１の値を有するセグメント３０６は、ｂの右端の値（７）がｂの左端の値、ｂの真ん中の値、およびそれ自身に対して依存性を有することを示している。
【００１８】
図２を再び参照すると、（例えば、図３のｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１に示されるように）依存性を有する指標が特定されると、後に続くベクトル演算に関し、コンフリクトしない指標のセットが特定される。図３の擬似コードの例において、コンフリクトしない指標のセットが、ｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３３１に示されている。ここでｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３３１は少なくとも部分的に、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３００およびｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９を用いて論理演算を実行することにより構成される。
【００１９】
ｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９は依存性を有する指標が処理されるべき順序を表す。図３の特定の例において、依存性を有する右端の指標が最初にベクトル演算に用いられ、その後、右端から２番目の依存性を有する指標が後に続くベクトル演算サイクルに用いられるよう、依存関係は右から左の順序となっている。言い換えると、依存性を有する指標がｂにおいて右から左の順序で各ベクトル演算に用いられるよう選択される。本例のｂ＝７，２，７，１，７の特定の値において、このことは、右端の値である７が最初のギャザー／ベクトル演算／スキャッタイテレーションに用いられ、真ん中の値である７が２番目のギャザー／ベクトル演算／スキャッタイテレーションに用いられ、左端の値である７が３番目のギャザー／ベクトル演算／スキャッタイテレーションに用いられることに対応している。
【００２０】
この順序は、ｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙマスク３０９のセグメントの各位置の「右側に」１が位置付けされることに反映されている。つまり、セグメント３１０はｂの右端の値を表す。上記で説明した順序に関する規則を用いることにより（依存性を有するシークエンスにおいて、左の値の前に右の値が実行されることにより）、右端の値が、ベクトル演算における当該右端の値の利用を遅らせる依存性を（依存関係に関わっているにも関わらず）有していないこととなる（つまり、右端の値の処理が最初の演算サイクルにおいて実行される）。よって、セグメント３１０の値は０００００となる。第２セグメント３１１には、ｂの右端から２番目の値がｂ内で依存性を有する場合、その依存性がｂの右端の値に対するものであることが反映されている。よってその値は００００１となる。第３セグメント３１２には、ｂの真ん中の値がｂ内で依存性を有する場合、その依存性がｂの右端から２番目の値、および／またはｂの右端の値に対するものであることが反映されている。よってその値は０００１１となる。第４セグメント３１３には、ｂの左端から２番目の値がｂ内で依存性を有する場合、その依存性がｂの真ん中の値、ｂの右端から２番目の値、および／またはｂの右端の値に対するものであることが反映されている。よってその値は００１１１となる。第５セグメント３１４には、ｂの左端の値がｂ内で依存性を有する場合、その依存性がｂの左端から２番目の値、ｂの真ん中の値、ｂの右端から２番目の値、および／またはｂの右端の値に対するものであることが反映されている。よってその値は０１１１１となる。
【００２１】
図３の例においてｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３３１は少なくとも部分的に、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１およびｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９を用いて論理演算を実行することにより構築されていた。ここで、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８は、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１およびｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９を入力として受け付けるｖｐｔｅｓｔ命令を実行することにより構築される。
【００２２】
図５Ａはｖｐｔｅｓｔ命令の演算の実施形態を示し、図５Ｂはｖｐｔｅｓｔ命令のハードウェア設計の実施形態を示す。ここで図５Ａを参照すると、２つの入力ベクトルの同位置のセグメントの同位置のビットが比較される５０１。同一の論理値を有する同位置のビットからなる１以上のセットを有するセグメントが特定され５０２、マスクが適用される５０３。
【００２３】
図５Ｂを参照すると、第１入力ベクトルがレジスタ５１０に配置され、第２入力ベクトルがレジスタ５１２に配置される。２つのベクトルのそれぞれのセグメント内で同位置のビットの組がＡＮＤゲート５１３を用いてＡＮＤで連結される。いずれかのＡＮＤゲートが１を生成した場合、１が、それぞれのビットが比較された同位置のセグメントに対応する出力５２０のセグメントに登録される。例えば、コントローラ５１４はマルチプレクサ５１５、５１６にセグメント５１７、５１８のビットを選択させる。ここでセグメント５１７、５１８はそれぞれ、レジスタ５１０、５１２内のそれぞれのベクトルの左端のセグメントに対応するので、それぞれのベクトル内において同位置にある。セグメント５１７、５１８の同位置のビットはＡＮＤゲート５１３によりＡＮＤで連結される。ＡＮＤで連結されたビットのいずれかの組が１の値を有するのであれば、１が（コントローラ５１４によるデマルチプレクサ５２１のチャネル選択制御を介して）レジスタ５２０のセグメント５１９に記録される。その後、出力５２３を生成するべく、マスキング層５２２がレジスタ５２０のコンテンツに対して適用される。
【００２４】
図３に示す特定の擬似コードの例において、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１がレジスタ５１０に配置され、ｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９がレジスタ５１２に配置される。これらの入力ベクトルに関する、上記にて説明した図５Ｂに示すｖｐｔｅｓｔ回路設計の演算により、レジスタ５２０内のｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８が生成される。ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８は、ｂ内での依存性が原因となり、後に続くベクトル演算サイクルのうちどの指標がコンフリクトするのかを特定する。図３が示すように、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８は、１０１００を値として有し、これは依存性が理由となり、後に続くベクトル演算において（この場合、ｂの右端の指標値である）、ｂの真ん中の指標値と左端の指標値が実行されないことを示す。ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３１４の論理反転（！＿ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０７）がその後、ｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３０に対しマスキングされる。最初のイテレーションにおいてｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋは１  １  １  １  １である。よって、レジスタ５２０のｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓベクトルは、出力レジスタ５２３において、ｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎベクトル３３１として表される。
【００２５】
再び図２を参照すると、ベクトル演算はその後、実行が許可された指標に対して実行される２０３。図３の擬似コードの例においては、ギャザー、ベクトル演算、スキャッタ命令シーケンス３１５が実行される。よって図３においては、ｉ）ｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３０７により特定されるＡの値を選択するギャザー演算、ｉｉ）Ａの集められた値に対して実行されるベクトル演算、およびｉｉｉ）ベクトル演算の結果を再びデータ構造３０７において特定される指標へと格納するスキャッタ演算が示されている。ベクトル演算は実質的に、いかなるベクトル演算であってもよい。
【００２６】
図２を参照すると、ｂの指標の全てがベクトル演算に用いられると、処理が完了し２０４、さもなくば、依存性を有する指標が２０１において再度特定される。図３の実施形態において、ｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋが、最も新しいギャザー／ベクトル演算／スキャッタ命令シーケンスのうち、コンフリクトする要素としてｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋを再び定義することにより、更新される３３２。この場合、新たなｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３２は１  ０  １  ０  ０の値に対応し、これは、最後のギャザー／ベクトル演算／スキャッタ命令シーケンスにｂの真ん中の値および左端の値が用いられていないので、それらの値に対しこれから処理が行われることを示している。よって処理は完了しておらず、次のイテレーションを実行する必要がある。依存性を有する指標値のうちの最初の値（右端の指標値）の実行によって、ｂの指標値の間の依存関係が変化することとなる。詳細には、ｂの右端の指標値がベクトル演算に用いられたので、ｂの真ん中の指標値を用いたベクトル演算は遅らせる必要がなくなる。よってｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１は、この変化を反映するように更新される。
【００２７】
図３の実施形態において、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１は、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３００およびｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８を入力として受け付けるｖｐａｎｄ命令を実行することにより更新される。図６Ａは、ｖｐａｎｄ命令の方法の実施形態を示す。図６Ａに示すようにｖｐａｎｄ命令はｎのビットからなる第１ブロック、およびそれぞれｎビットからなる複数の要素を有するベクトルを受け付ける。その後、ベクトル内の各要素に対するｎのビットからなる第１ブロックのビット単位のＡＮＤが実行される。図６Ｂは半導体チップとして設計されるｖｐａｎｄ命令の論理設計の一例を示す。
【００２８】
図３を参照すると、ｖｐａｎｄ命令のｎのビットからなるブロックは、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８に対応し、ｖｐａｎｄ命令の入力ベクトルは、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１に対応する。ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８が、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３０１内の各要素にビット単位でＡＮＤで連結されている場合、新たなｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３１６が生成される。ここで、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８とのビット単位のＡＮＤは、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐの情報から、ｂの右端の指標を取り除くこととなる。言い換えると、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３０８の右端の位置にある０によって反映されるように、ｂの右端の指標値は最初のベクトル演算３１５での実行が許可される。よって、ｂの右端の指標値は既存の依存関係の一部ではなくなる。ｖｐａｎｄ命令によって実行される論理ＡＮＤは、ｂの右端の指標の実行に依存していた指標を特定する。ｂの右端の指標の次の指標は、次のベクトル演算で用いられ得る。
【００２９】
よって、新たなｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３１６（および元のｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９）を用いたｖｐｔｅｓｔ命令の次の実行により、新たなｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３１７が生成される。しかし最初のシーケンスとは異なり、ｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３２によるｖｐｔｅｓｔ命令の出力マスクによって、ｖｐｔｅｓｔ命令の出力が、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３１７の論理反転とは異なるものとなる。詳細には、新たなｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎ３３３は、００１００の値を有し、この値は、既に実行されたｂの指標値分だけ少ない、コンフリクトするｂの次の指標に対応する。よって、次のギャザー、ベクトル演算、スキャッタ命令シーケンスがｂの真ん中の指標のみを用いて実行される３１９。再び図２を簡単に参照すると、この時点で処理２０２までの２度目のランが完了したこととなる。
【００３０】
しかし演算３１９が完了すると新たに更新されたｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３４を確認することにより、ｂの全ての指標がまだギャザー／ベクトル演算／スキャッタ処理に用いられていないことが分かる。よって、ｂの指標の間の依存性をまださらに検証する必要がある。
【００３１】
上述したように、ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造は、最新のｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐ、およびｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３１６、３１７を入力として用いて、ｖｐａｎｄ（ｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐ、ｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓ）命令を実行することにより更新される。結果として、他の新たなｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３２０が得られる。ここで、ｖｐａｎｄ命令によって実行される論理ＡＮＤによって、ｂの真ん中の指標の実行に依存していた指標が特定される。ｂの真ん中の指標の次の指標（つまり、ｂの左端の指標）は、次のベクトル演算で用いられ得る。
【００３２】
よって、新たなｉｎｄｉｃｅｓ＿ｈａｖｉｎｇ＿ｄｅｐｅｎｄｅｎｃｙ＿ｒｅｌａｔｉｏｎｓｈｉｐデータ構造３２０（および元のｏｒｄｅｒ＿ｏｆ＿ｄｅｐｅｎｄｅｎｃｙ＿ｍａｓｋ３０９）を用いたｖｐｔｅｓｔ命令の次の実行により、他の新たなｃｏｎｆｌｉｃｔｅｄ＿ｏｕｔ＿ｉｎｄｉｃｅｓデータ構造３２１が生成される。データ構造３２１の論理反転に対する更新されたｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３４のマスキングは、他の新たなｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３３５に対応する１００００。新たなｉｎｄｉｃｅｓ＿ｐｅｒｍｉｔｔｅｄ＿ｆｏｒ＿ｅｘｅｃｕｔｉｏｎデータ構造３３５は、次のギャザー／ベクトル演算／スキャッタシーケンスにおいて、ｂの左端の指標のみ処理を行う必要があることを示す。再び図２を簡単に参照すると、この時点で処理２０２までの３度目のランが完了したこととなる。
【００３３】
よって、最後のギャザー、ベクトル演算、スキャッタ命令シーケンスが、ｂの左端の指標のみを用いて行われる３２３。続いてｅｌｅｍｅｎｔｓ＿ｌｅｆｔ＿ｍａｓｋ３３６を０００００の値へ更新することにより、他の繰り返しは必要ではなくなり、実行が完了する。
【００３４】
図３の擬似コードを参照すると、最初のｖｃｏｎｆｌｉｃｔ（ｂ，ｂ）命令３００に表されるように、この特定の例は、コンフリクトが同一のベクトル（この場合、ベクトルｂ）内で検出される場合を対象としていることが分かる。より一般的には、１以上のセットの指標を用いて（図３に示すギャザー／ベクトル演算命令シーケンスに関する入力ベクトルなどの）ベクトル演算に用いられる入力ベクトルを形成してもよい。同様に、１以上のセットの指標を用いて、出力ベクトルを（図３のスキャッタなどの）メモリに書き込んでもよい。入力ベクトルを構築する、および／または出力ベクトルをメモリへ書き込むのに用いた指標間のコンフリクトは、同一、または異なるベクトル間で検出し得る。繰り返すが、図３はベクトルが同一（ｂとｂ）である例を示す。しかし他の状況においては、コンフリクトする指標は、異なるベクトル（例えば、ｖｃｏｎｆｌｉｃｔ（ｂ，ｃ））を比較することによって検出し得る。例えば、最初のベクトル（例えばｂ）を後に続くベクトル演算に用いられる入力ベクトルを構築する基礎として用い、他方、他のベクトル（例えばｃ）を、ベクトル演算の結果をメモリへ分散させる基礎として用いてもよい。よって、ｖｃｏｎｆｌｉｃｔ命令を同一、または異なる入力ベクトルに対して用い得ることを理解いただけるであろう。
【００３５】
図７は、Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ（ＣＩＳＣ）、Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ（ＲＩＳＣ）、およびＶｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ（ＶＬＩＷ）などの多くの異なるタイプの処理コアアーキテクチャであり得る汎用処理コア７００を示す。図７の汎用処理コア７００は、１）命令を（キャッシュまたはメモリなどから）フェッチするフェッチユニット７０３、２）命令を復号化する復号化ユニット７０４、３）実行ユニット７０６への命令の発行タイミング、および／または順序を決定する（任意選択的に用いられる）スケジューラユニット７０５、４）命令を実行する実行ユニット７０６、および５）命令の実行が問題なく完了したことを知らせるリタイヤユニット７０７を含む。なお処理コアは、実行ユニット７０６のマイクロ動作を部分的に、または全体的に制御するマイクロコード７０８を含んでも、含まなくてもよい。
【００３６】
なお、実行ユニットは、ｖｃｏｎｆｌｉｃｔ命令、ｖｐｔｅｓｔ命令、およびｖｐａｎｄ命令を実行することが出来る。これらの命令に対応する論理回路は、異なる実行ユニットに分散していてもよく、若しくは同一の実行ユニットに含まれてもよい。２以上の命令が、単一の実行ユニットによって実行されてもよい。実行ユニットはベクトル命令に対応可能であってもよい。実行ユニットは、ｇａｔｈｅｒ命令およびｓｃａｔｔｅｒ命令に対応可能であってもよい。
【００３７】
上記にて説明した機能を有する処理コアは、様々なコンピューティングシステムで実装されてもよい。図８は、（コンピュータなどの）コンピューティングシステムの実施形態を示す。例示的なコンピューティングシステムは、１）２つ、または３つの、スカラ整数命令を実行することが出来る、またはベクトル命令を実行することが出来るレジスタを含んでよい１以上の処理コア８０１、２）メモリ制御ハブ（ＭＣＨ）８０２、３）（ＤＤＲ  ＲＡＭ、ＥＤＯ  ＲＡＭなど様々な異なるタイプの）システムメモリ８０３、４）キャッシュ８０４、５）Ｉ／Ｏ制御ハブ（ＩＣＨ）８０５、６）グラフィックプロセッサ８０６、７）（ブラウン管（ＣＲＴ）、フラットパネル、薄膜トランジスタ（ＴＦＴ）、液晶ディスプレイ（ＬＣＤ）、ＤＰＬなど様々な異なるタイプの）ディスプレイ／スクリーン８０７、および１以上のＩ／Ｏデバイス８０８を備える。
【００３８】
１以上の処理コア８０１は、コンピューティングシステムが実施するあらゆるソフトウェアルーチンを行うべく、命令を実行する。命令はデータに対して実行される何らかのタイプの演算を伴うことが多い。データおよび命令は両方とも、システムメモリ８０３およびキャッシュ８０４に格納されている。典型的にはキャッシュ８０４は、システムメモリ８０３の待ち時間よりも短い待ち時間となるように設計されている。例えばキャッシュ８０４はプロセッサと同じシリコンチップに統合され、および／または、より高速なＳＲＡＭセルを用いて構築され、他方、システムメモリ８０３は、より低速なＤＲＡＭセルを用いて構築されてもよい。より頻繁に用いられる命令およびデータをシステムメモリ８０３ではなくキャッシュ８０４内に格納することにより、コンピューティングシステムの全体的な性能効率は向上する。
【００３９】
システムメモリ８０３はコンピューティングシステム内の他のコンポーネントが利用できるようにされている。例えば、コンピューティングシステムの様々な（キーボード、マウス、プリンタポート、ＬＡＮポート、モデムポートなどの．）インタフェースを介して受信したデータ、または（ハードディスクドライブなどの）コンピューティングシステムの内部記憶素子から取得したデータは、システムメモリ８０３内で一時的にキューに入れられ、その後、ソフトウェアプログラムの実行に際し、１以上のプロセッサ８０１により処理が行われる。同様に、コンピューティングシステムのインタフェースの１つを介して外部のエンティティへコンピューティングシステムから送信されるべき、または内部記憶素子に格納されるべきとソフトウェアプログラムが判断したデータは、システムメモリ８０３内で一時的にキューに入れられ、その後、送信または格納される。
【００４０】
ＩＣＨ８０５は、そのようなデータが、システムメモリ８０３と、対応する適切なコンピューティングシステムのインタフェース（およびコンピューティングシステムの設計によっては、内部記憶装置）との間で確実に受け渡しされるようにする。ＭＣＨ８０２は、時間上互いに近接して発生し得る、プロセッサ８０１、インタフェース、および内部記憶素子間の、システムメモリ８０３へのアクセスに関する様々な競合するリクエストを制御する。
【００４１】
１以上のＩ／Ｏデバイス８０８も典型的なコンピューティングシステム内で実装されてもよい。一般的にＩ／Ｏデバイスはコンピューティングシステムとのデータの授受に用いられ（ネットワークアダプタなど）、若しくは、コンピューティングシステム内の大規模な不揮発性格納に用いられる（ハードディスクドライブなど）。ＩＣＨ８０５は、自身とＩ／Ｏデバイス８０８との間の双方向性ポイントツーポイントリンクを有する。
【００４２】
上記で説明した処理は、所定の機能を実現するための命令を機械に対し実行させる機械実行可能命令などのプログラムコードを用いて実行されてもよい。この文脈において、「機械」は、中間型（ｉｎｔｅｒｍｅｄｉａｔｅ  ｆｏｒｍ）の（または「抽象的な（ａｂｓｔｒａｃｔ）」）命令をプロセッサ特定の命令へ変換する機械（例えば、「バーチャルマシン」（例えば、Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）、インタプリタ、共通言語ランタイム、高水準言語のバーチャルマシンなどの抽象的実行環境（ａｂｓｔｒａｃｔ  ｅｘｅｃｕｔｉｏｎ  ｅｎｖｉｒｏｎｍｅｎｔ））、および／または、汎用プロセッサおよび／または特定用途向けプロセッサなど命令を実行する、半導体チップ上に配置される（トランジスタを用いて実装される「論理回路」など）電子回路であってよい。上記で説明した処理は、プログラムコードを実行することなく、（機械の代わりに、または機械と組み合わせて）処理（またはその一部）を実行する電子回路によっても実行されてよい。
【００４３】
上記で説明した処理は、様々なソフトウェア開発フレームワーク（例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの．ＮＥＴ、Ｍｏｎｏ、Ｊａｖａ（登録商標）、Ｏｒａｃｌｅ  ＣｏｒｐｏｒａｔｉｏｎのＦｕｓｉｏｎなど）でサポートされる様々なオブジェクト指向、または非オブジェクト指向のコンピュータプログラム言語（例えば、Ｊａｖａ（登録商標）、Ｃ＃、ＶＢ、Ｐｙｔｈｏｎ、Ｃ、Ｃ＋＋、Ｊ＃、ＡＰＬ、Ｃｏｂｏｌ、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ｐｅｒｌなど）を用いてソースレベルのプログラムコードで実行されてもよい。ソースレベルのプログラムコードは、抽象的実行環境（例えば、Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ、共通言語ランタイム、高水準言語の仮想マシン、インタプリタなど）で読み取られ得る（Ｊａｖａ（登録商標）バイトコード、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｌａｎｇｕａｇｅなど）中間型のプログラムコードへ変換されてもよく、若しくは、直接オブジェクトコードへコンパイルされてもよい。
【００４４】
様々な方法によれば、１）（ランタイム時に（例えばＪＩＴコンパイラ）などに）中間型プログラムコードをコンパイルすることにより、２）中間型プログラムコードをインタプリトすることにより、３）ランタイム時に中間型プログラムコードをコンパイルし、かつ、中間型プログラムコードをインタプリトすることにより、抽象的実行環境は中間型プログラムコードをプロセッサ特定コードへ変換してもよい。抽象的実行環境は（ＵＮＩＸ（登録商標）、ＬＩＮＵＸ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）のシリーズを含むＭｉｃｒｏｓｏｆｔのオペレーティングシステム、ＭａｃＯＳ  Ｘを含むＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒｓのオペレーティングシステム、Ｓｕｎ／Ｓｏｌａｒｉｓ、ＯＳ／２、Ｎｏｖｅｌｌなど）様々なオペレーティングシステムで実行され得る。
【００４５】
プログラムコードの格納に製品が用いられてもよい。プログラムコードを格納する製品は、１以上のメモリ（１以上のフラッシュメモリ、（スタティック、ダイナミック、またはその他の）ランダムアクセスメモリ）、光学ディスク、ＣＤ−ＲＯＭ、ＤＶＤ  ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード、光学カード、電子命令の格納に適した他のタイプの機械可読媒体として実装されてよいが、これらに限定されるわけではない。プログラムコードは、（（ネットワーク接続などの）通信リンクなどを介し）伝搬媒体の形態で実装されるデータ信号を介し、（サーバなどの）遠隔コンピュータから（クライアントなどの）要求するコンピュータへダウンロードされてもよい。
【００４６】
以上、特定の例示的な実施形態を参照し本願発明を説明してきた。しかし、請求項で説明される本願発明の幅広い思想および態様から逸脱することなく、様々な修正および変更を加えることが可能であることが明らかである。よって本明細書および図面は、限定的ではなく例示的なものとして見なされるべきである。
【図１Ａ】
2014504418.tif 000003
【図１Ｂ】
2014504418.tif 000004
【図２】
2014504418.tif 000005
【図３−１】
2014504418.tif 000006
【図３−２】
2014504418.tif 000007
【図４Ａ】
2014504418.tif 000008
【図４Ｂ】
2014504418.tif 000009
【図５Ａ】
2014504418.tif 000010
【図５Ｂ】
2014504418.tif 000011
【図６Ａ】
2014504418.tif 000012
【図６Ｂ】
2014504418.tif 000013
【図７】
2014504418.tif 000014
【図８】
2014504418.tif 000015
【国際調査報告】
2014504418.tif 000016
2014504418.tif 000017
2014504418.tif 000018