特許第6187988号(P6187988)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6187988
(24)【登録日】2017年8月10日
(45)【発行日】2017年8月30日
(54)【発明の名称】ベクトルコンフリクト命令
(51)【国際特許分類】
   G06F 17/16 20060101AFI20170821BHJP
   G06F 9/38 20060101ALI20170821BHJP
   G06F 9/30 20060101ALI20170821BHJP
【FI】
   G06F17/16 Q
   G06F9/38 310G
   G06F9/38 350A
   G06F9/30 350A
【請求項の数】24
【全頁数】17
(21)【出願番号】特願2015-211317(P2015-211317)
(22)【出願日】2015年10月27日
(62)【分割の表示】特願2013-546180(P2013-546180)の分割
【原出願日】2011年12月5日
(65)【公開番号】特開2016-28351(P2016-28351A)
(43)【公開日】2016年2月25日
【審査請求日】2015年10月28日
(31)【優先権主張番号】12/976,616
(32)【優先日】2010年12月22日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ヒューズ、クリストファー ジェイ.
(72)【発明者】
【氏名】チャーニー、マーク ジェイ.
(72)【発明者】
【氏名】チェン、イエン−クワン
(72)【発明者】
【氏名】コーバル、ヘスス
(72)【発明者】
【氏名】フォーサイス、アンドリュー ティ.
(72)【発明者】
【氏名】ジルカル、ミリンド ビー.
(72)【発明者】
【氏名】ハル、ジョナサン シー.
(72)【発明者】
【氏名】井戸 秀樹
(72)【発明者】
【氏名】バレンタイン、ロバート
(72)【発明者】
【氏名】ヴィーデメイアー、ジェフリー
【審査官】 田中 幸雄
(56)【参考文献】
【文献】 再公表特許第2004/032435(JP,A1)
【文献】 特開平3−260865(JP,A)
【文献】 特開2002−108837(JP,A)
【文献】 米国特許出願公開第2010/0058037(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 9/30
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
半導体チップ上の電子回路により、
a)ベクトル演算の入力ベクトル内のデータ要素に対して実行されるデータ演算間の依存関係を特定する複数のセグメントを有する第1データ構造を生成する段階であり、前記複数のセグメントのそれぞれは、前記入力ベクトルの他のデータ要素と比較して、前記入力ベクトルのデータ要素に対応する前記依存関係の値を格納するためのものである段階と、
b)データのコンフリクトを生じることなく前記ベクトル演算により同時に演算される前記入力ベクトルのデータ要素の位置を特定する第2データ構造を生成する段階であり、前記第2データ構造は、互いに依存関係にあるデータ演算の実行順序を示すータ構造を用いて前記第1データ構造のマスキングを行うことにより少なくとも部分的に生成される段階と、
c)前記第2データ構造により参照されるデータ要素を用いて次の入力ベクトルを形成する段階と、
d)前記次の入力ベクトルに対し前記ベクトル演算を実行する段階と、
を備える、方法。
【請求項2】
前記a)の段階はまず、前記入力ベクトルの前記データ要素を対象とする指標のセット内の各指標を第2の指標のセットの他の指標と比較することにより実行される、請求項1に記載の方法。
【請求項3】
前記指標のセットと前記第2の指標のセットとは互いに同じセットである、請求項2に記載の方法。
【請求項4】
前記指標のセットと前記第2の指標のセットとは互いに異なるセットである、請求項2に記載の方法。
【請求項5】
前記a)の段階の次のイテレーションは、完了したばかりのイテレーションの第1データ構造を、前記データ要素の位置のうち、対応する演算がデータの依存関係に応じて遅らされたデータ要素の位置を対象とする指標を特定する第3データ構造に対してマスキングする段階を含む、請求項2から4のいずれか1項に記載の方法。
【請求項6】
前記比較は第1処理コア命令を用いて実行され、
前記完了したばかりのイテレーションの第1データ構造の第3データ構造に対するマスキングは、第2処理コア命令を用いて実行される、請求項5に記載の方法。
【請求項7】
前記b)の段階は、第3処理コア命令を用いて実行される、請求項6に記載の方法。
【請求項8】
前記次の入力ベクトルを形成する段階はさらに、前記ベクトル演算に用いられる前記次の入力ベクトルのデータ構造を形成すべく、前記第2データ構造を用いてギャザー命令を実行する段階を有する、請求項1から7のいずれか1項に記載の方法。
【請求項9】
前記ベクトル演算が前記次の入力ベクトルに対して実行された後、前記ベクトル演算によって生成されたデータ要素を格納すべく、前記第2データ構造を用いてスキャッタ命令を実行する段階をさらに備える、請求項8に記載の方法。
【請求項10】
a)ベクトル演算の入力ベクトル内のデータ要素に対して実行されるデータ演算間の依存関係を特定する複数のセグメントを有する第1データ構造を生成する第1論理回路と、
b)データのコンフリクトを生じることなく前記ベクトル演算により同時に演算がされる前記入力ベクトルのデータ要素の位置を特定する第2データ構造を生成する第2論理回路であり、互いに依存関係にあるデータ演算の実行順序を示すータ構造を用いて前記第1データ構造のマスキングを行うマスキング回路を有する前記第2論理回路と、
c)前記第2データ構造により参照されるデータ要素を用いて形成される次の入力ベクトルに対し前記ベクトル演算を実行するベクトル実行ユニットと、
d)前記ベクトル演算が前記入力ベクトルの全ての位置のデータ要素に対して実行されるまで前記第2論理回路および前記ベクトル実行ユニットが実行する処理を順に繰り返す制御フローのイテレーションにおいて前記第1データ構造の更新をする第3論理回路と
を備え、
前記複数のセグメントのそれぞれは、前記入力ベクトルの他のデータ要素と比較して、前記入力ベクトルのデータ要素に対応する前記依存関係の値を記憶するためのものであり、
前記第2論理回路は、前記イテレーションにおいて前記第2データ構造を更新する、半導体チップ上の処理コア。
【請求項11】
前記第1論理回路は、前記入力ベクトルの前記データ要素を対象とする指標のセット内の各指標を第2の指標のセットの他の指標と比較する比較回路を有する、請求項10に記載の半導体チップ上の処理コア。
【請求項12】
前記第3論理回路は、完了したばかりのイテレーションの第1データ構造を、前記データ要素の位置のうち、対応する演算がデータの依存関係に応じて遅らされたデータ要素の位置を対象とする指標を特定する第3データ構造に対してマスキングするマスキング回路を有する、請求項11に記載の半導体チップ上の処理コア。
【請求項13】
前記第1論理回路は前記処理コアの第1命令の実行ユニット内に配置され、
前記第2論理回路は前記処理コアの第2命令の実行ユニット内に配置され、
前記第3論理回路は、前記処理コアの第3命令の実行ユニット内に配置される、請求項12に記載の半導体チップ上の処理コア。
【請求項14】
前記次の入力ベクトルを形成するべく前記第2データ構造を用いてギャザー命令を実行する実行ユニットをさらに備える、請求項10から13のいずれか1項に記載の半導体チップ上の処理コア。
【請求項15】
スキャッタ命令を実行する実行ユニットをさらに備える、請求項14に記載の半導体チップ上の処理コア。
【請求項16】
依存関係を有する複数の要素を特定すべく、第1入力ベクトル内の各要素を第2入力ベクトル内の全ての各要素と比較する比較回路と、
複数のセグメントを有するデータ構造を生成する論理回路と、
を備え、
前記複数のセグメントのそれぞれは、前記第2入力ベクトルの全ての各要素と比較して、前記第1入力ベクトルの要素に対応する前記依存関係の値を格納するためのものであ
前記比較回路はまず、前記第1入力ベクトルの前記複数の要素を対象とする指標のセット内の各指標を第2の指標のセットの他の指標と比較することにより実行される、半導体チップ上で実装される処理コア。
【請求項17】
前記第1入力ベクトルと前記第2入力ベクトルは、同一である、請求項16に記載の処理コア。
【請求項18】
ベクトル演算命令を実行するベクトル実行ユニットをさらに備える、請求項17に記載の処理コア。
【請求項19】
ギャザー命令を実行するギャザー実行論理回路をさらに備える、請求項18に記載の処理コア。
【請求項20】
スキャッタ命令を実行するスキャッタ実行論理回路をさらに備える、請求項19に記載の処理コア。
【請求項21】
前記複数の要素は、複数の指標をそれぞれ有する、請求項16から20のいずれか1項に記載の処理コア。
【請求項22】
依存関係を有する複数の要素を特定すべく、第1入力ベクトル内の各要素を第2入力ベクトル内の全ての各要素と比較する比較回路と、
複数のセグメントを有するデータ構造を生成する論理回路と、
を備え、
前記複数のセグメントのそれぞれは、前記第2入力ベクトルの全ての各要素と比較して、前記第1入力ベクトルの要素に対応する前記依存関係の値を格納するためのものであ
前記第1入力ベクトルと前記第2入力ベクトルは、同一である、半導体チップ上で実装される処理コア。
【請求項23】
依存関係を有する複数の要素を特定すべく、第1入力ベクトル内の各要素を第2入力ベクトル内の全ての各要素と比較する比較回路と、
複数のセグメントを有するデータ構造を生成する論理回路と、
ベクトル演算命令を実行するベクトル実行ユニットと、
を備え、
前記複数のセグメントのそれぞれは、前記第2入力ベクトルの全ての各要素と比較して、前記第1入力ベクトルの要素に対応する前記依存関係の値を格納するためのものである、半導体チップ上で実装される処理コア。
【請求項24】
格納装置と、
処理コアと
を備え、
前記処理コアは、
第1入力ベクトル内の各要素を第2入力ベクトル内の全ての各要素と比較する比較回路と、
複数のセグメントを有するデータ構造を生成する論理回路と、
を有し、
前記複数のセグメントのそれぞれは、前記比較回路が前記第2入力ベクトルの全ての各要素と比較して、前記第1入力ベクトルの要素に対応する依存関係の値を記憶するためのものであり、
前記比較回路はまず、前記第1入力ベクトルの要素を対象とする指標のセット内の各指標を第2の指標のセットの他の指標と比較することにより実行される、コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本願発明の分野は、一般的にコンピュータサイエンスに関し、より詳細には、ベクトルコンフリクト命令に関する。
【背景技術】
【0002】
コンピュータサイエンスの分野では、「スカラ」および「ベクトル」の2つのタイプのプロセッサアーキテクチャが広く知られている。スカラプロセッサは、単一のセットのデータに対する演算を実行するための命令を実行するよう設計されており、他方、ベクトルプロセッサは、複数のセットのデータに対する演算を実行するための命令を実行するよう設計されている。図1Aおよび図1Bは、スカラプロセッサとベクトルプロセッサとを比較し、それらの間の基本的な差を表すための例を示す。
【0003】
図1Aは、単一のオペランドセットであるAおよびBが共にANDで連結され、単一の(または「スカラ」)結果Cを生成する(つまり、AB=C)、スカラAND命令の例を示す。対照的に、図1Bは、2つのオペランドセットであるA/BおよびD/Eのそれぞれが共に平行してANDで連結され、ベクトル結果C、Fを同時に生成する(つまり、A.AND.B=CおよびD.AND.E=F)、ベクトルAND命令の例を示す。
【0004】
当技術分野で周知のように、典型的には、入力オペランドおよび出力結果の両方が、それぞれ専用のレジスタに格納される。例えば、多くの命令は、2つの入力オペランドを有する。よって、2つの別個の入力レジスタを用いて、一時的にそれぞれの入力オペランドが格納される。さらにこれらの同じ命令が、第3(結果)レジスタ内に一時的に格納されることになる出力値を生成する。図1Aおよび1Bは、入力レジスタ101a、101b、102a、102bおよび結果レジスタ103a、bのそれぞれを示す。「スカラ」と「ベクトル」とを比較したうえでのそれぞれの特徴を容易に認識出来るであろう。
【0005】
つまり、図1Aに示すスカラ設計の入力レジスタ101a、102aは、スカラ値(それぞれAおよびB)のみを保持する。同様に、図1Aに示すスカラ設計の結果レジスタ103aも、スカラ値(C)のみを保持する。対照的に、図1Bに示すベクトルシステムの入力レジスタ101b、102bは、ベクトル(レジスタ101b内にA、D、およびレジスタ102b内にB、E)を保持する。同様に、図1Bに示すベクトルシステムの結果レジスタ103bは、ベクトル値(C、F)を保持する。用語の使用の都合上、図1Bに示すベクトルシステムのレジスタ101b、102b、103bのコンテンツは、全般的に「ベクトル」と呼ぶことが出来、ベクトル内の各スカラ値は、「要素」と呼ぶことが出来る。よって、一例として、レジスタ101bは「要素」Aおよび「要素」Dからなる「ベクトル」A、Dを格納している、と表現することが出来る。
【発明の概要】
【発明が解決しようとする課題】
【0006】
ベクトル演算が、平行して実行される複数の演算の性能に対応するとすれば、入力ベクトルの一要素に対するある演算が、当該入力ベクトル内の他の要素に対して実行される他の演算への依存性を有する場合、ベクトル演算において課題が生じ得る。
【図面の簡単な説明】
【0007】
添付図面において本願発明を例示するが、本願発明はそれら図面に示される実施形態に限定されるわけではない。同様の参照符号は同様の要素を指す。
図1A図1Aはスカラ処理を示す。
図1B図1Bはベクトル処理を示す。
図2図2は、ベクトルコンフリクトを検出するための命令により実施される方法を示す。
図3図3は、図2の方法の実施形態に係る擬似コード表現を示す。
図4A図4Aは第1ベクトルコンフリクト命令に関する。
図4B図4Bは第1ベクトルコンフリクト命令に関する。
図5A図5A(従来技術)はvptest命令に関する。
図5B図5B(従来技術)はvptest命令に関する。
図6A図6Aは第2ベクトルコンフリクト命令に関する。
図6B図6Bは第2ベクトルコンフリクト命令に関する。
図7図7は例示的な処理コアを示す。
図8図8は例示的なコンピューティングシステムを示す。
【発明を実施するための形態】
【0008】
上記の背景技術に説明したようにベクトル演算には、入力ベクトル要素に対する任意の演算が、当該入力ベクトルの他の要素に対して実行される他の演算に対して依存性を有する場合に起こり得る課題がある。この特定の課題が起こり得る状況の一例は、「ギャザー」命令および「スキャッタ」命令を用いた場合である。
【0009】
例えばギャザー命令は、データ配列の指標により特定されるデータ値を「集める」ことにより、後に続くベクトル演算の入力ベクトルを構成するのに用いられる。例えばデータ配列「A」が100のエントリを有する場合、「gather A[15;34;66;78]」のギャザー命令によって、配列Aの15番目、34番目、66番目、および78番目の指標位置におけるデータ値がフェッチされる。フェッチされたデータ値はその後、ベクトル演算に用いられる入力ベクトルのデータ要素を形成するのに用いられる。「スキャッタ」命令は「ギャザー」命令の反対の処理を行うものとして見なすことが出来る。詳細には、scatter A[15;34;66;78]のスキャッタ命令により、値(例えば、ベクトル演算により生成された出力ベクトルの各要素)が配列Aの15番目、34番目、66番目、および78番目の指標位置に格納される。
【0010】
よって、
S<=gather A[a;b;c;d];
T<=vector operation on S;
scatter(A[a;b;c;d];T)
の命令シーケンスにより、1)Aのa、b、c、およびdの指標位置からデータオペランドがフェッチされ、2)これらのオペランドに対しベクトル演算が実行され、3)結果の要素がそれぞれAのa、b、c、およびdの指標位置に格納される。
【0011】
場合によってはギャザー命令(およびスキャッタ命令)に与えられた指標値のセットに、ベクトル演算内の依存関係が反映されている。 例えば、
S<=gather A[a;b;c;a];
T<=vector operation on S;
scatter (A[a;b;c;a];T)
命令シーケンスには、左端のA[a]の値に対して実行されるベクトル演算が右端のA[a]の値に対して実行されるベクトル演算の結果に依存することが反映されている。つまり、正しい演算は、1)operation(右端のA[a])=>R;2)operation(R)に対応する。データ間の依存性に関する対策が事前に取られていなければ、誤った結果が生成され得る。詳細には、この例において、A[a]の最終的な結果は、operation(R)ではなくoperation(A[a])となる。
【0012】
図2は、ベクトル演算に用いられる入力ベクトル内で特定された依存性を問題なく反映させる方法を示す。詳細には、図2の方法において、(例えば2以上の同一の値を有する指標により特定される)同一の入力ベクトル内の同一のオペランドに対する演算を同時に実行することを適切に避ける。代わりに、複数回現れる指標値のそれぞれのインスタンスに対して行われるサイクルを複数含む一連のサイクルによって、演算が分けて行われる。
【0013】
例えば、入力ベクトルにおいて同一の指標値が3回現れる場合、ベクトル演算が3回行われる。このように、第2の演算は第1の演算の結果を入力オペランドとして用い、第3の演算は、第2の演算の結果を入力オペランドとして用いるので、データの依存性が反映される。
【0014】
図3は、図2の方法の実施形態に係る擬似コードフローを示す。図4A、4B、5A、5B、6A、6Bは図3の擬似コードフローの説明を補足する詳細を追加的に示す。図2を参照すると、まず互いに依存性を有する指標が特定される201。ここで互いに依存性を有する指標は、上述したように、同一の入力ベクトルの異なる要素を定める、配列の同一の指標に対応してもよい。図3を参照すると、b=7,2,7,1,7のように、配列の指標が特定されている。よって、右端の指標値、真ん中の指標値、および左端の指標値がそれぞれ同一の値(7)を有するので、依存性を有する指標が3つある。他の最初の制御ベクトルはelements_left_mask330であり、これはギャザー/ベクトル演算/スキャッタ処理のシーケンスにまだ用いられていないbの要素を表す。フローの始まりにおいて、bの5つの全ての要素を示すelements_left_mask=1 1 1 1 1は、まだ処理されていない。
【0015】
図3の擬似コードは、vconflict(b,b)命令300の実行により、indices_having_dependency_relationshipデータ構造301が生成されることを示す。図4Aは、vconflict(b,b)命令の方法401を示し、図4Bは、vconflict(b,b)命令を実行するよう半導体チップ内に設計されるハードウェア論理設計を示す。図4Aおよび図4Bに示すように、vconflict(b,b)命令によって、任意の入力ベクトルの各要素が他の入力ベクトルの全ての各要素と比較され、それぞれの比較の結果が生成される401。図3に示す擬似コードの方法において、vconflict(b,b)命令は、両方の入力に対して同一のベクトル(b)を用いて実行される。
【0016】
図4Bのハードウェア設計は、マルチプレクサ411およびデマルチプレクサ412のチャネル選択のそれぞれが適切に協働して動作するようにコントローラ410の動作を指示する、マイクロコード化された、および/または状態機械によるアプローチを用いて実施されてもよい。詳細には、コントローラ410が左側の指標レジスタ413の指標値のうち任意の値を多重化し、コンパレータシステム(comparator stem)414へと送る。コンパレータシステム414は選択された指標値を右側の指標レジスタ415内の全ての各指標値と比較する。デマルチプレクサ412はコンパレータシステム414の出力を、左側の指標レジスタ413の選択された値とアラインされた出力レジスタ416のセグメントへと向ける。代替的な方法においては、マルチプレクサ、デマルチプレクサ、およびコントローラが全くなくてもよいように、コンパレータシステムはn×nのコンパレータを有してもよい(つまり、出力レジスタ416内で生成される比較結果の各ビットに関し別個のコンパレータが存在する)。
【0017】
図3のindices_having_dependency_relationshipデータ構造301の左端のセグメント302は、bの左端の値をbの全ての値のそれぞれと比較した場合の比較結果を示す。セグメント302には(bの値ごとに1つの)5つの結果が示されており、セグメント302内の結果はbの値のそれぞれとアラインされている。データ構造301の左端のセグメント302は「10101」であり、これは、bの左端の値がbの右端の値、bの真ん中の値、および自身(bの左端の値)に対して依存性を有することを示している。データ構造301のセグメント303は、bの左端から2番目の値(2)の比較に対応し、2の値がそれ自身以外に対して依存性を有さないことを示している(つまり、セグメント303が01000)。10101の値を有するセグメント304は、bの真ん中の値(7)が、それ自身、bの左端の値、およびbの右端の値に対して依存性を有することを示している。00010の値を有するセグメント305は、bの右端から2番目の値がそれ自身のみに対して依存性を有することを示している。10101の値を有するセグメント306は、bの右端の値(7)がbの左端の値、bの真ん中の値、およびそれ自身に対して依存性を有することを示している。
【0018】
図2を再び参照すると、(例えば、図3のindices_having_dependency_relationshipデータ構造301に示されるように)依存性を有する指標が特定されると、後に続くベクトル演算に関し、コンフリクトしない指標のセットが特定される。図3の擬似コードの例において、コンフリクトしない指標のセットが、indices_permitted_for_executionデータ構造331に示されている。ここでindices_permitted_for_executionデータ構造331は少なくとも部分的に、indices_having_dependency_relationshipデータ構造300およびorder_of_dependency_mask309を用いて論理演算を実行することにより構成される。
【0019】
order_of_dependency_mask309は依存性を有する指標が処理されるべき順序を表す。図3の特定の例において、依存性を有する右端の指標が最初にベクトル演算に用いられ、その後、右端から2番目の依存性を有する指標が後に続くベクトル演算サイクルに用いられるよう、依存関係は右から左の順序となっている。言い換えると、依存性を有する指標がbにおいて右から左の順序で各ベクトル演算に用いられるよう選択される。本例のb=7,2,7,1,7の特定の値において、このことは、右端の値である7が最初のギャザー/ベクトル演算/スキャッタイテレーションに用いられ、真ん中の値である7が2番目のギャザー/ベクトル演算/スキャッタイテレーションに用いられ、左端の値である7が3番目のギャザー/ベクトル演算/スキャッタイテレーションに用いられることに対応している。
【0020】
この順序は、order_of_dependencyマスク309のセグメントの各位置の「右側に」1が位置付けされることに反映されている。つまり、セグメント310はbの右端の値を表す。上記で説明した順序に関する規則を用いることにより(依存性を有するシークエンスにおいて、左の値の前に右の値が実行されることにより)、右端の値が、ベクトル演算における当該右端の値の利用を遅らせる依存性を(依存関係に関わっているにも関わらず)有していないこととなる(つまり、右端の値の処理が最初の演算サイクルにおいて実行される)。よって、セグメント310の値は00000となる。第2セグメント311には、bの右端から2番目の値がb内で依存性を有する場合、その依存性がbの右端の値に対するものであることが反映されている。よってその値は00001となる。第3セグメント312には、bの真ん中の値がb内で依存性を有する場合、その依存性がbの右端から2番目の値、および/またはbの右端の値に対するものであることが反映されている。よってその値は00011となる。第4セグメント313には、bの左端から2番目の値がb内で依存性を有する場合、その依存性がbの真ん中の値、bの右端から2番目の値、および/またはbの右端の値に対するものであることが反映されている。よってその値は00111となる。第5セグメント314には、bの左端の値がb内で依存性を有する場合、その依存性がbの左端から2番目の値、bの真ん中の値、bの右端から2番目の値、および/またはbの右端の値に対するものであることが反映されている。よってその値は01111となる。
【0021】
図3の例においてindices_permitted_for_executionデータ構造331は少なくとも部分的に、indices_having_dependency_relationshipデータ構造301およびorder_of_dependency_mask309を用いて論理演算を実行することにより構築されていた。ここで、conflicted_out_indicesデータ構造308は、indices_having_dependency_relationshipデータ構造301およびorder_of_dependency_mask309を入力として受け付けるvptest命令を実行することにより構築される。
【0022】
図5Aはvptest命令の演算の実施形態を示し、図5Bはvptest命令のハードウェア設計の実施形態を示す。ここで図5Aを参照すると、2つの入力ベクトルの同位置のセグメントの同位置のビットが比較される501。同一の論理値を有する同位置のビットからなる1以上のセットを有するセグメントが特定され502、マスクが適用される503。
【0023】
図5Bを参照すると、第1入力ベクトルがレジスタ510に配置され、第2入力ベクトルがレジスタ512に配置される。2つのベクトルのそれぞれのセグメント内で同位置のビットの組がANDゲート513を用いてANDで連結される。いずれかのANDゲートが1を生成した場合、1が、それぞれのビットが比較された同位置のセグメントに対応する出力520のセグメントに登録される。例えば、コントローラ514はマルチプレクサ515、516にセグメント517、518のビットを選択させる。ここでセグメント517、518はそれぞれ、レジスタ510、512内のそれぞれのベクトルの左端のセグメントに対応するので、それぞれのベクトル内において同位置にある。セグメント517、518の同位置のビットはANDゲート513によりANDで連結される。ANDで連結されたビットのいずれかの組が1の値を有するのであれば、1が(コントローラ514によるデマルチプレクサ521のチャネル選択制御を介して)レジスタ520のセグメント519に記録される。その後、出力523を生成するべく、マスキング層522がレジスタ520のコンテンツに対して適用される。
【0024】
図3に示す特定の擬似コードの例において、indices_having_dependency_relationshipデータ構造301がレジスタ510に配置され、order_of_dependency_mask309がレジスタ512に配置される。これらの入力ベクトルに関する、上記にて説明した図5Bに示すvptest回路設計の演算により、レジスタ520内のconflicted_out_indicesデータ構造308が生成される。conflicted_out_indicesデータ構造308は、b内での依存性が原因となり、後に続くベクトル演算サイクルのうちどの指標がコンフリクトするのかを特定する。図3が示すように、conflicted_out_indicesデータ構造308は、10100を値として有し、これは依存性が理由となり、後に続くベクトル演算において(この場合、bの右端の指標値である)、bの真ん中の指標値と左端の指標値が実行されないことを示す。conflicted_out_indicesデータ構造314の論理反転(!_conflicted_out_indicesデータ構造307)がその後、elements_left_mask330に対しマスキングされる。最初のイテレーションにおいてelements_left_maskは1 1 1 1 1である。よって、レジスタ520のconflicted_out_indicesベクトルは、出力レジスタ523において、indices_permitted_for_executionベクトル331として表される。
【0025】
再び図2を参照すると、ベクトル演算はその後、実行が許可された指標に対して実行される203。図3の擬似コードの例においては、ギャザー、ベクトル演算、スキャッタ命令シーケンス315が実行される。よって図3においては、i)indices_permitted_for_executionデータ構造307により特定されるAの値を選択するギャザー演算、ii)Aの集められた値に対して実行されるベクトル演算、およびiii)ベクトル演算の結果を再びデータ構造307において特定される指標へと格納するスキャッタ演算が示されている。ベクトル演算は実質的に、いかなるベクトル演算であってもよい。
【0026】
図2を参照すると、bの指標の全てがベクトル演算に用いられると、処理が完了し204、さもなくば、依存性を有する指標が201において再度特定される。図3の実施形態において、elements_left_maskが、最も新しいギャザー/ベクトル演算/スキャッタ命令シーケンスのうち、コンフリクトする要素としてelements_left_maskを再び定義することにより、更新される332。この場合、新たなelements_left_mask332は1 0 1 0 0の値に対応し、これは、最後のギャザー/ベクトル演算/スキャッタ命令シーケンスにbの真ん中の値および左端の値が用いられていないので、それらの値に対しこれから処理が行われることを示している。よって処理は完了しておらず、次のイテレーションを実行する必要がある。依存性を有する指標値のうちの最初の値(右端の指標値)の実行によって、bの指標値の間の依存関係が変化することとなる。詳細には、bの右端の指標値がベクトル演算に用いられたので、bの真ん中の指標値を用いたベクトル演算は遅らせる必要がなくなる。よってindices_having_dependency_relationshipデータ構造301は、この変化を反映するように更新される。
【0027】
図3の実施形態において、indices_having_dependency_relationshipデータ構造301は、indices_having_dependency_relationshipデータ構造300およびconflicted_out_indicesデータ構造308を入力として受け付けるvpand命令を実行することにより更新される。図6Aは、vpand命令の方法の実施形態を示す。図6Aに示すようにvpand命令はnのビットからなる第1ブロック、およびそれぞれnビットからなる複数の要素を有するベクトルを受け付ける。その後、ベクトル内の各要素に対するnのビットからなる第1ブロックのビット単位のANDが実行される。図6Bは半導体チップとして設計されるvpand命令の論理設計の一例を示す。
【0028】
図3を参照すると、vpand命令のnのビットからなるブロックは、conflicted_out_indicesデータ構造308に対応し、vpand命令の入力ベクトルは、indices_having_dependency_relationshipデータ構造301に対応する。conflicted_out_indicesデータ構造308が、indices_having_dependency_relationshipデータ構造301内の各要素にビット単位でANDで連結されている場合、新たなindices_having_dependency_relationshipデータ構造316が生成される。ここで、conflicted_out_indicesデータ構造308とのビット単位のANDは、indices_having_dependency_relationshipの情報から、bの右端の指標を取り除くこととなる。言い換えると、conflicted_out_indicesデータ構造308の右端の位置にある0によって反映されるように、bの右端の指標値は最初のベクトル演算315での実行が許可される。よって、bの右端の指標値は既存の依存関係の一部ではなくなる。vpand命令によって実行される論理ANDは、bの右端の指標の実行に依存していた指標を特定する。bの右端の指標の次の指標は、次のベクトル演算で用いられ得る。
【0029】
よって、新たなindices_having_dependency_relationshipデータ構造316(および元のorder_of_dependency_mask309)を用いたvptest命令の次の実行により、新たなconflicted_out_indicesデータ構造317が生成される。しかし最初のシーケンスとは異なり、elements_left_mask332によるvptest命令の出力マスクによって、vptest命令の出力が、conflicted_out_indicesデータ構造317の論理反転とは異なるものとなる。詳細には、新たなindices_permitted_for_execution333は、00100の値を有し、この値は、既に実行されたbの指標値分だけ少ない、コンフリクトするbの次の指標に対応する。よって、次のギャザー、ベクトル演算、スキャッタ命令シーケンスがbの真ん中の指標のみを用いて実行される319。再び図2を簡単に参照すると、この時点で処理202までの2度目のランが完了したこととなる。
【0030】
しかし演算319が完了すると新たに更新されたelements_left_mask334を確認することにより、bの全ての指標がまだギャザー/ベクトル演算/スキャッタ処理に用いられていないことが分かる。よって、bの指標の間の依存性をまださらに検証する必要がある。
【0031】
上述したように、indices_having_dependency_relationshipデータ構造は、最新のindices_having_dependency_relationship、およびconflicted_out_indicesデータ構造316、317を入力として用いて、vpand(indices_having_dependency_relationship、conflicted_out_indices)命令を実行することにより更新される。結果として、他の新たなindices_having_dependency_relationshipデータ構造320が得られる。ここで、vpand命令によって実行される論理ANDによって、bの真ん中の指標の実行に依存していた指標が特定される。bの真ん中の指標の次の指標(つまり、bの左端の指標)は、次のベクトル演算で用いられ得る。
【0032】
よって、新たなindices_having_dependency_relationshipデータ構造320(および元のorder_of_dependency_mask309)を用いたvptest命令の次の実行により、他の新たなconflicted_out_indicesデータ構造321が生成される。データ構造321の論理反転に対する更新されたelements_left_mask334のマスキングは、他の新たなindices_permitted_for_executionデータ構造335に対応する10000。新たなindices_permitted_for_executionデータ構造335は、次のギャザー/ベクトル演算/スキャッタシーケンスにおいて、bの左端の指標のみ処理を行う必要があることを示す。再び図2を簡単に参照すると、この時点で処理202までの3度目のランが完了したこととなる。
【0033】
よって、最後のギャザー、ベクトル演算、スキャッタ命令シーケンスが、bの左端の指標のみを用いて行われる323。続いてelements_left_mask336を00000の値へ更新することにより、他の繰り返しは必要ではなくなり、実行が完了する。
【0034】
図3の擬似コードを参照すると、最初のvconflict(b,b)命令300に表されるように、この特定の例は、コンフリクトが同一のベクトル(この場合、ベクトルb)内で検出される場合を対象としていることが分かる。より一般的には、1以上のセットの指標を用いて(図3に示すギャザー/ベクトル演算命令シーケンスに関する入力ベクトルなどの)ベクトル演算に用いられる入力ベクトルを形成してもよい。同様に、1以上のセットの指標を用いて、出力ベクトルを(図3のスキャッタなどの)メモリに書き込んでもよい。入力ベクトルを構築する、および/または出力ベクトルをメモリへ書き込むのに用いた指標間のコンフリクトは、同一、または異なるベクトル間で検出し得る。繰り返すが、図3はベクトルが同一(bとb)である例を示す。しかし他の状況においては、コンフリクトする指標は、異なるベクトル(例えば、vconflict(b,c))を比較することによって検出し得る。例えば、最初のベクトル(例えばb)を後に続くベクトル演算に用いられる入力ベクトルを構築する基礎として用い、他方、他のベクトル(例えばc)を、ベクトル演算の結果をメモリへ分散させる基礎として用いてもよい。よって、vconflict命令を同一、または異なる入力ベクトルに対して用い得ることを理解いただけるであろう。
【0035】
図7は、Complex Instruction Set(CISC)、Reduced Instruction Set(RISC)、およびVery Long Instruction Word(VLIW)などの多くの異なるタイプの処理コアアーキテクチャであり得る汎用処理コア700を示す。図7の汎用処理コア700は、1)命令を(キャッシュまたはメモリなどから)フェッチするフェッチユニット703、2)命令を復号化する復号化ユニット704、3)実行ユニット706への命令の発行タイミング、および/または順序を決定する(任意選択的に用いられる)スケジューラユニット705、4)命令を実行する実行ユニット706、および5)命令の実行が問題なく完了したことを知らせるリタイヤユニット707を含む。なお処理コアは、実行ユニット706のマイクロ動作を部分的に、または全体的に制御するマイクロコード708を含んでも、含まなくてもよい。
【0036】
なお、実行ユニットは、vconflict命令、vptest命令、およびvpand命令を実行することが出来る。これらの命令に対応する論理回路は、異なる実行ユニットに分散していてもよく、若しくは同一の実行ユニットに含まれてもよい。2以上の命令が、単一の実行ユニットによって実行されてもよい。実行ユニットはベクトル命令に対応可能であってもよい。実行ユニットは、gather命令およびscatter命令に対応可能であってもよい。
【0037】
上記にて説明した機能を有する処理コアは、様々なコンピューティングシステムで実装されてもよい。図8は、(コンピュータなどの)コンピューティングシステムの実施形態を示す。例示的なコンピューティングシステムは、1)2つ、または3つの、スカラ整数命令を実行することが出来る、またはベクトル命令を実行することが出来るレジスタを含んでよい1以上の処理コア801、2)メモリ制御ハブ(MCH)802、3)(DDR RAM、EDO RAMなど様々な異なるタイプの)システムメモリ803、4)キャッシュ804、5)I/O制御ハブ(ICH)805、6)グラフィックプロセッサ806、7)(ブラウン管(CRT)、フラットパネル、薄膜トランジスタ(TFT)、液晶ディスプレイ(LCD)、DPLなど様々な異なるタイプの)ディスプレイ/スクリーン807、および1以上のI/Oデバイス808を備える。
【0038】
1以上の処理コア801は、コンピューティングシステムが実施するあらゆるソフトウェアルーチンを行うべく、命令を実行する。命令はデータに対して実行される何らかのタイプの演算を伴うことが多い。データおよび命令は両方とも、システムメモリ803およびキャッシュ804に格納されている。典型的にはキャッシュ804は、システムメモリ803の待ち時間よりも短い待ち時間となるように設計されている。例えばキャッシュ804はプロセッサと同じシリコンチップに統合され、および/または、より高速なSRAMセルを用いて構築され、他方、システムメモリ803は、より低速なDRAMセルを用いて構築されてもよい。より頻繁に用いられる命令およびデータをシステムメモリ803ではなくキャッシュ804内に格納することにより、コンピューティングシステムの全体的な性能効率は向上する。
【0039】
システムメモリ803はコンピューティングシステム内の他のコンポーネントが利用できるようにされている。例えば、コンピューティングシステムの様々な(キーボード、マウス、プリンタポート、LANポート、モデムポートなどの.)インタフェースを介して受信したデータ、または(ハードディスクドライブなどの)コンピューティングシステムの内部記憶素子から取得したデータは、システムメモリ803内で一時的にキューに入れられ、その後、ソフトウェアプログラムの実行に際し、1以上のプロセッサ801により処理が行われる。同様に、コンピューティングシステムのインタフェースの1つを介して外部のエンティティへコンピューティングシステムから送信されるべき、または内部記憶素子に格納されるべきとソフトウェアプログラムが判断したデータは、システムメモリ803内で一時的にキューに入れられ、その後、送信または格納される。
【0040】
ICH805は、そのようなデータが、システムメモリ803と、対応する適切なコンピューティングシステムのインタフェース(およびコンピューティングシステムの設計によっては、内部記憶装置)との間で確実に受け渡しされるようにする。MCH802は、時間上互いに近接して発生し得る、プロセッサ801、インタフェース、および内部記憶素子間の、システムメモリ803へのアクセスに関する様々な競合するリクエストを制御する。
【0041】
1以上のI/Oデバイス808も典型的なコンピューティングシステム内で実装されてもよい。一般的にI/Oデバイスはコンピューティングシステムとのデータの授受に用いられ(ネットワークアダプタなど)、若しくは、コンピューティングシステム内の大規模な不揮発性格納に用いられる(ハードディスクドライブなど)。ICH805は、自身とI/Oデバイス808との間の双方向性ポイントツーポイントリンクを有する。
【0042】
上記で説明した処理は、所定の機能を実現するための命令を機械に対し実行させる機械実行可能命令などのプログラムコードを用いて実行されてもよい。この文脈において、「機械」は、中間型(intermediate form)の(または「抽象的な(abstract)」)命令をプロセッサ特定の命令へ変換する機械(例えば、「バーチャルマシン」(例えば、Java(登録商標) Virtual Machine)、インタプリタ、共通言語ランタイム、高水準言語のバーチャルマシンなどの抽象的実行環境(abstract execution environment))、および/または、汎用プロセッサおよび/または特定用途向けプロセッサなど命令を実行する、半導体チップ上に配置される(トランジスタを用いて実装される「論理回路」など)電子回路であってよい。上記で説明した処理は、プログラムコードを実行することなく、(機械の代わりに、または機械と組み合わせて)処理(またはその一部)を実行する電子回路によっても実行されてよい。
【0043】
上記で説明した処理は、様々なソフトウェア開発フレームワーク(例えば、Microsoft Corporationの.NET、Mono、Java(登録商標)、Oracle CorporationのFusionなど)でサポートされる様々なオブジェクト指向、または非オブジェクト指向のコンピュータプログラム言語(例えば、Java(登録商標)、C#、VB、Python、C、C++、J#、APL、Cobol、Fortran、Pascal、Perlなど)を用いてソースレベルのプログラムコードで実行されてもよい。ソースレベルのプログラムコードは、抽象的実行環境(例えば、Java(登録商標) Virtual Machine、共通言語ランタイム、高水準言語の仮想マシン、インタプリタなど)で読み取られ得る(Java(登録商標)バイトコード、Microsoft Intermediate Languageなど)中間型のプログラムコードへ変換されてもよく、若しくは、直接オブジェクトコードへコンパイルされてもよい。
【0044】
様々な方法によれば、1)(ランタイム時に(例えばJITコンパイラ)などに)中間型プログラムコードをコンパイルすることにより、2)中間型プログラムコードをインタプリトすることにより、3)ランタイム時に中間型プログラムコードをコンパイルし、かつ、中間型プログラムコードをインタプリトすることにより、抽象的実行環境は中間型プログラムコードをプロセッサ特定コードへ変換してもよい。抽象的実行環境は(UNIX(登録商標)、LINUX(登録商標)、Windows(登録商標)のシリーズを含むMicrosoftのオペレーティングシステム、MacOS Xを含むApple Computersのオペレーティングシステム、Sun/Solaris、OS/2、Novellなど)様々なオペレーティングシステムで実行され得る。
【0045】
プログラムコードの格納に製品が用いられてもよい。プログラムコードを格納する製品は、1以上のメモリ(1以上のフラッシュメモリ、(スタティック、ダイナミック、またはその他の)ランダムアクセスメモリ)、光学ディスク、CD−ROM、DVD ROM、EPROM、EEPROM、磁気カード、光学カード、電子命令の格納に適した他のタイプの機械可読媒体として実装されてよいが、これらに限定されるわけではない。プログラムコードは、((ネットワーク接続などの)通信リンクなどを介し)伝搬媒体の形態で実装されるデータ信号を介し、(サーバなどの)遠隔コンピュータから(クライアントなどの)要求するコンピュータへダウンロードされてもよい。
【0046】
以上、特定の例示的な実施形態を参照し本願発明を説明してきた。しかし、請求項で説明される本願発明の幅広い思想および態様から逸脱することなく、様々な修正および変更を加えることが可能であることが明らかである。よって本明細書および図面は、限定的ではなく例示的なものとして見なされるべきである。
図1A
図1B
図2
図3-1】
図3-2】
図4A
図4B
図5A
図5B
図6A
図6B
図7
図8