[詳細な説明]
以下の説明は、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、もしくは他の処理装置内における、又はこれらに従って、複数のストアをソート及びリタイアする命令及び処理ロジックを説明する。このような処理装置は、アウトオブオーダプロセッサを含んでよい。さらに、このような処理装置は、マルチストランドアウトオブオーダプロセッサを含んでよい。さらに、複数のストアをソート及びリタイアすることは、ストアバッファのような順序付けされていないバッファからなされてよい。以下の説明において、本開示の複数の実施形態に対するより十分な理解を提供すべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実施可能メカニズム等のような多数の具体的な詳細が示される。しかしながら、当業者によれば、このような具体的な詳細がなくても、複数の実施形態が実施可能であることが理解されよう。さらに、本開示の複数の実施形態を不必要に不明瞭とすることを回避すべく、いくつかの周知構造、回路等は、詳細には示されていない。
以下の複数の実施形態は、プロセッサを参照して説明されるが、複数の他の実施形態は、複数の他のタイプの集積回路及びロジックデバイスに適用可能である。本開示の複数の実施形態の同様の技術及び教示は、より高いパイプラインスループット及び改善された性能からの利益を享受し得る他のタイプの回路又は半導体デバイスに適用されてよい。本開示の複数の実施形態の教示は、複数のデータ操作を実行する任意のプロセッサ又は機械に適用可能である。しかしながら、複数の実施形態は、512ビット、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータオペレーションを実行するプロセッサ又は機械に限定されるものではなく、データの操作又は管理が実行可能な任意のプロセッサ及び機械に適用されてよい。さらに、以下の説明は複数の例を提供し、複数の添付図面は、例示目的のために様々な例を示す。しかしながら、これらの例は、本開示の複数の実施形態の全ての適用可能な実装を網羅的に列挙するのではなく、単に、本開示の複数の実施形態の複数の例を提供することを意図するものであるから、限定的な意味で解釈されるべきではない。
以下の複数の例は、複数の実行ユニット及びロジック回路との関連で命令処理及び分散を説明するが、本開示の複数の他の実施形態は、有形の機械可読媒体にストアされたデータ又は複数の命令であって、機械によって実行された場合に、本開示の少なくとも1つの実施形態に整合する複数の機能を当該機械に実行させるデータ又は複数の命令を用いて実現されてよい。一実施形態において、本開示の複数の実施形態に関連する複数の機能は、機械で実行可能な複数の命令で具現化される。複数の命令は、当該複数の命令と共にプログラミング可能な汎用又は特定用途向けプロセッサに、本開示の複数の段階を実行させるために用いられてよい。本開示の複数の実施形態は、コンピュータプログラム製品又はソフトウェアとして提供されてよく、これらは、本開示の複数の実施形態に従って1つ又は複数のオペレーションを実行するようにコンピュータ(又は他の電子デバイス)をプログラミングするように利用可能な複数の命令をストアした機械又はコンピュータ可読媒体を含んでよい。さらに、本開示の複数の実施形態の複数の段階は、当該段階を実行する固定機能ロジックを含む具体的なハードウェアコンポーネントによって、又はプログラミングされたコンピュータコンポーネント及び固定機能ハードウェアコンポーネントの任意の組み合わせによって、実行されてよい。
本開示の複数の実施形態を実行するロジックをプログラミングするために用いられる複数の命令は、DRAM、キャッシュ、フラッシュメモリ、又は他のストレージのようなシステムのメモリ内にストアされてよい。さらに、複数の命令は、ネットワークを介して又は他のコンピュータ可読媒体を用いて、分散されてよい。従って、機械可読媒体は、機械(例えばコンピュータ)可読形式で情報をストア又は送信する任意のメカニズムを含んでよく、限定されるものではないが、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD−ROM)、及び光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気又は光カード、フラッシュメモリ、又は電気、光、音響もしくは他の形の伝搬信号(例えば、複数の搬送波、赤外線信号、デジタル信号等)を介してのインターネット経由による情報送信に用いられる有形の機械可読ストレージである。従って、コンピュータ可読媒体は、複数の電子的命令又は情報を機械(例えばコンピュータ)可読形式でストア又は送信することに適した任意のタイプの有形の機械可読媒体を含んでよい。
設計は、形成からシミュレーション、製造まで、様々なステージを経ることがある。設計を表すデータは、多数の態様で当該設計を表してよい。第1に、シミュレーションにおいて有用たり得るが、ハードウェアは、ハードウェア記述言語又は他の機能的記述言語を用いて表されてよい。さらに、ロジック及び/又は複数のトランジスタゲートを有する回路レベルモデルは、設計処理のいくつかのステージにおいて生成されてよい。さらに、複数の設計は、いくつかのステージにおいて、ハードウェアモデルにおける様々なデバイスの物理的配置を表すデータのレベルに到達してよい。いくつかの半導体製造技術が用いられる場合、ハードウェアモデルを表すデータが、集積回路を製造するために用いられる複数のマスクに対する異なるマスクレイヤにおける様々な機能の存在又は不存在を指定するデータであってよい。設計の任意の表現において、データは、任意の形式の機械可読媒体にストアされてよい。メモリ又はディスクのような磁気もしくは光ストレージは、変調もしくは他の方法で生成された光又は電気波を介して送信された情報をストアし、このような情報を送信する、機械可読媒体であってよい。コード又は設計を示す又は搬送する電気搬送波が、電気信号のコピー、バッファ、又は再送信が実行される程度に送信された場合、新たなコピーが生成され得る。従って、通信プロバイダ又はネットワークプロバイダは、有形の機械可読媒体に、少なくとも一時的に、搬送波に符号化された情報のような項目をストアしてよく、本開示の複数の実施形態の複数の技術を具現化する。
近年のプロセッサにおいては、多数の異なる実行ユニットが、様々なコード及び命令を処理及び実行するために用いられてよい。いくつかの命令は、より迅速に完了し得るが、複数の他の命令は、完了までに多数のクロックサイクルを費やすことがある。複数の命令のスループットがより高速であればあるほど、プロセッサの全体的な性能がより良好となる。従って、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、浮動小数点命令、ロード/ストアオペレーション、データ移動等のような、より複雑で、実行時間及びプロセッサリソースに関してより多くを必要とする特定の命令が存在することがある。
インターネット、テキスト、及びマルチメディアアプリケーションにおいては、より多くのコンピュータシステムが用いられるため、追加のプロセッササポートが、徐々に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理、ならびに外部入出力(I/O)を含む1つ又は複数のコンピュータアーキテクチャに関連付けられてよい。
一実施形態において、命令セットアーキテクチャ(ISA)は、1つ又は複数の命令セットを実装するために用いられるプロセッサロジック及び複数の回路を含み得る1つ又は複数のマイクロアーキテクチャによって実装されてよい。従って、複数の異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)コア(商標)プロセッサ、及びカリフォルニア州サニーベールのアドバンストマイクロデバイセズ社から提供されるプロセッサは、x86命令セット(複数のより新たなバージョンに追加されたいくつかの拡張を伴う)のほぼ同一バージョンを実装するが、複数の異なる内部設計を有する。同様に、ARMホールディングス、MIPSのような他のプロセッサ開発会社、又はこれらの複数のラインセンシもしくは利用者によって設計された複数のプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、複数の異なるプロセッサ設計を含んでよい。例えば、ISAの同じレジスタアーキテクチャは、専用物理レジスタ、レジスタリネーミングメカニズムを用いる(例えば、レジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)、及びリタイアメントレジスタファイルを用いる)1つ又は複数の動的に割り当てられた物理レジスタを含む、新規又は周知技術を用いる複数の異なるマイクロアーキテクチャにおいて、異なる複数の態様で実装されてよい。一実施形態において、複数のレジスタは、ソフトウェアプログラマによってアドレス指定可能であってよく、又はそうでなくてもよい、1つ又は複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含んでよい。
命令は、1つ又は複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべきオペレーション及び当該オペレーションが実行される複数のオペランドを、複数の他のものの中から指定する様々なフィールド(ビット数、ビット位置等)を示してよい。さらなる実施形態において、いくつかの命令フォーマットは、複数の命令テンプレート(又はサブフォーマット)によってさらに定義されてよい。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットのフィールドの異なる複数のサブセットを有するように定義されてよく、及び/又は、異なるように解釈される所与のフィールドを有するように定義されてよい。一実施形態において、命令は、命令フォーマットを用いて(かつ、定義される場合には、当該命令フォーマットの複数の命令テンプレートのうち1つにおいて)表されてよく、オペレーション及び当該オペレーションが動作する複数のオペランドを指定する又は示す。
科学的、財務、自動ベクトル化汎用、RMS(認識、マイニング、及び合成)、及び視覚的ならびにマルチメディアアプリケーション(例えば、2D/3Dグラフィック、画像処理、ビデオ圧縮/圧縮解除、音声認識アルゴリズム及びオーディオ操作)は、多数のデータ項目に同じオペレーションが実行されることを必要とすることがある。一実施形態において、単一命令複数データ(SIMD)は、プロセッサに複数のデータエレメントにおけるオペレーションを実行させる命令のタイプを指す。SIMD技術は、レジスタの複数のビットを多数の固定サイズ又は可変サイズのデータエレメントに論理的に分割し得るプロセッサにおいて用いられてよく、各データエレメントは、別個の値を表す。例えば、一実施形態において、64ビットレジスタの複数のビットは、その各々が別個の16ビット値を表す4つの別個の16ビットデータエレメントを含むソースオペランドとして編成されてよい。このタイプのデータは、「パックド」データタイプ又は「ベクトル」データタイプと称されてよく、このデータタイプの複数のオペランドは、パックドデータオペランド又はベクトルオペランドと称されてよい。一実施形態において、パックドデータ項目又はベクトルは、単一のレジスタ内にストアされた複数のパックドデータエレメントのシーケンスであってよく、パックドデータオペランド又はベクトルオペランドは、SIMD命令(もしくは「パックドデータ命令」又は「ベクトル命令」)のソース又はデスティネーションオペランドであってよい。一実施形態において、SIMD命令は、同じ又は異なるサイズ、同じ又は異なる数のデータエレメントを有するデスティネーションベクトルオペランド(又は結果ベクトルオペランドとも称される)を同じ又は異なるデータエレメント順序で生成すべく、2つのソースベクトルオペランドに対して実行されるべき単一のベクトルオペレーションを指定する。
x86、MMX(商標)、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1、及びSSE4.2命令を含む命令セットを有するインテル(登録商標)コア(商標)プロセッサ、ベクトル浮動小数点(VFP)及び/又はNEON命令を含む命令セットを有するARM Cortex(登録商標)ファミリのプロセッサのようなARMプロセッサ、及び中国科学院のコンピューティング技術研究所(ICT)によって開発された龍芯(Loongson)ファミリのプロセッサのようなMIPSプロセッサなどによって採用されるSIMD技術は、アプリケーション性能における著しい向上を可能にした(コア(商標)及びMMX(商標)はカリフォルニア州サンタクララのインテルコーポレーションの登録商標又は商標である)。
一実施形態において、デスティネーション及びソースレジスタ/データは、対応するデータ又はオペレーションのソース及びデスティネーションを表す包括的な用語であってよい。いくつかの実施形態において、これらは、複数のレジスタ、メモリ、又は示されたもの以外の他の名称又は機能を有する他のストレージ領域で実装されてよい。例えば、一実施形態において、「DEST1」は一時的なストレージレジスタ又は他のストレージ領域であってよいが、「SRC1」及び「SRC2」は、第1及び第2のソースストレージレジスタ又は他のストレージ領域等であってよい。複数の他の実施形態において、SRC及びDESTストレージ領域のうち2つ又はそれより多くは、同じストレージ領域(例えば、SIMDレジスタ)内の複数の異なるデータストレージエレメントに対応してよい。一実施形態において、例えば、第1及び第2のソースデータに対して実行されたオペレーションの結果を、デスティネーションレジスタとして機能する2つのソースレジスタのうち1つにライトバックすることによって、ソースレジスタのうち1つがデスティネーションレジスタとして動作してもよい。
図1Aは、本開示の複数の実施形態に係る例示的なコンピュータシステムのブロック図であり、コンピュータシステムは、命令を実行する複数の実行ユニットを含み得るプロセッサによって形成される。システム100は、本明細書において説明される実施形態のように、本開示に係る複数のデータ処理アルゴリズムを実行するロジックを含む複数の実行ユニットを用いるプロセッサ102のようなコンポーネントを含んでよい。システム100は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)及び/又はStrongARM(商標)マイクロプロセッサに基づく処理システムの代表的なものであってよいが、複数の他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するPCを含む)も用いられてよい。一実施形態において、サンプルのシステム100は、ワシントン州レドモンド市のマイクロソフトコーポレーションから入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行してよいが、複数の他のオペレーティングシステム(例えば、UNIX(登録商標)及びLinux(登録商標))、組み込みソフトウェア、及び/又はグラフィカルユーザインタフェースも用いられてよい。従って、本開示の複数の実施形態は、ハードウェア回路及びソフトウェアのいずれの具体的な組み合わせにも限定されるものではない。
複数の実施形態は、コンピュータシステムに限定されるものではない。本開示の複数の実施形態は、ハンドヘルドデバイスのような複数の他のデバイス及び組み込みアプリケーションにおいて用いられてよい。ハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)及びハンドヘルドPCを含む。組み込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、又は少なくとも1つの実施形態に係る1つ又は複数の命令を実行可能な任意の他のシステムを含んでよい。
コンピュータシステム100は、本開示の一実施形態に係る少なくとも1つの命令を実行するアルゴリズムを実行する1つ又は複数の実行ユニット108を含み得るプロセッサ102を含んでよい。一実施形態は、シングルプロセッサのデスクトップ又はサーバシステムとの関連で説明されてよいが、複数の他の実施形態が、マルチプロセッサシステムに含まれてよい。システム100は、「ハブ」システムアーキテクチャの例であってよい。システム100は、複数のデータ信号を処理するプロセッサ102を含んでよい。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、又は、例えばデジタル信号プロセッサのような任意の他のプロセッサデバイスを含んでよい。一実施形態において、プロセッサ102は、プロセッサ102とシステム100の複数の他のコンポーネントとの間で複数のデータ信号を送信可能なプロセッサバス110に連結されてよい。システム100の複数のエレメントは、当業者にとって周知の従来的な複数の機能を実行してよい。
一実施形態において、プロセッサ102は、一次(L1)内部キャッシュメモリ104を含んでよい。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有してよい。他の実施形態において、キャッシュメモリは、プロセッサ102の外部に存在してよい。複数の他の実施形態は、特定の実装及び必要性に応じて、内部及び外部キャッシュの両方の組み合わせをさらに含んでよい。レジスタファイル106は、複数の異なるタイプのデータを、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタにストアしてよい。
整数及び浮動小数点オペレーションを実行するロジックを含む実行ユニット108は、プロセッサ102にも存在する。プロセッサ102は、複数の特定のマクロ命令に対するマイクロコードをストアするマイクロコード(μコード)ROMをさらに含んでよい。一実施形態において、実行ユニット108は、パックド命令セット109を処理するロジックを含んでよい。パックド命令セット109を汎用プロセッサ102の命令セットに含めることによって、複数の命令を実行する関連する回路と共に、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションは、汎用プロセッサ102のパックドデータを用いて実行されてよい。従って、多くのマルチメディアアプリケーションは、パックドデータに対して複数のオペレーションを実行するプロセッサのデータバスの全幅を用いることによって、より効率的に加速及び実行され得る。これにより、プロセッサのデータバスにわたって、複数のより小さい単位のデータを転送する必要性を排除することができ、1つのデータエレメントに対して一度に1つ又は複数のオペレーションを実行することができる。
実行ユニット108の複数の実施形態は、マイクロコントローラ、組み込みプロセッサ、グラフィックデバイス、DSP、及び他のタイプのロジック回路において用いられてもよい。システム100は、メモリ120を含んでよい。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、又は他メモリデバイスとして実装されてよい。メモリ120は、複数のデータ信号によって表される、プロセッサ102によって実行可能な複数の命令及び/又はデータをストアしてよい。
システムロジックチップ116は、プロセッサバス110及びメモリ120に連結されてよい。システムロジックチップ116は、メモリコントローラハブ(MCH)を含んでよい。プロセッサ102は、プロセッサバス110を介してMCH116と通信を行ってよい。MCH116は、命令及びデータストレージのため、かつ、グラフィックコマンド、データ及びテクスチャのストレージのために、メモリ120への高帯域幅メモリパス118を提供してよい。MCH116は、プロセッサ102、メモリ120、及びシステム100の複数の他のコンポーネントの間で複数のデータ信号を方向付けし、プロセッサバス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コプロセッサ命令による処理のために、無線インタフェース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は、マイクロコードROM232からの一実施形態に係る1つ又は複数の命令を完了させるべく、命令マイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が命令に対する複数のマイクロopのシーケンス処理を完了させた後、機械のフロントエンド201は、トレースキャッシュ230からの複数のマイクロopのフェッチを再開してよい。
アウトオブオーダ実行エンジン203は、複数の命令を実行のために準備してよい。アウトオブオーダ実行ロジックは、多数のバッファを有し、これにより、複数の命令のフローを平滑化及びリオーダし、これらの命令がパイプラインを進み実行のためにスケジューリングされるにあたり、性能を最適化する。アロケータロジックは、実行のために各μopが必要とする複数の機械バッファ及びリソースを割り当てる。レジスタリネーミングロジックは、複数のロジックレジスタをレジスタファイルの複数のエントリにリネーミングする。アロケータは、2つのμopキューのうち1つにおいて、各μopに対してエントリをさらに割り当てる。これらのμopキューは、複数の命令スケジューラの前において、1つが複数のメモリオペレーション用、1つが非メモリオペレーション用である。複数の命令スケジューラは、メモリスケジューラ、高速スケジューラ202、低速/一般的浮動小数点スケジューラ204、及び単純浮動小数点スケジューラ206である。μopスケジューラ202、204、206は、これらの従属入力レジスタオペランドソースの準備完了と、複数のμopがこれらのオペレーション完了のために必要とする複数の実行リソースの可用性に基づいて、μopが実行準備完了となるタイミングを決定する。一実施形態の高速スケジューラ202は、メインクロックサイクルの各半分に対してスケジューリングしてよく、複数の他のスケジューラは、メインプロセッサクロックサイクル毎に一度だけスケジューリングしてよい。複数のスケジューラは、実行のために複数のμopをスケジューリングする複数のディスパッチポートを調整する。
レジスタファイル208、210は、スケジューラ202、204、206と実行ブロック211の実行ユニット212、214、216、218、220、222、224との間に構成されてよい。レジスタファイル208、210の各々は、それぞれ整数及び浮動小数点オペレーションを実行する。各レジスタファイル208、210は、レジスタファイルにまだ書き込まれていない完了したばかりの結果を、複数の新たな従属μopに迂回させ又は転送し得るバイパスネットワークを含んでよい。整数レジスタファイル208及び浮動小数点レジスタファイル210は、他とデータ通信を行ってよい。一実施形態において、整数レジスタファイル208は、2つの別個のレジスタファイルに分割されてよく、そのうち1つのレジスタファイルはデータの下位32ビット用であり、第2のレジスタファイルは、データの上位32ビット用である。浮動小数点命令は、典型的には64から128ビット幅のオペランドを有するので、ファイル210の浮動小数点レジスタは、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、又は複数の他のオペレーションを実行してよい。さらに他の実施形態において、除算、平方根、及び残りのマイクロopを実行する浮動小数点ALU222は、64ビット対64ビットの浮動小数点除算器を含んでよい。様々な実施形態において、浮動小数点値を含む複数の命令は、浮動小数点ハードウェアによって処理されてよい。一実施形態において、複数のALUオペレーションは、高速ALU実行ユニット216、218に渡されてよい。高速ALU216、218は、有効レイテンシが半クロックサイクルの高速オペレーションを実行してよい。一実施形態において、ほとんどの複雑な整数オペレーションは、低速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レジスタをさらに含む。以下の説明について、レジスタは、パックドデータを保持するように設計されたデータレジスタであると理解されてよく、このようなデータレジスタは、カリフォルニア州サンタクララのインテルコーポレーションから提供される、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からワードゼロが、どのようにSIMDレジスタにストア可能であるかを示す。符号付きパックドワード表現347は、符号なしパックドワードのレジスタ内表現346と同様であってよい。なお、各ワードのデータエレメントの第16のビットは、符号インジケータであってよい。符号なしパックドダブルワード表現348は、複数のダブルワードデータエレメントがどのようにストアされるかを示す。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードのレジスタ内表現348と同様であってよい。なお、必要な符号ビットは、各ダブルワードデータエレメントの第32のビットであってよい。
図3Dは、オペレーション符号化(オペコード)の実施形態を示す。さらに、フォーマット360は、「IA−32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」において説明されるオペコードフォーマットのタイプに対応するレジスタ/メモリオペランドアドレス指定モードを含んでよく、本マニュアルは、ワールドワイドウェブ(www)intel.com/design/litcentrにおいて、カリフォルニア州サンタクララのインテルコーポレーションから入手可能である。一実施形態において、命令は、フィールド361及び362のうちの1つ又は複数によって符号化されてよい。命令毎に、2つまでのソースオペランド識別子364及び365を含む2つまでのオペランド位置が特定されてよい。一実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同じであってよいが、複数の他の実施形態においては、これらは異なることがある。他の実施形態において、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同じであってよいが、複数の他の実施形態においては、これらは異なることがある。一実施形態において、ソースオペランド識別子364及び365によって特定される複数のソースオペランドのうち1つは、複数の文字列比較オペレーションの結果によって上書きされてよいが、複数の他の実施形態において、識別子364は、ソースレジスタエレメントに対応し、識別子365は、デスティネーションレジスタエレメントに対応する。一実施形態において、オペランド識別子364及び365は、32ビット又は64ビットソース及びデスティネーションオペランドを特定してよい。
図3Eは、本開示の複数の実施形態に係る40又はそれより多くのビットを有する他の適用可能なオペレーション符号化(オペコード)フォーマット370を示す。オペコードフォーマット370は、オペコードフォーマット360に対応し、任意のプレフィックスバイト378を備える。一実施形態に係る命令は、フィールド378、371、及び372のうちの1つ又は複数によって符号化されてよい。命令毎に2つまでのオペランド位置が、ソースオペランド識別子374及び375によって、かつプレフィックスバイト378によって、特定されてよい。一実施形態において、プレフィックスバイト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の二次(L2)キャッシュユニット476にさらに連結されてよい。復号ユニット440は、実行エンジンユニット450のリネーミング/アロケータユニット452に連結されてよい。
実行エンジンユニット450は、リタイアメントユニット454に連結されるリネーミング/アロケータユニット452と、1つ又は複数のスケジューラユニット456のセットとを含んでよい。複数のスケジューラユニット456は、複数の予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。複数のスケジューラユニット456は、複数の物理レジスタファイルユニット458に連結されてよい。物理レジスタファイルユニット458の各々は、1つ又は複数の物理レジスタファイルを表し、これらの異なるいくつかは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等のような1つ又は複数の異なるデータタイプ、ステータス(例えば、次に実行されるべき命令のアドレスである命令ポインタ)等をストアする。物理レジスタファイルユニット458は、リタイアメントユニット154にオーバーラップされてよく、これにより、レジスタリネーミング及びアウトオブオーダ実行が実装可能な(例えば、1つ又は複数のリオーダバッファ及び1つ又は複数のリタイアメントレジスタファイルを用いる、1つ又は複数のフューチャーファイル、1つ又は複数の履歴バッファ、及び1つ又は複数のリタイアメントレジスタファイルを用いる、複数のレジスタマップ及び複数のレジスタのプールを用いる等)様々な態様を示す。概して、複数のアーキテクチャレジスタは、プロセッサ外部から又はプログラマの視点から、可視であってよい。複数のレジスタは、公知の特定のタイプの回路に限定されるものではない。様々な複数の異なるタイプのレジスタは、本明細書において説明されるようにデータをストア及び提供する限り、適切であり得る。適したレジスタの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた物理レジスタ、専用及び動的に割り当てられた物理レジスタの組み合わせ等を含む。リタイアメントユニット454及び複数の物理レジスタファイルユニット458は、複数の実行クラスタ460に連結されてよい。複数の実行クラスタ460は、1つ又は複数の実行ユニット162のセット及び1つ又は複数のメモリアクセスユニット464のセットを含んでよい。複数の実行ユニット462は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、特定の複数の機能又は複数の機能の複数のセット専用の多数の実行ユニットを含んでよいが、複数の他の実施形態は、1つだけの実行ユニット又はその全部が全機能を実行する複数の実行ユニットを含んでよい。複数のスケジューラユニット456、複数の物理レジスタファイルユニット458、及び複数の実行クラスタ460は、複数である可能性もあるものとして示されるが、なぜなら、複数の特定の実施形態は、複数の特定のタイプのデータ/オペレーションに対して別個のパイプラインを形成するからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインであり、及び/又はメモリアクセスパイプラインは、各々がこれら自身のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合、複数の特定の実施形態は、このパイプラインの実行クラスタだけがメモリアクセスユニット464を有するように実装されてよい)。複数の別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数は、アウトオブオーダ発行/実行、残りはインオーダであってよいことも理解されたい。
複数のメモリアクセスユニット464のセットは、メモリユニット470に連結されてよく、メモリユニット470は、データTLBユニット472を含んでよく、データTLBユニット472は、データキャッシュユニット474に連結され、データキャッシュユニット474は、二次(L2)キャッシュユニット476に連結される。例示的な一実施形態において、複数のメモリアクセスユニット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テクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONのような複数の任意追加の拡張を伴う))をサポートしてよい。
コアは、マルチスレッディング(複数のオペレーション又はスレッドの2つ又はそれより多くの並列セットを実行すること)を、様々な態様でサポートしてよいことを理解されたい。マルチスレッディングのサポートは、例えば、時分割マルチスレッディング、同時マルチスレッディング(ここで、単一の物理コアは、物理コアが同時マルチスレッディングを実行する複数のスレッドの各々に対する論理コアを提供する)、又はこれらの組み合わせを含むことによって実行されてよい。このような組み合わせは、例えば、時分割フェッチ及び復号、ならびにインテル(登録商標)ハイパースレッディングテクノロジーなどにおけるもののような、その後の同時マルチスレッディングを含んでよい。
レジスタリネーミングは、アウトオブオーダ実行との関連で説明され得るが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令及びデータキャッシュユニット434/474及び共有L2キャッシュユニット476をさらに含んでよいが、複数の他の実施形態は、例えば、一次(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は、二次(L2)、三次(L3)、四次(L4)、又は複数の他のレベルのキャッシュのような1つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。
様々な実施形態において、複数のコア502のうちの1つ又は複数は、マルチスレッディングを実行してよい。システムエージェント510は、複数のコア502を調整及び動作させる複数のコンポーネントを含んでよい。システムエージェントユニット510は例えば、電力制御ユニット(PCU)を含んでよい。PCUは、複数のコア502の電力状態を調整するために必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。システムエージェント510は、1つ又は複数の外部接続ディスプレイ又はグラフィックモジュール560を駆動するディスプレイエンジン512を含んでよい。システムエージェント510は、グラフィック用の複数の通信バスのためのインタフェース1214を含んでよい。一実施形態において、インタフェース1214は、PCIエクスプレス(PCIe)によって実装されてよい。さらなる実施形態において、インタフェース1214は、PCIエクスプレスグラフィック(PEG)によって実装されてよい。システムエージェント510は、ダイレクトメディアインタフェース(DMI)516を含んでよい。DMI516は、マザーボード又はコンピュータシステムの他の部分上における複数の異なるブリッジ間にリンクを提供してよい。システムエージェント510は、コンピューティングシステムの複数の他のエレメントにPCIeリンクを提供するPCIeブリッジ1218を含んでよい。PCIeブリッジ1218は、メモリコントローラ1220及びコヒーレンシロジック1222を用いて実装されてよい。
複数のコア502は、任意の適した態様で実装されてよい。複数のコア502は、アーキテクチャ及び/又は命令セットに関してホモジニアス又はヘテロジニアスであってよい。一実施形態において、複数のコア502のうちいくつかはインオーダであってよく、他はアウトオブオーダであってよい。他の実施形態において、複数のコア502のうち2つ又はそれより多くは同じ命令セットを実行してよいが、他は当該命令セット又は異なる命令セットのサブセットだけを実行してよい。
プロセッサ500は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能たり得るコア(商標)i3、i5、i7、2Duo及びクワッド、Xeon(商標)、Itanium(商標)、XScale(商標)、又はStrongARM(商標)プロセッサのような汎用プロセッサを含んでよい。プロセッサ500は、ARMホールディングス、MIPS等のような他の会社から提供されてよい。プロセッサ500は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサであってよい。プロセッサ500は、1つ又は複数のチップ上に実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、又はNMOSのような多数の処理技術のいずれかを用いて、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は、割り当てモジュール1282を含んでよい。一実施形態において、割り当てモジュール1282は、プロセッサ500の複数のリソース又は複数のレジスタもしくはバッファのような他のリソースを、所与の命令を実行するために割り当ててよい。割り当てモジュール1282は、メモリスケジューラ、高速スケジューラ、又は浮動小数点スケジューラのようなスケジューラにおいて、割り当てを実行してよい。このようなスケジューラは、図5Bにおいて、複数のリソーススケジューラ584によって表されてよい。割り当てモジュール1282は、図2と併せて説明された割り当てロジックによって、完全に又は部分的に実装されてよい。リソーススケジューラ584は、命令が実行準備完了となるタイミングを、所与のリソースの複数のソースが準備完了であること及び命令の実行に必要な複数の実行リソースの可用性に基づいて決定してよい。複数のリソーススケジューラ584は、例えば、上述されたように、スケジューラ202、204、206によって実装されてよい。複数のリソーススケジューラ584は、1つ又は複数のリソースに対する複数の命令の実行をスケジューリングしてよい。一実施形態において、このようなリソースは、コア502の内部にあってよく、例えば、複数のリソース586として示されてよい。他の実施形態において、このようなリソースは、コア502の外部にあってよく、例えば、キャッシュ階層503によってアクセス可能であってよい。複数のリソースは、例えば、メモリ、キャッシュ、レジスタファイル、又はレジスタを含んでよい。コア502の内部にある複数のリソースは、図5Bにおいて、複数のリソース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の実行に必要なプロセッサ500の複数の部分又はサブシステムを含んでよいが、コア502内に実装されなくてよい。LLC595に加え、モジュール590は、例えば、複数のハードウェアインタフェース、メモリコヒーレンシコーディネータ、インタープロセッサ相互接続、命令パイプライン、又はメモリコントローラを含んでよい。プロセッサ500に利用可能なRAM599へのアクセスは、モジュール590を通してなされてよく、より詳細には、LLC595を通してなされてよい。さらに、コア502の複数の他のインスタンスは、同様に、モジュール590にアクセスしてよい。コア502の複数のインスタンスの調整は、モジュール590を通して部分的に容易化されてよい。
図6−8は、プロセッサ500を含むために適した複数の例示的なシステムを示してよく、図9は、複数のコア502のうちの1つ又は複数を含んでよい例示的なシステムオンチップ(SoC)を示してよい。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で公知の複数の他のシステム設計及び実装も、適していることがある。概して、本明細書で開示されるように、プロセッサ及び/又は他の実行ロジックを組み込む多様なシステム又は電子デバイスが、概して適していることがある。
図6は、本開示の複数の実施形態に係るシステム600のブロック図を示す。システム600は、1つ又は複数のプロセッサ610、615を含んでよく、これらは、グラフィックメモリコントローラハブ(GMCH)620に連結されてよい。追加のプロセッサ615の任意の性質が、図6において破線で示される。
各プロセッサ610、615は、プロセッサ500の何らかのバージョンであってよい。しかしながら、集中画像表示ロジック及び集積メモリ制御ユニットは、プロセッサ610、615に存在しなくてよいことに留意されたい。図6は、例えば、ダイナミックランダムアクセスメモリ(DRAM)たり得るメモリ640に連結されてよいGMCH620を示す。DRAMは、少なくとも1つの実施形態について、不揮発性キャッシュに関連付けられてよい。
GMCH620は、チップセットであってよく、又はチップセットの一部であってよい。GMCH620は、プロセッサ610、615と通信を行ってよく、プロセッサ610、615とメモリ640との間のインタラクションを制御してよい。GMCH620は、プロセッサ610、615とシステム600の複数の他のエレメントとの間において、加速バスインタフェースとして動作してもよい。一実施形態において、GMCH620は、フロントサイドバス(FSB)695のようなマルチドロップバスを介してプロセッサ610、615と通信を行う。
さらに、GMCH620は、(フラットパネルディスプレイのような)ディスプレイ645に連結されてよい。一実施形態において、GMCH620は、集中画像表示アクセラレータを含んでよい。GMCH620は、入出力(I/O)コントローラハブ(ICH)650にさらに連結されてよく、これは、様々な周辺デバイスをシステム600に連結するために用いられてよい。外部グラフィックデバイス660は、他の周辺デバイス670と共にICH650に連結される別個のグラフィックデバイスを含んでよい。
複数の他の実施形態において、追加の又は異なるプロセッサが、システム600にさらに存在してよい。例えば、追加のプロセッサ610、615は、プロセッサ610と同じであってよい複数の追加のプロセッサ、プロセッサ610とヘテロジニアスもしくは非対称であってよい複数の追加のプロセッサ、(例えば、グラフィックアクセラレータもしくはデジタル信号処理(DSP)ユニットのような)複数のアクセラレータ、複数のフィールドプログラマブルゲートアレイ、又は任意の他のプロセッサを含んでよい。物理リソース610、615の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性等を含む様々な利益の基準に関して、様々な違いが存在し得る。これらの違いは、プロセッサ610、615の間の非対称性及びヘテロジニアス性として、違いそのものを効果的に表してよい。少なくとも1つの実施形態について、様々なプロセッサ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制御ロジック(「CL」)872及び882を含んでよいことを示す。少なくとも1つの実施形態について、CL872、882は、図5A、5B及び7に関連して上述されたもののような集積メモリコントローラユニットを含んでよい。さらに、CL872、882は、I/O制御ロジックをさらに含んでよい。図8は、メモリ832、834がCL872、882に連結されてよいのみならず、I/Oデバイス814がロジック872、882を制御するためにさらに連結されてよいことを示す。レガシI/Oデバイス815は、チップセット890に連結されてよい。
図9は、本開示の複数の実施形態に係るSoC900のブロック図を示す。図5AおよびBにおける複数の同様のエレメントは、同様の参照番号を付される。また、複数の破線のボックスは、より高度な複数のSoCにおける任意の機能を表してよい。相互接続ユニット902は、1つ又は複数のコア902A−Nのセット及び共有キャッシュユニット906を含んでよいアプリケーションプロセッサ910と、システムエージェントユニット910と、バスコントローラユニット916と、集積メモリコントローラユニット914と、集中画像表示ロジック908、スチール及び/又はビデオカメラ機能を提供するイメージプロセッサ924、ハードウェアオーディオ加速を提供するオーディオプロセッサ926、ビデオ符号化/復号加速を提供するビデオプロセッサ928を含んでよい1つ又は複数のメディアプロセッサのセット920と、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1つ又は複数の外部ディスプレイに連結するディスプレイユニット940とに連結されてよい。
図10は、本開示の複数の実施形態に係る少なくとも1つの命令を実行可能な中央処理装置(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)コントローラ1060、セキュリティエンジン1065、及びI2S/I2Cコントローラ1070を含む。他のロジック及び回路は、図10のプロセッサに含まれてよく、より多くのCPU又はGPU及び他の周辺インタフェースコントローラを含む。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的なデータによって実装されてよく、このデータは、機械によって読み出された場合に、機械に、本明細書において説明される複数の技術を実行するロジックを製造させる。「IPコア」として知られるこのような表現は、有形の機械可読媒体(「テープ」)にストアされてよく、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。例えば、ARMホールディングスによって開発されたプロセッサのCortex(商標)ファミリのようなIPコア、及び中国科学院のコンピューティング技術研究所(ICT)によって開発された龍芯(Loongson)IPコアは、テキサスインスツルメンツ、クアルコム、アップル、又はサムスンのような様々な顧客又はライセンシにライセンス供与又は販売され、これらの顧客又はライセンシによって製造されるプロセッサに実装されることがある。
図11は、本開示の複数の実施形態に係る複数のIPコアの開発を示すブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120及び/又はハードウェアもしくはソフトウェアモデル1110を含んでよい。一実施形態において、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続(例えば、インターネット)1150又は無線接続1160を介して、ストレージ1130に提供されてよい。シミュレーションツール及びモデルによって生成されたIPコア情報は、次に、製造施設に送信されてよく、それは、サードパーティによって、少なくとも1つの実施形態に係る少なくとも1つの命令を実行するように製造されてよい。
いくつかの実施形態において、1つ又は複数の命令は、第1のタイプ又はアーキテクチャ(例えば、x86)に対応し、異なるタイプ又はアーキテクチャのプロセッサ(例えば、ARM)上で変換又はエミュレートされてよい。一実施形態に係る命令は、従って、ARM、x86、MIPS、GPU、又は他のプロセッサタイプもしくはアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行されてよい。
図12は、本開示の複数の実施形態に係る第1のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされ得るかを示す。図12において、プログラム1205は、一実施形態に係る命令と同じ又は実質的に同じ機能を実行可能ないくつかの命令を含む。しかしながら、プログラム1205の複数の命令は、プロセッサ1215とは異なる又はこれと非互換性のタイプ及び/又はフォーマットであることがあり、これは、プログラム1205のタイプの命令が、プロセッサ1215によってネイティブで実行できない可能性があることを意味する。しかしながら、エミュレーションロジック1210の補助により、プログラム1205の複数の命令は、プロセッサ1215によってネイティブで実行可能な複数の命令に変換されてよい。一実施形態において、エミュレーションロジックは、ハードウェアで具現化されてよい。他の実施形態において、エミュレーションロジックは、ソフトウェアを含む有形の機械可読媒体で具現化されてよく、これにより、プログラム1205のタイプの複数の命令を、プロセッサ1215によってネイティブで実行可能なタイプに変換する。複数の他の実施形態において、エミュレーションロジックは、固定機能又はプログラマブルハードウェアと有形の機械可読媒体にストアされたプログラムとの組み合わせであってよい。一実施形態において、プロセッサは、エミュレーションロジックを含み、複数の他の実施形態において、エミュレーションロジックは、プロセッサの外部に存在し、サードパーティによって提供されてよい。一実施形態において、プロセッサは、プロセッサに含まれ、又はこれに関連付けられたマイクロコード又はファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体で具現化されたエミュレーションロジックをロードしてよい。
図13は、本開示の複数の実施形態に係るソース命令セットにおける複数のバイナリ命令をターゲット命令セットにおける複数のバイナリ命令に変換するソフトウェア命令コンバータの利用を対比したブロック図を示す。示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであってよいが、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図13は、高水準言語1302のプログラムが、x86コンパイラ1304を用いてコンパイルされてよく、これにより、少なくとも1つのx86命令セットコアを有するプロセッサ1316によってネイティブで実行可能なx86バイナリコード1306を生成することを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1316は、インテルの少なくとも1つのx86命令セットコアを有するプロセッサと実質的に同じ結果を実現すべく、(1)インテルx86命令セットコアの命令セットの大部分又は(2)インテルの少なくとも1つのx86命令セットコアを有するプロセッサ上で動作することを目的とした複数のアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンを互換的に実行又は他の方法で処理することによって、インテルの少なくとも1つのx86命令セットコアを有するプロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表す。x86コンパイラ1304は、x86バイナリコード1306(例えば、オブジェクトコード)を生成するように動作可能であってよいコンパイラを表し、このコードは、追加のリンク処理により、又は当該処理がなくても、少なくとも1つのx86命令セットコアを有するプロセッサ1316上で実行されてよい。同様に、図13は、高水準言語1302のプログラムが、代替的な命令セットコンパイラ1308を用いてコンパイルされてよく、これにより、少なくとも1つのx86命令セットコアを有さないプロセッサ1314(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールの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からの複数のビデオ信号の出力を、例えば、mobile industry processor interface(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は、マイクロアーキテクチャであってよい。命令アーキテクチャ1500は、命令セットアーキテクチャ1400の1つ又は複数の態様を実装してよい。さらに、命令アーキテクチャ1500は、プロセッサ内の複数の命令を実行する複数のモジュール及びメカニズムを示してよい。
命令アーキテクチャ1500は、1つ又は複数の実行エンティティ1565に通信可能に連結されるメモリシステム1540を含んでよい。さらに、命令アーキテクチャ1500は、複数の実行エンティティ1565及びメモリシステム1540に通信可能に連結されるユニット1510のようなキャッシュ及びバスインタフェースユニットを含んでよい。一実施形態において、複数の命令の複数の実行エンティティ1565へのロードは、1つ又は複数の実行ステージによって実行されてよい。このようなステージは、例えば、命令プリフェッチステージ1530、デュアル命令復号ステージ1550、レジスタリネーミングステージ1555、発行ステージ1560、及びライトバックステージ1570を含んでよい。
一実施形態において、メモリシステム1540は、実行済み命令ポインタ1580を含んでよい。実行済み命令ポインタ1580は、複数のストランドによって表されるスレッド内のアウトオブオーダ発行ステージ1560において、複数の命令のバッチ内において、最も古いディスパッチされていない命令を特定する値をストアしてよい。実行済み命令ポインタ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の処理の必要性の情報をストアする任意の適した数及び種類のメカニズムを含んでよい。一実施形態において、メモリシステム1540は、メモリ又はレジスタへの書き込み又はこれらからのリードバックを実行する複数の命令に関する情報をストアするロードストアユニット1530を含んでよい。他の実施形態において、メモリシステム1540は、物理アドレスと仮想アドレスとの間におけるアドレス値のルックアップを提供するトランスレーションルックアサイドバッファ(TLB)1545を含んでよい。さらに他の実施形態において、バスインタフェースユニット1520は、仮想メモリへのアクセスを容易にするメモリ管理ユニット(MMU)1544を含んでよい。またさらに他の実施形態において、メモリシステム1540は、レイテンシを低減させるべく、複数の命令が実際に実行される必要が生じる前に、メモリからこのような命令を要求するプリフェッチャ1543を含んでよい。
命令を実行する命令アーキテクチャ1500のオペレーションは、複数の異なるステージを通して実行されてよい。例えば、ユニット1510を用いて、命令プリフェッチステージ1530は、プリフェッチャ1543を通して命令にアクセスしてよい。取得された複数の命令は、命令キャッシュ1532にストアされてよい。プリフェッチステージ1530は、高速ループモードの選択肢1531を可能にしてよく、所与のキャッシュ内に適合するように十分小さいループを形成する一連の命令が実行される。一実施形態において、このような実行は、例えば、命令キャッシュ1532からの複数の追加の命令へのアクセスを必要とすることなく実行されてよい。何の命令をプリフェッチするかの決定は、例えば、分岐予測ユニット1535によってなされてよく、当該ユニットは、コードの複数の分岐1557のいずれが次に実行されるかを決定すべく、グローバル履歴1536における実行の複数のインジケーション、複数のターゲットアドレス1537のインジケーション、又はリターンスタック1538のコンテンツにアクセスしてよい。このような分岐は、結果としてプリフェッチされる可能性があってよい。複数の分岐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の複数のレジスタ、キュー、又は他の構造にデータを書き込んでよい。発行ステージ1560において構成された複数の命令の順序に応じて、ライトバックステージ1570のオペレーションは、実行されるべき複数の追加の命令を可能にしてよい。命令アーキテクチャ1500の性能は、トレースユニット1575によって監視又はデバッグされてよい。
図16は、本開示の複数の実施形態に係るプロセッサの実行パイプライン1600のブロック図である。実行パイプライン1600は、例えば、図15の命令アーキテクチャ1500のオペレーションを示してよい。
実行パイプライン1600は、複数の段階又はオペレーションの任意の適した組み合わせを含んでよい。1605において、次に実行されるべき分岐の複数の予測がなされてよい。一実施形態において、このような予測は、複数の命令の前の実行及びこれらの結果に基づいてよい。1610において、実行の予測された分岐に対応する複数の命令は、命令キャッシュにロードされてよい。1615において、命令キャッシュにおける1つ又は複数のこのような命令は、実行のためにフェッチされてよい。1620において、フェッチされた複数の命令は、マイクロコード又はより具体的な機械言語に復号されてよい。一実施形態において、複数の命令は、同時に復号されてよい。1625において、複数の復号された命令内における複数のレジスタ又は他のリソースへの参照は、再割り当てされてよい。例えば、複数の仮想レジスタへの参照は、複数の対応する物理レジスタへの参照に置換されてよい。1630において複数の命令は、実行のために複数のキューにディスパッチされてよい。1640において、複数の命令は、実行されてよい。このような実行は、任意の適した態様で実行されてよい。1650において、複数の命令は、適した実行エンティティに発行されてよい。命令が実行される態様は、その命令を実行する具体的なエンティティによって異なってよい。例えば、1655において、ALUは、複数の演算機能を実行してよい。ALUは、そのオペレーションのために単一のクロックサイクル及び2つのシフタを用いてよい。一実施形態において、2つのALUが用いられてよく、従って、1655において、2つの命令が実行されてよい。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は、オーディオユニット1764に通信可能に連結されてよく、次にオーディオユニット1764は、DSP1760に通信可能に連結されてよい。オーディオユニット1764は、例えば、オーディオコーデック及びクラスD増幅器を含んでよい。SIMカード1757は、WWANユニット1756に通信可能に連結されてよい。WLANユニット1750及びBluetooth(登録商標)ユニット1752、ならびにWWANユニット1756のようなコンポーネントは、次世代フォームファクタ(NGFF)で実装されてよい。
本開示の複数の実施形態は、複数のストア命令をソート及びリタイアする命令及びロジックを含む。一実施形態において、ソート及びリタイアは、ストアバッファのような順序付けされていないバッファから実行されてよい。命令及びロジックは、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、又は他の処理装置に従って実行されてよい。一実施形態において、このような処理装置は、アウトオブオーダプロセッサを含んでよい。さらなる実施形態において、このような処理装置は、マルチストランドアウトオブオーダプロセッサを含んでよい。図18は、本開示の複数の実施形態に係る複数のストア命令をリタイア及びソートする例示的なシステム1800を示す。図18には、説明された動作を実行する複数の特定のエレメントが示され得るが、システム1800の任意の適した部分が、本明細書において説明される機能又は動作を実行してよい。
システム1800は、複数のストランドを並列に実行する任意の適した複数のエンティティを含むマルチストランドアウトオブオーダプロセッサ1808を含んでよい。スレッドの複数の命令は、ストランドにおいてグループ化されてよい。一実施形態において、マルチストランドアウトオブオーダプロセッサ1808は、複数の他のストランドの複数の命令に対して、各ストランドの複数の命令を実行してよく、これにより、複数の命令が、プログラム順序外でフェッチ、発行、及び実行される。メモリ及び割り込み可能命令を除く全ての命令は、プログラム順序外でコミット又はリタイアされてよい。しかしながら、一実施形態において、メモリ及び割り込み可能命令は、相対的に又は全体として、インオーダでコミット又はリタイアされてよい。このようなインオーダのコミットメント及びリタイアメントは、データの従属関係により起こり得るミス又はエラーの結果たり得る。インオーダ実行は、連続的なPO値に従っての実行を含んでよい。アウトオブオーダ実行は、必ずしも連続的なPO値に従わない実行を含んでよい。システム1800は、このようなマルチストランドアウトオブオーダプロセッサ1808の複数のエレメントを示してよく、これらは、任意のプロセッサコア、論理プロセッサ、プロセッサ、又は図1A−17に示されるもののような他の処理エンティティもしくは複数のエレメントを含んでよい。
システム1800は、命令ストリーム1802を処理する発行ステージ1560を含んでよい。命令ストリーム1802は、任意の適した数及び種類のストランド1804を含んでよい。各ストランド1804は、互いに従属するデータであるPOによって順序付けられた一連の命令を含んでよい。さらに、各ストランド1804は、例えば、複数のフォーキング又はループオペレーションを通して、複数の他のストランドに関連してよい。所与のストランド内の複数の命令は、互いに対してインオーダで実行されてよい。上述されたように、POは、コードのセマンティックの正確な実行を保証すべく、複数の命令を順序付ける命令固有の番号を含んでよい。複数のストランドは、発行ステージ1560、バイナリ変換器、又は任意の他の適したメカニズムによって指定されてよい。
システム1800は、複数の命令のサブセットにPO値を割り当ててよい。複数のPO値は、アウトオブオーダ処理及び実行が行われた後で、その順序が再形成されるべきこれらの命令に、割り当てられてよい。このような命令は、例えば、メモリ命令又は割り込み可能命令を含んでよい。複数のメモリ命令は、ロード及びストアのようなメモリ、キャッシュ、又はレジスタに対して読み出し又は書き込みを行う命令を含んでよい。複数の割り込み可能命令は、割り込みを発生させることを可能とし得る命令を含んでよい。
プロセッサ1808は、複数の命令を、実行のために複数の処理リソースに割り当てる割り当てステージ1814をさらに含んでよい。さらに、割り当てステージ1814は、実行において用いられる複数のリソースをリネーミングしてよく、このようなリネーミングは、ステージ1804の並列実行を可能にしてよく、異なるステージ1804からの複数の命令は、同じメモリ又はレジスタにアクセスするが、実際には、互いにデータは独立である。さらに、システム1800は、既に実行された複数の命令のリタイアメント及びコミットメントを処理するライトバックステージ1570を含んでよい。
一実施形態において、システム1800は、実行済み命令ポインタ(EIP)1806を含んでよい。実行済み命令ポインタ1580は、まだ実行されていない命令ストリーム1802の最も古いプログラム順序POを特定する値をストアしてよい。さらなる実施形態において、実行済み命令ポインタ1580は、複数のストランド1804の中で最も古いPOを有する個々のストランド1804のPOをストアしてよい。複数のストランドは、互いに並列に、かつ互いにアウトオブオーダで実行されてよいので、複数のストランド1804のうち1つは、ストランド1804の他のものよりはるかに低いPOを含んでよい。このような結果が生じ得るのは、例えば、ストランドが概してより低いPOを有する複数の命令を含んでいた、又はストランドがその複数の命令の多くを実行していなかったことによる。
複数の命令が実行されると、これらは、ライトバックステージ1570において、リタイアメント及びコミットメントのために、1つ又は複数のバッファに書き込まれてよい。一実施形態において、ライトバックステージ1570は、複数のストア命令がコミットされるまでこれらを保持するストアバッファ1810を含んでよい。複数のストア命令が実行されてストアバッファ1810に書き込まれると、これらは、これらが実行された順序でなされてよい。従って、複数のストア命令は、POに関して順序付けられなくてよい。これは、図18の複数の例に示される。ストアバッファ1810の複数のボトムエントリは、(ストアバッファ1810における期間に関して)複数の最も古いエントリを含んでよく、ストアバッファ1810の複数のトップエントリは、ストアバッファ1810の複数の最新のエントリであってよい。ストアバッファ1810内における複数のエントリの順序は、必ずしもこのようなエントリのPOと何らかの関係を有するものではない。
さらに、複数の命令は、これらがアウトオブオーダ実行のためにリオーダされる前は、POに対してインオーダであったとしてもよい。リオーダは、複数の命令を異なるストランド1804に分割し、複数のストランド1804をアウトオブオーダで並列に実行することによってなされてよい。従って、様々なストランド1804からの複数の命令の実行は、アウトオブオーダでの複数の命令の実行をもたらしてよい。従って、複数の命令が実行されてストアバッファ1810にストアされるので、これらは、アウトオブオーダで出現してよい。
複数のメモリ命令が実行された後で、これらは、インオーダのリタイアメント又はコミットメントを要求してよい。プロセッサ1808の(実際のレジスタ及びシステムメモリのような)アーキテクチャ状態に対する複数の結果値のコミットメントは、書き込まれた値に対して、その後データ従属性エラーが起こり得ないことを要求してよい。さもなければ、メモリ整合性モデルの阻害、制御従属性、名称及びデータ従属性、又は例外が生じることがある。
さらに、複数の命令は、インオーダの場合でさえ、連続的でなくてよい。例えば、連続的に出現する複数の命令は、連続的に付番された複数のPO値を有さなくてよい。連続的な複数の命令の間におけるPO値のギャップは、例えば、複数の命令に対するPO値の静的割り当てに起因することがある。複数の命令は、実際には、複数の動的な分岐を実装してよく、これらは、PO値の静的割り当て時に予測不可能であってよい。複数の命令のコンパイラは、どのようにプログラムの命令フローが進むかを正確に見る可視性を有さなくてよい。選択されなかったパスは、実行されないことがあり、複数のPO値のギャップは、実際に実行されている複数の命令に存在してよい。さらに、複数のループは、静的な未知数のイテレーションにより行われてよい。
従って、ストアバッファ1810の複数のエレメントをリタイアさせるべく、そのコンテンツは分析されなければならず、これにより、リタイアメントがインオーダで実行可能となる。このようなインオーダリタイアメントは、実行が継続し、複数の命令がアウトオブオーダで到達し、複数のPO値が不連続な場合でさえ、実行可能である。プロセッサ1808は、ストアバッファ1810の複数のエレメントをどうやってインオーダでリタイアさせるかを特定するサーチモジュール1816を含んでよい。一実施形態において、サーチモジュール1816は、サーチモジュール1816が評価し得るストアバッファ1810の複数のエレメントのPO値の範囲を特定してよい。他の実施形態において、サーチモジュール1816は、このような範囲を特定してよく、これにより、ストアバッファ1810の複数の候補エレメントは、データ従属性エラーを生じさせる要求をしない。さらに他の実施形態において、サーチモジュール1816は、POに従って、複数の候補エレメントをソートし、正確なリタイアメントのためにこれらを順序付けてよい。
ストアバッファ1810のストア命令が実行し、コミット可能である場合に、これはシニアストアと称されてよい。複数のシニアストアは、ストア要求キュー(SRQ)1812に書き込まれてよく、これは、ファーストインファーストアウトデータ構造によって実装されてよい。一実施形態において、複数のシニアストアは、EIP1806より小さいRPOを含むものとして分類されてよい。この要求によって、SRQ1812は、ストアバッファ1810においてRPOがより低い全てのストアを有することが保証され得る。他の実施形態において、ストアをシニアストアとして指定すべく、RPOがより低い全てのストアは、シニアストアとして指定されていてもよい。このような指定は、リタイアのために複数のストアの正確なシーケンスを保証してよい。さらに他の実施形態において、シニアストアは、ストアが実行するために利用可能なそのリニアアドレス及びデータを成功裏に変換させるものとして分類されてよい。この要求によって、複数のシニアストアは、データ従属性の問題を回避することができる。
一実施形態において、サーチモジュール1816は、リタイアのためにストアバッファ1810において複数のストア命令をサーチする上で、ストアバッファ1810のサイズによってさらに制約を受けてよい。具体的には、サーチモジュール1816は、Nとして指定されるストアバッファ1810の読み出しポートの数によって、制約を受けてよい。読み出しポートの数は、SRQ1812に並列に書き込み可能なストア命令の数を限定する。
また、いくつかの実施形態において、ストアバッファ1810の一部は、既にコミットされてよく、従ってサーチモジュール1816によるソートを必要としない。ストアコミットメントポインタ(SCP)は、最後にコミットされたストア命令のPOを指定してよい。
一実施形態において、サーチバッファ1816は、ストアバッファ1810において、実行されたがコミットされていないストア命令をサーチしてよい。具体的には、サーチバッファ1816は、コミットメント適格の、実行されたがコミットされていないストア命令をサーチしてよい。このようなストア命令は、EIP1806にストアされたPO値より小さいRPOを含むものを含んでよい。さらに、このようなストア命令は、当該命令に利用可能な、変換されたリニアアドレス及びデータを含むものを含んでよい。さらに、サーチは、RPOに関して連続的な順序で実行されてよく、これにより、全ての前のストアもシニアストアである場合だけ、ストアはシニアと見られてよい。さらに、サーチバッファ1816は、複数の値を読み出し、これらをSRQ1812に書き込むことの効率性を最適化又は向上させる複数の命令をサーチしてよい。このようなサーチは、従って、ストアバッファ1810の読み出しポートの数であるNによって限定されるストアの数を検索することを含んでよい。一度このようなN個又はこれより少ない候補ストアが見出されていると、サーチモジュール1816は、これらをソートし、これらをコミットメントのためにSRQ1812に書き込んでよい。
図19は、本開示の複数の実施形態に係るサーチモジュール1816のオペレーションに対する複数の制約を示す。ストアバッファ1810は、[6,1,16,7,5,8,11,8]のPOを含む最も古いものから最も新しいものまで、複数のコミットされていないエレメントを含んでよい。EIP1806は、12のPO値を示してよい。さらに、SCP1808は、2のPO値を示してよい。さらに、ストアバッファ1810の読み出しポートの数は、4であってよい。さらに、図19の例に示される全てのエレメントは、ストアがリニアに変換されたアドレスを有し、実行を終了しているという点において、別途コミットメント適格であると仮定する。
単にRPO<EIPをサーチし、サーチモジュール1816は、ストアバッファ1810に7つのシニアストア候補があるということを、候補のPO数がEIP1806のPO値である12より小さいという事実に基づいて決定してよい。しかしながら、7つの候補は、ストアバッファ1810の読み出しポートの数より大きい。
図20は、本開示の複数の実施形態に係る図19に示されるアプローチにおいて直面する問題に対処するサーチモジュール1816の例示的なオペレーションを示す。ストアバッファ1910は、図19に示されるものと同じ態様で確立されてよい。EIP1806は、依然として値12を有してよく、ストアバッファ1810は、4つの読み出しポートを有してよく、SCP1808は、依然として値2を有してよい。
サーチモジュール1816は、調整可能なサーチポインタを含んでよく、これは、サーチされる複数のPO値の可変的な上限として機能してよい。サーチポインタは、別途見出された結果の数が過度に大きい又は小さい場合に、調整されてよい。EIP1806のものより小さいPO値を含む複数のストアをサーチするのではなく、一実施形態において、サーチポインタは、常にEIP1806のPO値より小さい又はこれに等しいものとして定義されてよい。他の実施形態において、サーチポインタは、常にEIP1806のPO値より小さいものとして定義されてよい。様々な実施形態において、サーチポインタは、前に実行された、ストアバッファ1810において複数の候補ストアをサーチする試みに基づいて、再定義されてよい。
EIP1806は、EIPより低いPO値を含む全てのストア命令が、リタイアのために既に考慮されている、又はリタイアしたことを保証する効果を有してよい。EIP1806より小さいサーチポインタを選択することによって、サーチモジュール1816は、ストアバッファ1810に存在しないEIP1806より大きいPO値を含むストア命令が存在しないことを保証してよい。このようなストアは、アウトオブオーダ実行に起因してまだフェッチされていないもの、又は依然としてディスパッチを待っている可能性があるものを含んでよい。ストアポインタは、このような準備が完了していない命令が考慮されず、従ってストアの順序を乱さないことを保証してよい。
さらに、サーチモジュール1816は、サーチされるPO範囲の下限として、SCP1808を用いてよい。例えば、サーチモジュール1816は、最初のサーチポインタがPO値10を有すると決定してよい。第1のイテレーションにおいて、サーチモジュール1816は、ストアバッファ1810のいくつのエントリがSCP1808とサーチポインタとの間のPO値を含むかを決定してよい。5つのこのようなエントリがストアバッファ1810に存在してよく、各々が別途コミットメントの準備完了であると仮定する。5つのこのようなエントリは、ストアバッファ1810における4つの読み出しポートより大きい。従って、コミットメントが当該5つのエントリに対して実行される場合、これは非効率となることがある。
SCP1808は、既にコミットされた全てのストアのPOを記録したものと考慮されてよく、従って、全てのコミットされたストアのPOより大きい。最初に、サーチポインタは、経験的なデルタ値による現在のSCP1808より大きい値にセットされてよい。
次に、サーチモジュール1816は、サーチポインタを再計算し、ストアバッファ1810の読み出しポートの数とより良好に一致するように、PO範囲をより小さくしてよい。例えば、サーチポインタは、9にセットされてよい。サーチの次のイテレーションにおいて、サーチモジュール1816は、ストアバッファ1810のエントリのうち4つが、SCP1808とサーチポインタとの間のPO値を有すると決定してよい。当該4つのエントリは、従って、順序付けられ、SRQ1812に書き込まれてよい。
図21A、21Bおよび21Cは、本開示の複数の実施形態に係るサーチモジュール1816の例示的なオペレーションを示す。図21Aの(1)において、サーチモジュール1816は、サーチポインタの値を予測してよい。一実施形態において、サーチポインタは、SCP1808にオフセット又はデルタを加算した値を有してよい。第1のイテレーションにおいて、デルタは、1つ又は任意の他の許容可能なデフォルト値の初期値を有してよい。様々な実施形態において、サーチポインタは、EIP1806より小さく、かつSCP1808より大きく維持されてよい。
(2)において、ストアバッファ1810のサーチは、サーチモジュール1816によって実行されてよい。サーチは、任意の適した態様で実行されてよい。一実施形態において、サーチは、CAMサーチとして実行されてよい。サーチは、ストアバッファ1810のいくつのエレメントがサーチポインタより小さいかを決定してよい。さらなる実施形態において、サーチは、このようなエレメントがSCP1808より大きいか否かをさらに決定してよい。さらに他の実施形態において、サーチは、ストアバッファ1810の複数のエレメントが別途コミットメントの準備完了であるか否かを決定してよい。このような条件は、所与のストアのリニアアドレスが変換され、必要なデータが利用可能であることを含んでよい。
(3)において、複数のサーチ結果が戻されてよい。コミットメントのための複数のチェックが実行されなかった場合、一実施形態において、これらは、複数の結果がストアバッファ1810から戻されたときに実行されてよい。
(4)において、サーチモジュール1816は、ストアバッファ1810の候補ストアの数がストアバッファ1810の読み出しポートの数を超えるか否かを決定してよい。超える場合、サーチは、図21Bに示される新たに予測されるサーチポインタで繰り返されてよい。ストアバッファ1810の候補ストアの数がストアバッファ1810の読み出しポートの数以内である場合、図21Cの複数のオペレーションが実行されてよい。
図21Bの(1)において、サーチポインタが予測されてよい。サーチモジュール1816は、デルタを予測するか、又は再びSCP1808からオフセットしてよい。一実施形態において、予測されたデルタは、前のサーチから見出された結果の数に基づいてよい。他の実施形態において、予測されたデルタは、ストアバッファ1810の読み出しポートの数Nに基づいてよい。
(2)において、サーチモジュール1816は、更新されたサーチポインタを用いて、ストアバッファ1810に対してCAMサーチを実行してよい。(3)において、複数の結果が戻されてよく、(4)において、ストアバッファ1810のいくつのストアが複数のコミット条件を満たすかが決定されてよい。サーチに一致するストアバッファ1810のストアの数がストアバッファ1810の読み出しポートの数を超える場合、図21Bの複数のオペレーションは、繰り返されてよい。別途、サーチモジュール1816は、図21Cの複数のオペレーションを実行してよい。
図21Cの(1)において、サーチモジュール1816は、N個又はこれより少ないシニアストアを、ソートネットワーク2102にルーティングしてよい。ソートネットワーク2102は、PO値に従って、ハードウェアにおける複数のシニアストアをソートしてよい。(2)において、ソートネットワーク2102は、ソートされた複数のシニアストアをSRQ1812にルーティングしてよい。一実施形態において、複数のシニアストアのストアバッファ識別子だけが、SRQ1812に書き込まれてよい。複数のシニアストアは、コミットされてよい。
図22は、本開示の複数の実施形態に係るサーチポインタを予測又はセットするサーチモジュール1816の例示的なオペレーションの図である。一実施形態において、サーチモジュール1816は、EIP1806のPO値を用いて、サーチポインタをセットしてよい。他の実施形態において、サーチモジュール1816は、SCP1808のPO値を用いて、サーチポインタをセットしてよい。さらに他の実施形態において、サーチモジュール1816は、前のサーチで見出されたストアオペレーションの数を用いて、サーチポインタをセットしてよい。このような見出されたストアオペレーションの数は、Mとして指定されてよい。前にサーチがなされなかった場合、Mはゼロにセットされてよい。またさらに他の実施形態において、サーチモジュール1816は、Nとして指定され得るストアバッファ1810の読み出しポートの数を用いて、サーチポインタをセットしてよい。
サーチモジュール1816は、サーチポインタをEIP1806より小さく、かつSCP1808より大きくするという制約を維持してよい。いくつかの実施形態において、EIP1806及びSCP1808が2つの値の差より小さい場合、サーチポインタは、EIP1806としてセットされてよい。
一実施形態において、サーチモジュール1816は、EIP1806及びSCP1808のより小さい方に、算出されたデルタ値を加算したものとしてサーチポインタをセットしてよい。前にサーチが実行されなかった場合、最初に、デルタ値は、デフォルト値にセットされてよい。例えば、デルタ値は、最初に1としてセットされてよい。
他の実施形態において、サーチモジュール1816は、前のサーチで見出されたストアの数であるMに基づいて、デルタ値をセットしてよい。従って、サーチモジュール1816は、より効率的なストアの数がストアバッファ1810から選択されるまで、反復的にデルタを調整してよい。さらなる実施形態において、サーチモジュール1816は、ストアバッファ1810に利用可能な読み出しポートの数であるM及びNに基づいて、デルタ値をセットしてよい。
一実施形態において、サーチモジュール1816は、数学的計算の実行に十分な複数のエレメントで実装されてよい。このような実施形態において、サーチモジュール1816は、デルタ計算モデル2202を用いてよい。デルタ計算モデル2202は、現在のデルタが、前のデルタをM倍にしてNで除算したものであることを規定してよい。結果が分数の場合、整数に切り上げ又は切り捨てられてよい。しかしながら、デルタ計算モデル2202を用いるには、乗算及び除算エレメントを必要としてよい。
他の実施形態において、サーチモジュール1816は、デルタを決定すべく、複数のシフタ及び加算器で実装されてよい。このような実施形態は、乗算及び除算エレメントを必要としなくてよい。例えば、サーチモジュール1816は、複数のデルタ値を決定すべく、経験則モデル2204を用いてよい。経験則モデル2204は、前のデルタ値がシフトされる又はビット単位で加算されることを規定してよい。例えば、Mが0−1の範囲にあった場合、前のデルタ値は2ビット左にシフトされ、結果的にデルタは4倍に増加してよい。Mが2の範囲にあった場合、前のデルタ値は1ビット左にシフトされ、結果的にデルタは2倍に増加してよい。Mが3−4の範囲にあった場合、前のデルタ値は維持されてよい。Mが5−8の範囲にあった場合、前のデルタ値は1ビット右にシフトされ、結果的にデルタは2分の1に減少してよい。Mが9−16の範囲にあった場合、前のデルタ値は2ビット右にシフトされ、結果的にデルタは4分の1に減少してよい。Mが17−32の範囲にあった場合、前のデルタ値は3ビット右にシフトされ、結果的にデルタは8分の1に減少してよい。Mが33−64の範囲にあった場合、前のデルタ値は4ビット右にシフトされ、結果的にデルタは16分の1に減少してよい。
経験則モデル2204において指定される複数のパラメータは、実験的に決定されてよく、又はストアバッファ1810のサイズ(64のエントリの例示的なサイズによる)及びストアバッファ1810上の読み出しポートの数(4つのポートの例示的なサイズによる)に基づいてよい。複数の他の範囲が、複数の他のストアバッファのサイズのために用いられてよい。サーチモジュール1816は、従って、MとNとの間の不一致に比例応答して、複数のデルタ値を変更してよい。
複数の条件を満たすストアバッファ1810から複数のストアのグループを見出すために必要とされるサーチモジュール1816によるサーチイテレーションの数は、性能に影響を与えることがある。ストアバッファ1810において一致するストアの数がNよりはるかに大きい場合、より多数のイテレーションが必要とされ得る。さらに、Nより少ないシニアストアを生じさせる第1のイテレーションは、ストアバッファ1810の全ての読み出しポートを活用していないことがある。従って、複数のデルタ値の予測は、上述されたように、サーチの過程の中で調整されてよい。
複数の命令が厳密にインオーダでフェッチされた場合、複数の命令は、インオーダでリタイアされてよく、従ってサーチモジュール1816の必要性が失われる。しかしながら、このようなアプローチは、複数の命令に付属する複数のエイジがフェッチ及び実行されると、これらを用いることを必要とすることがある。さらに、これにより、アウトオブオーダ処理の利点が失われることがあり、複数の命令は、アウトオブオーダでフェッチされ、並列処理を増加させる。さらに、複数の異なるストランドは、プロセッサ1808によってアウトオブオーダでフェッチされる。これは、複数の命令をインオーダでフェッチするというあらゆる要求と相反する。
図23は、本開示の複数の実施形態に係る複数のストアをサーチ及び順序付ける方法2300の例示的な実施形態を示す。一実施形態において、方法2300は、マルチストランドアウトオブオーダプロセッサにおいて実行されてよい。方法2300は、任意の適したポイントで開始してよく、任意の適した順序で実行してよい。一実施形態において、方法2300は、2305において開始してよい。
2305において、実行されるべく順序付けられた命令ストリームは、複数のストランドに分割されてよい。複数のストランドは、互いに並列に実行されてよい。複数のストランドは、所与のストランド内でデータ従属性を有してよいが、互いに対してアウトオブオーダで実行されてよい。さらに、各ストランド内において、複数の命令は、インオーダで実行されてよい。複数の命令は、順序付け目的のためにPOインジケーションを含んでよい。連続的に順序付けられた命令は、POに関して連続的に付番されなくてよい。連続的な複数の命令の間で、PO値のギャップが存在することがある。
2310において、複数の処理段階が実行されてよい。このような段階は、例えば、プロセッサにおけるフェッチ、発行、ディスパッチ、又は実行命令を含んでよい。実行サイクルは、実行されてよい。
2315において、各ストア命令が割り当てられると、これはN個の読み出しポートを有するストアバッファに書き込まれてよい。ストアバッファは、複数のストア命令が実行、リタイア、及びコミットされるまで、これらを含んでよい。複数のストア命令はアウトオブオーダでフェッチ及び実行されてよいので、これらは、アウトオブオーダでストアバッファに書き込まれてよく、従って、ストアバッファ内の複数のストア命令は、POに従って順序付けられなくてよい。
2320において、EIP及びSCP PO値が決定されてよい。EIP値は、まだ実行のためにディスパッチされていない複数の命令に対する全てのストランドの中で最小のPO値に対応してよい。SCP値は、最新のリタイア又はコミットされたストア命令のPO値に対応してよい。
2325において、複数のサーチパラメータを計算するために用いられる最初のデルタ値が決定されてよい。デフォルトのデルタ値は、1であってよい。
2330において、サーチの上限としてのサーチポインタが決定されてよい。一実施形態において、サーチポインタは、デルタ値に加算されるEIPとSCPとの間の最小値として選択されてよい。
2335において、ストアバッファは、サーチポインタより小さく、かつSCPより大きいPOを含む全てのエレメントについてサーチされてよい。2340において、複数の結果が評価され、複数のストアがコミットメントのための複数の条件を満たすか否かを決定してよい。このような基準は、例えば、これらのリニアアドレスが変換されたか否か、及びデータがこれらのオペレーションに利用可能か否かを含んでよい。2345において、複数の一致した結果は、M個の異なるストア命令として説明されてよい。
2350において、MがNより小さい又はこれに等しいか否か決定されてよい。小さい又はこれに等しく、かつM個のストア命令の全てがコミットメント基準に適合する場合に、方法2300は、2360に進んでよい。否の場合、方法2300は、2355に進んでよい。
2355において、デルタ値は調整されてよい。一実施形態において、デルタ値は、前のデルタ値及びMに基づいて調整されてよい。他の実施形態において、デルタ値は、前のデルタ値、M、及びNに基づいて調整されてよい。デルタ値は、例えば、計算モデルに基づいて調整されてよく、ここで、デルタは、M/Nで乗算される。他の例において、経験則モデルが用いられてよく、これにより、デルタ値はシフトされ、複数の関連する係数によってデルタを増加又は減少させる。デルタのシフト量は、決定されたMの値の範囲に基づいてよい。様々な実施形態において、デルタは、従って、前のサーチがストアバッファの利用可能な読み出しポートの数にどれだけ正確に又は不正確に一致していたかに従って、調整されてよい。方法2300は、2330に戻ってよい。
2360において、複数の結果は、PO値に従って、ハードウェアにおいてソートされてよい。2365において、複数の結果は、SRQに書き込まれ、又は別途コミットされてよい。一実施形態において、複数のストアバッファIDが、SRQに書き込まれてよい。2370において、方法2300が繰り返されるか否かが決定されてよい。繰り返される場合、方法2300は、2305又は任意の他の適したエレメントに戻ってよい。否の場合、方法2300は終了してよい。
方法2300は、任意の適した基準によって開始されてよい。さらに、方法2300は特定の複数のエレメントのオペレーションを説明するが、方法2300は、任意の適した組み合わせ又はタイプのエレメントによって実行されてよい。例えば、方法2300は、図1A−22に示される複数のエレメントによって、又は方法2300を実装するように動作可能な任意の他のシステムによって実装されてよい。このように、方法2300の好ましい初期化ポイント及び方法2300を備える複数のエレメントの順序は、選択された実装によって異なってよい。いくつかの実施形態において、いくつかのエレメントは、任意に省略され、再編成され、繰り返され、又は組み合わせられてよい。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア又はこのような複数の実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又は複数のストレージエレメントを含む)、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
プログラムコードは、本明細書において説明される複数の機能を実行し、出力情報を生成する複数の入力命令に適用されてよい。出力情報は、1つ又は複数の出力デバイスに、公知の方式で適用されてよい。これを適用する目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含んでよい。
プログラムコードは、処理システムと通信を行うために、高水準の手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ言語又は機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、その範囲において、何らかの特定のプログラミング言語に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、このデータは、機械によって読み出された場合に、機械に、本明細書において説明される複数の技術を実行するロジックを製造させる。「IPコア」として知られるこのような表現は、有形の機械可読媒体にストアされてよく、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。
このような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)及び光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)のような半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気又は光カード、又は複数の電子的命令のストアに適した任意の他のタイプの媒体のような記憶媒体を含む、機械又はデバイスによって製造もしくは形成される複数の物品の非一時的かつ有形の構成を含んでよい。
従って、本開示の複数の実施形態は、複数の命令を含む、又は本明細書において説明される複数の構造、回路、装置、プロセッサ及び/又はシステム機能を定義するハードウェア記述言語(HDL)のような設計データを含む非一時的かつ有形の機械可読媒体をさらに含んでよい。このような実施形態は、プログラム製品と称されてもよい。
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1つ又は複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令コンバータは、オンプロセッサであってよく、オフプロセッサであってよく、又は一部がオンプロセッサかつ一部がオフプロセッサであってよい。
従って、少なくとも一実施形態に係る1つ又は複数の命令を実行する複数の技術が開示されている。複数の特定の例示的な実施形態が複数の添付図面において説明及び図示されたが、このような実施形態は、単に例示であり、複数の他の実施形態に対する限定ではなく、当業者であれば本開示を参照することによって様々な他の変更に想到し得ることから、このような実施形態は、図示及び説明された具体的な複数の構造及び構成に限定されるものではないことを理解されたい。成長が速く、さらなる進歩が容易に予見し得ないこのような技術領域においては、本開示の原理又は添付された特許請求の範囲の範囲から逸脱することなく、技術的進歩を可能とすることによって促進されるように、開示された複数の実施形態は、構成及び詳細において容易に変更可能である。