【文献】
泉沢 裕之 他,「SXシステムの科学技術演算処理装置」,NEC技報,日本,日本電気株式会社,1985年12月12日,第39巻 第1号,17頁〜24頁
(58)【調査した分野】(Int.Cl.,DB名)
前記命令は、融合化マスキング及びゼロ化マスキングのうちのどちらが前記命令に使用されるかを制御するフィールドを有する、請求項1乃至5の何れか一項に記載の装置。
【発明を実施するための形態】
【0006】
以下の記載においては、数多くの具体的詳細事項が説明される。しかしながら、理解されるように、本発明の実施形態はそれらの具体的詳細事項を用いずに実施されてもよい。また、本明細書の理解を曖昧にしないよう、周知の回路、構造及び技術については詳細に示していない。
【0007】
本明細書における“一実施形態”、“或る実施形態”、“一実施形態例”などへの言及は、記載される実施形態が特定の機構、構造又は特徴を含み得ることを指し示すものであるが、必ずしも全ての実施形態がその特定の機構、構造又は特徴を含むわけではない。さらに、そのような言い回しは必ずしも同じ実施形態に言及しているわけではない。また、或る特定の機構、構造又は特徴が或る実施形態に関連して説明されるとき、明示的に記載されていようといなかろうと、そのような機構、構造又は特徴を他の実施形態とともに実現することは、当業者の知識の範囲内である。
【0008】
融合
以下は、一般的に“融合”と呼ばれる実施形態と、そのような命令を実行するために使用され得るシステム、アーキテクチャ、命令フォーマットなどの実施形態であり、背景技術に記載したものを含む様々な分野で有益なものである。融合命令の実行は、要素のベクトルの比較の結果からの真/偽ビットを格納する1つのマスクレジスタを用い、それらのビットに基づいて、2つの特徴的なベクトルソースの要素間で選択を行うことができるので、先述の問題の第2の部分に効率的に対処する。換言すれば、融合命令の実行は、2つのソース間の要素毎の融合を、これらのソース間のセレクタとして書込マスク(ライトマスク)を用いて、プロセッサに実行させる。その結果がデスティネーションレジスタに書き込まれる。一部の実施形態において、これらのソースのうちの少なくとも一方は、例えば128ビット、256ビット、512ビットのベクトルレジスタなどのレジスタである。一部の実施形態において、それらソースオペランドの少なくとも一方は、開始メモリロケーションに関連する複数のデータ要素の集合である。さらに、一部の実施形態において、一方又は双方のソースのデータ要素は、如何なる融合にも先立って、例えばスウィズル、ブロードキャスト、コンバージョンなど(ここで例を述べる)のデータ変換を経る。書込マスクレジスタの例については詳細に後述する。
【0009】
この命令の典型的な1つのフォーマットは“VBLENDPS zmm1 {k1},zmm2,zmm3/m512,offset”であり、オペランドzmm1、zmm2及びzmm3はベクトルレジスタ(例えば、128ビット、256ビット、512ビットのレジスタなど)であり、k1は書込マスクオペランド(例えば、詳細に後述するもののような16ビットレジスタなど)であり、m512はレジスタ内に格納されるか即値(immediate)として格納されるかの何れかであるメモリオペランドである。ZMM1はデスティネーションオペランドであり、ZMM2及びZMM3/m512はソースオペランドである。offset(オフセット)は、存在する場合、レジスタ内の値又は即値からメモリアドレスを決定するために使用される。メモリから取り出されるものは、メモリアドレスから開始する集合的な連続したビットであり、デスティネーションレジスタのサイズに応じて複数のサイズ(128ビット、256ビット、512ビットなど)のうちの1つとなり得る(このサイズは一般にデスティネーションレジスタと同じサイズである)。一部の実施形態において、書込マスクは異なるサイズ(8ビット、32ビットなど)を有する。また、一部の実施形態において、詳細に後述するように、命令は書込マスクの全てではないビットを使用する。VBLENDMPSは、この命令のオペコードである。典型的に、各オペランドは命令によって明示的に規定される。データ要素のサイズは、例えば後述の“W”のようなデータ粒度ビットが指し示すもの(インジケーション)を使用して、命令の“プレフィックス”内で規定され得る。殆どの実施形態において、Wは、各データ要素が32ビット又は64ビットの何れであるかを指し示すことになる。データ要素が32ビットサイズであり、ソースが512ビットサイズである場合、ソース当たり16個のデータ要素が存在する。
【0010】
融合命令の実行の一例を
図1に示す。この例においては、各々が16個のデータ要素を有する2つのソースが存在している。殆どのケースにおいて、これらのソースのうちの一方はレジスタである(この例では、ソース1が、16個の32ビットデータ要素を有する例えばZMMレジスタなどの512ビットレジスタとして取り扱われているが、例えばXMMレジスタ及びYMMレジスタと16ビット又は64ビットのデータ要素など、その他のサイズのデータ要素及びレジスタも使用され得る)。他方のソースは、レジスタ又はメモリロケーションの何れかである(この例においては、ソース2が他方のソースである)。第2のソースがメモリロケーションである場合、殆どの実施形態において、それは、これらのソースの融合に先立って、一時レジスタ内に置かれる。また、メモリロケーションのデータ要素は、一時レジスタ内にそれを置くことに先立って、データ変換を受けてもよい。図示したマスクパターンは0x5555である。
【0011】
この例において、値“1”を有する書込マスクの各ビット位置は、第1のソース(ソース1)の対応するデータ要素がデスティネーションレジスタの対応するデータ要素位置に書き込まれるべきであることが指し示す。従って、ソース1の1番目、3番目、5番目などのビット位置(A0、A2、A4など)が、デスティネーションの1番目、3番目、5番目などのデータ要素位置に書き込まれる。書込マスクが値“0”を有するところでは、第2のソースのデータ要素がデスティネーションの対応するデータ要素位置に書き込まれる。当然ながら、“1”及び“0”の使用法は実装に応じて反転され得る。また、この図及び以上の説明はそれぞれの1番目の位置が最下位の位置であると見なしているが、一部の実施形態においては一番目の位置は最上位の位置である。
【0012】
図2は、融合命令の実行の他の一例を示している。この図と
図1との間の違いは、各ソースが8個のデータ要素のみを有していることである(例えば、これらのソースは各々が8個の64ビットデータ要素を有する512ビットレジスタである)。この状況において、16ビットの書込マスクの場合、書込マスクの全てではないビットが使用される。この例においては、融合されるべき各ソースのデータ要素は16個もないので、最下位側のビットのみが使用されている。
【0013】
図3は、融合命令の擬似コードの一例を示している。
【0014】
図4は、プロセッサにおける融合命令の使用の一実施形態を示している。ステップ401にて、デスティネーションオペランドと、2つのソースオペランドと、オフセット(あれば)と、書込マスクとを有する融合命令がフェッチされる。一部の実施形態において、デスティネーションオペランドは512ビットベクトルレジスタ(例えばZMM1など)であり、書込マスクは16ビットレジスタ(例えば、詳細に後述する“k”書込マスクレジスタなど)である。これらのソースオペランドのうちの少なくとも一方はメモリソースオペランドとし得る。
【0015】
ステップ403にて、融合命令がデコードされる。命令のフォーマットに応じて、この段階で、例えば、データ変換があるか、どのレジスタに書き込み及び取り出しを行うべきか、どのメモリアドレスにアクセスすべきかなど、多様なデータが解釈(インタープリット)され得る。
【0016】
ステップ405にて、ソースオペランド値の取り出し/読み出しが行われる。双方のソースがレジスタである場合、それらのレジスタが読み出される。ソースオペランドの一方又は双方がメモリオペランドである場合、そのオペランドに関するデータ要素が取り出される。一部の実施形態において、メモリからのデータ要素は一時レジスタに格納される。
【0017】
何らかのデータ要素変換(例えば、後述するアップコンバージョン、ブロードキャスト、スウィズルなど)が実行されるべき場合、ステップ407でそれが実行され得る。例えば、メモリからの16ビットデータ要素が32ビットデータ要素へとアップコンバーとされたり、データ要素が1つのパターンから別の1つのパターンへ(例えば、XYZWXYZWXYZWXYZWからXXXXXXXXYYYYYYYYZZZZZZZZWWWWWWWWへ)スウィズルされたりし得る。
【0018】
ステップ409にて、融合命令(又は、例えば複数のマイクロオペレーションなどの命令を有する処理)が、実行リソースによって実行される。この実行は、2つのソース間のセレクタとして書込マスクを用いて2つのソース間の要素毎の融合を生じさせる。例えば、第1のソースのデータ要素と、第2のソースのデータ要素とが、書込マスクの対応するビット値に基づいて選択される。このような融合の例が
図1及び2に示されている。
【0019】
ステップ411にて、ソースオペランドのこれら適切なデータ要素がデスティネーションレジスタに格納される。この例もやはり
図1及び2に示されている。ステップ409及び411を別々に説明したが、一部の実施形態において、これらのステップはともに命令の実行の一部として実行される。
【0020】
以上のことは、一種類の実行環境について示されているが、例えば詳述するイン・オーダー環境及びアウト・オブ・オーダー環境など、その他の環境に適合するように容易に変更され得る。
【0021】
図5は、融合命令を処理する方法の一実施形態を示している。この実施形態においては、ステップ401−407のうち、全てではないが一部は前もって実行されていると仮定するが、以下にて提示する細部を不明瞭にしないよう、それらは図示していない。例えば、フェッチ及びデコードは図示しておらず、またオペランド(ソース及び書込マスク)の取り出しも図示していない。
【0022】
ステップ501にて、書込マスクの第1のビット位置の値が評価される。例えば、書込マスクにおける値k1[0]が決定される。一部の実施形態において第1のビット位置は最下位ビット位置であり、他の実施形態において第1のビット位置は最上位ビット位置である。以降の説明は、第1のビット位置が最下位であるとして説明するが、それが最上位である場合に為される変更も当業者に容易に理解されるであろう。
【0023】
ステップ503にて、書込マスクのこのビット位置の値が、第1のソースの対応するデータ要素(第1のデータ要素)がデスティネーションの対応する位置に保存されるべきであることを指し示しているか、の決定が為される。第1のビット位置が、第1のソースの第1位置のデータ要素がデスティネーションレジスタの第1位置に格納されるべきであることを指し示している場合、ステップ507にて、それが格納される。
図1を再び参照するに、そのマスクはこれが当てはまることを指し示しており、第1のソースの第1データ要素がデスティネーションレジスタの第1データ要素位置に格納されている。
【0024】
第1のビット位置が、第1のソースの第1位置のデータ要素がデスティネーションレジスタの第1位置に格納されるべきでないことを指し示している場合、ステップ507で、第2のソースの第1位置のデータ要素が格納される。
図1を再び参照するに、そのマスクはこれが当てはまらないことを指し示している。
【0025】
ステップ509にて、評価された書込マスク位置が書込マスクの最後であるか、あるいはデスティネーションのデータ要素位置の全てが充たされたか、の決定が為される。そうである場合、処理は終了する。そうでない場合には、ステップ511にて、書込マスクの次のビット位置が評価されて、その値が決定される。
【0026】
ステップ503にて、書込マスクのこの後続ビット位置の値が、第1のソースの対応するデータ要素(第2のデータ要素)がデスティネーションの対応する位置に保存されるべきであることを指し示しているか、の決定が為される。マスクの全ビットが使い尽くされるか、あるいはデスティネーションのデータ要素の全てが充たされるかまで、これが繰り返される。後者のケースは、例えば、データ要素サイズが64ビットであり、デスティネーションオペランドが512ビットであり、且つ書込マスクが16ビットを有するときに起こり得る。その場合、書込マスクのうちの8ビットを必要とするのみで融合命令が完了されることになる。換言すれば、使用する書込マスクのビット数は、書込マスクサイズと各ソース内のデータ要素数とに依存する。
【0027】
図6は、融合命令を処理する方法の一実施形態を示している。この実施形態においては、ステップ401−407のうち、全てではないが一部はステップ601に先立って実行されていると仮定する。ステップ601にて、使用すべき書込マスクの各ビット位置について、そのビット位置の値が、第1のソースの対応するデータ要素がデスティネーションレジスタの対応する位置に保存されるべきであることを指し示しているか、の決定が為される。
【0028】
第1のソースのデータ要素がデスティネーションレジスタに保存されるべきであることを指し示している書込マスクの各ビット位置について、ステップ605にて、それが適切な位置に書き込まれる。第2のソースのデータ要素がデスティネーションレジスタに保存されるべきであることを指し示している書込マスクの各ビット位置については、ステップ603にて、それが適切な位置に書き込まれる。一部の実施形態において、ステップ603及び605は並行して実行される。
【0029】
図5及び6は第1のソースに基づいて決定を行うとしているが、どちらのソースが決定に使用されてもよい。また、明確に理解されるように、一方のソースのデータ要素が書き込まれないときには、他方のソースの対応するデータ要素がデスティネーションに書き込まれることになる。
【0030】
インテル社のAVXは、即値に基づく(VBLENDPS)か、第3のベクトルソースの要素の符号ビットに基づく(VBLENDVPS)かの何れかである別バージョンのBLENDベクトル命令を導入している。最初のものは、融合情報が静的であるという欠点を有し、第2のものは、動的な融合情報が他のベクトルレジスタに由来することで、余分なレジスタ読み出しプレッシャー、ストレージの無駄(ブール表現に実際に有用なのは32ビット毎に1つのみである)及び余分なオーバーヘッド(叙述情報が真データベクトルレジスタにマッピングされる必要があるため)を生じさせるという欠点を有する。VBLENDMPSは、真(トゥルー)マスクレジスタに格納される叙述(プレディクション)情報を用いて2つのソースからの値を融合するという概念を導入するものである。これは以下の利点を有する:可変的な融合を可能にし、減結合された算術的な叙述ロジックコンポーネント(計算はベクトル上で実行され、叙述はマスク上で実行され、マスクを用いて算術データが制御フロー情報に基づいて融合される)を用いた融合を可能にし、ベクトルレジスタファイル上での読み出しプレッシャーを軽減し(マスク読み出しは安価であり、且つ分離されたレジスタファイル上である)、且つ無駄なストレージを回避する(実際には要素当たり32ビット/64ビットのうち1ビットのみが必要なので、ブール代数をベクトルで格納することは非常に非効率的である)。
【0031】
以上にて詳述した命令の実施形態は、以下に詳述する“一般的ベクトルフレンドリー命令フォーマット”にて具現化され得る。他の実施形態においては、そのようなフォーマットは使用されずに別の命令フォーマットが使用されるが、書込マスクレジスタ、様々なデータ変換(スウィズル、ブロードキャストなど)、アドレシングなどの以下の説明は、一般的に、上述の命令の実施形態の説明に適用可能である。また、典型的なシステム、アーキテクチャ及びパイプラインを以下にて説明する。上述の命令の実施形態は、そのようなシステム、アーキテクチャ及びパイプライン上で実行され得るが、詳述するものに限定されない。
【0032】
ベクトルフレンドリー命令フォーマットとは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に特有の特定のフィールドが存在する)。ベクトルフレンドリー命令フォーマットを介してベクトル演算とスカラー演算との双方がサポートされる実施形態を説明するが、他の実施形態はベクトルフレンドリー命令フォーマットを介してベクトル演算のみを使用する。
【0033】
典型的な一般的ベクトルフレンドリー命令フォーマット ―
図7A−7B
図7A−7Bは、本発明の実施形態に従った一般的ベクトルフレンドリー命令フォーマット及びその命令テンプレートを例示するブロック図である。
図7Aは、本発明の実施形態に従った一般的ベクトルフレンドリー命令フォーマット及びそのクラスA命令テンプレートを例示するブロック図であり、
図7Bは、本発明の実施形態に従った一般的ベクトルフレンドリー命令フォーマット及びそのクラスB命令テンプレートを例示するブロック図である。具体的には、どちらもノーメモリアクセス705命令テンプレートとメモリアクセス720命令テンプレートとを含むクラスA命令テンプレート及びクラスB命令テンプレートが規定される一般的ベクトルフレンドリー命令フォーマット700が示されている。ベクトルフレンドリー命令フォーマットの文脈における一般的なる用語は、特定の命令セットに結び付けられていない命令フォーマットを意味する。ベクトルフレンドリー命令フォーマットの命令がレジスタ(ノーメモリアクセス705命令テンプレート)又はレジスタ/メモリ(メモリアクセス720命令テンプレート)の何れかをソースとするベクトル上で動作する実施形態を説明するが、本発明の他の実施形態は、これらの一方のみをサポートしてもよい。また、ベクトル命令フォーマットのロード・格納命令が存在する本発明の実施形態を説明するが、他の実施形態は、それに代えて、あるいは加えて、ベクトルをレジスタの内/外に(例えば、メモリからレジスタに、レジスタからメモリに、レジスタ間で)移動させる異なる命令フォーマットの命令を有する。さらに、2つのクラスの命令テンプレートをサポートする本発明の実施形態を説明するが、他の実施形態はこれらのうちの一方のみ、又は3つ以上をサポートしてもよい。
【0034】
ベクトルフレンドリー命令フォーマットが以下:32ビット(4バイト)若しくは64ビット(8バイト)のデータ要素幅(すなわちサイズ)を有する64バイトのベクトルオペランド長(すなわちサイズ)(故に、64バイトのベクトルは16個の2倍長ワードサイズの要素若しくは8個の4倍長ワードサイズの要素で構成される);16ビット(2バイト)若しくは8ビット(1バイト)のデータ要素幅(すなわちサイズ)を有する64バイトのベクトルオペランド長(すなわちサイズ);32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)若しくは8ビット(1バイト)のデータ要素幅(すなわちサイズ)を有する32バイトのベクトルオペランド長(すなわちサイズ);及び32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)若しくは8ビット(1バイト)のデータ要素幅(すなわちサイズ)を有する16バイトのベクトルオペランド長(すなわちサイズ)、をサポートする本発明の実施形態を説明するが、他の実施形態は、より大きい、小さい、あるいは異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有した、より大きい、小さい、且つ/或いは異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてもよい。
【0035】
図7AのクラスA命令テンプレートは:1)ノーメモリアクセス705命令テンプレート内に示された、メモリアクセスなしフルラウンド制御型演算710命令テンプレートと、メモリアクセスなしデータ変換型演算715命令テンプレート;及び2)メモリアクセス720命令テンプレート内に示された、メモリアクセスありテンポラル725命令テンプレートと、メモリアクセスあり非テンポラル730命令テンプレート、を含んでいる。
図7BのクラスB命令テンプレートは:1)ノーメモリアクセス705命令テンプレート内に示された、メモリアクセスなし書込マスク制御パーシャルラウンド制御型演算712命令テンプレートと、メモリアクセスなし書込マスク制御vサイズ(vsize)型演算717命令テンプレート;及び2)メモリアクセス720命令テンプレート内に示された、メモリアクセスあり書込マスク制御727命令テンプレート、を含んでいる。
【0036】
フォーマット
一般的ベクトルフレンドリー命令フォーマット700は、
図7A−7Bに例示した順に以下のフィールドを含む。
【0037】
フォーマットフィールド740 ― このフィールド内の具体値(命令フォーマット識別値)は、ベクトルフレンドリー命令フォーマット、ひいては、命令ストリーム内でのベクトルフレンドリー命令フォーマットの命令の出現を一意的に識別する。故に、フォーマットフィールド740のコンテンツは、第1の命令フォーマットの命令の出現を、他の命令フォーマットの命令の出現から区別し、それにより、他の命令フォーマットを有する命令セット内にベクトルフレンドリー命令フォーマットを導入することを可能にする。従って、このフィールドは、一般的ベクトルフレンドリー命令フォーマットのみを有する命令セットには必要とされないという意味で、オプション的なものである。
【0038】
基本演算フィールド742 ― このフィールドのコンテンツは相異なる基本演算を区別する。後述するように、基本演算フィールド742は、オペコードフィールドを含んでいてもよいし、オペコードフィールドの一部であってもよい。
【0039】
レジスタインデックスフィールド744 ― このフィールドのコンテンツは、直接的に、あるいはアドレス生成を介して、レジスタ内又はメモリ内であるソースオペランド及びデスティネーションオペランドの位置を指定する。これらは、PxQ(例えば、32x512)レジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。一実施形態において、Nは最大で3つのソースレジスタ及び1つのデスティネーションレジスタであるが、他の実施形態は、より多くの、あるいは、より少ないソース及びデスティネーションのレジスタをサポートしてもよい(例えば、最大で2つのソースをサポートし、これらソースのうちの1つがデスティネーションとしても機能してもよく、最大で3つのソースをサポートし、これらソースのうちの1つがデスティネーションとしても機能してもよく、最大で2つのソースと1つのデスティネーションとをサポートしてもよい)。一実施形態においてP=32であるが、他の実施形態は、より多くの、あるいは、より少ないレジスタ(例えば、16)をサポートしてもよい。一実施形態においてQ=512ビットであるが、他の実施形態は、より多くの、あるいは、より少ないビット(例えば、128、1024)をサポートしてもよい。
【0040】
モディファイア(modifier)フィールド746 ― このフィールドのコンテンツは、メモリアクセスを指定する一般的ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しないものから区別し、すなわち、ノーメモリアクセス705命令テンプレートとメモリアクセス720命令テンプレートとの間で区別する。メモリアクセス演算は、(レジスタ内の値を用いてソースアドレス及び/又はデスティネーションアドレスを指定する一部のケースにおいて)メモリ階層への読出し及び/又は書込みを行うが、非メモリアクセス演算はそうではない(例えば、ソース及びデスティネーションがレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するための3つの手法間での選択を行うが、他の実施形態は、メモリアドレス計算を実行するための、より多くの、より少ない、あるいは異なる手法をサポートしてもよい。
【0041】
増補(augmentation)演算フィールド750 ― このフィールドのコンテンツは、多様な異なる演算のうちの何れのものが基本演算に加えて実行されるべきかを識別する。このフィールドはコンテキストスペシフィックである。本発明の一実施形態において、このフィールドは、クラスフィールド768と、アルファフィールド752と、ベータフィールド754とに分割される。増補演算フィールドは、共通グループの複数の演算を、2つ、3つ又は4つといった命令ではなく、単一の命令にて実行することを可能にする。下の表は、必要な命令の数を削減するために増補フィールド750を使用する命令群(その命名については、より詳細に後述する)の幾つかの例を示している。
【0042】
【表1】
ここで、[rax]は、アドレス生成に使用されるベースポインタであり、{}はデータ操作フィールド(更に詳細に後述する)によって指定される変換演算を指し示す。
【0043】
スケール(scale)フィールド760 ― このフィールドのコンテンツは、メモリアドレス生成のため(例えば、2
scale*index+baseを使用するアドレス生成のため)のインデックスフィールドのコンテンツのスケーリングを可能にする。
【0044】
変位(displacement)フィールド762A ― このフィールドのコンテンツは、メモリアドレス生成の一部として使用される(例えば、2
scale*index+base+displacementを使用するアドレス生成のため)。
【0045】
変位係数フィールド762B(なお、変位係数フィールド762Bの真上に変位フィールド762Aが並置されていることは、一方又は他方が使用されることを指し示す) ― このフィールドのコンテンツは、アドレス生成の一部として使用され、メモリアクセスにおけるバイト数をNとして、メモリアクセス(N)のサイズによってスケーリングされる変位係数を指定する(例えば、2
scale*index+base+スケーリングされたdisplacementを使用するアドレス生成のため)。冗長な低次ビットは無視され、故に、変位係数フィールドのコンテンツにメモリオペランドのトータルサイズ(N)が乗算されて、実際のアドレスを計算する際に使用される最終的な変位が生成される。Nの値は、実行時に、フルオペコードフィールド774(後述)とデータ操作フィールド754C(後述)とに基づいて、プロセッサハードウェアによって決定される。変位フィールド762A及び変位係数フィールド762Bは、ノーメモリアクセス705命令テンプレートでは使用されず、且つ/或いは他の実施形態はこれら2つのうちの一方のみを実装したり何れをも実装しなかったりし得る、という意味で、変位フィールド762A及び変位係数フィールド762Bはオプション的なものである。
【0046】
データ要素幅フィールド764 ― このフィールドのコンテンツは、数多くある要素幅のうちの何れが使用されるかを識別する(一部の実施形態においては全ての命令についてであり、他の実施形態においては一部の命令についてのみである)このフィールドは、1つのデータ要素幅のみがサポートされ、且つ/或いはデータ要素幅がオペコードの何らかの側面によってサポートされる場合には必要とされないという意味で、オプション的なものである。
【0047】
書込マスクフィールド770 ― このフィールドのコンテンツは、データ要素位置毎を基礎にして、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算及び増補演算の結果を反映するか制御する。クラスA命令テンプレートは融合化書込マスキングをサポートし、クラスB命令テンプレートは融合化及びゼロ化の双方の書込マスキングをサポートする。融合化のとき、ベクトルマスクは、デスティネーション内の要素の組(要素セット)を(基本演算及び増補演算によって指定される)演算の実行中に更新から保護することを可能にし、他の一実施形態において、対応するマスクビットが0を有するところのデスティネーションの各要素の古い値を保存する。対照的に、ゼロ化のとき、ベクトルマスクは、デスティネーション内の要素の組を(基本演算及び増補演算によって指定される)演算の実行中にゼロ化することを可能にし、一実施形態において、対応するマスクビットが値0を有するとき、デスティネーションの要素が0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、最初のものから最後のものまで、変更されている要素のスパン)を制御する能力である。しかし、変更される要素が連続していることは必要ない。故に、書込マスクフィールド770は、ロード、格納、算術、論理などを含め、部分的なベクトル演算を可能にする。また、このマスキングは、誤り抑圧(フォールトサプレッション)に使用されることができる(すなわち、誤りを生じるかもしれない、あるいは生じることになる演算の結果を受け取ることを防止するよう、デスティネーションのデータ要素位置をマスキングすることにより、例えば、メモリ内のベクトルがページ境界を跨ぎ、第2ページはそうではないが第1ページがページ誤りを生じさせると仮定すると、第1ページ上にあるベクトルのデータ要素の全てが書込マスクによってマスクされる場合には、そのページ誤りを無視することができる)。また、書込マスクは、特定種類の条件文を含む“ベクトル化ループ”を可能にする。書込マスクフィールド770のコンテンツが、多数の書込マスクレジスタのうち使用する書込マスクを含むものを選択する(故に、書込マスクフィールド770のコンテンツが間接的に、実行されるマスキングを特定する)本発明の実施形態が説明されるが、他の実施形態は、それに代えて、あるいは加えて、書込マスクフィールド770のコンテンツが直接的に、実行されるマスキングを指定することを可能にする。また、ゼロ化は:1)それが有するデスティネーションオペランドがソースでもある命令(非3変数命令とも呼ぶ)でない命令上でレジスタリネーミングが使用されるとき、レジスタリネーミングパイプラインステージにおいてデスティネーションはもはや暗示的なソースでない(演算の結果でないデータ要素(マスクされたデータ要素)はゼロ化されることになるので、現在のデスティネーションレジスタからの如何なるデータ要素も、リネーミング後のデスティネーションレジスタに複製されたり、演算とともに何らかのかたちで運ばれたりする必要がない)ので;及び2)ライトバック段階において、ゼロが書き込まれているので;性能向上を可能にする。
【0048】
即値フィールド772 ― このフィールドのコンテンツは即値を詳述することを可能にする。このフィールドは、即値をサポートしない一般的ベクトルフレンドリー命令フォーマットの実装には存在せず、また、即値を使用しない命令には存在しないという意味で、オプション的なものである。
【0049】
命令テンプレートクラス選択
クラスフィールド768 ― このフィールドのコンテンツは、異なるクラスの命令間で区別を行う。
図7A−7Bを参照するに、このフィールドのコンテンツは、クラスA命令とクラスB命令との間で選択を行う。
図7A−7Bでは、フィールド内に特定の値が存在することを指し示すために、角を丸めた四角を使用している(例えば、
図7A−7Bそれぞれのクラスフィールド768のクラスA 768A及びクラスB 768B)。
【0050】
クラスAのノーメモリアクセス命令テンプレート
クラスAのノーメモリアクセス705命令テンプレートの場合、アルファフィールド752はRSフィールド752Aとして解釈され、そのコンテンツが、様々な増補演算種類のうちのどれが実行されるべきかを識別し(例えば、メモリアクセスなしラウンド型演算710命令テンプレート及びメモリアクセスなしデータ変換型演算715命令テンプレートに対して、それぞれ、ラウンド752A.1及びデータ変換752A.2が指定される)、ベータフィールド754は、指定された種類の演算のうちのどれが実行されるべきかを識別する。
図7において、角を丸めたブロックは、特定の値が存在することを指し示すために使用されている(例えば、モディファイアフィールド746内のメモリアクセスなし746A;アルファフィールド752/rsフィールド752A内のラウンド752A.1及びデータ変換752A.2)。ノーメモリアクセス705命令テンプレートには、スケールフィールド760、変位フィールド762A及び変位係数フィールド762Bは存在しない。
【0051】
ノーメモリアクセス命令テンプレート ― フルラウンド制御型演算
メモリアクセスなしフルラウンド制御型演算710命令テンプレートにおいて、ベータフィールド754はラウンド制御フィールド754Aとして解釈され、そのコンテンツは静的ラウンディングを提供する。本発明の記載の実施形態において、ラウンド制御フィールド754Aは抑圧全浮動小数点例外(suppress all floating point exceptions;SAE)フィールド756とラウンド演算制御フィールド758とを含んでいるが、他の実施形態は、これらの概念の双方を同一フィールドにエンコードしたり、これらの概念/フィールドの一方若しくは他方のみを有したりしてもよい(例えば、ラウンド演算制御フィールド758のみを有し得る)。
【0052】
SAEフィールド756 ― このフィールドのコンテンツは、例外イベント報告を無効にすべきか否かを識別し、SAEフィールド756のコンテンツが、抑圧が有効にされることを指し示すとき、所与の命令は如何なる種類の浮動小数点例外フラグをも報告せず、如何なる浮動小数点例外ハンドラをも呼び出さない。
【0053】
ラウンド演算制御フィールド758 ― このフィールドのコンテンツは、一群の丸め演算(例えば、切り上げ、切り下げ、ゼロ方向への丸め、及び最も近いものへの丸め)のうちの何れを実行すべきかを識別する。故に、ラウンド演算制御フィールド758は、命令毎を基礎にした丸めモードの変更を可能にし、故に、それが要求されるときに特に有用である。丸めモードを指定するための制御レジスタをプロセッサが含む本発明の一実施形態において、ラウンド演算制御フィールド758のコンテンツはそのレジスタ値を無効にする(そのような制御レジスタ上でセーブ−モディファイ−リストアを実行する必要なく丸めモードを選択可能なことは有利である)。
【0054】
ノーメモリアクセス命令テンプレート ― データ変換型演算
メモリアクセスなしデータ変換型演算715命令テンプレートにおいて、ベータフィールド754はデータ変換フィールド754Bとして解釈され、そのコンテンツは、数多くのデータ変換(例えば、データ変換なし、スウィズル、ブロードキャスト)のうちの何れが実行されるべきかを識別する。
【0055】
クラスAのメモリアクセス命令テンプレート
クラスAのメモリアクセス720命令テンプレートにおいて、アルファフィールド752は退去ヒント(eviction hint;EH)フィールド752Bとして解釈され、そのコンテンツは、複数の退去ヒントのうちの何れが使用されるべきかを識別し(
図7Aでは、メモリアクセスありテンポラル725命令テンプレート及びメモリアクセスあり非テンポラル730命令テンプレートに対して、それぞれ、テンポラル752B.1及び非テンポラル752B.2が指定されている)、ベータフィールド754はデータ操作フィールド754Cとして解釈され、そのコンテンツは、数多くのデータ操作演算(プリミティブとしても知られる)(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、及びデスティネーションのダウンコンバージョン)のうちの何れが実行されるべきかを識別する。メモリアクセス720命令テンプレートは、スケールフィールド760を含むとともに、必要に応じて変位フィールド762A又は変位スケールフィールド762Bを含む。
【0056】
ベクトルメモリ命令は、コンバージョンサポートを用いて、メモリからのベクトルのロード及びメモリへのベクトルの格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的にメモリから/へデータを転送し、実際に転送される要素は、書込マスクとして選択されるベクトルマスクのコンテンツによって指示される。
図7Aにおいて、角を丸めた四角は、フィールド内に特定の値が存在することを指し示すために使用されている(例えば、モディファイアフィールド746のメモリアクセス746B;アルファフィールド752/退去ヒントフィールド752Bのテンポラル752B.1及び非テンポラル752B.2)。
【0057】
メモリアクセス命令テンプレート ― テンポラル
テンポラルデータとは、キャッシュすることの恩恵を受けるのに十分な早期に再使用されそうなデータである。これはヒントであるが、異なるプロセッサは、ヒントを完全に無視することを含めて、それを異なるように実装してもよい。
【0058】
メモリアクセス命令テンプレート ― 非テンポラル
非テンポラルデータとは、第1レベルキャッシュでキャッシュすることの恩恵を受けるのに十分な早期に再使用されそうになく、退去の優先度を与えられるべきデータである。これはヒントであるが、異なるプロセッサは、ヒントを完全に無視することを含めて、それを異なるように実装してもよい。
【0059】
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド752は書込マスク制御(Z)フィールド752Cとして解釈され、そのコンテンツは、書込マスクフィールド770によって制御される書込マスキングが融合化又はゼロ化の何れであるかを識別する。
【0060】
クラスBのノーメモリアクセス命令テンプレート
クラスBのノーメモリアクセス705命令テンプレートの場合、ベータフィールド754の一部はRLフィールド757Aとして解釈され、そのコンテンツは、様々な増補演算種類のうちの何れが実行されるべきかを識別し(例えば、メモリアクセスなし書込マスク制御パーシャルラウンド制御型演算712命令テンプレート、及びメモリアクセスなし書込マスク制御VSIZE型演算717命令テンプレートに対して、それぞれ、ラウンド757A.1、及びベクトル長(VSIZE)757A.2が指定される)、ベータフィールド754の残部は、指定された種類の複数の演算のうちの何れが実行されるべきかを識別する。
図7において、角を丸めたブロックは、特定の値が存在することを指し示すために使用されている(例えば、モディファイアフィールド746内のメモリアクセスなし746A;RLフィールド757Aのラウンド757A.1及びVSIZE757A.2)。ノーメモリアクセス705命令テンプレートには、スケールフィールド760、変位フィールド762A及び変位スケールフィールド762Bは存在しない。
【0061】
ノーメモリアクセス命令テンプレート ― 書込マスク制御パーシャルラウンド制御型演算
メモリアクセスなし書込マスク制御パーシャルラウンド制御型演算712命令テンプレートにおいて、ベータフィールド754の前記残部はラウンド演算フィールド759Aとして解釈され、且つ例外イベント報告が無効にされる(所与の命令は、如何なる種類の浮動小数点例外フラグをも報告せず、如何なる浮動小数点例外ハンドラをも呼び出さない)。
【0062】
ラウンド演算制御フィールド759A ― ラウンド演算制御フィールド758と同じように、このフィールドのコンテンツは、一群の丸め演算(例えば、切り上げ、切り下げ、ゼロ方向への丸め、及び最も近いものへの丸め)のうちの何れを実行すべきかを識別する。故に、ラウンド演算制御フィールド759Aは、命令毎を基礎にした丸めモードの変更を可能にし、故に、それが要求されるときに特に有用である。丸めモードを指定するための制御レジスタをプロセッサが含む本発明の一実施形態において、ラウンド演算制御フィールド759Aのコンテンツはそのレジスタ値を無効にする(そのような制御レジスタ上でセーブ−モディファイ−リストアを実行する必要なく丸めモードを選択可能なことは有利である)。
【0063】
ノーメモリアクセス命令テンプレート ― 書込マスク制御VSIZE型演算
メモリアクセスなし書込マスク制御VSIZE型演算717命令テンプレートにおいて、ベータフィールド754の前記残部はベクトル長フィールド759Bとして解釈され、そのコンテンツは、数多くのデータベクトル長変換(例えば、128バイト、256バイト、又は512バイト)のうちの何れが実行されるべきかを識別する。
【0064】
クラスBのメモリアクセス命令テンプレート
クラスBのメモリアクセス720命令テンプレートの場合、ベータフィールド754の一部はブロードキャストフィールド757Bとして解釈され、そのコンテンツは、ブロードキャスト型データ操作演算が実行されるべきか否かを識別し、ベータフィールド754の残部はベクトル長フィールド759Bとして解釈される。メモリアクセス720命令テンプレートは、スケールフィールド760を含むとともに、必要に応じて変位フィールド762A又は変位スケールフィールド762Bを含む。
【0065】
フィールドに関する付言
一般的ベクトルフレンドリー命令フォーマット700に関し、フォーマットフィールド740と、基本演算フィールド742と、データ要素幅フィールド764とを含むフルオペフィールド774が示されている。フルオペコードフィールド774がこれらのフィールドの全てを含む一実施形態を示したが、フルオペコードフィールド774は、これらのフィールドの全てをサポートしない実施形態において、これらのフィールドの全てより少ないフィールドを含む。フルオペコードフィールド774はオペレーションコードを提供する。
【0066】
増補演算フィールド750、データ要素幅フィールド764、及び書込マスクフィールド770は、これらの特徴が、一般的ベクトルフレンドリー命令フォーマットにて、命令毎を基礎として指定されることを可能にする。
【0067】
書込マスクフィールドとデータ要素幅フィールドとの組合せは、異なるデータ要素幅に基づいてマスクを適用することを可能にするタイプの命令を作り出す。
【0068】
この命令フォーマットは、異なる目的の異なるフィールドを他のフィールドのコンテンツに基づいて再利用するので、比較的少ない数のビットを必要とする。例えば、1つの見方は、モディファイアフィールドのコンテンツが
図7A−7Bのノーメモリアクセス705命令テンプレートと
図7A−7Bのメモリアクセス720命令テンプレートとの間で選択を行い、クラスフィールド768のコンテンツが、
図7Aの命令テンプレート710/715と
図7Bの命令テンプレート712/717との間で、ノーメモリアクセス705命令テンプレート内での選択を行い、また、クラスフィールド768のコンテンツが、
図7Aの命令テンプレート725/730と
図7Bの命令テンプレート727との間で、メモリアクセス720命令テンプレート内での選択を行う、というものである。別の見方からは、クラスフィールド768のコンテンツが、
図7A及び7BそれぞれのクラスA命令テンプレートとクラスB命令テンプレートとの間での選択を行い、モディファイアフィールドのコンテンツが、
図7Aの命令テンプレート705と720との間で、クラスA命令テンプレート内での選択を行い、また、モディファイアフィールドのコンテンツが、
図7Bの命令テンプレート705と720との間で、クラスB命令テンプレート内での選択を行う。クラスフィールドのコンテンツがクラスA命令テンプレートを指し示す場合、モディファイアフィールドのコンテンツが(rsフィールド752AとEHフィールド752Bとの間で)アルファフィールド752の解釈を選択する。関連した手法において、モディファイアフィールド746及びクラスフィールド768のコンテンツが、アルファフィールドがrsフィールド752A、EHフィールド752B又は書込マスク制御(Z)フィールド752Cの何れであるかを選択する。クラスフィールド及びモディファイアフィールドがクラスAのノーメモリアクセス命令を指し示す場合、増補演算フィールドのベータフィールドの解釈はrsフィールドのコンテンツに基づいて変化し、クラスフィールド及びモディファイアフィールドがクラスBのノーメモリアクセス命令を指し示す場合、ベータフィールドの解釈はRLフィールドのコンテンツに依存する。クラスフィールド及びモディファイアフィールドがクラスAのメモリアクセス命令を指し示す場合、増補演算フィールドのベータフィールドの解釈は基本演算フィールドのコンテンツに基づいて変化し、クラスフィールド及びモディファイアフィールドがクラスBのメモリアクセス命令を指し示す場合、増補演算フィールドのベータフィールドのブロードキャストフィールド757Bの解釈は、基本演算フィールドのコンテンツに基づいて変化する。故に、基本演算フィールド、モディファイアフィールド及び増補演算フィールドの組合せは、更に多様な増補演算が指定されることを可能にする。
【0069】
クラスA及びクラスB内に見出される様々な命令テンプレートは、様々な状況で有益である。クラスAは、性能上の理由によりゼロ化書込マスキング又は小さいベクトル長が望まれるときに有用である。例えば、ゼロ化は、リネーミングが使用されるとき、我々が人為的にデスティネーションと融合することはもはや必要ないで、偽の依存性を回避することを可能する。他の一例として、ベクトル長制御は、ベクトルマスクを用いて、より短いベクトルサイズを競うとき、格納−ロード転送問題を容易にする。クラスBは、1)丸めモード制御を同時に用いながら浮動小数点例外を可能にする(すなわち、SAEフィールドのコンテンツがno(ノー)を指し示すとき)こと;2)アップコンバージョン、スウィズル、スワップ及び/又はダウンコンバージョンを使用できること;3)グラフィックデータタイプ上で動作すること;が望ましいときに有用である。例えば、アップコンバージョン、スウィズル、スワップ、ダウンコンバージョン、及びグラフィックデータタイプは、異なるフォーマットのソースと協働するときに必要な命令数を削減し、他の一例として、例外を可能にできることは、指示される丸めモードとの完全なるIEEE準拠を提供する。
【0070】
典型的な具体的ベクトルフレンドリー命令フォーマット
図8A−8Cは、本発明の実施形態に従った具体的なベクトルフレンドリー命令フォーマットを例示している。
図8A−8Cは、フィールドの位置、サイズ、解釈及び順序と、それらのフィールドの一部の値とを詳述しているという意味で具体的なベクトルフレンドリー命令フォーマット800を示している。具体的なベクトルフレンドリー命令フォーマット800は、x86命令セットを拡張するために使用されることができ、故に、フィールドの一部は既存のx86命令セット及びそのエクステンション(例えば、AVX)で使用されているものと同様あるいは同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド及び即値フィールドと一貫性を有するままである。
図8A−8Cからのフィールドがマッピングされる
図7からのフィールドが例示される。
【0071】
理解されるように、例示目的で一般的ベクトルフレンドリー命令フォーマット700の文脈にて具体的なベクトルフレンドリー命令フォーマット800を参照して本発明の実施形態を説明するが、本発明は、請求項に記載されるところを除いて、この具体的なベクトルフレンドリー命令フォーマット800に限定されるものではない。例えば、一般的ベクトルフレンドリー命令フォーマット700は様々なフィールドに多様な可能性あるサイズを企図するものであるが、具体的なベクトルフレンドリー命令フォーマット800は特定のサイズのフィールドを有するものとして示される。具体例として、データ要素幅フィールド764は具体的なベクトルフレンドリー命令フォーマット800においては1ビットのフィールドとして示されるが、本発明はそのように限定されるものではない(すなわち、一般的ベクトルフレンドリー命令フォーマット700はその他のサイズのデータ要素幅フィールド764をも企図するものである)。
【0072】
フォーマット ―
図8A−8C
一般的ベクトルフレンドリー命令フォーマット700は、
図8A−8Cに例示する順序にて以下のフィールドを含む。
【0073】
EVEXプレフィックス802(バイト0−3)
EVEXプレフィックス802は4バイトの形態でエンコードされる。
【0074】
フォーマットフィールド740(EVEXバイト0、ビット[7:0]) ― 最初のバイト(EVEXバイト0)はフォーマットフィールド740であり、0x62を含んでいる(本発明の一実施形態においてベクトルフレンドリー命令フォーマットを区別するために使用される固有値)。
【0075】
2−4番目のバイト(EVEXバイト1−3)は、特定の能力を提供する多数のビットフィールドを含んでいる。
【0076】
REX805(EVEXバイト1、ビット[7:5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及びEVEX.Bビットフィールド(EVEXバイト1、ビット[5]−B)からなる。これらEVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1s相補形態を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は000Bとしてエンコードされる。命令のその他のフィールドは、技術的に知られたレジスタインデックスの下位側の3ビット(rrr、xxx及びbbb)をエンコードし、故に、EVEX.R、EVEX.X、及びEVEX.Bを追加することによってRrrr、Xxxx及びBbbbが形成され得る。
【0077】
REX’フィールド810 − これはREX’フィールド810の最初の部分であり、拡張32レジスタセットの上位16又は下位16の何れかをエンコードするために使用されるEVEX.R’ビットフィールド(EVEXバイト1、ビット[4]−R’)である。本発明の一実施形態において、このビットは、以下に示すその他のビットとともにビット反転形態で格納されて、(周知のx86 32ビットモードにおいて)そのリアルオペコードバイトが62であるBOUND命令から区別されるが、MOD R/Mフィールド(後述)内にMODフィールドの11の値を受け入れない。本発明の他の実施形態は、このビット、及び以下に示すその他のビットを反転形態では格納しない。下位16レジスタをエンコードするために1の値が使用される。換言すれば、EVEX.R’、EVEX.R、及びその他のフィールドからのその他のRRRを結合することによって、R’Rrrrが形成される。
【0078】
オペコードマップ815(EVEXバイト1、ビット[3:0]−mmmm) ― このフィールドのコンテンツは、暗黙のリーディングオペコードバイト(0F、0F38、又は0F3)をエンコードする。
【0079】
データ要素幅フィールド764(EVEXバイト2、ビット[7]−W) ― これはEVEX.Wなる表記によって表される。EVEX.Wはデータタイプの粒度(サイズ)を定義するために使用される(32ビットデータ要素又は64ビットデータ要素の何れか)。
【0080】
EVEX.vvvv820(EVEXバイト2、ビット[6:3]−vvvv) ― EVEX.vvvvの役割は、以下を含み得る:1)EVEX.vvvvは、反転(1s相補)形態で指定される第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効である;2)EVEX.vvvvは特定のベクトルシフトに関して1s相補形態で指定されるデスティネーションレジスタオペランドをエンコードする;あるいは3)EVEX.vvvvは如何なるオペランドをもエンコードせず、このフィールドはリザーブされて1111bを格納する。故に、EVEX.vvvvフィールド820は、反転(1s相補)形態で格納される第1のソースレジスタスペシファイアの4つの低次ビットをエンコードする。命令に依存して、スペシファイアサイズを32レジスタまで拡張するために追加の異なるEVEXビットフィールドが使用される。
【0081】
EVEX.Uクラスフィールド768(EVEXバイト2、ビット[2]−U) ― EVEX.U=0の場合、これはクラスA又はEVEX.U0を指し示し、EVEX.U=1の場合、これはクラスB又はEVEX.U1を指し示す。
【0082】
プレフィックスエンコーディングフィールド825(EVEXバイト2、ビット[1:0]−pp) ― これは、基本演算フィールドのための追加ビットを提供する。EVEXプレフィックスフォーマットのレガシーSSE命令のサポートを提供することに加えて、これはまた、SIMDプレフィックスをコンパクトにするという利益を有する(SIMDプレフィックスを表現するのに1バイトを必要とするのと異なり、EVEXプレフィックスは2ビットのみを必要とする)。一実施形態において、レガシーフォーマット及びEVEXプレフィックスフォーマットの双方でSIMDプレフィックス(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするため、それらのレガシーSIMDプレフィックスがSIMDプレフィックスエンコーディングフィールドにエンコードされ、実行時に、デコーダのPLAに提供されるのに先立って、レガシーSIMDプレフィクスへと展開される(故に、PLAは、レガシーフォーマット及びEVEXフォーマットの双方のこれらレガシー命令を変更なしで実行することができる)。より新しい命令は、EVEXプレフィックスエンコーディングフィールドのコンテンツを直接的にオペコード拡張として使用し得るが、特定の実施形態は、一貫性のために同様にして展開し、しかし、異なる意味がこれらレガシーSIMDプレフィックスによって指定されることを可能にする。他の実施形態は、2ビットSIMDプレフィックスエンコーディングをサポートするように再設計し、故に展開を必要としない。
【0083】
アルファフィールド752(EVEXバイト3、ビット[7]−EH;EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書込マスク制御、及びEVEX.Nとしても知られており、また、αを用いて示される) ― 先述のように、このフィールドはコンテキストスペシフィックである。更なる説明は後に行う。
【0084】
ベータフィールド754(EVEXバイト3、ビット[6:4]−SSS;EVEX.s
2−0、EVEX.r
2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られており、また、βββを用いて示される) ― 先述のように、このフィールドはコンテキストスペシフィックである。更なる説明は後に行う。
【0085】
REX’フィールド810 − これは上記REX’フィールドのリマインダであり、拡張32レジスタセットの上位16又は下位16の何れかをエンコードするために使用され得るEVEX.V’ビットフィールド(EVEXバイト3、ビット[3]−V’)である。このビットはビット反転形態で格納される。下位16レジスタをエンコードするために1の値が使用される。換言すれば、EVEX.V’とEVEX.vvvvとを結合することによって、V’VVVVが形成される。
【0086】
書込マスクフィールド770(EVEXバイト3、ビット[2:0]−kkk) ― このフィールドのコンテンツは、先述のように、複数の書込マスクレジスタ内の1つのレジスタのインデックスを指定する。本発明の一実施形態において、具体値EVEX.kkk=000は特別に振る舞い、特定の命令に対して書込マスクが使用されないことを意味する(これは、全て1に接続された書込マスクの使用、又はマスキングハードウェアを迂回するハードウェアの使用を含む多様な手法にて実現され得る)。
【0087】
リアルオペコードフィールド830(バイト4)
これはオペコードバイトとしても知られる。オペコードの部分がこのフィールドで指定される。
【0088】
MOD R/Mフィールド840(バイト5)
モディファイアフィールド746(MODR/M.MOD、ビット[7:6]−MODフィールド842) ― 先述のように、MODフィールド842のコンテンツは、メモリアクセス演算と非メモリアクセス演算との間の区別を行う。このフィールドについては更に後述する。
【0089】
MODR/M.regフィールド844、ビット[5:3] ― ModR/M.regフィールドの役割は、2つの状況にまとめることができる:ModR/M.regはデスティネーションレジスタオペランド又はソースレジスタオペランドの何れかをエンコードし、あるいはModR/M.regはオペコード拡張として扱われて、命令オペランドをエンコードすることには使用されない。
【0090】
MODR/M.r/mフィールド846、ビット[2:0] ― ModR/M.r/mフィールドの役割は以下を含み得る:ModR/M.r/mは、メモリアドレスを参照する命令オペランドをエンコードし、あるいはModR/M.r/mは、デスティネーションレジスタオペランド又はソースレジスタオペランドの何れかをエンコードする。
【0091】
スケール、インデックス、ベース(SIB)バイト(バイト6)
スケールフィールド760(SIB.SS、ビット[7:6]) ― 先述のように、スケールフィールド760のコンテンツはメモリアドレス生成に使用される。このフィールドについては更に後述する。
【0092】
SIB.XXX854(ビット[5:3])及びSIB.bbb856(ビット[2:0]) ― これらのフィールドのコンテンツについては、レジスタインデックスXxxx及びBbbbに関して上述した。
【0093】
変位バイト(バイト7又はバイト7−10)
変位フィールド762A(バイト7−10) ― MODフィールド842が10を格納するとき、バイト7−10は変位フィールド762Aであり、レガシー32ビット変位(disp32)と同じに作用し、バイトの粒度にて作用する。
【0094】
変位係数フィールド762B(バイト7) ― MODフィールド842が01を格納するとき、バイト7は変位係数フィールド762Bである。このフィールドの位置は、バイトの粒度で作用するものであるレガシーx86命令セットの8ビット変位(disp8)と同じである。disp8は符号拡張されているので、−128と127との間のバイトオフセットのみをアドレスすることができ、64バイトキャッシュラインに関して、disp8は、−128、−64、0及び64という4つの実際に有用な値のみに設定されることが可能な8ビットを使用する。より広い範囲がしばしば必要であるのでdisp32が使用されるが、disp32は4バイトを必要とする。disp8及びdisp32とは異なり、変位係数フィールド762Bはdisp8の再解釈であり、変位係数フィールド762Bを使用するとき、実際の変位は、変位係数フィールドのコンテンツにメモリオペランドアクセス(N)のサイズを乗じたものによって決定される。このタイプの変位は、disp8*Nとして参照される。これは、平均命令長を短縮する(1バイトのみが変位に使用されるが遙かに広い範囲を有する)。このような圧縮変位は、実効的な変位はメモリアクセスの粒度の倍数であり、故にアドレスオフセットの冗長な低次ビットはエンコードされる必要がないという仮定に基づく。換言すれば、変位係数フィールド762Bは、レガシーx86命令セットの8ビット変位の代用となる。故に、変位係数フィールド762Bは、disp8がdisp8*Nへとオーバーロードされることのみを除いて、x86命令セットの8ビット変位と同様にエンコードされる(故に、ModRM/SIBエンコーディングルールに変更はない)。換言すれば、エンコーディングルール又はエンコーディング長に変更はなく、ハードウェアによる変位値の解釈に変更があるのみである(ハードウェアは、バイトに関してのアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングする必要がある)。
【0095】
即値
即値フィールド772は上述のように作用する。
【0096】
典型的なレジスタアーキテクチャ ―
図9
図9は、本発明の一実施形態に従ったレジスタアーキテクチャ900のブロック図である。レジスタアーキテクチャのレジスタファイル及びレジスタを以下に列挙する。
【0097】
ベクトルレジスタファイル910 ― 図示した実施形態には、512ビット幅の32個のベクトルレジスタが存在する。これらのレジスタをzmm0−zmm31として参照する。下位16個のzmmレジスタの低次256ビットは、レジスタymm0−16上にオーバーレイされている。下位16個のzmmレジスタの低次128ビット(ymmレジスタの低次128ビット)は、xmmレジスタ0−15上にオーバーレイされている。具体的なベクトルフレンドリー命令フォーマット800は、下の表に例示するようなこれらオーバーレイされたレジスタファイル上で作用する。
【0098】
【表2】
換言すれば、ベクトル長フィールド759Bが、最大長と、1つ以上のその他の、より短い長さとの間で選択を行い、そのような短い長さの各々は、先行する長さの半分の長さであり、ベクトル長フィールド759Bを有しない命令テンプレートは最大ベクトル長で作用する。また、一実施形態において、具体的なベクトルフレンドリー命令フォーマット800のクラスB命令テンプレートは、パックト若しくはスカラー単精度/倍精度浮動小数点データ、及びパックト若しくはスカラー整数データ上で作用する。スカラー演算は、zmm/ymm/xmmレジスタ内の最も低次のデータ要素位置で実行される演算であり、より高次のデータ要素位置は、実施形態に応じて、命令前と同じままに残されるか、ゼロ化されるかの何れかである。
【0099】
書込マスクレジスタ915 ― 図示した実施形態には、各々64ビットサイズの8個の書込マスクレジスタ(k0−k7)が存在する。先述のように、本発明の一実施形態において、ベクトルマスクレジスタk0は書込マスクとして使用されることができず、k0を通常は指し示すエンコーディングが書込マスクに使用されるとき、0xFFFFのハードワイヤード書込マスクを選択して、その命令に対する書込マスキングを実効的に無効にする。
【0100】
マルチメディア・エクステンションズ・コントロール・ステータス・レジスタ(MXCSR)920 ― 図示した実施形態において、この32ビットレジスタは、浮動小数点演算に使用されるステータス・制御ビットを提供する。
【0101】
汎用レジスタ925 ― 図示した実施形態には、メモリオペランドをアドレス指定するために既存のx86アドレシングモードとともに使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8−R15という名称で参照される。
【0102】
拡張フラグ(EFLAGS)レジスタ930 ― 図示した実施形態において、この32ビットレジスタは、多数の命令の結果を記録するために使用される。
【0103】
浮動小数点ステータスワード(FSW)レジスタ935及び浮動小数点コントロールワード(FCW)レジスタ940 ― 図示した実施形態において、これらのレジスタは、丸めモード、例外マスク、及びFCWの場合のフラグを設定するため、また、FSWの場合に例外を追跡するために、x87命令セットエクステンションによって使用される
MMXパックト整数(INT)フラットレジスタファイル950が上にエイリアスされたスカラー浮動小数点(FP)スタックレジスタファイル(x87スタック)945 ― 図示した実施形態において、x87スタックは、x87命令セットエクステンションを用いて32/64/80ビット浮動小数点データについてスカラー浮動小数点演算を実行するために使用される8要素スタックであり、MMXレジスタは、64ビットパックト整数データについて演算を実行することと、MMXレジスタとXMMレジスタとの間で実行される演算に関するオペランドを保持することとのために使用される。
【0104】
セグメントレジスタ955 ― 図示した実施形態には、セグメント化アドレス生成に使用されるデータを格納するために使用される6個の16ビットレジスタが存在する。
【0105】
RIPレジスタ965 ― 図示した実施形態において、この64ビットレジスタは命令ポインタを格納する。
【0106】
本発明の他の実施形態は、より広い、あるいは狭いレジスタを使用してもよい。また、本発明の他の実施形態は、より多い、少ない、あるいは異なるレジスタファイル及びレジスタを使用してもよい。
【0107】
典型的なイン・オーダープロセッサアーキテクチャ ―
図10A−10B
図10A−10Bは、典型的なイン・オーダー型のプロセッサアーキテクチャのブロック図を示している。これらの例示実施形態は、ワイドベクトルプロセッサ(VPU)で増強されるイン・オーダーCPUコアの複数のインスタンス化にのっとって設計されている。コアは、e12tアプリケーションに応じて、高帯域インターコネクトネットワークを介して、固定機能ロジック、メモリI/Oインタフェース、及びその他の必要なI/Oロジックと通信する。例えば、スタンドアローンGPUとしてのこの実施形態の実装は、典型的に、PCIeバスを含むことになる。
【0108】
図10Aは、本発明の実施形態に従った、シングルCPUコアを、ダイ上インターコネクトネットワーク1002へのその接続、及びそのレベル2(L2)キャッシュのサブセット1004とともに示すブロック図である。命令デコーダ1000は、具体的なベクトル命令フォーマット800を含むエクステンションを備えたx86命令セットをサポートしている。本発明の一実施形態においては、(設計を単純化するため)スカラーユニット1008とベクトルユニット1010とが別々のレジスタセット(それぞれ、スカラーレジスタ1012、ベクトルレジスタ1014)を使用し、且つそれらの間で転送されるデータがメモリに書き込まれてレベル1(L1)キャッシュ1006から読み戻されるが、本発明の他の実施形態は、異なるアプローチを使用してもよい(例えば、単一のレジスタセットを使用する、あるいは、書き込まれて読み戻されることなくデータが2つのレジスタファイル間で転送されることを可能にする通信パスを含む)。
【0109】
L1キャッシュ1006は、スカラーユニット及びベクトルユニットへのメモリのキャッシュのための低レイテンシアクセスを可能にする。ベクトルフレンドリー命令フォーマットのload−op命令と一緒になり、これは、L1キャッシュ1006が拡張レジスタファイルのように取り扱われ得ることを意味する。これは、数多くのアルゴリズム、特に退去ヒントフィールド752Bを有するアルゴリズムの性能を有意に向上させる。
【0110】
L2キャッシュのローカルサブセット1004は、CPUコア毎に1つの別々のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各CPUは、それ自身のL2キャッシュローカルサブセット1004への、直接アクセス経路を有する。CPUコアによって読み出されたデータはそのL2キャッシュサブセット1004に格納され、その他のCPUがそれら自身のL2キャッシュローカルサブセットにアクセスするのと並行して、迅速にアクセスされることが可能である。CPUによって書き込まれたデータはそれ自身のL2キャッシュサブセット1004に格納され、必要に応じて、その他のサブセットからフラッシュされる。リングネットワークは共有データのコヒーレンシーを確実にする。
【0111】
図10Bは、本発明の実施形態に従った
図10A内のCPUコアの部分の分解図である。
図10Bは、L1キャッシュ1006のL1データキャッシュ部分1006Aと、ベクトルユニット1010及びベクトルレジスタ1014に関する更なる細部とを含んでいる。具体的には、ベクトルユニット1010は、16ワイドのベクトルプロセッシングユニット(VPU)(16ワイドのベクトルALU1028参照)であり、これが整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令を実行する。このVPUは、スウィズルユニット1020を用いてレジスタ入力をスウィズルすること、数値化ユニット1022A−Bを用いた数値化、及びメモリ入力についての複製ユニット1024を用いた複製をサポートしている。書込マスクレジスタ1026が、結果のベクトル書込を決定することを可能にする。
【0112】
レジスタデータは、例えば行列乗算を支援するためなどのために、多様な手法でスウィズルされることができる。メモリからのデータは複数のVPUレーンに複製されることができる。これは、グラフィックス及び非グラフィックスの双方の並列データ処理で一般的な処理であり、キャッシュ効率を有意に高めるものである。
【0113】
リングネットワークは双方向であり、例えばCPUコア、L2キャッシュ及びその他の論理ブロックなどのエージェントがチップ内で相互に通信することを可能にする。各リングデータパスは方向当たり512ビット幅である。
【0114】
典型的なアウト・オブ・オーダーアーキテクチャ ―
図11
図11は、本発明の実施形態に従ったアウト・オブ・オーダーアーキテクチャを例示するブロック図である。具体的には、
図11は、周知の代表的なアウト・オブ・オーダーアーキテクチャが、ベクトルフレンドリー命令フォーマット及びその実行を組み込むように変更されたものを示している。
図11において、矢印は2つ以上のユニット間の結合を表しており、矢印の向きはそれらのユニット間のデータフローの向きを指し示している。
図11は、実行エンジンユニット1110とメモリユニット1115とに結合されたフロントエンドユニット1105を含んでいる。実行エンジンユニット1110は更にメモリユニット1115に結合されている。
【0115】
フロントエンドユニット1105は、レベル2(L2)分岐予測ユニット1122に結合されたレベル1(L1)分岐予測ユニット1120を含んでいる。L1及びL2の分岐予測ユニット1120及び1122は、L1命令キャッシュユニット1124に結合されている。L1命令キャッシュユニット1124は命令トランスレーション・ルックアサイド・バッファ(TLB)1126に結合されており、さらに、命令TLBユニット1126は命令フェッチ・プレデコードユニット1128に結合されている。命令フェッチ・プレデコードユニット1128は命令キュー(待ち行列)ユニット1130に結合されており、さらに、命令キューユニット1130はデコードユニット1132に結合されている。デコードユニット1132は、複合デコーダユニット1134と、3つの単純デコーダユニット1136、1138及び1140とを有している。デコードユニット1132は、マイクロコードROMユニット1142を含んでいる。デコードユニット1132は、デコード段階のセクションで上述したように動作し得る。L1命令キャッシュユニット1124は更に、メモリユニット1115内のL2キャッシュユニット1148に結合されている。命令TLBユニット1126は更に、メモリユニット1115内の第2レベルTLBユニット1146に結合されている。デコードユニット1132、マイクロコードROMユニット1142、及びループストリーム検出ユニット1144は各々、実行エンジンユニット1110内のリネーム/アロケータユニット1156に結合されている。
【0116】
実行エンジンユニット1110は、リタイアメントユニット1174と統合(ユニファイド)スケジューラユニット1158とに結合されたリネーム/アロケータユニット1156を含んでいる。リタイアメントユニット1174は、更に実行ユニットに結合されるとともに、リオーダーバッファユニット1178を含んでいる。統合スケジューラユニット1158は更に、実行ユニット1160に結合された物理レジスタファイルユニット1176に結合されている。物理レジスタファイルユニット1176は、ベクトルレジスタユニット1177A、書込マスクレジスタユニット1177B及びスカラーレジスタユニット1177Cを有しており、これらのレジスタユニットが、ベクトルレジスタ910、ベクトルマスクレジスタ915及び汎用レジスタ925を提供し得る。物理レジスタファイルユニット1176は、図示されない更なるレジスタファイル(例えば、MMXパックト整数フラットレジスタファイル950がエイリアスされたスカラー浮動小数点スタックレジスタファイル945)を含んでいてもよい。実行ユニット1160は、3つの混合スカラー・ベクトルユニット1162、1164及び1172と、ロードユニット1166と、アドレス格納ユニット1168と、データ格納ユニット1170とを含んでいる。ロードユニット1166、アドレス格納ユニット1168及びデータ格納ユニット1170の各々は更に、メモリユニット1115内のデータTLBユニット1152に結合されている。
【0117】
メモリユニット1115は、データTLBユニット1152に結合された第2レベルTLBユニット1146を含んでいる。データTLBユニット1152はL1データキャッシュユニット1154に結合されている。L1データキャッシュユニット1154は更にL2キャッシュユニット1148に結合されている。一部の実施形態において、L2キャッシュユニット1148は更に、メモリユニット1115の内部及び/又は外部のL3及び更なる階層のキャッシュユニット1150に結合される。
【0118】
例として、例示のアウト・オブ・オーダーアーキテクチャは、以下のようなプロセスパイプラインを実装し得る:1)命令フェッチ・プレデコードユニット1128がフェッチ・長さデコード段階を実行し;2)デコードユニット1132がデコード段階を実行し;3)リネーム/アロケータユニット1156が割当て段階及びリネーム段階を実行し;4)統合スケジューラ1158がスケジュール段階を実行し;5)物理レジスタファイルユニット1176、リオーダーバッファユニット1178及びメモリユニット1115が、レジスタ読出し/メモリ読出し段階を実行し;実行ユニット1160が実行/データ変換段階を実行し;6)メモリユニット1115及びリオーダーバッファユニット1178が書戻し/メモリ書込み段階を実行し;7)リタイアメントユニット1174がROB読出し段階を実行し;8)様々なユニットが例外ハンドリング段階で関与し;そして9)リタイアメントユニット1174及び物理レジスタファイルユニット1176がコミット段階を実行する。
【0119】
典型的なシングルコアプロセッサ及びマルチコアプロセッサ
図16は、本発明の実施形態に従った、集積化メモリコントローラ及びグラフィックスを備えたシングルコアプロセッサ及びマルチコアプロセッサのブロック図である。
図16内の実線のボックスは、単一のコア1602Aと、システムエージェント1610と、一組の1つ以上のバスコントローラユニット1616とを有するプロセッサ1600を示し、必要に応じての破線のボックスの追加は、複数のコア1602A−Nと、システムエージェント1610内の一組の1つ以上の集積メモリコントローラユニット1614と、集積グラフィックロジック1608とを有する代替的なプロセッサ1600を示す。
【0120】
メモリ階層は、コア内の1つ以上のレベルのキャッシュと、一組又は1つ以上の共有キャッシュユニット1606と、一組の集積メモリコントローラユニット1614に結合された外部メモリ(図示せず)とを含む。一組の共有キャッシュユニット1606は、例えばレベル2(L2)、レベル3(L3)、レベル4(L4)若しくはその他のレベルのキャッシュなどの1つ以上の中間レベルのキャッシュ、最終レベルのキャッシュ(LLC)、及び/又はこれらの組合せを含み得る。一実施形態において、リングベースのインターコネクトユニット1612が、集積グラフィックスロジック1608、一組の共有キャッシュユニット1606、及びシステムエージェントユニット1610を相互接続するが、他の実施形態は、これらのユニットを相互接続するために如何なる周知技術を用いてもよい。
【0121】
一部の実施形態において、コア1602A−Nのうちの1つ以上はマルチスレッド処理を行うことが可能である。システムエージェント1610は、コア1601A−Nを連携させて動作させるコンポーネントを含んでいる。システムエージェントユニット1610は、例えば、電力制御ユニット(PCU)及び表示ユニットを含んでいてもよい。PCUはコア1602A−N及び集積グラフィックスロジック1608の電力状態を安定化させるのに必要なロジック及びコンポーネントであるか、それらを含むかし得る。表示ユニットは、1つ以上の外部接続されたディスプレイを駆動する。
【0122】
コア1602A−Nは、アーキテクチャ及び/又は命令セットの観点で同種あるいは異種とし得る。例えば、コア1602A−Nのうちの一部は、イン・オーダー(例えば、
図10A及び10Bに示したようなもの)であり、他の一部はアウト・オブ・オーダー(例えば、
図11に示したようなもの)であってもよい。他の一例として、コア1602A−Nのうちの2つ以上は同じ命令セットを実行することができ、その他はその命令セットのうちのサブセットのみ又は異なる命令セットのみを実行することができてもよい。複数のコアのうちの少なくとも1つは、ここに記載のベクトルフレンドリー命令フォーマットを実行することができる。
【0123】
プロセッサは、例えばインテル社から入手可能な、Core(登録商標)i3、i5、i7、2Duo及びQuad、Xeon(登録商標)、若しくはItanium(登録商標)プロセッサなどの汎用プロセッサとし得る。他の例では、プロセッサはその他の会社からのものであってもよい。プロセッサは、例えばネットワークプロセッサ若しくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、埋込プロセッサ、又はこれらに類するものなどの特殊用途のものであってもよい。プロセッサ1600は、例えばBiCMOS、CMOS又はNMOSなどの数多くあるプロセス技術のうちの何れかを用いて1つ以上の基板上に実装され得る。
【0124】
典型的なコンピュータシステム及びプロセッサ
図12−14は、プロセッサ1600を含めるのに適した典型的なシステムであり、
図15は、コア1602のうちの1つ以上を含み得る典型的なシステム・オン・チップ(SoC)である。ラップトップPC、デスクトップPC、手持ち式PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、内蔵プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックス装置、ビデオゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、手持ち式装置、及び様々なその他の電子機器に関して技術的に知られたその他のシステム設計及び構成も適し得る。一般に、ここに開示されるようなプロセッサ及び/又はその他の実行ロジックを組み込むことが可能な多様なシステム又は電子機器は概して適している。
【0125】
図12を参照するに、本発明の一実施形態に従ったシステム1200のブロック図が示されている。システム1200は、グラフィックメモリコントローラハブ(GMCH)1220に結合された1つ以上のプロセッサ1210、1215を含み得る。
図12では、更なるプロセッサ1215のオプション性が破線で示されている。
【0126】
各プロセッサ1210、1215は、プロセッサ1600の何らかのバージョンとし得る。しかしながら、集積グラフィックスロジック及び集積メモリコントローラユニットはプロセッサ1210、1215内に存在しなくてもよい。
【0127】
図12は、GMCH1220が、例えばダイナミックランダムアクセスメモリ(DRAM)とし得るメモリ1240に結合され得ることを示している。DRAMは、少なくとも1つの実施形態において、不揮発性のキャッシュと結合され得る。
【0128】
GMCH1220はチップセット又はその一部とし得る。GMCH1220は、プロセッサ1210、1215と通信し、プロセッサ1210、1215とメモリ1240との間のインタラクションを制御し得る。GMCH1220はまた、プロセッサ1210、1215とシステム1200のその他の要素との間の加速バスインタフェースとして機能し得る。少なくとも1つの実施形態において、GMCH1220は、例えばフロントサイドバス(FSB)1295などのマルチドロップバスを介してプロセッサ1210、1215と通信する。
【0129】
また、GMCH1220はディスプレイ1245(例えば、フラットパネルディスプレイなど)に結合されている。GMCH1220は更に、様々な周辺装置をシステム1200に結合するために使用され得る入力/出力(I/O)コントローラハブ(ICH)1250に結合されている。例えば、
図12の実施形態には、ICH1250に結合される個別グラフィックス装置とし得る外部グラフィックス装置1260が、別の周辺装置1270とともに示されている。
【0130】
他の例では、システム1200内に、更なるプロセッサ又は異なるプロセッサが存在していてもよい。例えば、更なるプロセッサ1215は、プロセッサ1210と同じ更なるプロセッサ、プロセッサ1210とは異種あるいは非対称な更なるプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールド・プログラマブル・ゲート・アレイ、又は何らかのその他のプロセッサを含み得る。物理リソース1210、1215間には、アーキテクト的特徴、マイクロアーキテクト的特徴、熱的特性、電力消費特性などを含む利点の指標の範囲に関して、様々な相違が存在し得る。それらの相違は実効的に、処理要素1210、1215間の非対称性及び異種性として現れ得る。少なくとも1つの実施形態において、同一のダイパッケージ内に様々な処理要素1210、1215が存在し得る。
【0131】
次に
図13を参照するに、本発明の一実施形態に従った第2のシステム1300のブロック図が示されている。
図13に示されるように、マルチプロセッサシステム1300は、二点間(ポイント・ツー・ポイント)インターコネクトシステムであり、二点間インターコネクト1350を介して結合された第1のプロセッサ1370及び第2のプロセッサ1380を含んでいる。
図13に示されるように、プロセッサ1370及び1380の各々はプロセッサ1600の何らかのバージョンとし得る。
【0132】
他の例では、プロセッサ1370及び1380のうちの1つ以上は、例えばアクセラレータ又はフィールド・プログラマブル・ゲート・アレイなど、プロセッサ以外の要素であってもよい。
【0133】
2つのプロセッサ1370、1380のみが示されるが、理解されるように、本発明の範囲はそのように限定されるものではない。他の実施形態において、1つ以上の更なる処理要素が所与のプロセッサ内に存在し得る。
【0134】
プロセッサ1370は更に、集積メモリコントローラハブ(IMC)1372と、二点間(P−P)インタフェース1376及び1378とを含み得る。同様に、第2のプロセッサ1380は、IMC1382とP−Pインタフェース1386及び1388とを含み得る。プロセッサ1370、1380は、PtPインタフェース回路1378、1388を用いて、二点間(PtP)インタフェース1350を介してデータを交換し得る。
図13に示されるように、IMC1372及び1382はプロセッサをそれぞれのメモリ、すなわち、メモリ1332及びメモリ1334に結合する。メモリ1332及びメモリ1334は、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であってもよい。
【0135】
プロセッサ1370、1380は各々、チップセット1390と、二点間インタフェース回路1376、1394、1386、1398を用いて、個々のP−Pインタフェース1352、1354を介してデータを交換し得る。チップセット1390はまた、高性能グラフィックス回路1338と高性能グラフィックスインタフェース1339を介してデータを交換し得る。
【0136】
何れかのプロセッサ内又は双方のプロセッサの外側に、P−Pインターコネクトを介してこれらのプロセッサに接続されて、共有キャッシュ(図示せず)が含められてもよく、それにより、プロセッサが低電力モードに置かれる場合に、何れか又は双方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【0137】
チップセット1390は、インタフェース1396を介して第1のバス1316に結合され得る。一実施形態において、第1のバス1316は、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、又は例えばPCI Expressバス若しくはその他の第3世代I/Oインターコネクトバスなどのバスとし得るが、本発明の範囲はそのように限定されるものではない。
【0138】
図13に示されるように、第1のバス1316には、第1のバス1316を第2のバス1320に結合するバスブリッジ1318とともに、様々なI/O装置1314が結合され得る。一実施形態において、第2のバス1320はローピンカウント(low pin count;LPC)バスとし得る。第2のバス1320には、一実施形態において、例えばキーボード/マウス1322、通信装置1326及びデータストレージユニット1328を含む様々な装置が結合され得る。データストレージユニット1328は、例えばディスクドライブ若しくはその他の大容量記憶装置などであり、コード1330を含み得る。また、音声I/O1324が第2のバス1320に結合されてもよい。なお、その他のアーキテクチャも可能である。例えば、
図13のポイント・ツー・ポイントアーキテクチャに代えて、システムはマルチドロップバス又はその他のそのようなアーキテクチャを実装してもよい。
【0139】
次に
図14を参照するに、本発明の一実施形態に従った第3のシステム1400のブロック図が示されている。
図13及び14における同様の要素は似通った参照符号を付されており、
図13の特定の側面は、
図14のその他の側面を不明瞭にしないよう、
図14から省かれている。
【0140】
図14は、処理要素1370、1380がそれぞれ、集積メモリ・I/Oコントロールロジック(“CL”)1372、1382を含み得ることを示している。少なくとも1つの実施形態において、CL1372、1382は、上述したもののようなメモリコントローラハブロジック(IMC)を含み得る。さらに、CL1372、1382はまたI/Oコントロールロジックを含み得る。
図14は、メモリ1332、1334だけでなくI/O装置1414もCL1372、1382に結合されることを示している。レガシーI/O装置1415はチップセット1390に結合されている。
【0141】
次に
図15を参照するに、本発明の一実施形態に従ったSoC1500のブロック図が示されている。その他の図と同様の要素は似通った参照符号を付されている。また、破線のボックスは、より先端的なSoCにおけるオプション機能である。
図15において、インターコネクトユニット1502が、一組の1つ以上のコア1602A−Nと共有キャッシュユニット1606とを含むアプリケーションプロセッサ1510;システムエージェントユニット1610;バスコントローラユニット1616;集積メモリコントローラユニット1614;集積グラフィックスロジック1608と、スチルカメラ及び/又はビデオカメラの機能を提供する画像プロセッサ1524と、ハードウェア音声アクセラレーションを提供する音声プロセッサ1526と、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ1528とを含み得る一組若しくは1つ以上のメディアプロセッサ1520;スタティックランダムアクセスメモリ(SRAM)ユニット1530;ダイレクトメモリアクセス(DMA)ユニット1532;及び1つ以上の外部ディスプレイを結合するための表示ユニット1540;に結合されている。
【0142】
ここに開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこれらの実装手法の組合せにて実装され得る。本発明の実施形態は、少なくとも1つのプロセッサと、ストレージシステム(揮発性メモリと不揮発性のメモリ及び/又は記憶素子を含む)と、少なくとも1つの入力装置と、少なくとも1つの出力装置とを有するプログラム可能なシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装され得る。
【0143】
プログラムコードが入力データに適用されて、ここに記載の機能が実行されて出力情報が生成され得る。出力情報は既知のように1つ以上の出力装置に与えられ得る。この適用の目的で、処理システムは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサなどのプロセッサを有する何らかのシステムを含んでいる。
【0144】
プログラムコードは、処理システムとの伝達のため、ハイレベルの手続き型又はオブジェクト指向のプログラミング言語で実装され得る。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてもよい。実際、ここに記載の機構は、範囲的に、如何なる特定のプログラミング言語にも限定されない。何れの場合も、その言語はコンパイルあるいはインタープリットされた言語であってもよい。
【0145】
少なくとも1つの実施形態の1つ以上の態様は、機械読み取り可能媒体に格納され、プロセッサ内で様々なロジックを表す表現命令であって、機械によって読み出されるときに該機械にここに記載の技術を実行するロジックを作成させる表現命令によって実装され得る。そのような表現物は、“IPコア”として知られるものであり、有形の機械読み取り可能媒体に格納されて様々な顧客又は製造設備に供給され、実際にロジック又はプロセッサを作成する製造機械にロードされる。
【0146】
そのような機械読み取り可能記憶媒体は、限定ではなく、機械又は装置によって製造あるいは形成される、非一過性の、有形構成の品目を含み得る。そのような品目は、例えばハードディスクなどの記憶媒体、フロッピーディスク(登録商標)、光ディスク(コンパクトディスク読み出し専用メモリ(CD−ROM)、書換可能コンパクトディスク(CD−RW))、磁気光ディスクを含むその他の種類のディスク、例えば読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能プログラム可能読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能読み出し専用メモリ(EEPROM)などの半導体デバイス、磁気カード若しくは光カード、又は電子的な命令を格納するのに適したその他の種類の媒体を含む。
【0147】
従って、本発明の実施形態はまた、ベクトルフレンドリー命令フォーマットの命令、又はここに記載の構成、回路、装置、プロセッサ及び/又はシステムの機能を規定する例えばハードウェア記述言語(HDL)などの設計データを格納した、非一過性の有形の機械読み取り可能媒体をも含む。このような実施形態はプログラム製品とも呼ばれている。
【0148】
一部のケースにおいて、命令をソース命令セットからターゲット命令セットへと変換するために命令コンバータが使用され得る。例えば、命令コンバータは、命令を、コアによって処理される1つ以上のその他の命令へと、翻訳し(例えば、静的なバイナリトランスレーションや、動的コンパイルを含む動的なバイナリトランスレーションを用いて)、変形し、エミュレートし、あるいはその他の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組合せにて実装され得る。命令コンバータは、onプロセッサ、オフプロセッサ、又は部分的にオンプロセッサ且つ部分的にオフプロセッサとし得る。
【0149】
図17は、本発明の実施形態に従った、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。図示した実施形態において命令コンバータはソフトウェアの命令コンバータであるが、他の例では命令コンバータはソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組合せにて実装され得る。
図17は、ハイレベル言語1702のプログラムが、x86コンパイラ1704を用いてコンパイルされて、少なくとも1つのx86命令セットコアを有するプロセッサ1716によって実行され得るx86バイナリコード1706が生成され得ることを示している(コンパイルされた命令の一部はベクトルフレンドリー命令フォーマットでのものであると仮定する)。少なくとも1つのx86命令セットコアを有するプロセッサ1716とは、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの実質的部分、又は(2)少なくとも1つのx86命令セットコアを有するインテルプロセッサ上で実行するターゲットのアプリケーション若しくはその他のソフトウェアのオブジェクトコード版、を互換的に実行あるいはその他の方法で処理することによって、少なくとも1つのx86命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行することが可能な如何なるプロセッサをも意味する。x86コンパイラ1704とは、更なるリンケージ処理を用いて、あるいは更なるリンケージ処理を用いずに少なくとも1つのx86命令セットコアを有するプロセッサ1716上で実行されることができるx86バイナリコード1706(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを意味する。同様に、
図17は、ハイレベル言語1702が、他の命令セットコンパイラ1708を用いてコンパイルされて、x86命令セットコアを1つも有しないプロセッサ1714(例えば、MIPSテクノロジ社のMIPS命令セットを実行し且つ/或いはARMホールディング社のARM命令セットを実行するコアを有するプロセッサ)によって実行され得る他の命令セットバイナリコード1710が生成され得ることを示している。命令コンバータ1712は、x86バイナリコード1706を、x86命令セットコアを有しないプロセッサ1714によって実行され得るコードへと変換するために使用される。この変換を為されたコードは、他の命令セットバイナリコード1710とは同じにならない可能性がある。それが可能な命令コンバータは製造困難である。しかしながら、変換されたコードは全体的な処理を達成するとともに、他の命令セットからの命令で構成されることになる。故に、命令コンバータ1712とは、x86命令セットプロセッサ若しくはコアを有しないプロセッサ又はその他の電子装置がx86バイナリコード1706を実行することを、エミュレーション、シミュレーション又はその他の処理を介して可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組合せを意味する。
【0150】
ここに開示されるベクトルフレンドリー命令フォーマットの命令の特定の演算は、ハードウェアコンポーネントによって実行されてもよく、また、その演算を実行する命令でプログラムされた回路又はその他のハードウェアコンポーネントを生じさせる、あるいは少なくとももたらすように機械実行可能命令にて具現化され得る。回路は、数例を挙げれば、汎用若しくは特殊用途のプロセッサ又はロジック回路を含み得る。演算はまた、場合により、ハードウェアとソフトウェアとの組合せによって実行され得る。実行ロジック及び/又はプロセッサは、機械命令又はそれから得られる1つ以上の制御信号に応答して、命令により指定される結果オペランドを格納する具体的あるいは特定の回路又はその他のロジックを含み得る。例えば、ここに開示される命令の実施形態は、
図12−15の1つ以上のシステムで実行され、ベクトルフレンドリー命令フォーマットの命令の実施形態は、システムにて実行されるプログラムコード内に格納され得る。また、これらの図の処理要素は、ここに詳述されるパイプライン及び/又はアーキテクチャ(例えば、イン・オーダーアーキテクチャ及びアウト・オブ・オーダーアーキテクチャ)のうちの1つを利用し得る。例えば、イン・オーダーアーキテクチャのデコードユニットは、命令をデコードし、デコードした命令をベクトルユニット又はスカラーユニットに渡すことなどを行い得る。
【0151】
以上の説明は、本発明の好適実施形態を例示することを意図したものである。以上の説明から、明らかなように、特に成長が速く更なる前進が容易に予測できないこのような技術分野において、本発明は、添付の請求項の範囲及びその均等範囲内で、本発明の原理を逸脱することなく、当業者によって構成及び細部を変更され得るものである。例えば、方法の1つ以上の処理は、結合されることもあるし、更に細分化されることもある。
【0152】
代替実施形態
ベクトルフレンドリー命令フォーマットを生来的に実行し得る実施形態を説明してきたが、本発明の他の実施形態は、異なる命令セットを実行するプロセッサ(例えば、MIPSテクノロジ社のMIPS命令セットを実行するプロセッサ、ARMホールディング社のARM命令セットを実行するプロセッサ)上で動作するエミュレーション層を介して、ベクトルフレンドリー命令フォーマットを実行してもよい。また、図面のフロー図は本発明の特定の実施形態によって実行される特定の順序の処理を示しているが、理解されるように、そのような順序は例示である(例えば、他の実施形態は、異なる順序でそれらの処理を実行したり、特定の複数の処理を結合したり、特定の複数の処理を重ね合わせたり、等々し得る)。
【0153】
以上の説明においては、本発明の実施形態の完全なる理解を提供するために、説明目的で、数多くの具体的詳細事項を説明した。しかしながら、当業者に明らかなように、それらの具体的詳細事項の一部を用いずに、1つ以上のその他の実施形態が実施され得る。記載された具体的な実施形態は、本発明を限定するためではなく、本発明の実施形態を例示するために提供されたものである。本発明の範囲は、以上にて提供された具体例によって決定されるべきものではなく、請求項によってのみ決定されるものである。