[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP2024527169A - マルチストランドアウトオブオーダプロセッサにおいてリタイア可能な複数の命令を特定する命令及びロジック - Google Patents

マルチストランドアウトオブオーダプロセッサにおいてリタイア可能な複数の命令を特定する命令及びロジック Download PDF

Info

Publication number
JP2024527169A
JP2024527169A JP2016576104A JP2016576104A JP2024527169A JP 2024527169 A JP2024527169 A JP 2024527169A JP 2016576104 A JP2016576104 A JP 2016576104A JP 2016576104 A JP2016576104 A JP 2016576104A JP 2024527169 A JP2024527169 A JP 2024527169A
Authority
JP
Japan
Prior art keywords
instruction
instructions
logic
processor
executed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
JP2016576104A
Other languages
English (en)
Inventor
コサレフ、ニコライ
ワイ. シシュロフ、セルゲイ
アイヤー、ジャイェシュ
ブツゾフ、アレクサンダー
エイ. ババヤン、ボリス
クルチニコフ、アンドレイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2024527169A publication Critical patent/JP2024527169A/ja
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

プロセッサは、命令ストリームをアウトオブオーダで実行する第1のロジックを含み、命令ストリームは、複数のストランドに分割され、命令ストリーム及び各ストランドは、プログラム順序(PO)によって順序付けられる。プロセッサは、命令ストリームにおいて最も古いディスパッチされていない命令を決定し、最も古いディスパッチされていない命令に関連付けられたPO値を実行済み命令ポインタとしてストアする第2のロジックをさらに含む。命令ストリームは、ディスパッチされた命令及びディスパッチされていない命令を含む。プロセッサは、命令ストリームにおいて最も直近でリタイアした命令を決定し、最も直近でリタイアした命令に関連付けられたPO値をリタイアメントポインタとしてストアする第3のロジックと、前記リタイアメントポインタ及び前記実行済み命令ポインタの間において複数の命令の範囲を選択する第4のロジックと、リタイア可能な命令の範囲を特定する第5のロジックと、をさらに含む。

Description

本開示は、処理ロジック、マイクロプロセッサ、及びプロセッサ又は他の処理ロジックによって実行された場合に論理的、数学的、又は他の機能的オペレーションを実行する関連する命令セットアーキテクチャの分野に関する。
マルチプロセッサシステムが、ますます一般的になってきている。マルチプロセッサシステムの用途は、動的ドメインのパーティショニングからデスクトップコンピューティングに至るまでの用途を含む。マルチプロセッサシステムを活用すべく、実行されるべきコードは、様々な処理エンティティによる実行のために、複数のスレッドに分離されてよい。各スレッドは、互いに並列に実行されてよい。さらに、処理エンティティの有用性を向上させるべく、アウトオブオーダ実行が用いられてよい。アウトオブオーダ実行は、複数の命令に必要な入力が利用可能となる場合に、このような命令を実行してよい。従って、コードシーケンスにおいて後で出現する命令は、コードシーケンスにおいて先に出現する命令より前に実行されてよい。
複数の実施形態が、添付図面の複数の図において、限定的ではなく、例として示される。
本開示の複数の実施形態に係る例示的なコンピュータシステムのブロック図であり、コンピュータシステムは、命令を実行する複数の実行ユニットを含んでよいプロセッサによって形成される。
本開示の複数の実施形態に係るデータ処理システムを示す。
文字列比較オペレーションを実行するデータ処理システムの複数の他の実施形態を示す。
本開示の複数の実施形態に係るプロセッサのマイクロアーキテクチャのブロック図であり、プロセッサは、複数の命令を実行する複数のロジック回路を含んでよい。
本開示の複数の実施形態に係る複数のマルチメディアレジスタにおける様々なパックドデータ型の表現を示す。
本開示の複数の実施形態に係る適用可能な複数のレジスタ内データストレージフォーマットを示す。
本開示の複数の実施形態に係る複数のマルチメディアレジスタにおける様々な符号付き及び符号なしパックドデータ型の表現を示す。
オペレーション符号化フォーマットの実施形態を示す。
本開示の複数の実施形態に係る40又はそれより多くのビットを有する他の適用可能なオペレーション符号化フォーマットを示す。
本開示の複数の実施形態に係るさらに他の適用可能なオペレーション符号化フォーマットを示す。
本開示の複数の実施形態に係るインオーダパイプライン及びレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。
本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコア及びレジスタリネーミングロジック、アウトオブオーダ発行/実行ロジックを示すブロック図である。
本開示の複数の実施形態に係るプロセッサのブロック図である。
本開示の複数の実施形態に係るコアの例示的な実装のブロック図である。
本開示の複数の実施形態に係るシステムのブロック図である。
本開示の複数の実施形態に係る第2のシステムのブロック図である。
本開示の複数の実施形態に係る第3のシステムのブロック図である。
本開示の複数の実施形態に係るシステムオンチップのブロック図である。
本開示の複数の実施形態に係る少なくとも1つの命令を実行可能な中央処理装置及び画像処理ユニットを含むプロセッサを示す。
本開示の複数の実施形態に係る複数のIPコアの開発を示すブロック図である。
本開示の複数の実施形態に係る第1の型の命令が異なる型のプロセッサによってどのようにエミュレートされ得るかを示す。
本開示の複数の実施形態に係るソース命令セットにおける複数のバイナリ命令をターゲット命令セットにおける複数のバイナリ命令に変換するソフトウェア命令コンバータの利用を対比したブロック図を示す。
本開示の複数の実施形態に係るプロセッサの命令セットアーキテクチャのブロック図である。
本開示の複数の実施形態に係るプロセッサの命令セットアーキテクチャのより詳細なブロック図である。
本開示の複数の実施形態に係るプロセッサの実行パイプラインのブロック図である。
本開示の複数の実施形態に係るプロセッサを用いる電子デバイスのブロック図である。
本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装する例示的なシステムを示す。
本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステムのより詳細な図を示す。 本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステムのより詳細な図を示す。 本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステムのより詳細な図を示す。 本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステムのより詳細な図を示す。 本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステムのより詳細な図を示す。
本開示の複数の実施形態に係る複数のストランド中における最小プログラム順序値を決定するハードウェアロジックの例を示す。
本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する例示的な方法の図である。
以下の説明は、プロセッサ、仮想プロセッサ、パッケージ、コンピュータシステム、もしくは他の処理装置内における、又はこれらに関連付けられた、リタイア可能な複数の命令を特定する命令及び処理ロジックを説明する。このような処理装置は、アウトオブオーダプロセッサを含んでよい。さらに、このような処理装置は、マルチストランドアウトオブオーダプロセッサを含んでよい。以下の説明において、本開示の複数の実施形態に対するより十分な理解を提供すべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実施可能メカニズム等のような多数の具体的な詳細が示される。しかしながら、当業者によれば、このような具体的な詳細がなくても、複数の実施形態が実施可能であることが理解されよう。さらに、本開示の複数の実施形態を不必要に不明瞭とすることを回避すべく、いくつかの周知構造、回路等は、詳細には示されていない。
以下の複数の実施形態は、プロセッサを参照して説明されるが、複数の他の実施形態は、複数の他のタイプの集積回路及びロジックデバイスに適用可能である。本開示の複数の実施形態の同様の技術及び教示は、より高いパイプラインスループット及び改善された性能からの利益を享受し得る他のタイプの回路又は半導体デバイスに適用されてよい。本開示の複数の実施形態の教示は、複数のデータ操作を実行する任意のプロセッサ又は機械に適用可能である。しかしながら、複数の実施形態は、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命令を含む命令セットを有するインテル(登録商標)コア(商標)プロセッサ、Vector Floating Point(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ビット用である。ファイル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、又は他の複数のオペレーションを実行してよい。さらに他の実施形態において、除算、平方根、及び残りのマイクロ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からB及び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、及びIS/ICコントローラ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を含んでよい。このような連結は、ICバス、システム管理バス(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を示す。一実施形態において、このような命令は、アウトオブオーダプロセッサ又は処理エンティティ内においてリタイア可能であってよい。他の実施形態において、このような命令は、マルチストランドアウトオブオーダプロセッサ又は処理エンティティ内においてリタイア可能であってよい。マルチストランドアウトオブオーダプロセッサは、複数のストランドを並列に実行する処理エンティティを含んでよい。さらに、マルチストランドアウトオブオーダプロセッサは、複数の命令ポインタを含んでよい。スレッドの複数の命令は、複数のストランドにおいてグループ化されてよい。一実施形態において、マルチストランドアウトオブオーダプロセッサは、複数の他のストランドの複数の命令に対して、各ストランドの複数の命令を実行してよく、これにより、複数の命令は、プログラム順序外でフェッチ、発行、及び実行される。システム1800は、このようなプロセッサの複数のエレメントを示してよく、これらは、任意のプロセッサコア、論理プロセッサ、プロセッサ、又は図1Aから図17に示されるもののような他の処理エンティティを含んでよい。
システム1800は、命令ストリーム1802を処理する発行ステージ1560を含んでよい。命令ストリーム1802は、任意の適した数及び種類のストランド1804を含んでよい。各ストランド1804は、互いに従属するデータであるPOによって順序付けられた一連の命令を含んでよい。さらに、各ストランド1804は、例えば、複数のフォーキング又はループオペレーションを通して、複数の他のストランドに関連してよい。上述されたように、POは、コードのセマンティックの正確な実行を保証すべく、複数の命令を順序付ける命令固有の番号を含んでよい。さらに、システム1800は、ライトバックステージ1570を含んでよい。
一実施形態において、システム1800は、実行済み命令ポインタ1580を含んでよい。上述されたように、実行済み命令ポインタ1580は、命令ストリーム1802の最も古いプログラム順序POを特定する値をストアしてよい。さらなる実施形態において、実行済み命令ポインタ1580は、複数のストランド1804の中で最も古いPOを有する個々のストランド1804のPOをストアしてよい。
他の実施形態において、システム1800は、リタイアメントポインタ1582を含んでよい。上述されたように、リタイアメントポインタ1582は、命令ストリーム1802の最後にリタイアした命令のPOを特定する値をストアしてよい。リタイアメントポインタ1582は、処理後に、所与の命令のリタイアに対してセットされてよい。所与の命令のリタイアは、実行後であっても、所与の命令に関する全てのデータ従属性、分岐、フォーク、又はループが解決されるまで遅延させられてよい。このような条件は、例えば、命令の再実行を要求してよい。
システム1800は、リタイア可能な複数の命令を任意の適した態様で特定してよい。一実施形態において、システム1800は、リタイア可能な複数の命令を特定するリタイアメントウィンドウ1808を生成してよい。複数のリタイアメントウィンドウ1808は、リタイア可能と特定された複数の命令のリストを含んでよい。リタイアメントウィンドウ1808は、ライトバックステージ1570のような任意の適したメカニズムによって生成されてよい。さらなる実施形態において、リタイアメントウィンドウ1808は、実行済み命令ポインタ1580を参照することによって生成されてよい。他のさらなる実施形態において、リタイアメントウィンドウ1808は、リタイアメントポインタ1582を参照することによって生成されてよい。様々な実施形態において、リタイアメントウィンドウ1808は、POを有する複数の命令を含んでよく、POは、リタイアメントポインタ1582によって特定された命令のPOと実行済み命令ポインタ1580によって特定された命令のPOとの間に存在する。いずれの命令もまだリタイアしていない場合、リタイアメントポインタ1582は、ヌル値を含んでよい。このような場合、リタイアメントウィンドウ1808は、第1のN個の命令を含んでよく、実行済み命令ポインタ1580は、命令ストリーム1802においてN番目の命令を示す(必ずしもPO#Nではない)。
命令ストリーム1802のPOの順序付けには、図19A-19Eと併せてより詳細に説明されるように、複数のギャップが存在し得る。一実施形態において、リタイアメントウィンドウ1808は、不連続な複数のPO値の範囲を含んでよい。他の実施形態において、リタイアメントウィンドウは、後で割り当て、再実行、アウトオブオーダフェッチ、又は他の利用を要求し得るあらゆる命令を省略してよい。従って、リタイアメントウィンドウ1808は、順序付けられ、不連続に付番された、安全にリタイア可能な複数の命令を含んでよい。
実行済み命令ポインタ1580は、任意の適した態様で生成されてよい。一実施形態において、システム1800は、実行済み命令ポインタ1580を生成する実行済み命令ポインタ生成モジュール1806を含んでよい。実行済み命令ポインタ生成モジュール1806は、命令ストリーム1802において、どの命令が最も古いディスパッチされていない命令であるかを決定するように、任意の適した態様で実装されてよい。例えば、実行済み命令ポインタ生成モジュール1806は、ロジック、ハードウェア、コード、又は複数の命令によって実装されてよい。一実施形態において、実行済み命令ポインタ生成モジュール1806は、実行済み命令ポインタ1580を決定すべく、所与のストランド1804のPOを評価してよい。所与のストランド1804のPOは、最も古いディスパッチされていない命令のPOを含んでよい。従って、複数のストランド1804の各々は、そのPO値をストア又は特定してよい。
実行済み命令ポインタ1580は、任意の適した時点で生成されてよい。一実施形態において、実行済み命令ポインタ1580は、システム1800の各実行サイクルにおいて生成されてよい。実行サイクルが複数の追加命令のディスパッチをもたらし得るとして、実行済み命令ポインタ生成モジュール1806は、各実行サイクルに対して実行済み命令ポインタ1580を生成してよい。各実行サイクルに対する、生成された実行済み命令ポインタ1580のリフレッシュされた複数の値の必要は、図20に示されるもののような実行済み命令ポインタ生成モジュール1806のハードウェア実装によって満たされ得る。
オペレーションにおいて、システム1800は、各実行サイクルに対して実行済み命令ポインタ1580を生成してよい。従って、実行済み命令ポインタ1580は、複数のストランド1804のコード中で、最も古いPOを利用可能にしてよい。さらに、複数の命令がリタイアすると、最も直近でリタイアした命令のPOが、リタイアメントポインタ1582にストアされてよい。システム1800は、実行済み命令ポインタ1580のPOとリタイアメントポインタ1582のPOとの間にあるPOを有する複数の命令を特定するために、例えば、ライトバックステージ1570を用いてよい。複数の特定された命令は、リタイアメントウィンドウ1808に含まれてよい。リタイアメントウィンドウ1808のこのような命令は、次に、例えばライトバックステージ1570のオペレーションを通して、システム1800によってリタイアさせられてよい。
図19A-19Eは、本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する命令及びロジックを実装するシステム1800のより詳細な図を示す。
図19Aにおいて、POによって順序付けられた一連の命令が示される。各命令は、そのそれぞれのPOと共に示される。このような一連の命令は、命令ストリーム1802の命令を含んでよい。図19Aに示されるように、命令ストリーム1802の複数の命令は、POに関して連続的でなくてよい。POの付番に複数のギャップが存在することがあり、なぜなら、様々な数がコンパイラによって静的に割り当てられることがあるからである。複数の命令が、条件付きループのような任意の数又は種類の動的分岐を記述し得るとして、当該命令が実行される場合に、コンパイラは、何の制御パスが最終的に用いられるかを認識しない。コードにおいて指定されない分岐は、実行されなくてよい。同様に、複数の命令は、静的に未知数のイテレーションを伴う複数のループを指定してよい。コンパイラはいつループが終了するかを予め認識しないので、コンパイラは、ループに対して特定のPOウィンドウを割り当ててよい。ループが早く終了した場合、いくつかの命令は実行しなくてよく、ギャップが出現することがある。
インオーダ処理との関連で、命令ストリーム1802は、最小POから最大POまで、線形的にインオーダで実行されてよい。しかしながら、システム1800との関連で、命令ストリーム1802は、アウトオブオーダでフェッチ、発行、及び実行されてよい。
図19Bにおいて、命令ストリーム1802は、適した数のストランド1804A、1804B、1804Cの間で分割されるものとして示されてよい。所与のストランド1804内において、複数の命令は、POに従って線形的に実行されてよい。
ストランド1804A、1804B、1804Cは、互いに対するデータ従属性を含んでよい。所与のストランド1804に対するデータ従属性が満たされると、所与のストランド1804の実行は開始してよい。例えば、ストランド1804Bは、ストランド1804Aにおいて命令#0が実行された後で、ストランド1804Aからのフォークとして実行を開始してよい。ストランド1804Aにおける命令#0の実行は、ストランド1804Bのデータ要求を満たしてよい。他の例において、ストランド1804Cは、ストランド1804Bにおいて命令#2が実行された後で、ストランド1804Bからのフォークとして実行を開始してよい。ストランド1804Bにおける命令#0の実行は、ストランド1804Cのデータ要求を満たしてよい。
複数のデータ要求は、例えば、複数のレジスタにおける名称の従属性を含んでよい。複数の名称の従属性は、例えば、レジスタのより古い(下位POの)読み出しが全て実行されるまで、当該レジスタへの書き込みを防止することを含んでよい。さらに、複数のデータ要求は、メモリにおけるデータ及び名称の従属性を含んでよい。これらの従属性は、例えば、複数のメモリ位置に対して複数のプレディケートの読み出し及び書き込みが実行されるまで、当該メモリ位置のロード及びストアを防止することを含んでよい。さらに、複数のデータ要求は、不正確な例外又は割り込みに対する処理を含んでよい。このような処理は、より古い複数の命令がレジスタ又はメモリ状態をまだ更新していなかった場合、又は例外生成命令後の命令がレジスタ又はメモリ状態を既に更新していた場合に、例えば、例外を発生させる複数の命令を待つことを含んでよい。さらに、複数のデータ要求は、複数の制御従属性を含んでよい。これらの従属性は、例えば、命令のより古い分岐条件がまだ解決されていなかった場合に、複数のレジスタ又はメモリを更新する命令の実行を保持することを含んでよい。さらに、複数のデータ要求は、複数のメモリ整合性モデル要件を含んでよい。これらの要件は、例えば、他の複数の処理エンティティに露出される複数のメモリオペレーションを含んでよい。
図19Cにおいて、ストランド1804A、1804B、1804Cは、実行のスナップショット中の状態で示される。3つのストランド1804A、1804B、1804Cは、並列に実行してよい。図19Cに示される特定の瞬間に、システム1800は、ディスパッチに対する1804A、1804B、1804Cの各々からの命令を、実行のために現在評価していてよい。これらは、ストランド1804Aからの命令#10、ストランド1804Bからの命令#9、及びストランド1804Cからの命令#6を含んでよい。命令#10、#9、及び#6は、まだディスパッチされていなくてよい。さらに、これらより新しい各ストランド1804の複数の命令も、まだディスパッチされていなくてよい。これらのディスパッチされていない命令は、ストランド1804Aからの命令#13、ストランド1804Bからの命令#14、及びストランド1804Cからの命令#12を含んでよい。複数の他の命令は、既にディスパッチされていてよい。ストランド1804Aの命令#0は、既にディスパッチされ、実行され、リタイアしていてよい。これだけが、本例におけるリタイアした命令であるため、命令#0は、リタイアメントポインタ1582によって特定されてよい。ストランド1804Aの命令#5、ストランド1804Bの命令#2、ストランド1804Bの命令#8、及びストランド1804Cの命令#3は、ディスパッチされたものの、まだリタイアしていなくてよい。
一実施形態において、システム1800は、もしあれば、複数のディスパッチ済みだがリタイアしていない命令のいずれがリタイアすべきかを決定してよい。このようなリタイアすべき命令は、リタイア候補と称されてよい。さらなる実施形態において、複数のディスパッチ済みだがリタイアしていない命令のいずれがリタイアすべきかを決定することは、生成されたリタイアメントウィンドウ1808によって実行されてよい。本例において、リタイアメントウィンドウ1808の生成は、ストランド1804Aの命令#5、ストランド1804Bの命令#2、及びストランド1804Cの命令#3をリタイアすべきものとして特定する結果をもたらしてよい。図19AからEに示されるスナップショットにおいて、リタイアメントウィンドウ1808は、ストランド1804Bの命令#8を含まなくてよく、従って、この命令は、リタイアするものとしてまだ特定されていなくてよい。上述されたように、リタイアメントウィンドウ1808は、実行済み命令ポインタ1580とリタイアメントポインタ1582との間に命令ストリーム1802の複数のPOを含んでよい。
図19Dにおいて、実行済み命令ポインタ1580及びリタイアメントポインタ1582の生成が示されてよい。生成された複数の値は、上述された結果を決定するために用いられてよい。
実行済み命令ポインタ生成モジュール1806は、実行済み命令ポインタ1580の値をセットしてよい。一実施形態において、実行済み命令ポインタ生成モジュール1806は、最小POを決定すべく、各ストランド1804A、1804B、1804CのPOを評価してよい。最小のこのようなPOは、命令ストリーム1802のディスパッチされていない命令の全ての中で、最小POであってよい。このような各ストランドのPOは、ストランド内における複数のディスパッチされていない命令の最小POを含んでよい。各ストランド1804A、1804B、1804Cは、例えば、レジスタ又はフリップフロップに、そのPOをストアしてよい。実行済み命令ポインタ生成モジュール1806は、ストランド1804Aの命令#10、ストランド1804Bの命令#9、又はストランド1804Cの命令#6のいずれが最下位であるかを決定してよい。このような最小POがストランド1804Cの命令#6であれば、実行済み命令ポインタ生成モジュール1806は、「6」の値を実行済み命令ポインタ1580にストアしてよい。実行済み命令ポインタ生成モジュール1806は、実行サイクル中、図19Cに示されるスナップショットの直前に、このストレージを実行していてよい。
システム1800の任意の適した部分は、リタイアメントポインタ1580の値をセットしてよい。一実施形態において、ライトバックステージ1570は、リタイアメントポインタ1580をセットしていてよい。リタイアメントポインタ1580は、命令の最も直近のリタイアに対してセットされていてよい。従って、ライトバックステージ1570は、ストランド1804Aの命令#0の前のリタイアに対して、リタイアメントポインタ1580に「0」を発行していてよい。
図19Eにおいて、実行済み命令ポインタ1580及びリタイアメントポインタ1582の値を前提に、ライトバックステージ1570は、リタイアメントウィンドウ1808を生成してよい。リタイアメントウィンドウ1808を生成するために、命令ストリーム1802は評価されてよい。リタイアメントポインタ1582は、命令#0を、最も直近でリタイアした命令と特定してよい。さらに、実行済み命令ポインタ1580は、命令#6を、まだディスパッチされていない最も古い命令と特定してよい。一実施形態において、命令#0と命令#6との間における複数の命令の範囲は、従って、リタイア可能と特定されてよい。これらは、命令#2、#3、及び#5を含んでよい。再び図19Cを参照すると、これら3つの命令は、リタイア可能として示されている。
さらに、ストランド1804Bの命令#8は、ディスパッチされているが、図19Eにおけるリタイアメントウィンドウ1808の範囲外にある。従って、図19Cにおいて、命令#8は、リタイア可能と示されていない。
図20は、本開示の複数の実施形態に係る複数のストランド中における最小PO値を決定するハードウェアロジック2000の例を示す。一実施形態において、ハードウェアロジック2000は、実行済み命令ポインタ生成モジュール1806を完全に又は部分的に実装してよい。ハードウェアロジック2000は、任意の適した数、種類、又はタイプのコンポーネントによって実装されてよい。
一実施形態において、ハードウェアロジック2000は、複数のノード2004のカスケード構成によって実装されてよい。各ノード2004は、2つの入力のうち小さいものを出力してよい。複数のノード2004のカスケード構成は、任意の適したメカニズムからの入力を受け付けてよい。他の実施形態において、複数のノード2004のカスケード構成は、評価されるべき各ストランドに対応するストレージメカニズムからの複数の入力を受け付けてよい。このようなストランドは、例えば、図18の複数のストランド1804を含んでよい。任意の適した数のストランドと、従って複数の入力とは、受け付けられてよい。さらに他の実施形態において、各ストランドに対する複数のストレージメカニズムは、フリップフロップ2002を含んでよい。各ストランドは、そのフリップフロップ2002にそのPOをストアしてよい。
各ノード2004は、2つの入力のうち小さいものを出力すべく、任意の適した態様で実装されてよい。一実施形態において、ノード2004は、2つの入力ラインi及びjを受け付けてよい。さらなる実施形態において、ノード2004は、i又はjのいずれがより小さいかを決定する減算器2006を含んでよい。さらに他の、さらなる実施形態において、ノード2004は、i及びjのうち小さいものを選択するマルチプレクサ2008を含んでよい。ノード2004は、減算器2006及びマルチプレクサ2008に、i及びjをルーティングしてよい。減算器2006は、ハードウェアで実装されてよく、iをjから減算してよい。さらに、減算器2006は、iをjから減算した結果が正又は負のいずれであったかを示し、従って、iがjより小さかったか又はjより大きかったかを示す符号ビット2010を出力してよい。ノード2004は、符号ビット2010をマルチプレクサ2008のセレクタにルーティングしてよい。マルチプレクサ2008は、ハードウェアで実装されてよく、i及びjのうち小さいものを出力2012へ選択的にルーティングすべく、符号ビット2010を用いてよい。出力2012は、従って、i及びjの小さい値であってよい。
出力2012は、全ての入力2002が比較されるまで、ノード2004のさらなるインスタンスに伝搬されてよく、これにより、複数の入力2002のうち最小のものが決定される。複数の入力2002のうち最小のものは、次に、実行済み命令ポインタ1580にストアされてよい。
例えば、複数の入力2002は、PO値[2、5、6、10、25、47、12、90…9]を含んでよい。他の複数の値は、含まれてよいが、図示されていない。任意の適切な数の入力2002が、含まれてよい。追加の複数の入力2002は、全ての入力2002を十分比較できるように、追加の複数のレベルのノード2004を要求してよい。
複数のカスケードノードの第1のレベルにおいて、ノード2004Aは、入力2002A(PO#2を有する)が入力2002B(PO#5を有する)より小さいと決定してよく、結果の#2をノード2004Fにルーティングしてよい。ノード2004Bは、入力2002C(PO#6を有する)が入力2002D(PO#10を有する)より小さいと決定してよく、結果の#6をノード2004Fにルーティングしてよい。ノード2004Cは、入力2002E(PO#25を有する)が入力2002F(PO#26を有する)より小さいと決定してよく、結果の#25をノード2004Gにルーティングしてよい。ノード2004Dは、入力2002G(PO#47を有する)が入力2002H(PO#12を有する)より大きいと決定してよく、結果の#12をノード2004Gにルーティングしてよい。ノード2004Eは、入力2002I(PO#90を有する)が入力2002J(PO#9を有する)より大きいと決定してよく、結果の#9をノード2004Hにルーティングしてよい。
複数のカスケードノードの第2のレベルにおいて、ノード2004Fは、ノード2004Aからの入力(PO#2を有する)がノード2004Bからの入力(PO#6を有する)より小さいと決定してよく、結果の#2をノード2004Iにルーティングしてよい。ノード2004Gは、ノード2004Cからの入力(PO#25を有する)がノード2004Dからの入力(PO#12を有する)より大きいと決定してよく、結果の#12をノード2004Iにルーティングしてよい。ノード2004Hは、未知のノードからの入力(PO#7を有する)がノード2004Eからの入力(PO#9を有する)より小さいと決定してよく、結果の#7をノード2004Jにルーティングしてよい。
複数のカスケードノードの第3のレベルにおいて、ノード2004Iは、ノード2004Fからの入力(PO#2を有する)がノード2004Gからの入力(PO#12を有する)より小さいと決定してよく、結果の#2をノード2004Kにルーティングしてよい。ノード2004Jは、未知のノードからの入力(PO#11を有する)がノード2004Hからの入力(PO#7を有する)より大きいと決定してよく、結果の#7をノード2004Kにルーティングする。
複数のカスケードノードの第4のレベルにおいて、ノード2004Kは、ノード2004Iからの入力(PO#2を有する)がノード2004Jからの入力(PO#7を有する)より小さいと決定してよい。その結果は、複数の入力2002の最小POであってよく、実行済み命令ポインタ1580にストアされてよい。
図21は、本開示の複数の実施形態に係るリタイア可能な複数の命令を特定する例示的な方法2100の図である。一実施形態において、このようなリタイアについての命令は、マルチストランドアウトオブオーダプロセッサにおいて特定されてよい。
方法2100は、任意の適したポイントで開始してよく、任意の適した順序で実行してよい。一実施形態において、方法2100は、2105で開始してよい。様々な実施形態において、方法2100は、マルチストランドアウトオブオーダプロセッサの実行中に実行されてよい。
2105において、実行されるべく順序付けられた命令ストリームは、複数のストランドに分割されてよい。複数のストランドは、互いに並列に実行されてよい。複数のストランドは、互いに対してデータ従属性を有してよいが、互いに対してアウトオブオーダで実行されてよい。さらに、各ストランド内において、複数の命令が、インオーダで実行されてよい。複数の命令は、順序付け目的のためにPOインジケーションを含んでよい。
2107において、複数の処理段階が実行されてよい。このような段階は、例えば、プロセッサにおけるフェッチ、発行、ディスパッチ、又は実行命令を含んでよい。実行サイクルは、実行されてよい。実行済み命令ポインタは、前に進められてよい。
2110において、各ストランドからの複数のディスパッチされていない命令のPOが、ストアされてよい。2115において、全てのストランドからの複数のディスパッチされていない命令の最小POが、決定されてよい。複数のディスパッチされていない命令の最小POは、ストランドにおいて最も古いディスパッチされていない命令に対応してよい。このような各ストランドは、複数のディスパッチされていない命令の対応する最小POを、例えば、フリップフロップにストアしてよい。一実施形態において、最小POは、例えば、複数のストランドの各フリップフロップを、ハードウェアロジックへの入力として読み出すことによって決定されてよい。ハードウェアロジックは、複数のディスパッチされていない命令の最小POに対応する最小入力が決定されるまで、各入力を他の複数の入力と比較してよい。
2120において、複数のディスパッチされていない命令の最小POは、アクセス可能なファシリティ又は位置にストアされてよい。一実施形態において、この値は、実行済み命令ポインタにストアされてよい。
2125において、最も直近でリタイアした命令の特定が、ストアされてよい。このような特定は、POを含んでよい。最も直近でリタイアした命令は、そのリタイアに対して特定されてよい。一実施形態において、POは、リタイアメントポインタにストアされてよい。いずれの命令もまだリタイアしていない場合、リタイアメントポインタは、ヌルにセットされてよい。
2130において、リタイアメントウィンドウが決定されてよい。一実施形態において、リタイアメントウィンドウは、順序付けられた命令ストリーム内において、リタイアメントポインタにストアされたPO及び実行済み命令ポインタにストアされたPOによって特定された複数の命令の間における、複数の命令の範囲として定義されてよい。リタイアメントポインタがヌルであり、いずれの命令もリタイアしていないことを示す場合、リタイアメントウィンドウは、命令ストリームにおいて、もしあれば、実行済み命令ポインタにストアされたPOによって特定された命令までの、第1のエレメント又は複数のエレメントを含んでよい。2135において、順序付けられた命令ストリームに適用されるリタイアメントウィンドウ内の複数の命令が、特定されてよい。2140において、これらの特定された命令は、リタイアを選択されてよく、一実施形態において、2415において、これらの特定された命令のリタイアが実行されてよい。
2150において、リタイアメントポインタは、更新されてよい。最も直近でリタイアした命令のPOは、リタイアメントポインタにストアされてよい。
2165において、プログラムがオペレーションを完了したか否かが決定されてよい。そうであれば、2170において、方法2100は、終了してよい。さもなければ、方法2100は、2107に戻ることのような、方法2100の1つ又は複数のエレメントを繰り返してよい。
方法2100は、任意の適した基準によって開始されてよい。さらに、方法2100は特定の複数のエレメントのオペレーションを説明するが、方法2100は、任意の適した組み合わせ又はタイプのエレメントによって実行されてよい。例えば、方法2100は、図1Aから図20に示される複数のエレメントによって、又は方法2100を実装するように動作可能な任意の他のシステムによって実装されてよい。このように、方法2100の好ましい初期化ポイント及び方法2100を備える複数のエレメントの順序は、選択された実装によって異なってよい。いくつかの実施形態において、いくつかのエレメントは、任意に省略され、再編成され、繰り返され、又は組み合わせられてよい。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア又はこのような複数の実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又は複数のストレージ要素を含む)、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
プログラムコードは、本明細書において説明される複数の機能を実行し、出力情報を生成する複数の入力命令に適用されてよい。出力情報は、1つ又は複数の出力デバイスに、公知の方式で適用されてよい。これを適用する目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含んでよい。
プログラムコードは、処理システムと通信を行うために、高水準の手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、その範囲において、何らかの特定のプログラミング言語に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、このデータは、機械によって読み出された場合に、機械に、本明細書において説明される複数の技術を実行するロジックを製造させる。「IPコア」として知られる複数のこのような表現は、有形の機械可読媒体にストアされてよく、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。
このような機械可読ストレージ媒体は、限定的ではないが、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)及び光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)のような半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、位相変化メモリ(PCM)、磁気又は光カード、又は複数の電子的命令のストアに適した任意の他のタイプの媒体のような記憶媒体を含む、機械又はデバイスによって製造もしくは形成される複数の物品の非一時的かつ有形の構成を含んでよい。
従って、本開示の複数の実施形態は、複数の命令を含む、又は本明細書において説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び/又は複数のシステム機能を定義するハードウェア記述言語(HDL)のような設計データを含む非一時的かつ有形の機械可読媒体をさらに含んでよい。このような実施形態は、プログラム製品と称されてもよい。
いくつかの場合、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1つ又は複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令コンバータは、オンプロセッサであってよく、オフプロセッサであってよく、又は一部がオンプロセッサかつ一部がオフプロセッサであってよい。
従って、少なくとも一実施形態に係る1つ又は複数の命令を実行する複数の技術が開示されている。複数の特定の例示的な実施形態が複数の添付図面において説明及び図示されたが、このような実施形態は、単に例示であり、複数の他の実施形態に対する限定ではなく、当業者であれば本開示を参照することによって様々な他の変更に想到し得ることから、このような実施形態は、図示及び説明された具体的な複数の構造及び構成に限定されるものではないことを理解されたい。成長が速く、さらなる進歩が容易に予見し得ないこのような技術領域においては、本開示の原理又は添付された特許請求の範囲から逸脱することなく、技術的進歩を可能とすることによって促進されるように、開示された複数の実施形態は、構成及び詳細において容易に変更可能である。

Claims (20)

  1. 命令ストリームをアウトオブオーダで実行する第1のロジックであって、前記命令ストリームは、複数のストランドに分割され、前記命令ストリーム及び各ストランドは、プログラム順序(PO)によって順序付けられる、第1のロジックと、
    前記命令ストリームにおいて最も古いディスパッチされていない命令を決定し、前記最も古いディスパッチされていない命令に関連付けられたPO値を、実行済み命令ポインタとしてストアする第2のロジックであって、前記命令ストリームは、ディスパッチされた命令及びディスパッチされていない命令を含む、第2のロジックと、
    前記命令ストリームにおいて最も直近でリタイアした命令を決定し、前記最も直近でリタイアした命令に関連付けられたPO値を、リタイアメントポインタとしてストアする第3のロジックと、
    前記リタイアメントポインタ及び前記実行済み命令ポインタの間において複数の命令の範囲を選択する第4のロジックと、
    前記第4のロジックにおいて選択された前記範囲における前記複数の命令を、リタイア可能と特定する第5のロジックと、
    を備える、プロセッサ。
  2. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する前記第2のロジックは、
    複数のディスパッチされていない命令のセットを決定する第6のロジックであって、前記セットの各エレメントは、各ストランドからの最も古いディスパッチされていない命令に対応する、第6のロジックと、
    前記セットから最も古いディスパッチされていない命令を決定する第7のロジックと、
    を含む、請求項1に記載のプロセッサ。
  3. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する前記第2のロジックは、
    複数のデータストレージユニットであって、各データストレージユニットは、各ストランドからの最も古いディスパッチされていない命令のPOを保持する、複数のデータストレージユニットと、
    カスケード構成に編成された複数の決定ノードであって、
    前記複数のデータストレージユニットから、初期入力として情報を受け付ける前記複数の決定ノードの第1のレベルと、
    前記命令ストリームにおいて前記最も古いディスパッチされた命令のPOを出力する前記複数の決定ノードの最終レベルと、
    を含む複数の決定ノードと、
    を含み、
    各決定ノードは、前記決定ノードの複数の入力値を比較し、前記複数の入力値の最小値を出力する、
    請求項1に記載のプロセッサ。
  4. 各決定ノードは、
    第2の入力値から第1の入力値を減算する符号ビットを出力する減算器と、
    前記減算器と通信可能に連結され、前記符号ビットに基づいて、前記第1の入力値又は前記第2の入力値のいずれかを選択的に出力するマルチプレクサと、
    を含む、請求項3に記載のプロセッサ。
  5. リタイア可能な複数の命令の前記範囲は、ディスパッチ及び実行された複数の命令を含む、請求項1から4のいずれか1項に記載のプロセッサ。
  6. 前記命令ストリームは、複数の命令の前記範囲外にある命令を含み、前記命令は、リタイアしておらず、ディスパッチされ、実行されている、請求項1から5のいずれか1項に記載のプロセッサ。
  7. 複数の命令の前記範囲における前記複数の命令の各々をリタイアさせる第6のロジックと、
    複数の命令の前記範囲において前記第6のロジックによってリタイアさせられた最新の命令の前記PO値を、前記リタイアメントポインタとしてストアする第7のロジックと、
    をさらに備える、請求項1に記載のプロセッサ。
  8. プロセッサ内において、
    命令ストリームをアウトオブオーダで実行する段階であって、前記命令ストリームは、複数のストランドに分割され、前記命令ストリーム及び各ストランドは、プログラム順序(PO)によって順序付けられる、段階と、
    前記命令ストリームにおいて最も古いディスパッチされていない命令を決定し、前記最も古いディスパッチされていない命令に関連付けられたPO値を、実行済み命令ポインタとしてストアする段階であって、前記命令ストリームは、ディスパッチされた命令及びディスパッチされていない命令を含む、段階と、
    前記命令ストリームにおいて最も直近でリタイアした命令を決定し、前記最も直近でリタイアした命令に関連付けられたPO値を、リタイアメントポインタとしてストアする段階と、
    前記リタイアメントポインタ及び前記実行済み命令ポインタの間において複数の命令の範囲を選択する段階と、
    前記範囲における前記複数の命令を、リタイア可能と特定する段階と、
    を備える、方法。
  9. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する段階は、
    複数のディスパッチされていない命令のセットを決定する段階であって、前記セットの各エレメントは、各ストランドからの最も古いディスパッチされていない命令に対応する、段階と、
    前記セットから最も古いディスパッチされていない命令を決定する段階と、
    を含む、請求項8に記載の方法。
  10. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する段階は、
    各ストランドからの最も古いディスパッチされていない命令のPOを、データストレージ位置から、カスケード構成で編成された複数の決定ノードの第1のレベルへの入力として決定する段階と、
    各決定ノードにおいて、前記決定ノードの複数の入力値を比較し、前記複数の入力値の最小値を出力する段階と、
    前記複数の決定ノードの最終レベルにおいて、前記命令ストリームにおいて最も古いディスパッチされた命令のPOを出力する段階と、
    を含む、請求項8に記載の方法。
  11. 前記決定ノードの複数の入力値を比較し、各決定ノードにおいて前記複数の入力値の最小値を出力する段階は、
    第2の入力値から第1の入力値を減算し、符号ビットを決定する段階と、
    前記符号ビットに基づいて、前記第1の入力値又は前記第2の入力値のいずれかを選択的に出力する段階と、
    を含む、請求項10に記載の方法。
  12. リタイア可能な複数の命令の前記範囲は、ディスパッチ及び実行された複数の命令を含む、請求項8から11のいずれか1項に記載の方法。
  13. 前記命令ストリームは、複数の命令の前記範囲外にある命令を含み、前記命令は、リタイアしておらず、ディスパッチされ、実行されている、請求項8から12のいずれか1項に記載の方法。
  14. 複数のストランドに分割される命令ストリームであって、前記命令ストリーム及び各ストランドは、プログラム順序(PO)によって順序付けられる、命令ストリームと、
    命令ストリームを受信し、アウトオブオーダで実行するプロセッサであって、
    前記命令ストリームにおいて最も古いディスパッチされていない命令を決定し、前記最も古いディスパッチされていない命令の関連付けられたPO値を実行済み命令ポインタとしてストアする第1のロジックであって、前記命令ストリームがディスパッチされた命令及びディスパッチされていない命令を含む、第1のロジックと、
    前記命令ストリームにおいて最も直近でリタイアした命令を決定し、前記最も直近でリタイアした命令の関連付けられたPO値を、リタイアメントポインタとしてストアする第2のロジックと、
    前記リタイアメントポインタ及び前記実行済み命令ポインタの間において複数の命令の範囲を選択する第3のロジックと、
    前記第3のロジックにおいて選択された前記範囲における複数の命令を、リタイア可能と特定する第4のロジックと、
    を含むプロセッサと、
    を備える、システム。
  15. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する前記第1のロジックは、
    複数のディスパッチされていない命令のセットを決定する第5のロジックであって、前記セットの各エレメントは、各ストランドからの最も古いディスパッチされていない命令に対応する、第5のロジックと、
    前記セットから最も古いディスパッチされていない命令を決定する第6のロジックと、
    を含む、請求項14に記載のシステム。
  16. 前記命令ストリームにおいて前記最も古いディスパッチされていない命令を決定する前記第1のロジックは、
    複数のデータストレージユニットであって、各データストレージユニットは、各ストランドからの最も古いディスパッチされていない命令のPOを保持する、複数のデータストレージユニットと、
    カスケード方式で構成された複数の決定ノードであって、
    前記複数のデータストレージユニットから、初期入力として情報を受け付ける前記複数の決定ノードの第1のレベルと、
    前記命令ストリームにおいて前記最も古いディスパッチされた命令のPOを出力する前記複数の決定ノードの最終レベルと、
    を含む複数の決定ノードと、
    を含み、
    各決定ノードは、前記決定ノードの複数の入力値を比較し、前記複数の入力値からの最小値を出力する、
    請求項14に記載のシステム。
  17. 各決定ノードは、
    第2の入力値から第1の入力値を減算する符号ビットを出力する減算器と、
    前記減算器と通信可能に連結され、前記符号ビットに基づいて、前記第1の入力値又は前記第2の入力値のいずれかを選択的に出力するマルチプレクサと、
    を含む、請求項16に記載のシステム。
  18. リタイア可能な複数の命令の前記範囲は、ディスパッチ及び実行された複数の命令を含む、請求項14から17のいずれか1項に記載のシステム。
  19. 前記命令ストリームは、複数の命令の前記範囲外にある命令を含み、前記命令は、リタイアしておらず、ディスパッチされ、実行されている、請求項14から18のいずれか1項に記載のシステム。
  20. 前記プロセッサは、
    複数の命令の前記範囲における前記複数の命令の各々をリタイアさせる第5のロジックと、
    前記第5のロジックによってリタイアさせられた複数の命令の前記範囲における最新の命令の前記PO値を、前記リタイアメントポインタとしてストアする第6のロジックと、
    をさらに含む、請求項14に記載のシステム。
JP2016576104A 2013-12-23 2013-12-23 マルチストランドアウトオブオーダプロセッサにおいてリタイア可能な複数の命令を特定する命令及びロジック Ceased JP2024527169A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2013/003083 WO2015097494A1 (en) 2013-12-23 2013-12-23 Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor

Publications (1)

Publication Number Publication Date
JP2024527169A true JP2024527169A (ja) 2024-07-22

Family

ID=50389464

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016576104A Ceased JP2024527169A (ja) 2013-12-23 2013-12-23 マルチストランドアウトオブオーダプロセッサにおいてリタイア可能な複数の命令を特定する命令及びロジック

Country Status (8)

Country Link
US (1) US10133582B2 (ja)
EP (1) EP3087473A1 (ja)
JP (1) JP2024527169A (ja)
KR (1) KR101898791B1 (ja)
CN (1) CN105723329B (ja)
DE (1) DE112013007703T5 (ja)
RU (1) RU2644528C2 (ja)
WO (1) WO2015097494A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10241801B2 (en) 2016-12-23 2019-03-26 Intel Corporation Method and apparatus to create register windows for parallel iterations to achieve high performance in HW-SW codesigned loop accelerator
US10235171B2 (en) 2016-12-27 2019-03-19 Intel Corporation Method and apparatus to efficiently handle allocation of memory ordering buffers in a multi-strand out-of-order loop processor
US10241789B2 (en) 2016-12-27 2019-03-26 Intel Corporation Method to do control speculation on loads in a high performance strand-based loop accelerator
CN115629807B (zh) * 2022-10-31 2023-04-14 海光信息技术股份有限公司 多线程处理器的译码方法、处理器、芯片及电子设备

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5740393A (en) * 1993-10-15 1998-04-14 Intel Corporation Instruction pointer limits in processor that performs speculative out-of-order instruction execution
US5903740A (en) * 1996-07-24 1999-05-11 Advanced Micro Devices, Inc. Apparatus and method for retiring instructions in excess of the number of accessible write ports
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US20020152259A1 (en) * 2001-04-14 2002-10-17 International Business Machines Corporation Pre-committing instruction sequences
JP4042364B2 (ja) * 2001-07-27 2008-02-06 日本電気株式会社 アドレス生成回路、選択判断回路
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7653912B2 (en) 2003-05-30 2010-01-26 Steven Frank Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations
US8307194B1 (en) * 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7500087B2 (en) * 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
US7278011B2 (en) * 2004-04-08 2007-10-02 International Business Machines Corporation Completion table configured to track a larger number of outstanding instructions without increasing the size of the completion table
US8694697B1 (en) * 2006-04-27 2014-04-08 Nvidia Corporation Rescindable instruction dispatcher
US8789060B1 (en) * 2007-12-27 2014-07-22 Cadence Design Systems, Inc. Deterministic, parallel execution with overlapping regions
WO2010060084A2 (en) 2008-11-24 2010-05-27 Intel Corporation Systems, methods, and apparatuses to decompose a sequential program into multiple threads, execute said threads, and reconstruct the sequential execution
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US8074060B2 (en) * 2008-11-25 2011-12-06 Via Technologies, Inc. Out-of-order execution microprocessor that selectively initiates instruction retirement early
US9052890B2 (en) 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
CN102064836B (zh) * 2010-11-26 2013-03-13 哈尔滨工业大学深圳研究生院 一种专用比较单元及ldpc码校验节点运算电路
US9268575B2 (en) * 2011-06-30 2016-02-23 Advanced Micro Devices, Inc. Flush operations in a processor
US9280352B2 (en) * 2011-11-30 2016-03-08 Apple Inc. Lookahead scanning and cracking of microcode instructions in a dispatch queue
CN102520903B (zh) * 2011-12-13 2014-07-23 中国科学院自动化研究所 支持定浮点可重构的长度可配置的向量最大/最小值网络
US9811340B2 (en) * 2012-06-18 2017-11-07 Intel Corporation Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor

Also Published As

Publication number Publication date
RU2644528C2 (ru) 2018-02-12
KR101898791B1 (ko) 2018-09-13
WO2015097494A1 (en) 2015-07-02
US20160314000A1 (en) 2016-10-27
DE112013007703T5 (de) 2016-09-29
US10133582B2 (en) 2018-11-20
CN105723329A (zh) 2016-06-29
KR20160073417A (ko) 2016-06-24
CN105723329B (zh) 2019-09-06
RU2016119815A (ru) 2017-11-28
EP3087473A1 (en) 2016-11-02

Similar Documents

Publication Publication Date Title
CN107003921B (zh) 具有有限状态机控制的可重配置测试访问端口
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
US10055256B2 (en) Instruction and logic for scheduling instructions
JP6306729B2 (ja) ストアをソート及びリタイアする命令及びロジック
EP3384378B1 (en) Instruction and logic for in-order handling in an out-of-order processor
CN108701101B (zh) 处理器系统管理中断事件的基于仲裁器的串行化
US20180004526A1 (en) System and Method for Tracing Data Addresses
US20170168819A1 (en) Instruction and logic for partial reduction operations
CN107077421B (zh) 用于页表游走改变位的指令和逻辑
CN108292271B (zh) 用于向量置换的指令和逻辑
US9690582B2 (en) Instruction and logic for cache-based speculative vectorization
US20160179552A1 (en) Instruction and logic for a matrix scheduler
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
KR101898791B1 (ko) 멀티 스트랜드 비순차 프로세서에서 회수를 위한 명령어들을 식별하는 명령어 및 로직
WO2018005718A1 (en) System and method for out-of-order clustered decoding
US20170123799A1 (en) Performing folding of immediate data in a processor
US10884735B2 (en) Instruction and logic for predication and implicit destination
WO2017168197A1 (en) Apparatus and method for improving performance of inter-strand communications
CN107408035B (zh) 用于缕程间通信的装置和方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160518

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240604

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20241029