【文献】
Hideaki KOBAYASHI,A FAST MULTI-OPERAND MULTIPLICATION SCHEME,Proceedings of the IEEE 5th Symposium on Computer Arithmetc,IEEE,1981年 5月16日,Pages 246-250
(58)【調査した分野】(Int.Cl.,DB名)
前記実行ユニットは、さらに、少なくとも1つの機能ユニットによる実行のために、前記二重乗算命令をスケジュールするリザベーションステーションを含み、前記μopは、前記リザベーションステーションから第1の機能ユニットに送信され、機能ユニットによる前記実行の前に前記遅延バッファにも提供される、請求項2に記載のプロセッサ。
前記μopは、さらに、前記第1の機能ユニットが前記μopの1回目の実行を完了し、前記中間結果を生成したときに前記遅延バッファから第2の機能ユニットに送信され、前記第2の機能ユニットは、前記中間結果を前記3つのソースオペランド値のうちの前記第3のソースオペランド値により乗算して、前記最終結果を生成する、請求項3または4に記載のプロセッサ。
前記リザベーションステーションは、第1の実効ポートを介して前記μopの前記1回目の実行をスケジュールするための第1のリザベーションステーション部分と、第2の実効ポートを介して前記μopの前記2回目の実行をスケジュールするための第2のリザベーションステーション部分と、を含む、請求項3に記載のプロセッサ。
前記μopは、さらに、前記第1の機能ユニットが前記μopの1回目の実行を完了し、前記中間結果を生成したときに前記遅延バッファから第2の機能ユニットに送信され、前記第2の機能ユニットは、前記中間結果を前記3つのソースオペランド値のうちの前記第3のソースオペランド値により乗算して、前記最終結果を生成する、請求項13または14に記載の方法。
前記スケジュールする段階は、第1の実効ポートを介して前記μopの前記1回目の実行をスケジュールするための第1のリザベーションステーション部分と、第2の実効ポートを介して前記μopの前記2回目の実行をスケジュールするための第2のリザベーションステーション部分と、を含むリザベーションステーションにより実行され、請求項13に記載の方法。
【発明を実施するための形態】
【0010】
次の説明では、説明の目的のために、多くの特定の詳細が、以下に記載される発明の複数の実施形態の完全な理解を提供するために明らかにされる。しかし、発明の複数の実施形態はこれらの特定の詳細の一部がなくても実施されてよいことは、当業者には明らかであろう。他の複数の例において、既知の構造およびデバイスは、発明の実施形態の基礎となる原理を分かりにくくしないようにブロック図形式で示される。
【0011】
典型的なプロセッサアーキテクチャおよびデータタイプ
図1Aは、発明の実施形態に係る典型的なインオーダフェッチ、デコード、リタイヤパイプライン、および典型的なレジスタリネームアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
図1Bは、発明の実施形態に係るインオーダフェッチ、デコード、リタイヤコアの典型的な実施形態、およびプロセッサ内に含まれる典型的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図1Aおよび
図1Bにおける実線のボックスは、パイプラインおよびコアのインオーダ部分を示し、一方、破線のボックスの任意の追加は、レジスタリネーム、アウトオブオーダ発行/実行パイプライン、およびコアを示す。
【0012】
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、レングスデコードステージ104、デコードステージ106、割り当てステージ108、リネームステージ110、スケジューリング(ディスパッチ又は発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外ハンドリングステージ122、およびコミットステージ124を含む。
【0013】
図1Bは、実行エンジンユニット150に連結されるフロントエンドユニット130を含むプロセッサコア190を示し、両方がメモリユニット170に連結される。コア190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドまたは代替的コアタイプであってよい。さらに別のオプションとして、コア190は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピュータグラフィックプロセッシングユニット(GPGPU)コア、グラフィックコアなどのような特定の目的のコアであってよい。
【0014】
フロントエンドユニット130は、命令キャッシュユニット134に連結される分岐予測ユニット132を含む。命令キャッシュユニット134は、命令変換索引バッファ(TLB)136に連結される。TLB136は、命令フェッチユニット138に連結される。命令フェッチユニット138は、デコードユニット140に連結される。デコードユニット140(またはデコーダ)は、複数の命令をデコードし、出力として、1または複数のマイクロ演算、複数のマイクロコードエントリポイント、複数のマイクロ命令、その他の複数の命令、または元の複数の命令からデコードされる、そうでなければそれらを反映する、またはそれらから導出されるその他の複数の制御信号を生成してよい。デコードユニット140は、様々な異なるメカニズムを用いて実装されてよい。適当なメカニズムの例は、これに限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコードリードオンリメモリ(ROM)などを含む。一実施形態では、コア190は、特定の複数のマイクロ命令のマイクロコードを(例えば、デコードユニット140内に、そうでなければフロントエンドユニット130内に)格納するマイクロコードROMまたは他の媒体を含む。デコードユニット140は、実行エンジンユニット150内でリネーム/割り当てユニット152に連結される。
【0015】
実行エンジンユニット150は、リタイアメントユニット154および1または複数のスケジューラユニット156のセットに連結されたリネーム/割り当てユニット152を含む。スケジューラユニット156は、複数の予約ステーション、中央の命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット156は、物理レジスタファイルユニット158に連結される。複数の物理レジスタファイルユニット158のそれぞれは、1または複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などのような1または複数の異なるデータタイプを格納する異なるものを表す。一実施形態では、物理レジスタファイルユニット158は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、及び複数の汎用レジスタを提供してよい。物理レジスタファイルユニット158は、リタイアメントユニット154により重ねられて、(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、将来のファイル、ヒストリバッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップおよび複数のレジスタのプールを用いるなど)レジスタリネームおよびアウトオブオーダ実行が実装されてよい様々な態様を示す。リタイアメントユニット154および物理レジスタファイルユニット158は、実行クラスタ160に連結される。実行クラスタ160は、1または複数の実行ユニット162のセットおよび1または複数のメモリアクセスユニット164のセットを含む。実行ユニット162は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)について実行してよい。幾つかの実施形態は、複数の特定の機能または複数の機能の複数のセットに専用の多くの実行ユニットを含んでよいとともに、他の実施形態は、すべての機能をすべて実行する実行ユニットの1つのみ又は複数の実行ユニットを含んでよい。特定の実施形態は、特定のタイプのデータ/複数の演算に対する別個のパイプラインを生成するので(例えば、それら自体のスケジューラユニットをそれぞれ有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン、物理レジスタファイルユニット、および/または実行クラスタ。別個のメモリアクセスパイプラインの場合、特定の実施形態は、このパイプラインの実行クラスタのみがメモリアクセスユニット164を有するように実装される。)、スケジューラユニット156、物理レジスタファイルユニット158、及び実行クラスタ160は、場合により、複数あるように示される。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行され、残りがインオーダ発行/実行されてよいことは、理解されるべきでもある。
【0016】
複数のメモリアクセスユニット164のセットは、メモリユニット170に連結される。メモリユニット170は、データTLBユニット172を含む。データTLBユニット172は、データキャッシュユニット174に連結される。データキャッシュユニット174は、レベル2(L2)キャッシュユニット176に連結される。一典型的な実施形態では、複数のメモリアクセスユニット164は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、それぞれがメモリユニット170内のデータTLBユニット172に連結される。命令キャッシュユニット134は、さらに、メモリユニット170内のレベル2(L2)キャッシュユニット176に連結される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュおよび最終的にはメインメモリに連結される。
【0017】
例として、典型的なレジスタリネームアウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン100を実装してよい。1)命令フェッチ138が、フェッチおよびレングスデコードステージ102および104を実行する。2)デコードユニット140が、デコードステージ106を実行する。3)リネーム/割り当てユニット152が、割り当てステージ108およびリネームステージ110を実行する。4)スケジューラユニット156が、スケジュールステージ112を実行する。5)物理レジスタファイルユニット158およびメモリユニット170が、レジスタ読み出し/メモリ読み出しステージ114を実行する。実行クラスタ160が、実行ステージ116を実行する。6)メモリユニット170および物理レジスタファイルユニット158が、ライトバック/メモリ書き込みステージ118を実行する。7)様々なユニットが、例外ハンドリングステージ122に関与されてよい。8)リタイアメントユニット154および物理レジスタファイルユニット158が、コミットステージ124を実行する。
【0018】
コア190は、ここに記載される命令を含め、1または複数の命令セット(例えば、x86命令セット(複数のより新しいバージョンに追加された幾つかの拡張を有する))、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONのような任意追加の複数の拡張を有する))をサポートしてよい。一実施形態では、コア190は、パックドデータ命令セットの拡張(例えば、AVX1、AVX2、および/または後述する総称ベクトル向け命令フォーマット(U=0および/またはU=1)の幾つかの形式)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数の演算をパックドデータを用いて実行されるようにする。
【0019】
コアは、マルチスレッド(演算又はスレッドの2またはそれより多いパラレルセットを実行)をサポートしてよいし、時間スライスされたマルチスレッド、同時マルチスレッド(ただし、単一物理コアは、物理コアが同時にマルチスレッドする複数のスレッドのそれぞれに対して論理コアを提供する)、またはそれらの組み合わせ(例えば、インテルハイパースレッド技術におけるような時間スライスされたフェッチおよびデコードおよびそのあとの同時マルチスレッド)を含む様々な態様においてそうしてよいことが理解されるべきである。
【0020】
レジスタリネームがアウトオブオーダ実行のコンテキストにおいて記載される限り、レジスタリネームがインオーダアーキテクチャにおいて用いられてよいことが理解されるべきである。プロセッサの示された実施形態が、別個の命令およびデータキャッシュユニット134/174および共有L2キャッシュユニット176も含むのに対して、代替的な実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュのような命令およびデータの両方に対する単一の内部キャッシュを有してよい。幾つかの実施形態では、システムは、内部キャッシュとコアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュのすべては、コアおよび/またはプロセッサの外部にあってよい。
【0021】
図2は、発明の実施形態に係る、1より多いコアを有してよく、統合メモリコントローラを有してよく、また統合グラフィクスを有してよいプロセッサ200のブロック図である。
図2における実線のボックスは、シングルコア202A、システムエージェント210、および1または複数のバスコントローラユニット216のセットを有するプロセッサ200を示すとともに、任意の追加の破線のボックスは、複数のマルチコア202A−N、システムエージェントユニット210内の1または複数の統合メモリコントローラユニット214のセット、および専用ロジック208を有する代替例のプロセッサ200を示す。
【0022】
従って、プロセッサ200の異なる実装は、1)統合グラフィクスおよび/または科学(スループット)ロジックである専用ロジック208を有するCPU(1または複数のコアを含んでよい)、および1または複数の汎用コアであるコア202A−N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)、2)グラフィックおよび/または科学(スループット)を主に意図する多数の専用コアであるコア202A−Nを有するコプロセッサ、および3)多数の汎用インオーダコアであるコア202A−Nを有するコプロセッサを含んでよい。従って、プロセッサ200は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィック処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30またはそれより多いコアを含む)、組み込みプロセッサなどのような汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ200は、1または複数の基板の一部であってよいし、および/または、例えばBiCMOS、CMOS、またはNMOSのような多くの処理技術のうちのいずれを用いてそれらの上に実装されてよい。
【0023】
メモリ階層は、複数の統合メモリコントローラユニット214のセットに連結される複数のコア、セットまたは1または複数の共有キャッシュユニット206、および外部メモリ(不図示)内に1または複数のレベルのキャッシュを含む。共有キャッシュユニット206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、最後のレベルのキャッシュ(LLC)、および/またはそれらの組み合わせのような1または複数の中間レベルキャッシュを含んでよい。一実施形態では、リングベースのインターコネクトユニット212は、統合グラフィクスロジック208、共有キャッシュユニット206のセット、およびシステムエージェントユニット210/統合メモリコントローラユニット214を相互接続するのに対して、代替的な実施形態は、そのような複数のユニットを相互接続する任意の数の周知の技術を用いてよい。一実施形態では、一貫性が、1または複数のキャッシュユニット206および複数のコア202A−Nの間で維持される。
【0024】
幾つかの実施形態では、1または複数のコア202A−Nはマルチスレッドすることができる。システムエージェント210は、コア202A−Nを調整および操作するそれらの複数のコンポーネントを含む。システムエージェントユニット210は、例えば、電力制御ユニット(PCU)および表示ユニットを含んでよい。PCUは、コア202A−Nおよび統合グラフィクスロジック208の電力状態をレギュレートするのに必要なロジックおよび複数のコンポーネントであってもまたは含んでもよい。表示ユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0025】
複数のコア202A−Nは、アーキテクチャ命令セットの観点において同種または異種であってよい。すなわち、コア202A−Nのうちの2またはそれより多いコアは同じ命令セットを実行できてよく、その他はその命令セットまたは異なる命令セットのサブセットのみを実行できてよい。一実施形態では、複数のコア202A−Nは、異種であり、後述する複数の「小さい」コアおよび複数の「大きい」コアの両方を含む。
【0026】
図3から
図6は、典型的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野において既知の他のシステム設計及び構成も適当である。一般的に、ここに開示されるようなプロセッサおよび/または他の実行ロジックを組み込むことができる様々なシステムまたは電子デバイスが一般に適当である。
【0027】
ここで
図3を参照すると、本発明の一実施形態によるシステム300のブロック図が示される。システム300は、コントローラハブ320に連結される1または複数のプロセッサ310、315を含んでよい。一実施形態では、コントローラハブ320は、グラフィックスメモリコントローラハブ(GMCH)390および入出力ハブ(IOH)350(別個の複数のチップ上にあってよい)を含む。GMCH390は、メモリ340およびコプロセッサ345に連結されるメモリおよびグラフィクスコントローラを含む。IOH350は、入出力(I/O)デバイス360をGMCH390に接続する。代替的に、メモリおよびグラフィクスコントローラのうちの1つまたは両方は、プロセッサに(ここに記載されるように)集積され、メモリ340およびコプロセッサ345は、IOH350を有する単一チップ内でプロセッサ310およびコントローラハブ320に直接連結される。
【0028】
複数の追加のプロセッサ315の任意の特性は、破線を用いて
図3内に示される。各プロセッサ310、315は、ここに記載される処理コアの1または複数を含んでよく、またプロセッサ200の幾つかのバージョンであってよい。
【0029】
メモリ340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または2つの組み合わせであってよい。少なくとも1つの実施形態に対して、コントローラハブ320は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPathインターコネクト(QPI)のようなポイントツーポイントインターフェース、または同様の接続395を介してプロセッサ310、315と通信する。
【0030】
一実施形態では、コプロセッサ345は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような専用プロセッサである。一実施形態では、コントローラハブ320は、統合グラフィクスアクセラレータを含んでよい。
【0031】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含むメリットメトリクスの範囲の観点において、物理リソース310、315の間に様々な差があるはずである。
【0032】
一実施形態では、プロセッサ310は、一般タイプのデータ処理演算を制御する複数の命令を実行する。複数のコプロセッサ命令は、複数の命令内に組み込まれてよい。プロセッサ310は、これらのコプロセッサ命令を、付属のコプロセッサ345により実行されるべきタイプとして認識する。従って、プロセッサ310は、これらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサバスまたは他のインターコネクト上でコプロセッサ345に発する。コプロセッサ345は、受信した複数のコプロセッサ命令を受け入れて実行する。
【0033】
ここで
図4を参照すると、本発明の実施形態による、第1のより具体的な典型的なシステム400のブロック図を示す。
図4に示されるように、マイクロプロセッサシステム400は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト450を介して連結された第1のプロセッサ470および第2のプロセッサ480を含む。プロセッサ470および480のそれぞれは、プロセッサ200の幾つかのバージョンであってよい。発明の一実施形態では、プロセッサ470および480はそれぞれプロセッサ310および315であり、コプロセッサ438はコプロセッサ345である。別の実施形態では、プロセッサ470および480は、それぞれ、プロセッサ310およびコプロセッサ345である。
【0034】
プロセッサ470および480は、それぞれ統合メモリコントローラ(IMC)ユニット472および482を含めて示されている。プロセッサ470は、その複数のバスコントローラユニットの一部として、ポイントツーポイント(P−P)インターフェース476および478も含む。同様に、第2のプロセッサ480は、P−Pインターフェース486および488を含む。プロセッサ470、480は、ポイントツーポイント(P−P)インターフェース450を介して、P−Pインターフェース回路478、488を用いて情報を交換してよい。
図4に示されるように、IMC472および482は、複数のプロセッサをそれぞれメモリ、すなわちそれぞれのプロセッサにローカルに付属するメインメモリの一部であってよいメモリ432およびメモリ434に接続する。
【0035】
プロセッサ470、480は、それぞれ、ポイントツーポイントインターフェース回路476、494、486、498を用いて、個々のP−Pインターフェース452、454を介してチップセット490と情報を交換してよい。チップセット490は、必要に応じて、高性能インターフェース439を介してコプロセッサ438と情報を交換してよい。一実施形態では、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのようなコプロセッサ438は、専用プロセッサである。
【0036】
共有キャッシュ(不図示)は、どちらかのプロセッサまたは両方のプロセッサの外部に含まれ、さらにP−Pインターコネクトを介して複数のプロセッサに接続され、それにより、プロセッサが低電力モードに配置されると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【0037】
チップセット490は、インターフェース496を介して、第1のバス416に連結されてよい。一実施形態では、第1のバス416は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCIエクスプレスバスまたは別の第3世代I/Oインターコネクトバスのようなバス、であってよいが、本発明の範囲はこれに限定されるものではない。
【0038】
図4に示すように、様々なI/Oデバイス414は、第1のバス416を第2のバス420に接続するバスブリッジ418とともに、第1のバス416に連結されてよい。一実施形態では、複数のコプロセッサ、複数の高スループットMICプロセッサ、GPGPUの複数のアクセラレータ(例えば、複数のグラフィクスアクセラレータまたは複数のデジタル信号処理(DSP)ユニット)、複数のフィールドプログラマブルゲートアレイ、またはいずれの他のプロセッサのような1または複数の追加のプロセッサ415は、第1のバス416に連結される。一実施形態では、第2のバス420は、ローピンカウント(LPC)バスであってよい。一実施形態では、様々なデバイスは、例えば、キーボードおよび/またはマウス422、複数の通信デバイス427、および命令/コードおよびデータ430を含んでよいディスクドライブまたは他の大容量ストレージデバイスのようなストレージユニット428を含めて、第2のバス420に連結されてよい。さらに、オーディオI/O 424は、第2のバス420に連結されてよい。なお、他のアーキテクチャも可能である。例えば、
図4のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0039】
ここで
図5を参照すると、本発明の実施形態による第2のより具体的な典型的なシステム500のブロック図が示される。
図4および
図5における同じ要素は同じ参照番号を与え、
図4の特定の態様は、
図5の他の態様を分かりにくくしないように
図5から省略されている。
【0040】
図5は、プロセッサ470、480が、統合メモリおよびそれぞれI/O制御ロジック(「CL」)472および482を含んでよいことを示す。従って、CL472、482は、複数の統合メモリコントローラユニットを含み、I/O制御ロジックを含む。
図5は、メモリ432、434がCL472、482に連結されるだけでなく、I/Oデバイス514も制御ロジック472、482に連結されることも示す。複数のレガシI/Oデバイス515は、チップセット490に連結される。
【0041】
ここで
図6を参照すると、本発明の実施形態によるSoC600のブロック図が示される。
図2内の同様の要素は、同じ参照番号を与える。また、破線のボックスは、より高度なSoCの任意の特徴である。
図6において、インターコネクトユニット602は、1または複数のコア502A−Nおよび共有キャッシュユニット506のセットを含むアプリケーションプロセッサ610、システムエージェントユニット510、バスコントローラユニット516、統合メモリコントローラユニット514、統合グラフィクスロジック、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでよい1または複数のコプロセッサ620のセット、スタティックランダムアクセスメモリ(SRAM)ユニット630、ダイレクトメモリアクセス(DMA)ユニット632、および1または複数の外部ディスプレイに連結するための表示ユニット640、に連結される。一実施形態では、コプロセッサ620は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどのような専用プロセッサを含む。
【0042】
ここに開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにおいて実装されてよい。発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0043】
図4に示されるコード430のようなプログラムコードは、ここに記載の複数の機能を実行し、出力情報を生成する複数の命令を入力するために適用されてよい。出力情報は、1または複数の出力デバイスに既知の様式で適用されてよい。このアプリケーションの目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有するいずれのシステムを含む。
【0044】
プログラムコードは、処理システムと通信するために、高級手続型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードは、必要に応じて、アセンブリまたは機械言語において実装されてもよい。実際、ここに記載の複数のメカニズムは、いずれの特定のプログラミング言語の範囲に限定されるものではない。いずれの場合において、言語は、コンパイル型またはインタプリタ型言語であってよい。
【0045】
少なくとも1つの実施形態の1または複数の態様は、機械により読み込まれると、機械に、ここに記載の技術を実行するロジックを組み立てさせるプロセッサ内の様々なロジックを表す、機械可読媒体上に格納された典型的な複数の命令により実装されてよい。「IPコア」として知られるそのような表現は、実際にロジックまたはプロセッサを製造する複数の製造機械にロードするために、有形の機械可読媒体上に格納されて、様々な顧客または製造施設に供給されてよい。
【0046】
そのような機械可読記憶媒体は、これらに限定されないが、ハードディスク、フロッピー(登録商標)ディスクを含む他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び磁気光ディスクのようなストレージメディア、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)のようなランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気または光カードのような半導体デバイス、または電子命令を格納するのに好適ないずれの他のタイプのメディアを含む、機械またはデバイスにより製造または形成される複数の物品の非一時的で有形の装置を含んでよい。
【0047】
従って、発明の実施形態は、複数の命令を含む、またはここに記載の構造、回路、装置、プロセッサ、および/またはシステム特徴を規定するハードウェア記述言語(HDL)のような設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と参照されてもよい。
【0048】
幾つかの場合では、命令コンバータは、ソース命令セットからの命令をターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される1または複数の他の命令に翻訳(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィング、エミュレート、そうでなければ変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上に、プロセッサ外に、または一部がプロセッサ上に、一部がプロセッサ外にあってよい。
【0049】
図7は、発明の実施形態に係る、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。示された実施形態では、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組み合わせにおいて実装されてよい。
図7は、高級言語702におけるプログラムが、x86コンパイラ704を用いてコンパイルされて、少なくとも1つのx86命令セットコア716を用いて、プロセッサにより、本来的に実行されてよいx86バイナリコード706を生成してよいことを示す。少なくとも1つのx86命令セットコア716を有するプロセッサは、互換実行する、そうでなければ、少なくとも1つのx86命令セットコアを用いるIntelプロセッサと実質的に同じ結果を達成するよう、(1)インテルx86命令セットコアの命令セットの相当の部分、または(2)少なくとも1つのx86命令セットコアを用いてIntelプロセッサ上で実行することを目標とされたアプリケーションまたは他のソフトウェアのオブジェクトコードのバージョンを処理することにより、少なくとも1つのx86命令セットコアを有するIntelプロセッサと同じ機能を実質的に達成できるいずれのプロセッサを表す。x86コンパイラ704は、追加的なリンケージ処理を用いてまたは用いないで、少なくとも1つのx86命令セットコア716を有するプロセッサ上で実行されることができるx86バイナリコード706(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、
図7は、高級言語702におけるプログラムが、代替の命令セットコンパイラ708を用いてコンパイルされて、少なくとも1つのx86命令セットコア714を用いないでプロセッサ(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)により本来的に実行されてよい代替の命令セットバイナリコード710を生成してよいことを示す。命令コンバータ712は、x86バイナリコード706を、x86命令セットコア714を用いないで、プロセッサにより本来的に実行されてよいコードに変換するために用いられる。この変換されたコードは、これが可能な命令コンバータは作るのが困難であるので、代替の命令セットバイナリコード710と同じである可能性は低い。しかし、変換されたコードは、一般的な演算を遂行し、代替の命令セットからの複数の命令から構成される。従って、命令コンバータ712は、エミュレーション、シミュレーション、またはいずれの他の処理を通じて、プロセッサまたはx86命令セットプロセッサまたはコアを有さない他の電子デバイスに、x86バイナリコード706を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【0050】
複数の乗算演算を実行するための方法および装置
以下に記載の発明の実施形態は、単一の命令において2つの乗算を実行する乗算命令のファミリーに対する複数のアーキテクチャ上の拡張を提供する。一実施形態では、複数のアーキテクチャ上の拡張は、インテル(登録商標)アーキテクチャ(IA)に提供されるが、発明の基礎となる原理はいずれの特定のISAに限定されるものではない。
【0051】
既存のプロセッサアーキテクチャでは、各乗算命令は、単一の乗算演算を実行する。例えば、インテル(登録商標)アーキテクチャでは、VMULSSおよびVMULPSは、2つの単精度浮動小数点値を乗算し、VMULSDおよびVMULPDは、2つの倍精度浮動小数点値を乗算する。対照的に、ここに記載の二重乗算命令のファミリー(一実施形態においてVMUL3命令とラベルされる)は、単一の命令において2つの乗算を実行し、それにより、電力を低減し、他の複数の命令の複数のデコードスロットを解放する。一実施形態では、2つの乗算は、3つのソースオペランド上で実行される。第2及び第3のソースオペランドは、まず乗算されて、そして第1のソースオペランドにより乗算される中間結果を生成する。
【0052】
図8に示されるように、発明の実施形態が実装されてよい典型的なプロセッサ855は、ここに記載の複数のVMUL3命令を実行するVMUL3実行ロジック841とともに実行ユニット840を含む。実行ユニット840が命令ストリームを実行するので、レジスタセット805は、複数のオペランド、制御データ、および他のタイプのデータに対するレジスタストレージを提供する。
【0053】
簡単のため、単一のプロセッサコア(「コア0」)の詳細が
図8に示される。しかし、
図8に示される各コアは、コア0のように、ロジックの同じセットを有してよいことが理解される。示されるように、各コアは、特定のキャッシュ管理ポリシーに従って複数の命令およびデータをキャッシュするための専用のレベル1(L1)キャッシュ812およびレベル2(L2)キャッシュ811を含んでよい。L1キャッシュ
812は、複数の命令を格納するための別個の命令キャッシュ
820およびデータを格納するための別個のデータキャッシュ
821を含む。様々なプロセッサキャッシュ内に格納される複数の命令およびデータは、固定サイズ(例えば、64、128、512バイト長)であってよい複数のキャッシュラインの粒度で管理される。この典型的な実施形態の各コアは、メインメモリ800および/または共有レベル3(L3)キャッシュ816から複数の命令をフェッチするための命令フェッチユニット810、複数の命令をデコードする(例えば、複数のプログラム命令を複数のマイクロ演算または複数の「μop」にデコードする)ためのデコードユニット
830、複数の命令(例えば、ここに記載されるような複数のVMUL3命令)を実行するための実行ユニット840、および複数の命令をリタイヤし、複数の結果をライトバックするためのライトバックユニット850を有する。
【0054】
命令フェッチユニット810は、メモリ800(または複数のキャッシュのうちの1つ)からフェッチされる次の命令のアドレスを格納するための次の命令ポインタ803、最近用いられた仮想物理命令アドレスのマップを格納して、アドレス変換の速度を向上するための命令変換索引バッファ(ITLB)804、命令分岐アドレスを投機的に予測するための分岐予測ユニット802、および分岐アドレスおよび目標アドレスを格納するための複数の分岐目標バッファ(BTB)801を含む様々な既知のコンポーネントを含む。フェッチされると、複数の命令は、デコードユニット830、実行ユニット840、およびライトバックユニット850を含む命令パイプラインの残りのステージにストリームされる。これらのユニットのそれぞれの構造および機能は、当業者に良く理解されており、発明の異なる実施形態の適切な態様を分かりにくくしないようにここでは詳細に記載されない。
【0055】
発明の一実施形態では、VMUL3実行ロジック841は、次のファミリーの命令を実行する。
VMUL3SS xmm1{k1}{z}, xmm2, xmm3/mV{er}
VMUL3PS zmm1{k1}{z}, zmm2, zmm3/B32(mV){er}
VMUL3SD xmm1{k1}{z}, xmm2, xmm3/mV{er}
VMUL3PD zmm1{k1}{z}, zmm2, zmm3/B64(mV){er}
ここで、xmm1−3およびzmm1−3は、単精度(32ビット)または倍精度(64ビット)浮動小数点フォーマットのいずれかで、パックドまたはスカラ浮動小数点値を格納するレジスタセット805内のレジスタである。
【0056】
特に、一実施形態では、VMUL3SSは、xmm1、xmm2、およびxmm3に格納される3つのスカラ、単精度浮動小数点値を乗算する。演算において、(xmm2からの)第2のオペランドは(xmm3からの)第3のオペランドにより乗算されてよく、結果は(xmm1からの)第1のオペランドにより(中間丸めを有して)乗算され、デスティネーションレジスタに格納されてよい。一実施形態では、デスティネーションレジスタは、第1のオペランド(例えば、xmm1)を格納するために用いられる同じレジスタである。
【0057】
一実施形態では、VMUL3PSは、zmm1、zmm2、およびzmm3に格納された3つのパックド、単精度浮動小数点値を乗算する。演算において、(zmm2からの)第2のオペランドは(zmm3からの)第3のオペランドにより乗算されてよく、結果は(zmm1からの)第1のオペランドにより(中間丸めを有して)乗算され、デスティネーションレジスタに格納されてよい。一実施形態では、デスティネーションレジスタは、第1のオペランド(例えば、zmm1)を格納するために用いられる同じレジスタである。
【0058】
一実施形態では、VMUL3SDは、xmm1、xmm2、およびxmm3に格納された3つのスカラ、倍精度浮動小数点値を乗算する。演算において、(xmm2からの)第2のオペランドは(xmm3からの)第3のオペランドにより乗算されてよく、結果は(xmm1からの)第1のオペランドにより(中間丸めを有して)乗算され、デスティネーションレジスタに格納されてよい。一実施形態では、デスティネーションレジスタは、第1のオペランド(例えば、xmm1)を格納するために用いられる同じレジスタである。
【0059】
最後に、一実施形態では、VMUL3PDは、zmm1、zmm2、およびzmm3に格納された3つのパックド、倍精度浮動小数点値を乗算する。演算において、(zmm2からの)第2のオペランドは(zmm3からの)第3のオペランドにより乗算されてよく、結果は(zmm1からの)第1のオペランドにより(中間丸めを有して)乗算され、デスティネーションレジスタに格納されてよい。一実施形態では、デスティネーションレジスタは、第1のオペランド(例えば、zmm1)を格納するために用いられる同じレジスタである。
【0060】
一実施形態では、複数のVMUL3命令のそれぞれの3つの即値ビット[2:0]は、複数の乗算の符号を制御するために用いられる。例えば、即値のビット0の値は、第1のオペランドの符号を制御してよい(例えば、1=負および0=正、またはその逆)。即値のビット1の値は、第2のオペランドの符号を制御してよい。また、即値のビット2の値は、第3のオペランドの符号を制御してよい。
【0061】
一実施形態では、第1および第2のオペランドは、複数の単一命令複数データ(SIMD)レジスタから読まれ、第3のオペランドは、SIMDレジスタまたはメモリ位置から読まれることができる。
【0062】
図9Aは、各VMUL3の複数のμopに複数のリソースを割り当てるためのアロケータ940、および複数の機能ユニット912により実行されるVMUL3の複数のμopをスケジュールするためのリザベーションステーション902を含むVMUL3実行ロジック841の一実施形態に関連する追加的な詳細を示す。演算では、各VMUL3命令が複数のμopにデコードされるデコードステージ830に続いて、命令デコーダ806は、複数のμopをレジスタエイリアステーブル(RAT)941を含むアロケータユニット940に転送する。アウトオブオーダパイプラインにおいて、アロケータユニット940は、各入力μopをリオーダバッファ(ROB)950内の位置に割り当て、それにより、μopの論理デスティネーションアドレスをROB950内の対応する物理デスティネーションアドレスにマッピングする。RAT941は、このマッピングを維持する。
【0063】
ROB950の複数のコンテンツは、最終的に、リアルレジスタファイル(RRF)951内の複数の位置にリタイヤされてよい。RAT941は、論理アドレスにより示された値が、リタイヤの後に、ROB950内またはRRF951内の物理アドレスで見つかるかどうかを示すリアルレジスタファイルの有効ビットを格納してもよい。RRF内に見つかると、値は、現在のプロセッサのアーキテクチャ状態の一部と考えられる。このマッピングに基づいて、RAT941は、また、すべての論理ソースアドレスをROB950またはRRF951内の対応する位置に結合する。
【0064】
各入力μopは、また、アロケータ940により割り当てられて、リザベーションステーション(RS)902内のエントリに書き込まれる。リザベーションステーション902は、機能ユニット912による実行を待つVMUL3の複数のμopを組み立てる。簡単な場合において、2つの融合乗算および加算(FMA)機能ユニットFMA0 910およびFMA1 911は、以下に記載されるように複数のVMUL3命令を実行する複数の乗算演算を実行する。必要に応じて、複数の結果は、ライトバックバスを介してRS902にライトバックされてよい。
【0065】
一実施形態では、複数のリザベーションステーションエントリは、複数のグループに論理的に細分され、複数のエントリを読み出すおよび書き込むためにそれぞれ必要とされるリードおよびライトポートの数を減らす。
図9Aに示される実施形態では、2つのリザベーションステーションのグループRS0 900およびRS1 901は、それぞれポート0および1を介してFMA0
910およびFMA1
911機能ユニットによるVMUL3の複数のμopの実行をスケジュールする。
【0066】
一実施形態では、複数のVMUL3命令のいずれかは、パイプラインを介して単一のμopとして実行されてよい。特に、μopは、まず、第2および第3のオペランドの第1の乗算を実行して(例えば、上述のようにxmm2/xmm3またはzmm2/zmm3から)、中間結果を生成するFMA0
910(RS0 900を介して)により実行される。μopは、バッファユニット905内で遅延され、そして、FMA1 911(RS1 901を介して)により2回目に実行されて、中間結果と第1のオペランド(例えば、xmm1/zmm1から)とを乗算する。前述のように、最終結果は、xmm1/zmm1内に格納されてよい。更に、述べたように、VMUL3命令の即値は、3つのソースオペランドのそれぞれの符号を特定してよい。一実施形態では、μopの第2の発行は、命令を再発行する前に、正確にFMAレイテンシ(例えば、5クロックサイクル)待たされる(バッファ905を介して)。
【0067】
様々な既存のデータバイパスは、ポート1のFMA1 911に中間結果を提供するために用いられてよい。一実施形態では、中間結果は、ROB 950、またはFMA1 911によりそこから読み出され、用いられてよいいずれの他の記憶位置内に一時的に格納される。一実施形態では、ライトバックバスは、中間結果をポート1を介してFAM1 911に利用できるようにするRS1 901に中間結果を提供するために用いられてよい。しかし、発明の基礎となる原理は、中間結果をFAM1 911に提供する任意の特定のやり方に限定されない。さらに、ROB950が
図9Aに示されるように、幾つかのプロセッサの実装(例えば、複数のインオーダパイプライン)において、ROB 950は用いられず、異なる形式のストレージが、中間結果および実行に続く最終結果を格納するために用いられてよいことが理解される。
【0068】
図9Bに示されるように、2つの機能ユニットは、発明の基礎となる原理を実装するのに必要ではない。詳細には、この実施形態において、同じ機能ユニット(FMA0 910)は、続けて2回、VMUL3のμopを実行して、最終結果を生成する。すなわち、FMA0 910は、第2および第3のオペランドの間の第1の乗算を実行し、中間結果およびμopをそれ自体を介して戻して再循環して、第2の乗算(完了すると、パイプラインの残りを通過する)を実行する。一実施形態では、μopの第2の反復は、リザベーションステーション902を介して送信するよう示され、再循環は、単に、機能ユニットステージ912内で実行される(すなわち、機能ユニットステージ
912内で一時バッファストレージを用いてFMA0 910からそれ自体に直接)。さらに、別の実装では、複数の機能ユニット912のセット内の新しい専用の機能ユニットは、VMUL3命令を独立して(すなわち、融合乗算および加算機能ユニットを用いないで)実行する。
【0069】
上記の実施形態は、1つの命令のみがデコードされたような、2つのVMUL命令を用いる場合より改善された電力消費を提供する。さらに、一時的なソースが複数のバイパスを介して読み出されることが保証されたことで、データはレジスタファイルから読み出される必要はない。
【0070】
幾つかの要素がともに乗算される複数のアプリケーションでは、乗算命令の数は、ここに記載の複数のVMUL3命令を利用することで2で除算されることができる。例として、ベクトル化されることができる、ただし複数の浮動小数点値が乗算される長いループに対して、VMUL3は、命令数を仮想的に2減らすのに用いられてよい。
【0071】
複数の乗算演算を実行するための方法の一実施形態が、
図10に示される。1001にて、単一のVMUL3命令が、メモリサブシステムからフェッチされる。述べたように、VMUL3命令は、第1、第2、第3のソースオペランド、デスティネーションオペランド、および即値を含む。1002にて、VMUL3命令は、複数のμopにデコードされる。上述のように、一実施形態では、単一の乗算μopが生成されてよい(および、VMUL3命令を完了するのに必要とされる2つの乗算演算のために2回実行されてよい)。
【0072】
1003にて、複数のソースオペランド値が、複数の機能ユニットによる実行のための準備として取り出される。この演算は、例えば、リザベーションステーション902および/またはアロケータユニット940により実行されてよい。
【0073】
1004にて、VMUL3命令が実行される。一実施形態では、乗算μopが、一度、第2及び第3のオペランドを用いて実行されて、中間結果を生成する。μopは、そして2回目に、中間結果および第1のオペランドを用いて実行されて、最終結果(すなわち、第1、第2、及び第3のソースオペランドの乗算)を生成する。述べたように、複数のソースオペランドのそれぞれの符号は、3ビット中間値として提供されてよい。
【0074】
1005にて、VMUL3命令の結果が、1または複数の続く演算のためにそこから読み出されてよいデスティネーションオペランドの位置(例えば、レジスタ)に格納される。
【0075】
典型的な命令フォーマット
ここに記載の命令の複数の実施形態は、異なるフォーマットで実施されてよい。更に、典型的な複数のシステム、複数のアーキテクチャ、および複数のパイプラインが以下に詳述される。命令の複数の実施形態は、そのような複数のシステム、複数のアーキテクチャ、および複数のパイプライン上で実行されてよいが、詳述されるそれらに限定されるものではない。
【0076】
ベクトル向け命令フォーマットは、複数のベクトル命令(例えば、複数のベクトル演算に固有の特定の複数のフィールドがある)に好適な命令フォーマットである。複数の実施形態は、ベクトルおよびスカラ演算の両方がベクトル向け命令フォーマットを通じてサポートされるよう記載され、代替的な複数の実施形態は、ベクトル向け命令フォーマットを通じてサポートされるベクトル演算のみを用いる。
【0077】
図11Aおよび
図11Bは、発明の実施形態に係る総称ベクトル向け命令フォーマットおよびそれの複数の命令テンプレートを示すブロック図である。
図11Aは、発明の実施形態に係る総称ベクトル向け命令フォーマットおよびそれのクラスAの複数の命令テンプレートを示すブロック図であり、
図11Bは、発明の実施形態に係る総称ベクトル向け命令フォーマットおよびそれのクラスBの複数の命令テンプレートを示すブロック図である。詳細には、総称ベクトル向け命令フォーマット1500に対して、両方が非メモリアクセス1505の命令テンプレートおよびメモリアクセス1520の命令テンプレートを含むクラスAおよびクラスBの命令テンプレートが定義される。ベクトル向け命令フォーマットのコンテキストにおける総称(generic)なる用語は、いずれの固有の命令セットに関連付けられていない命令フォーマットを意味する。
【0078】
発明の複数の実施形態は、ベクトル向け命令フォーマットが以下をサポートするように記載される。32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)(従って、16ダブルワードサイズ要素または代替的に8クワッドワードサイズ要素のいずれからなる64バイトベクトル)。16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)。32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトベクトルオペランド長(またはサイズ)。および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトベクトルオペランド長(またはサイズ)。また、代替的な複数の実施形態は、より多い、より少ない、または異なるデータ要素幅(例えば、168ビット(16バイト)データ要素幅)を有するより多い、より少ない、および/または異なるベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)をサポートしてよい。
【0079】
図11A内のクラスAの複数の命令テンプレートは、1)非メモリアクセス1505の複数の命令テンプレート内に示される非メモリアクセス、完全ラウンド制御型演算1510の命令テンプレートおよび非メモリアクセス、データ変換型演算1515の命令テンプレート、および2)メモリアクセス1520の複数の命令テンプレート内に示されるメモリアクセス、一時的1525の命令テンプレートおよびメモリアクセス、非一時的1530の命令テンプレートを含む。
図11B内のクラスBの複数の命令テンプレートは、1)非メモリアクセス1505の複数の命令テンプレート内に示される非メモリアクセス、書き込みマスク制御、部分ラウンド制御型演算1516の命令テンプレートおよび非メモリアクセス、書き込みマスク制御、VSIZE型演算1517の命令テンプレート、および2)メモリアクセス1520の複数の命令テンプレート内に示されるメモリアクセス、書き込みマスク制御1527の命令テンプレートを含む。
【0080】
総称ベクトル向け命令フォーマット1500は、
図11Aおよび
図11Bに順に示され、以下に列挙される次の複数のフィールドを含む。
【0081】
フォーマットフィールド1540−このフィールド内の特定の値(命令フォーマット識別子値)は、ベクトル向け命令フォーマットを、従って、命令ストリームにおけるベクトル向け命令フォーマット内の複数の命令の複数の発生をユニークに特定し。そのように、このフィールドは、総称ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味において任意である。
【0082】
ベース演算フィールド1542−そのコンテンツは、異なるベース演算を区別する。
【0083】
レジスタインデックスフィールド1544−そのコンテンツは、直接またはアドレス生成を介して、複数のレジスタ内またはメモリ内にあるソースおよびデスティネーションオペランドの位置を特定する。これらは、PxQ(例えば、32x516、16x168、32x1024、64x1024)レジスタファイルからNのレジスタを選択するのに十分な数のビットを含む。一実施形態では、Nは3つのソースおよび1つのデスティネーションレジスタに及んでよく、代替的な複数の実施形態はより多いまたはより少ないソースおよびデスティネーションレジスタをサポートしてよい(例えば、2つのソースまでサポートしてよい。ただし、これらのソースのうちの1つはデスティネーションとしてもふるまう。また、3つのソースまでサポートしてよい。ただし、これらのソースのうちの1つはデスティネーションとしてもふるまう。また、2つのソースおよび1つのデスティネーションまでサポートしてよい。)
【0084】
修飾子フィールド1546−そのコンテンツは、そうでないものから、すなわち非メモリアクセス1505の複数の命令テンプレートおよびメモリアクセス1520の複数の命令テンプレートの間で、メモリアクセスを特定する総称ベクトル命令フォーマット内の複数の命令の複数の発生を区別する。複数のメモリアクセス演算は、(幾つかのケースでは、複数のレジスタ内の複数の値を用いてソースおよび/またはデスティネーションアドレスを特定する)メモリ階層を読み出すおよび/または書き込み、複数の非メモリアクセス演算はそれをしない(例えば、ソースおよび複数のデスティネーションはレジスタである)。一実施形態では、このフィールドは、また、3つの異なる態様の間で選択して、複数のメモリアドレス算出を実行し、代替的な複数の実施形態はより多い、より少ない、または異なる態様をサポートして、複数のメモリアドレス算出を実行してよい。
【0085】
増加演算フィールド1550−そのコンテンツは、様々な異なる演算のうちのどの1つがベース演算に加えて実行されるかを区別する。このフィールドは、コンテキスト固有である。発明の一実施形態では、このフィールドは、クラスフィールド1568、アルファフィールド1552、およびベータフィールド1554に分割される。増加演算フィールド1550は、2、3、または4つの命令ではなく単一の命令において実行される複数の演算の共通グループを可能とする。
【0086】
スケールフィールド1560−そのコンテンツは、メモリアドレス生成のためのインデックスフィールドのコンテンツのスケーリングを可能とする(例えば、アドレス生成に対して2のスケール乗のインデックス+ベースを用いる)。
【0087】
変位フィールド1562A−そのコンテンツは、メモリアドレス生成の一部として用いられる(例えば、アドレス生成に対して2のスケール乗のインデックス+ベース+変位を用いる)。
【0088】
変位ファクタフィールド1562B(なお、変位ファクタフィールド1562Bの直上の変位フィールド1562Aの並置は1または他が用いられることを示す)−そのコンテンツは、アドレス生成の一部として用いられる。それは、メモリアクセスのサイズ(N)によりスケールされる変位ファクタを特定する。ただし、Nは、メモリアクセスにおけるバイト数である(例えば、アドレス生成に対して2のスケール乗のインデックス+ベース+スケールされた変位を用いる)。冗長下位ビットは無視され、従って、変位ファクタフィールドのコンテンツは、複数のメモリオペランドの総サイズ(N)により乗算されて、実効アドレスの計算において用いられる最終変位を生成する。Nの値は、(ここに記載の)フルオペコードフィールド1574およびデータ操作フィールド1554Cに基づいて、実行時に、プロセッサハードウェアにより決定される。変位フィールド1562Aおよび変位ファクタフィールド1562Bは、それらは非メモリアクセス1505の複数の命令テンプレートに対して用いられないという意味において任意であり、および/または異なる実施形態は2つのうちの1つのみを実装してよい、またはいずれも実装しなくてよい。
【0089】
データ要素幅フィールド1564−そのコンテンツは、多くのデータ要素幅のうちのどの1つが用いられるかを区別する(幾つかの実施形態では、すべての命令に対して、他の複数の実施形態では、複数の命令のうちの幾つかのみに対して)。このフィールドは、複数のオペコードの幾つかの態様を用いて、1つのデータ要素幅のみがサポートされる、および/または複数のデータ要素幅がサポートされる場合、必要とされないという意味において任意である。
【0090】
書き込みマスクフィールド1570−そのコンテンツは、データ要素の位置に基づいて、デスティネーションベクトルオペランド内のそのデータ要素の位置がベース演算および増加演算の結果を反映するかどうかを制御する。クラスAの複数の命令テンプレートは、差込みライトマスクをサポートし、クラスBの複数の命令テンプレートは、差込みおよびゼロ化ライトマスクの両方をサポートする。複数の差込み、ベクトルマスクは、デスティネーション内の複数の要素のいずれのセットに、いずれの演算(ベース演算および増加演算により特定される)の実行中のアップデートからプロテクトされることを可能とする。他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保存する。対照的に、ゼロ化ベクトルマスクは、デスティネーション内の複数の要素のいずれのセットに、いずれの演算(ベース演算および増加演算により特定される)の実行中にゼロ化されることを可能とする。一実施形態では、対応するマスクビットが0値を有するとき、デスティネーションの要素が0にセットされる。この機能性のサブセットは、実行されている演算のベクトル長を制御する能力である(すなわち、複数の要素のスパンが1つめから最後の1つまで変更される)。しかし、変更される複数の要素が連続する必要はない。従って、書き込みマスクフィールド1570は、複数のロード、複数のストア、算術、論理等を含む複数の部分的なベクトル演算を可能とする。発明の複数の実施形態は、書き込みマスクフィールド1570のコンテンツが、用いられる書き込みマスクを含む多くの書き込みマスクレジスタのうちの1つを選択する(従って、書き込みマスクフィールド1570のコンテンツは、間接的に、実行されるマスキングを特定する)ように記載され、代替的な実施形態は、代わりにまたは追加的に、書き込みマスクフィールド1570のコンテンツに、直接、実行されるマスキングを特定させる。
【0091】
即値フィールド1572−そのコンテンツは、即値の指定を可能とする。このフィールドは、即値をサポートしない総称ベクトル向けフォーマットの実装において存在せず、即値を用いない複数の命令において存在しないという意味において任意である。
【0092】
クラスフィールド1568−そのコンテンツは、異なるクラスの複数の命令の間で区別する。
図11Aおよび
図11Bを参照して、このフィールドのコンテンツは、クラスAおよびクラスBの複数の命令の間で選択する。
図11Aおよび
図11Bにおいて、複数の丸角の正方形は、フィールド内に特定の値があることを示すために用いられる(例えば、
図11Aおよび
図11Bのそれぞれにクラスフィールド1568に対してクラスA1568A及びクラスB1568B)。
【0093】
クラスAの命令テンプレート
クラスAの非メモリアクセス1505の複数の命令テンプレートの場合、アルファフィールド1552は、そのコンテンツが、複数の異なる増加演算型のどの1つが実行されるかを区別するRSフィールド1552Aとして解釈され(例えば、ラウンド1552A.1およびデータ変換1552A.2はそれぞれ非メモリアクセス、ラウンドタイプ演算1510および非メモリアクセス、データ変換型演算1515の複数の命令テンプレートに対して特定される)、ベータフィールド1554は、指定される型の複数の演算のうちのいずれが実行されるかを区別する。非メモリアクセス1505の複数の命令テンプレート内には、スケールフィールド1560、変位フィールド1562A、および変位スケールフィールド1562Bは存在しない。
【0094】
非メモリアクセスの命令テンプレート−完全ラウンド制御型演算
非メモリアクセスの完全ラウンド制御型演算1510の命令テンプレートにおいて、ベータフィールド1554は、そのコンテンツが静的丸め込みを提供するラウンド制御フィールド1554Aとして解釈される。発明の記載の複数の実施形態では、ラウンド制御フィールド1554Aは、浮動小数点例外(SAE)フィールド1556およびラウンド演算制御フィールド1558のすべての抑制を含み、代替的な複数の実施形態は、これらのコンセプトの両方をサポートし、同じフィールドにエンコードしてよく、またはこれらのコンセプト/フィールドの1つまたは他を単に有する(例えば、ラウンド演算制御フィールド1558のみを有してよい)。
【0095】
SAEフィールド1556−そのコンテンツは、例外イベント報告をディスエーブルするか否かを区別する。SAEフィールド1556のコンテンツが可能な抑制を示すと、与えられた命令はすべての種類の浮動小数点例外フラグを報告せず、すべての浮動小数点例外処理部を立ち上げない。
【0096】
ラウンド演算制御フィールド1558−そのコンテンツは、複数のラウンド演算のグループのどの1つが実行するかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。従って、ラウンド演算制御フィールド1558は、命令に基づいてラウンド演算モードの変更を可能とする。プロセッサが複数のラウンド演算モードを指定するための制御レジスタを含む発明の一実施形態では、ラウンド演算制御フィールド1550のコンテンツは、そのレジスタ値を上書きする。
【0097】
非メモリアクセスの命令テンプレート:データ変換型演算
非メモリアクセスのデータ変換型演算1515の命令テンプレートにおいて、ベータフィールド1554は、そのコンテンツが多くのデータ変換(例えば、データ変換なし、スウィズル、ブロードキャスト)のうちのどの1つが実行されるかを区別するデータ変換フィールド1554Bとして解釈される。
【0098】
クラスAのメモリアクセス1520の命令テンプレートの場合、アルファフィールド1552は、そのコンテンツが複数の追い出し示唆のうちのどの1つが用いられるかを区別する追い出し示唆フィールド1552Bとして解釈され(
図12Aでは、一時的1552B.1および非一時的1552B.2は、それぞれ、メモリアクセス、一時的1525の命令テンプレートおよびメモリアクセス、非一時的1530の命令テンプレートに対して特定される)、ベータフィールド1554は、そのコンテンツが多くのデータ操作演算(プリミティブとも知られる)のうちのどの1つが実行されるかを区別するデータ操作フィールド1554Cとして解釈される(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)。メモリアクセス1520の複数の命令テンプレートは、スケールフィールド1560、任意で変位フィールド1562Aまたは変位スケールフィールド1562Bを含む。
【0099】
複数のベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。正規の複数のベクトル命令を用いるように、複数のベクトルメモリ命令は、データ要素ごとの様式で、実際に転送され、書き込みマスクとして選択されるベクトルマスクの複数のコンテンツにより命令される複数の要素を用いて、メモリから/へデータを転送する。
【0100】
メモリアクセスの命令テンプレート−一時的
一時的なデータは、キャッシュにより利益を得るのに十分にすぐに再利用され得るデータである。しかし、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含め、それを異なる態様で実装してよい。
【0101】
メモリアクセスの命令テンプレート−非一時的
非一時的データは、第1レベルキャッシュにキャッシュすることより利益を得るのに十分にすぐに再利用され得るデータであり、削除の優先度を与えられるべきである。しかし、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含め、それを異なる態様で実装してよい。
【0102】
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1552は、そのコンテンツが、書き込みマスクフィールド1570により制御される書き込みマスキングが差込みまたはゼロ化であるべきかどうかを区別する書き込みマスク制御(Z)フィールド1552Cとして解釈される。
【0103】
クラスBの非メモリアクセス1505の複数の命令テンプレートの場合、ベータフィールド1554の一部は、そのコンテンツが、異なる増加演算型のうちのどの1つが実行されるかを区別するRLフィールド1557Aとして解釈され(例えば、ラウンド1557A.1およびベクトル長(VSIZE)1557A.2は、それぞれ、非メモリアクセス、書き込みマスク制御の部分ラウンド制御型演算1516の命令テンプレートおよび非メモリアクセス、書き込みマスク制御、VSIZE型演算1517の命令テンプレートに対して特定される)、ベータフィールド1554の残りは、指定される型の複数の演算のうちのどれが実行されるかを区別する。非メモリアクセス1505の複数の命令テンプレートには、スケールフィールド1560、変位フィールド1562A、および変位スケールフィールド1562Bは存在しない。
【0104】
非メモリアクセス、書き込みマスク制御の部分ラウンド制御型演算1516の命令テンプレートでは、ベータフィールド1554の残りは、ラウンド演算フィールド1559Aとして解釈され、例外イベント報告がディスエーブルされる(与えられた命令は、すべての種類の浮動小数点例外フラグを報告せず、すべての浮動小数点例外処理部を立ち上げない)。
【0105】
ラウンド演算制御フィールド1559A−ラウンド演算制御フィールド1558と同じように、そのコンテンツは、複数のラウンド演算のグループのどの1つが実行するかを区別する(例えば、切り上げ、切り捨て、ゼロへの丸め、および最近接丸め)。従って、ラウンド演算制御フィールド1559Aは、命令に基づいて、ラウンド演算モードの変更を可能とする。プロセッサがラウンド演算モードを指定するための制御レジスタを含む発明の一実施形態では、ラウンド演算制御フィールド1550のコンテンツはそのレジスタ値を上書きする。
【0106】
非メモリアクセス、書き込みマスク制御、VSIZE型演算1517の命令テンプレートにおいて、ベータフィールド1554の残りは、そのコンテンツが多くのデータベクトル長のどの1つが実行されるか(例えば、168、256、または516バイト)を区別するベクトル長フィールド1559Bとして解釈される。
【0107】
クラスBのメモリアクセス1520の命令テンプレートの場合、ベータフィールド1554の一部は、そのコンテンツがブロードキャストタイプのデータの操作演算が実行されるか否かを区別するブロードキャストフィールド1557Bとして解釈され、ベータフィールド1554の残りはベクトル長フィールド1559Bとし解釈される。メモリアクセス1520の複数の命令テンプレートは、スケールフィールド1560、および任意で変位フィールド1562Aまたは変位スケールフィールド1562Bを含む。
【0108】
総称ベクトル向け命令フォーマット1500に関連して、フルオペコードフィールド1574は、フォーマットフィールド1540、ベース演算フィールド1542、およびデータ要素幅フィールド1564を含んで示される。一実施形態は、フルオペコードフィールド1574がこれらのフィールドのすべてを含むように示され、フルオペコードフィールド1574は、それらのすべてをサポートしない複数の実施形態では、これらのフィールドのすべてより少ないフィールドを含む。フルオペコードフィールド1574は、演算コード(オペコード)を提供する。
【0109】
増加演算フィールド1550、データ要素幅フィールド1564、および書き込みマスクフィールド1570は、これらの特徴を、命令に基づいて、総称ベクトル向け命令フォーマットにおいて特定されるようにする。
【0110】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、それらがマスクを異なるデータ要素幅に基づいて適用されることを可能とする型付けされた複数の命令を生成する。
【0111】
クラスAおよびクラスB内の様々な命令テンプレートは、異なる状況において有益である。発明の幾つかの実施形態では、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両クラスをサポートしてよい。例えば、汎用コンピューティングのために意図された高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックおよび/または科学(スループット)コンピューティングのために意図されたコアは、クラスAのみをサポートしてよく、両方のために意図されたコアは、両方をサポートしてよい(もちろん、両方のクラスからのすべてのテンプレートおよび命令ではなく、両方のクラスからの複数のテンプレートおよび複数の命令の幾つかのミックスを有するコアは発明の範囲内である)。また、単一のプロセッサは、すべてが同じクラスをサポートする、または異なるコアが異なるクラスをサポートするマルチコアを含んでよい。例えば、別個のグラフィックおよび複数の汎用コアを有するプロセッサにおいて、主にグラフィックおよび/または科学コンピューティングのために意図された複数のグラフィックコアの1つは、クラスAのみをサポートしてよく、複数の汎用コアのうちの1または複数は、クラスBのみをサポートする汎用コンピューティングのために意図されたアウトオブオーダ実行およびレジスタリネームを有する高性能汎用コアであってよい。別個のグラフィックコアを有さない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。もちろん、1つのクラスからの複数の機能は、発明の異なる実施形態において他のクラスに実装されてもよい。高級言語で書かれた複数のプログラムは、1)実行のために目標プロセッサによりサポートされるクラスの複数の命令のみを有する形式、または2)すべてのクラスの複数の命令の異なる組み合わせを用いて書かれた代替的な複数のルーチンを有し、現在コードを実行しているプロセッサによりサポートされる複数の命令に基づいて実行する複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式に入れられる(例えば、ジャストインタイムにコンパイルされるまたは静的にコンパイルされる)。
【0112】
図12Aから
図12Dは、発明の複数の実施形態に係る典型的な特定ベクトル向け命令フォーマットを示すブロック図である。
図12Aから
図12Dは、複数のフィールドの位置、サイズ、解釈、および順序と、それらのフィールドの幾つかに対する複数の値を特定するという意味において固有である特定ベクトル向け命令フォーマット1600を示す。特定ベクトル向け命令フォーマット1600は、x86命令セットを拡張するために用いられてよく、従って、複数のフィールドのうちの幾つかは、既存のx86命令セットおよびそのエクステンション(例えば、AVX)において用いられるそれらと同様または同じである。このフォーマットは、複数のエクステンションを有する既存のx86命令セットのプレフィックス符号化フィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および複数の即値フィールドとの一致を維持する。
図12Aから
図12Dからの複数のフィールドがマップされる
図11Aおよび
図11Bからの複数のフィールドが示される。
【0113】
発明の複数の実施形態は、説明の目的のため、総称ベクトル向け命令フォーマット1500のコンテキストにおいて特定ベクトル向け命令フォーマット1600を参照して記載されるが、発明は、特許請求の範囲に記載されたものを除いて特定ベクトル向け命令フォーマット1600に限定されるものではないことが理解されるべきである。例えば、総称ベクトル向け命令フォーマット1500は、様々なフィールドの様々な可能なサイズを予想し、特定ベクトル向け命令フォーマット1600は、固有の複数のサイズの複数のフィールドを有するように示される。具体的な例として、データ要素幅フィールド1564は、特定ベクトル向け命令フォーマット1600内の1つのビットフィールドとして示されるが、発明はこれに限定されない(すなわち、総称ベクトル向け命令フォーマット1500は、データ要素幅フィールド1564の他の複数のサイズを予想する)。
【0114】
総称ベクトル向け命令フォーマット1500は、
図12Aに順に示され、以下に列挙される次の複数のフィールドを含む。
【0115】
EVEX Prefix(バイト0−3)1602は、4バイト形式でエンコードされる。
【0116】
フォーマットフィールド1640(EVEXバイト0、ビット[7:0])−第1バイト(EVEXバイト0)はフォーマットフィールド1640であり、0x62(発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられるユニークな値)を含む。
【0117】
第2から第4バイト(EVEXバイト1−3)は、固有の機能を提供する多くのビットフィールドを含む。
【0118】
REXフィールド1605(EVEXバイト1、ビット[7−5]は、EVEX.Rビットフィールド(EVEXバイト1、ビット7−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および1557BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる、すなわち、ZMM0は1611Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。当該分野において知られているように、複数の命令の他の複数のフィールドは、複数のレジスタインデックスのより低い3つのビット(rrr、xxx、およびbbb)をエンコードし、それにより、Rrrr、Xxxx、およびBbbbはEVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成されてよい。
【0119】
REX'フィールド1605−これは、REX'フィールド1510の第1部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。発明の一実施形態では、このビットは、以下に示されるように他とともに、その実オペコードバイトが62であるBOUND命令から区別するためにビット反転フォーマットで(既知のx86 32ビットモードで)格納され、しかし、MOD R/Mフィールド内で、MODフィールド内の11の値を受け入れない。発明の代替的な複数の実施形態は、これと反転フォーマットで以下に示される他のビットを格納しない。1の値は、下位の16のレジスタをエンコードするために用いられる。言い換えると、R'Rrrrは、EVEX.R'、EVEX.R、および他の複数のフィールドからの他のRRRを結合することにより形成される。
【0120】
オペコードマップフィールド1615(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツは、暗黙の主要なオペコードバイト(0F、0F 38、または0F 3)をエンコードする。
【0121】
データ要素幅フィールド1664(EVEXバイト2、ビット[7]−W)は、標記EVEX.Wにより表される。EVEX.Wは、データタイプ(32ビットデータ要素または64ビットデータ要素のいずれ)の粒度(サイズ)を定義するために用いられる。
【0122】
EVEX.vvvv1620(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で特定される第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを有する複数の命令に対して有効である。2)EVEX.vvvvは、あるベクトルシフトに対して1の補数形式で特定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは残される。従って、EVEX.vvvvフィールド1620は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、余分の異なるEVEXビットフィールドは、指定子サイズを32のレジスタに拡張するために用いられる。
【0123】
EVEX.U1668クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、それはクラスAまたはEVEX.U0を示す。EVEX.U=1の場合、それはクラスBまたはEVEX.U1を示す。
【0124】
プレフィックス符号化フィールド1625(EVEXバイト2、ビット[1:0]−pp)は、ベース演算フィールドに対して追加的な複数のビットを提供する。EVEXプレフィックスフォーマットにおける複数のレガシSSE命令に対するサポートを提供することに加えて、これは、SIMDプレフィックスをコンパクトにする利益も有する(SIMDプレフィックスを表すバイトを必要とするのではなく、EVEXプレフィックスは2ビットのみを必要とする)。一実施形態では、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方においてSIMDプレフィックス(66H、F2H、F3H)を用いる複数のレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックス符号化フィールドにエンコードされ、デコーダのPLAに提供される前に、実行時に、レガシSIMDプレフィックスに拡張される(従って、PLAは、これらのレガシ命令のレガシおよびEVEXフォーマットの両方を変更することなく実行することができる)。より新しい複数の命令は、EVEXプレフィックス符号化フィールドのコンテンツを直接、オペコード拡張として用いることができたが、ある実施形態は、一貫性のために、しかしこれらのレガシSIMDプレフィックスにより特定される異なる意味を認める同様の様式で拡張する。代替的な実施形態は、2ビットSIMDプレフィックスエンコードをサポートするPLAを再設計してよく、従って、拡張を必要としない。
【0125】
アルファフィールド1652(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、およびEVEX.Nとしても知られ、またαを用いて示される)−先述の通り、このフィールドはコンテキスト固有である。
【0126】
ベータフィールド1654(EVEXバイト3、ビット[6:4]−SSS、EVEX.s
2−0、EVEX.r
2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、またβββを用いて示される)−先述の通り、このフィールドはコンテキスト固有である。
【0127】
REX'フィールド1610−これは、REX'フィールドの残りであり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするために用いられてよいEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで格納される。1の値は、下位16のレジスタをエンコードするために用いられる。言い換えると、V'VVVVは、EVEX.V'、EVEX.vvvv.を結合することにより形成される。
【0128】
書き込みマスクフィールド1670(EVEXバイト3、ビット[2:0]−kkk)−そのコンテンツは、前述のとおり、複数の書き込みマスクレジスタ内のレジスタのインデックスを特定する。発明の一実施形態では、特定の値EVEX.kkk=000は、特定の命令に対して書き込みマスクが用いられないことを暗示する特別な振る舞いを有する(これは、マスキングハードウェアをバイパスするすべてのものまたはハードウェアに配線される書き込みマスクの使用を含む様々な態様において実装されてよい)。
【0129】
リアルオペコードフィールド1630(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内で特定される。
【0130】
MOD R/Mフィールド1640(バイト5)は、MODフィールド1642、Regフィールド1644、およびR/Mフィールド1646を含む。前述のとおり、MODフィールド1642のコンテンツは、メモリアクセスおよび非メモリアクセス演算の間を区別する。Regフィールド1644の役割は、2つの状況にまとめられることができる。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること、またはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするために用いられない。R/Mフィールド1646の役割は、次を含んでよい。すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること。
【0131】
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述のとおり、スケールフィールド1650のコンテンツは、メモリアドレス生成のために用いられる。SIB.xxx1654およびSIB.bbb1656−これらのフィールドのコンテンツは、前に、レジスタインデックスXxxxおよびBbbbに関連して参照された。
【0132】
変位フィールド1662A(バイト7―10)−MODフィールド1642が10を含むと、バイト7−10は変位フィールド1662Aであり、それはレガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
【0133】
変位ファクタフィールド1662B(バイト7)−MODフィールド1642が01を含むとき、バイト7は変位ファクタフィールド1662Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のそれと同じである。disp8は符号拡張されるので、それは、168および167バイトオフセットの間でのみアドレスすることができる。64バイトキャッシュラインの観点において、disp8は、−168、−64、0、および64のたった4つの実に有用な値にセットされることができる8ビットを用いる。より大きい範囲が頻繁に必要とされるので、disp32が用いられる。しかし、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位ファクタフィールド1662Bはdisp8の再解釈である。変位ファクタフィールド1662Bを用いると、実際の変位は、メモリオペランドアクセスのサイズ(N)により乗算された変位ファクタフィールドのコンテンツにより決定される。このタイプの変位は、disp8×Nとして参照される。これは、平均命令長を減らす(変位に対して用いられた、しかしはるかにより大きい範囲を有する単一バイト)。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという仮定に基づくので、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要はない。言い換えると、変位ファクタフィールド1662Bは、レガシx86命令セットの8ビット変位を代替する。従って、変位ファクタフィールド1662Bは、disp8はdisp8×Nに上書きされる例外のみを用いて、x86命令セットの8ビット変位と同じ態様でエンコードされる(ModRM/SIBエンコードルールに変更はない)。言い換えると、(変位をメモリオペランドのサイズによりスケールして、バイト単位のアドレスオフセットを得る必要がある)ハードウェアによる変位値の解釈のみを除いて、複数のエンコードルールまたは複数のエンコード長に変更はない。即値フィールド1672は、前述のように動作する。
【0134】
フルオペコードフィールド
図12Bは、発明の一実施形態に係るフルオペコードフィールド1674を作成する特定ベクトル向け命令フォーマット1600の複数のフィールドを示すブロック図である。詳細には、フルオペコードフィールド1674は、フォーマットフィールド1640、ベース演算フィールド1642、およびデータ要素幅(W)のフィールド1664を含む。ベース演算フィールド1642は、プレフィックス符号化フィールド1625、オペコードマップフィールド1615、およびリアルオペコードフィールド1630を含む。
【0135】
レジスタインデックスフィールド
図12Cは、発明の一実施形態に係るレジスタインデックスフィールド1644を作成する特定ベクトル向け命令フォーマット1600の複数のフィールドを示すブロック図である。詳細には、レジスタインデックスフィールド1644は、REXフィールド1605、REX'フィールド1610、MODR/M.regフィールド1644、MODR/M.r/mフィールド1646、VVVVフィールド1620、xxxフィールド1654、およびbbbフィールド1656を含む。
【0136】
増加演算フィールド
図12Dは、発明の一実施形態に係る増加演算フィールド1650を生成する特定ベクトル向け命令フォーマット1600の複数のフィールドを示すブロック図である。クラス(U)フィールド1668が0を含むと、それはEVEX.U0(クラスA1668A)を示す。それが1を含むと、それはEVEX.U1(クラスB1668B)を示す。U=0且つMODフィールド1642が11(非メモリアクセス演算を示す)を含むと、アルファフィールド1652(EVEXバイト3、ビット[7]−EH)はrsフィールド1652Aとして解釈される。rsフィールド1652Aが1(ラウンド1652A.1)を含むと、ベータフィールド1654(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1654Aとして解釈される。ラウンド制御フィールド1654Aは、1ビットのSAEフィールド1656および2ビットのラウンド演算フィールド1658を含む。rsフィールド1652Aが0(データ変換1652A.2)を含むと、ベータフィールド1654(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1654Bとして解釈される。U=0且つMODフィールド1642が00、01、または10(メモリアクセス演算を示す)を含むと、アルファフィールド1652(EVEXバイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド1652Bとして解釈され、ベータフィールド1654(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド1654Cとして解釈される。
【0137】
U=1のとき、アルファフィールド1652(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1652Cとして解釈される。U=1且つMODフィールド1642が11(非メモリアクセス演算を示す)を含むと、ベータフィールド1654の一部(EVEXバイト3、ビット[4]−S
0)は、RLフィールド1657Aとして解釈される。それが1(ラウンド1657A.1)を含むと、ベータフィールド1654の残り(EVEXバイト3、ビット[6−5]−S
2−1)は、ラウンド演算フィールド1659Aとして解釈され、RLフィールド1657Aが0(VSIZE1657.A2)を含むと、ベータフィールド1654の残り(EVEXバイト3、ビット[6−5]−S
2−1)は、ベクトル長フィールド1659B(EVEXバイト3、ビット[6−5]−L
1−0)として解釈される。U=1且つMODフィールド1642が00、01、または10(メモリアクセス演算を示す)を含むと、ベータフィールド1654(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1659B(EVEXバイト3、ビット[6−5]−L
1−0)およびブロードキャストフィールド1657B(EVEXバイト3、ビット[4]−B)として解釈される。
【0138】
図13は、発明の一実施形態に係るレジスタアーキテクチャ1700のブロック図である。示される実施形態では、516ビット幅の32のベクトルレジスタ1710がある。これらのレジスタは、zmm0からzmm31として参照される。より低い16のzmmレジスタの下位の256ビットは、レジスタymm0−16上に上書きされる。より低い16のzmmレジスタの下位の168ビット(ymmレジスタの下位の168ビット)は、レジスタxmm0−15上に上書きされる。特定ベクトル向け命令フォーマット1600は、下の表に示されるように、これらの上書きレジスタファイル上で動作する。
【0140】
言い換えると、ベクトル長フィールド1559Bは、最大長さと1または複数の他のより短い長さとの間で選択する。ただし、そのようなより短い長さのそれぞれは、前長の長さの半分であり、ベクトル長フィールド1559Bを有さない複数の命令テンプレートは、最大ベクトル長で動作する。さらに、一実施形態では、特定ベクトル向け命令フォーマット1600のクラスBの複数の命令テンプレートは、パックドまたはスカラ単/倍精度浮動小数点データおよびパックドまたはスカラ整数データで動作する。複数のスカラ演算は、zmm/ymm/xmmレジスタ内の最下位データ要素位置で実行される演算である。より高位の複数のデータ要素位置は、命令の前のそれらと同じ状態のままにされる、または実施形態に応じてゼロ化される。
【0141】
書き込みマスクレジスタ1715−示される実施形態では、それぞれが64ビットサイズの8つの書き込みマスクレジスタ(k0からk7)がある。代替的な実施形態では、書き込みマスクレジスタ1715は16ビットサイズである。前述のとおり、発明の一実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして用いられない。通常k0を示すエンコードが書き込みマスクに対して用いられると、それは、その命令に対する書き込みマスキングを効率的にディスエーブルする0xFFFFのハードワイヤ書き込みマスクを選択する。
【0142】
複数の汎用レジスタ1725−示される実施形態では、複数のメモリオペランドをアドレスする既存の複数のx86アドレスモードとともに用いられる16の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名前で参照される。
【0143】
MMXパックド整数フラットレジスタファイル1750がエイリアスされるスカラ浮動小数点のスタックレジスタファイル(x87スタック)1745−示される実施形態では、x87スタックは、x87命令セットエクステンションを用いて32/64/80ビット浮動小数点データで複数のスカラ浮動小数点演算を実行するために用いられる8要素スタックである。複数のMMXレジスタは、64ビットパックド整数データで複数の演算を実行するため、同様にMMXおよびXMMレジスタの間で実行される同じ複数の演算に対して複数のオペランドを保持するために用いられる。
【0144】
発明の代替的な実施形態は、より広いまたはより狭い複数のレジスタを用いてよい。更に、発明の代替的な実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを用いてよい。
【0145】
前述の明細書では、発明は、固有の典型的な複数の実施形態を参照して記載されている。しかし、様々な修正および変更が、添付の特許請求の範囲に記載されたように発明のより広い精神及び範囲から逸脱することなくなされてよいことは明らかであろう。従って、明細書及び図面は、限定の意味ではなく例示の意味として捉えられるべきである。
【0146】
発明の複数の実施形態は、上述した様々なステップを含む。複数のステップは、汎用または専用プロセッサに複数のステップを実行させるために用いられてよい複数の機械実行可能命令において実装されてよい。代替的に、これらのステップは、複数のステップを実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラムされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行されてよい。
【0147】
ここに記載されたように、複数の命令は、特定の複数の演算を実行するよう構成された、または所定の機能性または非一時的コンピュータ可読媒体に実装されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路(ASIC)のようなハードウェアの特定の複数の構成を参照してよい。従って、複数の図に示された複数の技術は、1または複数の電子デバイス(例えば、エンドステーション、ネットワーク要素等)上で格納および実行されるコードおよびデータを用いて実装されることができる。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号などのような伝搬信号の電気、光、音、又は他の形式)のような、コンピュータ機械可読媒体を用いてコードおよびデータを(内部で、および/またはネットワークを介して他の電子デバイスを用いて)格納および通信する。さらに、そのような電子デバイスは、一般的に、1または複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワーク接続のような1または複数の他のコンポーネントと連結された1または複数のプロセッサのセットを含む。複数のプロセッサのセットおよび他の複数のコンポーネントの連結は、一般的に、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介される。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、それぞれ、1または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、与えられた電子デバイスのストレージデバイスは、一般的に、その電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。もちろん、発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる複数の組み合わせを用いて実装されてよい。この発明の詳細な説明を通じて、説明の目的のために、多くの特定の詳細が、本発明の完全な理解を提供するために記載された。しかし、これらの特定の複数の詳細の幾つかが無くても本発明が実施されてよいことは、当業者に明らかである。特定の例において、周知の構造及び機能は、本発明の主題を分かりにくくしないよう精巧に詳細に記載されなかった。従って、発明の範囲および精神は、次の特許請求の範囲の観点において判断されるべきである。