【文献】
NECスーパーコンピュータSX-9シリーズ 中央処理装置機能説明書 U0M-G1AZ124-1,日本電気株式会社,2008年 2月,初版,Pages:219-220
【文献】
廣松悠介,黒田久泰,金田康正,複雑な制御構造を持つプログラムのSIMD命令セットによる最適化,情報処理学会論文誌,日本,社団法人情報処理学会,2007年 3月15日,第48巻,第SIG4(PRO32)号,Pages:62-72
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
以下の説明において、数々の具体的な詳細を記載する。しかしながら、本発明の複数の実施形態は、これらの具体的な詳細なしに実現可能であることが理解される。他の例において、公知の回路、構造及び技術については、説明を理解する妨げにならないよう、詳細には示していない。
【0010】
本明細書にて説明される複数の実施形態は、複数の独立したデータエレメントに対する再帰的なベクトル演算の効率性を向上させる複数の命令を提供する。その複数の命令は、ベクトルレジスタのペア及びマスクレジスタのペアを用いて再帰的なベクトル演算を実行する。第1のベクトルレジスタは、ベクトル演算結果を蓄積するアキュムレータとして機能し、第2のベクトルレジスタは、第1のベクトルレジスタの複数の未使用スロット(未使用または終了した複数のデータエレメント位置)を埋める複数の新しいデータエレメントを提供する。マスクレジスタは、その対応する複数のベクトルレジスタにおけるどのデータエレメントがさらに計算を必要としているかを示すべく用いられる。
【0011】
一実施形態において、第1のベクトルレジスタ(すなわちアキュムレータ)は、レジスタが完全ベクトルで満たされるまで、複数の入力データエレメントを蓄積する。プロセッサはそれから非マスク(すなわちデンス(dense)な)ベクトル演算を用いて、これらのデータエレメントに対して計算を実行する。計算後、アキュムレータ中の幾つかの(計算が終了した)エレメントは、メモリまたは他のストレージ場所に送り戻され得て、他の(計算が終了していない)エレメントは、イタレーション回数を追加すべく、アキュムレータ中に保たれ得る。アキュムレータ中の、計算が終了したデータエレメント位置を、同一の再帰計算もまた必要とする複数の新しいデータエレメントが使用できる。
【0012】
RWMASKUPDATE及びSPARSEMOVという2つの命令を本明細書にて説明する。これらの命令は、多くのシナリオにおいて、ベクトル化の効率性を向上させる。例えば、一シナリオにおいて、入力データエレメントは、1または複数のスパース(sparse)なベクトルデータセットに由来する。そのベクトルデータセットのそれぞれは、アキュムレータ全体(すなわち、第1のベクトルレジスタ)を埋めるのに十分なエレメントを有していない。さらに、異なるデータセットからの入力データエレメントは、計算中、異なるイタレーション回数を必要とし得る。したがって、これ以上計算を必要としない、それらのデータエレメントからの未使用スロットがアキュムレータに残される。本明細書にて説明される命令は、これらの未使用スロットが複数の有用なエレメントで埋められるようにするので、完全ベクトルに対して再帰計算が可能となる。以下でさらに詳細に説明するように、SPARSEMOV命令は、第2のベクトルレジスタからアキュムレータへ有用なデータエレメント(すなわち、計算を必要とするデータエレメント)を移動させるベクトル移動命令である。RWMASKUPDATE命令は、(第2のベクトルレジスタに関連付けられる)リードマスクレジスタ及び(アキュムレータに関連付けられる)ライトマスクレジスタの両方を更新し、これら2つのベクトルレジスタにおける有用なデータエレメントの位置を特定する。
【0013】
SPARSEMOVと組み合わせてRWMASKUPDATEを使用すれば、再帰計算法において必要になる命令の総数を低減し、第2のベクトルレジスタにおける複数の有用なデータエレメント(すなわち、複数のソースデータエレメント)の数が、第1のベクトルレジスタにおける未使用スロット(すなわち、ターゲット位置)の数と一致しない、オーバーフロー及びアンダーフローの場合を単純化する。更新されたリード及びライトマスクは、2つのベクトルレジスタ間のデータの移動を制御すべく用いられる。特に、0のライトマスクビットは、アキュムレータ中のターゲット位置を特定すべく用いられ、1のリードマスクビットは、第2のベクトルレジスタ中の複数のソースデータエレメントを特定すべく用いられる。ターゲット位置を特定すべく、反転させたライトマスクビットを用いれば、スパースかつ再帰的な計算のベクトル化におけるデータ蓄積を単純化する。
【0014】
図1は、RWMASKUPDATE命令及びSPARSEMOV命令を含む命令を実行すべく動作可能な回路を含む実行ユニット140を有する命令処理装置115の実施形態のブロック図である。いくつかの実施形態では、命令処理装置115は、電子システムの、プロセッサ、マルチコアプロセッサのプロセッサコア、またはプロセッシングエレメントでありうる。
【0015】
デコーダ130は、高レベルの機械語命令またはマクロ命令の形態の、入力命令を受信し、それらをデコードし、元の高レベルの命令を反映する、及び/または、元の高レベルの命令から得られる、低レベルのマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、または、他の低レベルの命令または制御信号を生成する。低レベルの命令または制御信号は、低レベル(例えば、回路レベルまたはハードウェアレベル)のオペレーションを通して、高レベルの命令のオペレーションを実行しうる。デコーダ130は、様々な異なるメカニズムを用いて実装されうる。適切なメカニズムの複数の例は、限定されるものではないが、マイクロコード、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、当技術分野において既知のデコーダを実装すべく用いられる他のメカニズム等を含む。
【0016】
デコーダ130は、キャッシュ110、メモリ120、または他のソース用の、入力命令を受信しうる。デコードされた命令は、実行ユニット140へ送られる。実行ユニット140はデコーダ130から、受信した命令を反映する、または受信した命令から得られる、1または複数の、マイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を受信しうる。実行ユニット140は、レジスタファイル170、キャッシュ110、及び/またはメモリ120からのデータ入力を受信し、かつ、レジスタファイル170、キャッシュ110、及び/またはメモリ120へのデータ出力を生成する。
【0017】
一実施形態において、レジスタファイル170は、レジスタとも称される、アーキテクチャレジスタを含む。別途特定しないか、または間違いなく明らかでない限り、複数のアーキテクチャレジスタ、レジスタファイル、及び複数のレジスタという文言は、ソフトウェア、及び/またはプログラマがアクセスできる(例えば、ソフトウェアビジブルな)複数のレジスタを、及び/またはオペランドを特定すべくマクロ命令が特定する複数のレジスタ、を指すべく本明細書中で用いられる。これらのレジスタは、与えられたマイクロアーキテクチャ上の他の複数の非アーキテクチャレジスタ(例えば、複数のテンポラリレジスタ、複数のリオーダバッファ、複数のリタイヤメントレジスタ等)とは対照的である。
【0018】
説明を分かりにくくしないように、比較的簡易な命令処理装置115を示し、説明する。他の複数の実施形態においては、1より多くの実行ユニットを有しうることが理解されよう。例えば、装置115は、例えば、複数の演算ユニット、複数の演算ロジックユニット(ALU)、複数の整数ユニット、複数の浮動小数点ユニットなどの、複数の異なるタイプの実行ユニットを含み得る。命令処理装置またはプロセッサの、さらなる他の複数の実施形態は、複数のマルチコア、複数の論理プロセッサ、または複数の実行エンジンを有しうる。命令処理装置115の、幾つかの実施形態を、
図7から
図13に関して提供する。
【0019】
一実施形態によると、レジスタファイル170は、1セットのベクトルレジスタ175及び1セットのマスクレジスタ185を備え、その両方は、RWMASKUPDATE命令及びSPARSEMOV命令の複数のオペランドをストアする。各ベクトルレジスタ175は、512ビット幅、256ビット幅、128ビット幅であり得て、また、異なるベクトル幅が用いられうる。各マスクレジスタ185は、幾つかのマスクビットを含み、その各マスクビットは、複数のベクトルレジスタ175のうちの1つのベクトルレジスタの1つのデータエレメントに対応している。各マスクビットは、ベクトルレジスタのデータエレメントをマスクすべく用いられるので、64ビットのマスクレジスタは、512ビットのレジスタの64個の8ビットデータエレメントをマスクすべく用いられ得る。異なる幅(例えば、256ビットまたは128ビット)、及び異なるサイズ(例えば、16ビット、32ビットまたは64ビット)の複数のデータエレメントを有するベクトルレジスタに対して、異なる数のマスクビットをベクトル演算に関連して用いてもよい。
【0020】
図2は、本明細書において説明される複数の命令をサポートする、根本的なレジスタアーキテクチャ200のある実施形態を示す。 レジスタアーキテクチャ200は、x86、MMX(商標)、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令、及びSSE4.2命令を含む命令セットも、アドバンストベクトル拡張命令(AVX)(AVX1及びAVX2)を指すSIMD拡張命令の追加的なセットも実装する、Intel(登録商標)Core(商標)プロセッサに基づいている、しかしながら、異なるレジスタ長、異なるレジスタタイプ、及び/またはレジスタの異なる個数をサポートする、異なるレジスタアーキテクチャもまた用いることができるということが理解されよう。
【0021】
図示する実施形態において、512ビット幅の、32個のベクトルレジスタ210がある。これらのレジスタはzmm0からzmm31と参照される。下側の16個のzmmレジスタの下位256ビットは、レジスタymm0−16に重ねられている。下側の16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0−15に重ねられている。図示する実施形態において、8個のマスクレジスタ220(k0からk7)があり、それぞれ64ビットの長さがある。代替的な実施形態においては、マスクレジスタ220は16ビット幅である。
【0022】
図示する実施形態において、レジスタアーキテクチャ200は、16個の64ビット汎用(GP)レジスタ230をさらに備える。ある実施形態において、それらは、現存するx86アドレッシングモードと共に用いられ、メモリオペランドをアドレッシングする。その実施形態は、RFLAGSレジスタ260、RIPレジスタ270及びMXCSRレジスタ280も図示している。
【0023】
その実施形態は、スカラ浮動小数点(FP)スタックレジスタファイル(x87スタック)240も図示し、そのファイル上で、MMXパックド整数フラットレジスタファイル250がエイリアスされる。図示する実施形態において、x87スタックは、x87命令セットの拡張を使用して、32/64/80ビットの浮動小数点データ上で、複数のスカラ浮動小数点オペレーションを実行すべく用いられる8個のエレメントのスタックである。一方、MMXレジスタは、MMXとxmmレジスタとの間で実行される幾つかのオペレーションに対する複数のオペランドを保持すべく、また同様に、64ビットのパックド整数データ上で複数のオペレーションを実行すべく用いられる。
【0024】
本発明の複数の代替的実施形態は、より幅の広い、または狭いレジスタを使用しうる。
【0025】
追加的に、本発明の複数の代替的実施形態は、よりたくさんの、より少ない、または異なる、レジスタファイル及びレジスタを使用しうる。
【0026】
図3は、独立したデータエレメントに対する計算を効率的にベクトル化すべく、プロセッサ(例えば、命令処理装置115)が実行するオペレーションの一例を図示している。説明を単純化するべく、この例における各ベクトルレジスタは、8つのデータエレメントのみを有するように示される。複数の代替的実施形態においては、複数のベクトルレジスタ内に、異なる数のデータエレメントを有してよい。ベクトルレジスタは、128ビット幅、256ビット幅、または512ビット幅(例えば、
図2のxmm、ymm、またはzmmレジスタ)であることが可能であり、または異なる幅が用いられうる。各ベクトルレジスタには8つのデータエレメントがあるので、各ベクトルレジスタに関連して8つのマスクビットのみが用いられる。
【0027】
この例において、ベクトルレジスタV1はアキュムレータとして用いられ、ベクトルレジスタV2は、新しいデータエレメントをV1に提供すべく用いられる。マスクレジスタK1(ライトマスク)及びK2(リードマスク)はそれぞれ、V1及びV2のデータエレメントをマスクすべく用いられる。この例において、0のマスクビットは、対応するデータエレメントが計算からマスクされる(すなわち、さらなる計算は必要ない)ことを示し、1のマスクビットは、対応するデータエレメントがさらなる計算を必要とすることを示す。代替的実施形態においては、マスクビット値の意味は逆であり得て、例えば、1のマスクビットは、対応するデータエレメントがさらなる計算を必要としないことを示すべく用いられ、0のマスクビットは、対応するデータエレメントがさらなる計算を必要とすることを示すべく用いられうる。
【0028】
初めに、アキュムレータV1は、入力ベクトル:A及びBとして2セットのデータをストアし、そのそれぞれは、スパースなデータアレイの一部でありうると仮定する。Aj及びBjの下付きの文字jは、データエレメントが受けたイタレーション回数を示す。例えば、A0は、あらゆるイタレーションの前のエレメントAであり、A1は第1のイタレーション310後のエレメントである。説明を単純化すべく、同一イタレーション内の同一データセットからの異なるデータエレメントは同一の識別子を有するように示される。例えば、入力ベクトルの、位置0のA0及び位置2のA0は、2つの異なるエレメントであり、同一または異なる値を有し得て、入力ベクトルの位置1のB0及び位置3のB0は、2つの異なるエレメントであり、同一または異なる値を取りうる。マスクレジスタK1の複数のマスクビットの初期値は全て1であり、V1の初期の入力ベクトルが完全ベクトルであり、かつV1の全エレメントがベクトル演算の第1のイタレーション310に関与できることを示している。
【0029】
この例において、各イタレーションは、再帰的なベクトル演算が実行されるWHILEループのイタレーションを表している。第1のイタレーション310の後、アキュムレータV1は複数のA及び複数のBからなる1セットを含み、ここで、下付き文字は、これらのエレメントが第1のイタレーションを終了したことを示す。AのエレメントはWHILEループの1回のイタレーションを、Bのエレメントは2回のイタレーションを必要とすると仮定しよう。そうすると、WHILEループの1回のイタレーション後、Bエレメントに対してはもう1回イタレーションが必要な一方、Aエレメントに対する計算は終了した。この時点で、複数のAエレメントのそれぞれに対する条件は偽であり(なぜなら、さらに計算するための条件を満たさないから)、複数のBエレメントのそれぞれに対する条件は真である(なぜなら、さらに計算するための条件を満たすから)。したがって、複数のAに対応するそれらのマスクビットに対し、K1の複数のマスクビット値は0に設定され、複数のBに対応するそれらのマスクビットに対しては1が設定される。
【0030】
一実施形態において、0のマスクビットは、対応するエレメント位置における結果が、ベクトルレジスタ全体(この場合、V1)に対するベクトル演算後に捨てられるであろうことを示す。複数の代替の実施形態において、0のマスクビットは、対応するエレメント位置に対する計算が以後実行されず、故にそのエレメント位置は使用されないことを示す。いずれのシナリオにおいても、アキュムレータV1に複数のA1を保持しておくと、ベクトルリソースの無駄使いであるし、ベクトル演算の効率性を低減する。よって、本発明の一実施形態によると、第2のベクトルレジスタV2が用いられ、複数のA1が残した未使用スロット(すなわち、データエレメント位置)を埋めるべく、V1に新しいデータエレメントを提供する。複数のA1のデータエレメントは、メモリ、キャッシュ、または他のデータストレージに保存可能である。
【0031】
図3の例において、ベクトルレジスタV2は、別のスパースなベクトルアレイの一部でありうるデータセットCのエレメントをストアする。「*」でマーク付けされたV2中の位置は、「ドントケア」を表し、再帰的なベクトル演算の目的のための有用なデータエレメントを含まないことを意味する。Cの各データエレメントがWHILEループの3回のイタレーションを受ける必要があると仮定しよう。Cのエレメントに代えて、または追加して、V2は、WHILEループ(及び、故にさらなる計算)の1または複数のイタレーション受ける必要がある、A及び/またはB(例えば、複数のA
0,複数のB
0、及び/または複数のB)の複数の新しいデータエレメントを提供しうる。さらなる計算を必要とするV2中のこれらのデータエレメントは、「ソースデータエレメント」と称される。V2中のこれらのソースデータエレメントは、複数のA(「ターゲットデータエレメント」と称される)が残したV1中の未使用スロットを埋めることができる。説明を簡単にすべく、さらなる計算を必要とする、V1及び/またはV2中のデータエレメントを「有用なデータエレメント」と呼ぶ。したがって、併合操作320が、V1及びV2中の複数の有用なデータエレメントをマージすべく実行され、V2中の複数のソースデータエレメントが、複数のターゲットデータエレメントによって占有されるV1の位置に移され、再帰計算は、V1中の複数の追加された有用なデータエレメントで、第2のイタレーション330に進むことができるようになる。
【0032】
そのような併合操作においては、オーバーフロー、アンダーフロー、及び完全一致の、3つのシナリオが起こりうる。完全一致とは、V2中の有用なデータエレメントが、V1に残された未使用スロットの数と同一数あることを示す。したがって、完全一致においては、V2中の複数のソースデータエレメントの全ては、V1に残された未使用スロットへ移動(すなわち、入れ替え)する。結果として、V1は次のイタレーションを開始する完全ベクトルを有し、K1は更新され、全て1を含む。V2にはこれ以上ソースデータエレメントは残っていないので、K2は更新されて、全て0を含む。
【0033】
併合操作320は、新しいデータエレメント(C0)の数が、K1中の0値のマスクビットの数(すなわちA1の数)よりも大きい、オーバーフローのシナリオを示している。したがって、V2中の新しいデータエレメントの全てがV1へ移動するわけではない。この例において、V2の位置7の、丸で囲ったC0はV2中に残される。一方、位置2、4および6の、その他のC0はV1へ移動した。この実施形態において、V2の下位のエレメントがV1へ移され、複数の代替の実施形態においては、V2の上位のエレメントがV1へ移されうる。併合操作320は、K1及びK2における、対応するマスクビットの更新もする。
【0034】
併合操作320後、V1は8つのエレメントからなる完全ベクトルを含み、第2のイタレーション330を開始し、V2は位置7に残された1つのC0を有するのみである。この時点(併合操作320後)における、対応するマスクレジスタK1は全て1を含み、K2は位置7に、1の値を有する、たった1つのマスクビットを含む。
【0035】
第2のイタレーション330後、アキュムレータV1は複数のB2及び複数のC1の組み合わせを含む。複数のBエレメントに対する計算はこのイタレーション後に終了したので、それらのB2はメモリ、キャッシュ、または他のデータストレージへ保存できる。したがって、複数のBエレメントのそれぞれに対する条件は偽(さらに計算するための条件を満たさないから)であり、複数のCエレメントのそれぞれに対する条件は真(さらに計算するための条件を満たすから)である。したがって、K1の複数のマスクビット値は、複数のB2に対応するそれらのマスクビットに対して0が設定され、複数のC1に対応するそれらのマスクビットに対して1が設定される。
【0036】
複数のB2によって残された未使用スロットは、V2の残りの複数のソースデータエレメントが埋めることができ、この場合、それはV2の位置7のC0である。しかしながら、C0の数は、B2の数より少ないので、後に続く併合操作340においてアンダーフローが起きる。
図3に示すアンダーフローのシナリオにおいて、V1における最下位のB2がC0で置き換えられ、複数の代替の実施形態においては、V1における最上位のB2がC0で置き換えられうる。その併合操作340は、K1及びK2における、対応するマスクビットの更新もする。
【0037】
併合操作340後、アキュムレータV1は完全には埋まっておらず、V2は、V1へ移動できる有用なデータエレメントをこれ以上有していない。この時点(併合操作340後)におけるマスクレジスタK1は、複数のCエレメントに対応する複数の位置に1を含み、K2は全て0を含む。複数の有用なデータエレメントの全てが処理され、V2にもはやソースデータエレメントが残らなくなるまで、V1へ移動させる、追加の有用なデータエレメントを、V2はロードし得るし、320及び/または340の併合操作を繰り返すことが可能である。この時点において、V1の複数のエレメントの全てが、必要とされるイタレーション回数に達するまで、V1は、追加の回数のイタレーションを受けうる。
【0038】
0または1のマスクビット値の意味は、
図3の例において示されるものと逆であり得る、例えば、0のマスクビット値は条件が満たされることを意味すべく用いられ得て、1のマスクビット値は条件が満たされないことを意味すべく用いられ得る、ということが理解されよう。いくつかの実施形態では、K1マスクビット値の意味は、K2マスクビット値の意味とは逆であり得る、例えば、1のK1マスクビット値は条件が満たされないことを意味すべく用いられ得て、1のK2マスクビット値は条件が満たされることを意味すべく用いられ得る。したがって、各マスクレジスタにおける各マスクビットの意味が、一貫性のある解釈を可能にすべく、矛盾なく定義される限り、同一のシナリオに対して、
図3の例において異なるマスクビット値を使用可能である。
【0039】
本発明の一実施形態によると、
図3に関連して説明されるオペレーションは、RWMASKUPDATE命令及びSPARSEMOV命令を含む複数のベクトル命令に応答して、プロセッサ(例えば、命令処理装置115)が実行する。SPARSEMOV命令は、条件を満たさない、V1中の複数のターゲットエレメント(例えば、もはや計算が必要ない複数のエレメント)を置き換えながら、複数のソースデータエレメントをベクトルレジスタV2からベクトルレジスタV1へと移動させるべく用いられ得る。RWMASKUPDATE命令は、マスクレジスタK1及びマスクレジスタK2の更新に用いることができ、それにより、それぞれ、条件を満たすV1及びV2における複数のデータエレメント(例えば、もっと計算を必要とする複数のエレメント)の複数の位置を特定する。一実施形態において、RWMASKUPDATEは、2つのオペランドK1及びK2を有し、SPARSEMOVは4つのオペランドK1、V1、K2及びV2を有する。複数の代替の実施形態においては、RWMASKUPDATE及び/またはSPARSEMOVの複数のオペランドのうちの幾つかは黙示的である。
【0040】
図4Aは、一実施形態による、RWMASKUPDATE命令及びSPARSEMOV命令用の疑似コード401および402の一例を示す。疑似コード401および402において、KLは、各ベクトルレジスタ(例えば、V1及びV2のそれぞれ)における、複数のデータエレメントの総数であるベクトルの長さを表す。zmmレジスタを、8ビットのデータエレメントを有するアキュムレータとして用いるならば、KL=512/8=64である。疑似コード401はRWMASKUPDATE命令を、疑似コード402はSPARSEMOV命令を記述する。プロセッサは、疑似コード401および402に示されるものとは異なる複数のオペレーションまたはロジックを有するRWMASKUPDATE命令及びSPARSEMOV命令を実装しうることに留意されたい。
【0041】
RWMASKUPDATE命令及びSPARSEMOV命令はそれぞれ、複数のマスクレジスタを更新し、及び複数のデータエレメントを複数のベクトルレジスタ間で移動させる。これらの命令の結果を用いるべく、複数の追加的な命令を実行できて、それにより、再帰的なベクトル演算をより効率的に実行できる。
図4Bは、一実施形態による、RWMASKUPDATE命令及びSPARSEMOV命令を用いるコードセグメント400の一例を示す。プロセッサが実行すると、コードセグメント400は、プロセッサに、アレイXの複数の独立したデータエレメントに対して再帰的なベクトル演算を実行させる。アレイXは、メモリ、キャッシュ、または他のデータのストア位置にストアされうる。コードセグメント400は、初期化部410、初期マージ部420、後続マージ部430、演算部440、及び残余部450を備える。410−450の各部におけるオペレーションを、プロセッサ(例えば、
図1の命令処理装置115)が実行する方法500の実施形態を示す
図5Aのフロー図を参照し後述する。
【0042】
初期化部410において、マスクレジスタK1及びマスクレジスタK2の両方は、それらが対応するベクトルレジスタV1及びV2において有用なデータエレメントはないということを示す、0に初期化される。「複数の有用なデータエレメント」という用語は、計算を必要とする複数のデータエレメントを意味する。イタレーションは初期マージ部420から始まる。420において、まず、有用なデータエレメントがV2に残っていないかどうか決定すべく、K2をチェックする(ブロック531)。V2に有用なデータがなければ、複数の入力データエレメントがアレイXからV2へとロードされ(ブロック532)、K2におけるそれらの対応するマスクビットがしかるべく設定される。
【0043】
後続マージ部430は、V2が複数の有用なデータエレメントを含むシナリオを処理する。複数の有用なデータエレメントが前のオーバーフローからV2に残され得て、ブロック532においてV2へとロードされうる。SPARSEMOV命令431に応答して、V2中のこれらの有用なデータエレメントは、K1及びK2におけるマスクビットに従い、V1へと移される(ブロック533)。
【0044】
ブロック533における移動の後、RWMASKUPDATE命令433に応答して、マスクレジスタK1及びマスクレジスタK2は更新され、それぞれ、V1及びV2中の複数の有用なデータエレメントの現在の位置を特定する(ブロック534)。
【0045】
後続マージ部430において、第2のSPARSEMOV命令432が実行され、V2からV1へと移された、アレイX中の複数のデータエレメントのインデックス(位置)をストアし、計算結果がアレイX中のそれらの元の位置にストアし戻され得るようになる。
【0046】
演算部440は、(対応するマスクが全て1であることによって示されるような、すなわち、IsFullMask(K1)が真である場合の)完全ベクトルのベクトル演算を処理する。V1が、有用なデータエレメントの完全ベクトルを有さず(ブロック535)、V1に、ロードされなかった複数の入力データエレメントがあれば(ブロック538)、複数の追加的な入力データエレメントが、V2を介してV1へロードされうる(ブロック532―534)ことを示す。V1が完全ベクトルを有さず、V1にロードされる入力データエレメントがもはや無いならば(ブロック538)、計算が終了し、複数の結果がアレイXに保存し戻されるまで、V1中の複数の残存するデータエレメントが計算される、残余部450(ブロック539)に、複数のオペレーションが進むことを示す。
【0047】
V1が複数の有用なデータエレメントからなる完全ベクトルを有するならば(ブロック535)、V1についてベクトル演算が実行され得る(ブロック536)。V1中のデータエレメントがどれもこれ以上計算を必要としないならば、マスクレジスタK1は更新される。1または複数のデータエレメントが、アレイXに保存し戻される時点(ブロック537)において、V1中のそれらのデータエレメントがこれ以上計算を必要としなくなる(K1中の対応する0値のマスクビットで示されるように)まで、ベクトル演算は続く。示すようなその実施形態において、複数のデータエレメントはSCATTER命令と共に保存され得て、K1中の複数の0値のマスクビットが、関数knot(K1)を用いて特定され得る。RWMASKUPDATE命令及びSPARSEMOV命令を除いては、SCATTER、knot、IsFullMask、などのコードセグメント400において用いる複数の特定の命令及び関数を、複数の代替的な命令シーケンスがエミュレートできる。
【0048】
V2を通してV1にロードされる入力データエレメントがもはやなくなる(ブロック538)、すなわち、アレイX中の入力データエレメントの全てがV2にロードされ、V2中の有用なデータエレメントの全てがV1に移されたとき、まで、ブロック531―537のオペレーションは繰り返される。これが、残余部450が始まるときである。この時点で、V1は複数の有用なデータエレメントから成る完全ベクトルを有し得ないが、V1中のそれらのデータエレメントはさらに計算を必要とする。ベクトル演算は、V1中の残存するデータエレメントの全てが、必要とされるイタレーション回数に達するまで続く(ブロック539)。この時点において、V1における演算結果がアレイXに保存し戻され得る(例えば、SCATTER命令を用いて)(ブロック539)。
【0049】
図5Bは、一実施形態による、RWMASKUPDATE命令を実行する方法510のブロックフロー図である。方法510は、プロセッサ(例えば、
図1の命令処理装置115)の、第1のマスクレジスタ及び第2のマスクレジスタを特定するマスク更新命令の受信で始まる(ブロック511)。プロセッサはマスク更新命令をデコードする(ブロック512)。そのデコードされたマスク更新命令に応答して、プロセッサは、第1のマスクレジスタ内の与えられた数のマスクビットを、例えばこれらのマスクビットを第1のビット値(例えば、0)から第2のビット値(例えば、1)に設定することによって反転させる段階(ブロック513)と、第2のマスクレジスタ内の与えられた数のマスクビットを、例えばこれらのマスクビットを第2のビット値(例えば、1)から第1のビット値(例えば、0)に設定することによって反転させる段階(ブロック514)と、を含む複数のオペレーションを実行する。与えられた数とは、第1のビット値を有する第1のマスクレジスタ内のマスクビットの数、及び、第2のビット値を有する第2のマスクレジスタ内のマスクビットの数のうちの小さい方である。代替的実施形態において、第1のビット値は1であり得て、第2のビット値は0であり得る。
【0050】
図5Cは、一実施形態による、SPARSEMOV命令を実行する方法520のブロックフロー図である。方法520は、プロセッサ(例えば、
図1の命令処理装置115)の、第1のマスクレジスタ、第2のマスクレジスタ、第1のベクトルレジスタ、及び第2のベクトルレジスタを特定するベクトル移動命令の受信から始まる(ブロック521)。プロセッサは、ベクトル移動オペレーションをデコードする(ブロック522)。デコードされたベクトル移動命令に応答して、かつ第1のマスクレジスタ及び第2のマスクレジスタ内の複数のマスクビット値に基づき、プロセッサは、第1のベクトルレジスタ内の与えられた数の複数のターゲットデータエレメントを、第2のベクトルレジスタ内の与えられた数の複数のソースデータエレメントで置き換える(ブロック523)。一実施形態において、各ソースデータエレメントは、第2のビット値(例えば、1)を有する第2のマスクレジスタ内のマスクビットに対応し、各ターゲットデータエレメントは、第1のビット値(例えば、0)を有する第1のマスクレジスタ内のマスクビットに対応する。代替的実施形態においては、第1のビット値は1であり得て、第2のビット値は0であり得る。与えられた数とは、第1のビット値を有する第1のマスクレジスタ内のマスクビットの数、及び、第2のビット値を有する第2のマスクレジスタ内のマスクビットの数のうちの小さい方である。
【0051】
様々な実施形態において、
図5A−5Cの方法は、汎用プロセッサ、専用プロセッサ(例えば、グラフィクスプロセッサまたはデジタルシグナルプロセッサ)、または別のタイプのデジタル論理デバイスまたは命令処理装置が実行しうる。いくつかの実施形態では、
図5A−5Cの方法は、
図1の命令処理装置115、または
図7−13に示す実施形態などの、同様のプロセッサ、装置またはシステムが実行しうる。さらに、
図7−13に示すプロセッサ、装置及びシステムと同様、
図1の命令処理装置115は、
図5A−5Cの複数の方法の実施形態と同一の、同様の、または異なる、複数のオペレーション及び複数の方法の実施形態を実行しうる。
【0052】
いくつかの実施形態では、
図1の命令処理装置115は、命令をソース命令セットからターゲット命令セットへと変換する命令変換部と共に動作しうる。例えば、命令変換部は、命令を、変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、または別の方法でコンバートし、コアが処理する1または複数の他の命令にする。命令変換部は、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせにおいて実装されうる。命令変換部は、プロセッサ上、プロセッサ外、または、一部はプロセッサ上かつ一部はプロセッサ外でありうる。
【0053】
図6は、本発明の複数の実施形態による、ソフトウェア命令変換器の使用を対比させたブロック図である。図示した実施形態においては、命令変換部はソフトウェア命令変換器であるが、代替的に命令変換部はソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせにおいて実装されてよい。
図6は、高級言語602で書かれたプログラムを、x86コンパイラ604を用いてコンパイルできて、少なくとも1つのx86命令セットコアを有するプロセッサ616がネイティブで実行しうる、x86バイナリコード606を生成することを示している。少なくとも1つのx86命令セットコアを有するプロセッサ616は、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同一な結果を得るべく、(1)インテル社製x86命令セットコアの命令セットのかなりの部分、または(2)複数のアプリケーションのオブジェクトコードバージョン、または少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で実行することを目的とされる他のソフトウェア、を互換性のある状態で実行、または処理することにより、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同一な複数の機能を実行可能な任意のプロセッサを表わす。x86コンパイラ604は、追加的なリンケージ処理有りで、または無しで、少なくとも1つのx86命令セットコアを有するプロセッサ616上で実行され得る、x86バイナリコード606(例えば、オブジェクトコード)を生成すべく動作可能なコンパイラを表わす。
【0054】
同様に
図6は、高級言語602で書かれたプログラムは、代替的な命令セットのコンパイラ608を用いてコンパイルされ得て、少なくとも1つのx86命令セットコアを有さないプロセッサ614(例えば、カリフォルニア州サニーベールにあるミップス・テクノロジーズのMIPS命令セットを実行する、及び/または、カリフォルニア州サニーベールにあるARMホールディングスのARM命令セットを実行する、複数のコアを有するプロセッサ)がネイティブで実行しうる代替的な命令セットのバイナリコード610を生成することを示す。命令変換部612は、x86バイナリコード606を、x86命令セットコアを有さないプロセッサ614がネイティブで実行し得るコードへと変換すべく用いられる。変換後のコードは、代替的な命令セットのバイナリコード610と同一である可能性が低い。なぜなら、これができる命令変換部は作るのが困難だからである。しかしながら、変換後のコードは一般的なオペレーションを達成し、代替的な命令セットからの複数の命令から生成されるであろう。したがって、命令変換部612は、エミュレーション、シミュレーション、または任意の他の処理を通して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード606を実行できるようにする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表わす。 <例示的なコアアーキテクチャ> <インオーダ及びアウトオブオーダコアブロック図>
【0055】
図7Aは、本発明の複数の実施形態による、例示的なインオーダパイプライン、及び例示的なレジスタリネームアウトオブオーダ発行/実行パイプラインの両方を図示するブロック図である。
図7Bは、本発明の複数の実施形態による、例示的な、インオーダアーキテクチャコアの実施形態、及びプロセッサに含まれる、例示的な、レジスタリネームアウトオブオーダ発行/実行アーキテクチャコアの両方を図示するブロック図である。
図7A及び
図7B内の複数の実線で囲まれたボックスは、インオーダパイプライン及びインオーダコアを示し、一方で複数の点線で囲まれたボックスの任意の追加は、レジスタリネームアウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様を説明する。
【0056】
図7Aにおいて、プロセッサパイプライン700はフェッチ段階702、レンス(length)デコード段階704、デコード段階706、割り当て段階708、リネーム段階710、スケジュール段階(ディスパッチまたは発行としても知られる)712、レジスタリード/メモリリード段階714、実行段階716、ライトバック/メモリライト段階718、例外処理段階722、及びコミット段階724を備える。
【0057】
図7Bは、実行エンジンユニット750に連結されるフロントエンドユニット730を含むプロセッサコア790を示し、実行エンジンユニット750及びフロントエンドユニット730の両方はメモリユニット770に連結されている。コア790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドコアタイプもしくは代替的なコアタイプであってよい。さらに別のオプションとして、コア790は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスプロセッシングユニット(GPGPU)コア、グラフィックスコア等の専用コアであってよい。
【0058】
フロントエンドユニット730は、命令キャッシュユニット734に連結される分岐予測ユニット732を備え、この命令キャッシュユニットは命令トランスレーションルックアサイドバッファ(TLB)736に連結され、このTLBは命令フェッチユニット738に連結され、この命令フェッチユニットはデコードユニット740に連結されている。デコードユニット740(またはデコーダ)は、命令をデコードし、その元の命令からデコードされるか、または元の命令を反映するか、または元の命令から得られる1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成しうる。デコードユニット740は様々な異なるメカニズムを用いて実装されうる。適切なメカニズムの複数例には、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が挙げられる。一実施形態において、コア790は、(例えば、デコードユニット740内で、またはフロントエンドユニット730内において)複数の特定のマクロ命令用のマイクロコードをストアするマイクロコードROMまたは他の媒体を含む。デコードユニット740は、実行エンジンユニット750内のリネーム/アロケータユニット752に連結されている。
【0059】
実行エンジンユニット750は、リタイアメントユニット754、及び1セットの、1または複数のスケジューラユニット756に連結されるリネーム/アロケータユニット752を含む。スケジューラユニット(複数)756は、複数のリザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット(複数)756は物理レジスタファイル(複数)ユニット(複数)758に連結されている。複数の、物理レジスタファイル(複数)ユニット758のそれぞれは、1または複数の物理レジスタファイルを表し、その複数の物理レジスタファイルのうちの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行される命令のアドレスである命令ポインタ)等の、1または複数の異なるデータタイプをストアする。一実施形態において、物理レジスタファイル(複数)ユニット758は、ベクトルレジスタユニット、ライトマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供しうる。物理レジスタファイル(複数)ユニット(複数)758は、(例えば、リオーダバッファ(複数)及びリタイアメントレジスタファイル(複数)を用いて;フューチャーファイル(複数)、履歴バッファ(複数)、及びリタイアメントレジスタファイル(複数)を用いて;レジスタマップ及びレジスタのプールを用いて;等により)レジスタリネーミング及びアウトオブオーダ実行が実装されうるさまざまな方法を示すべく、リタイアメントユニット754によって重ね合わされる。リタイアメントユニット754及び物理レジスタファイル(複数)ユニット(複数)758は、実行クラスタ(複数)760に連結されている。実行クラスタ(複数)760は、1セットの、1または複数の実行ユニット762、及び、1セットの、1または複数のメモリアクセスユニット764を備える。複数の実行ユニット762は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対し、様々な演算(例えば、シフト、加算、減算、乗算)を実行しうる。幾つかの実施形態が、特定の複数の機能または特定の複数セットの機能専用の幾つかの実行ユニットを含みうる一方で、他の複数の実施形態は、全機能を全て実行する1つの実行ユニットのみを含むか、または複数の実行ユニットを含む。スケジューラユニット(複数)756、物理レジスタファイル(複数)ユニット(複数)758、及び実行クラスタ(複数)760については、複数個ある可能性があるように示した。なぜなら、複数の特定の実施形態は、複数の特定のタイプのデータ/オペレーションに対して別個の複数のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/または、それぞれが自身のスケジューラユニット、物理レジスタファイル(複数)ユニット及び/または実行クラスタを有するメモリアクセスパイプライン、−及び別個のメモリアクセスパイプラインの場合においては、このパイプラインの実行クラスタのみがメモリアクセスユニット(複数)764を有する複数の特定の実施形態が実装される)を作成するからである。複数の別個のパイプラインが使用されると、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であり、残りはインオーダ発行/実行でありうることも理解されるべきである。
【0060】
1セットのメモリアクセスユニット764はメモリユニット770に連結され、このメモリユニットは、レベル2(L2)キャッシュユニット776に連結されるデータキャッシュユニット774に連結されるデータTLBユニット772を備える。1つの例示的な実施形態において、複数のメモリアクセスユニット764は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、それぞれは、メモリユニット770内のデータTLBユニット772に連結されている。命令キャッシュユニット734は、メモリユニット770内のレベル2(L2)キャッシュユニット776にさらに連結されている。L2キャッシュユニット776は、1または複数の他のレベルのキャッシュに連結されており、最終的にはメインメモリに連結されている。
【0061】
例として、例示的なレジスタリネームアウトオブオーダ発行/実行コアアーキテクチャは、以下のようなパイプライン700を実装しうる:1)命令フェッチ738が、フェッチ段階702及びレンスデコード段階704を実行する;2)デコードユニット740が、デコード段階706を実行する;3)リネーム/アロケータユニット752が、割り当て段階708及びリネーム段階710を実行する;4)スケジューラユニット(複数)756が、スケジュール段階712を実行する;5)物理レジスタファイル(複数)ユニット(複数)758及びメモリユニット770が、レジスタリード/メモリリード段階714を実行する;実行クラスタ760が実行段階716を実行する;6)メモリユニット770及び物理レジスタファイル(複数)ユニット(複数)758が、ライトバック/メモリライト段階718を実行する;7)様々なユニットが例外処理段階722に関与しうる;及び8)リタイアメントユニット754及び物理レジスタファイル(複数)ユニット(複数)758がコミット段階724を実行する。
【0062】
コア790は、本明細書で説明する命令(複数)を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンと共に追加された幾つかの拡張を有する);カルフォルニア州サニーベールにあるミップス・テクノロジーズのMIPS命令セット;カルフォルニア州サニーベールにあるARMホールディングスのARM命令セット(NEONなどの任意追加の拡張を有する))をサポートしうる。一実施形態において、コア790はパックドデータ命令セット拡張(例えば、SSE、AVX1、AVX2等)をサポートすべくロジックを備え、それにより、多数のマルチメディアアプリケーションが用いる複数のオペレーションを、パックドデータを使用して実行できるようになる。
【0063】
コアはマルチスレッド化(2またはそれ以上のパラレルなセットのオペレーションまたはスレッドを実行する)をサポートし得て、タイムスライスマルチスレッド化、同時マルチスレッド化(物理コアが同時にマルチスレッド化している複数のスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、またはそれらの組み合わせ(例えば、Intel(登録商標)のハイパースレッディングテクノロジ中などのタイムスライスフェッチ及びデコード、並びにその後の同時マルチスレッド化)を含む様々な方法でそれを行いうることが理解されるべきである。
【0064】
レジスタリネーミングがアウトオブオーダ実行との関連で説明される一方で、レジスタリネーミングはインオーダアーキテクチャにおいて使用されうることが理解されるべきである。図示したプロセッサの実施形態が、別個の命令、及びデータキャッシュユニット734/774及び共有のL2キャッシュユニット776を備える一方で、代替的実施形態は、例えば、レベル1(L1)の内部キャッシュ、または複数レベルの内部キャッシュ等の、複数の命令及びデータの両方に対する単一の内部キャッシュを有しうる。いくつかの実施形態では、システムは、内部キャッシュ、及び、コア及び/またはプロセッサの外部にある外部キャッシュの組み合わせを含む。代替的に、全てのキャッシュがコア及び/またはプロセッサの外部にあってよい。<具体的で例示的なインオーダコアアーキテクチャ>
【0065】
図8A−8Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。そのコアは、チップ内の幾つかの論理ブロック(同一タイプ及び/または異なるタイプの複数の他のコアを含む)のうちの1つでありうる。複数の論理ブロックは、アプリケーションに応じて、ある固定のファンクションロジック、メモリI/Oインターフェース、及び他の必要なIOロジックと、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
【0066】
図8Aは、本発明の複数の実施形態による、自身のオンダイ相互接続ネットワーク802への接続、及び自身のレベル2(L2)のキャッシュのローカルサブセット804を伴う、単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ800は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ806は、スカラユニット及びベクトルユニットへの、キャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態(設計を単純化するための)において、スカラユニット808及びベクトルユニット810は、複数の別個のレジスタセット(それぞれ、複数のスカラレジスタ812及び複数のベクトルレジスタ814)を使用し、それらの間を伝送されるデータがメモリへ書き込まれ、その後レベル1(L1)キャッシュ806からリードバックされる一方で、本発明の複数の代替的実施形態は異なるアプローチ(例えば、単一のレジスタセットを用いるか、または、書き込まれもリードバックもされずに、2つのレジスタファイル間をデータが伝送され得るようにする通信パスを含む)を使用しうる。
【0067】
L2キャッシュのローカルサブセット804は、1つのプロセッサコアにつき1つの、複数の別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュの、自身のローカルサブセット804へのダイレクトアクセスパスを有する。プロセッサコアがリードするデータは、自身のL2キャッシュのサブセット804へストアされ、他のプロセッサコアが自身のローカルL2キャッシュのサブセットにアクセスするのとパラレルに、高速にアクセス可能である。プロセッサコアが書き込むデータは、自身のL2キャッシュのサブセット804にストアされ、必要ならば複数の他のサブセットからフラッシュされる。リングネットワークは共有データに対するコヒーレンシを保証する。リングネットワークは、複数のプロセッサコア、複数のL2キャッシュ、及び複数の他の論理ブロックが、チップ内で互いに通信できるようにする双方向性のネットワークである。各リングデータパスは1つの方向につき1012ビット幅である。
【0068】
図8Bは、本発明の複数の実施形態による、
図8Aのプロセッサコアの一部の拡大図である。
図8Bは、ベクトルユニット810及びベクトルレジスタ814に関するより詳細な内容と共に、L1キャッシュ806のL1データキャッシュ806A部分を備える。
【0069】
具体的に、ベクトルユニット810は、16ビットのベクトル処理ユニット(VPU)であり(16幅ALU828を参照)、整数命令のうちの1または複数、単精度浮動小数点命令、及び倍精度浮動小数点命令を実行する。VPUは、スウィズルユニット820による複数のレジスタ入力のスウィズル、複数の数値変換ユニット822A―Bによる数値変換、及び、メモリ入力に対する複製ユニット824による複製をサポートする。ライトマスクレジスタ826は複数の結果のベクトル書き込みのプレディケートを可能にする。<統合型メモリコントローラ及び統合型グラフィックを有するプロセッサ>
【0070】
図9は、本発明の複数の実施形態による、2つ以上のコア、統合型メモリコントローラ、及び統合型グラフィックスを有しうるプロセッサ900のブロック図である。
図9中の複数の実線で囲まれたボックスは、単一のコア902A、システムエージェント910、1セットの1または複数のバスコントローラユニット916を有するプロセッサ900を図示する。複数の点線で囲まれたボックスの任意の追加は、複数のコア902A−N、システムエージェントユニット910内の1セットの1または複数の統合型メモリコントローラユニット914、及び専用ロジック908を有する代替的なプロセッサ900を図示する。
【0071】
したがって、プロセッサ900の複数の異なる実装は、1)統合型グラフィックス及び/または科学的(スループット)ロジック(1または複数のコアを含み得る)である専用ロジック908、及び1または複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、その2つの組み合わせ)である複数のコア902A―Nを有するCPU;2)主にグラフィクス及び/または科学(スループット)向けの多数の専用コアである複数のコア902A―Nを有するコプロセッサ;及び、3)多数の汎用インオーダコアである複数のコア902A―Nを有するコプロセッサを含みうる。したがって、プロセッサ900は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィックスプロセッシングユニット)、高スループットメニーインテグレーテッドコア(MIC)コプロセッサ(30以上のコアを含む)、組込みプロセッサ等の、汎用プロセッサ、コプロセッサ、または専用プロセッサでありうる。プロセッサは、1または複数のチップ上に実装されうる。プロセッサ900は、例えば、BiCMOS,CMOS、またはNMOSなどの幾つかのプロセス技術のうちの任意のものを用いる1または複数の基板の一部であり得て、及び/または、1または複数の基板上に実装されうる。
【0072】
メモリ階層は、複数のコア内の、1または複数レベルのキャッシュ、1セットの1または複数の共有キャッシュユニット906、及び、1セットの統合型メモリコントローラユニット914に連結された外部メモリ(図示せず)を備える。1セットの共有キャッシュユニット906は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他の複数レベルのキャッシュ等の1または複数の中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)、及び/またはそれらの組み合わせを含みうる。一実施形態において、リングベースの相互接続ユニット912は、統合型グラフィックスロジック908、1セットの共有キャッシュユニット906、及びシステムエージェントユニット910/統合型メモリコントローラユニット(複数)914を相互接続する一方で、複数の代替的実施形態は、そのような複数のユニットを相互接続する、任意の数の公知の技術を使用しうる。一実施形態において、コヒーレンシは、1または複数のキャッシュユニット906と複数のコア902A―Nとの間で維持される。
【0073】
いくつかの実施形態では、コア902A―Nのうちの1または複数は、マルチスレッド化することが可能である。システムエージェント910は、複数のコア902A―Nを調整し、操作する複数の構成要素を備える。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含みうる。PCUは、複数のコア902A―N及び統合型グラフィックスロジック908の電力状態の調整に必要なロジック及び複数の構成要素でありうるか、またはそれらを含みうる。ディスプレイユニットは、1または複数の外部接続のディスプレイの駆動用である。
【0074】
コア902A―Nは、アーキテクチャ命令セットに関して同種または異種でありうる。すなわち、2またはそれ以上のコア902A―Nは同一の命令セットを実行可能であり得て、一方で、他のコアはその命令セットのサブセットまたは異なる命令セットのみを実行可能でありうる。<例示的なコンピューターアーキテクチャ>
【0075】
図10−
図13は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末(PDA)、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスの当技術分野において既知の複数の他のシステム設計及び構成も適している。一般的には、本明細書で開示するような、プロセッサ及び/または他の実行ロジックを組み込み可能な多様なシステムまたは電子デバイスが概して適している。
【0076】
次に
図10を参照すると、本発明の一実施形態による、システム1000のブロック図が示される。システム1000は、コントローラハブ1020に連結される、1または複数のプロセッサ1010、1015を含みうる。一実施形態において、コントローラハブ1020は、グラフィックスメモリコントローラハブ(GMCH)1090及び入出力ハブ(IOH)1050(複数の別個のチップ上にあってもよい)を含み、GMCH1090は、メモリ1040及びコプロセッサ1045に連結されるメモリ及びグラフィクスコントローラを含み、IOH1050は、入出力(I/O)デバイス1060をGMCH1090に連結する。代替的に、メモリ及びグラフィクスコントローラのうちの1つまたは両方は、(本明細書で説明するように)プロセッサ内に統合されており、メモリ1040及びコプロセッサ1045は、プロセッサ1010と、IOH1050を有する単一チップ内のコントローラハブ1020とに直接連結されている。
【0077】
追加のプロセッサ1015の、任意選択される特性が
図10に破線で示される。各プロセッサ1010、1015は、本明細書で説明される、複数のプロセッサコアのうちの1または複数を含み得て、プロセッサ900のあるバージョンでありうる。
【0078】
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはその2つの組み合わせでありうる。少なくとも1つの実施形態に対して、コントローラハブ1020は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパスインターコネクト(QPI)などのポイントツーポイントインターフェース、または同様の接続1095を介してプロセッサ(複数)1010,1015と通信する。
【0079】
一実施形態において、コプロセッサ1045は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ等の専用プロセッサである。一実施形態において、コントローラハブ1020は、統合型グラフィックスアクセラレータを含みうる。
【0080】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む、メリットのメトリクスの範囲に関して、複数の物理リソース1010,1015間の違いは様々あり得る。
【0081】
一実施形態において、プロセッサ1010は一般的なタイプの、データプロセッシングオペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令がその複数の命令内に組み込まれうる。プロセッサ1010はこれらのコプロセッサ命令を、接続されたコプロセッサ1045によって実行されるべきタイプのものであると認識する。従って、プロセッサ1010はコプロセッサ1045に対して、これらのコプロセッサ命令(または、複数のコプロセッサ命令を表わす複数の制御信号)をコプロセッサバスまたは他の相互接続上に発行する。コプロセッサ(複数)1045は複数の受信したコプロセッサ命令を受け付け、実行する。
【0082】
次に
図11を参照すると、本発明の実施形態による、第1のより具体的な例示的システム1100のブロック図が示される。
図11に示されるように、マルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して連結される、第1のプロセッサ1170及び第2のプロセッサ1180を備える。プロセッサ1170および1180のそれぞれは、プロセッサ900のあるバージョンでありうる。本発明の一実施形態において、プロセッサ1170および1180はそれぞれ、プロセッサ1010および1015であり、一方コプロセッサ1138はコプロセッサ1045である。別の実施形態では、プロセッサ1170および1180はそれぞれ、プロセッサ1010及びコプロセッサ1045である。
【0083】
プロセッサ1170および1180はそれぞれ、統合型メモリコントローラ(IMC)ユニット1172および1182を備えるように示されている。プロセッサ1170は、自身の複数のバスコントローラユニットの一部として、ポイントツーポイント(P−P)インターフェース1176および1178も備え、同様に、第2のプロセッサ1180はP−Pインターフェース1186および1188を備える。プロセッサ1170、1180は、ポイントツーポイント(P−P)インターフェース回路1178、1188を用いて、P−Pインターフェース1150を介して情報を交換しうる。
図11に示されるように、IMC1172および1182は、複数のプロセッサを、各メモリ、すなわち、各プロセッサにローカルに接続されたメインメモリの複数部分でありうる、メモリ1132及びメモリ1134に連結する。
【0084】
プロセッサ1170、1180はそれぞれ、ポイントツーポイントインターフェース回路1176、1194、1186、1198を用いて、個々のP−Pインターフェース1152、1154を介してチップセット1190と各情報を交換しうる。チップセット1190は、高性能インターフェース1139を介してコプロセッサ1138と任意選択的に情報を交換しうる。一実施形態において、コプロセッサ1138は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ等の専用プロセッサである。
【0085】
共有キャッシュ(図示せず)は、いずれかのプロセッサ内、または両方のプロセッサの外部に含まれ得て、さらにP−P相互接続を介してその複数のプロセッサに接続され得て、プロセッサが低電力モードになった場合に、いずれかの、または両方のプロセッサのローカルキャッシュ情報が共有キャッシュにストアされるようにする。
【0086】
チップセット1190は、インターフェース1196を介して第1のバス1116に連結しうる。一実施形態において、第1のバス1116は、ペリフェラルコンポーネントインターコネクト(PCI)バスであってもよいし、またはPCIエクスプレスバスまたは別の第3世代I/O相互接続バス等のバスであってもよいが、本発明の範囲はそのように限定されない。
【0087】
図11に示されるように、第1のバス1116を第2のバス1120に連結するバスブリッジ1118と共に、様々なI/Oデバイス1114を、第1のバス1116に連結しうる。一実施形態においては、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなどの)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等の1または複数の追加のプロセッサ1115を第1のバス1116に連結する。一実施形態において、第2のバス1120はローピンカウント(LPC)バスでありうる。
【0088】
一実施形態において、様々なデバイスを、例えば、キーボード及び/またはマウス1122、通信デバイス1127、及び、複数の命令/コード及びデータ1130を含みうるディスクドライブまたは他の大容量ストレージデバイス等のストレージユニット1128を含む第2のバス1120に連結しうる。さらに、オーディオI/O1124を、第2のバス1120に連結してよい。他のアーキテクチャが可能であることに留意されたい。例えば、システムは、
図11のポイントツーポイントアーキテクチャではなく、マルチドロップバスまたは他のそのようなアーキテクチャを実装しうる。
【0089】
次に
図12を参照すると、本発明の実施形態による、第2のより具体的な例示的システム1200のブロック図が示される。
図11及び
図12中の同様のエレメントには同様の参照番号を付し、
図11中の複数の特定の態様を
図12から省き、
図12中の複数の他の態様を分かりにくくしないようにした。
【0090】
図12は、プロセッサ1170、1180がそれぞれ、統合されたメモリ及びI/O制御ロジック(「CL」)1172及び1182を備えうることを示している。したがって、CL1172、1182は、複数の統合型メモリコントローラユニットを備え、I/O制御ロジックを備える。
図12は、CL1172、1182に連結されるのはメモリ1132、1134だけでなく、IOデバイス1214も制御ロジック1172、1182に連結されることを示している。レガシーI/Oデバイス1215はチップセット1190に連結される。
【0091】
次に
図13を参照すると、本発明の実施形態による、SoC1300のブロック図が示される。
図9中の同様のエレメントには同様の参照番号が付してある。また、点線で囲まれたボックスは、より高度なSoC上の任意選択の機能である。
図13において、相互接続ユニット(複数)1302は、1セットの1または複数のコア202A―N及び共有キャッシュユニット(複数)906を備えるアプリケーションプロセッサ1310;システムエージェントユニット910;バスコントローラユニット(複数)916;統合型メモリコントローラユニット(複数)914;統合型グラフィックスロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含みうる1セットの1または複数のコプロセッサ1320;スタティックランダムアクセスメモリ(SRAM)ユニット1330;ダイレクトメモリアクセス(DMA)ユニット1332;及び1または複数の外部のディスプレイに連結するためのディスプレイユニット1340に連結される。一実施形態において、コプロセッサ(複数)1320は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組込みプロセッサ等の専用プロセッサを備える。
【0092】
本明細書にて開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせにおいて実装されうる。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発及び不揮発性メモリ、及び/またはストレージエレメントを含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装されうる。
【0093】
図11に図示するコード1130などのプログラムコードは、入力命令に適用され、本明細書で説明される機能を実行し、出力情報を生成する。出力情報は、既知の方法で1または複数の出力デバイスに適用されうる。こうした適用のために、プロセッシングシステムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを備える。
【0094】
プログラムコードは、高級手続き型プログラミング言語またはオブジェクト指向型プログラミング言語で実装され、プロセッシングシステムと通信する。プログラムコードは、望むならば、アセンブリ言語又は機械言語で実装されてもよい。実際には、本明細書で説明される複数のメカニズムは、何れの特定のプログラミング言語へも範囲を限定されるものではない。いずれの場合であっても、言語はコンパイラ型言語またはインタプリタ型言語でありうる。
【0095】
少なくとも1つの実施形態の1または複数の態様は、機械がリードすると、機械に、本明細書で説明した複数の技術を実行するロジックを組み立てさせるプロセッサ内の様々なロジックを表わす、機械可読媒体上にストアされた複数の代表的な命令により実装されうる。「IPコア」として知られるそのような表現は、有形のマシン可読媒体上にストアされ、様々な顧客または製造施設に供給されて、実際にロジックまたはプロセッサを作成する複数の製造機械にロードされうる。
【0096】
そのような機械可読記憶媒体は、限定はしないが、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD―RW)、及び光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気カードまたは光カード、または電子命令をストアするのに適した任意の他のタイプの媒体等のストレージ媒体を含む、機械またはデバイスによって製造または形成される物品の、非一時的で有形な複数の構成を含みうる。
【0097】
従って、本発明の複数の実施形態は、複数の命令を含むか、または、本明細書にて説明する複数の構造、複数の回路、複数の装置、複数のプロセッサ、及び/または複数のシステムの機能を定義するハードウェア記述言語(HDL)等の設計データを含む、非一時的で有形な機械可読媒体も含む。そのような複数の実施形態はプログラム製品と称されることもある。
【0098】
複数の特定の例示的な実施形態が添付の複数の図面において説明され、示されてきたが、複数のそのような実施形態は、広義の発明の例示に過ぎず、それを限定するものではなく、かつ、本発明は、示され、説明される具体的な複数の構造及び複数の構成に限定されるものではないことが理解されるべきである。なぜなら、本開示を研究すれば、当業者は様々な他の変更形態を考え付き得るからである。成長が早く、さらなる進歩を容易には予測し得ないこのような技術の領域においては、複数の開示した実施形態は、本開示の原理、または添付の特許請求の範囲から逸脱することなく、技術的進歩を可能にすることによって容易になるような、構成及び詳細な内容を、たやすく変更可能でありうる。本明細書によれば、以下の各項目に記載の事項もまた開示される。
[項目1]
第1のマスクレジスタ、第2のマスクレジスタ、第1のベクトルレジスタ、及び第2のベクトルレジスタを含むレジスタファイルと、
前記レジスタファイルに連結される実行回路と、を備え、
前記実行回路は、命令を実行し、前記第1のベクトルレジスタ内の与えられた数の複数のターゲットデータエレメントを、前記第2のベクトルレジスタ内の前記与えられた数の複数のソースデータエレメントで置き換え、
前記複数のソースデータエレメントの各々は、第2のビット値を有する前記第2のマスクレジスタ内のマスクビットに対応し、前記複数のターゲットデータエレメントの各々は、第1のビット値を有する前記第1のマスクレジスタ内のマスクビットに対応する
装置。
[項目2]
前記第1のビット値を有する前記第1のマスクレジスタの前記マスクビットの各々に対し、前記実行回路は、前記複数のソースデータエレメントのうちの1つとして、前記第2のマスクレジスタ内の前記第2のビット値の、対応するマスクビットを有するデータエレメントを探索するために前記第2のベクトルレジスタを検索する
項目1に記載の装置。
[項目3]
前記実行回路は、前記第1のベクトルレジスタ内の複数のデータエレメントに対して再帰計算を実行し、前記第1のベクトルレジスタ内に前記再帰計算の複数の結果を蓄積する
項目1または2に記載の装置。
[項目4]
前記実行回路は、前記第1のベクトルレジスタ内の1または複数のデータエレメントがさらに計算を必要としなくなるまで、前記第1のベクトルレジスタ内の複数のデータエレメントに対して再帰計算を実行し、前記第1のマスクレジスタを用いて、前記1または複数のデータエレメントが前記複数のターゲットデータエレメントであると示す
項目1から3の何れか一項に記載の装置。
[項目5]
前記第1のベクトルレジスタ内の前記与えられた数の複数のターゲットデータエレメントは、前記第1のベクトルレジスタ内の複数の下位のエレメントまたは複数の上位のエレメントのいずれかであり、前記第2のベクトルレジスタ内の前記与えられた数の複数のソースデータエレメントは、前記第2のベクトルレジスタ内の複数の下位のエレメントまたは複数の上位のエレメントのいずれかである
項目1から4の何れか一項に記載の装置。
[項目6]
前記第1のビット値は前記第2のビット値の逆である
項目1から5の何れか一項に記載の装置。
[項目7]
前記第1のビット値は前記第2のビット値と同一である
項目1から6のいずれか一項に記載の装置。
[項目8]
前記与えられた数は、前記第1のビット値を有する前記第1のマスクレジスタ内のマスクビットの数、及び、前記第2のビット値を有する前記第2のマスクレジスタ内のマスクビットの数のうちの小さい方である
項目1から7の何れか一項に記載の装置。
[項目9]
プロセッサが、第1のマスクレジスタ、第2のマスクレジスタ、第1のベクトルレジスタ、及び第2のベクトルレジスタを特定するベクトル移動命令を受信する段階と、
前記ベクトル移動命令に応答して、前記第1のベクトルレジスタ内の与えられた数の複数のターゲットデータエレメントを、前記第2のベクトルレジスタ内の前記与えられた数の複数のソースデータエレメントで置き換える段階と、を含み、
前記複数のソースデータエレメントの各々は、第2のビット値を有する前記第2のマスクレジスタ内のマスクビットに対応し、前記複数のターゲットデータエレメントの各々は、第1のビット値を有する前記第1のマスクレジスタ内のマスクビットに対応する
方法。
[項目10]
前記第1のビット値を有する前記第1のマスクレジスタの前記マスクビットの各々に対し、前記複数のソースデータエレメントのうちの1つとして、前記第2のマスクレジスタ内の前記第2のビット値の、対応するマスクビットを有するデータエレメントを探索するために前記第2のベクトルレジスタを検索する段階をさらに備える
項目9に記載の方法。
[項目11]
前記第1のベクトルレジスタ内の複数のデータエレメントに対して再帰計算を実行する段階と、前記第1のベクトルレジスタ内に前記再帰計算の複数の結果を蓄積する段階と、をさらに備える
項目9または10に記載の方法。
[項目12]
前記第1のベクトルレジスタ内の1または複数のデータエレメントがさらに計算を必要としなくなるまで、前記第1のベクトルレジスタ内の複数のデータエレメントに対し再帰計算を実行する段階と、
前記第1のマスクレジスタを用いて、前記1または複数のデータエレメントが前記複数のターゲットデータエレメントであると示す段階と、をさらに備える
項目9から11の何れか一項に記載の方法。
[項目13]
前記第2のベクトルレジスタ内の前記与えられた数の複数のソースデータエレメントは、前記第2のベクトルレジスタ内の複数の下位のデータエレメントまたは複数の上位のデータエレメントのいずれかであり、前記第1のベクトルレジスタ内の前記与えられた数の複数のターゲットデータエレメントは、前記第1のベクトルレジスタ内の複数の下位のデータエレメントまたは複数の上位のデータエレメントのいずれかである
項目9から12の何れか一項に記載の方法。
[項目14]
前記第1のビット値は前記第2のビット値の逆である
項目9から13の何れか一項に記載の方法。
[項目15]
前記第1のビット値は前記第2のビット値と同一である
項目9から14の何れか一項に記載の方法。
[項目16]
前記与えられた数は、前記第1のビット値を有する前記第1のマスクレジスタ内のマスクビットの数、及び、前記第2のビット値を有する前記第2のマスクレジスタ内のマスクビットの数のうちの小さい方である
項目9から15の何れか一項に記載の方法。
[項目17]
複数の入力データエレメントを含む入力データアレイをストアするメモリと、
第1のマスクレジスタ、第2のマスクレジスタ、第1のベクトルレジスタ、及び第2のベクトルレジスタを含むレジスタファイルと、
前記メモリ及び前記レジスタファイルに連結される実行回路と、を備え、前記実行回路は、複数のイタレーションの間、前記第1のベクトルレジスタに対し再帰計算を実行し、前記複数のイタレーションのうちの2回以上は、
前記入力データアレイから前記第2のベクトルレジスタへ前記複数の入力データエレメントのうちの少なくとも一部をロードするベクトルロードオペレーションと、
前記第2のベクトルレジスタ内の前記複数の入力データエレメントを前記第1のベクトルレジスタへ移動させるベクトル移動オペレーションと、
前記第1のマスクレジスタ及び前記第2のマスクレジスタを更新して、それぞれ、さらに計算を必要とする前記第1のベクトルレジスタ及び前記第2のベクトルレジスタ内の、複数のデータエレメントを特定するマスク更新オペレーションと、
前記第1のベクトルレジスタ内の前記複数のデータエレメントに対して実行するベクトル演算オペレーションと、
前記ベクトル演算オペレーションの複数の結果を前記メモリへストアするベクトルストアオペレーションからなる複数のオペレーションを含む
システム。
[項目18]
前記実行回路は、前記第1のベクトルレジスタ内の与えられた数の複数のターゲットデータエレメントを、前記第2のベクトルレジスタ内の前記与えられた数の複数のデータエレメントで置き換える前記ベクトル移動オペレーションを実行し、各ソースデータエレメントは、第2のビット値を有する前記第2のマスクレジスタ内のマスクビットに対応し、各ターゲットデータエレメントは、第1のビット値を有する前記第1のマスクレジスタ内のマスクビットに対応する
項目17に記載のシステム。
[項目19]
前記第1のビット値は前記第2のビット値の逆である
項目17に記載のシステム。
[項目20]
前記第1のビット値は前記第2のビット値と同一である
項目17に記載のシステム。
[項目21]
前記与えられた数は、前記第1のビット値を有する前記第1のマスクレジスタ内のマスクビットの数、及び、前記第2のビット値を有する前記第2のマスクレジスタ内のマスクビットの数のうちの小さい方である
項目17に記載のシステム。
[項目22]
前記実行回路は前記マスク更新オペレーションを実行して、前記第1のマスクレジスタ及び前記第2のマスクレジスタを更新し、前記第1のマスクレジスタ及び前記第2のマスクレジスタの複数のマスクビットがそれぞれ、さらに計算を必要とする、前記第1のベクトルレジスタ及び前記第2のベクトルレジスタの、複数の対応するデータエレメントを特定するようにする
項目17から21の何れか一項に記載のシステム。
[項目23]
前記第1のベクトルレジスタ、前記第1のマスクレジスタ、前記第2のベクトルレジスタ、及び前記第2のマスクレジスタを複数のオペランドとして特定するベクトル移動命令に応答して、前記実行回路は前記ベクトル移動オペレーションを実行する
項目17から22の何れか一項に記載のシステム。
[項目24]
前記第1のマスクレジスタ及び前記第2のマスクレジスタを複数のオペランドとして特定するマスク更新命令に応答して、前記実行回路は前記マスク更新オペレーションを実行する
項目17から23の何れか一項に記載のシステム。