以下の記述は、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、または他の処理装置におけるメモリアクセス用の命令および処理ロジックを説明する。一実施形態において、そのような処理装置は、クラスタ化された機械における処理装置を含んでよく、複数の実行ユニットはまとめてクラスタ化されてよい。別の実施形態において、そのような処理装置は、クラスタ化されたワイド実行機械を含んでよい。以下の説明では、本開示の実施形態のより完全な理解を提供するために、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化(enablement)メカニズム等の多数の具体的な詳細が述べられる。しかしながら、本実施形態はそのような具体的な詳細がなくても実施されうることが当業者によって認識されるであろう。加えて、幾つかのよく知られた構造、回路等は、本開示の実施形態を不必要に分かりにくくしないようにするために詳細には示されていない。
以下の複数の実施形態はプロセッサを参照しながら説明されるが、複数の他の実施形態は、複数の他のタイプの集積回路およびロジックデバイスに適用可能である。本開示の実施形態の同様の技法及び教示内容は、より高いパイプラインスループット及び改善された性能から利益を受けうる他のタイプの回路又は半導体デバイスに適用されてよい。本開示の実施形態の教示内容は、データ操作を実行する任意のプロセッサ又は機械に適用可能である。しかしながら、本実施形態は、512ビット、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータオペレーションを実行するプロセッサ又は機械に限定されるものではなく、データの操作又は管理が実行されうる任意のプロセッサ及び機械に適用されてよい。加えて、以下の説明は、複数の例を提供し、複数の添付図面は、例示を目的として様々な例を示す。しかしながら、これらの例は、本開示の実施形態の全ての可能な実施態様を網羅的に列挙したものを提供するものではなく、単に本開示の実施形態の例を提供することを意図したものにすぎないので、限定する意味に解釈されるべきではない。
以下の例は、実行ユニット及びロジック回路に関する命令のハンドリング及び分散を説明しているが、本開示の他の実施形態は、機械によって実行されると、当該機械に、本開示の少なくとも一実施形態と一致した機能を実行させる機械可読有形媒体上にストアされたデータ又は命令として達成されうる。一実施形態においては、本開示の実施形態に関連付けられた機能が、機械実行可能命令に具現化される。これらの命令は、命令を用いてプログラムされうる汎用プロセッサ又は専用プロセッサに本開示の複数の段階を実行させるのに用いられうる。本開示の実施形態は、本開示の実施形態による1または複数のオペレーションを実行するようにコンピュータ(又は他の電子デバイス)をプログラムするのに用いられうる命令をストアしている機械又はコンピュータ可読媒体を含むことができるコンピュータプログラム製品又はソフトウェアとして提供されてよい。さらに、本開示の実施形態の複数の段階は、複数の段階を実行するための固定機能ロジックを含む特定のハードウェア構成要素によって、又はプログラムされたコンピュータ構成要素及び固定機能ハードウェア構成要素の任意の組み合わせによって実行されてよい。
本開示の実施形態を実行するようにロジックをプログラムするのに用いられる命令は、DRAM、キャッシュ、フラッシュメモリ、又は他のストレージ等の、システムのメモリ内にストアされてよい。さらに、命令は、ネットワークを介して又は他のコンピュータ可読媒体によって配布することもできる。従って、機械可読媒体は、機械(例えば、コンピュータ)により可読な形態で情報を格納または送信するための任意のメカニズム、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリーメモリ(CD−ROM)、光磁気ディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリーメモリ(EPROM)、電子的消去可能プログラマブルリードオンリーメモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または、電気、光、音響、または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネット上での情報の送信に用いられる有形の機械可読ストレージを含み得るが、これらに限定されない。従って、コンピュータ可読媒体は、機械(例えば、コンピュータ)によって可読な形態で電子的な命令又は情報をストア又は伝送するのに好適な任意のタイプの有形の機械可読媒体を含んでよい。
設計は、作成からシミュレーション、製造に至る様々な段階を経てよい。設計を表わすデータは当該設計を多数の態様で表してよい。まず、シミュレーションにおいて役立ち得るように、ハードウェアは、ハードウェア記述言語又は別の機能記述言語を用いて表されてよい。さらに、ロジックおよび/または複数のトランジスタゲートを備える回路レベルモデルが、設計処理のいくつかの段階で生成されてよい。さらに、或るステージにおける複数の設計は、ハードウェアモデルにおける様々なデバイスの物理的配置を表すデータのレベルに達しうる。いくつかの半導体製造技法が用いられる場合、ハードウェアモデルを表すデータは、集積回路を作製するのに用いられるマスク用の種々のマスク層上の様々な特徴部の存否を指定するデータであってよい。設計のいずれの表現においても、データは、任意の形態の機械可読媒体にストアされてよい。メモリ、又はディスク等の磁気ストレージ若しくは光ストレージは、そのような情報を伝送するために変調又は別の方法で生成された光波又は電波を介して伝送される情報をストアする機械可読媒体であってよい。コード又は設計を示すか又は搬送する電気搬送波が伝送されるとき、この電気信号のコピー、バッファリング、又は再送が実行される範囲において、新たなコピーが作成されうる。従って、通信プロバイダまたはネットワークプロバイダは有形な機械可読媒体上に少なくとも一時的に、搬送波にエンコードされた情報のようなアーティクルを格納してよく、本開示の複数の実施形態に係る複数の技術を具現する。
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理及び実行するのに用いられうる。命令には、即座に完了するものもあれば、完了するのに複数のクロックサイクルを要しうるものもある。命令のスループットが速ければ速いほど、プロセッサの全体的な性能はより良好である。従って、出来るだけ多くの命令を出来るだけ速く実行するのが有利であろう。しかし、浮動小数点命令、ロード/ストアオペレーション、データ移動などのような、より高い複合性を有し、実行時間およびプロセッサリソースの点でより多くを必要とする特定の複数の命令がありうる。
より多くのコンピュータシステムがインターネット、テキスト、およびマルチメディアアプリケーションにおいて用いられるにつれ、追加のプロセッサのサポートが時の経過と共に導入されてきた。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みおよび例外処理、外部入力および出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられ得る。
一実施形態においては、命令セットアーキテクチャ(ISA)は、1または複数の命令セットを実装するのに用いられるプロセッサロジック及び回路を備えうる1または複数のマイクロアーキテクチャによって実装されうる。従って、異なるマイクロアーキテクチャを有するプロセッサが共通命令セットの少なくとも一部分を共有しうる。例えば、Intel(登録商標) Pentium(登録商標) 4プロセッサ、Intel(登録商標) Core(商標)プロセッサ、及び、カリフォルニア州Sunnyvaleに所在するAdvanced Micro Devices, Inc.社からのプロセッサは、略同一のバージョンのx86命令セット(相対的に新しいバージョンに伴って追加された、いくつかの拡張を有するもの)を実装しているが、異なる内部設計を有する。同様に、ARM Holdings Ltd.、MIPSなどの他の複数のプロセッサ開発会社、またはそれらのライセンシー若しくはアダプタにより設計された複数のプロセッサは、共通命令セットの少なくとも一部を共有し得るが、異なるプロセッサ設計を含み得る。例えば、ISAの同じレジスタアーキテクチャが、専用の物理的レジスタ、レジスタリネーミングメカニズムを用いる(例えば、Register Alias Table(RAT)、リオーダバッファ(ROB)、およびリタイアレジスタファイルの使用)1または複数の動的に割り当てられた物理的レジスタを含む、新たな、または周知の技術を用いる異なる複数のマイクロアーキテクチャで異なる複数のやり方で実装され得る。一実施形態において、レジスタは、ソフトウェアプログラマによりアドレッシング可能であってもなくてもよい1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、または他のレジスタセットを含み得る。
命令は、1または複数の命令フォーマットを含んでよい。一実施形態においては、命令フォーマットは、特に、実行されるオペレーションと、そのオペレーションが実行される対象の複数のオペランドとを指定する様々なフィールド(ビット数、ビットのロケーション等)を示してよい。さらなる実施形態において、幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)によってさらに定義されてよい。例えば、特定の命令フォーマットの複数の命令テンプレートは、命令フォーマットの複数のフィールドの異なる複数のサブセットを有するよう定義され得、および/または、異なるように翻訳される特定のフィールドを有するよう定義され得る。一実施形態においては、命令は、命令フォーマットを用いて(および、定義される場合には、その命令フォーマットの複数の命令テンプレートのうちの特定の1つで)表され、オペレーションと、そのオペレーションが行われる対象のオペランドとを指定又は指示してよい。
科学の、財務の、自動ベクトル化された汎用の、RMS(認識、マイニング、および合成)の、並びにビジュアルおよびマルチメディアのアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/解凍、音声認識アルゴリズムおよびオーディオ操作)は、多数のデータ項目に対して同じオペレーションが実行されることを必要とし得る。一実施形態において、単一命令多重データ処理(SIMD)は、プロセッサに、複数のデータ要素に対してオペレーションを実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割しうるプロセッサにおいて用いられうる。分割されたデータ要素のそれぞれは、別々の値を表す。例えば、一実施形態において、64ビットレジスタにおける複数のビットは、別個の16ビット値をそれぞれが表す4つの別個の16ビットのデータ要素を含むソースオペランドとして編成され得る。このタイプのデータは、「パック型」データタイプ又は「ベクトル」データタイプと呼んでもよく、且つ、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれてよい。一実施形態において、パックドデータ項目またはベクトルは、単一のレジスタ内に格納されたパックドデータ要素のシーケンスであり得、パックドデータオペランドまたはベクトルオペランドは、SIMD命令(または、「パックドデータ命令」または「ベクトル命令」)のソースまたはデスティネーションオペランドであり得る。一実施形態において、SIMD命令は、2つのソースベクトルオペランドに対して実行される単一のベクトルオペレーションを指定して、同じまたは異なるサイズで、同じまたは異なる数のデータ要素を有し、かつ、データ要素の順序が同じまたは異なるデスティネーションベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を生成する。
x86、MMX(商標)、Streaming SIMD拡張(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサ、ベクトル浮動小数点(VFP)および/またはNEON命令を含む命令セットを有するARM Cortex(登録商標)プロセッサファミリなどのARMプロセッサ、並びに、Chinese Academy of SciencesのInstitute of Computing Technology(ICT)により開発されるLoongsonプロセッサファミリなどのMIPSプロセッサにより用いられるものなどのSIMD技術は、アプリケーション性能の著しい改善を可能とした(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララ市のIntel Corporationの登録商標または商標である。)
一実施形態においては、デスティネーションレジスタ/データ及びソースレジスタ/データは、対応するデータ又はオペレーションのソース及びデスティネーションを表す一般的な用語でありうる。いくつかの実施形態において、それらは、レジスタ、メモリ、または描写されているもの以外の名前または機能を有する他の複数の記憶領域により実装され得る。例えば、一実施形態において、「DEST1」は、一時的な記憶レジスタまたは他の記憶領域であり得、他方、「SRC1」および「SRC2」は、第1および第2ソース記憶レジスタまたは他の記憶領域であり得る、などである。他の複数の実施形態において、SRCおよびDEST記憶領域の2またはそれより多くは、同じ記憶領域(例えば、SIMDレジスタ)内の異なるデータ記憶素子に対応し得る。一実施形態においては、ソースレジスタのうちの1つは、例えば、第1のソースデータ及び第2のソースデータに対して実行されるオペレーションの結果を、これらの2つのソースレジスタうち、デスティネーションレジスタとしての機能を果たす一方のものにライトバックすることによって、デスティネーションレジスタとしても機能してよい。
図1Aは、命令を実行する複数の実行ユニットを含みうるプロセッサを用いて形成された、本開示における複数の実施形態に係る例示的なコンピュータシステムのブロック図である。システム100は、本明細書で説明する実施形態におけるように、本開示に従ってデータを処理するためのアルゴリズムを実行するロジックを有する実行ユニットを用いて、プロセッサ102等の構成要素を備えてよい。システム100は、カリフォルニア州Santa Claraに所在するインテル社から入手可能なPENTIUM(登録商標) III、PENTIUM(登録商標) 4、Xeon(商標)、Itanium(登録商標)、XScale(商標)、および/またはStrongARM(商標)マイクロプロセッサに基づいた処理システムを表しうるが、その他のシステム(その他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス、及びこれらに類似したものを含む)を使用してもよい。一実施形態においては、サンプルのシステム100は、ワシントン州レドモンドのマイクロソフト社から入手可能なWindows(登録商標)オペレーティングシステムのバージョンを実行してよいが、複数の他のオペレーティングシステム(例えば、UNIX(登録商標)およびLinux(登録商標))、埋め込みソフトウェア、および/または複数のグラフィカルユーザインターフェースも使用されてよい。従って、本開示の実施形態は、ハードウェア回路部及びソフトウェアのどの特定の組み合わせにも限定されるものではない。
複数の実施形態は、コンピュータシステムに限定されない。本開示の実施形態は、ハンドヘルドデバイス及び組み込みアプリケーション等の他のデバイスにおいて用いられてよい。複数のハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、およびハンドヘルドPCを含む。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、又は少なくとも一実施形態による1つ若しくは複数の命令を実行しうる他の任意のシステムを含んでよい。
コンピュータシステム100は、本開示の一実施形態に従って少なくとも1つの命令を実行するアルゴリズムを実行する1または複数の実行ユニット108を含みうるプロセッサ102を含んでよい。一実施形態は、単一プロセッサのデスクトップシステム又はサーバーシステムに関して説明されうるが、他の実施形態はマルチプロセッサシステムに含められてよい。システム100は、「ハブ」システムアーキテクチャの一例であってよい。システム100はデータ信号を処理するためのプロセッサ102を含んでよい。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は例えばデジタル信号プロセッサ等の他の任意のプロセッサデバイスを含んでよい。一実施形態において、プロセッサ102は、プロセッサ102とシステム100内の複数の他の構成要素との間でデータ信号を伝送しうるプロセッサバス110に結合されてよい。システム100の複数の要素は、当該技術に精通している者によく知られている通常の複数の機能を実行してよい。
一実施形態においては、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を有してよい。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有してよい。別の実施形態においては、キャッシュメモリは、プロセッサ102の外部に存在してよい。他の実施形態は、特定の実施態様及びニーズに応じて内部キャッシュ及び外部キャッシュの両方の組み合わせも備えてよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに異なるタイプのデータをストアしてよい。
整数オペレーション及び浮動小数点オペレーションを実行するロジックを有する実行ユニット108も、プロセッサ102に存在する。プロセッサ102は、特定のマクロ命令用のマイクロコード(μコード)をストアするマイクロコードROMも有してよい。一実施形態において、実行ユニット108は、パックド命令セット109を処理するロジックを含んでよい。汎用プロセッサ102の命令セットに、それら命令を実行する関連付けられた回路と共にパックド命令セット109を含めることにより、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションが、パックドデータを用いて汎用プロセッサ102内で実行され得る。従って、パックドデータに対してオペレーションを実行するためにプロセッサのデータバスの全幅を用いることによって、多くのマルチメディアアプリケーションが高速化されうるとともに、より効率的に実行されうる。これによって、プロセッサのデータバスにわたってより小さなデータの単位を転送する必要性をなくし、1つのデータ要素に対して一時に1または複数のオペレーションを実行してよい。
実行ユニット108の複数の実施形態は、マイクロコントローラ、組み込みプロセッサ、グラフィックスデバイス、DSP、及び他のタイプのロジック回路において用いられうる。システム100はメモリ120を備えてよい。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、又は他のメモリデバイスとして実装されてよい。メモリ120は、プロセッサ102が実行しうる、データ信号によって表された命令および/またはデータをストアしてよい。
システムロジックチップ116は、プロセッサバス110及びメモリ120に結合されてよい。システムロジックチップ116は、メモリコントローラハブ(MCH)を含んでよい。プロセッサ102は、プロセッサバス110を介してMCH116と通信してよい。MCH116は、命令及びデータの格納、並びにグラフィックスコマンド、データ及びテクスチャの格納のためのメモリ120への高帯域幅メモリパス118を提供してよい。MCH116は、システム100内のプロセッサ102、メモリ120、及び他の構成要素の間でデータ信号を誘導するとともに、プロセッサバス110、メモリ120、及びシステムI/O122の間でデータ信号をブリッジしてよい。幾つかの実施形態においては、システムロジックチップ116は、グラフィックスコントローラ112に結合するためのグラフィックスポートを提供してよい。MCH116は、メモリインターフェース118を通じてメモリ120に結合されてよい。グラフィックスカード112は、アクセラレーテッドグラフィックスポート(AGP)インターコネクト114を通じてMCH116に結合されてよい。
システム100は、独自のハブインターフェースバス122を用いて、MCH116をI/Oコントローラハブ(ICH)130に結合してよい。一実施形態において、ICH130は、ローカルI/Oバスを介して幾つかのI/Oデバイスに直接接続を提供してよい。このローカルI/Oバスは、周辺装置をメモリ120、チップセット、及びプロセッサ102に接続するための高速I/Oバスを有してよい。複数の例は、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送受信機126、データストレージ124、ユーザー入力インターフェース及びキーボードインターフェースを含むレガシI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、並びにネットワークコントローラ134を含んでよい。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、又は他のマスストレージデバイスを含んでよい。
システムの別の実施形態については、一実施形態による命令は、システムオンチップとともに用いてよい。システムオンチップの一実施形態は、プロセッサとメモリとを有する。1つのそのようなシステム用のメモリはフラッシュメモリを含んでよい。フラッシュメモリは、プロセッサ及び他のシステム構成要素と同じダイ上に配置されてよい。加えて、メモリコントローラ又はグラフィックスコントローラ等の他のロジックブロックも、システムオンチップ上に配置されてよい。
図1Bは、本開示における複数の実施形態の原理を実装するデータ処理システム140を示す図である。本明細書において説明する実施形態が本開示の実施形態の範囲から逸脱することなく代替の処理システムとともに動作し得ることが当業者によって容易に認識されるであろう。
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行する処理コア159を備える。一実施形態において、処理コア159は、任意のタイプのアーキテクチャの処理ユニットを表す。この任意のタイプのアーキテクチャには、CISCタイプ、RISCタイプ、又はVLIWタイプのアーキテクチャが含まれるが、これらに限定されるものではない。処理コア159は、1または複数のプロセス技術における製造に好適であってよく、機械可読媒体上で十分詳細に表現されることによって上記製造を容易にするのに好適であってよい。
処理コア159は、実行ユニット142、一組のレジスタファイル145、及びデコーダー144を有する。処理コア159は、本開示の実施形態の理解には不要でありうる追加の回路部(図示せず)も有してよい。実行ユニット142は、処理コア159によって受信された命令を実行してよい。実行ユニット142は、通常のプロセッサ命令を実行することに加えて、パックドデータフォーマットに対してオペレーションを実行するためのパックド命令セット143内の命令を実行してよい。パックド命令セット143は、本開示の実施形態を実行するための命令と、他のパックド命令とを含んでよい。実行ユニット142は、内部バスによってレジスタファイル145に結合されてよい。レジスタファイル145は、データを含む情報をストアするための処理コア159上の記憶エリアを表してよい。前述したように、パックドデータをストアしうる記憶エリアは重要ではないかも知れないことが理解される。実行ユニット142は、デコーダ144に結合されてよい。デコーダ144は、処理コア159によって受信された命令を制御信号および/またはマイクロコードエントリポイントにデコードしてよい。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット142は適当な複数のオペレーションを実行する。一実施形態においては、デコーダは、命令のオペコードを解釈してよい。このオペコードは、命令内に示された対応するデータに対してどのようなオペレーションを実行すべきかを示す。
処理コア159は、様々な他のシステムデバイスと通信するためのバス141と結合されてよい。これらの様々な他のシステムデバイスは、例えば、同期式ダイナミックランダムアクセスメモリ(SDRAM)コントローラ146、スタティックランダムアクセスメモリ(SRAM)コントローラ147、バーストフラッシュメモリインターフェース148、パーソナルコンピュータメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カードコントローラ149、液晶ディスプレイ(LCD)コントローラ150、ダイレクトメモリアクセス(DMA)コントローラ151、及び代替のバスマスターインターフェース152を含んでよいが、これらに限定されるものではない。一実施形態において、データプロセッシングシステム140は、I/Oバス153を介して様々なI/Oデバイスと通信を行うためのI/Oブリッジ154も備え得る。そのような複数のI/Oデバイスは、例えば、ユニバーサルアシンクロナスレシーバ/トランスミッタ(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、およびI/O拡張インターフェース158を含み得るがこれらに限定されない。
データ処理システム140の一実施形態は、モバイル通信、ネットワーク通信および/または無線通信と、テキスト文字列比較オペレーションを含むSIMDオペレーションを実行しうる処理コア159とを提供する。処理コア159は、ウォルシュ−アダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらのそれぞれの逆変換などの離散変換、色空間変換、ビデオエンコード動き推定またはビデオデコード動き補償などの圧縮/解凍技術、並びに、パルス符号変調(PCM)などの変調/復調(MODEM)機能を含む、様々なオーディオ、ビデオ、イメージング、および通信アルゴリズムを用いてプログラミングされ得る。
図1Cは、SIMD文字列比較オペレーションを実行するデータ処理システムの他の実施形態を示す図である。一実施形態において、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入力/出力システム168を備えてよい。入力/出力システム168は、任意選択で無線インターフェース169に結合してよい。SIMDコプロセッサ161は、一実施形態による命令を含むオペレーションを実行してよい。一実施形態において、処理コア170は、1または複数のプロセス技術における製造に好適であってよく、機械可読媒体上で十分詳細に表現されることによって、処理コア170を備えるデータ処理システム160の全て又は一部の製造を容易にするのに好適であってよい。
一実施形態において、SIMDコプロセッサ161は、実行ユニット162及び一組のレジスタファイル164を有する。メインプロセッサ165の一実施形態は、実行ユニット162による実行のための一実施形態に係る複数の命令を含む命令セット163の複数の命令を認識するデコーダ165を含む。他の実施形態において、SIMDコプロセッサ161は、命令セット163の命令をデコードするデコーダの少なくとも一部165も含む。処理コア170は、本開示の実施形態の理解に不要であってよい追加の回路(図示せず)も有してよい。
オペレーション中、メインプロセッサ166は、キャッシュメモリ167及び入力/出力システム168とのインタラクションを含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。このデータ処理命令のストリーム内には、SIMDコプロセッサ命令が組み込まれてよい。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を、取り付けられたSIMDコプロセッサ161によって実行されるべきタイプであるとして認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(又はSIMDコプロセッサ命令を表す制御信号)をコプロセッサバス166上に発行する。コプロセッサバス166から、これらの命令は、取り付けられた任意のSIMDコプロセッサにより受信されてよい。この場合、SIMDコプロセッサ161は、当該SIMDコプロセッサを意図した、任意の受信されたSIMDコプロセッサ命令を受け取って実行してよい。
データが、複数のSIMDコプロセッサ命令による処理のために、無線インターフェース169を介して受信され得る。一例に関して、デジタル信号の形態で音声通信が受信され得、そのデジタル信号は、複数のSIMDコプロセッサ命令により処理されて、それら音声通信を表す複数のデジタルオーディオサンプルが再生成され得る。他の例に関して、圧縮されたオーディオおよび/またはビデオがデジタルビットストリームの形態で受信され得、そのデジタルビットストリームは複数のSIMDコプロセッサ命令により処理されて、複数のデジタルオーディオサンプルおよび/またはモーションビデオフレームが再生成され得る。処理コア170の一実施形態において、メインプロセッサ166及びSIMDコプロセッサ161は、実行ユニット162と、一組のレジスタファイル164と、一実施形態による命令を含む命令セット163の命令を認識するデコーダ165とを有する単一の処理コア170内に統合されてよい。
図2は、本開示における複数の実施形態に係る、複数の命令を実行する複数のロジック回路を含みうるプロセッサ200のためのマイクロアーキテクチャのブロック図である。幾つかの実施形態においては、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズと、単精度及び倍精度の整数及び浮動小数点のデータタイプ等のデータタイプとを有するデータ要素に対して動作するように実装されてよい。一実施形態において、インオーダフロントエンド201は、実行される複数の命令をフェッチして、それらの命令をプロセッサパイプラインにおいて後で用いられるように準備しうるプロセッサ200の一部を実装してよい。フロントエンド201は、幾つかのユニットを有してよい。一実施形態においては、命令プリフェッチャ226がメモリから命令をフェッチし、これらの命令を命令デコーダ228に供給し、次に、この命令デコーダが、これらの命令をデコード又は解釈する。例えば、一実施形態においては、デコーダは、受信された命令を、機械が実行しうる「マイクロ命令」又は「マイクロオペレーション」(マイクロop又はμopとも呼ばれる)と呼ばれる1または複数のオペレーションにデコードする。他の実施形態においては、デコーダは、命令を、一実施形態によるオペレーションを実行するマイクロアーキテクチャによって用いられうるオペコード及び対応するデータと、制御フィールドとにパースする。一実施形態において、トレースキャッシュ230は、デコードされた複数のμopを、実行のためのμopキュー234内で複数のプログラム順序付きシーケンス又はトレースにアセンブルしてよい。トレースキャッシュ230が複合命令に遭遇すると、マイクロコードROM232は、オペレーションを完了するのに必要とされるμopを提供する。
命令の中には、単一のマイクロopに変換されうるものもあれば、全オペレーションを完了するのに数個のマイクロopを必要とするものもある。一実施形態においては、命令を完了するのに4より多くのマイクロopが必要とされる場合、デコーダ228は、マイクロコードROM232にアクセスして命令を実行してよい。一実施形態において、命令は、命令デコーダ228における処理のために少数のマイクロopにデコードされてよい。別の実施形態においては、複数のマイクロopがオペレーションを達成するのに必要とされる場合、命令はマイクロコードROM232内にストアされてよい。トレースキャッシュ230は、エントリーポイントプログラマブルロジックアレイ(PLA)を参照して、一実施形態による1または複数の命令を完了するマイクロコードシーケンスをマイクロコードROM232から読み出すための正しいマイクロ命令ポインタを決定する。マイクロコードROM232が命令のためのマイクロopのシーケンス化を終了した後、機械のフロントエンド201は、トレースキャッシュ230からのマイクロopのフェッチを再開してよい。
アウトオブオーダ実行エンジン203は、実行のために複数の命令を用意してよい。アウトオブオーダ実行ロジックは、複数の命令がパイプラインを下って実行のためにスケジューリングされるときに、それらのフローを円滑にし、再び順序付けて性能を最適化する複数のバッファを有する。アロケータロジックは、各μopが実行のために必要とする複数のマシンバッファおよびリソースを割り当てる。レジスタリネーミングロジックは、複数のロジックレジスタをレジスタファイルにおける複数のエントリーへとリネームする。またアロケータは複数の命令スケジューラ(メモリスケジューラ、高速スケジューラ202、低速/一般的浮動小数点スケジューラ204、および単純浮動小数点スケジューラ206)の前に、2つのμopキュー(1つはメモリオペレーションに関するものであり、1つは非メモリオペレーションに関するものである)の1つにおけるμop毎にエントリを割り当てる。μopスケジューラ202、204、206は、μopがいつ実行準備を整えたかを、それらの従属する入力レジスタオペランドソースの準備ができていることと、μopがそれらのオペレーションを完了するのに必要とする実行リソースが利用可能であることとに基づいて判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの2分の1毎にスケジューリングしうる一方、他のスケジューラは、メインプロセッサクロックサイクルごとに1回のみスケジューリングしてよい。複数のスケジューラは、実行のために複数のμopのスケジューリングを行う複数のディスパッチポートに対し仲裁を行う。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211内の実行ユニット212、214、216、218、220、222、224との間に配置されてよい。複数のレジスタファイル208、210のそれぞれは、整数および浮動小数点オペレーションをそれぞれ実行する。各レジスタファイル208、210は、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、従属する新たなμopにバイパス又は転送しうるバイパスネットワークを含んでよい。整数レジスタファイル208および浮動小数点レジスタファイル210は、互いとデータを通信してよい。一実施形態において、整数レジスタファイル208は、下位32ビットのデータ用の1つのレジスタファイルと、上位32ビットのデータ用の第2のレジスタファイルとの2つの別々のレジスタファイルに分割されてよい。浮動小数点レジスタファイル210は、128ビット幅エントリを有してよい。なぜならば、浮動小数点命令は、通常、幅が64ビット〜128ビットのオペランドを有するからである。
実行ブロック211は複数の実行ユニット212、214、216、218、220、222、224を含んでよい。複数の実行ユニット212、214、216、218、220、222、224は、複数の命令を実行してよい。実行ブロック211は、実行のためにマイクロ命令が必要とする整数及び浮動小数点データオペランド値を保存するレジスタファイル208、210を含んでよい。一実施形態において、プロセッサ200は、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点ムーブユニット224の複数の実行ユニットを備えてよい。別の実施形態において、浮動小数点実行ブロック222、224は、浮動小数点オペレーション、MMXオペレーション、SIMDオペレーション、SSEオペレーション、又は他のオペレーションを実行してよい。さらに他の実施形態において、浮動小数点ALU222は、除算マイクロop、平方根マイクロop、及び剰余マイクロopを実行する64ビット対64ビットの浮動小数点除算器を含んでよい。様々な実施形態において、浮動小数点値を伴う命令は、浮動小数点ハードウェアを用いて処理されてよい。一実施形態においては、ALUオペレーションは、高速ALU実行ユニット216、218に渡されてよい。高速ALU216、218は、クロックサイクルの2分の1の実効レイテンシを有する高速オペレーションを実行してよい。一実施形態において、ほとんどの複雑な整数オペレーションは、低速ALU220に進む。なぜならば、低速ALU220は、乗算器、シフト、フラグロジック、及び分岐処理等の長いレイテンシタイプのオペレーション用の整数実行ハードウェアを備えうるためである。メモリロード/ストアオペレーションは、AGU212、214によって実行されてよい。一実施形態において、複数の整数ALU216、218、220は、複数の64ビットデータオペランドに対して複数の整数オペレーションを実行してよい。他の実施形態において、複数のALU216、218、220は、16、32、128、256などを含む様々なデータビットサイズをサポートするべく実装されてよい。同様に、複数の浮動小数点ユニット222、224は、様々な幅のビットを有するオペランドの範囲をサポートするべく実装されてよい。一実施形態において、浮動小数点ユニット222、224は、SIMD命令及びマルチメディア命令とともに128ビット幅のパックドデータオペランドに対して動作してよい。
一実施形態においては、μopスケジューラ202、204、206は、親ロードが実行を終了する前に従属オペレーションをディスパッチする。μopは、プロセッサ200において投機的にスケジューリングされて実行されてよいので、プロセッサ200は、メモリミスを処理するロジックも備えてよい。データロードがデータキャッシュ内でミスした場合、一時的に正しくないデータをスケジューラに残した、稼働中の複数の従属オペレーションがパイプライン内に存在しうる。再生メカニズムは、不正確なデータを用いる複数の命令をトラッキングし、再実行する。従属オペレーションのみがリプレイされる必要があり、独立オペレーションは完了することが可能である。プロセッサの一実施形態の複数のスケジューラおよびリプレイメカニズムは、文字列比較オペレーションのための複数の命令シーケンスを捉えるようにも設計されてよい。
「レジスタ」という用語は、オペランドを識別すべく命令の一部として用いられうるオンボードプロセッサ記憶ロケーションを指してよい。換言すれば、レジスタは、プロセッサの外部から(プログラマの視点から)使用可能なものであってよい。しかしながら、いくつかの実施形態において、複数のレジスタは、特定のタイプの回路に限定されなくてよい。逆に、レジスタはデータをストアし、データを提供し、本明細書で説明される複数の機能を実行してよい。本明細書において説明するレジスタは、専用の物理的レジスタ、レジスタリネーミングを用いて動的に割り当てされる物理的レジスタ、専用の物理的レジスタ及び動的に割り当てされる物理的レジスタの組み合わせ等の任意の数の異なる技法を用いてプロセッサ内の回路によって実装されてよい。一実施形態においては、整数レジスタは、32ビット整数データをストアする。一実施形態のレジスタファイルはまた、パックドデータのための8つのマルチメディアSIMDレジスタを含む。以下の説明においては、レジスタは、カリフォルニア州Santa Claraに所在するインテル社のMMX技術に対応したマイクロプロセッサ内の64ビット幅のMMX(商標)レジスタ(いくつかの例においては、「mm」レジスタとも呼ばれる)などのパックドデータを保持するように設計されたデータレジスタであるものとして理解されてよい。整数及び浮動小数点の両方の形で利用可能なこれらのMMXレジスタは、SIMD命令及びSSE命令に付随するパックドデータ要素を用いて動作してよい。同様に、SSE2、SSE3、SSE4、又はこれ以降の技術(「SSEx」と総称される)に関係した128ビット幅XMMレジスタは、そのようなパックドデータオペランドを保持してよい。一実施形態において、パックドデータおよび整数データの格納において、複数のレジスタは、2つのデータタイプの間を区別する必要はない。一実施形態においては、整数及び浮動小数点は、同じレジスタファイル又は異なるレジスタファイルに含まれてよい。さらに、一実施形態において、浮動小数点および整数データは、異なるレジスタ、または同じレジスタに格納され得る。
次の図の例では、複数のデータオペランドが説明されうる。図3Aは、本開示における複数の実施形態に係る、マルチメディアレジスタ内の様々なパックドデータタイプ表現を示す図である。図3Aは、128ビット幅オペランド用のパックドバイト310、パックドワード320、及びパックドダブルワード(dword)330のデータタイプを示している。この例のパックドバイトフォーマット310は、128ビット長であってよく、16個のパックドバイトデータ要素を含む。バイトは、例えばのデータの8ビットとして定義されてよい。各バイトデータ要素の情報は、バイト0用のビット7〜ビット0、バイト1用のビット15〜ビット8、バイト2用のビット23〜ビット16、及び最後にバイト15用のビット120〜ビット127にストアされてよい。従って、利用可能な全てのビットがレジスタ内で用いられてよい。この格納配置は、プロセッサの格納効率を高める。その上、16個のデータ要素がアクセスされる場合、1つのオペレーションは今や16個のデータ要素に対して並列に実行されてよい。
一般に、データ要素は、同じ長さの他のデータ要素とともに単一のレジスタ又はメモリロケーションにストアされる個々のデータ片を含んでよい。SSEx技術に関係したパックドデータシーケンスでは、XMMレジスタにストアされるデータ要素の数は、128ビットを個々のデータ要素のビット長によって除算したものであってよい。同様に、MMX及びSSE技術に関係したパックドデータシーケンスでは、MMXレジスタにストアされるデータ要素の数は、64ビットを個々のデータ要素のビット長によって除算したものであってよい。図3Aに示すデータタイプは、128ビット長であってよいが、本開示の実施形態は、64ビット幅、又は他のサイズのオペランドを用いて動作してもよい。この例のパックドードフォーマット320は、128ビット長であってよく、8つのパックドワードデータ要素を含む。各パックドワードは、16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は、128ビット長であってよく、4つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、32ビットの情報を含む。パックドクワッドワードは、128ビット長であり、2つのパックドクワッドワードデータ要素を含んでよい。
図3Bは、本開示における複数の実施形態に係る、レジスタ内の考えうる複数のデータ格納フォーマットを示す図である。各パックドデータは、1より多い独立データ要素を含んでよい。3つのパックドデータフォーマット(パックドハーフ341、パックドシングル342、およびパックドダブル343)が示されている。パックドハーフ341、パックドシングル342、およびパックドダブル343の一実施形態は、複数の固定小数点データ要素を含む。他の実施形態について、パックドハーフ341、パックドシングル342、及びパックドダブル343のうちの1または複数は、浮動小数点データ要素を含んでよい。パックドハーフ341の一実施形態は、8つの16ビットデータ要素を含む128ビット長であってよい。パックドシングル342の一実施形態は、128ビット長であってよく、4つの32ビットデータ要素を含む。パックドダブル343の一実施形態は、128ビット長であってよく、2つの64ビットデータ要素を含む。そのようなパックドデータフォーマットは、他のレジスタ長、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、又はそれよりも長いビットにさらに拡張されうることが認識されるであろう。
図3Cは、本開示における複数の実施形態に係る、マルチメディアレジスタにおける様々な符号付きおよび符号なしのパックドデータタイプの表現を示す図である。符号なしパックドバイト表現344は、SIMDレジスタにおける符号なしパックドバイトの格納を示す。各バイトデータ要素の情報は、バイト0用のビット7〜ビット0、バイト1用のビット15〜ビット8、バイト2用のビット23〜ビット16、及び最後にバイト15用のビット120〜ビット127にストアされてよい。従って、利用可能な全てのビットがレジスタ内で用いられてよい。この記憶配置は、プロセッサの記憶効率を高めてよい。その上、16個のデータ要素がアクセスされる場合、1つのオペレーションは今や16個のデータ要素に対して並列方式で実行されてよい。符号付きパックドバイト表現345は、符号付きパックドバイトの格納を示す。各バイトのデータ要素の第8ビットが符号指示子でありうることに留意されたい。符号なしパックドワード表現346は、ワード7〜ワード0がSIMDレジスタにどのようにストアされうるのかを示している。符号付きパックドワード表現347は、符号なしパックドワードレジスタ内表現346と類似してよい。各ワードのデータ要素の第16ビットが符号指示子でありうることに留意されたい。符号なしパックドダブルワード表現348は、ダブルワードのデータ要素がどのように格納されるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードレジスタ内表現348と類似してよい。必要な符号ビットは、各ダブルワードデータ要素の第32ビットでありうることに留意されたい。
図3Dは、オペレーションエンコーディング(オペコード)の実施形態を示す図である。さらに、フォーマット360は、ワールドワイドウェブ(www)のintel.com/design/litcentrにおいてカリフォルニア州サンタクララのIntel社から入手可能な「IA−32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」で説明されるオペコードフォーマットのタイプに対応する複数のレジスタ/メモリオペランドアドレッシングモードを含んでよい。一実施形態において、命令は、フィールド361および362の1または複数によりエンコードされ得る。命令毎に、最大2つのソースオペランド識別子364および365を含む最大2つのオペランド位置が識別され得る。一実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同じでありうるのに対して、他の実施形態では、それらは異なってよい。別の実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同じでありうるのに対して、他の実施形態では、それらは異なってよい。一実施形態においては、ソースオペランド識別子364及び365によって識別されるソースオペランドのうちの一方は、文字列比較オペレーションの結果によって上書きされうるのに対して、他の実施形態では、識別子364は、ソースレジスタ要素に対応し、識別子365は、デスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子364及び365は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別してよい。
図3Eは、本開示における複数の実施形態に係る、40またはそれより多くのビットを持つ他の可能なオペレーションエンコーディング(オペコード)フォーマット370を示す図である。オペコードフォーマット370はオペコードフォーマット360に対応し、オプションのプレフィックスバイト378を備える。一実施形態に係る命令は、フィールド378、371および372の1または複数によりエンコードされ得る。命令毎に、ソースオペランド識別子374および375により、およびプレフィックスバイト378により最大2つのオペランド位置が識別され得る。一実施形態において、プレフィックスバイト378は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いられてよい。一実施形態において、デスティネーションオペランド識別子376は、ソースオペランド識別子374と同じでありうるのに対して、他の実施形態では、それらは異なってよい。別の実施形態について、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同じでありうるのに対して、他の実施形態では、それらは異なってよい。一実施形態においては、命令は、オペランド識別子374及び375によって識別されるオペランドのうちの1または複数に対して動作し、オペランド識別子374及び375によって識別される1または複数のオペランドが、命令の結果によって上書きされうるのに対して、他の実施形態では、識別子374及び375によって識別されるオペランドは、別のレジスタ内の別のデータ要素に書き込まれてよい。オペコードフォーマット360および370は、部分的にMODフィールド363および373により、およびオプションのスケール−インデックス−ベースおよび変位バイトにより指定されるレジスタからレジスタへの、メモリからレジスタへの、メモリによるレジスタの、レジスタによるレジスタの、即値によるレジスタの、レジスタからメモリへのアドレッシングを可能とする。
図3Fは、本開示における複数の実施形態に係る、さらに他の可能なオペレーションエンコーディング(オペコード)フォーマットを示す図である。64ビットの単一命令複数データ(SIMD)算術オペレーションは、コプロセッサデータ処理(CDP)命令を通じて実行されてよい。オペレーションエンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382及び389を有する1つのそのようなCDP命令を示している。他の実施形態について、このタイプのCDP命令、オペレーションは、フィールド383、384、387、及び388のうちの1または複数によってエンコードされてよい。命令毎に、最大2つのソースオペランド識別子385および390並びに1つのデスティネーションオペランド識別子386を含む最大3つのオペランド位置が識別され得る。コプロセッサの一実施形態は、8、16、32および64ビット値で動作してよい。一実施形態において、命令は、整数データ要素に対して実行されてよい。いくつかの実施形態において、命令は、条件フィールド381を用い、条件的に実行され得る。いくつかの実施形態に関して、複数のソースデータサイズは、フィールド383によりエンコードされ得る。いくつかの実施形態では、ゼロ(Z)、負(N)、キャリー(C)、及びオーバーフロー(V)の検出は、SIMDフィールド上で行われてよい。いくつかの命令に関して、飽和のタイプはフィールド384によりエンコードされてよい。
図4Aは、本開示における複数の実施形態に係る、インオーダパイプライン、および、レジスタリネームステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。図4Bは、本開示における複数の実施形態に係る、プロセッサに含まれるインオーダアーキテクチャコアおよびレジスタリネーミングロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。図4Aにおける実線の複数のボックスはインオーダパイプラインを示し、他方、破線の複数のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、図4Bにおける実線の複数のボックスはインオーダアーキテクチャロジックを示し、他方、破線の複数のボックスは、レジスタリネーミングロジック、およびアウトオブオーダ発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、レングスデコードステージ404、デコードステージ406、アロケーションステージ408、リネーミングステージ410、スケジューリング(ディスパッチ又は発行としても知られている)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、及びコミットステージ424を含んでよい。
図4Bにおいて、複数の矢印は、2またはそれより多くのユニット間の結合を示し、矢印の方向は、それらユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を備えるプロセッサコア490を示し、これらのフロントエンドユニット及び実行エンジンユニットの両方は、メモリユニット470に結合されてよい。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッド若しくは代替のコアタイプであってよい。一実施形態において、コア490は、例えば、ネットワークコア若しくは通信コア、圧縮エンジン、グラフィックスコア等の専用コアであってよい。
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を有してよい。命令キャッシュユニット434は、命令変換ルックアサイドバッファ(TLB)436に結合されてよい。TLB436は、デコードユニット440に結合された命令フェッチユニット438に結合されてよい。デコードユニット440は、命令をデコードし、出力として1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を生成してよい。これらは、オリジナルの命令からデコードされうるか、又はオリジナルの命令を別の方法で反映しているか、又はオリジナルの命令から導出されうる。デコーダは、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が含まれるが、これらに限定されるものではない。一実施形態において、命令キャッシュユニット434は、メモリユニット470内のレベル2(L2)キャッシュユニット476にさらに結合されてよい。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に結合されてよい。
実行エンジンユニット450は、リタイアメントユニット454に結合されたリネーム/アロケータユニット452と、一組の1または複数のスケジューラユニット456を含んでよい。複数のスケジューラユニット456は、予約ステーションや中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表している。複数のスケジューラユニット456は、複数の物理的レジスタファイルユニット458に結合されてよい。複数の物理的レジスタファイルユニット458のそれぞれは、1または複数の物理的レジスタファイルを表しており、これらのうちの異なるものは、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点などのような1または複数の異なるデータタイプや状態(例えば、実行されるべき次の命令のアドレスである命令ポインタ)などを保存する。複数の物理的レジスタファイルユニット458は、レジスタリネーム及びアウトオブオーダ実行が実装されうる様々な方法(例えば、1または複数のリオーダバッファ及び1または複数のリタイアメントレジスタファイルを使用するもの、1または複数の将来ファイル、1または複数の履歴バッファ、及び1または複数のリタイアメントレジスタファイルを使用するもの、レジスタマップ及びレジスタのプールを使用するものなど)を示すために、リタイアメントユニット154によってオーバーラップされてよい。一般に、アーキテクチャレジスタは、プロセッサの外部又はプログラマの視点から可視であってよい。複数のレジスタは、任意の既知の特定のタイプの回路に限定されるものでなくてよい。様々な異なるタイプのレジスタは、本明細書において説明するようにデータをストア及び提供する限り、好適であってよい。好適なレジスタの例には、専用の物理的レジスタ、レジスタリネーミングを用いて動的に割り当てされる物理的レジスタ、専用の物理的レジスタ及び動的に割り当てされる物理的レジスタの組み合わせ等が含まれるが、これらに限定されるものでなくてよい。リタイアメントユニット454及び複数の物理的レジスタファイルユニット458は、複数の実行クラスタ460に結合されてよい。複数の実行クラスタ460は、一組の1または複数の実行ユニット162及び一組の1または複数のメモリアクセスユニット464を含んでよい。実行ユニット462は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行してよい。一部の実施形態では、特定の複数の関数または複数の関数セット専用の多数の実行ユニットを含んでよい一方で、他の複数の実施形態は1つのみの実行ユニットまたは、ユニットのすべてが全部の関数を実行する複数の実行ユニットを含んでよい。複数のスケジューラユニット456、複数の物理的レジスタファイルユニット458、及び複数の実行クラスタ460は、場合によっては複数のものとして示される。なぜならば、或る実施形態は、或るタイプのデータ/オペレーション用に別々のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはそれぞれがそれ自身のスケジューラユニット、物理的レジスタファイルユニット、および/または実行クラスタを有するメモリアクセスパイプライン、並びに別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが複数のメモリアクセスユニット464を有する或る実施形態が実施されうる)を作製するからである。複数の個別のパイプラインが使用される場合、これらのパイプラインの1または複数がアウトオブオーダ発行/実行で、残りがインオーダであってよいことも理解されたい。
一組のメモリアクセスユニット464は、メモリユニット470に結合されてよい。このメモリユニットは、レベル2(L2)キャッシュユニット476に結合されたデータキャッシュユニット474に結合されたデータTLBユニット472を含んでよい。1つの例示の実施形態では、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれは、メモリユニット470内のデータTLBユニット472に結合されてよい。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合されてよい。
例として、例示のレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン400を実施してよい。1)命令フェッチ438が、フェッチステージ402及びレングスデコードステージ404を実行してよく、2)デコードユニット440がデコードステージ406を実行してよく、3)リネーム/アロケータユニット452がアロケーションステージ408及びリネーミングステージ410を実行してよく、4)複数のスケジューラユニット456がスケジュールステージ412を実行してよく、5)複数の物理的レジスタファイルユニット458及びメモリユニット470がレジスタ読み出し/メモリ読み出しステージ414を実行してよく、実行クラスタ460が実行ステージ416を実行してよく、6)メモリユニット470及び複数の物理的レジスタファイルユニット458がライトバック/メモリ書き込みステージ418を実行してよく、7)様々なユニットが例外処理ステージ422の性能に関与してよく、8)リタイアメントユニット454及び複数の物理的レジスタファイルユニット458がコミットステージ424を実行してよい。
コア490は、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する)、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット、カリフォルニア州サニーベールのARM Holdings社のARM命令セット(NEON等のオプションの追加拡張を有する)をサポートしてよい。
コアが様々な態様でマルチスレッド化(複数のオペレーションまたはスレッドの2またはそれよりも多い並列なセットを実行すること)をサポートしてよいことは理解されるべきである。マルチスレッド化のサポートは、例えば、タイムスライスマルチスレッド化、(単一の物理コアが同時にマルチスレッド化している複数のスレッドのそれぞれに対して当該物理コアが論理コアを提供する)同時マルチスレッド化またはそれらの組み合わせを含めることにより実行されてよい。そのような組み合わせは、Intel(登録商標)ハイパースレッディング技術におけるような、例えばタイムスライスされたフェッチおよびデコード、ならびにその後の同時マルチスレッド化を含んでよい。
レジスタリネーミングは、アウトオブオーダ実行に関して説明されうるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられうることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット434/データキャッシュユニット474及び共有されたL2キャッシュユニット476も含んでよいが、他の実施形態は、例えば、レベル1(L1)内部キャッシュ、又は複数レベルの内部キャッシュ等の、命令及びデータの両方に対する単一の内部キャッシュを有してよい。幾つかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。他の実施形態において、キャッシュのすべてはコアおよび/またはプロセッサの外部であってよい。
図5Aは、本開示における複数の実施形態に係るプロセッサ500のブロック図である。一実施形態において、プロセッサ500はマルチコアプロセッサを含んでよい。プロセッサ500は、1または複数のコア502に通信可能に結合されたシステムエージェント510を含んでよい。さらに、複数のコア502およびシステムエージェント510は、1または複数のキャッシュ506に通信可能に結合されてよい。複数のコア502、システムエージェント510および複数のキャッシュ506は、1または複数のメモリコントロールユニット552を介して通信可能に結合されてよい。さらに、複数のコア502、システムエージェント510および複数のキャッシュ506は、複数のメモリコントロールユニット552を介してグラフィックスモジュール560に通信可能に結合されてよい。
プロセッサ500は、複数のコア502、システムエージェント510および複数のキャッシュ506、ならびにグラフィックスモジュール560をインターコネクトする任意の適切なメカニズムを含んでよい。一実施形態において、プロセッサ500は、複数のコア502、システムエージェント510および複数のキャッシュ506、ならびにグラフィックスモジュール560をインターコネクトするリングベースのインターコネクトユニット508を含んでよい。他の実施形態において、プロセッサ500は、そのような複数のユニットをインターコネクトする任意の数の周知の技術を含んでよい。リングベースのインターコネクトユニット508は、複数のメモリコントロールユニット552を利用して複数のインターコネクトを容易化してよい。
プロセッサ500は、複数のコア内の1または複数のレベルのキャッシュ、複数のキャッシュ506などの1または複数の共有キャッシュユニット、または、複数の統合メモリコントローラユニット552のセットに結合された外部メモリ(図示せず)を有するメモリ階層を含んでよい。複数のキャッシュ506は任意の適切なキャッシュを含んでよい。一実施形態において、複数のキャッシュ506は、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュ等の1または複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含んでよい。
様々な実施形態において、複数のコア502の1または複数は、マルチスレッド化を実行してよい。システムエージェント510は、複数のコア502を調整および動作させる複数のコンポーネントを含んでよい。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)を含んでよい。PCUは、複数のコア502の電力状態の調整に必要なロジックおよび複数のコンポーネントであってもよいし、これらを有してもよい。システムエージェント510は、1または複数の外部接続されたディスプレイまたはグラフィックスモジュール560を駆動するディスプレイエンジン512を含んでよい。システムエージェント510は、グラフィックス用の複数の通信バスのためのインターフェース514を含んでよい。一実施形態において、インターフェース514は、PCI Express(PCIe)により実装されてよい。さらなる実施形態において、インターフェース514は、PCI Expressグラフィックス(PEG)により実装されてよい。システムエージェント510は、ダイレクトメディアインターフェース(DMI)516を含んでよい。DMI516は、マザーボード上の種々のブリッジ、またはコンピュータシステムの他の部分の間のリンクを提供してよい。システムエージェント510は、コンピューティングシステムの他の要素へのPCIeリンクを提供するPCIeブリッジ518を含んでよい。PCIeブリッジ518は、メモリコントローラ520およびコヒーレンシロジック522を用いて実装されてよい。
複数のコア502は、任意の適切な態様で実装されてよい。コア502は、アーキテクチャおよび/または命令セットの点で同種でも異種でもよい。一実施形態において、複数のコア502のいくつかはインオーダであってよいのに対し、他の複数のはアウトオブオーダであってよい。別の実施形態において、複数のコア502のうちの2またはそれよりも多くは、同じ命令セットを実行してよいのに対し、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行してよい。
プロセッサ500は、カリフォルニア州Santa Claraに所在するインテル社から入手可能でありうるCore(商標) i3、i5、i7、2Duo、及びQuad、Xeon(商標)、Itanium(商標)、XScale(商標)、又はStrongARM(商標)プロセッサなどの汎用プロセッサを含んでよい。プロセッサ500は、ARM Holding社、MIP等、別の会社から提供されてよい。プロセッサ500は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ等の専用プロセッサであってよい。プロセッサ500は、1または複数のチップ上に実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、又はNMOS等の複数のプロセス技術のうちの任意のものを用いた1または複数の基板のうちの一部であってよく、および/またはそれらの1または複数の基板上に実装されてよい。
一実施形態において、複数のキャッシュ506のうち特定の1つは、複数のコア502のうちのいくつか複数により共有されてよい。別の実施形態において、複数のキャッシュ506のうち特定の1つは、複数のコア502のうち1つに専用であってよい。複数のキャッシュ506の複数のコア502への割り当ては、キャッシュコントローラまたは他の適したメカニズムにより処理されてよい。複数のキャッシュ506のうち特定の1つは、特定のキャッシュ506のタイムスライスを実施することで、2またはそれよりも多いコア502により共有されてよい。
グラフィックスモジュール560は、統合グラフィックス処理サブシステムを実装してよい。一実施形態において、グラフィックスモジュール560は、グラフィックスプロセッサを含んでよい。さらに、グラフィックスモジュール560は、媒体エンジン565を含んでよい。媒体エンジン565は、媒体エンコーディングおよびビデオデコーディングを提供してよい。
図5Bは、本開示における複数の実施形態に係る、コア502の実装例のブロック図である。コア502は、アウトオブオーダエンジン580に通信可能に結合されたフロントエンド570を備えてよい。コア502は、キャッシュ階層503を介してプロセッサ500の複数の他の部分に通信可能に結合されてよい。
フロントエンド570は、上述のように、フロントエンド201により完全にまたは部分的になど、任意の適切な態様で実装されてよい。一実施形態において、フロントエンド570は、キャッシュ階層503を介してプロセッサ500の複数の他の部分と通信してよい。さらなる実施形態において、フロントエンド570は、プロセッサ500の複数の部分から複数の命令をフェッチし、それらの命令がアウトオブオーダ実行エンジン580に渡されるにつれてプロセッサパイプライン内で後に用いられるようにそれらの命令を用意してよい。
アウトオブオーダ実行エンジン580は、上述したように、アウトオブオーダ実行エンジン203により完全にまたは部分的になど、任意の適切な態様で実装されてよい。アウトオブオーダ実行エンジン580は、フロントエンド570から受信した複数の命令を実行のために用意してよい。アウトオブオーダ実行エンジン580は、割り当てモジュール582を含んでよい。一実施形態において、割り当てモジュール582は、プロセッサ500の複数のリソースまたは複数の他のリソース、例えば複数のレジスタまたは複数のバッファを、特定の命令を実行するべく割り当ててよい。割り当てモジュール582は、メモリスケジューラ、高速スケジューラまたは浮動小数点スケジューラなどの複数のスケジューラ内で割り当てを行ってよい。そのような複数のスケジューラが図5Bにおいて複数のリソーススケジューラ584により表されてよい。割り当てモジュール582は、図2と合わせて説明された割り当てロジックにより完全にまたは部分的に実装されてよい。複数のリソーススケジューラ584は、特定のリソースの複数のソースの準備状態と、命令の実行に必要とされる複数の実行リソースの利用可能性とに基づいて、命令が実行準備を整えたときを判断してよい。複数のリソーススケジューラ584は、上述されたように、例えばスケジューラ202、204、206により実装されてよい。複数のリソーススケジューラ584は、1または複数のリソースに対して、複数の命令の実行をスケジューリングしてよい。一実施形態において、そのような複数のリソースはコア502の内部であってよく、また、例えば複数のリソース586として図示されてよい。別の実施形態において、そのような複数のリソースはコア502の外部であってよく、また、例えばキャッシュ階層503によりアクセス可能であってよい。複数のリソースは、例えば、メモリ、複数のキャッシュ、複数のレジスタファイル、または複数のレジスタを含んでよい。コア502の内部の複数のリソースは、図5Bにおいて複数のリソース586により表されてよい。必要に応じて、複数のリソース586に書き込まれた、または、複数のリソース586から読み取られた複数の値は、例えばキャッシュ階層503を介してプロセッサ500の複数の他の部分と調整されてよい。複数の命令に複数のリソースが割り当てられるに従い、それらはリオーダバッファ588に配置されてよい。リオーダバッファ588は、複数の命令を、それらが実行されるにつれて追跡してよく、また、プロセッサ500の任意の適切な基準に基づいて、それらの実行を選択的にリオーダしてよい。一実施形態において、リオーダバッファ588は、別々に実行されてよい複数の命令または一連の命令を識別してよい。そのような複数の命令または一連の命令は、他のそのような複数の命令と並列に実行されてよい。コア502における並列実行は、任意の適切な数の別個の実行ブロックまたは仮想プロセッサにより実行されてよい。一実施形態において、複数の共有リソース(例えばメモリ、複数のレジスタおよび複数のキャッシュ)は、特定のコア502内の複数の仮想プロセッサに対してアクセス可能であってよい。他の実施形態において、複数の共有リソースは、プロセッサ500内の複数の処理エンティティに対してアクセス可能であってよい。
キャッシュ階層503は、任意の適切な態様で実装されてよい。例えば、キャッシュ階層503は、キャッシュ572、574などの、1または複数の下位の、または中間のレベルの複数のキャッシュを含んでよい。一実施形態において、キャッシュ階層503は、キャッシュ572、574に通信可能に結合されたLLC595を含んでよい。別の実施形態において、LLC595は、プロセッサ500のすべての処理エンティティにアクセス可能なモジュール590内に実装されてよい。さらなる実施形態において、モジュール590は、インテル(登録商標)株式会社からの複数のプロセッサのアンコアモジュール内に実装されてよい。モジュール590は、コア502の実行に必要だがコア502内には実装されなくてよいプロセッサ500の複数のサブシステムまたは複数の部分を含んでよい。LLC595に加え、モジュール590は、例えば、複数のハードウェアインターフェース、複数のメモリコヒーレンシコーディネータ、複数のインタープロセッサインターコネクト、複数の命令パイプライン、または複数のメモリコントローラを含んでよい。プロセッサ500に利用可能なRAM599へのアクセスは、モジュール590を介して、より具体的には、LLC595を介して行われてよい。さらに、コア502の複数の他のインスタンスは、モジュール590に同様にアクセスしてよい。コア502の複数のインスタンスの調整は、モジュール590を介して部分的に容易化されてよい。
図6−8は、プロセッサ500を含むのに好適な例示的システムを図示してよく、一方、図9は、1または複数のコア502を含んでよい例示的なシステムオンチップ(SoC)を図示してよい。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスの技術分野において知られている他のシステム設計及び実装も好適であってよい。一般的に、本明細書において開示するようなプロセッサおよび/または他の実行ロジックを組み込む膨大な様々のシステム又は電子デバイスが一般に好適であってよい。
図6は、本開示における複数の実施形態に係るシステム600のブロック図を示す。システム600は、グラフィックスメモリコントローラハブ(GMCH)620に結合されうる1または複数のプロセッサ610、615を備えてよい。追加のプロセッサ615がオプションであることは、図6において、破線によって示されている。
各プロセッサ610、615は、プロセッサ500のいくつかのバージョンであってよい。しかしながら、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ610、615に存在しないかも知れないことに留意すべきである。図6は、GMCH620が、例えば、ダイナミックランダムアクセスメモリ(DRAM)でありうるメモリ640に結合されてよいことを示している。少なくとも一実施形態に関して、DRAMは不揮発性キャッシュに関連付けられ得る。
GMCH620は、チップセット、又はチップセットの一部であってよい。GMCH620は、複数のプロセッサ610、615と通信してよく、複数のプロセッサ610、615とメモリ640との間のインタラクションを制御してよい。GMCH620は、複数のプロセッサ610、615とシステム600の他の要素との間の高速バスインターフェースとしても機能してよい。一実施形態において、GMCH620は、フロントサイドバス(FSB)695等のマルチドロップバスを介して複数のプロセッサ610、615と通信する。
さらに、GMCH620は、ディスプレイ645(フラットパネルディスプレイ等)に結合されてよい。一実施形態において、GMCH620は、統合グラフィックスアクセラレータを有してよい。GMCH620は、様々な周辺デバイスをシステム600に結合するのに用いられうる入力/出力(I/O)コントローラハブ(ICH)650にさらに結合されてよい。外部のグラフィックスデバイス660は、別の周辺デバイス670とともにICH650に結合される別個のグラフィックスデバイスを含んでよい。
他の実施形態において、追加の又は異なるプロセッサも、システム600に存在してよい。例えば、複数の追加のプロセッサ610、615は、プロセッサ610と同一でありうる複数の追加のプロセッサ、プロセッサ610に対して異種または非対称でありうる複数の追加のプロセッサ、複数のアクセラレータ(例えばグラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、複数のフィールドプログラマブルゲートアレイ、または、任意の他のプロセッサを含んでよい。物理リソース610、615間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む、或るメトリクスの範囲の利点という観点から、様々な相違が存在してよい。これらの相違は、プロセッサ610、615間でそれらが非対称性及び異種性であると効果的に表しうる。少なくとも一実施形態について、様々なプロセッサ610、615は、同じダイパッケージに存在してよい。
図7は、本開示における複数の実施形態に係る第2のシステム700のブロック図を示す。図7に示すように、マルチプロセッサシステム700は、ポイントツーポイントインターコネクトシステムを含んでよく、ポイントツーポイントインターコネクト750を介して結合された第1のプロセッサ770及び第2のプロセッサ780を含んでよい。プロセッサ770及び780のそれぞれは、プロセッサ610、615のうちの1または複数として、プロセッサ500の或るバージョンであってよい。
図7は2つのプロセッサ770、780を図示しうるが、本開示の範囲はそのように限定されないことを理解されたい。他の複数の実施形態において、1または複数の追加のプロセッサが特定のプロセッサに存在し得る。
プロセッサ770、780は、集積メモリコントローラユニット772、782をそれぞれ含むものとして示されている。プロセッサ770は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インターフェース776及び778も含んでよい。同様に、第2のプロセッサ780は、P−Pインターフェース786及び788を含んでよい。プロセッサ770、780は、P−Pインターフェース回路778、788を用いてポイントツーポイント(P−P)インターフェース750を介して情報を交換してよい。図7に示すように、IMC772及び782は、プロセッサをそれぞれのメモリ、すなわち、メモリ732及びメモリ734に結合してよい。これらのメモリは、一実施形態において、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ770、780はそれぞれ、ポイントツーポイントインターフェース回路776、794、786、798を用い、個々のP−Pインターフェース752、754を介し、チップセット790と情報を交換してよい。一実施形態において、チップセット790は、高性能グラフィックスインターフェース739を介して高性能グラフィックス回路738と情報を交換してもよい。
プロセッサが低電力モードに配置された場合に、いずれかの又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に保存されうるように、共有キャッシュ(図示されてはいない)がいずれかのプロセッサ内に、又は両方のプロセッサの外部に、但し、P−Pインターコネクトを介してプロセッサと接続された状態において、含まれてもよい。
チップセット790は、インターフェース796を介して第1のバス716に結合され得る。一実施形態においては、第1のバス716は、周辺機器インターコネクト(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/Oインターコネクトバス等のバスであってよいが、本開示の範囲はそのように限定されるものではない。
図7に示されるように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に結合するバスブリッジ718と共に、第1のバス716に結合され得る。一実施形態において、第2のバス720はローピンカウント(LPC)バスであり得る。一実施形態において、例えば、キーボードおよび/またはマウス722、複数の通信デバイス727、および、命令/コードおよびデータ730を含み得るディスクドライブまたは他のマスストレージデバイスなどのストレージユニット728を含む様々なデバイスが第2のバス720に結合され得る。さらに、オーディオI/O724が、第2のバス720に結合され得る。他のアーキテクチャが可能でありうることに留意されたい。例えば、図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
図8は、本開示における複数の実施形態に係る第3のシステム800のブロック図を示す。図7及び図8における複数の同様の要素は、同様の参照番号を有し、図7の複数の特定の態様は、図8の他の態様を不明瞭にすることを回避するために、図8から省かれている。
図8は、プロセッサ870、880が統合型のメモリおよびI/O制御ロジック(「Control Logic:CL」)872及び882をそれぞれ有してもよいことを示している。少なくとも一実施形態について、CL872、882は、図5A、図5B及び図7に関して上述したような統合メモリコントローラユニットを含んでよい。加えて、CL872、882はまた、I/O制御ロジックを含んでよい。図8は、CL872、882に結合されうるのはメモリ832、834だけでなく、I/Oデバイス814も制御ロジック872、882に結合されうることを示している。レガシI/Oデバイス815は、チップセット890に結合されてよい。
図9は、本開示における複数の実施形態に係るSoC900のブロック図を示す。図5Aおよび図5Bと同様の複数の要素には、同様の複数の参照番号が付されている。また、破線のボックスは、さらに高度化したSoC上のオプションの機能部を表してよい。複数のインターコネクトユニット902は、一組の1または複数のコア902A〜902N及び複数の共有キャッシュユニット906を備えるアプリケーションプロセッサ910と、システムエージェントユニット910と、複数のバスコントローラユニット916と、複数の統合メモリコントローラユニット914と、一組のまたは1若しくは複数のメディアプロセッサ920と、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1または複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合されてよい。メディアプロセッサ920は、統合グラフィックスロジック908と、スチルカメラ機能および/またはビデオカメラ機能を提供するための画像プロセッサ924と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926と、ビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928とを含んでよい。
図10は、本開示における複数の実施形態に係る、最小命令を実行しうる中央処理ユニット(CPU)およびグラフィックス処理ユニット(GPU)を含むプロセッサを示す図である。一実施形態において、少なくとも一実施形態に係る複数のオペレーションを実行するための命令は、CPUにより実行されてよい。他の実施形態において、命令はGPUにより実行されてよい。さらに他の実施形態において、命令は、GPUとCPUとにより実行される複数のオペレーションの組み合わせを通じて実行されてよい。例えば、一実施形態において、一実施形態に係る命令はGPU上での実行のために受信され、デコードされてよい。しかし、デコードされた命令内の1または複数のオペレーションはCPUにより実行されてよく、結果は、命令の最終的なリタイアのためにGPUに戻されてよい。逆に、いくつかの実施形態において、CPUはプライメアリプロセッサとして動作してよく、GPUはコプロセッサとして動作してよい。
いくつかの実施形態において、高度に並列であるスループットプロセッサから恩恵を受ける複数の命令は、GPUにより実行され得、他方、深くパイプライン化されたアーキテクチャから恩恵を受ける複数のプロセッサの性能から恩恵を受ける複数の命令は、CPUにより実行され得る。例えば、グラフィックス、科学アプリケーション、財務アプリケーション、および他の並列ワークロードは、GPUの性能から恩恵を受け得、それに従って実行され得、他方、オペレーティングシステムカーネルまたはアプリケーションコードなどのよりシーケンシャルなアプリケーションは、CPUに良好に適しているかもしれない。
図10においては、プロセッサ1000は、CPU1005と、GPU1010と、画像プロセッサ1015と、ビデオプロセッサ1020と、USBコントローラ1025と、UARTコントローラ1030と、SPI/SDIOコントローラ1035と、ディスプレイ装置1040と、メモリインターフェースコントローラ1045と、MIPIコントローラ1050と、フラッシュメモリコントローラ1055と、DDR(Dual Data Rate)コントローラ1060と、セキュリティエンジン1065と、I2S/I2Cコントローラ1070と、を含む。より多くのCPUまたはGPU、および他の複数の周辺インターフェースコントローラを含む他のロジックおよび複数の回路が、図10のプロセッサに含まれ得る。
少なくとも一実施形態の1または複数の態様は、機械に読み取られた場合に、当該機械に本明細書において説明される技術を実行するためのロジックを組み立てさせる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数のデータにより実装され得る。「IPコア」として知られているそのような表現は、有形の機械可読媒体(「テープ」)上にストアされてよく、様々な顧客又は製造設備に供給されて、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。例えば、ARM Holdings社によって開発されたCortex(商標)ファミリのプロセッサ及び中国科学アカデミーのコンピューティング技術協会(ICT)によって開発されたLoongson IPコア等のIPコアは、Texas Instruments社、Qualcomm社、Apple社、又はSamsung社等の様々な顧客又はライセンシーに対して、ライセンス供与又は販売することができ、これらの顧客又はライセンシーが作製するプロセッサに実装することができる。
図11は、本開示における複数の実施形態に係る複数のIPコアの開発を説明するブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120および/またはハードウェア又はソフトウェアモデル1110を含んでよい。一実施形態においては、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続(例えば、インターネット)1150、又は無線接続1160を介してストレージ1130に提供されてよい。シミュレーションツール及びモデルによって生成されたIPコア情報は、その後、製造設備に送信されてよく、この製造設備において、サードパーティが、少なくとも一実施形態による少なくとも1つの命令を実行するようにIPコアを製造してよい。
いくつかの実施形態において、1または複数の命令は、第1のタイプのアーキテクチャ(例えば、x86)に対応し、異なるタイプまたはアーキテクチャ(例えば、ARM)のプロセッサ上で変換またはエミュレートされてよい。従って一実施形態によると、命令は、ARM、x86、MIPS、GPU、または他のプロセッサタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサタイプ上で実行され得る。
図12は、本開示における複数の実施形態に従い、異なるタイプのプロセッサにより第1のタイプの命令がどのようにエミュレーションされうるかを示す。図12において、プログラム1205は、一実施形態に係る命令と同じまたは実質的に同じ機能を実行し得るいくつかの命令を含む。しかしながら、プログラム1205の命令は、プロセッサ1215と異なるか又は互換性のないタイプおよび/またはフォーマットのものであってよく、このことは、プログラム1205内のタイプの命令がプロセッサ1215によってネイティブで実行することができない場合があることを意味する。しかしながら、エミュレーションロジック1210の援助によって、プログラム1205の命令は、プロセッサ1215によりネイティブに実行されうる命令に変換されてよい。一実施形態においては、エミュレーションロジックは、ハードウェアに具現化されてよい。別の実施形態では、エミュレーションロジックは、プログラム1205内のタイプの命令をプロセッサ1215がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に具現化されてよい。他の実施形態では、エミュレーションロジックは、固定機能又はプログラマブルハードウェアと、有形の機械可読媒体上にストアされたプログラムとの組み合わせであってよい。一実施形態においては、プロセッサがエミュレーションロジックを含むのに対して、他の実施形態では、エミュレーションロジックは、プロセッサの外部に存在し、サードパーティによって提供されてよい。一実施形態においては、プロセッサは、当該プロセッサ内に含まれるか又は当該プロセッサに関連付けられたマイクロコード又はファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体に具現化されたエミュレーションロジックをロードしてよい。
図13は、本開示における複数の実施形態に従い、ソース命令セットにおける複数のバイナリ命令を、ターゲット命令セットにおける複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比したブロック図を示す。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であってよいが、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組み合わせで実装されてよい。図13は、高水準言語1302のプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ1316によりネイティブに実行され得るx86バイナリコード1306を生成するx86コンパイラ1304を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1316は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intel x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行しうる任意のプロセッサを表す。x86コンパイラ1304は、追加のリンケージ処理を伴って又は伴うことなしに、少なくとも1つのx86命令セットコアを有するプロセッサ1316上において実行可能なx86バイナリコード1306(例えば、オブジェクトコード)を生成するように動作されうるコンパイラを表している。同様に、図13は、代替命令セットコンパイラ1308を使用することにより、高級言語1302のプログラムがコンパイルされ、少なくとも1つのx86命令セットコアを有していないプロセッサ1314(例えば、カリフォルニア州Sunnyvaleに所在するMIPS Technoliges社のMIPS命令セットを実行する且つ/又はカリフォルニア州Sunnyvaleに所在するARMホールディングス社のARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行されうる代替命令セットバイナリコード1310を生成してもよいことを示している。命令コンバータ1312は、x86バイナリコード1306を、x86命令セットコアを有していないプロセッサ1314によってネイティブで実行されうるコードに変換するために使用されてよい。この変換されたコードは代替命令セットバイナリコード1310と同一でなくてよいが、変換されたコードは、全般的なオペレーションを実現することになり、且つ、代替命令セットからの命令から構成されることになる。従って、命令コンバータ1312は、エミュレーション、シミュレーション、又は任意のその他のプロセスを通じて、x86命令セットプロセッサ又はコアを有していないプロセッサ又はその他の電子装置がx86バイナリコード1306を実行できるようにするソフトウェア、ファームウェア、ハードウェア、又はこれらの組合せを表している。
図14は、本開示における複数の実施形態に係る、プロセッサの命令セットアーキテクチャ1400のブロック図である。命令セットアーキテクチャ1400は、任意の適切な数または種類のコンポーネントを含んでよい。
例えば、命令セットアーキテクチャ1400は、1または複数のコア1406、1407およびグラフィックス処理ユニット1415などの処理エンティティを含んでよい。コア1406、1407は、バスまたはキャッシュを介するなど、任意の適切なメカニズムを介して命令セットアーキテクチャ1400の残りのものに通信可能に結合されてよい。一実施形態において、コア1406、1407は、バスインターフェースユニット1409およびL2キャッシュ1410を含んでよいL2キャッシュコントローラ1408を介して通信可能に結合されてよい。コア1406、1407およびグラフィックス処理ユニット1415は、インターコネクト1410を介して互いに、および、命令セットアーキテクチャ1400の残りのものに対し、通信可能に結合されてよい。一実施形態において、グラフィックス処理ユニット1415は、特定のビデオ信号が出力のためにエンコードおよびデコードされる態様を規定するビデオコード部1420を用いてよい。
命令セットアーキテクチャ1400はまた、任意の数または種類のインターフェース、コントローラ、または、電子デバイス若しくはシステムの他の部分とインターフェース若しくは通信する他のメカニズムを備えてよい。そのような複数のメカニズムは、例えば複数の周辺機器、複数の通信デバイス、複数の他のプロセッサまたはメモリとのインタラクションを容易にしてよい。図14の例において、命令セットアーキテクチャ1400は、液晶ディスプレイ(LCD)ビデオインターフェース1425、加入者インターフェースモジュール(SIM)インターフェース1430、ブートROMインターフェース1435、同期式ダイナミックランダムアクセスメモリ(SDRAM)コントローラ1440、フラッシュコントローラ1445、および、シリアル周辺機器インターフェース(SPI)マスターユニット1450を備えてよい。LCDビデオインターフェース1425は、例えばGPU1415からの、また例えばモバイルインダストリプロセッサインターフェース(MIPI)1490または高精細マルチメディアインターフェースHDMI(登録商標)1495を介した、ディスプレイへのビデオ信号の出力を提供してよい。そのようなディスプレイは、例えばLCDを含んでよい。SIMインターフェース1430は、SIMカードまたはデバイスへの/からのアクセスを提供してよい。SDRAMコントローラ1440は、SDRAMチップまたはモジュールなどのメモリへの/からのアクセスを提供してよい。フラッシュコントローラ1445は、フラッシュメモリまたはRAMの他のインスタンスなどのメモリへの/からのアクセスを提供してよい。SPIマスターユニット1450は、Bluetooth(登録商標)モジュール1470、高速3Gモデム1475、グローバルポジショニングシステムモジュール1480、または、802.11などの通信規格を実装した無線モジュール1485のような通信モジュールへの/からのアクセスを提供してよい。
図15は、本開示における複数の実施形態に係る、プロセッサの命令セットアーキテクチャ1500のより詳細なブロック図である。命令アーキテクチャ1500は、命令セットアーキテクチャ1400の1または複数の態様を実装してよい。さらに、命令セットアーキテクチャ1500は、プロセッサ内で複数の命令を実行する複数のモジュールおよび複数のメカニズムを説明しうる。
命令アーキテクチャ1500は、1または複数の実行エンティティ1565に通信可能に結合されたメモリシステム1540を備えてよい。さらに、命令アーキテクチャ1500は、複数の実行エンティティ1565およびメモリシステム1540に通信可能に結合されたユニット1510などのキャッシュ・バスインターフェースユニットを備えてよい。一実施形態において、複数の実行エンティティ1565への複数の命令のロードは、1または複数の実行ステージで実行されてよい。そのような複数のステージは、例えば、命令プリフェッチステージ1530、デュアル命令デコードステージ1550、レジスタリネームステージ1555、発行ステージ1560およびライトバックステージ1570を含んでよい。
一実施形態において、メモリシステム1540は実行済み命令ポインタ1580を含んでよい。実行済み命令ポインタ1580は、複数の命令のバッチ内で最も古い、ディスパッチされていない命令を特定する値をストアしてよい。この命令は、アウトオブオーダ発行ステージ1560における複数の命令のバッチ内にストアされてよい。複数の命令のバッチは、複数のストランドにより表されるスレッド内であってよい。最も古い命令は、最も低いPO(プログラム順序)値に対応してよい。POは、命令の一意の数を含んでよい。POは、複数の命令を順序付けしてコードの正確な実行セマンティクスを保証するのに用いられてよい。POは、絶対値ではなく、命令内のエンコードされたPOに対するインクリメントを評価するなどの複数のメカニズムにより再構成されてよい。そのような再構成されたPOは、RPOとして知られうる。本明細書ではPOが言及されうるが、そのようなPOは、RPOと互換可能に用いられてよい。ストランドは、互いにデータ依存性である複数の命令のシーケンスを含んでよい。ストランドは、コンパイルのときにバイナリ変換器により配列されてよい。ストランドを実行するハードウェアは、様々な命令のPOに従って順序通りに特定のストランドの複数の命令を実行してよい。スレッドは、異なるストランドの複数の命令が互いに依存しうるように、複数のストランドを含んでよい。特定のストランドのPOは、発行ステージから実行に向けてまだディスパッチされていないストランド内の最も古い命令のPOであってよい。従って、各ストランドがPOにより順序付けされる複数の命令を含む複数のストランドのスレッドが付与されると、実行済み命令ポインタ1580は、アウトオブオーダ発行ステージ1560におけるスレッドの複数のストランドのなかで、最も古い(最も低い値で示される)POをストアしてよい。
別の実施形態において、メモリシステム1540はリタイアメントポインタ1582を含んでよい。リタイアメントポインタ1582は、最新のリタイア済み命令のPOを特定する値をストアしてよい。リタイアメントポインタ1582は、例えばリタイアメントユニット454によりセットされてよい。まだ命令がリタイアされていない場合には、リタイアメントポインタ1582は、ヌル値を含んでよい。
複数の実行エンティティ1565は、プロセッサが命令を実行しうる任意の適切な数および種類のメカニズムを含んでよい。図15の例において、複数の実行エンティティ1565は、複数のALU/乗算ユニット(MUL)1566、複数のALU1567、複数の浮動小数点ユニット(FPU)1568を含んでよい。一実施形態において、そのような複数のエンティティは、与えられるアドレス1569に含まれる情報を利用してよい。複数の実行エンティティ1565は、ステージ1530、1550、1555、1560、1570と組み合わせられて、集合的に実行ユニットを形成してよい。
ユニット1510は、任意の適切な態様で実装されてよい。一実施形態において、ユニット1510はキャッシュ制御を実行してよい。このような実施形態において、ユニット1510は従って、キャッシュ1525を含んでよい。さらなる実施形態において、キャッシュ1525は、ゼロ、128k、256k、512k、1Mまたは2Mバイトのメモリなど、任意の適切なサイズのL2ユニファイドキャッシュとして実装されてよい。他のさらなる実施形態において、キャッシュ1525は、エラー訂正コードメモリ内で実装されてよい。別の実施形態において、ユニット1510は、プロセッサまたは電子デバイスの複数の他の部分に対してバスインターフェーシングを実行してよい。このような実施形態において、ユニット1510は従って、インターコネクト、イントラプロセッサバス、インタープロセッサバス、または他の通信バス、ポート若しくはラインを介した通信用のバスインターフェースユニット1520を有してよい。バスインターフェースユニット1520は、例えば複数の実行エンティティ1565と、命令アーキテクチャ1500の外部システムの一部との間のデータ転送のための記憶および入力/出力のアドレスの生成を実行するべく、インターフェースを提供してよい。
その複数の機能をさらに容易化すべく、バスインターフェースユニット1520は、プロセッサまたは電子デバイスの他の部分に対して複数の割り込みおよび複数の他の通信を生成する割り込み制御および分散ユニット1511を含んでよい。一実施形態において、バスインターフェースユニット1520は、複数の処理コアについてのキャッシュアクセスおよびコヒーレンシを処理するスヌープコントロールユニット1512を含んでよい。さらなる実施形態において、そのような機能を提供すべく、スヌープコントロールユニット1512は、異なるキャッシュの間での情報交換を処理するキャッシュ対キャッシュ転送ユニットを含んでよい。他のさらなる実施形態において、スヌープコントロールユニット1512は、他のキャッシュ(図示せず)のコヒーレンシを監視する1または複数のスヌープフィルタ1514を含んでよく、その結果、ユニット1510などのキャッシュコントローラは、そのような監視を直接的に実行しなくてもよい。ユニット1510は、命令アーキテクチャ1500の複数の動作を同期するための任意の適切な数のタイマ1515を含んでよい。また、ユニット1510は、ACポート1516を含んでよい。
メモリシステム1540は、命令アーキテクチャ1500の処理ニーズについての情報をストアする任意の適切な数および種類のメカニズムを含んでよい。一実施形態において、メモリシステム1504は、メモリまたは複数のレジスタへ書き込まれ、またはそれらから読み取られる複数のバッファなど、情報をストアするロードストアユニット1530を含んでよい。別の実施形態において、メモリシステム1504は、物理アドレスと仮想アドレスとの間の複数のアドレス値のルックアップを提供する変換ルックアサイドバッファ(TLB)1545を含んでよい。さらに他の実施形態において、バスインターフェースユニット1520は、仮想メモリへのアクセスを容易化するメモリ管理ユニット(MMU)1544を含んでよい。またさらに他の実施形態において、メモリシステム1504はレイテンシを減らすべく、複数の命令を、そのような複数の命令が実際に実行されることを必要とする前に、メモリから要求するプリフェッチャ1543を含んでよい。
命令を実行する命令アーキテクチャ1500のオペレーションは、異なるステージを通じて実行されてよい。例えば、ユニット1510を用い、命令プリフェッチステージ1530はプリフェッチャ1543を介して命令にアクセスしてよい。取得される複数の命令は、命令キャッシュ1532にストアされてよい。プリフェッチステージ1530は、高速ループモードのためのオプション1531をイネーブルしてよく、特定のキャッシュ内に入れるのに十分に小さいループを形成する一連の命令が実行される。一実施形態において、そのような実行は、例えば命令キャッシュ1532からの複数の追加の命令にアクセスする必要なしに実行されてよい。どの命令をプリフェッチするかの決定は、例えば分岐予測ユニット1535によりなされてよい。分岐予測ユニット1535は、グローバルヒストリ1536における実行の複数の指示、ターゲットアドレス1537の複数のインディケーション、または、リターンスタック1538の複数のコンテンツにアクセスして、コードの複数の分岐1557のいずれが次に実行されるかを決定してよい。そのような複数の分岐は、場合によっては結果としてプリフェッチされてよい。複数の分岐1557は、以下で説明されるように、オペレーションの他の複数のステージを通じて生成されてよい。命令プリフェッチステージ1530は、デュアル命令デコードステージに対し、複数の命令と、将来の命令についての全ての予測とを提供してよい。
デュアル命令デコードステージ1550は、受信した命令を、実行されうる複数のマイクロコードベースの命令に変換してよい。デュアル命令デコードステージ1550は、クロックサイクルごとに2つの命令を同時にデコードしてよい。さらに、デュアル命令デコードステージ1550は、その複数の結果をレジスタリネームステージ1555に渡してよい。加えて、デュアル命令デコードステージ1550は、そのデコードと、最終的なマイクロコードの実行とから結果として起こる全ての分岐を決定してよい。そのような複数の結果は、複数の分岐1557に入力されてよい。
レジスタリネームステージ1555は、複数の仮想レジスタまたは他リソースへの複数の参照を、複数の物理的レジスタまたはリソースへの複数の参照に変換してよい。レジスタリネームステージ1555は、そのようなマッピングのインディケーションをレジスタプール1556内に含んでよい。レジスタリネームステージ1555は、複数の命令を受信したときに変換して発行ステージ1560に結果を送信してよい。
発行ステージ1560は、複数の実行エンティティ1565に対して複数のコマンドを発行またはディスパッチしてよい。そのような発行は、アウトオブオーダ方式で実行されてよい。一実施形態において、複数の命令は、実行される前に発行ステージ1560で保持されてよい。発行ステージ1560は、そのような複数のコマンドを保持するための命令キュー1561を含んでよい。特定の命令の実行に対するリソースの利用可能性または適合性などの任意の許容可能な基準に基づいて、複数の命令が発行ステージ1560により特定の処理エンティティ1565に発行されてよい。一実施形態において、発行ステージ1560は命令キュー1561内の複数の命令をリオーダしてよく、その結果、受信される第1の命令は実行される第1の命令でなくてもよい。命令キュー1561の順序付けに基づいて、追加の分岐情報が複数の分岐1557に提供されてよい。発行ステージ1560は、複数の命令を実行のために複数の実行エンティティ1565に渡してよい。
実行されると、ライトバックステージ1570は、付与されたコマンドの完了を通信すべく、命令セットアーキテクチャ1500の複数のレジスタ、複数のキュー、または他の構造にデータを書き込んでよい。ライトバックステージ1570のオペレーションは、発行ステージ1560において配列された複数の命令の順序に応じて、追加の複数の命令が実行されることを可能にしてよい。命令セットアーキテクチャ1500の性能は、トレースユニット1575により監視され、またはデバッグされてよい。
図16は、本開示における複数の実施形態に係る、プロセッサの命令セットアーキテクチャのための実行パイプライン1600のブロック図である。実行パイプライン1600は、例えば図15の命令アーキテクチャ1500のオペレーションを説明してよい。
実行パイプライン1600は、複数の段階または複数のオペレーションの任意の適切な組み合わせを含んでよい。1605において、次に実行されるべき分岐の複数の予測がなされてよい。一実施形態において、そのような複数の予測は、先の複数の命令の実行、および、それらの結果に基づいてよい。1610において、実行の予測分岐に対応する複数の命令は、命令キャッシュにロードされてよい。1615において、命令キャッシュにおける1または複数のそのような命令は、実行を目指してフェッチされてよい。1620において、フェッチされた複数の命令は、マイクロコードまたは、より具体的な機械言語にデコードされてよい。一実施形態において、複数の命令は同時にデコードされてよい。1625において、デコードされた複数の命令内での、複数のレジスタまたは他の複数のリソースへの複数の参照は再割り当てされてよい。例えば、複数の仮想レジスタへの複数の参照は、対応する複数の物理的レジスタへの複数の参照と置換されてよい。1630において、複数の命令は、実行を目指して複数のキューにディスパッチされてよい。1640において、複数の命令が実行されてよい。そのような実行は、任意の適切な態様で実行されてよい。1650において、複数の命令が好適な実行エンティティに発行されてよい。命令が実行される態様は、命令を実行する具体的なエンティティに依存してよい。例えば、1655においてALUは複数の算術機能を実行してよい。ALUは、そのオペレーション用に単一のクロックサイクルおよび2つのシフタを利用してよい。一実施形態において、2つのALUが採用されてよく、従って2つの命令が1655で実行されてよい。1660において、結果として生じる分岐の決定が行われてよい。プログラムカウンタは、分岐が作成されるデスティネーションを指定するのに用いられてよい。1660は単一のクロックサイクルで実行されてよい。1665において、浮動小数点算術が1または複数のFPUにより実行されてよい。浮動小数点オペレーションは、実行するのに複数クロックサイクル、例えば2から10サイクルを必要としてよい。1670において、乗算および除算オペレーションが実行されてよい。そのような複数のオペレーションは4クロックサイクル内で実行されてよい。1675において、パイプライン1600の複数のレジスタまたは他の部分へのロードおよびストアオペレーションが実行されてよい。オペレーションは複数のアドレスをロードおよびストアすることを含んでよい。そのようなオペレーションは4クロックサイクル内で実行されてよい。1680において、1655〜1675の結果として生じるオペレーションにより要求されるように、複数のライトバックオペレーションが実行されてよい。
図17は、本開示における複数の実施形態に係る、プロセッサ1710を利用する電子デバイス1700のブロック図である。電子デバイス1700は、例えばノートブック、ウルトラブック、コンピュータ、タワーサーバ、ラックサーバ、ブレードサーバ、ラップトップ、デスクトップ、タブレット、モバイルデバイス、電話、埋め込み型コンピュータ、または任意の他の適した電子デバイスを含んでよい。
電子デバイス1700は、任意の適切な数または種類のコンポーネント、周辺機器、モジュールまたはデバイスに通信可能に結合されたプロセッサ1710を含んでよい。そのような結合は、I2Cバス、システム管理バス(SMバス)、ローピンカウント(LPC)バス、SPI、ハイディフィニションオーディオ(HDA)バス、シリアルアドバンステクノロジアタッチメント(SATA)バス、USBバス(バージョン1、2、3)、またはユニバーサル非同期受信機/送信機(UART)バスなどの、任意の適切な種類のバスまたはインターフェースにより実現されてよい。
そのようなコンポーネントは、例えば、ディスプレイ1724、タッチスクリーン1725、タッチパッド1730、ニアフィールド通信(NFC)ユニット1745、センサハブ1740、熱センサ1746、エクスプレスチップセット(EC)1735、信頼されたプラットフォームモジュール(TPM)1738、BIOS/ファームウェア/フラッシュメモリ1722、デジタル信号プロセッサ1760、ソリッドステートディスク(SSD)またはハードディスクドライブ(HDD)などのドライブ1720、ワイヤレスローカルエリアネットワーク(WLAN)ユニット1750、Bluetooth(登録商標)ユニット1752、ワイヤレスワイドエリアネットワーク(WWAN)ユニット1756、グローバルポジショニングシステム(GPS)、USB3.0カメラなどのカメラ1754、または、例えばLPDDR3規格で実装された低電力ダブルデータレート(LPDDR)メモリユニット1715を含んでよい。これらのコンポーネントは、それぞれ任意の適切な態様で実装されてよい。
さらに、様々な実施形態において、複数の他のコンポーネントが、上述された複数のコンポーネントを介してプロセッサ1710に通信可能に結合されてよい。例えば、加速度計1741、周辺光センサ(ALS)1742、コンパス1743およびジャイロスコープ1744がセンサハブ1740に通信可能に結合されてよい。熱センサ1739、ファン1737、キーボード1746およびタッチパッド1730がEC1735に通信可能に結合されてよい。スピーカ1763、ヘッドフォン1764およびマイク1765が音声ユニット1762に通信可能に結合されてよく、これは次にDSP1760に通信可能に結合されてよい。音声ユニット1762は例えば音声コーデックおよびクラスD増幅器を含んでよい。SIMカード1757がWWANユニット1756に通信可能に結合されてよい。WLANユニット1750およびBluetooth(登録商標)ユニット1752、ならびに、WWANユニット1756などの複数のコンポーネントが次世代フォームファクタ(NGFF)に実装されてよい。
本開示の複数の実施形態は、キャッシュベースの投機的なベクトル化のための命令およびロジックを含む。図18は、クラスタ化された複数の実行ユニットを有する機械内にメモリアクセス用の命令およびロジックを実装するためのシステム1800の機能ブロック図である。そのような機械はクラスタ化されたワイド実行機械を含んでよい。一実施形態において、システム1800は、同期された複数のデータキャッシュユニットを利用することで、その複数の実行ユニットにメモリアクセスを提供してよい。さらなる実施形態において、そのような同期は複数のデータキャッシュユニット内の複数のデータキャッシュを同期することで実行されてよい。他のさらなる実施形態において、そのような同期は、複数のデータキャッシュユニット内の複数の同期スヌープバッファにより実行されてよい。また別のさらなる実施形態において、そのような同期は、複数のデータキャッシュユニット内の複数の同期ライトバックバッファにより実行されてよい。またさらに別のさらなる実施形態において、そのような同期は、複数のデータキャッシュユニット内の複数のフィルバッファの間で複数のフィルバッファ要求を通信することで実行されてよい。そのような複数の要求は、他の複数のフィルバッファに通じるそのような1つのフィルバッファにより受信される複数のロードオペレーションを含んでよい。
システム1800は、命令ストリーム1804などの複数の命令を実行してよい。システム1800は、アウトオブオーダで複数の命令をフェッチ、ディスパッチ、実行およびリタイアしてよい。アウトオブオーダ実行を実行することにより、システム1800は命令レベルでの並列処理を実行してよい。さらに、システム1800は、すでにストア、決定または実行されたデータに対し、特定の実行ユニットがより速くアクセスしうるようにキャッシュを提供してよい。そのようなキャッシュは、複数のレベルのキャッシュにより確立されてよい。
システム1800は、キャッシュベースの投機的なベクトル化を実行するための任意の適切な態様で実装されてよい。一実施形態において、システム1800は、クラスタ化された、ワイド実行機械(CWEM)を備えてよい。CWEMは、例えば、複数の実行ユニットを有した処理エンティティを有してよい。さらなる実施形態において、複数の実行ユニットは、単一スレッドのコードを実行してよい。アウトオブオーダ実行を提供するべく、システム1800は、論理および物理リソースのマッピングおよびリネームのための複数のレジスタファイルを備えてよい。CWEMの複数の実行ユニットは、処理ユニットのチップまたは物理ダイパッケージにわたって分散されてよい。さらに、複数の実行ユニットは、クラスタにグループ化されてよい。そのような態様で複数の実行ユニットを拡散することで、レジスタファイルのアクセスおよびデータ転送に起因するレイテンシを低減しつつ、レジスタファイルのアクセスおよび実行帯域幅が改善されうる。従って、システム1800は、アウトオブオーダ方式で実行するべくデータを待ちうる複数の他の命令のブロッキングに起因するメモリアクセスのボトルネックを低減し、命令レベルの並列処理を実行するためのシステム1800の能力を改善してよい。
一実施形態において、システム1800は、命令ストリーム1804の一部を受信および実行するプロセッサ1802を含んでよい。プロセッサ1802の具体的な態様が図18に図示されてはいるが、プロセッサ1802は、任意の適切な種類または数のプロセッサもしくは処理エンティティ、またはそれらのサポートにおける他の要素を含んでよい。プロセッサ1802は、1または複数のCWEMにより完全にまたは部分的に実装されてよく、または、1または複数のCWEMを含んでよい。
一実施形態において、プロセッサ1802はコア(メモリ実行ユニット(MEU)1816を含んでよい)およびアンコア1820を含んでよい。MEU1816は、複数の命令を実行する複数の要素を含んでよい。アンコア1820は、複数の命令の実行をサポートする複数の要素を含んでよい。別の実施形態において、プロセッサ1802は、複数のクラスタ1806にグループ化された任意の適切な数および種類の実行ユニット1808を含んでよい。複数のクラスタ1806は、コア、MEU1816または、プロセッサ1802における任意の他の適した部分内に実装されてよい。一実施形態において、複数の実行ユニット108は、システム1800の複数のコンテンツのロードまたはストアオペレーションを実行するための任意の適切なハードウェア構造を含んでよい。そのような複数のオペレーションは、例えばレジスタまたはメモリ位置への/からのものであってよい。別の実施形態において、複数のクラスタ1806は、例えば複数の実行クラスタ460により実装されてよい。
MEU1816は、任意の適切な数および種類の要素を含んでよい。一実施形態において、MEU1816は、複数のデータキャッシュユニット(DCU)1804を含んでよい。各DCU1804は、1または2つのクラスタ1806など、適切な数のクラスタ1806に通信可能に結合されてよい。さらに、各DCU1804は、少なくとも1つの他のDCU1804に通信可能に結合されてよい。さらなる実施形態において、複数のDCU1804は通信可能に結合されて、そのように結合された複数のDCU1804の同期を容易化してよい。複数のDCU1804は、L1キャッシュを含んでよい。MEU1816は、L2キャッシュ1810を含んでよい。単一のL2キャッシュ1810が図示されているが、MEU1816は、任意の適切な数または種類のキャッシュを含んでよい。各DCU1804は、L2キャッシュ1810に通信可能に結合されてよい。MEU1816またはその複数の要素は、その複数の要素と、システム1800の複数の他の要素との間の変換のための複数のインターフェースを含んでよい。例えば、複数のインターフェースは、複数のDCU1804および複数のクラスタ1806の間、または、複数のDCU1804およびL2キャッシュ1810の間の通信を目的として提供されてよい。
複数のDCU1804は、例えばL1内部キャッシュメモリ104により完全にまたは部分的に実装されたキャッシュなど、任意の適切な態様で実装されたL1キャッシュを含んでよい。L2キャッシュ1810は、例えばL2キャッシュユニット476、キャッシュ階層503、複数のキャッシュ506、L2キャッシュ1410、またはキャッシュ1525により、完全にまたは部分的に実装されてよい。
アンコア1820は、任意の適切な態様で実装されてよい。例えば、アンコア1820はL3キャッシュ1812およびメモリコントローラ1814を含んでよい。L2キャッシュ1810は、L3キャッシュ1812に通信可能に結合されてよい。L3キャッシュ1812は、複数のキャッシュ506、キャッシュ階層503またはLLC595により完全にまたは部分的に実装されるなど、任意の適切な態様により実装されてよい。メモリコントローラ1814は、MCH116、複数のメモリコントローラユニット552、CL872、CL882、または複数の統合メモリコントローラユニット914により完全にまたは部分的に実装されるなど、メモリへの、および、メモリからの転送オペレーションを制御する任意の適切な態様で実装されてよい。
複数のDCU1804の複数のL1キャッシュ、L2キャッシュ1810およびL3キャッシュの配列は、キャッシュ階層内に配置されてよい。さらに、L1、L2およびL3キャッシュが具体的に説明されるが、任意の適切な数または種類のキャッシュ階層が用いられてよい。例えば、特定の数のL1キャッシュが個々のL2キャッシュに割り当てられてよく、他の特定の数のL2キャッシュが個々のL3キャッシュに割り当てられてよい。複数の実行ユニット1808が1つのメモリ位置についてストアまたはロードを実行しなければならないときには、まず複数のDCU1804の複数のL1キャッシュ内へのチェックが行われて、その位置のキャッシュされたバージョンが利用可能であるかを調べてよい。そうである場合、オペレーションはローカルキャッシュ内で実行されてよい。結果が否定的な場合、試みられたオペレーションはミスを生成してよく、より高いレベルのキャッシュからさらにアクセスが試みられてよい。試みられたオペレーションは繰り返されてよく、そのようなキャッシュ内で複数の値が利用可能である場合には、当該値が戻されてよい。そうでなければ、別のミスが生成されてよい。これらの段階は、全てのキャッシュが問題のメモリ位置を含まないと判断されるまで継続してよく、この場合、システム1800における実際のメモリ位置がアクセスされてよい。
図19Aおよび図19Bは、本開示における複数の実施形態に係る複数のDCU1804の機能ブロック図である。DCU1804AおよびDCU1804Bが図示されてはいるが、同様に実装されたより多くのDCUがシステム1800内で用いられてよい。一実施形態において、各DCU1804は、クラスタインターフェース1924を介してそれぞれの1または2つのクラスタ1806に通信可能に結合されてよい。さらに、各DCU1804は、L2インターフェース1922を介してL2キャッシュ1810に通信可能に結合されてよい。加えて、各DCU1804は、複数のアドレスバス1940を介して互いに通信可能に結合されてよい。
複数のDCU1804は、本明細書で説明される機能を実行するための任意の適切な態様で実装されてよい。複数のDCU1804は、データキャッシュユニット434、474により部分的に実装されてよい。一実施形態において、各DCU1804は、データキャッシュ(DC)1926、1または複数のフィルバッファ(FB)1930、ライトバックバッファ(WBB)1928およびスヌープバッファ(SB)1932を含んでよい。さらに、各DCU1804は、DCU1804の内外の通信を容易化するマルチプレクサ1936、1934を含んでよい。
DC1926は、本明細書で説明される機能を実行するための任意の適切な態様で実装されてよい。一実施形態において、DC1926は、L1データキャッシュ構造を含んでよい。DC1926は、任意の適切なサイズで実装されてよい。例えば、DC1926は、32キロバイトの情報を含んでよい。
WBB1928は、本明細書で説明される機能を実行するための任意の適切な態様で実装されてよい。一実施形態において、WBB1928は、ハードウェアストレージ領域として実装されてよい。別の実施形態において、WBB1928は、例えばDC1926から排除(evicted)された複数の修正キャッシュラインをキャプチャしてよい。WBB1928は、そのような複数の排除された修正キャッシュラインを、L2キャッシュ1810がそれらを必要とするか、またはL2キャッシュ1810がそれらを受信できるまで、保持してよい。そのような状況は、例えば、すでにDC1926に書き込まれたデータがまだキャッシュ階層に通信されていないが、たった今DC1926から排除されたときに起こりうる。
FB1930は、本明細書で説明される機能を実行するための任意の適切な態様で実装されてよい。一実施形態において、FB1930はハードウェアバッファとして実装されてよい。FB1930は、DC1926へのアクセスの試みにおいてミスを生成するすべてのロード及びストアの要求を受信して含んでよい。FB1930は、L2キャッシュ1810およびさらなる複数のレベルのキャッシュ、例えばL3キャッシュ1812に送信される複数の要求を、より高いレベルの複数のキャッシュから、要求されたキャッシュラインが戻され、DC1926内に配置されるまで含んでよい。
SB1932は、本明細書で説明される機能を実行するための任意の適切な態様で実装されてよい。一実施形態において、SB1928はハードウェアバッファとして実装されてよい。SB1928は、DC1926内で見出される、修正された状態の複数のキャッシュラインをストアしてよい。そのような見出しは、例えば複数のスヌープシグナル1942により行われてよい。複数のスヌープシグナル1942は、スヌープのためのアドレスバスを介して供給されてよい。複数のスヌープシグナル1942は、DC1926、WBB1928およびFB1930内のチェックを実行するべく、L2キャッシュ1810から複数のDCU1804のそれぞれに渡されてよい。チェックは、他の箇所で要求されるキャッシュラインを見出すためのものであってよい。スヌープシグナル1942の元の原因は、他の複数のEU1808でのロードまたはストア、複数レベルのキャッシュ排除に起因するバックワードの照会、ダイレクトメモリアクセスオペレーション、または、キャッシュ不能なメモリ要求によるキャッシュヒットに起因する自己スヌープを含んでよい。いずれかのそのようなオペレーションにより探されたキャッシュラインがDC1926で見出された場合、それはライトバックのためにSB1928にストアされてよい。
特定のDCU1804の各要素は、任意の適切なラインまたはバスを介して他の要素に通信可能に結合されてよい。例示の複数のバスが図19A、図19Bに図示されて、DCU1804の様々な要素の間で渡される異なる種類のデータを説明してよい。さらに、バスのタイプは、各要素の間で渡されるべき情報に基づいて選択されてよい。
例えば、ロード及びストアアドレスが、ロードおよびストアのためのアドレスバスを介して、複数のEU1808から複数のDCU1804のそれぞれに渡されてよい。複数のロード及びストアアドレスは、ロードおよびストアオペレーションが実行されるアドレスを表してよい。一実施形態において、DCU1804A、1804Bのそれぞれに同一のアドレスが送信されてよい。ロード及びストアアドレス情報がDC1926、FB1930およびWBB1928に分散されてよい。さらに、ストアに関連するデータは、データをロード及びストアするためのデータバスを介して複数のEU1808からDCU1804に送信されてよい。一実施形態において、DCU1804A、1804Bのそれぞれに同じデータが送信されてよい。ストアに関連するデータは、DC1926およびFB1930に分散されてよい。
DC1926およびFB1930は、複数のEU1808のロード要求に応答してデータをプッシュしてよい。データはキャッシュラインの全体を含んでよい。データはキャッシュライン転送のためのデータバスを介して送信されてよい。DC1926またはFB1930のいずれが実際にデータを供給するかの選択は、要求された、必要な、または、正確なバージョンのデータを、当該要素のいずれが有するかに従って決定されてよい。DC1926またはFB1930のいずれかの出力選択は、マルチプレクサ1936により行われてよい。
DC1926は、他の複数のキャッシュにライトバックされるキャッシュラインデータをSB1932およびWBB1928に送信してよい。データはキャッシュライン転送のためのデータバスを介して送信されてよい。さらに、FB1930、SB1932およびWBB1928は、そのようなライトバックデータをL2キャッシュ1810に潜在的に送信してよい。そのようなデータは、キャッシュライン転送のためのデータバスを介して送信されてよい。いずれのライトバックデータが送信されるかの選択は、要求された、必要な、または、正確なバージョンのデータを、当該要素のいずれが有するかに従って決定されてよい。L2インターフェース1922へのライトバックデータの出力選択は、マルチプレクサ1934により行われてよい。
複数のフィルデータメッセージは、L2インターフェース1922を介してキャッシュ階層から複数のDCU1804のそれぞれに送信されてよい。一実施形態において、複数のDCU1804のそれぞれに同じデータが同時に送信されてよい。別の実施形態において、フィルデータメッセージは1つのDCU1804から他のものにルーティングされてよい。そのようなDCU1804間のルーティングではレイテンシまたはディレイが発生しうる。複数のフィルデータメッセージは、DC1926における既存の複数のキャッシュラインを最終的に置換する複数のデータキャッシュラインを含んでよい。そのようなデータは、キャッシュライン転送のためのデータバスを介して送信されてよい。複数のフィルデータメッセージは、FB1930に送信されてよい。次に、FB1930は、適切なとき、同期されたとき、または、場合によっては修正されたときに、キャッシュライン転送のためのデータバスを介して複数のフィルデータメッセージをDC1926に送信してよい。
WBB1928は、L2インターフェース1922を介してキャッシュ階層に複数のライトバック要求を送信してよい。複数のライトバック要求は、DC1926への要求がミスを引き起こしたときに作成されてよい。その次の複数のフィルデータメッセージは、特定のキャッシュ内でミスしたロードまたはストア命令に応答して作成されてよい。完了されるべきそのような複数のフィルデータメッセージのために、キャッシュ内にはフリーエントリがなければならない。ライトバック要求は、そのような複数のフリーエントリを作成するために行われる。データは、キャッシュミス処理のためのアドレスバスを介して送信されてよい。
FB1930は、DC1926に複数の置換要求を送信してよい。そのような複数の要求は、DC1926をトリガして、その複数のコンテンツをライトバックデータを介して提供させるか、またはデータを排除させるべく作成されてよい。データは、キャッシュミス処理のためのアドレスバスを介して送信されてよい。さらに、FB1930は、L2インターフェース1922を介して読み取り要求またはオーナーシップの読み取り要求をキャッシュ階層に送信してよい。当該要求は、利用不可能なキャッシュラインの読み取りに応答して、または、キャッシュラインへの書き込みの試みのために作成されてよい。一実施形態において、オーナーシップの要求は、複数の他のDCU1804におけるデータキャッシュの複数のインスタンスを無効化してよい。データは、キャッシュミス処理のためのアドレスバスを介して送信されてよい。
DCU1804の複数の要素は、すべてのDCU1804に共通のハードウェアクロックに従って動作してよい。ハードウェアクロックのタイミングは、各DCU1804にルーティングされてよい。ハードウェアクロックは、各DCU1804のオペレーションを互いに関して同期するのに用いられてよい。一実施形態において、すべてのDCU1804のDC1926の複数のコンテンツは、各クロックサイクルにおいて同一であってよい。別の実施形態において、すべてのDCU1804のWBB1928の複数のコンテンツは、各クロックサイクルにおいて同一であってよい。さらに他の実施形態において、すべてのDCU1804の複数のSB1932の複数のコンテンツは、各クロックサイクルにおいて同一であってよい。さらにまた他の実施形態において、様々なDCU1804のFB1930の複数のコンテンツは、特定のクロックサイクルにおいて異なってよい。そのような差異は、複数のDCU1804の間の転送のレイテンシに起因してよい。
WBB1928、DC1926またはSB1932の複数のコンテンツの同期は、任意の適切な態様で実行されてよい。一実施形態において、WBB1928、DC1926またはSB1932の複数のコンテンツの同期は、複数のDCU1804の各要素内の異なる状況に応答する同一ロジックの実装により実行されてよい。特定の状況または入力は、すべてのDCU1804において同一に同期的に処理されてよい。さらなる実施形態において、すべてのDCU1804におけるそのような同一の処理は、各DC1926それぞれにおける複数のデータキャッシュラインの排除の同時処理を含んでよい。複数のDCU1804における複数のキャッシュラインの排除は各DC1926がフルであるときに発生してよく、DCU1804は新しいキャッシュラインを加えることを必要としてよい。排除は、複数のEU1808によるアクセスのための新しく、より有用なキャッシュライン用に場所を空けてよい。他のさらなる実施形態において、各DCU1804は、どのキャッシュラインが排除されるべきかを決定すべく、同一の排除アルゴリズムを実行してよい。各DCU1804が各DC1926それぞれにおいて同一コンテンツをすでに維持している場合には、結果は各DCU1804において同一であってよい。また別のさらなる実施形態において、各DC1926への複数のフィルデータメッセージは、各DCU1804において同時にかつ同様に処理されてよい。複数のフィルデータメッセージ自体もまた同一であってよい。複数のフィルデータメッセージは、それぞれのDCU1804における類似の作成を通じて、または、各DCU1804でのL2インターフェース1922からの同一のフィルデータメッセージの受信により、同一であってよい。
別の実施形態において、WBB1928、DC1926またはSB1932の複数のコンテンツの同期は、DCU1804への同時、同一の入力により実行されてよい。そのような入力は、クラスタインターフェース1924を介して通信可能に結合されたL2インターフェース1922または複数のEU1808を介してDCU1804に通信可能に結合されたキャッシュ階層など、任意の適切なソースを介して行われてよい。さらなる実施形態において、複数の同一のストア命令がそれぞれのEU1808から各DCU1804にブロードキャストされてよい。様々な実施形態において各クラスタ1808は複数のEU1808の同一の配置を含みうるので、複数のストア命令は同一であってよい。ストアは、命令またはリソースがリタイアされるときのストアオペレーションを表すシニアストアを含んでよい。さらに、複数のストア命令を受け取ると、各DCU1804は、複数のストア命令を同様に処理してよい。さらに他の実施形態において、同一の複数のフィルデータメッセージがキャッシュ階層からすべてのDCU1804に提供されてよい。それぞれのDCU1804で受信される、そのような各フィルデータメッセージは、同様に処理されてよい。さらにまた他の実施形態において、同一の複数のスヌープシグナル1942が、L2インターフェース1922を介してキャッシュ階層から各DCU1804それぞれに送信されてよい。上述されたように、各スヌープシグナルは、各WBB1928、FB1930およびDC1926のそれぞれにルーティングされてよい。
さらに他の実施形態において、WBB1928、DC1926またはSB1932の複数のコンテンツの同期は、それぞれのDCU1804の複数のFB1930を通信可能に結合する1または複数のFB同期ライン1940により実行されてよい。FB同期ライン1940は、キャッシュミス処理のためのアドレスバスにより実装されてよい。FB同期ライン1940を介した複数のメッセージの送信中に、ディレイが発生してよい。
リタイアに関連する複数のストアオペレーションは各DCU1804それぞれに同時にブロードキャストされてよく、各ストアは各DCU1804それぞれにおいて同様に同時に処理されてよい。複数のEU1808の各セットまたはクラスタ1806からそれぞれのDCU1804への同時のディスパッチを実装するのに任意の適切なメカニズムが用いられてよい。一実施形態において、グローバルストアディスパッチキュー(SDQ)が用いられてよい。そのようなSDQは、複数のストアを受信すべく、複数のEU1808またはクラスタ1806に通信可能に結合されてよく、また、そのような複数のストアをディスパッチすべく、クラスタインターフェース1924を介して各DCU1804に通信可能に結合されてよい。SDQからディスパッチされる複数のストアは、等しいレイテンシで各DCUに供給されてよく、その結果、DCU状態は同時に更新されてよい。SDQは、適切な数のストアが発行されたという判断の後に、そのような複数のストアのディスパッチを行ってよい。ディスパッチは従って、複数のDCU1804に複数のストアを送信することを含んでよい。別の実施形態において、複数の個々のSDQが用いられてよい。SDQは、例えば各クラスタで維持されてよい。複数のクラスタ1806のそれぞれは、他のそのような複数のSDQにブロードキャストしてよい。ブロードキャストは、SDQによるブロードキャスト実行の準備ができているストア数の同一化を含んでよい。複数の個々のSDQは、合計ストア数がディスパッチに好適であるときを調整および決定してよい。そのような決定が行われると、各SDQは、その複数のストアをすべてのDCU1804に送信してよい。
上述したように、一実施形態において、すべてのEU1808およびクラスタ1806からの複数のストアは、各DC1926にルーティングされてよい。DC1926における既存の値に対応する、そのような全てのストアは、DC1926に書き込まれてよい。DC1926内でミスする、そのような全てのストアは、FB1930に書き込まれてよい。すべてのDC1926の複数のコンテンツが同一に保持されるので、さらなる実施形態において、同一のそのようなオペレーションは、すべてのDC1926において実行されてよい。さらに、DC1926内でミスする全てのストアは、フルキャッシュラインをフェッチするべく、FB1930からL2キャッシュ1810に発行されるオーナーシップの読み取り要求を作成してよい。フェッチの複数の結果は、FB1930内に位置するストアデータとマージされてよい。一実施形態において、フェッチの複数の結果は、すべてのFB1930にブロードキャストされてよい。さらに、ミスが起こるとすべてのFB1930に同一のストアが書き込まれるので、フェッチを待機するストアデータはすべてのFB1930において同一であってよい。キャッシュラインがフェッチされた後に、すべてのDCU1804におけるDC1926にデータを書き込むことにより、ミスした他の複数のストアオペレーションについてのその他のフェッチだけでなく、ストアがグローバルに観察されてよい。異なるDCU1804における各FB1930の複数のコンテンツは、各DCU1804にキャッシュラインが供給されるまで、異なってよい。この差異は、複数のDCU1804の間のデータの送信および受信のレイテンシに起因してよい。
複数のFB1930の同期は、任意の適切な態様で実行されてよい。上述したように、キャッシュラインは、DC1926においてミスが生じるとフェッチされる必要があってよい。一実施形態において、すべてのDCU1804のなかで単一のDCU1804が、複数のFB1930からL2キャッシュ1810への読み取り要求またはオーナーシップの読み取り要求の発行を担当してよい。担当DCU1804は、任意の適切な態様で決定されてよい。さらなる実施形態において、ハッシュ、マッピング、インデックス、または、ストアオペレーションの物理アドレスに基づく他のインディケーションにより、特定のDCU1804が決定されてよい。単一のDCU1804のみが要求を発行してよいが、別の実施形態において、フェッチされたキャッシュラインはすべてのFB1930にブロードキャストされてよい。さらに他の実施形態において、単一のDCU1804のみが要求を発行してよいが、フェッチされたラインに依存し得る、その次のロードによるヒットを正確に検出して追跡すべく、各FB1930がそのような複数の要求に対してエントリを保持してよい。
さらに、複数のFB1930の同期は、複数のDCU1804の間で複数のFBコンテンツを共有するための複数のアドレスバス1940の使用により実行されてよい。各FB1930は、複数のクラスタ1806により生成された複数の同一のストアを含んでよい。従って、各FB1930は、そのような複数のストアを同時に書き込んでよい。しかしながら、一実施形態において、各FBは、複数の同一のロードオペレーションに対し、同一の時間でアクセスしなくてよい。そのような状況は、例えば、複数のSDQが複数のロード要求をストアしない場合、または、同一のロード情報が単純に複数のクラスタ1806からすべてのDCUにブロードキャストされない場合に起こりうる。このような実施形態において、FB1930は、それぞれのクラスタ1806からのロード情報を受け取ると、そのロードを自身に書き込むと共に、そのロードを、アドレスバス1940を介して複数の他のFB1930に転送してよい。各FB1930は、自身のクラスタ1806からの複数のロード要求をストアし、複数の他のFB1930で受信された複数のロード要求を追跡する。様々なFB1930の複数のコンテンツは、複数のアドレスバス1940を介したそのような複数のロード要求の送信のレイテンシまたはディレイのために、特定のクロックサイクルで異なってよい。
複数のWBB1928の同期は任意の適切な態様で実行されてよい。一実施形態において、新たなキャッシュラインがDC1926への複数のフィルデータメッセージを書き込まれたときに、すべてのDC1926に同じデータが同時に書き込まれてよい。別の実施形態において、DC1926における排除された同一のキャッシュラインは、複数のフィルデータメッセージを用いてすべてのWBB1928に同時に書き込まれてよい。さらに他の実施形態において、ライトバック条件に関し、DC1926の排除キャッシュラインは、(上述のように決定される)担当DCU1804のWBB1928からL2キャッシュ1810に書き込まれてよい。書き込みはその次のクロックサイクルで実行されてよい。さらにまた他の実施形態において、L2キャッシュ1810はすべてのWBB1928に複数の確認メッセージを送信してよい。各WBB1928それぞれは、そのような確認を受け取ると、自身におけるキャッシュラインを無効化してよい。
L2キャッシュ1812からの複数のスヌープシグナル1942の同期は、任意の適切な態様で実行されてよい。様々な実施形態において、複数のスヌープシグナル1942は、DC1926、FB1930およびWBB1928にルーティングされてよい。要求されたキャッシュラインがDC1926において修正状態で見つかった場合には、そのキャッシュラインはスヌープバッファ1932に排除されてよい。閾値に応じて、当該キャッシュラインおよびその他の収集された情報は、マルチプレクサ1934により選択されたときにスヌープバッファ1932を介してライトバックされる。(上述のように決定される)担当DCU1804は、そのようなデータをライトバックするスヌープバッファ1932を含んでよい。さらに、WBB1928またはFB1930のいずれかにおけるヒットの場合に、ライトバックは、担当DCU1804のそのような要素により実行される。加えて、キャッシュ不能な、または部分的な書き込みは、FB1930に担当DCU1804からの、そのようなライトバックの実行を引き起こしてよい。そのような全ての場合における担当要素は、マルチプレクサ1934により選択されてよい。
WBB1928は、複数のDCU1804のライトバックバッファにおけるそれぞれのWBB1928内で等しい(equivalent)エントリを割り当てることによってさらに同期されてよい。一実施形態において、そのような割り当ては、プロセッサのオペレーションの同じクロックサイクルで行われてよい。さらに、WBB1928の1つのインスタンスは自身におけるエントリを割り当て解除してよく、WBB1928の別のインスタンスは自身における等しいエントリを割り当ててよい。別の実施形態において、そのような割り当ておよび割り当て解除は同時であってよい。
図20Aおよび図20Bは、本開示における複数の実施形態に係る、クラスタ化された機械内のメモリアクセスのための方法2000の図である。方法2000は、任意の適切なポイントで開始してよく、任意の適切な順序で実行してよい。例えば、方法2000の複数の要素は、特定のクロックサイクルにおいて同時に発生してよい。方法2000の異なるセクションは、互いに並列に実行されてよい。さらに、方法2000における複数の分岐または複数の決定は、非同期であってよい。方法2000のいくつかの要素は、例えば複数のDCUまたはそれらのコンポーネントによるなど、複数のエンティティにより同時に実行されてよい。複数のDCUは、複数のWBB、複数のFB、複数のDCおよび複数のSBなどの複数のコンポーネントに従って同期されてよい。特定のクロックサイクルにおいて、それぞれのDCUの各WBB、DCおよびSBの複数のコンテンツは、同一であってよい。そのような態様で、任意の適切な数のDCUが同期されてよい。各DCUは、それぞれ同数のEUを有する1または2つのクラスタに通信可能に結合されてよい。
2003において、複数のスヌープシグナルがキャッシュ階層からすべてのDCUの複数のコンポーネントに送信されてよい。そのようなコンポーネントは、そのようなすべてのDCUの複数のDC、複数のFBおよび複数のWBBを含んでよい。複数のスヌープシグナルは、1または複数のそのようなコンポーネントにおいて見い出されうる特定のキャッシュラインの状態についての照会を行ってよい。2005において、各DCUは、複数のスヌープシグナルの結果として何らかのスヌープ関連条件が見い出されたか否かを判断してよい。スヌープ関連条件が見い出されない場合には、方法2000は2010に進んでよい。DC(または複数のDC)内で修正キャッシュラインを含むスヌープ関連条件が見い出された場合には、方法2000は2007に進んでよい。WBBまたはFB内でキャッシュラインの発見を含むスヌープ関連条件が発生した場合には、方法2000は2040に進んでよい。2007において、複数のDCから、それぞれのDCUにおけるすべてのSBへキャッシュラインが書き込まれてよい。方法2000は2040に進んでよい。一実施形態において、2003、2005および2007は、方法2000の他の要素と並列に反復してよい。
2010において、様々なEUおよびクラスタにおける複数のメモリオペレーションが監視されてよい。監視はクラスタごとに実行されてよい。そのようなメモリオペレーションは、ストアまたはロードオペレーションの様々な形態を含んでよい。一実施形態において、2010および好適なその次の複数の要素は、2003、2005および2007と並列に実行されてよい。
2013において、特定のクラスタによりロードオペレーションまたはストアオペレーションのいずれが生成されたかが判断されてよい。ロードオペレーションが発見された場合には、方法2000は2045に進んでよい。ストアオペレーションが発見された場合には、2015において、すべてのクラスタから十分な数のストアが受信されたか否かが判断されてよい。2010で判断されたストアオペレーションは、複数のストアオペレーションのキューに追加されてよい。そのようなキューは、例えばグローバルで、かつ、すべてのクラスタからの複数のストアを説明してよく、或いは、キューにとってローカルで、かつ、そのような他の複数のキューと整合してよい。様々なEUにより生成された複数のストアの必須の数に達した場合には、方法2000は2017に進んでよい。ストアの必須の数に達しない場合には、方法2000は2037に進んでよい。
2017において、集められたストアオペレーションのそれぞれはすべてのDCUに発行されてよい。2020において、各DCUは、与えられたストアオペレーションのターゲットが複数のDC内に存在するか否かを判断してよい。ストアオペレーションのターゲットが複数のDC内に存在しない場合には、ミスが発生する。ミスが発生すると、方法2020は2025に進んでよい。ミスが発生せず、ストアオペレーションのターゲットが複数のDC内で利用可能である場合には、方法2020は2023に進んでよい。2020およびその次の複数の要素は、発行されるストアオペレーションごとに繰り返されてよい。
2023において、ストアオペレーションが複数のDCのすべてに書き込まれてよい。方法2000は2037に進んでよい。
2025において、ストアオペレーションのミス処理が開始されてよい。ストアオペレーションはすべてのFBに書き込まれてよい。2027において、キャッシュ階層の一部、例えばL2から取得されるべき、ストアオペレーションのための読み取り要求がすべてのFBで生成されてよい。2030において、単一の担当DCUのFBがキャッシュ階層の読み取り要求を発行してよい。担当DCUは、オペレーションの物理アドレスに基づく割り当てなど、任意の適切な態様で決定されてよい。
2033において、キャッシュ階層からすべてのDCUにフィルデータが送信されてよい。フィルデータはそれぞれのFBで受信されてよい。一実施形態において、キャッシュ階層はフィルデータを要求DCUにルーティングしてよく、これは複数の他のDCUのそれぞれとフィルデータを共有してよい。別の実施形態において、キャッシュ階層はすべてのDCUに対して並列にフィルデータをルーティングしてよい。
2035において、すべてのDCにおける古いデータは、そのような複数のDCが新いフィルデータのために十分なフリー領域を有してない場合に、排除されてよい。また、そのように排除されるデータは、複数のDCからすべてのWBBに書き込まれてよい。新しいフィルデータは、すべてのDCに書き込まれてよい。
2037において、何らかのライトバック条件が発生したか否かが判断されてよい。そのような条件は、例えば、すでに排除されたがまだキャッシュ階層と共有されていないデータへのニーズ、キャッシュ不能なメモリ要求、部分的な書き込み、ダイレクトメモリアクセス、または、キャッシュ階層からのバックワード照会を含んでよい。様々な実施形態において、そのようなチェックは、2005でのスヌープシグナル処理と関連して実行されてよい。ライトバック条件が発生した場合には、方法2000は2040に進んでよい。ライトバック条件が発生していない場合には、方法2000は2003に進んで方法2000の実行を反復してよい。様々な実施形態において、2037、2040、2043は方法2000の複数の他の要素と並列に実行されてよい。
2040において、ライトバック条件に対し、担当DCUのWBB、SB、FBは、キャッシュ階層へのデータのライトバックを実行してよい。2043において、ライトバックの確認が受信されてよい。必要に応じて、すべてのWBBが無効化されてよい。方法2000は2033に進んでライトバック要求に応じてフィルデータを受信してよい。
2013において個々のクラスタに対するロードオペレーションが判断されていてよく、2045において関連する個々のDCUにロードが発行されてよい。2047において、それぞれのDCUのDCにおいてロードオペレーションのターゲットについてヒットまたはミスがあるか否かが判断されてよい。ミスがある場合には、方法2000は2053に進んでよい。ミスがない場合には、方法2000は2050に進んでよい。
2050において、DC上でロードオペレーションが実行されてよく、ロードオペレーションの要求を行ったクラスタへ結果のデータが戻されてよい。方法2000は2037に進んでよい。
2053において、ロードオペレーションのミス処理が開始されてよい。ロードオペレーションは、ロードオペレーションを受信した個々の各DCUのFBに書き込まれてよい。2055において、ロードオペレーションは複数の他のDCUにおけるすべての他のFBに通信されてよい。そのような通信は、特別な複数のアドレスラインにより行われてよい。そのような通信にはディレイまたはレイテンシがあってよい。ディレイは、すべてのFBがロードオペレーションを受信するまで、異なるFBに異なるコンテンツを持たせ得る。2055において、すべてのFBがロードオペレーションを書き込むまでに、複数のロードオペレーションは、それが受信されるに従ってそれぞれの各FBに書き込まれてよい。方法2000は2030に進んでよい。
方法2000は任意の適切な基準により開始されてよい。さらに、方法2000は複数の特定の要素のオペレーションを説明するが、方法2000は複数の要素の任意の適切な組み合わせまたはタイプにより実行されてよい。例えば、方法2000は図1A−20Bに図示された複数の要素、または、方法2000を実施するべく動作可能な任意の他のシステムにより実施されてよい。従って、方法2000の好ましい初期化ポイント、および、方法2000を構成する複数の要素の順序は、選択される実施に依存してよい。いくつかの実施形態において、いくつかの要素は任意選択に省略、再構成、繰り返し、または組み合わせされてよい。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性メモリ及び不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実施されてよい。
プログラムコードは、本明細書に説明されている複数の機能を実行し、出力情報を生成する複数の入力命令に適用され得る。この出力情報は、1または複数の出力デバイスに既知の方法で適用されてよい。この用途のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含んでよい。
プログラムコードは、処理システムと通信を行うために、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードはまた、必要に応じて、アセンブリまたは機械言語で実装されてよい。実際、本明細書に記載の複数のメカニズムは、いかなる特定のプログラミング言語にも範囲限定されない。いずれの場合であっても、言語はコンパイラ型またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、機械に読み取られた場合に、当該機械に本明細書において説明される技術を実行するためのロジックを組み立てさせる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数の命令により実装され得る。「IPコア」として知られているそのような表現は、有形の機械可読媒体上にストアされてよく、様々な顧客又は製造設備に供給されて、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含みうるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、再書込み可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
従って、本開示の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体も含んでよい。そのような複数の実施形態は複数のプログラム製品と呼ばれてもよい。
場合によっては、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために、用いられてもよい。例えば、命令コンバータは、命令を、コアにより処理されることになる他の1または複数の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、または変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令変換器は、オンプロセッサ、オフプロセッサ、又は、一部がオンプロセッサかつ一部がオフプロセッサであってよい。
従って、少なくとも一実施形態に係る1または複数の命令を実行するための複数の技術が開示されている。或る例示の実施形態が、説明され、添付図面に示されているが、そのような実施形態は、他の実施形態の単なる例示にすぎず、他の実施形態を制限するものではないこと、及び、そのような実施形態は、図示及び説明された特定の構造及び構成に限定されるものではないことが理解されるべきである。なぜならば、この開示を検討すると、他の様々な変更が当業者には思い浮かべることができるからである。このような技術の分野では、成長が速く、さらなる進歩が容易に予見されない場合、開示された実施形態は、本開示の原理又は添付の特許請求の範囲の範囲から逸脱することなく技術的進歩を可能にすることによって容易にされるように、構成及び細部が容易に変更可能な場合がある。