【文献】
中森 章,TECH I マイクロプロセッサ・アーキテクチャ入門 Vol.20,日本,CQ出版株式会社 増田 久喜,2004年 4月 1日,第20巻,第60頁右欄第27行―第62頁左欄第28行
(58)【調査した分野】(Int.Cl.,DB名)
メモリからプログラム順序で複数の超長命令語(複数のVLIW)をフェッチする命令フェッチユニットであり、前記複数のVLIWのそれぞれは、縮小命令セットコンピュータ(RISC)命令の複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、命令フェッチユニットと、
プログラム順序で前記複数のVLIWをデコードし、デコードされた各VLIWの前記複数のシラブルを並行して出力するデコードユニットと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記デコードユニットから受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、複数のオペレーションを実行する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有し、
前記アウトオブオーダ実行エンジンは、マルチプレクサおよび複数の論理レジスタオペランドコンパレータの少なくとも一方を用いないで、複数の論理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
装置。
前記アウトオブオーダ実行エンジンは、さらに、複数の機能ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数の依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、請求項1に記載の装置。
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、請求項2に記載の装置。
プログラムコードを高級プログラミング言語またはパブリック命令セットアーキテクチャ(パブリックISA)フォーマットから前記複数のVLIWおよび複数のシラブルを含むプライベートISAフォーマットに翻訳するトランスレータをさらに備える、請求項1から3のいずれか一項に記載の装置。
前記トランスレータは、メモリから順番にフェッチされる複数のVLIWのそれぞれに含まれる前記複数のシラブルが複数のデータフローの依存性および複数の偽出力の依存性を有さないように、前記プライベートISAフォーマットに翻訳する際に複数のデータフローの依存性および複数の偽出力の依存性を取り除く、請求項5に記載の装置。
前記複数のデータフローの依存性は、複数のリードアフタライト(「R−A−W」)依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト(「W−A−W」)依存性を含む、請求項6に記載の装置。
前記複数のシラブルは、1または複数の制御シラブル、1または複数の浮動小数点ベクトルシラブル、1または複数のメモリシラブル、および1または複数の整数ALUシラブルの任意の組み合わせを含む複数のタイプであり、各シラブルは、対応タイプのRISC命令により表される、請求項1から9のいずれか一項に記載の装置。
前記アウトオブオーダ実行エンジンは、Nのパーティションを有するレジスタリネーム/割り当てユニットおよびNのパーティションを有するスケジューラユニットを含んで、完全に仕切られる、請求項1から12のいずれか一項に記載の装置。
前記スケジューラユニット内の第1パーティションは、第1タイプの実行ユニットに関連し、前記スケジューラユニット内の第2パーティションは、第2タイプの実行ユニットに関連する、請求項14に記載の装置。
プログラムコードをパブリック命令セットアーキテクチャ(ISA)フォーマットから複数の超長命令語(複数のVLIW)を含むプライベートISAフォーマットに翻訳するトランスレータであり、前記複数のVLIWのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、トランスレータと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有し、
前記1または複数の処理ステージのうちの少なくとも1つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
装置。
前記アウトオブオーダ実行エンジンは、さらに、複数の実行ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数のデータフローの依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、請求項18に記載の装置。
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、請求項19に記載の装置。
前記複数のデータフローの依存性は、複数のリードアフタライト(「R−A−W」)依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト(「W−A−W」)依存性を含む、請求項17から21のいずれか一項に記載の装置。
プログラムコードをパブリック命令セットアーキテクチャ(ISA)フォーマットから複数の超長命令語(複数のVLIW)を含むプライベートISAフォーマットに翻訳する段階であり、前記複数のVLIWのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、段階と、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかをアウトオブオーダ実行エンジンにより実行する段階と、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有し、
前記1または複数の処理ステージのうちの少なくとも1つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、
方法。
【発明を実施するための形態】
【0004】
次の説明では、説明の目的のために、多くの特定の詳細が、以下に記載される発明の複数の実施形態の完全な理解を提供するために明らかにされる。しかし、発明の複数の実施形態はこれらの特定の詳細の一部がなくても実施されてよいことは、当業者には明らかであろう。他の複数の例において、既知の構造およびデバイスは、発明の実施形態の基礎となる原理を分かりにくくしないようにブロック図形式で示される。
【0005】
典型的なプロセッサアーキテクチャおよびデータタイプ
図1Aは、発明の実施形態に係る典型的なインオーダパイプラインおよび典型的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインを示すブロック図である。
図1Bは、発明の実施形態に係るインオーダアーキテクチャコアの典型的な実施形態およびプロセッサ内に含まれる典型的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図1A及び
図1B内の実線のボックスはインオーダパイプラインおよびインオーダコアを示すとともに、破線のボックスの任意の追加は、レジスタリネーミングアウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであるとすると、アウトオブオーダの態様が記載されるであろう。
【0006】
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、レングスデコードステージ104、デコードステージ106、割り当てステージ108、リネーミングステージ110、スケジューリング(ディスパッチ又は発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外ハンドリングステージ122、およびコミットステージ124を含む。
【0007】
図1Bは、実行エンジンユニット150に連結されるフロントエンドユニット130を含むプロセッサコア190を示し、両方がメモリユニット170に連結される。コア190は、縮小命令セットコンピュータ(RISC)コア、複合命令セットコンピュータ(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドまたは代替例コアタイプであってよい。さらに別のオプションとして、コア190は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピュータグラフィックプロセッシングユニット(GPGPU)コア、グラフィックコアなどのような特定の目的のコアであってよい。
【0008】
フロントエンドユニット130は、命令キャッシュユニット134に連結される分岐予測ユニット132を含む。命令キャッシュユニット134は、命令変換索引バッファ(TLB)136に連結される。TLB136は、命令フェッチユニット138に連結される。命令フェッチユニット138は、デコードユニット140に連結される。デコードユニット140(またはデコーダ)は、複数の命令をデコードし、出力として、1または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、その他の複数の命令、または元の複数の命令からデコードされる、そうでなければそれらを反映する、またはそれらから導出されるその他の複数の制御信号を生成してよい。デコードユニット140は、様々な異なるメカニズムを用いて実装されてよい。適当なメカニズムの例は、これに限定されるものではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコードリードオンリメモリ(ROM)などを含む。一実施形態では、コア190は、特定の複数のマイクロ命令のマイクロコードを(例えば、デコードユニット140内に、そうでなければフロントエンドユニット130内に)格納するマイクロコードROMまたは他のメディアを含む。デコードユニット140は、実行エンジンユニット150内でリネーム/割り当てユニット152に連結される。
【0009】
実行エンジンユニット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または複数がアウトオブオーダ発行/実行され、残りがインオーダ発行/実行されてよいことは、理解されるべきでもある。
【0010】
複数のメモリアクセスユニット164のセットは、メモリユニット170に連結される。メモリユニット170は、データTLBユニット172を含む。データTLBユニット172は、データキャッシュユニット174に連結される。データキャッシュユニット174は、レベル2(L2)キャッシュユニット176に連結される。一例示的な実施形態では、複数のメモリアクセスユニット164は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、それぞれがメモリユニット170内のデータTLBユニット172に連結される。命令キャッシュユニット134は、さらに、メモリユニット170内のレベル2(L2)キャッシュユニット176に連結される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュおよび最終的にはメインメモリに連結される。
【0011】
例として、典型的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン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を実行する。
【0012】
コア190は、ここに記載される命令を含め、1または複数の命令セット(例えば、x86命令セット(より新しい複数のバージョンに追加された幾つかの拡張を有する))、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONのようなオプション追加の複数の拡張を有する))をサポートしてよい。一実施形態では、コア190は、パックドデータ命令セットの拡張(例えば、AVX1、AVX2、および/または後述する一般的なベクトルフレンドリな命令フォーマット(U=0および/またはU=1)の幾つかの形式)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションをパックドデータを用いて実行されるようにする。
【0013】
コアは、マルチスレッド(オペレーション又はスレッドの2またはそれより多いパラレルセットを実行)をサポートしてよいし、時間スライスされたマルチスレッド、同時マルチスレッド(ただし、単一物理コアは、物理コアが同時にマルチスレッドする複数のスレッドのそれぞれに対してロジックコアを提供する)、またはそれらの組み合わせ(例えば、インテルハイパースレッド技術におけるような時間スライスされたフェッチおよびデコードおよびそのあとの同時マルチスレッド)を含む様々な方法においてそうしてよいことが理解されるべきである。
【0014】
レジスタリネーミングがアウトオブオーダ実行の状況において記載される限り、レジスタリネーミングがインオーダアーキテクチャにおいて用いられてよいことが理解されるべきである。プロセッサの示された実施形態が、別個の命令およびデータキャッシュユニット134/174および共有L2キャッシュユニット176も含むのに対して、代替的な実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュのような命令およびデータの両方に対する単一の内部キャッシュを有してよい。幾つかの実施形態では、システムは、内部キャッシュおよびコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでよい。代わりに、キャッシュのすべては、コアおよび/またはプロセッサの外部にあってよい。
【0015】
図2は、発明の実施形態に係る、1より多いコアを有してよく、統合メモリコントローラを有してよく、また統合グラフィクスを有してよいプロセッサ200のブロック図である。
図2における実線のボックスは、シングルコア202A、システムエージェント210、および1または複数のバスコントローラユニット216のセットを有するプロセッサ200を示すとともに、任意に追加の破線のボックスは、複数のコア202A−N、システムエージェントユニット210内の1または複数の統合メモリコントローラユニット214のセット、および専用ロジック208を有する代替例のプロセッサ200を示す。
【0016】
従って、プロセッサ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のような多くの処理技術のうちのいずれを用いてそれらの上に実装されてよい。
【0017】
メモリ階層は、複数の統合メモリコントローラユニット214のセットに連結される複数のコア、セットまたは1または複数の共有キャッシュユニット206、および外部メモリ(不図示)内に1または複数のレベルのキャッシュを含む。共有キャッシュユニット206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、最後のレベルのキャッシュ(LLC)、および/またはそれらの組み合わせのような1または複数の中間レベルキャッシュを含んでよい。一実施形態では、リングベースの相互接続ユニット212は、統合グラフィクスロジック208、共有キャッシュユニット206のセット、およびシステムエージェントユニット210/統合メモリコントローラユニット214を相互接続するのに対して、代替的な実施形態は、そのような複数のユニットを相互接続する任意の数の既知の技術を用いてよい。一実施形態では、一貫性が、1または複数のキャッシュユニット206および複数のコア202A−Nの間で維持される。
【0018】
幾つかの実施形態では、1または複数のコア202A−Nはマルチスレッドすることができる。システムエージェント210は、コア202A−Nを調整および操作するそれらの複数のコンポーネントを含む。システムエージェントユニット210は、例えば、電力制御ユニット(PCU)および表示ユニットを含んでよい。PCUは、コア202A−Nおよび統合グラフィクスロジック208の電力状態をレギュレートするのに必要なロジックおよび複数のコンポーネントであってもまたは含んでもよい。表示ユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0019】
複数のコア202A−Nは、アーキテクチャ命令セットの面で同種または異種であってよい。すなわち、コア202A−Nのうちの2またはそれより多いコアは同じ命令セットを実行できてよく、その他はその命令セットまたは異なる命令セットのサブセットのみを実行できてよい。一実施形態では、複数のコア202A−Nは、異種であり、後述する複数の「小さい」コアおよび複数の「大きい」コアの両方を含む。
【0020】
図3から
図6は、典型的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野において既知の他のシステム設計及び構成も適当である。一般的に、ここに開示されるようなプロセッサおよび/または他の実行ロジックを組み込むことができる様々なシステムまたは電子デバイスが一般に適当である。
【0021】
ここで
図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に直接連結される。
【0022】
複数の追加のプロセッサ315の任意の特性は、破線を用いて
図3内に示される。各プロセッサ310、315は、ここに記載される処理コアの1または複数を含んでよく、またプロセッサ200の幾つかのバージョンであってよい。
【0023】
メモリ340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または2つの組み合わせであってよい。少なくとも一実施形態に対して、コントローラハブ320は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPathインターコネクト(QPI)のようなポイントツーポイントインターフェース、または同様の接続395を介してプロセッサ310、315と通信する。
【0024】
一実施形態では、コプロセッサ345は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのような専用プロセッサである。一実施形態では、コントローラハブ320は、統合グラフィクスアクセラレータを含んでよい。
【0025】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含むメリットメトリクスの範囲の観点において、物理リソース310、315の間に様々な差があるはずである。
【0026】
一実施形態では、プロセッサ310は、一般タイプのデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令は、複数の命令内に組み込まれてよい。プロセッサ310は、これらのコプロセッサ命令を、付属のコプロセッサ345により実行されるべきタイプとして認識する。従って、プロセッサ310は、これらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)を、コプロセッサバスまたは他の相互接続上でコプロセッサ345に発する。コプロセッサ345は、受信した複数のコプロセッサ命令を受け入れて実行する。
【0027】
ここで
図4を参照すると、本発明の実施形態による、第1のより具体的な典型的なシステム400のブロック図を示す。
図4に示されるように、マイクロプロセッサシステム400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続450を介して連結された第1のプロセッサ470および第2のプロセッサ480を含む。プロセッサ470および480のそれぞれは、プロセッサ200の幾つかのバージョンであってよい。発明の一実施形態では、プロセッサ470および480はそれぞれプロセッサ310および315であり、コプロセッサ438はコプロセッサ345である。別の実施形態では、プロセッサ470および480は、それぞれ、プロセッサ310およびコプロセッサ345である。
【0028】
プロセッサ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に接続する。
【0029】
プロセッサ470、480は、それぞれ、ポイントツーポイントインターフェース回路476、494、486、498を用いて、個々のP−Pインターフェース452、454を介してチップセット490と情報を交換してよい。チップセット490は、必要に応じて、高性能インターフェース439を介してコプロセッサ438と情報を交換してよい。一実施形態では、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどのようなコプロセッサ438は、専用プロセッサである。
【0030】
共有キャッシュ(不図示)は、どちらかのプロセッサまたは両方のプロセッサの外部に含まれ、さらにP−P相互接続を介して複数のプロセッサに接続され、それにより、プロセッサが低電力モードに配置されると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【0031】
チップセット490は、インターフェース496を介して、第1のバス416に連結されてよい。一実施形態では、第1のバス416は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCIエクスプレスバスまたは別の第3世代I/O相互接続バスのようなバス、であってよいが、本発明の範囲はこれに限定されるものではない。
【0032】
図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のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0033】
ここで
図5を参照すると、本発明の実施形態による第2のより具体的な典型的なシステム500のブロック図が示される。
図4および
図5における同じ要素は同じ参照番号を与え、
図4の特定の態様は、
図5の他の態様を分かりにくくしないように
図5から省略されている。
【0034】
図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に連結される。
【0035】
ここで
図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プロセッサ、組み込みプロセッサなどのような専用プロセッサを含む。
【0036】
ここに開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにおいて実装されてよい。発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0037】
図4に示されるコード430のようなプログラムコードは、ここに記載の複数の機能を実行し、出力情報を生成する複数の命令を入力するために適用されてよい。出力情報は、1または複数の出力デバイスに既知の方法で適用されてよい。このアプリケーションの目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有するいずれのシステムを含む。
【0038】
プログラムコードは、処理システムと通信するために、高級手続型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードは、必要に応じて、アセンブリまたは機械言語において実装されてもよい。実際、ここに記載の複数のメカニズムは、いずれの特定のプログラミング言語の範囲に限定されるものではない。いずれの場合において、言語は、コンパイル型またはインタプリタ型言語であってよい。
【0039】
少なくとも1つの実施形態の1または複数の態様は、機械により読み込まれると、機械に、ここに記載の技術を実行するロジックを組み立てさせるプロセッサ内の様々なロジックを表す、機械可読媒体上に格納された典型的な複数の命令により実装されてよい。「IPコア」として知られるそのような表現は、実際にロジックまたはプロセッサを製造する複数の製造機械にロードするために、有形の機械可読媒体上に格納されて、様々な顧客または製造施設に供給されてよい。
【0040】
そのような機械可読記憶媒体は、これらに限定されないが、ハードディスク、フロッピー(登録商標)ディスクを含む他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び磁気光ディスクのようなストレージメディア、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)のようなランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気または光カードのような半導体デバイス、または電子命令を格納するのに好適ないずれの他のタイプのメディアを含む、機械またはデバイスにより製造または形成される複数の物品の非一時的で有形の装置を含んでよい。
【0041】
従って、発明の実施形態は、複数の命令を含む、またはここに記載の構造、回路、装置、プロセッサ、および/またはシステム特徴を規定するハードウェア記述言語(HDL)のような設計データを含む非一時的な有形の機械可読メディアも含む。そのような実施形態は、プログラム製品と呼ばれてもよい。
【0042】
幾つかの場合では、命令コンバータは、ソース命令セットからの命令をターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理される1または複数の他の命令に翻訳(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィング、エミュレート、そうでなければ変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上に、プロセッサ外に、または一部がプロセッサ上に、一部がプロセッサ外にあってよい。
【0043】
図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を生成してよいことを示す。
【0044】
命令コンバータ712は、x86バイナリコード706を、x86命令セットコア714を用いないで、プロセッサにより本来的に実行されてよい代替の命令セットバイナリコード711に変換するために用いられる。この変換されたコードは、代替の命令セットコンパイラ708から得られる代替の命令セットバイナリコード710と同じであってもなくてもよい。しかし、変換されたコードは、同じ一般的なオペレーションを遂行し、代替の命令セットからの複数の命令から構成される。従って、命令コンバータ712は、エミュレーション、シミュレーション、またはいずれの他の処理を通じて、プロセッサまたはx86命令セットプロセッサまたはコアを有さない他の電子デバイスに、x86バイナリコード706を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【0045】
実装するための装置および方法
動的アウトオブオーダプロセッサパイプライン
発明の一実施形態は、数々の方法で、既存のアウトオブオーダおよびインオーダVLIWプロセッサ実装の制限に取り組む動的アウトオブオーダパイプラインの最適化された実装を含む。ハードウェアの改善は、特別に規定された(例えば、プライベート)命令セットアーキテクチャ(ISA)特徴およびISA(
図7参照)の最適化コンパイラ708またはバイナリトランスレータ(例えば、コンバータ712)であってよいコデザインソフトウェアオプティマイザの助けを借りて実現される。意味深いことに、新しい最適化ハードウェアパイプラインは、ハードウェアにおける動的アウトオブオーダ実行の基本原理のすべてを維持および増進する。発明の実施形態が可能にする1つの使いの価値ある特徴は、ワイド発行アウトオブオーダプロセッサの設計に対して十分に改善されたハードウェアの拡張性である。
【0046】
後述の幾つかの実施形態は、あらゆる従来のISA(例えば、インテルアーキテクチャ(IA)のような)をサポートする従来のアウトオブオーダパイプラインが、ISAにおけるすべての有効なコードシーケンスのハードウェアによる正しいスーパースカラ実行を保証しなければならないという所見に基づいて設計される。しかし、アウトオブオーダマイクロアーキテクチャが、超長命令語(VLIW)ISAにおける複数の制限の幾つかと同様の、ハードウェア実行に対して許可された複数のコードシーケンス上の特定の複数の制限を規定する新しい縮小命令セットコンピュータ(RISC)のようなISAに対して設計されると、アウトオブオーダパイプラインハードウェアの実装が多くの方法において実質的に最適化されることができる。
【0047】
特定の最適化は、密接に関連するISA依存またはISA派生発明のパッケージとして、この特許出願に記載される。新しいISAは、プライベートまたはパブリックのいずれかであり得る。動的バイナリトランスレーション(dBT)技術は、任意に、既存の複数のバイナリコード(例えば、IA)から新しいプライベートISAに翻訳するために使われ、既存のソフトウェアを用いて完全なバイナリ互換性を可能にする。
図7において、例えば、dBT技術は、命令コンバータ712により実装されて、x86バイナリコード706をここに記載のプロセッサアーキテクチャ上で実行するのに適した本来のバイナリコードに変換してよい。代わりに、
図7内のコンパイラ708のような新しいパブリックISAへの最適化コンパイラは、複数の実行可能なバイナリ710を生成するために用いられてよい。
【0048】
意味深いことに、一実施形態では、新しい複数のハードウェア最適化は、アウトオブオーダパイプラインの複数の基本原理を、その実装のみを除いて変えない。そのように、最適化パイプラインは、複数の命令の従来の概念的フロー(複数の命令のインオーダスーパースカラフェッチおよび割り当て、動的データフロースケジューリングエンジン(アウトオブオーダ)、および複数の命令のインオーダスーパースカラリタイアメント)を反映する。この両方は、ハードウェア実現可能性を保証し、広範な汎用ソフトウェアアプリケーションにわたる高性能の期待にマッチするのに役立つ。
【0049】
発明の記載された実施形態は、スーパースカラアウトオブオーダパイプライン実装における十分な数のハードウェア最適化(簡素化、低減、増進)を考慮する。次の特徴は、これらの実施形態により実装される。
インオーダプロセッサのフロントエンドにおけるそれらと同様の動的フロントエンドハードウェア最適化。
アウトオブオーダエンジン割り当て、スケジューラセットアップ、およびリタイアメントユニットの簡素化およびサイズの低減、アウトオブオーダパイプラインのダウンストリーム。
アウトオブオーダパイプラインのセグメントをより並列に作ることで、割り当てパイプラインにおける幾つかの重要なステージ間の依存性の除去および幾つかのパイプラインステージの低減。
アウトオブオーダプロセッサのより広い動的動作周波数/電圧範囲を可能にする幾つかの重要なパイプラインステージに対するレイテンシの低減。
パイプラインに沿った多くのハードウェア構造の区切られた設計、および従来の複数のアウトオブオーダプロセッサにおいて実現可能または実際的なものを越えたそれらのリード/ライトポートの低減。
アウトオブオーダパイプラインの幾つかのステージでの大きなクロスバー(多重化)構造の除去、およびデータパスおよび制御バスの一部におけるより高い並列、より緩いパーティション化構成。
従来のアウトオブオーダ設計と比較して、所与のサイズの高価なアウトオブオーダのハードウェア構造(例えば、リザベーションステーション、バッファなど)の改善された利用。
【0050】
一実施形態では、上述の改善された利用は、アウトオブオーダ命令フェッチ、バックエンドへの割り当て、および元のプログラム順序に対するリタイアメントの効果のインオーダ構成の複雑性のハードウェアにおける利己的な利用によるアウトオブオーダパイプラインの残りにおいて有効である。すべての特徴は、同様に、ワイド発行アウトオブオーダプロセッサの設計に対するより良いハードウェアの拡張性を可能にする。
【0051】
(0)イントロダクション
ハードウェア/ソフトウェアがコデザインされたプロセッサのアーキテクチャを規定するための伝統的なパラダイムは、ソフトウェアコードオプティマイザを用いたコデザインの複数の方法は、現代の主流のアウトオブオーダパイプラインから、構成および/またはILPの利己的な利用の原理において劇的に異ならなければならないハードウェアにおける幾つかの新しい命令レベルの並列処理(ILP)のコンセプトを可能にする特別に規定された複数のISA特徴を通じて適用されることを想定する。しかし、先の複数の試みは、従来のハードウェアのみの複数のアウトオブオーダパイプラインと比較すると、性能および/または効率性において競争に耐えられなかった。
【0052】
発明の実施形態は、代わりにアウトオブオーダパイプラインの実装を目標とするハードウェア/ソフトウェアコデザインに対する新しいパラダイムに基づく。ハードウェアパイプラインの実装における最適化は、以下を含む。
VLIWフロントエンドおよびリタイアメント/コミットユニットを用いるISA最適化アウトオブオーダパイプライン
ISA最適化ハードウェアレジスタリネーミング
ISA最適化スケジューラセットアップロジックおよびパイプライン
ISA最適化命令キャンセルセットアップロジックおよびパイプライン
スケジューラセットアップおよびキャンセルセットアップロジックの組み合わせ
スケジューラウェイクアップおよびキャンセルロジック組み合わせ
遅延ハードウェアレジスタリネーミング
命令の非投機的早期ディスパッチ
最適化アウトオブオーダパイプラインの完全にパーティション化された構成
パーティション化命令割り当てユニット
最適化アウトオブオーダパイプラインにおける割り当て(書き込み)ポートの低減
最適化パイプラインにおけるアウトオブオーダエンジンのアウトオブオーダ割り当て
最適化アウトオブオーダパイプラインのハードウェア強化型のVLIWコードのスケジュール
ISA最適化命令リタイアメントユニット
アウトオブオーダパイプラインのISA最適化クラスタ化構成
【0053】
アウトオブオーダパイプラインの最適化のほとんどは、新しい、特別に規定された複数のISA特徴に直接的に基づく。新しいISAは、プライベートまたはパブリックのいずれかであることができる。前述のように、dBT技術は、既存(例えば、IA)の複数のバイナリコードから新しいプライベートISAに翻訳するために用いられて、既存のソフトウェアとの完全なバイナリ互換性を与える。代わりに、新しいパブリックISAへの最適化コンパイラは、複数の実行可能なバイナリを生成するために要求される。
【0054】
一般性を失うことなく、以下に記載の実施形態は、最適化アウトオブオーダパイプラインを用いるdBT技術の使用を想定する。発明の実施形態は、いずれの特別な必要条件をdBT実装に適用せず、dBTオペレーションの具体的詳細は、発明の基礎となる原理を分かりにくくしないように以下では議論されない。
【0055】
(1)最適化アウトオブオーダパイプラインに対する特別なISA必要条件
図8に示されるように、一実施形態では、最適化アウトオブオーダパイプラインに対するプライベートISAは、RISC型の固定長命令フォーマット800である。特に、ロード・ストアISAは、各固定長命令が、3アドレスのレジスタ/オペコード/オペランドフォーマット801(例えば、dst、src1、src2)および明示的な命令型情報802(例えば、メモリ、ALU、コントロール)を含むように、採用されてよい。さらに、各命令は、セットされると、明示的にプライベートISAにおいて用いられる複数の超長命令語(VLIW)の複数の境界をマークするストップビット803を含む。
【0056】
プライベートISAの1つの特徴は、それが、以下を含んでよい命令のグループ化の複数の制限のセットを規定することである。
【0057】
個々のRISC命令(
図8に示されるような)は、一例が
図9に示される、超長命令語(VLIW)と通常呼ばれる複数のグループのインオーダシーケンスに組み合わされなければならない。特に、
図9は、唯一のVLIWフォーマットにグループ化された複数の個別の命令901−907を示す。従って、一実施形態では、プライベートISAバイナリコードは、複数のVLIWのインオーダシーケンスを備える。VLIWにおける個別のRISC命令は、時々、「シラブル」と呼ばれる。
【0058】
複数のVLIWは、幾つかのアーキテクチャ的に規定された最大値まで可変の数のシラブルを含むことができる。従って、各VLIWの長さは、その中の複数の固定長RISCシラブルの粒度で可変である。各シラブルエンコード内にあるストップビット803のセット値は、複数のVLIWの境界を明示的にマークし、別個のVLIWを特定するハードウェアパイプラインにより用いられる。制限は、各VLIW内の特定のタイプのシンボルの数(例えば、VLIWあたり1以下の制御命令)に対して指定されてよい。
【0059】
一実施形態では、VLIW内の複数のシラブルは、互いの間で、真のデータフロー(リードアフタライト(「R−A−W」)または偽出力(ライトアフタライト(W−A−W))データフローのレジスタオペランド依存性を有さない。複数の偽アンチデータフローの依存性(例えば、ライトアフタリード(「W−A−R」))は、VLIW内で与えられてよい(例えば、
図11Aおよび
図11Bならびに以下の関連する本文を見よ)。これらの制限は、複数のメモリオペレーションを除いて、VLIWにおいて複数のシラブルの間でプログラム順序の関係がないことを、有効に意味する。
【0060】
一実施形態では、複数のVLIWは、プログラム順序に従う。すなわち、与えられたVLIW内のシラブルは、複数のVLIWのプログラム順序でより古い(すなわち、より先にフェッチされた)別の先のVLIW内のシラブルに対して、いずれのデータフロー依存性(R−A−W、W−A−R、またはW−A−W)を有してよい。
【0061】
プライベートISAの幾つかの実施形態では、VLIW内のシラブルの相対位置がシラブルのタイプを規定できる。例えば、与えられたタイプの複数の命令は、同じタイプの複数の命令に対して、および他の複数のタイプの複数の命令に対して、VLIW内で厳格に順序づけられてよい。さらに、シンボルの位置は、シラブルがハードウェアにより導かれなければならないスーパースカラパイプライン(例えば、ALU0、ALU1など)における特定の命令ディスパッチポート(すなわち、ハードウェアパイプ)を規定してよい。例えば、
図9において、命令901は、その位置に基づいてalu0に向けられてよい加算オペレーションである。幾つかの実施形態では、複数の制御命令(例えば、
図9に示される分岐BRCのような)は、VLIWコードにおける特定の許可された複数の相対位置のみをコピーできる。
【0062】
特定のVLIWは、7のシラブルまで含む
図9に示される。1つの制御シラブル907、(最大)2つの浮動小数点ベクトルシラブル905−906、(最大)2つのメモリ(ロード、ストア)シラブル903−904、(最大)2つの整数ALUシラブル901―902を有することが示される。制御(BRC)シラブル内のセットストップビット803は、VLIWインスタンスの境界をマークする。
【0063】
(2)VLIWフロントエンドおよびリタイアメント/コミットユニットを用いるISA最適化アウトオブオーダパイプライン
発明の一実施形態において採用される複数のハードウェア最適化は、以下で、従来のアウトオブオーダパイプライン実装と比較される。最適化アウトオブオーダパイプラインの高レベル構造は、
図10Aおよび
図10Bに従来のアウトオブオーダパイプラインと並んで与えられる。2つのパイプラインの間の1つの違いは、最適化パイプラインが、従来のパイプラインにおける複数のインオーダスーパースカラフロントエンドユニット1001および複数のインオーダスーパースカラリタイアメントユニット1003に代えて、それぞれ、複数のインオーダVLIWフロントエンドユニット1011および複数のリタイアメント/コミットユニット1013を用いることである。一実施形態では、最適化アウトオブオーダパイプラインの複数のユニットは、クロックサイクルあたり1つのVLIWで動作する。
【0064】
図1Bに戻って参照すると、フロントエンドユニット1001および1011は、フロントエンドユニット130内に示される複数のコンポーネントを含んでよい。データフローエンジン1002および1012は、実行エンジンユニット150およびメモリユニット170から複数のコンポーネント(例えば、一実施形態におけるリタイアメントユニット154を除く)を含んでよい。リタイアメントユニット1003および1013は、リタイアメントユニット154から複数のコンポーネントを含んでよい。
【0065】
一実施形態では、最適化パイプラインは、クロックサイクルあたり1以下のVLIWから複数のアウトオブオーダシラブルを割り当てる。従来のパイプラインにおける複数のμopの動的に生成される割り当て「ライン」と異なり、VLIWは、dBTオプティマイザにより静的に前規定され、複数のRISC命令シラブルのVLIWへのグループ化の間、複数のISA制限が適用されたことを保証して、ハードウェアに明示的に提供されてよい。
【0066】
最適化パイプラインにおける動的データフローアウトオブオーダエンジン1012への割り当ての後、VLIWは、その別個のシラブルに分解され、それにより、エンジンは、従来のアウトオブオーダパイプラインにおいて、データフローエンジン1002が別個のμopをスケジュールするのと同様(しかし、同一ではない)の方法において、それらを独立にスケジュールしてよい。
【0067】
(3)最適化パイプラインにおけるアウトオブオーダエンジン割り当ての基本構成
図11Aは、
図11B内の最適化アウトオブオーダパイプライン、VLIWにおける対応するエンティティと並べて、従来のアウトオブオーダプロセッサにおける複数のマイクロ命令(μop)のスーパースカラ割り当てラインの例を示す。
【0068】
複数のμopのスーパースカラ割り当てラインは、プロセッサフロントエンド内の有効なマイクロ命令(ISA)シーケンスのマイクロコードへの変換から生じる複数のμopの間のR−A−W(μop0の出力をμop1の入力に接続する点線の矢印1101として示される)、W−A−R(μop2の出力をμop1の入力に接続する破線の矢印1102として示される)、およびW−A−W(μop0を出てμop3の出力に到達する一点鎖線の矢印1103として示される)レジスタ依存性のいずれのほとんどを含むことができる。従って、従来のアウトオブオーダパイプラインは、複数のμopの割り当てラインのそれぞれおよびすべてにおける可能なライン間(またはライン内)の依存性のすべてをチェックし、正しく処理しなければならない。さらに、従来の割り当てハードウェアは、ライン内の複数のμopの間の元のプログラム順序の関係を追跡し続けて、適切に適用しなければならない。必要条件は、従来のアウトオブオーダパイプラインにおける割り当てハードウェアの実装を実質的に複雑にし、より広いアウトオブオーダプロセッサの設計に対するハードウェアの拡張性を厳しく妨げる。
【0069】
対照的に、VLIW実装を用いて、
図11Bに示されるように、最適化アウトオブオーダパイプライン内の対応する割り当てエンティティは、VLIW内で複数のシラブル命令の間の許容された複数の依存性上で、先述の複数のプライベートISA制限に従わなければならない。複数の制限は、従来のVLIWの複数のISAに対して典型的であり、VLIW内の複数のシラブルの間の真のデータフロー(R−A−W)依存性および偽出力(W−A−W)依存性を禁止する。
図11BにおいてI2の出力をI1の入力に接続する破線の矢印1112により示されるように、複数のシラブルの間の複数の偽アンチ依存性(W−A−R)が許容される。複数のプライベートISA規定は、複数のメモリ命令を除いて、VLIW内の異なる複数のシラブルの間のプログラム順序の関係がないことも意味する。そのように、1つのVLIWからの複数のシラブルは、互いに対して任意の順序で、それらのアウトオブオーダ処理の正確さを複雑にすることなく、アウトオブオーダパイプラインハードウェアにより処理されることができる。最適化アウトオブオーダパイプラインに対する複数の制限のすべてに従うことで、元のバイナリコードを完全に意味的に等価で、有効なプライベートISAコードに翻訳することが、dBTソフトウェアの責任である。
【0070】
(4)ISA最適化ハードウェアレジスタリネーミング
図12Bに示されるように、従来のアウトオブオーダパイプラインと同様に、ここに記載の最適化パイプラインは、ハードウェアレジスタリネーミングユニット1213に依存し、プライベートISAの複数の論理レジスタオペランドを、マイクロアーキテクチャにおいて利用できる多くの物理レジスタにマップする。レジスタリネーミングの1つの目的は、偽W−A−RおよびW−A−Wレジスタ依存性を除去し、それにより、実行中のコードにおける利用可能な並列処理のレベルを増大することである。
【0071】
図12Aおよび
図12Bは、従来のパイプライン(
図12A)および最適化アウトオブオーダパイプライン(
図12B)におけるレジスタリネーミングの比較を提供する。示されるように、相当な量の追加の回路が、従来のパイプラインにおいて、オペランド比較回路1201およびオペランド上書き回路1202(大型マルチプレクサとして典型的に実装される)を含む複数の依存性を取り除くために要求される。
図12Aと対比して、複数のレジスタリネーミングテーブル1213のみが、
図12Bに示される最適化パイプラインにおいて要求される。簡素化および改善は、VLIW内の複数のシラブルの間のR−A−WおよびW−A−W依存性がないという事実に基づく。従って、リネーミングユニットは、複数の依存性をチェックし、それらを適用する必要はない(それらは存在しないので)。この簡素化は、レジスタリネーミングの読み取りフェーズにおいて複数のマルチプレクサ1202をインライン化する複数の論理レジスタオペランドコンパレータ1201および対応する物理レジスタオペランドを除去する。この後者のハードウェアの削減は、複数のマルチプレクサ1202が大きいワイヤ支配領域を占め、レジスタリネーミングステージの全体的なレイテンシを増大するので、特に重要である。取り除かれた複数のマルチプレクサは、ワイド発行プロセッサの設計におけるリネーミングユニットの最悪の拡張性の部分でもある。
【0072】
一実施形態では、VLIWにおいて許容される偽W−A−Rの複数のアンチ依存性は、従来のアウトオブオーダパイプラインと同様に、レジスタリネーミングの書き込みフェーズを、レジスタリネーミングの読み取りフェーズに対してクロックサイクルの2分の1だけ遅延させることにより、最適化パイプラインにおいて取り除かれる。
【0073】
最適化アウトオブオーダパイプラインにおけるレジスタリネーミングの書き込みフェーズのハードウェア実装は、割り当てているVLIW内の複数のシラブルの間の偽W−A−W出力依存性がないことが保証されていることにより、簡素化され、それにより、レジスタリネーミングハードウェアは、複数のレジスタリネーミングテーブル1213を更新する前に、複数の依存性をチェックし、それらを正しく処理する必要がない。
【0074】
(5)ISA最適化スケジューラセットアップロジックおよびパイプライン
最適化アウトオブオーダパイプラインがその割り当てセグメントにおいて可能にする次の改善は、データフロースケジューラのセットアップロジックに関連する。
図13Aおよび
図13Bは、従来のパイプライン(
図13A)および最適化アウトオブオーダパイプライン(
図13B)における割り当ておよびセットアップロジックの比較を提供する。特に、
図13Aは、レジスタリネーミングロジック1301、スケジューラセットアップロジック1302、およびスケジューラロジック1303、同様にキャンセルセットアップロジック1304およびキャンセルロジック1305の連続配置を示す。
図13Bは、レジスタリネーミングロジック1311、スケジューラセットアップロジック1312、およびキャンセルセットアップロジック1314、同様にスケジューラロジック1313およびキャンセルロジック1315に対する改善された並列配置を示す。
【0075】
上述のように、すべてのアウトオブオーダパイプラインは、その利用可能な並列処理を増大するために、割り当てコードから偽W−A−RおよびW−A−Wを除去し、真のデータフローの依存性(R−A−W)のみを考える。しかし、従来のアウトオブオーダパイプラインにおける複数のμopの割り当てライン内の複数の偽依存性を検出および除去することの複雑性および時間重要度は、それに、レジスタリネーミングロジック1301に対してスケジューラセットアップロジック1302を順番に並べさせる。レジスタリネーミングロジック1301は、複数の偽依存性を除去し、スケジューラセットアップロジック1302はその結果を用いて複数の真のR−A−Wデータフローの依存性のみを考える(セットアップする)。しかし、この簡素化は、割り当て命令がディスパッチされることができると、割り当てパイプラインの長さを増大し、最先の時間を遅延する。
【0076】
対照的に、
図13Bに示される最適化アウトオブオーダパイプラインの実施形態は、いずれのイントラVLIWレジスタ依存性を処理する必要がなく、それにより、スケジューラセットアップロジック1312は、レジスタリネーミングロジック1311により実行されるレジスタリネーミングと並行してスケジューリングセットアップを実行する。この実装は、割り当てパイプラインの全体的な長さを減らし(ステージを除去し)、分岐予測ミスのリカバリの後および命令キャッシュミスの後の性能を改善する、複数の命令のより早いディスパッチングを可能にする。一方、より短い割り当てパイプラインは、最小限のリソースのターンアラウンドレイテンシを低減することを介して、アウトオブオーダエンジンの複数のリソースの利用を改善する。
【0077】
最適化割り当てパイプラインの一実施形態では、スケジューラセットアップロジック1312は、より大きな物理レジスタ識別子ではなく、シラブルの複数のオペランドの論理ISAレジスタ識別子を入力情報(例えば、論理レジスタオペランドによりインデキシングされた)として用いる。さらに、スケジューラセットアップロジック1312は、割り当てているVLIW内の複数のシラブルの間の真のR−A−Wデータフローの依存性さえチェックする必要がない。これらの特徴は、スケジューラセットアップにおいて用いられる典型的な内容参照可能メモリ(CAM)を、より簡素で且つより小さいテーブルベース型のスケジューラセットアップロジック1312と置き換えられることを可能にする。一実施形態では、セットアップテーブルは、各スケジューラエントリを、論理レジスタに対する最新の割り当て順序プロデューサ命令を用いて、対応する論理レジスタにマップする。論理レジスタに対する最新のプロデューサ命令が既に実行されていると、セットアップテーブルは、レジスタを、スケジューラで任意の命令への依存性を有していないと報告する。改善されたスケジューラセットアップロジック1312は、まだ、スケジューラセットアップロジックの書き込みフェーズをスケジューラセットアップロジックの読み取りフェーズに対してクロックサイクルの2分の1だけ遅延させることにより実装されてよい複数の割り当てられているシラブルの間の複数の偽のW−A−Rアンチ依存性を処理する必要がある。さらに、レジスタリネーミング(
図12B)と同様に、スケジューラセットアップロジック1312は、書き込みフェーズの間、複数の偽のW−A−W出力依存性を処理する必要はない。それ故に、複数の偽出力の依存性は、記載されたプライベートISAにおいて制限される。
【0078】
(6)ISA最適化命令キャンセルセットアップロジックおよびパイプライン
多くの現代のアウトオブオーダパイプラインは、ロードの実行に対して統計的に最も頻発するケースであるデータキャッシュ内でロードがヒットすると想定して、複数のロードオペレーションに依存する命令の投機的なディスパッチングを実装する。この最適化は、コンシューマの複数のオペレーションが、それらが非投機的にディスパッチされる場合よりも早くロードされたデータを受信することができるようにする。稀な場合では、ロードがデータキャッシュ内でミスすると、すべての投機的にディスパッチ依存のオペレーションが、アウトオブオーダパイプラインにおいて選択的にキャンセルされなければならない。ミスされたロードがより低いレベルのプロセッサのメモリ階層からデータを提供すると、複数のオペレーションは、後に、アウトオブオーダエンジンにより、非投機的に再ディスパッチ(再プレイ)される。
【0079】
複数のロードコンシューマの投機的ディスパッチは、スケジューラ上の他の複数の非ロードμopを通じてのそれらの複数の間接的依存性を含めて、アウトオブオーダエンジンにロード時に割り当てられる複数のμopの複数の依存性を追跡する命令キャンセルロジック1305により可能になる。依存性情報は、データキャッシュ内でロードがミスする場合に、影響する複数のディスパッチ命令を選択的にキャンセルするために用いられる。データフロースケジューラセットアップと同様に、従来のアウトオブオーダパイプラインは、レジスタリネーミング1301の後に、キャンセルロジックセットアップ1304を実行し、1301からのリネームされたレジスタ情報および1302からのデータフロースケジューラセットアップ情報の両方および1305からの先のキャンセルセットアップ情報を、キャンセルセットアップロジック1304の機能を簡素化するために用いる。セットアップ機能は、複数のハードウェア構造への連続するアクセスおよび中間セットアップ情報の複雑な差し込みを含む、複数のμopの割り当てラインを通じて複数のロード上の複数の間接的依存性を判断し、追跡する必要のため、まだ複雑である。
【0080】
スケジューラセットアップロジック1312の改善と同様に、最適化アウトオブオーダパイプラインは、レジスタリネーミング1311およびスケジューラセットアップ1312と並行し、複数の論理レジスタオペランドによりインデキシングされたテーブルベースの方法(すなわち、1312に対して上述したようなCAMフリー)において実装されるキャンセルロジックセットアップ1314を改善する。改善は、同様に、割り当てているVLIW内の複数のシラブルの間でR−A−WおよびW−A−W依存性が無いことの保証に基づく。
【0081】
キャンセル固有の識別および複数のロード命令の間接的依存性の追跡は、VLIWにR−A−WおよびW−A−W依存性が無いことにより、最適化パイプラインにおいてまた大いに簡素化され、それにより、キャンセルロジック1314のセットアップの全体的な複雑性およびレイテンシがスケジューラセットアップロジック1312に対するそれらと等しくなる。複数のW−A−R依存性は、同様に、キャンセルロジックセットアップ1314の書き込みフェーズを、その読み取りフェーズに対してクロックサイクルの2分の1だけ遅延させることにより、処理される。一実施形態では、キャンセルロジックセットアップ1314の書き込みフェーズは、キャンセルロジックセットアップ1314の読み取りフェーズの複数の結果を複数の入力のうちの1つとして用いることができる。
【0082】
(7)スケジューラセットアップおよびキャンセルセットアップロジックの組み合わせ
キャンセルセットアップロジック1314の全体的な最適化は、それを、スケジューラセットアップロジック1312を有する最適化アウトオブオーダパイプラインにおいて、シラブルの複数のオペランドの複数の論理レジスタ識別子によりアドレス可能な(インデキシングされる)単一テーブルに組み合わされることができるようにする。組み合わせは、さらに、命令キャンセル情報に含まれる複数のロードへの複数の間接的依存性に適用されるように、すべての間接的データフロー依存性が、常に、直接的データフロー依存性の前に除去されるという一般的事実に基づく。
【0083】
(8)スケジューラウェイクアップおよびキャンセルロジックの組み合わせ
さらに、命令キャンセル情報は、ここで、従来の複数のアウトオブオーダパイプラインのように、別個のハードウェア構造より、複数の命令に対する複数の真のデータフロー(R−A−W)依存性情報とともに、データフロースケジューラ1313のウェイクアップロジック上に保たれることができる。最適化は、さらに、命令キャンセル情報に含まれる複数のロードへの複数の間接的依存性に適用されるように、すべての間接的データフロー依存性が、常に、直接的データフロー依存性の前に除去されるという一般的事実に基づく。
【0084】
これは、ひとえに、最適化アウトオブオーダパイプラインが、完全に、別個の命令キャンセルセットアップおよび従来のアウトオブオーダエンジンにおける相当の電力および領域フットプリントを有するロジックハードウェアの追跡の必要を除去するとともに、まだ完全に、複数の選択的命令キャンセル機能を実行できることを意味する。
【0085】
(9)遅延ハードウェアレジスタリネーミング
割り当てパイプラインの実装の別の最適化は、上述のスケジューラ1312−1313およびキャンセルセットアップロジック1314の複数の改善が、アウトオブオーダパイプラインにおけるレジスタリネーミングステージの重要度を除去するという事実に基づく。
【0086】
参考として、従来の複数のアウトオブオーダパイプラインは、可能な限り早く完了されるレジスタリネーミング1301を要求する。これは、連続するスケジューラセットアップ1302およびキャンセルロジックセットアップ1304の機能が、リネーミングステージからの情報に依存するために、要求される。
【0087】
新しい最適化アウトオブオーダパイプラインでは、レジスタリネーミングフェーズ1311は、リネームされたレジスタ情報が最初に必要となるまで、すなわち、命令がパイプライン内のデータフロースケジューラから最初にディスパッチされることができるまで、遅延されてよい。遅延されたレジスタリネーミング1311は、後に、従来のパイプラインと比較される複数の空き物理宛先レジスタの割り当てができるようにし、それにより、最小の物理レジスタのターンアラウンドレイテンシが短縮され、与えられたサイズの物理レジスタファイルがより良好に利用される。レジスタリネーミングの重要度の除去は、アウトオブオーダエンジンの物理的レイアウトを最適化するために用いられることもできるとともに、割り当てパイプラインにおける他のハードウェア構造に対する複数のレジスタリネーミングテーブルの配置の複数の必要条件がここで緩和されることができる。
【0088】
(10)複数の命令の非投機的早期ディスパッチ
現代の複数のアウトオブオーダプロセッサは、それらのパイプラインのスケジューラセットアップおよび複数の命令スケジューリングステージと並行して実行される複数の割り当て命令の早期ディスパッチを実装してよい。複数の命令の早期ディスパッチは、特に分岐予測ミスのリカバリの後または命令キャッシュミスの後の多くの割り当て命令は、実際に、それらの割り当て時間でディスパッチされる準備ができているので、プロセッサの性能を改善する。しかし、命令の準備に関する情報は、この早期のステージでの従来のパイプラインでは利用できない。その結果、パイプラインは、あらゆる割り当て命令はその割り当て時間にて準備できるものと想定することにより、投機的に早期ディスパッチをする。
【0089】
その後、従来のパイプラインにおいて、プロセッサは、投機的ディスパッチ命令が実際に準備されているかどうかを判断するためにチェックし、されていない場合、命令をキャンセルする。消し損ねた早期ディスパッチ命令のキャンセルは、特別なハードウェアサポートを要し、追加の電力オーバーヘッドを招く。
【0090】
上述のスケジューラセットアップロジック1312および割り当てパイプラインの最適化は、十分早期に、命令の準備情報を容易に利用できるようにし、それにより、最適化アウトオブオーダパイプラインは、複数のキャンセルの電力オーバーヘッドおよび関連するキャンセルハードウェアをそうして除去する複数の準備命令のみの非投機的早期ディスパッチを実行することができる。
【0091】
(11)最適化アウトオブオーダパイプラインの完全にパーティション化された構成
アウトオブオーダパイプラインの最適化ハードウェア実装における別の重要な改善は、VLIW(例えば、ALU、メモリ、制御などのような)における異なるタイプの複数の命令(複数のシラブル)の間のISA規定の厳格な相対順序の利己的な利用に、および複数のメモリオペレーションを除く、VLIW内の複数のシラブルの間の特定のプログラム順序の複数の関係が定義されないことに基づく。
【0092】
さらに、プライベートISAの一実施形態は、VLIW内の同じタイプの複数の命令の厳格な相対順序を規定する。すなわち、同じタイプの幾つかの命令(例えば、2つのALU命令)がVLIW内にあると、ISAの一実施形態は、複数の命令のそれぞれがハードウェアにより導かれなければならない特定の複数のディスパッチポートを規定する。
【0093】
VLIWにおける複数のメモリ命令に対して、ISAの一実施形態は、それらが導かれなければならないメモリディスパッチポートに依存して、複数のメモリアクセスのそれらの相対的プログラム順序を規定する。例えば、一実施形態では、メモリディスパッチポート0(MEM0)に関連するVLIWシラブルは、必ず、メモリディスパッチポート1(MEM1)に関連するVLIWシラブルに対してプログラム順序においてより古いメモリ命令を含む。
【0094】
プライベートISAの一実施形態は、
図14Bに示されるように、最適化アウトオブオーダパイプラインの完全にパーティション化された実装を可能にする。各パイプラインパーティションまたはハードウェアパイプは、特定のハードウェアディスパッチポート、例えば、ALU0、ALU1、MEM0、MEM1、CONTROL等に関連する。パイプラインパーティション機能は、独立にまたは緩く互いに連結され、実質的にプロセッサハードウェア設計、検証、および製造を簡素化する。複数のパーティションは、また、アウトオブオーダエンジン実装に対して簡素であり、合理化され、およびより並列な複数の物理レイアウトを可能にする。
【0095】
一実施形態では、エンコードされたVLIWは、プライベートISAにおいて規定されるように、圧縮型のメモリ内に表される。すなわち、VLIWは、すべての可能なシラブルタイプを含まなくてよく、または複数の命令のタイプに対して複数のハードウェアディスパッチポートと同じタイプの多くのシラブルがなくてよい。しかし、これらの欠けている複数のシラブルは、命令メモリ内の任意のスペースを占有しない。一実施形態では、フロントエンドパイプライン
1011は、圧縮されたVLIWを拡張し、その現在の複数のシラブル(複数の命令)をすべて、対応する複数のパイプラインパーティションに入れる。最適化アウトオブオーダパイプラインにおけるこの点から、複数の命令は、それらが複数のプライベートISA規定に応じて導かれた複数のパイプラインパーティションによってのみ処理される。
【0096】
一実施形態では、そのようなパイプラインパーティショニングは、従来のものと比較して、最適化パイプラインにおいて大型マルチプレクサおよびクロスバースイッチの除去を可能にする。VLIWのプライベートISAにおいて規定される複数の命令の相対順序が、厳密に、アウトオブオーダプロセッサのレイアウトにおける複数のハードウェア構造およびそれらのリード/ライトポートの相対的トポロジに一致するので、これが起こり、それにより、特定の複数のハードウェア構造への追加のマルチプレクシング、または複数の命令のステアリング、またはそれらの複数の制御フィールドは、パイプラインを通す必要がない。
【0097】
デコードされた命令キューの読み込みステージから実行ステージへの従来と最適化アウトオブオーダパイプラインとの比較が、
図14Aおよび
図14Bに示される。特に、
図14Aは、第1クロスバースイッチ1401を介してリネーム/割り当てステージ1404に切り替えられたμop0−3のシーケンスを示す。第2クロスバースイッチ1402は、複数のμopを、リネーム/割り当てステージ1404からモノリシックのリザベーションステーション(RS)を含むスケジューリングステージ1405に接続する。ディスパッチステージ内の第3クロスバースイッチ1403は、スケジューリングステージ1405を、ディスパッチされた複数のμopの複数のオペランドを読み込む複数の物理レジスタファイル1406および複数のμopがディスパッチされる複数の実行ポート1407に接続する。
【0098】
対照的に、
図14Bでは、幾つかのクロスバースイッチおよびマルチプレクサが取り除かれる。特に、クロスバー1401が、それらのプログラム順序で配置された複数の命令の複数の論理レジスタオペランドフィールドを特定の複数のタイプのレジスタリネーミングテーブル(またはRAT)および複数のテーブルにおける特定のリードまたはライトポートにルートするレジスタリネーミングステージ1404にて取り除かれている。このクロスバーは、VLIWにおける複数のシラブルの順序がRATハードウェアトポロジに一致するので、最適化パイプラインにおいて冗長になる。従って、
図14Bでは、命令0−3は、リネーム/割り当てステージ1414に直接供給される。幾つかの実施形態では、複数のアウトオブオーダプロセッサの従来の複数のISAと比較して複数のより少ない順序制限は、要求されると、プライベートISAにおいて規定されることができ、それにより、クロスバーは完全に取り除かれないが、その複雑性、電力、レイテンシ、および領域は相当に縮小される。
【0099】
図14Bにおいて、それらのプログラム順序で配置された複数の命令を、データフロースケジューラ1405(または複数のリザベーションステーションRS)の特定の複数のパーティション(または複数の論理セクション)にルートするスケジューラ割り当てステージにて、クロスバー1402も取り除かれている。このクロスバー1402は、
図14Bにおいて、VLIWにおける複数のシラブルの順序が直接的にデータフロースケジューラの複数のパーティション1415のハードウェアトポロジに一致するので、最適化パイプラインにおいて冗長になる。幾つかの実施形態では、複数のアウトオブオーダプロセッサの従来の複数のISAと比較して複数のより少ない順序制限は、要求されると、プライベートISAにおいて規定されることができ、それにより、クロスバーは完全に取り除かれないが、その複雑性、電力、レイテンシ、および領域は相当に縮小される。
【0100】
また、ディスパッチされた複数の命令を、データフロースケジューラ(RS)1405におけるそれらの複数の位置(複数のパーティション)から特定の複数の物理レジスタファイル1406およびそれらの特定の複数のリードポート、および特定の複数の命令実行ポート1407にルートする命令ディスパッチステージにて、クロスバー1403が取り除かれる。このクロスバーは、データフロースケジューラ1415の複数のパーティションの相対配置が、厳密に、複数のレジスタファイル1416のハードウェアトポロジおよびそれらのリードポート、および複数の命令実行ポート1417に一致するので、最適化パイプラインにおいて冗長になる。
【0101】
現代の従来のアウトオブオーダプロセッサパイプラインの幾つかも、データフロースケジューラ(RS)のパーティション化された構成を実装する。しかし、この特徴は、それらを、任意の他のクロスバーではなく、命令ディスパッチステージにて後のクロスバー1406のみを除去することができるようにする。一方、パーティション化されたRSを有する従来の複数のアウトオブオーダパイプラインは、複数の割り当て命令を適当な複数のパーティションに導く特別の複数のハードウェアユニットを実装しなければならず、また、複数のパーティションのそれぞれに関連する異なる複数の命令実行ポートの利用が均衡を保たれることを確かめなければならない。一実施形態では、最適化アウトオブオーダパイプラインは、特別のパーティションロードバランシングハードウェアユニットを必要とせず、それが生成するバイナリコードにおいて実行ポートロードバランシングを実行するコードオプティマイザソフトウェアに依存する。後のロードバランシング情報は、暗に、先述のプライベートISAにおけるVLIWのシラブル順序の複数の規定を介して最適化ハードウェアパイプラインに伝達される。
【0102】
取り除かれマルチプレクサおよびクロスバースイッチは、最適化アウトオブオーダパイプラインにおけるレイテンシ(すなわち、より高いクロック周波数を可能にする)、電力、および領域の相当の低減を導く。プラス効果は、マルチプレクサおよびスイッチはワイヤ優位のハードウェア構造であり、複数のワイヤはより微細なプロセスにおいてシリコンデバイスよりスケールダウンが相対的に悪いので、将来のより微細なシリコン製造プロセスに一層重要になる。
【0103】
クロスバースイッチ型の複数のハードウェア構造の領域およびレイテンシは、それらの入力/出力の数における線形増大に不十分(およそ2次的)に比例するので、クロスバーの除去は、より広範なプロセッサ設計のための最適化アウトオブオーダパイプラインのハードウェア実装のより良い拡張性を可能にする。最適化アウトオブオーダパイプラインは、まだ、デコードされた複数の命令を拡張されたVLIWから適当な複数のパイプラインパーティションにルートするフロントエンドパイプラインにおいて複数のマルチプレクサを採用してよいことを記すことは重要である。パイプラインのディスパッチ、実行、ライトバックステージ(
図15参照)にて、オペランドをバイパスするために複数のマルチプレクサをまだ使用してもよい。残りのステージでは、最適化アウトオブオーダパイプラインは、マルチプレクサおよびクロスバースイッチを除去する。
【0104】
図15は、幾つかの4xパーティション化パイプラインステージを含むnエントリのデータフロースケジューラを有する最適化4―wideアウトオブオーダエンジンの一実施形態を示す。特に、示された実施形態は、4つのデコードされた命令(例えば、VLIWからの複数のシラブル)を格納するための4xパーティション化され、デコードされた命令キュー1501、複数の命令を複数のプロセッサリソースに割り当てるための4xパーティション化割り当てユニット1502、4xパーティション化nエントリスケジューラウェイクアップロジックおよび(n/4):1命令選択ロジック1504の4xパーティション化セットを有する複数のリザベーションステーション1503、複数の物理レジスタファイル1505のセット、オペランドバイパスロジック1506、および複数の機能ユニット1507を含む。一実施形態では、スケジューラウェイクアップロジックおよび複数のリザベーションステーション1503の4つのパーティションのすべてに対して、実行を待つnの命令を格納するための全nのエントリがあり、複数のパーティションのそれぞれはnの命令のn/4を格納する。例として、n=32の値に対して、複数のパーティション1503のそれぞれは、32/4または8の命令(8のエントリにおける)を格納し、複数の選択ロジックパーティション1504のそれぞれは、パイプラインにおけるそれに関連する8エントリウェイクアップロジックパーティション1503から最大8の準備命令の1つを選択できる。
【0105】
一実施形態では、スケジューラウェイクアップロジック1503の各パーティションは、それらの命令の複数の実行ユニット1507へのルーティングを簡素化するために、特定のタイプの命令のみを格納するよう構成されてよい。例えば、
図15において、(これらの命令は、容易に、複数のパーティションからそれらのそれぞれの実行ユニットにルートされるので、)パーティション#2および#3は、複数のALU命令を格納し、パーティション#0および#1は複数のメモリ命令を格納してよい。
【0106】
割り当てロジック1502は、スケジューラウェイクアップロジックにおける4つのパーティションのそれぞれへの唯一のライトポートを含む。さらに、4xパーティション化選択ロジック1504は、複数のパーティション1503のそれぞれへの1つのリードポートを含み、サイクルあたり4つの命令、複数のパーティション1503のそれぞれから1つ、を選択できる(例えば、一実施形態では、4つの8:1マルチプレクサのセットを用いて)。従って、スケジューラウェイクアップロジック1503における各パーティションは、1つのリードポートおよび1つのライトポートのみを必要とするので、パイプラインの4xパーティショニングは、劇的に、スケジューラウェイクアップロジック1503および選択ロジック1504を実装することが要求されるシリコン領域を減らす。すなわち、(n:4の全選択複雑性を有する、非パーティション化実装をもたらすnの命令とは対照的に、)選択ロジック1504の各パーティションは、4x((n/4):1)の全選択複雑性を有する4つのパーティションのそれぞれからn/4の命令の1つを選択できる必要があるだけである。一実施形態では、選択ロジック1504は、実行(すなわち、それらのオペランドを準備)されてよいすべての可能な命令を観測し、複数の命令の割り当て世代および割り当てられた実行ユニットの複数の命令ディスパッチスロットの有用性のような複数の変数に基づいて各パーティションからディスパッチする1つの命令を選択する。
【0107】
図15に示される特定の実施形態では、2つのメモリ実行チャネル(例えば、物理レジスタファイル1505に入力されるロードおよび/またはストアアドレス命令、オペランド値のバイパスユニット1506、およびメモリアドレス生成ユニットMEM0およびMEM1 1507に対して)および2つのALUチャネルがある。
【0108】
他のレイテンシ、電力、および領域の利益の間で、スケジューラパーティショニングは、ワイド発行プロセッサの設計の
より良いハードウェアの拡張性を提供する。スケジューラの拡張性の種類は、最適化アウトオブオーダパイプラインに特有ではなく、幾つかの従来のパイプラインにおいて見られることができるが、最適化パイプラインにおいて、能力により、プライベートISAにおける複数のより長いVLIWフォーマットを規定し、dBTオプティマイザソフトウェアによる複数の命令を用いて複数のより長いVLIWを満たすことが実質的に促進される。
【0109】
(12)パーティション化命令割り当てユニット
最適化アウトオブオーダパイプラインの完全にパーティション化された構成の結果である別のハードウェア実装の改善は、命令割り当てユニット1502の実装に関連する。命令割り当てユニット1502は、アウトオブオーダパイプラインの複数の割り当てステージの間、機能し、またパーティション化され、それにより、そのパーティションのそれぞれは、正確に、最適化パイプラインの1つのパーティションを提供し、それを、クロックサイクルあたり1以下のパーティションタイプの命令(例えば、ALUまたはメモリなど)のみに割り当てる。パーティション化された割り当てユニット1502は、ハードウェアの複雑性および全体的な領域を減らし、それに加えて、より広範なアウトオブオーダプロセッサの設計のさらにより良い拡張性を有する。
【0110】
(13)最適化アウトオブオーダパイプラインにおける割り当て(書き込み)ポートの低減
一実施形態では、プライベートISAは、VLIWにおいて許容される特定のタイプの命令の最大数を制限してよい。複数の制限は、最適化アウトオブオーダパイプラインにおける複数の割り当てハードウェアユニット(上述のような)および幾つかの関連するハードウェア構造の追加の低減および簡素化のために用いられてよい。
【0111】
例えば、
図9に示されるように、VLIWが3以上のメモリオペレーション(2つのロード、または1つのロードおよび1つのストア、または2つのストア)を含まなくてよい場合、ロードバッファ(LB)およびストアバッファ(SB)のような174(
図1B参照)におけるメモリオーダリングバッファ(MOB)内のそのような重要であり且つ大きな複数の構造は、同様の従来のアウトオブオーダパイプラインにおける複数のMOBと比較して、少数の割り当て(書き込み)ポートを有することができる。このレートは現代の従来の複数のISA(例えば、IA)により制限されないので、従来の複数のパイプラインは、同じタイプの複数の命令の最高の可能な割り当てレートのハードウェアにおいて供給しなければならない。例えば、既存の複数のアーキテクチャは、LBに最大4のロードを同時に割り当てる(書き込む)ことができる必要がある。ここに記載の最適化パイプラインにおける複数のMOB構造への少数のライトポートは、十分な領域および電力低減をもたらす。
【0112】
(14)最適化パイプラインにおけるアウトオブオーダエンジンのアウトオブオーダ割り当て
一実施形態では、複数のハードウェアリソースのより良い利用は、アウトオブオーダエンジンのアウトオブオーダ割り当ての結果のように、最適化アウトオブオーダパイプラインにおいて実現される。アウトオブオーダ割り当ての効果は、当然に、dBTオプティマイザに対する必要条件から得られ、複数のVLIWに配置されている複数のシラブルで複数のプライベートISA制限に従う。具体的には、VLIWにおける複数のシラブルの間の真のデータフロー(R−A−W)および/または偽出力(W−A−W)依存性は存在できない。dBTオプティマイザは、それらを複数のプライベートRISCシラブルに翻訳した後、ただしそれらを複数のVLIWにグループ化する前に、例えば複数のIA入力命令の適当な再順序により、複数の制限を満たす。静的コード再順序の結果として、複数のコンシューマ(依存)命令は、それらのプロデューサ命令に対して続くVLIW(複数可)に配置され、最適化アウトオブオーダパイプラインにおける複数のコンシューマ命令は、それらのプロデューサの割り当ての時間に対して次の複数のクロックサイクルの1つにおいてのみ、アウトオブオーダエンジンに割り当てられる。
【0113】
図16は、複数の命令(例えば、翻訳された複数のシラブル)の典型的なシーケンスを示し、アウトオブオーダコードの前スケジューリング(例えば、dBTオプティマイザによる)の有益な効果を示す。特に、アウトオブオーダ命令「ウィンドウ」1600は、与えられたハードウェア容量に対して利用される。複数のシラブルは、複数の依存性に基づいて、ウィンドウ内にまたは外に移動される。例えば、幾つかの依存命令1602が、ウィンドウの前に移動されているのが示され(すなわち、より後の実行時間に対して)、他の複数の独立命令1601がウィンドウ内に移動されているのが示される(より先の実行時間に対して)。
【0114】
依存命令は、最新のそのプロデューサ命令がディスパッチされた後、次(最先)のクロックサイクルにおいてディスパッチされることができるだけなので、複数のコンシューマ命令の遅延された(アウトオブオーダ)割り当ては、最適化アウトオブオーダパイプラインにおいて、データフロースケジューラの複数のエントリのおよび他のハードウェアの複数のバッファリソースの利用についてプラス効果を有する。より早い割り当ては、複数のハードウェアリソースを無駄にするだけである。
【0115】
対照的に、従来のアウトオブオーダパイプラインは、同じクロックサイクルにおいて生成およびコンシューミング命令の両方を決まって割り当てなければならず、それにより複数のコンシューマ命令に対して割り当てられた複数のハードウェアリソースは、少なくとも1クロックサイクルの間、無駄になる。そのフロントエンドユニット1001が、デコードされた命令ストリーム(例えば、IAストリーム)から生成されるマイクロコードにおいて複数のμopを再順序できないので、これが起こる。一方、命令ストリームに対するマイクロコードが、当然に、それらのプロデューサ命令に隣接する複数のコンシューマ命令を有する。例えば、マイクロコード内の複数のμopのロード+ALUの複数の組み合わせは、複数のプログラムコードに対して典型的であり、同じクロックサイクル内でアウトオブオーダエンジンに頻繁に割り当てられる。従って、コンシューマALU命令は、生成ロードオペレーションのレイテンシに依存して、少なくとも3−4クロックサイクルの間、従来のパイプラインにおける複数のハードウェアリソースを無駄にしてよい。
【0116】
プロデューサおよびコンシューマ命令の相対的割り当てにおける複数の差の結果として、最適化アウトオブオーダパイプラインにおいて与えられたサイズのハードウェアデータフロースケジューラは、従来のパイプラインにおける同様のスケジューラより平均でより多い準備命令を観測する。従って、スケジューラの複数のエントリは、最適化パイプラインにおいてより良好に利用されるので、スケジュールのサイズが性能ペナルティを伴うことなく減らされることができる、または与えられたサイズのスケジューラがその性能を制限することなくより大きく/より広いアウトオブオーダプロセッサを提供することができる。すなわち、アウトオブオーダ割り当ての効果は最適化アウトオブオーダパイプラインのハードウェアの拡張性を改善する。
【0117】
dBTソフトウェアオプティマイザにより実行される複数のVLIWへのコード前スケジューリング副産物が複数のプライベートISA制限に従うので、最適化アウトオブオーダパイプラインは、いずれの追加のハードウェアを用いることなくアウトオブオーダ割り当てを可能にすることを記すことは重要である。
【0118】
同様に、最適化アウトオブオーダパイプラインは、効率的に、例えばIA入力アプリケーションにおけるそれらの元のプログラム順序から複数の命令をフェッチし、デコードし、さらにリタイアする。それにもかかわらず、最適化アウトオブオーダパイプラインにおけるフロントエンド、割り当て、およびリタイアメントユニットは、まだ、それらの簡素な複数のインオーダ機能を実行する。複数のユニットのハードウェアサイズおよび複雑性は、フロントエンドハードウェアの顕著な増大のないアウトオブオーダフェッチおよび割り当ての同様のプラス効果およびフロントエンドにおけるマルチスレッドフェッチ、フロントエンドにおける命令前スケジューリング/再順序ユニット等のようなその複雑性を利用できない従来のアウトオブオーダパイプラインのように実質的に小さいまたは少なくとも同じである。
【0119】
(15)最適化アウトオブオーダパイプラインのハードウェア強化型のVLIWコードのスケジュール
最適化アウトオブオーダパイプラインに対してdBTソフトウェアオプティマイザにより実行される複数のVLIWへのコード前スケジューリングを考えると、従来のインオーダVLIWパイプラインの複数のプロセッサの同様のVLIWコードスケジュールに対するVLIWコードスケジュールをもたらす幾つかの重要な複数の改善を指摘することは重要である。従来のインオーダVLIWパイプラインでは、各VLIWは、フェッチ、デコード、割り当て(またはバックエンドパイプラインへの転送)、ディスパッチング、およびリタイア/コミットのアトミックユニットである。すなわち、インオーダパイプラインの対応する複数のステージは、VLIWの全体、すなわちその複数のシラブルのすべてに同時に従う。
【0120】
対照的に、最適化アウトオブオーダパイプラインでは、VLIWは、ディスパッチングを除き、フェッチ、デコード、割り当て、およびリタイア/コミットのアトミックユニットとして提供する。バックエンド割り当てステージの間、ハードウェアデータフロースケジューラによるそれらの独立の動的スケジューリングおよびディスパッチング、潜在的にアウトオブオーダの目的のために、VLIWは、個々のシラブル(RISC命令)に分かれる。最適化アウトオブオーダパイプラインにおけるハードウェアデータフロースケジューラの存在は、後述するように、それに対する強化型VLIWコードスケジュールを可能にする。
【0121】
従来のインオーダVLIWパイプラインに対するソフトウェアコードオプティマイザは、複数の命令の正確な(およびスーパースカラ、すなわち並列)ディスパッチシーケンスを生成することを担当する。ディスパッチシーケンスは、インオーダパイプラインに正確に続く。従って、複数の依存命令は、従来のVLIWスケジュールにおけるそれらの生成命令に、少なくとも、複数の生成命令の正確なレイテンシまでに、続かなくてはならない。複数のシングルサイクルプロデューサに対し、コンシューマは、スケジュールにおける次のVLIWに配置されることができる。一方、複数のマルチサイクルロードの複数のコンシューマに対して、(インオーダパイプラインにおける最大ディスパッチレートがクロックサイクルあたり1のVLIWであるので、VLIWの数における)フルロードレイテンシが、複数のコンシューマがVLIWコードに配置されることができる前に、スキップされなければならない。
【0122】
これは、複数のマルチサイクルプロデューサおよびそれらの複数のコンシューマの間の複数のVLIWにおけるすべての空のシラブルが、他の複数の独立命令を用いるソフトウェアオプティマイザにより容易に満たされることができるので、高いトリップカウントを有する複数の最内ループのような本質的に高い命令レベルの並列処理および静的に予測可能な制御フローを用いる複数のスケジューリングコードの大きな問題を提示しない。
【0123】
しかし、ハードウェアパイプラインが、コードスケジュールにおいてすべてのマルチサイクルプロデューサおよびそれらの複数のコンシューマの間の正しい複数のレイテンシを知ることを保証することのみのために、低い固有の並列処理および多くの条件分岐を有するスケジューリングコードに対して、従来のVLIWソフトウェアオプティマイザは、多くのノーオペレーション命令をコードスケジュールに入れなければならない。複数のノーオペレーション命令は、Itaniumプロセッサファミリ(IPF)におけるそれらのように、インオーダハードウェアパイプラインにおける複数のバブルをもたらし、従来の複数のVLIWプロセッサにおける複数のハードウェアリソースの割り当て過少(すなわち、未活用)の原因となる。
【0124】
最適化アウトオブオーダパイプラインの一実施形態は、従来のVLIWコードスケジュールにおいて見られた非能率を軽減する複数のハードウェアメカニズムを含む。特に、低い並列処理を有する複数のコードに対して、dBTオプティマイザは、ハードウェアにおける複数の命令全体の長いレイテンシに動的に適応するアウトオブオーダエンジンの能力に依存し、それが生成する強化型VLIWコードスケジュールにおいて、すべての命令が、実際の命令レイテンシを強制するよりむしろ、単位(1クロックサイクル)レイテンシを有するものと想定する。単位レイテンシの想定は、バックエンド割り当てレートを増大する従来のVLIWスケジュールと比較して、スケジュールをより一層、高密度(小型)およびノーオペレーション命令のないものにするが、まだ、複数の命令の間の正しい複数の依存性の十分な情報を用いて最適化アウトオブオーダパイプラインを提供する。
【0125】
より高い並列処理を有する複数のコードに対して、最適化アウトオブオーダパイプラインに対するdBTソフトウェアオプティマイザの一実施形態は、複数の命令、主に複数のロード命令の実際のレイテンシおよびそのより速い実行の目的のための翻訳されたコード領域における特定の複数の命令の重要度の相対次数の両方を考慮する。結果として、高い並列処理を有する複数のコードに対して、強化型VLIWコードスケジュールは、従来のVLIWコードスケジュールの複数の特徴のほとんどを取得する。プロデューサおよびコンシューマ命令は、プロデューサのレイテンシを少なくとも部分的に考慮するスケジュールにおいて分けられ、高い重要度の複数の命令は、それらのより早いVLIWコードスケジュールへの配置を介して低い重要度の複数の命令の前にアウトオブオーダエンジンに割り当てられる。すなわち、高い並列処理を有する複数のコードにおけるマルチサイクル命令のレイテンシは、アウトオブオーダエンジンのハードウェアにより完全にではなく、VLIWコードスケジュールを介して(部分的に)適応される。強化型VLIWコードスケジュールは、まだ、高密度(小型)であり、ノーオペレーション命令がない。最適化アウトオブオーダパイプラインによるコードスケジュールの実行は、高い命令レベル並列処理(ILP)を有する複数のコードに対してより良い性能を導き、先述のように、従来のアウトオブオーダパイプラインと比較してアウトオブオーダのハードウェアリソースのより良い利用を可能にもする。
【0126】
一実施形態では、最適化アウトオブオーダパイプラインに対する強化型VLIWコードスケジュールは、好機を狙って生成される。コードスケジュールは、複数の命令の間の複数の依存性を正確に反映しなければならないが(複数の依存命令が別個のVLIWに配置される)、それらの複数のコンシューミング命令の配置における複数の生成命令の最小レイテンシに正確に従わなくてよい。この強化は、同様のVLIW ISA特性(例えば、IPFプロセッサにおけるような)に依存する従来のインオーダハードウェアパイプラインと比較して、最適化アウトオブオーダパイプラインにおいて、より良いコードスケジュール密度および命令割り当てレートを可能にする。
【0127】
さらに、最適化アウトオブオーダパイプラインに対する強化型VLIWコードスケジュールは、プロデューサおよびコンシューマ命令を同じVLIWに配置しないこと、および、それにより、同じクロックサイクル内でアウトオブオーダエンジンに割り当てられることからそれらを防ぐことにより、従来のアウトオブオーダパイプラインにおいて典型的なアウトオブオーダエンジンの複数のハードウェアリソースの過度の割り当てを減らす。
【0128】
(16)ISA最適化命令リタイアメントユニット
一実施形態では、最適化アウトオブオーダパイプラインのリタイア/コミット領域1013に配置されるリタイアメントユニットは、複数の命令を、最大でクロックサイクルあたり1VLIWのVLIW粒度(dBTオプティマイザにより静的に前規定される)で厳密にリタイアする。対照的に、従来のアウトオブオーダパイプラインは、ハードウェア内で、リタイアメントに対して複数のμopのスーパースカラグループ(「ライン」)を動的に選択し、選択の間、起こり得る懸案の中断および/または例外、および複数のμopのリタイヤリングストリームの「ライン」における元の複数のマクロ命令(ISA)の間の複数の境界を考慮しなければならない。
【0129】
一実施形態では、割り当てパイプラインセグメント1502と同様に、1013におけるリタイアメントパイプラインセグメントのハードウェア実装は、それがコードを生成する際にdBTソフトウェアオプティマイザが従うプライベートISAにおいて規定されるVLIWにおける複数のシラブルの複数の制限のため、最適化される。特に、一実施形態では、VLIWにおいて複数のシラブルの間に偽出力の依存性(W−A−W)はなく、VLIWにおいてプログラム順序はなく(メモリオペレーションを除く)、それにより、リタイアメントユニットハードウェアは、従来のアウトオブオーダパイプラインにおける同様のユニットと異なり、リタイアメントの間、依存性のチェックを実行しなくてよく、順序を無視することができる。取り除かれた依存性および順序のチェックロジックは、典型的に、ワイド発行アウトオブオーダプロセッサの設計に対して、従来のリタイアメントユニットにおいて最悪の拡張可能なハードウェアである。さらに、一実施形態において唯一のVLIWがクロックサイクルあたりにリタイアされるので、最適化リタイアメントパイプラインにおける例外検出およびプログラムカウンタアップデートメカニズムは、スーパースカラ(すなわち、並列)リタイアメントに対して複製される必要はない。ところが、従来のアウトオブオーダパイプラインにおける複数のμopのスーパースカラリタイアメントに対して、複数のμopレベルの「ライン」で複数のマクロ命令(ISA)の間の複数の境界を慎重に処理することが一般的に行われる。
【0130】
これらの特徴のすべては、非常に高いピークスループットを有するISA最適化リタイアメントユニットの簡素化および緩く連結されてパーティション化されたハードウェア実装を可能にする。
【0131】
完全を期するため、最適化アウトオブオーダパイプラインにおける再順序バッファ(ROB)は、最適化されパーティション化された割り当ておよびリタイアメントユニットとの改善された統合を可能にし、ワイド発行アウトオブオーダプロセッサの設計に対してより大きいハードウェアの拡張性をサポートするために、完全にまたは部分的にパーティション化された方法において実装されることもできることを記すことは重要である。
【0132】
リタイアメントユニットのこれらの最適化は、最適化アウトオブオーダパイプラインにおける正確に構成されたレジスタおよびメモリ状態が、(例えば、隣接するVLIWの間の複数の境界で、dBTオプティマイザソフトウェアにより静的に生成される)各VLIWの精度でサポートされることを暗示する。正確な状態は、ハードウェアの中断、実行例外、失敗等の処理のために、一実施形態において用いられる。
【0133】
最適化アウトオブオーダパイプラインの一実施形態は、明示的に、構成されたレジスタおよびメモリ状態に対してプライベートISA規定をサポートする。それがソフトウェアアプリケーションの実行に対して要求され、元のバイナリコード(例えば、IA)のISAにより暗示された際に、正確なプライベートISA状態の対応する正確な元のバイナリコード(例えば、IA)状態への確かなマッピングを確立すること、および続く正確なレジスタおよびメモリ状態を再構築できるようにすることは、dBTソフトウェアの責任である。
【0134】
(17)アウトオブオーダパイプラインのISA最適化クラスタ化構成
最適化アウトオブオーダパイプラインの一実施形態は、プライベートISAの複数の特徴およびdBTオプティマイザソフトウェアのサポートを介して、クラスタ化されたアウトオブオーダの複数のマイクロアーキテクチャの効率的な実装を可能にする。複数のクラスタ化マイクロアーキテクチャは、他のモノリシックであり大きな複数のハードウェア構造および複数のリソースをより小さい複数の部分(複数のクラスタ)に分割し、それにより、複数の部分のそれぞれがより低いレイテンシを有し、対応するモノリシックなハードウェア構造より高いクロック周波数で実行することができるので、それらの物理的実装はより簡素になり、ハードウェアの拡張性が改善される。
【0135】
クラスタ化マイクロアーキテクチャの典型的なアプリケーションは、物理レジスタファイルおよび/またはオペランドバイパスネットワークを、2またはそれより多いより小さいクラスタ、例えば、2つの4−ワイドモノリシック実行クラスタとして実装され、4−ワイドプロセッサのクロック周波数で実行する8−ワイドアウトオブオーダプロセッサに分割するワイド発行プロセッサの設計にある。このクラスタ化されたハードウェア実装は、固有の性能オーバーヘッドを有するが、複数の別個のクラスタの間のデータアクセスおよび転送の複数のレイテンシは、複数のクラスタ内、またはより小さいモノリシックアウトオブオーダのマイクロアーキテクチャに対するそれらより大きくなる。
【0136】
実行しているコードにおける重要なデータ依存が複数のクラスタを介してスケジュールされ、従って、複数のハードウェア構造の同様の論理サイズおよび/または容量を有する仮定的な(しかし、実現可能である必要はない)大きなモノリシックアウトオブオーダマイクロアーキテクチャに関する性能を下げるクラスタ間通信のレイテンシを取り込むと、クラスタ間通信の余分のレイテンシは、一般的に、全体の実行時間において露呈される。
【0137】
従って、クラスタ化アウトオブオーダマイクロアーキテクチャの効率性は、実行の実効重要パスがクラスタの境界を越える(性能低下の主な原因)レートを最小化するために、正しいクラスタへの割り当て命令のステアリングを介して、クラスタ間レイテンシの露呈が、如何に良く軽減されるかに依存する。
【0138】
複数のクラスタ化マイクロアーキテクチャにおける最適命令ステアリングメカニズムの実装は、挑戦的なタスクとしてより広く考えられている。単純な複数の命令ステアリング技術は、クラスタ化ワイド発行アウトオブオーダプロセッサのハードウェア効率性を損なう、同じ発行幅のモノリシックアウトオブオーダパイプラインのベースラインに対して大きな(例えば、20%−30%)の性能低下をもたらす。
【0139】
ハードウェアが、最適なステアリング決定をするために、複数の割り当て命令についての十分および/または信頼できるコンテキスト情報を有さないと、ステアリング決定は、アウトオブオーダバックエンドへの命令割り当ての前に、フロントエンドパイプラインにおいて実行されなければならないので、より洗練された命令ステアリングの発見的方法は、フェッチされたコードの重要パスの解析を実行し、正しいステアリング決定を生成するための余分のハードウェアを要求しないだけでなく、解析の範囲において非常に限定される。固有の複数の困難により、従来のアウトオブオーダパイプラインの実際的なサウンドクラスタ化の実装は開発されていない。
【0140】
対照的に、最適化アウトオブオーダパイプラインの一実施形態では、dBTソフトウェアオプティマイザは、正規のコードスケジューリングプロセスの一部として、その翻訳時間で、コードの重要パスの複数の特性を解析する。dBTオプティマイザは、当然に、十分なコンテキスト情報を有し、コードの実行中に続く最適化アウトオブオーダパイプラインに対して静的に(コード翻訳時に)十分に最適なステアリング決定を行うことを可能にするコードの大きな複数の領域における複数の命令の依存性の重要度を考慮する。
【0141】
最適化されクラスタ化されたアウトオブオーダパイプラインにおける命令ステアリングに対するこれらのdBT有効化技術は、市販製品の観点からそれらを実現可能にする、ハイエンドで非常に広いアウトオブオーダプロセッサの設計に対するハードウェアの拡張性を劇的に改善するクラスタ化およびモノリシックアウトオブオーダマイクロアーキテクチャの複数の構成の間の効率性および性能のギャップを十分に(1%−3%まで)埋める。
【0142】
一実施形態では、複数のクラスタに命令ステアリングを示す情報は、ISAにより規定されるVLIWにおける複数のシラブルに対する全体的な複数の順序制限の必須部分として実装されてよいプライベートISAにおいて規定される複数のステアリング制御機能を介して、最適化アウトオブオーダパイプラインに明示的に配信される。これは、例えば、複数の位置が、先述のように最適化アウトオブオーダパイプラインにおける特定の複数の実行ユニットポートにマップされることができるのと同様に、VLIW内の特定の複数のシラブル位置の特定の複数のハードウェアクラスタへの静的マッピングを用いて、またはデュアルクラスタマイクロアーキテクチャの構成に対するシラブルエンコードにおける1ビットのクラスタステアリングのヒントを介して(より多くのビットが、より大きい数のクラスタに対して複数のステアリングヒントをエンコードするのに必要とされる)、達成されてよい。
【0143】
(18)最適化アウトオブオーダパイプラインについての種々の備考
最適化アウトオブオーダパイプラインの複数の実施形態は、多くの知られた、または「クラシック」な、既存のバイナリコード(例えば、IA)の複数のdBT最適化の効率的な複数の実装を可能にする。そのような最適化の例は、これらに限定されるものではないが、投機的なループ不変コード移動、投機的なレジスタ値のスピルおよびフィルコードの最適化(レジスタプロモーションとしても知られる)、投機的な制御フローの最適化(唯一のパス条件付きおよび/または間接分岐、IF変換、コード矯正へのバイアスの除去)等を含む。加えて、現代のアウトオブオーダプロセッサにおいて利用できる多くのハードウェアのみのアウトオブオーダパイプライン最適化は、「そのまま」実装、または最適化アウトオブオーダパイプラインにおいてコデザインされたハードウェア/ソフトウェアとしてそれらを実装することにより簡素化および強化されることもできる。そのような最適化の例は、これらに限定されるものではないが、命令統合、移動命令の除去、ゼロイディオム命令の除去、初期の物理レジスタの再利用、投機的ロックの省略等を含む。
【0144】
発明の複数の実施形態は、上述した様々なステップを含む。複数のステップは、汎用または専用プロセッサに複数のステップを実行させるために用いられてよい複数の機械実行可能命令において実装されてよい。代わりに、これらのステップは、複数のステップを実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラムされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行されてよい。
【0145】
ここに記載されたように、複数の命令は、特定の複数のオペレーションを実行するよう構成された、または所定の機能性または非一時的コンピュータ可読媒体に実装されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路(ASIC)のようなハードウェアの特定の複数の構成を参照してよい。従って、複数の図に示された複数の技術は、1または複数の電子デバイス(例えば、エンドステーション、ネットワークエレメント等)上で格納および実行されるコードおよびデータを用いて実装されることができる。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号などのような伝搬信号の電気、光、音、又は他の形体)のような、コンピュータ機械可読媒体を用いてコードおよびデータを(内部で、および/またはネットワークを介して他の電子デバイスを用いて)格納および通信する。さらに、そのような電子デバイスは、一般的に、1または複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワーク接続のような1または複数の他のコンポーネントと連結された1または複数のプロセッサのセットを含む。複数のプロセッサのセットおよび他の複数のコンポーネントの連結は、一般的に、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介される。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、それぞれ、1または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは、一般的に、その電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。もちろん、発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる複数の組み合わせを用いて実装されてよい。この発明の詳細な説明を通じて、説明の目的のために、多くの特定の詳細が、本発明の完全な理解を提供するために説明された。しかし、これらの特定の複数の詳細の幾つかが無くても本発明が実施されてよいことは、当業者に明らかである。特定の例において、周知の構造及び機能は、本発明の主題を分かりにくくしないよう精巧に詳細に記載されなかった。従って、発明の範囲および精神は、次の特許請求の範囲の観点から判断されるべきである。
本実施形態の例を下記の各項目として示す。
[項目1]
メモリからプログラム順序で複数の超長命令語(複数のVLIW)をフェッチする命令フェッチユニットであり、前記複数のVLIWのそれぞれは、縮小命令セットコンピュータ(RISC)命令の複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、命令フェッチユニットと、
プログラム順序で前記複数のVLIWをデコードし、デコードされた各VLIWの前記複数のシラブルを並行して出力するデコードユニットと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記デコードユニットから受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、複数のオペレーションを実行する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有する、
装置。
[項目2]
前記アウトオブオーダ実行エンジンは、マルチプレクサおよび複数の論理レジスタオペランドコンパレータの少なくとも一方を用いないで、複数の論理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、項目1に記載の装置。
[項目3]
前記アウトオブオーダ実行エンジンは、さらに、複数の機能ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数の依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、項目2に記載の装置。
[項目4]
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、項目3に記載の装置。
[項目5]
プログラムコードを高級プログラミング言語またはパブリック命令セットアーキテクチャ(パブリックISA)フォーマットから前記複数のVLIWおよび複数のシラブルを含むプライベートISAフォーマットに翻訳するトランスレータをさらに備える、項目1から4のいずれか一項に記載の装置。
[項目6]
前記トランスレータは、最適化コンパイラまたは動的バイナリトランスレータを含むバイナリトランスレータを含む、項目5に記載の装置。
[項目7]
前記トランスレータは、メモリから順番にフェッチされる複数のVLIWのそれぞれに含まれる前記複数のシラブルが複数のデータフローの依存性および複数の偽出力の依存性を有さないように、前記プライベートISAフォーマットに翻訳する際に複数のデータフローの依存性および複数の偽出力の依存性を取り除く、項目6に記載の装置。
[項目8]
前記複数のデータフローの依存性は、複数のリードアフタライト(「R−A−W」)依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト(「W−A−W」)依存性を含む、項目7に記載の装置。
[項目9]
前記トランスレータは、VLIW内で複数の偽のアンチデータフロー依存性を受け入れる、項目8に記載の装置。
[項目10]
前記複数の偽のアンチデータフロー依存性は、ライトアフタリード(「W−A−R」)依存性を含む、項目9に記載の装置。
[項目11]
前記複数のシラブルは、1または複数の制御シラブル、1または複数の浮動小数点ベクトルシラブル、1または複数のメモリシラブル、および1または複数の整数ALUシラブルの任意の組み合わせを含む複数のタイプであり、各シラブルは、対応タイプのRISC命令により表される、項目1から10のいずれか一項に記載の装置。
[項目12]
前記複数のシラブルのタイプは、VLIWにおけるシラブルの許可された相対位置として規定される、項目11に記載の装置。
[項目13]
前記アウトオブオーダ実行エンジンは、複数のシラブルの非投機的早期ディスパッチを実行するディスパッチロジックを含む、項目1から12のいずれか一項に記載の装置。
[項目14]
前記アウトオブオーダ実行エンジンは、Nのパーティションを有するレジスタリネーム/割り当てユニットおよびNのパーティションを有するスケジューラユニットを含んで、完全に仕切られる、項目1から13のいずれか一項に記載の装置。
[項目15]
前記Nのパーティションは、物理的に配置されて、複数の命令のうちの複数の特定のタイプを処理する、項目14に記載の装置。
[項目16]
前記スケジューラユニット内の第1パーティションは、第1タイプの実行ユニットに関連し、前記スケジューラユニット内の第2パーティションは、第2タイプの実行ユニットに関連する、項目15に記載の装置。
[項目17]
前記レジスタリネーム/割り当てユニットおよび前記スケジューラユニットの仕切りは、前記アウトオブオーダ実行エンジンおよびそのロードおよび複数のバッファのストアを含むメモリオーダリングバッファの少なくとも一方のライトポートの数を減らす、項目14から16のいずれか一項に記載の装置。
[項目18]
前記パブリックISAは、インテルアーキテクチャ(IA)を含む、項目5に記載の装置。
[項目19]
プログラムコードをパブリック命令セットアーキテクチャ(ISA)フォーマットから複数の超長命令語(複数のVLIW)を含むプライベートISAフォーマットに翻訳するトランスレータであり、前記複数のVLIWのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、トランスレータと、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかを実行するアウトオブオーダ実行エンジンと、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有する、
装置。
[項目20]
前記1または複数の処理ステージのうちの少なくとも1つは、マルチプレクサまたは複数の論理レジスタオペランドコンパレータを用いないで、複数のシラブルの複数の物理レジスタオペランドを読み取るための読み取りフェーズを実装するレジスタリネーミングロジックを含む、項目19に記載の装置。
[項目21]
前記アウトオブオーダ実行エンジンは、さらに、複数の実行ユニットによる実行のための前記複数のシラブルのスケジューリングに先立って複数のシラブルの間の複数のデータフローの依存性を評価するスケジューラセットアップロジックを含み、前記スケジューラセットアップロジックは、前記レジスタリネーミングロジックの前記読み取りフェーズと並行して実行される、項目20に記載の装置。
[項目22]
前記スケジューラセットアップロジックは、さらに、特定のディスパッチされた複数のシラブルの複数の効果をキャンセルするのに前記アウトオブオーダ実行エンジンにより利用可能なキャンセルセットアップロジックと並行して各シラブル上で動作する、項目21に記載の装置。
[項目23]
前記トランスレータは、最適化コンパイラまたはバイナリトランスレータを含む、項目19から22のいずれか一項に記載の装置。
[項目24]
前記複数のデータフローの依存性は、複数のリードアフタライト(「R−A−W」)依存性を含み、前記複数の偽出力の依存性は、複数のライトアフタライト(「W−A−W」)依存性を含む、項目19から23のいずれか一項に記載の装置。
[項目25]
プログラムコードをパブリック命令セットアーキテクチャ(ISA)フォーマットから複数の超長命令語(複数のVLIW)を含むプライベートISAフォーマットに翻訳する段階であり、前記複数のVLIWのそれぞれは、複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性を削除する順序で、前記複数のVLIWにグループ化される前記複数のシラブルを含む、段階と、
他の複数のシラブルと並行して前記複数のシラブルのうちの少なくとも幾つかをアウトオブオーダ実行エンジンにより実行する段階と、を備え、
前記複数のシラブルのうちの少なくとも幾つかは、それらが前記アウトオブオーダ実行エンジンにより受信される前記順序と異なる順番で実行され、前記アウトオブオーダ実行エンジンは、前記複数のシラブルを処理する際に、前記複数のシラブルの間の複数のデータフローの依存性および複数の偽出力の依存性のチェックをしない1または複数の処理ステージを有する、
方法。