【文献】
Freescale semiconductor,AltiVec Technology Programming Environments Manual,[online],www.nxp.com,2006年 4月,Page:6-167,URL,http://www.nxp.com/files/32bit/doc/ref_manual/ALTIVECPEM.pdf
(58)【調査した分野】(Int.Cl.,DB名)
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記1または複数の残存データ要素のそれぞれの位置を1つ右側にシフトさせる、請求項1から4のいずれか1項に記載の装置。
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、請求項1から5のいずれか1項に記載の装置。
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記1または複数の残存データ要素のそれぞれの位置を1つ右側にシフトさせる、請求項15から18のいずれか1項に記載のシステム。
【発明を実施するための形態】
【0011】
以下の説明において、様々な具体的詳細が記載される。しかし、本発明の複数の実施形態は、これらの具体的な詳細を用いずに実施され得ることを理解されたい。他の複数の例において、複数の周知の回路、構造、および技術は、本明細書の理解を不明瞭にしないようにするべく、詳細に示していない。本明細書において説明される複数の実施形態は、複数のリダクション演算を高速化するベクトルリダクション命令を提供する。複数のリダクション演算は、付加的なリダクション、乗法リダクション、または減法リダクションであり得る。複数のベクトルリダクション命令は、64ビットの倍精度浮動小数点数、32ビットの単精度浮動小数点数、16ビットの半精度浮動小数点数等、プロセッサによる処理され得るあらゆる数値データフォーマット、または他の複数の数値データフォーマットの任意のサイズによる複数のデータ要素のアレイに適用され得る。リダクション演算を実行する所定の順序を考慮して、複数のベクトルリダクション命令は、プロセッサが複数のベクトル演算(パックデータ演算とも呼ばれる)を用いて効率性を改善するべく、所与の所定順序でリダクション演算を実行するように構成され得る。いくつかの実施形態において、複数のベクトルリダクション命令は、高水準言語のシリアル化コードをコンパイルしてバイナリまたは他の中間フォーマットのベクトルコードにするコンパイラにより生成され得る。いくつかの実施形態において、ベクトルリダクション命令は、より短いベクトル幅のベクトルコードをより広いベクトル幅の別のベクトルコードに、または複数の新しいリダクション命令を利用しないベクトルコードからそれらの新しいリダクション命令を利用する別のベクトルコードに翻訳もしくは変換するバイナリトランスレーション/変換器システムにより生成され得る。いくつかの他の実施形態において、複数のベクトルリダクション命令は、コンピュータプログラマによりプログラムに書き込まれてもよい。
【0012】
一実施形態において、複数のベクトルリダクション命令は、複数の異なる算術演算および複数の異なる数値データフォーマット(例えば、単精度、倍精度、半精度等)のためにVADDREDUCEPS、VMULTREDUCEPS、VSUBREDUCEPS、ならびにそれらの変形を含む。接頭辞「V」は、複数のベクトル演算を示す。「ADD」、「MULT」、および「SUB」は、加算、乗算、および減算をそれぞれ示す。接尾辞「P」は、複数のパック演算(すなわち、ベクトル演算)を示し、接尾辞「S」は、複数の単精度データ要素を示す。他の複数の実施形態において、複数の異なる表記が、同一または類似の命令に用いられ得る。論述を単純化すれば、以下の説明では、別途具体的に記載されない限り、「ベクトルリダクション命令」という用語を用いることにより、これらのリダクション命令およびそれらの変形の全てを表し得る。一実施形態において、これらのベクトルリダクション命令により、プロセッサは、複数のデータ要素のアレイ上で算術演算(例えば、加算、減算、乗算等)を実行し、アレイにおける複数のデータ要素をシャッフルする。複数のベクトルリダクション命令は、1または複数のベクトルレジスタをオペランドとして用い、ソースオペランドとして機能するベクトルレジスタは、複数のデータ要素のアレイを用いて読み込まれる。各ベクトルリダクション命令は、複数のデータ要素上で動作し得る。複数のデータ要素のうちいくつかは、数学的に操作され(例えば、加算、減算、乗算等)、複数のデータ要素のうちいくつかは、シャッフルされる(例えば、アレイにおける異なる位置にシフトされる)。複数のベクトルリダクション命令は、複数のリダクション演算を高速化しつつ、複数の演算の同一の順序を保存し、複数の演算の所与の順序を指定するシリアルソースコードまたは別のソースコードと同一の結果を生成することができる。
【0013】
図1は、複数の新しいリダクション命令を含む、複数の命令を実行するように動作可能な回路を含む、実行ユニット140を有する命令処理装置115の実施形態のブロック図である。いくつかの実施形態において、命令処理装置115は、プロセッサ、マルチコアプロセッサのプロセッサコア、または電子システムにおける処理要素であり得る。
【0014】
デコーダ130は、複数のより高いレベルの機械命令またはマクロ命令の形態で複数の到来する命令を受信し、デコードして複数のより低いレベルのマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、または他のより低レベルの命令もしくは制御信号を生成し、これらは、元のより高いレベルの命令を反映し、および/またはこれから導出される。複数のより低レベルの命令または制御信号は、より低いレベル(例えば、回路レベルまたはハードウェアレベル)の複数の演算を介してより高いレベルの命令の演算を実装し得る。デコーダ130は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、マイクロコード、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、当技術分野において既知のデコーダを実装するべく用いられる他のメカニズム等が挙げられるが、これらに限定されない。
【0015】
デコーダ130は、キャッシュ110、メモリ120、または他の複数のリソースのために複数の到来する命令を受信し得る。複数のデコード済み命令は、実行ユニット140に送信される。実行ユニット140は、デコーダ130から1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を受信し、これらは、複数の受信済み命令を反映し、またはこれらから導出され得る。実行ユニット140は、レジスタファイル170、キャッシュ110、および/またはメモリ120からのデータ入力を受信し、レジスタファイル170、キャッシュ110、および/またはメモリ120へのデータ出力を生成する。
【0016】
一実施形態において、レジスタファイル170は、複数のアーキテクチャレジスタを含み、複数のアーキテクチャレジスタもレジスタと呼ばれる。別途指定され、または明らかである場合を除き、アーキテクチャレジスタ、レジスタファイル、およびレジスタという文言は、ソフトウェアおよび/またはプログラマに可視(例えば、ソフトウェアに可視)の複数のレジスタ、および/または複数のオペランドを識別するべく複数のマクロ命令により指定される複数のレジスタを指すものとして本明細書中で用いられる。これらのレジスタは、所与のマイクロアーキテクチャ(例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等)における他の複数の非アーキテクチャレジスタに対比される
【0017】
説明を不明瞭にするのを避けるべく、比較的単純な命令処理装置115が示され、説明される。他の実施形態は、2以上の実行ユニットを有し得ることを理解されたい。例えば、装置115は、例えば、算術ユニット、算術ロジックユニット(ALU)、整数ユニット、浮動小数点ユニット等の複数の異なるタイプの実行ユニットを含み得る。命令処理装置または複数のプロセッサのなおも他の複数の実施形態は、複数のコア、論理プロセッサ、または実行エンジンを有し得る。命令処理装置115のいくつかの実施形態は、
図7A〜13に関連して後に提供される。
【0018】
一実施形態によれば、レジスタファイル170は、1セットのベクトルレジスタ175を含み、これは、複数のベクトルリダクション命令のオペランドを格納するべく使用され得る。各ベクトルレジスタ175は、512ビット、256ビット、または128ビット幅(すなわち、64バイト、32バイト、または16バイト幅)であり得、または異なるベクトル幅が用いられてもよい。
【0019】
図2は、本明細書において説明される複数の命令をサポートする基礎的レジスタアーキテクチャ200の一実施形態を図示する。レジスタアーキテクチャ200は、x86、MMX(商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令、ならびにアドバンストベクトルエクステンション(AVX)(AVX1、AVX2、およびAVX3)と呼ばれる追加のセットのSIMD拡張を含む命令セットを実装するIntel(登録商標)Core(商標)プロセッサに基づく。しかし、複数の異なるレジスタの長さ、異なるレジスタのタイプ、および/または異なる数のレジスタをサポートする異なるレジスタアーキテクチャを使用し得ることを理解されたい。
【0020】
図示される実施形態において、512ビット幅の32のベクトルレジスタ210が存在する。これらのレジスタは、zmm0〜zmm31と呼ばれる。より低い16のzmmレジスタの下位の256ビットは、複数のレジスタymm0―15上にオーバーレイされる。より低い16のzmmレジスタの下位の128ビット(複数のxmmレジスタの下位の128ビット)は、複数のレジスタxmm0―15上にオーバーレイされる。図示される実施形態において、8つのマスクレジスタ220(k0〜k7)が存在し、それぞれは、64ビットの長さである。代替的な実施形態において、複数のマスクレジスタ220は、16ビット幅である。
【0021】
図示される一実施形態において、レジスタアーキテクチャ200は、16の64ビット汎用(GP)レジスタ230を更に含む。一実施形態において、これらは、既存のx86アドレスモードと共に用いられ、複数のメモリオペランドをアドレス指定する。また、本実施形態は、複数のRFLAGSレジスタ260、RIPレジスタ270、およびMXCSRレジスタ280を図示する。
【0022】
また、本実施形態は、MMXパック整数フラットレジスタファイル250がエイリアスされるスカラ浮動小数点(FP)スタックレジスタファイル(x87スタック)240を図示する。図示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビットの浮動小数点データに複数のスカラ浮動小数点演算を実行するべく用いられる8要素のスタックであるが、複数のMMXレジスタは、64ビットのパック整数データに複数の演算を実行し、ならびにMMXレジスタとxmmレジスタとの間で実行されるいくつかの演算のオペランドを保持するべく用いられる。
【0023】
本発明の代替的な実施形態は、より広いか、またはより狭いレジスタを使用し得る。
【0024】
更に、本発明の複数の代替的実施形態は、より多いかより少ない、または異なるレジスタファイルおよびレジスタを使用し得る。
【0025】
図3Aおよび3Bは、VADDREDUCEPS命令(単精度について)およびVADDREDUCEPD命令(倍精度について)にそれぞれに応答してプロセッサ(例えば、命令処理装置115)により実行される複数のリダクション演算の例を図示するダイアグラムである。半精度のバージョンは、同様に定義され得る。複数の例は、複数のリダクション演算のために加算を用いるが、代替の複数の実施形態において、加算演算子は、複数の数のシーケンスを単一の数に縮小させることができる任意の算術演算子により置換されてもよく、複数の演算が実行される順序は、その単一の数の値を変更し得る。
【0026】
図2のzmmレジスタ等、この例における各ベクトルレジスタ310、320、330および340は、64バイト幅で示される。各ベクトルレジスタは、4つのレーンに分割され、各レーン(16バイト)は、4つの単精度浮動小数点数等、同一の数の複数のデータ要素を格納する。代替の複数の実施形態において、複数のベクトルレジスタは、16バイト幅(例えば、
図2のxmmレジスタ)、32バイト幅(例えば、
図2のxmmレジスタ)、または異なるベクトル幅であり得、異なる数のレーンに分割され得る。
【0027】
図3Aの例において、ソースベクトルレジスタ310は、16の単精度データ要素A0〜A15を用いて4つのレーンに読み込まれる。VADDREDUCEPS命令により、プロセッサは、各レーン内で同様に動作し、複数の単精度値に関する付加的なリダクション演算を実行する。付加的なリダクション演算は、各レーンにおける2つの右端の値(すなわち、2つの最下位の値)を加算し、他の値は、レーン境界を交差することなく同一レーンにおいて位置を1つ右側にシフトさせる。ゼロを各レーンにおける左端(すなわち、最上位の)位置に挿入する。ソースベクトルレジスタ310の複数の値にこの演算を1回適用する結果を、
図3Aのデスティネーションベクトルレジスタ320に示す。一実施形態において、デスティネーションベクトルレジスタ320は、ソースベクトルレジスタ310と同一のレジスタであってもよい。代替の複数の実施形態において、レジスタ310および320は、異なるレジスタであってもよい。
【0028】
図3Bの例は、ソースベクトルレジスタ330における複数の倍精度値のデータ要素アレイにプロセッサにより実行されるVADDREDUCEPD命令を示す。ソースベクトルレジスタ330は、ソースベクトルレジスタ310と同一の幅を有し、従って、8つの倍精度値(
図3Aの16の単精度値ではなく)を格納し得る。VADDREDUCEPD命令を1回適用する結果を、デスティネーションベクトルレジスタ340に示し、デスティネーションベクトルレジスタ340は、ソースベクトルレジスタ330と同一のレジスタであるか、または異なるレジスタであり得る。
【0029】
より形式的には、命令VADDREDUCEPS SRC、DSTは、以下のように実行する。
DST[31:0]=SRC[31:0]+SRC[63:32]
DST[63:32]=SRC[95:64]
DST[95:64]=SRC[127:96]
DST[127:96]=0
DST[159:128]=SRC[159:128]+SRC[191:160]
DST[191:160]=SRC[223:192]
DST[223:192]=SRC[255:224]
DST[255:224]=0
DST[287:256]=SRC[287:256]+SRC[319:288]
DST[319:288]=SRC[351:320]
DST[351:320]=SRC[383:352]
DST[383:352]=0
DST[415:384]=SRC[415:384]+SRC[447:416]
DST[447:416]=SRC[479:448]
DST[479:448]=SRC[511:480]
DST[511:480]=0
倍精度バージョンVADDREDUCEPD SRC、DSTは、以下のように実行する。
DST[63:0]=SRC[63:0]+SRC[127:64]
DST[127:64]=0
DST[191:128]=SRC[191:128]+SRC[255:192]
DST[255:192]=0
DST[319:256]=SRC[319:256]+SRC][383:320]
DST[383:320]=0
DST[447:384]=SRC[447:384]+SRC[511:448]
DST[511:448]=0
【0030】
減算、乗算、または他の複数の算術演算のための相似のリダクション演算も定義され得る。更に、AVX3結合マスキングまたはゼロイングマスキングは、最終デスティネーションレジスタを書き込む場合に適用され得る。一実施形態において、複数のKマスクレジスタ220(
図2)は、最終デスティネーションレジスタに書き込まれた結果を修正するべく使用され得る。マスクレジスタが指定されない場合、(前の段落に説明したように)デスティネーションレジスタ全体が書き込まれる。結合マスキングが適用される代替的な一実施形態において、デスティネーションレジスタに複数の指定位置の元のコンテンツを保存するマスクレジスタが指定され得る。結合マスキングを用いて、最終値がデスティネーションレジスタに書き込まれる前に、前の段落で算出された結果は、デスティネーションレジスタの既存のコンテンツと結合される。ゼロマスキングが適用される代替的な一実施形態において、マスクは、ゼロになるべきデスティネーションレジスタにおける複数の位置を指定するマスクレジスタにおいて供給される。
【0031】
図4Aは、複数のアレイ位置の昇順で単精度データ要素のアレイに付加的なリダクション演算を実行するアセンブリコードの一例を示す。アセンブリコードは、(a)VADDREDUCEPS命令を用いないAVX3コード、(b)SSEコード、および(c)VADDREDUCEPS命令を用いるAVX3コードのシナリオを示す。(a)と(c)との間および(b)と(c)との間の矢印は、(a)および(b)におけるアセンブリコードが、例えば、コンパイラまたはコードトランスレータ/変換器を起動するコンピュータシステム、またはプログラマにより(c)におけるコードに翻訳または変換され得ることを示す。(a)および(c)におけるAVX3コードは、一度に16の単精度データ要素を読み込み得るが、(b)におけるSSEコードは、一度に4つの要素のみを読み込むことができることに留意されたい。従って、SSEコードは、AVX3コードの1ループにおけるのと同一の数の複数の要素を処理するには、4回ループする必要がある。リダクション演算のシリアル化した性質に起因して、(a)および(c)におけるAVX3コードは、まず、64バイトのzmmレジスタから4つの要素を抽出して、それぞれ16バイトのxmm0〜xmm3レジスタにする必要がある。コードにおいて、「ADDSS」は、ベクトルレジスタxmmにおける最下位の要素を和に加算するべく使用されるスカラ加算命令であり、「ADDPS」は、並列加算を実行するべく使用されるパックデータ加算命令である。「MOVSHDUP」および「MOVHLPS」等の命令は、後のスカラ加算のためにxmmにおける要素を最下位の位置にシャッフルするべく使用される様々なシャッフル命令である。加算の総数は、(a)、(b)、および(c)におけるコードのそれぞれについて同一である。そのため、元のコードの浮動小数点の四捨五入動作を保存する要求を考慮して16のシリアル加算を実行する必要性を避けることができない。それにも関わらず、(c)におけるAVX3コードは、他の2つのバージョンよりも効率的である。(c)におけるVADDREDUCEPS命令は、加算演算およびシャッフル演算の双方を含み、MOVSHDUP命令および、(a)および(b)の双方において存在するMOVHLPS命令等、16の要素のリダクションループ内でのレーン間抽出に対する必要性を取り除くからである。
【0032】
図4Bは、複数の単精度データ要素のアレイに付加的なリダクション演算を実行するアセンブリコードの更なる例を示し、(a)におけるSSEコードは、4つのレーンのそれぞれにおける4つの部分和を用いてリダクションを実行するべく生成され、次に、4つの部分和は、ループ本体に従って単一の値に合計される。
【0033】
アセンブリコードは、(a)SSEコードおよび(b)VADDREDUCEPS命令を用いるAVX3コードのシナリオを示す。コンパイラまたはバイナリトランスレーション/変換器システムは、(a)において、複数のより広いベクトルレジスタ(それぞれは、16の単精度データ要素を収容する)を利用してAVX3コードに変換することにより計算を加速するべく使用されるが、元のSSEコード(各ベクトルレジスタに4つの単精度データ要素を有する)の正確な浮動小数点の丸め動作を保存することができる。(b)において示されるAVX3コードは、SSEバージョン(すなわち、(a)における%[sum])に存在する4つの部分和を、zmmレジスタ(すなわち%[zsum])の各レーンの最下位の要素中に配置する。ループ本体に従って、4つの部分和要素自体は、単一の値に合計される。(b)のAVX3コードにおいて、%[indices]は、複数のデータ要素の置換パターンを決定する定数を含む。この置換は、4つのレーンのそれぞれの最下位の要素を最下位のレーンの4つの隣接要素に、また各レーンの最上位の要素を最上位のレーンの4つの隣接要素に移動させる。つまり、%[indices]は、32ビットの整数F,B,7,3,E,A,6,2,D,9,5,1,C,8,4,0を含み、複数のデータ要素を(a)におけるコードと同一の順序で操作することを可能にする。(b)におけるループ本体は、必要な4つの加算に加えて、1つの追加の命令のみ(置換命令VPERMPS)を含むことに留意されたい。
【0034】
図5Aは、一実施形態によるコンピュータシステム500の複数の要素を図示する。コンピュータシステム500は、ソフトウェアを格納するメインメモリ550を含み、ソフトウェアをサポートする複数のハードウェア要素も含む。ソフトウェアは、アプリケーションソフトウェア560(複数のコードブロック561を含む)およびOS530を含み得る。他のシステムおよびユーザレベルのソフトウェアは、示されない。一実施形態において、複数のコードブロック561は、コンパイラ520を用いてコンパイルされ、コンパイラ520は、メインメモリ550または異なるシステムのメモリ内に存在してもよい。コンパイラ520は、静的コンパイラまたは実行時コンパイラであり得る。いくつかの実施形態において、複数のコードブロック561は、OS530上で起動するその他のソフトウェア内に存在してもよい。一実施形態において、複数のコードブロック561は、OS530または他のシステムソフトウェアの一部であってもよい。一実施形態において、複数のコードブロック561は、上記のベクトルリダクション命令を含む。
【0035】
システム500は、1または複数のプロセッサ540等、複数のハードウェア要素を更に含む。複数のプロセッサ540のうち1または複数は、複数の580を含み得る。一実施形態において、各プロセッサコア580は、ハイパースレッディング技術による同時マルチスレッディング(SMT)等のマルチスレッディングをサポートする。各プロセッサコア580は、複数のベクトルリダクション命令を実行する実行回路585を含む。また、各プロセッサコア580は、ベクトルリダクション命令に関連して使用するために複数のベクトルレジスタを含む。一実施形態において、プロセッサ540は、
図1の命令処理装置115であり、実行回路585は、
図1の実行ユニット140である。
【0036】
図5Bは、一実施形態による、ベクトルリダクション命令を実行する方法510のブロックフロー図である。方法510は、プロセッサ(より詳細には、例えば、
図5Aの実行回路585)により、ベクトルリダクション命令の受信を開始する。ベクトルリダクション命令は、ソースオペランドに格納された複数のデータ要素を含むアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果へと縮小させる(ブロック511)。ソースオペランドおよびデスティネーションオペランドのそれぞれは、1セットのベクトルレジスタのうちの1つであり、各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納する。リダクション演算子は、加算、減算、乗算、または他の算術演算子であり得る。各データ要素は、倍精度の浮動小数点数、単精度小数点数、半精度小数点数、または複数の他の数値データフォーマットであり得る。ベクトルリダクション命令に応答して、プロセッサは、各レーンにおける複数のデータ要素のうち2つにリダクション演算子を適用し(ブロック512)、複数のデータ要素のうち少なくとも1つが各レーンに残存する場合に、1または複数の残存データ要素をシフトさせる(ブロック513)。また、プロセッサは、各レーンにおける最上位の位置にゼロを挿入してもよい(ブロック514)。一実施形態において、プロセッサは、上記のベクトルリダクション命令のいずれも有しないリダクションコードを、ベクトルリダクション命令のうち1または複数を有する翻訳済みリダクションコードに変換することができ、リダクションコードおよび翻訳済みリダクションコードは、複数のレーン全体で複数のデータ要素のアレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する。
【0037】
様々な実施形態において、
図5Bの方法は、汎用プロセッサ、特定用途用プロセッサ(例えば、グラフィクスプロセッサもしくはデジタル信号プロセッサ)、または別のタイプのデジタルロジックデバイスもしくは命令処理装置により実行され得る。いくつかの実施形態において、
図5Bの方法は、
図5Aの実行回路585、
図1の命令処理装置115、または
図7A〜13において示す実施形態等の類似のプロセッサ、装置、もしくはシステムにより実行され得る。更に、
図5Aの実行回路585、
図1の命令処理装置115、ならびに
図7A〜13に示すプロセッサ、装置、またはシステムは、
図5Bの方法によるものと同一、類似、または異なるいずれかの演算および方法の複数の実施形態を実行し得る。
【0038】
いくつかの実施形態において、
図1の命令処理装置115は、ソース命令セットからターゲット命令セットに命令を変換する命令変換器と共に動作し得る。例えば、命令変換器は、命令を、コアにより処理される1または複数の他の命令に翻訳(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィング、エミュレート、または変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令変換器は、プロセッサ上、プロセッサから離れて、または部分的にプロセッサ上にあり、部分的にプロセッサから離れていてもよい。
【0039】
図6は、本発明の複数の実施形態による、ソフトウェア命令変換器の使用を対比するブロック図である。図示する実施形態において、命令変換器は、ソフトウェア命令変換器であるが、別法では、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。
図6は、x86コンパイラ604を用いてコンパイルされ、少なくとも1つのx86命令セットコアを有するプロセッサ616によりネイティブに実行され得るx86バイナリコード606を生成し得る、高水準言語602のプログラムを示す。少なくとも1つのx86命令セットコアを有するプロセッサ616は、少なくとも1つのx86命令セットコアを有するインテル製プロセッサと実質的に同一の結果を実現するべく、(1)インテルx86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するインテル製プロセッサ上で起動することを目的とする複数のオブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを互換的に実行または処理することにより、少なくとも1つのx86命令セットコアを有するインテル製プロセッサと実質的に同一の関数を実行し得るいずれのプロセッサも表す。x86コンパイラ604は、更なる連携処理を用い、または用いずに、少なくとも1つのx86命令セットコア616を有するプロセッサ上で実行され得る、x86バイナリコード606(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。
【0040】
同様に、
図6は、代替的な命令セットコンパイラ608を用いてコンパイルされ、少なくとも1つのx86命令セットコアを有しないプロセッサ614(例えば、カリフォルニア州サニーベールのMIPS TechnologyのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る、代替的な命令セットバイナリコード610を生成し得る、高水準言語602のプログラムを示す。命令変換器612は、x86バイナリコード606を、x86命令セットコアを有しないプロセッサ614によりネイティブに実行され得るコードに変換するべく使用される。この変換済みコードは、代替的な命令セットバイナリコード610と同一である可能性が高くない。これを行うことができる命令変換器を作製することが困難であるためである。しかし、変換済みコードは、一般的な演算を成し遂げ、代替的な命令セットの複数の命令からなるであろう。従って、命令変換器612は、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットのプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、x86バイナリコード606を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【0041】
例示的な複数のコアアーキテクチャ
インオーダおよびアウトオブオーダコアブロック図
図7Aは、本発明の複数の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの双方を図示するブロック図である。
図7Bは、本発明の複数の実施形態による、インオーダアーキテクチャコアの例示的な一実施形態、およびプロセッサに含まれる例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの双方を図示するブロック図である。
図7Aおよび7Bにおける実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを図示するが、複数の点線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン、およびコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであることを考慮して、アウトオブオーダ態様は、説明される。
【0042】
図7Aにおいて、プロセッサパイプライン700は、フェッチ段702、長さデコード段704、デコード段706、割り当て段708、リネーム段710、スケジューリング(発送または発行としても知られる)段712、レジスタ読み出し/メモリ読み出し段714、実行段716、ライトバック/メモリ書込み段718、例外処理段722、およびコミット段724を含む。
【0043】
図7Bは、実行エンジンユニット750に結合されたフロントエンドユニット730を含むプロセッサコア790を示し、双方がメモリユニット770に結合される。コア790は、縮小命令セットコンピューテイング(RISC)コア、複合命令セットコンピューテイング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的コアタイプであってもよい。なおも別の選択肢としては、コア790は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューテインググラフィクス処理ユニット(GPGPU)コア、グラフィックスコア等の専用コアであってもよい。
【0044】
フロントエンドユニット730は、命令キャッシュユニット734に結合された分岐予測ユニット732を含み、分岐予測ユニット732は、命令翻訳ルックアサイドバッファ(TLB)736に結合され、命令翻訳ルックアサイドバッファ736は、命令フェッチユニット738に結合され、命令フェッチユニット738は、デコードユニット740に結合される。デコードユニット740(またはデコーダ)は、複数の命令をデコードし、出力として、1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元の命令からデコードされ、または、元の命令を反映し、あるいは元の命令から導出される。デコードユニット740は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア790は、特定のマクロ命令(例えば、デコードユニット740またはフロントエンドユニット730内の)のためのマイクロコードを格納するマイクロコードROMまたは他の媒体を含む。デコードユニット740は、実行エンジンユニット750内のリネーム/アロケータユニット752に結合される。
【0045】
実行エンジンユニット750は、リタイアメントユニット754および1または複数のスケジューラユニット756のセットに結合されたリネーム/アロケータユニット752を含む。スケジューラユニット756は、任意の数の異なるスケジューラを表し、複数の予約局、中央命令ウィンドウ等を含む。スケジューラユニット756は、物理レジスタファイルユニット758に結合される。物理レジスタファイルユニット758のそれぞれは、1または複数の物理レジスタファイルを表し、その異なるものが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行される次の命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット758は、ベクトルレジスタユニット、ライトマスクマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット758は、リタイアメントユニット754と重複しており、レジスタリネーミングおよびアウトオブオーダ実行が実装され得る(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、複数のレジスタマップおよび複数のレジスタのプールを用いる等して)様々な様式を図示するリタイアメントユニット754および物理レジスタファイルユニット758は、実行クラスタ760に結合される。実行クラスタ760は、1または複数の実行ユニット762のセットおよび1または複数のメモリアクセスユニット764のセットを含む。複数の実行ユニット762は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行し得る。いくつかの実施形態は、複数の具体的関数または複数のセットの関数に専用のいくつかの実行ユニットを含んでもよいが、他の複数の実施形態は、1つのみの実行ユニットまたは複数の実行ユニットを含んでもよく、これらは全て、あらゆる関数を実行する。スケジューラユニット756、物理レジスタファイルユニット758、および実行クラスタ760は、場合によっては複数であるものとして示される。特定の複数の実施形態が、複数の特定のタイプのデータ/演算(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン。これらは、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが、メモリアクセスユニット764を有する特定の実施形態が実装される)用に別個の複数のパイプラインを作成するからである。また、別個の複数のパイプラインが使用される場合、これらのパイプラインのうち1または複数は、アウトオブオーダ発行/実行であり、レストインオーダであってもよいことを理解されたい。
【0046】
メモリアクセスユニット764のセットは、メモリユニット770に結合され、メモリユニット770は、データキャッシュユニット774に結合されたデータTLBユニット772を含み、データTLBユニット772は、レベル2(L2)キャッシュユニット776に結合される。例示的な一実施形態において、複数のメモリアクセスユニット764は、読み込みユニット、格納アドレスユニット、および格納データユニットを含んでもよく、それらのそれぞれが、メモリユニット770におけるデータTLBユニット772に結合される。命令キャッシュユニット734は、メモリユニット770におけるレベル2(L2)キャッシュユニット776に更に結合される。L2キャッシュユニット776は、1または複数の他のレベルのキャッシュに、そして最終的にはメインメモリに結合される。
【0047】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン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を実行する。
【0048】
コア790は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンについてはいくつかの拡張が追加されている)、カルフォルニア州サニーベールのMIPS TechnologyのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingのARM命令セット(NEON等の任意選択の追加の拡張))をサポートすることができる。一実施形態において、コア790は、パックデータ命令セット拡張(例えば、SSE、AVX1、AVX2等)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数の演算が、パックデータを用いて実行されることを可能にする。
【0049】
コアは、マルチスレッディング(2またはそれ以上の並列なセットの演算またはスレッドを実行する)をサポートすることができ、タイムスライスされたマルチスレッディング、同時マルチスレッディング(1つの物理コアが、物理コアが同時にマルチスレッディングしている複数のスレッドのそれぞれに対して論理コアを提供する)、またはこれらの組み合わせ(例えば、タイムスライスされたフェッチングおよびデコード、ならびにインテル(登録商標)ハイパースレッディング技術等、その後の同時マルチスレッディング)を含む様々な方法でサポートをすることができることを理解されたい。
【0050】
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。また、プロセッサの図示される実施形態は、別個の命令および複数のデータキャッシュユニット734/774、ならびに共有L2キャッシュユニット776を含むが、代替的な複数の実施形態は、例えば、レベル1(LI)内部キャッシュまたは複数のレベルの内部キャッシュ等、複数の命令およびデータの双方に対して1つの内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュ、およびコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。あるいは、キャッシュの全ては、コアおよび/またはプロセッサの外部にあってもよい。
【0051】
具体的な例示的インオーダコアアーキテクチャ
図8A〜
図8Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示し、そのコアは、チップにおいて、いくつかのロジックブロック(同一のタイプおよび/または異なるタイプの他の複数のコアを含む)のうちの1つであろう。複数のロジックブロックは、用途に応じて、いくつかの固定関数ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックを用いる高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
【0052】
図8Aは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク802への接続を伴い、レベル2(L2)キャッシュ804のローカルサブセットを有する、単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ800は、パックデータ命令セット拡張を用いるx86命令セットをサポートする。LIキャッシュ806は、キャッシュメモリに低いレイテンシでアクセスし、スカラユニットおよびベクトルユニットへと至ることを可能にする。一実施形態において(設計を単純化するべく)、スカラユニット808およびベクトルユニット810は、複数の別個のレジスタセット(それぞれ、スカラレジスタ812およびベクトルレジスタ814)を用い、それらの間で転送されるデータは、メモリに書き込まれた後、レベル1(LI)キャッシュ806からリードバックされ、本発明の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、またはデータが、ライトバックおよびリードバックされることなく2つのレジスタファイル間で転送されることを可能にする通信パスを含む)を用い得る。
【0053】
L2キャッシュ804のローカルサブセットは、複数の別個のローカルサブセットに分割され、プロセッサコア毎に1つのグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ804の自身のローカルサブセットへの直接的アクセス経路を有する。プロセッサコアにより読み込まれるデータは、L2キャッシュサブセット804内に格納され、自身のローカルL2キャッシュサブセットにアクセスする他の複数のプロセッサコアと並列して迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、自身のL2キャッシュサブセット804内に格納され、必要な場合に、他の複数のサブセットからフラッシュされる。リングネットワークは、共有データのためにコヒーレンシを確実にする。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ、および他のロジックブロック等のエージェントがチップ内で互いに通信することを可能にする。
【0054】
図8Bは、本発明の複数の実施形態による、
図8Aのプロセッサコアの一部の拡大図である。
図8Bは、LIキャッシュ804のLIデータキャッシュ806A部分、ならびにベクトルユニット810および複数のベクトルレジスタ814に関する更なる詳細を含む。具体的には、ベクトルユニット810は、16wideのベクトル処理ユニット(VPU)(16wideAのLU828を参照されたい)であり、整数、単精度浮動、および倍精度浮動の命令のうち1または複数を実行する。VPUは、スウィズルユニット820、数値変換ユニット822A〜Bを用いる数値変換、およびメモリ入力に基づく複製ユニット824を用いた複製を用いてレジスタ入力をスウィズルすることをサポートする。ライトマスクレジスタ826は、生じるベクトル書き込みを断定することを可能にする。
【0055】
集積メモリコントローラおよびグラフィックスを用いるプロセッサ
図9は、プロセッサ900のブロック図であり、プロセッサ900は、本発明の複数の実施形態による2以上のコア、集積メモリコントローラ、集積グラフィックスを有し得る。
図9の実線で囲まれた複数のボックスは、シングルコア902A、システムエージェント910、1または複数のバスコントローラーユニットのセット916を有するプロセッサ900を図示するが、複数の点線ボックスの任意選択の加算は、複数のコア902A―N、システムエージェントユニット910内の1または複数の集積メモリコントローラユニットのセット914、および特定用途用ロジック908を有する代替的なプロセッサ900を図示する。
【0056】
従って、プロセッサ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または複数の基板の一部であってもよく、および/またはその上に実装されてもよい。
【0057】
メモリヒエラルキーは、複数のコア内の1または複数のレベルのキャッシュ、1セット、または1もしくは複数の共有キャッシュユニット906、および複数の集積メモリコントローラユニットのセット914に結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニットのセット906は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他の複数のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの複数の組み合わせ等、1または複数の中間レベルのキャッシュを含み得る。一実施形態において、リングベースの相互接続ユニット912は、統合グラフィックスロジック908、複数の共有キャッシュユニットのセット906、およびシステムエージェントユニット910/集積メモリコントローラユニット914を相互接続し、代替的な複数の実施形態は、そのような複数のユニットを相互接続する任意の数の周知の技術を使用し得る。一実施形態において、コヒーレンシは、1または複数のキャッシュユニット906と複数のコア902―A―Nとの間で維持される。
【0058】
いくつかの実施形態において、コア902A―Nのうち1または複数は、マルチスレッディングが可能である。システムエージェント910は、複数のコア902A―Nを調整および操作するそれらの構成要素を含む。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、複数のコア902A―Nおよび統合グラフィックスロジック908の電力状態を調整するのに必要とされるロジックおよび複数のコンポーネントであるか、またはこれらを含んでもよい。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
【0059】
複数のコア902A―Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。つまり、複数のコア902A―Nのうち2またはそれ以上は、同一の命令セットを実行することができるが、他のものは、その命令セットのサブセットまたは異なる命令セットのみを実行することができる場合がある
【0060】
例示的な複数のコンピューターアーキテクチャ
図10〜13は、例示的な複数のコンピューターアーキテクチャのブロック図である。当技術分野で既知のラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルド型デバイス、および他の様々な電子デバイスのための他の複数のシステム設計および構成も好適である。一般的に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことが可能な多種多様なシステムまたは電子デバイスは、概ね好適である。
【0061】
ここで
図10を参照すると、本発明の一実施形態によるシステム1000のブロック図が示されている。システム1000は、1または複数のプロセッサ1010、1015を含み、1または複数のプロセッサ1010、1015は、コントローラハブ1020に結合され得る。一実施形態において、コントローラハブ1020は、グラフィックスメモリコントローラハブ(GMCH)1090および入力/出力ハブ(IOH)1050(これは、別個のチップ上にあってもよい)を含む。GMCH1090は、メモリ1040およびコプロセッサ1045が結合されるメモリコントローラおよび複数のグラフィクスコントローラを含む。IOH1050は、複数の入力/出力(I/O)デバイス1060をGMCH1090に結合する。あるいは、メモリおよび複数のグラフィクスコントローラのうち1つまたは双方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ1040およびコプロセッサ1045は、プロセッサ1010、およびIOH1050を有するシングルチップにおけるコントローラハブ1020に直に結合される。
【0062】
追加の複数のプロセッサ1015の任意選択の性質は、
図10において、破線で示される。各プロセッサ1010、1015は、本明細書において説明される複数のプロセッサコアのうち1または複数を含んでもよく、プロセッサ900のいくつかのバージョンであってもよい。
【0063】
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも1つの実施形態については、コントローラハブ1020は、フロントサイドバス(FSB)等のマルチドロップバス、クイックパスインターコネクト(QPI)等のポイントツーポイントインターフェース、または類似の接続1095を介して、プロセッサ1010、1015と通信する。
【0064】
一実施形態において、コプロセッサ1045は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ1020は、集積グラフィックスアクセラレータを含んでもよい。
【0065】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等、性能の測定基準の範囲の観点において、物理リソース1010、1015の間には、様々な差異が存在し得る。
【0066】
一実施形態において、プロセッサ1010は、一般的なタイプのデータ処理演算を制御する複数の命令を実行する。複数のコプロセッサ命令は、複数の命令中に埋め込まれてもよい。プロセッサ1010は、付加コプロセッサ1045により実行されるべきタイプとして、これらのコプロセッサ命令を認識する。従って、プロセッサ1010は、コプロセッサバスまたは他の相互接続に関するこれらのコプロセッサ命令(または、複数のコプロセッサ命令を表す制御信号)を、コプロセッサ1045に発行する。コプロセッサ1045は、複数の受信済みコプロセッサ命令を承諾し、実行する。
【0067】
ここで
図11を参照すると、本発明の一実施形態による、第1のより具体的な例示的システム1100のブロック図が示される。
図11に示されるように、マルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して結合される第1のプロセッサ1170および第2のプロセッサ1180を含む。プロセッサ1170および1180のそれぞれは、プロセッサ900のいくつかのバージョンであってもよい。本発明の一実施形態において、プロセッサ1170および1180は、それぞれ、プロセッサ1010および1015であるが、コプロセッサ1138は、コプロセッサ1045である。別の実施形態において、プロセッサ1170および1180は、それぞれ、プロセッサ1010およびコプロセッサ1045である。
【0068】
集積メモリコントローラ(IMC)ユニット1172および1182をそれぞれ含むプロセッサ1170および1180が示される。また、プロセッサ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に複数のプロセッサを結合し、メモリ1132およびメモリ1134は、各プロセッサにローカルに付加されたメインメモリの一部になり得る。
【0069】
プロセッサ1170、1180はそれぞれ、ポイントツーポイントインターフェース回路1176、1194、1186、1198を用いて、個々のP−Pインターフェース1152、1154を介してチップセット1190と情報を交換し得る。チップセット1190は、任意選択で、高性能インターフェース1139を介してコプロセッサ1138と情報を交換し得る。一実施形態において、コプロセッサ1138は、例えば、ハイスループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ等の特定用途用プロセッサである。
【0070】
共有キャッシュ(図示せず)は、いずれかのプロセッサ内または双方のプロセッサの外側に含まれてもよいが、プロセッサが低電力モードに置かれる場合に、いずれかのプロセッサまたは双方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、P−P相互接続を介して複数のプロセッサと接続される。
【0071】
チップセット1190は、インターフェース1196を介して第1のバス1116に結合され得る。一実施形態において、第1のバス1116は、周辺装置相互接続(PCI)バス、またはPCIエクスプレスバスもしくは別の第3世代I/O相互接続バス等のバスであってもよいが、本発明の範囲は、そのようには限定されない。
【0072】
図11において示されるように、様々なI/Oデバイス1114は、第1のバス1116を第2のバス1120に結合するバスブリッジ1118と共に、第1のバス1116に結合され得る。一実施形態において、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータ、またはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ1115は、第1のバス1116に結合される。一実施形態において、第2のバス1120は、ローピンカウント(LPC)バスであってもよい。様々なデバイスは、一実施形態において、例えば、キーボードおよび/もしくはマウス1122、複数の通信デバイス1127、および複数の命令/コードおよびデータ1130を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット1128を含む、第2のバス1120に結合され得る。更に、音声I/O1124は、第2のバス1120に結合され得る。他の複数のアーキテクチャが可能であることに留意されたい。例えば、
図11のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【0073】
ここで
図12を参照すると、本発明の一実施形態による、第2のより具体的な例示的システム1200のブロック図が示される。
図11および12の同様の要素は、同様の参照番号を有し、
図11の特定の複数の態様は、
図12の他の複数の態様を不明瞭にするのを避けるべく、
図12から省略されている。
【0074】
図12は、プロセッサ1170、1180が集積メモリおよびI/O制御ロジック(「CL」)1172および1182をそれぞれ含み得ることを図示する。従って、CL1172、1182は、複数の集積メモリコントローラユニットを含み、I/O制御ロジックを含む。
図12は、メモリ1132、1134がCL1172、1182に結合されるのみならず、複数のI/Oデバイス1214も制御ロジック1172、1182に結合されることも図示する。レガシーI/Oデバイス1215は、チップセット1190に結合される。
【0075】
ここで
図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プロセッサ、組込みプロセッサ等の特定用途用プロセッサを含む。
【0076】
本明細書において開示される複数のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/または複数の記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステムで実行する複数のコンピュータプログラムもしくはプログラムコードとして実装されてもよい。
【0077】
図11において図示されるコード1130等のプログラムコードは、本明細書において説明される複数の関数を実行し、出力情報を生成する複数の入力命令に適用され得る。出力情報は、既知の様式で、1または複数の出力デバイスに適用され得る。本願において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路、(ASIC)、またはマイクロプロセッサ等、プロセッサを有するいずれのシステムも含む。
【0078】
プログラムコードは、処理システムと通信するべく、高水準手順型またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは、所望であれば、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、範囲において、いずれの特定プログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイラ型言語またはインタプリタ型言語であってもよい。
【0079】
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表し、機械により読み込まれると、機械に本明細書において説明される複数の技術を実行するロジックを作成させることができる機械可読媒体に格納された当該ロジックを表現する複数の命令により実装される。「IPコア」として既知のそのような表現は、有形の機械可読媒体に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に製造する複数の製造機械に読み込まれ得る。
【0080】
そのような機械可読記憶媒体は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD―ROM)、再書き込み可能コンパクトディスク(CD―RW)、および磁気光ディスクを含むその他のタイプのディスク、リードオンリメモリ(ROM)等の半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)等のランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、位相変化メモリ(PCM)、磁気もしくは光カード、または複数の電子命令を格納するのに好適なその他のタイプの媒体等の記憶媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な複数の構成の物品を含み得るが、これらに限定されない。
【0081】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、プロセッサ、および/またはシステム特徴を規定するハードウェア記述言語(HDL)等の複数の命令または設計データを含む非一時的で有形の機械可読媒体も含む。また、そのような複数の実施形態は、プログラム製品と呼ばれ得る。
【0082】
特定の例示的な複数の実施形態が添付の図面に記載され、示されているが、そのような複数の実施形態は、広範な発明を図示するのみであって、これらに限定するものではなく、本本発明は、本開示を検討すれば、様々な他の変更形態が当業者に想到し得るので、示され、記載される複数の具体的構造および構成に限定されるものではないことを理解されたい。成長が急速であり、更に、発展が容易に予測できない、本技術のような技術領域において、開示される複数の実施形態は、本開示の原理または特許請求の範囲から逸脱することなく、技術的発展を可能にすることにより促進される構成および詳細において容易に変更可能であり得る。
本実施形態の例を下記の各項目として示す。
[項目1]
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを備え、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納し、
前記実行回路は、
ベクトルリダクション命令を受信し、ソースオペランドに格納された前記複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小させ、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうちの2つに適用し、
前記複数のデータ要素のうち少なくとも1つが各レーンに残存する場合に、1または複数の残存データ要素をシフトさせ、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、前記複数のベクトルレジスタのうちの1つである、装置。
[項目2]
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、項目1に記載の装置。
[項目3]
前記リダクション演算子は、加算、減算、または乗算を含む、項目1または2に記載の装置。
[項目4]
前記実行回路は、各レーンにおける複数の最下位のデータ要素のうち2つに前記リダクション演算子を適用する、項目1から3のいずれか1項に記載の装置。
[項目5]
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記1または複数の残存データ要素のそれぞれの位置を1つ右側にシフトさせる、項目1から4のいずれか1項に記載の装置。
[項目6]
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目1から5のいずれか1項に記載の装置。
[項目7]
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、項目1から6のいずれか1項に記載の装置。
[項目8]
ベクトルリダクション命令を受信し、ソースオペランドに格納された複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小させる段階と、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうち2つに適用する段階と、
前記複数のデータ要素のうち少なくとも1つが各レーンに残存する場合に、1または複数の残存データ要素をシフトさせる段階とを備え、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、複数のベクトルレジスタのうちの1つであり、各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納する、方法。
[項目9]
前記ベクトルリダクション命令に応答して、各レーンにおける最上位の位置にゼロを挿入する段階を更に備える、項目8に記載の方法。
[項目10]
前記リダクション演算子は、加算、減算、または乗算を含む、項目8または9に記載の方法。
[項目11]
前記リダクション演算子を適用する段階は、各レーンにおける複数の最下位のデータ要素のうち2つに前記リダクション演算子を適用することを更に有する、項目8から10のいずれか1項に記載の方法。
[項目12]
複数の位置をシフトさせる段階は、各レーンにおいて前記1または複数の残存データ要素のそれぞれの位置を1つ右側にシフトさせる段階を更に有する、項目8から11のいずれか1項に記載の方法。
[項目13]
前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換する段階を更に備え、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目8から12のいずれか1項に記載の方法。
[項目14]
前記複数のデータ要素のそれぞれは、倍精度浮動小数点数、単精度浮動小数点数、または半精度浮動小数点数である、項目8から13のいずれか1項に記載の方法。
[項目15]
メモリと、
前記メモリに結合されたプロセッサとを備え、
前記プロセッサは、
複数のベクトルレジスタと、
前記複数のベクトルレジスタに結合された実行回路とを有し、
各ベクトルレジスタは、複数のレーンに分割され、各レーンは、同一の数の複数のデータ要素を格納し、
前記実行回路は、
ベクトルリダクション命令を受信し、ソースオペランドに格納された前記複数のデータ要素のアレイを、リダクション演算子を用いてデスティネーションオペランド内の結果に縮小し、
前記ベクトルリダクション命令に応答して、前記リダクション演算子を各レーンにおける前記複数のデータ要素のうち2つに適用し、
前記複数のデータ要素のうち少なくとも1つが各レーンに残存する場合に、1または複数の残存データ要素をシフトさせ、
前記ソースオペランドおよび前記デスティネーションオペランドのそれぞれは、前記複数のベクトルレジスタのうちの1つである、システム。
[項目16]
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおける最上位の位置にゼロを挿入する、項目15に記載のシステム。
[項目17]
前記リダクション演算子は、加算、減算、または乗算を含む、項目15または16に記載のシステム。
[項目18]
前記実行回路は、各レーンにおける複数の最下位のデータ要素のうち2つに前記リダクション演算子を適用する、項目15から17のいずれか1項に記載のシステム。
[項目19]
前記ベクトルリダクション命令に応答する前記実行回路は、各レーンにおいて前記1または複数の残存データ要素のそれぞれの位置を1つ右側にシフトさせる、項目15から18のいずれか1項に記載のシステム。
[項目20]
前記実行回路は、前記ベクトルリダクション命令を用いないリダクションコードを、前記ベクトルリダクション命令を用いる翻訳済みリダクションコードに変換し、
前記リダクションコードおよび前記翻訳済みリダクションコードは、前記複数のレーン全体で複数のデータ要素の前記アレイに適用される複数のリダクション演算の同一のシーケンスを指定し、同一の結果を生成する、項目15から19のいずれか1項に記載のシステム。