JP2018500657A - 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック - Google Patents

融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック Download PDF

Info

Publication number
JP2018500657A
JP2018500657A JP2017527588A JP2017527588A JP2018500657A JP 2018500657 A JP2018500657 A JP 2018500657A JP 2017527588 A JP2017527588 A JP 2017527588A JP 2017527588 A JP2017527588 A JP 2017527588A JP 2018500657 A JP2018500657 A JP 2018500657A
Authority
JP
Japan
Prior art keywords
instruction
processor
jump
field
operand
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.)
Granted
Application number
JP2017527588A
Other languages
English (en)
Other versions
JP2018500657A5 (ja
JP6849274B2 (ja
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 JP2018500657A publication Critical patent/JP2018500657A/ja
Publication of JP2018500657A5 publication Critical patent/JP2018500657A5/ja
Application granted granted Critical
Publication of JP6849274B2 publication Critical patent/JP6849274B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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
    • G06F9/30058Conditional branch instructions
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/45525Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一実施形態では、バイナリトランスレーションが、単一のマクロ命令へと命令セットアーキテクチャの複数のマクロ命令を融合するために使用される。融合可能な命令シーケンスは、インクリメント、比較、及びジャンプ命令のシーケンスを含む。一実施形態では、処理デバイスが、融合されたマクロ命令にサポートを提供する。一実施形態では、処理デバイスは、プロセッサパイプラインの単一の実行ステージ内で、融合されたマクロ命令を実行する。一実施形態では、融合されたマクロ命令は、単一の実行サイクル内で実施される。

Description

本開示は、処理ロジック、マイクロプロセッサ、及び関連付けられた命令セットアーキテクチャの分野に関し、それらは、プロセッサまたは他の処理ロジックによって実行される場合、単一の機械命令へと複数の命令を融合することを含む論理的、数学的、または他の機能動作を実施する。
命令セットまたは命令セットアーキテクチャ(ISA:instruction set architecture)は、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外ハンドリング、ならびに外部入出力(I/O:input and output)を含む、プログラミングに関係付けられたコンピュータアーキテクチャの一部である。バイナリトランスレーション(「BT」:Binary Translation)は、1つのソース(「ゲスト」)のために構築されたバイナリを、別のターゲット(「ホスト」)ISAにトランスレートするための一般的な技法である。BTを使用すると、高レベルのソースコードを再コンパイルすることもなく、低レベルのアセンブリコードを書き直すこともなく、異なるアーキテクチャを用いてプロセッサ上で1つのプロセッサISAのために構築されたアプリケーションバイナリを実行することが可能である。ほとんどのレガシーコンピュータアプリケーションがバイナリフォーマットのみ利用可能なため、BTは、プロセッサが、それ用に作成されておらず利用できないアプリケーションの実行を可能にする可能性のために、非常に魅力的である。バイナリトランスレーションは、動的にまたは静的に実施され得る。動的BT(DBT:Dynamic BT)は、アプリケーションが実行されるとき、ランタイムにおいてバイナリトランスレーションを実施する。静的BT(SBT:Static BT)は、バイナリが実行される前に、バイナリに対して実施される。
実施形態は、例として図解され、以下の添付の図面の図において限定されない。
実施形態に従う、例示的なインオーダフェッチ、デコード、リタイアパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインとの両方を図解するブロック図である。
実施形態に従う、例示的なインオーダフェッチ、デコード、リタイアパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインとの両方を図解するブロック図である。
より具体的な例示的なインオーダコアアーキテクチャのブロック図である。 より具体的な例示的なインオーダコアアーキテクチャのブロック図である。
集積メモリコントローラ及び特定目的ロジックを有するシングルコアプロセッサならびにマルチコアプロセッサのブロック図である。
或る実施形態に従う、システムのブロック図を図解する。
或る実施形態に従う、第2のシステムのブロック図を図解する。
或る実施形態に従う、第3のシステムのブロック図を図解する。
或る実施形態に従う、システムオンチップ(SoC:system on a chip)のブロック図を図解する。
実施形態に従う、ターゲット命令セットにおけるバイナリ命令に、ソース命令セットにおけるバイナリ命令を転換するためにソフトウェア命令転換器の使用を対比するブロック図を図解する。
或る実施形態に従う、融合されたインクリメント_比較_ジャンプ動作を実施するためのビット操作の動作を図解するブロック図である。 或る実施形態に従う、融合されたインクリメント_比較_ジャンプ動作を実施するためのビット操作の動作を図解するブロック図である。
実施形態に従う、インクリメント_比較_ジャンプ命令の例示的なプロセッサ実装を図解するブロック図である。 実施形態に従う、インクリメント_比較_ジャンプ命令の例示的なプロセッサ実装を図解するブロック図である。
或る実施形態に従う、融合されたインクリメント_比較_ジャンプ動作を実施するためのロジックを含む処理システムのブロック図である。
或る実施形態に従う、ロジックが、例示的な融合されたインクリメント_比較_ジャンプ動作を処理するための流れ図である。
実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。 実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。
本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。 本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。 本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。 本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。
或る実施形態に従う、スカラ及びベクトルレジスタアーキテクチャのブロック図である。
ゲストとホストISAとの間のバイナリトランスレーションに加えて、SBTとDBTとの両方が、単一のISA内でバイナリ実行を最適化するために使用され得る。例えば、バイナリトランスレーションが、単一のマクロ命令へと命令セットアーキテクチャの複数のマクロ命令を融合するために使用され得る。一実施形態では、処理デバイスが、融合されたマクロ命令にサポートを提供する。「命令」という用語が、概して、本明細書では、プロセッサがマクロ命令からデコードするマイクロ命令またはマイクロ動作(例えば、micro−op)と対照的に、実行のためにプロセッサに与えられる命令であるマクロ命令を指すことに留意されたい。マイクロ命令またはmicro−opは、マクロ命令に関連付けられたロジックを実装するための動作を実施するために、プロセッサ上の実行ユニットに命令するように構成され得る。
プロセッサコアアーキテクチャが以下に記載され、本明細書に記載される実施形態に従う、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。数多くの具体的な詳細が、以下に記載される本発明の実施形態の完全な理解を提供するために、述べられる。しかしながら、実施形態が、これらの具体的な詳細のいくつかがなくても実践され得ることは、当業者に明らかであろう。他の実例では、周知の構造及びデバイスが、様々な実施形態の根底にある原理を不明瞭にすることを回避するために、ブロック図の形態で示される。
プロセッサコアは、異なる手段で、異なる目的のために、異なるプロセッサ内で実装され得る。例えば、そのようなコアの実装は、以下を含み得る。1)汎用コンピューティングのために意図された汎用インオーダコア。2)汎用コンピューティングのために意図された高性能汎用アウトオブオーダコア。3)主にグラフィックス及び/またはサイエンティフィック(スループット)コンピューティングのために意図された特定目的コア。プロセッサは、シングルプロセッサコアを使用して実装され得るか、複数のプロセッサコアを含み得る。プロセッサ内のプロセッサコアは、アーキテクチャ命令セットの観点から、同種または異種であり得る。
異なるプロセッサの実装は、以下を含む。1)汎用コンピューティングのための1または複数の汎用インオーダコア及び/または汎用コンピューティングのために意図された1または複数の汎用アウトオブオーダを含むセントラルプロセッサ、及び2)主にグラフィックス及び/またはサイエンティフィックのために意図された1または複数の特定目的コアを含むコプロセッサ(例えば、多くの集積コアプロセッサ)。そのような異なるプロセッサは、以下を含む異なるコンピュータシステムアーキテクチャに通じる。1)セントラルシステムプロセッサとは別個のチップ上のコプロセッサ、2)セントラルシステムプロセッサとは別個のダイ上にあるが、同じパッケージ内にあるコプロセッサ、3)他のプロセッサコアと同じダイ上のコプロセッサ(その場合、そのようなコプロセッサは、集積グラフィックス及び/もしくはサイエンティフィック(スループット)ロジック、または特定目的コア等の特定目的ロジックと時に称される)、ならびに4)同じダイ上に記載されたプロセッサ(アプリケーションコア(複数可)またはアプリケーションプロセッサ(複数可)と時に称される)、上述のコプロセッサ、及び追加の機能性を含み得るシステムオンチップ。
例示的なコアアーキテクチャ
[インオーダ及びアウトオブオーダコアのブロック図]
図1Aは、或る実施形態に従う、例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行/実行パイプラインとの両方を図解するブロック図である。図1Bは、或る実施形態に従う、プロセッサに含まれることになる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアとの両方を図解するブロック図である。図1A〜1Bの実線の囲みは、インオーダパイプライン及びインオーダコアを図解する一方で、破線の囲みの任意的な追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを図解する。インオーダの態様がアウトオブオーダの態様のサブセットであると想定して、アウトオブオーダの態様が記載されている。
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、長さデコードステージ104、デコードステージ106、割り当てステージ108、リネーミングステージ110、スケジューリング(ディスパッチまたは発行としても知られる)ステージ112、レジスタ読み出し/メモリ読み出しステージ114、実行ステージ116、ライトバック/メモリ書き込みステージ118、例外ハンドリングステージ122、及びコミットステージ124を含む。
図1Bは、実行エンジンユニット150に結合されたフロントエンドユニット130を含むプロセッサコア190を示し、両方ともメモリユニット170に結合される。コア190は、縮小命令セットコンピューティング(RISC:reduced instruction set computing)コア、複合命令セットコンピューティング(CISC:complex instruction set computing)コア、超長命令語(VLIW:very long instruction word)コア、またはハイブリッドもしくは代替のコアタイプであり得る。さらに別のオプションとして、コア190は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU:general purpose computing graphics processing unit)コア、グラフィックスコア等の特定目的コアであり得る。
フロントエンドユニット130は、命令キャッシュユニット134に結合された分岐予測ユニット132を含み、命令キャッシュユニット134は命令トランスレーションルックアサイドバッファ(TLB:translation lookaside buffer)136に結合され、命令TLB136は命令フェッチユニット138に結合され、命令フェッチユニット138はデコードユニット140に結合される。デコードユニット140(またはデコーダ)は、命令をデコードし、出力として、1または複数のマイクロ動作、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされるか、そうでなければ元の命令を反映するか、元の命令から派生される他の制御信号を生成し得る。デコードユニット140は、様々な異なる機構を使用して実装され得る。好適な機構の例としては、限定されないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA:programmable logic array)、マイクロコード読み出し専用メモリ(ROM:read only memory)等が挙げられる。一実施形態では、コア190は、マイクロコードROM、または或る特定のマクロ命令のためにマイクロコードを記憶する他の媒体を含む(例えば、デコードユニット140内、そうでなければフロントエンドユニット130内)。デコードユニット140は、実行エンジンユニット150内のリネーム/アロケータユニット152に結合される。
実行エンジンユニット150は、リタイアメントユニット154及び1または複数のスケジューラユニット(複数可)156のセットに結合されたリネーム/アロケータユニット152を含む。スケジューラユニット(複数可)156は、リザベーションステーション、中心命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット(複数可)156は、物理レジスタファイル(複数可)ユニット(複数可)158に結合される。物理レジスタファイル(複数可)ユニット158の各々は、1または複数の物理レジスタファイルを表し、物理レジスタファイルの異なるファイルは、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されることになる次の命令のアドレスである命令ポインタ)等の1または複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイル(複数可)ユニット158は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイル(複数可)ユニット(複数可)158は、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な手段を図解するために、リタイアメントユニット154によって重ね合わされる(例えば、順序変更バッファ(複数可)及びリタイアメントレジスタファイル(複数可)を使用して、フューチャーファイル(複数可)、履歴バッファ(複数可)、及びリタイアメントレジスタファイル(複数可)を使用して、レジスタマップ及びレジスタのプールを使用して等)。リタイアメントユニット154及び物理レジスタファイル(複数可)ユニット(複数可)158は、実行クラスタ(複数可)160に結合される。実行クラスタ(複数可)160は、1または複数の実行ユニット162のセット及び1または複数のメモリアクセスユニット164のセットを含む。実行ユニット162は、様々なタイプのデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々な動作(例えば、シフト、加算、減算、乗算)を実施し得る。いくつかの実施形態は、具体的な関数または関数のセット専用のいくらかの実行ユニットを含み得る一方で、他の実施形態は、1つのみの実行ユニット、またはそれらのすべてがすべての関数を実施する複数の実行ユニットを含み得る。或る特定の実施形態では、或る特定のタイプのデータ/動作用に別個のパイプラインを形成するため、スケジューラユニット(複数可)156、物理レジスタファイル(複数可)ユニット(複数可)158、及び実行クラスタ(複数可)160は、複数である可能性があるものとして示されている(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/または各々が独自のスケジューラユニット、物理レジスタファイル(複数可)ユニット、ならびに/もしくは実行クラスタを有するメモリアクセスパイプライン。そして、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット(複数可)164を有する或る特定の実施形態が実装される)。別個のパイプラインが使用される場合、これらのパイプラインのうち1または複数がアウトオブオーダ発行/実行で、残りがインオーダであり得ることも理解されたい。
メモリアクセスユニット164のセットは、メモリユニット170に結合され、メモリユニット170は、レベル2(L2)キャッシュユニット176に結合されたデータキャッシュユニット174に結合されたデータTLBユニット172を含む。例示的な一実施形態では、メモリアクセスユニット164は、ロードユニット、記憶アドレスユニット、及び記憶データユニットを含み得、それらの各々は、メモリユニット170内のデータTLBユニット172に結合される。命令キャッシュユニット134は、メモリユニット170内のレベル2(L2)キャッシュユニット176にさらに結合される。L2キャッシュユニット176は、1または複数の他のレベルのキャッシュに、最終的には主メモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン100を実装し得る。1)命令フェッチ138は、フェッチステージ102及び長さデコーディングステージ104を実施する。2)デコードユニット140は、デコードステージ106を実施する。3)リネーム/アロケータユニット152は、割り当てステージ108及びリネーミングステージ110を実施する。4)スケジューラユニット(複数可)156は、スケジュールステージ112を実施する。5)物理レジスタファイル(複数可)ユニット(複数可)158及びメモリユニット170は、レジスタ読み出し/メモリ読み出しステージ114を実施し、実行クラスタ160は、実行ステージ116を実施する。6)メモリユニット170及び物理レジスタファイル(複数可)ユニット(複数可)158は、ライトバック/メモリ書き込みステージ118を実施する。7)様々なユニットが、例外ハンドリングステージ122に関与し得る。8)リタイアメントユニット154及び物理レジスタファイル(複数可)ユニット(複数可)158は、コミットステージ124を実施する。
コア190は、本明細書に記載される命令(複数可)を含む1または複数の命令セット(例えば、x86命令セット(より新しいバージョンで追加されたいくつかの拡張を含む)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、イングランドのケンブリッジのARM HoldingsのARM(登録商標)命令セット(NEON等の任意的な追加の拡張を含む))をサポートし得る。一実施形態では、コア190は、パックデータ命令セット拡張(例えば、AVX1、AVX2等)をサポートするためのロジックを含み、多くのマルチメディアのアプリケーションによって使用される動作が、パックデータを使用して実施されることを可能にする。
コアがマルチスレッディングをサポートし得(動作またはスレッドの2以上の並列セットを実行する)、時分割マルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時マルチスレッディングしているスレッドの各々に、論理的コアを提供する場合)、またはこれらの組み合わせ(例えば、Intel(登録商標)のHyperーThreading Technology等、時分割フェッチならびにデコーディング及びその後の同時マルチスレッディング)を含む様々な手段でそれを行い得ることを理解されたい。
レジスタリネーミングがアウトオブオーダ実行のコンテキストにおいて記載される一方で、レジスタリネーミングがインオーダアーキテクチャにおいて使用され得ることを理解されたい。プロセッサの図解された実施形態は、別個の命令キャッシュユニット134、データキャッシュユニット174、及び共有L2キャッシュユニット176も含む一方で、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュ等、命令とデータとの両方に対して単一の内部キャッシュを有し得る。いくつかの実施形態では、システムは、内部キャッシュと、コア及び/またはプロセッサの外部の外部キャッシュとの組み合わせを含み得る。代わりに、キャッシュのすべては、コア及び/またはプロセッサの外部に存在し得る。
具体的な例示的なインオーダコアアーキテクチャ
図2A〜2Bは、より具体的な例示的なインオーダコアアーキテクチャのブロック図であり、そのコアは、チップ内のいくつかのロジックブロックのうち1つ(同一タイプ及び/または異なるタイプの他のコアを含む)となるであろう。ロジックブロックは、アプリケーションに依存して、何らかの固定関数ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックと、高帯域の相互接続ネットワーク(例えば、リングネットワーク)を通して通信する。
図2Aは、或る実施形態に従うレベル2(L2)キャッシュ204のローカルサブセットを有するシングルプロセッサコア、及びそのオンダイの相互接続ネットワーク202への接続、のブロック図である。一実施形態では、命令デコーダ200は、パックデータ命令セット拡張を用いて、x86命令セットをサポートする。L1キャッシュ206は、キャッシュメモリのスカラ及びベクトルユニットへの低遅延アクセスを可能にする。一実施形態では(設計を単純化するために)、スカラユニット208及びベクトルユニット210は、別個のレジスタセット(それぞれ、スカラレジスタ212及びベクトルレジスタ214)を使用し、それらの間で転送されるデータは、メモリへ書き込まれて、その後、レベル1(L1)キャッシュ206からリードバックされる一方、代替の実施形態は、異なる手法を使用し(例えば、単一のレジスタセットを使用するか、データが、書き込まれてリードバックされることなく2つのレジスタファイルの間で転送されることを可能にする通信経路を含み)得る。
L2キャッシュ204のローカルサブセットは、プロセッサコアにつき1つ、別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ204の独自のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット204内に記憶されて、迅速に、かつ独自のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に、アクセスされ得る。プロセッサコアによって書き込まれたデータは、独自のL2キャッシュサブセット204内に記憶されて、必要に応じて、他のサブセットからフラッシュされる。リングネットワークは、共有データのためにコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他のロジックブロック等のエージェントが、チップ内で互いに通信することを可能にするように双方向である。各リングデータ経路は、方向につき1012ビット幅である。
図2Bは、或る実施形態に従う、図2A中のプロセッサコアの一部の展開図である。図2Bは、L1キャッシュ204のL1データキャッシュ206Aの部分、ならびにベクトルユニット210及びベクトルレジスタ214に関するさらなる詳細を含む。具体的には、ベクトルユニット210は、16−wideベクトル処理ユニット(VPU:vector−processing unit)であり(16−wide算術ロジックユニット(ALU:arithmetic logic unit)228を参照のこと)、それは、整数、単一精度浮動、及び倍精度浮動の命令のうち1または複数を実行する。VPUは、スウィズルユニット220を用いてレジスタ入力をスウィズルすること、数値転換ユニット222A〜Bを用いた数値転換、及びメモリ入力上の複製ユニット224を用いた複製をサポートする。書き込みマスクレジスタ226は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
[集積メモリコントローラ及び特定目的ロジックを有するプロセッサ]
図3は、或る実施形態に従う、2つ以上のコアを有し得、集積メモリコントローラを有し得、かつ集積グラフィックスを有し得るプロセッサ300のブロック図である。図3中の実線の囲みは、シングルコア302A、システムエージェント310、1または複数のバスコントローラユニット316のセットを有するプロセッサ300を図解する一方で、破線の囲みの任意的な追加は、複数のコア302A〜N、システムエージェントユニット310内の1または複数の集積メモリコントローラユニット(複数可)314のセット、及び特定目的ロジック308を有する代替のプロセッサ300を図解する。
したがって、プロセッサ300の異なる実装は、以下を含み得る。1)特定目的ロジック308が集積グラフィックス及び/またはサイエンティフィック(スループット)ロジックであり(1または複数のコアを含み得る)、かつコア302A〜Nが、1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、及び2つの組み合わせ)であるCPU、2)コア302A〜Nが、主にグラフィックス及び/またはサイエンティフィック(スループット)のために意図された多数の特定目的コアであるコプロセッサ、ならびに3)コア302A〜Nが、多数の汎用インオーダコアであるコプロセッサ。したがって、プロセッサ300は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多集積コア(MIC:high−throughput many integrated core)コプロセッサ(30以上のコアを含む)、埋め込みプロセッサ等の、汎用プロセッサ、コプロセッサ、または特定目的プロセッサであり得る。プロセッサは、1または複数のチップ上に実装され得る。プロセッサ300は、例えば、BiCMOS、CMOS、またはNMOS等のいくらかの処理技法のいずれかを使用する、1または複数の基板の一部であり得、及び/または該基板上に実装され得る。
メモリ階層は、コア内のキャッシュの1または複数のレベル、1または複数の共有キャッシュユニット306のセット、及び集積メモリコントローラユニット314のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット306のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC:last level cache)、及び/またはこれらの組み合わせ等の1または複数の中間レベルキャッシュを含み得る。一実施形態では、リングベースの相互接続ユニット312は、集積グラフィックスロジック308、共有キャッシュユニット306のセット、及びシステムエージェントユニット310/集積メモリコントローラユニット(複数可)314を相互接続する一方で、代替の実施形態は、そのようなユニットを相互接続するための任意の数の周知の技法を使用し得る。一実施形態では、1または複数のキャッシュユニット306及びコア302A〜Nの間のコヒーレンシが維持される。
いくつかの実施形態では、コア302A〜Nのうち1または複数は、マルチスレッディングができる。システムエージェント310は、コア302A〜Nを調整及び動作するそれらのコンポーネントを含む。システムエージェントユニット310は、例えば、電力制御ユニット(PCU:power control unit)及び表示ユニットを含み得る。PCUは、コア302A〜N及び集積グラフィックスロジック308の電源状態を調節するために必要とされるロジック及びコンポーネントであり得るか、それらを含み得る。表示ユニットは、1または複数の外部接続された表示を駆動するためのものである。
コア302A〜Nは、アーキテクチャ命令セットの観点から、同種または異種であり得、つまり、コア302A〜Nのうち2以上は、同じ命令セットを実行することができ得る一方で、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行することができ得る。
[例示的なコンピュータアーキテクチャ]
図4〜7は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当該技術分野において知られている他のシステム設計及び構成もまた好適である。一般的に、本明細書に開示されるようなプロセッサ及び/もしくは他の実行ロジックを組み込むことができる多様なシステムまたは電子デバイスが、概して好適である。
図4は、或る実施形態に従う、システム400のブロック図を示す。システム400は、コントローラハブ420に結合される1または複数のプロセッサ410、415を含み得る。一実施形態では、コントローラハブ420は、グラフィックスメモリコントローラハブ(GMCH:graphics memory controller hub)490及び入力/出力ハブ(IOH)450(別個のチップ上にあり得る)を含み、GMCH490は、メモリ440及びコプロセッサ445が結合されるメモリ及びグラフィックスコントローラを含み、IOH450は、入力/出力(I/O)デバイス460をGMCH490に結合する。代わりに、メモリ及びグラフィックスコントローラのうち1つまたは両方は、プロセッサ(本明細書に記載されるような)内に集積され、メモリ440、及びコプロセッサ445は、IOH450を有する単一のチップにおいて、プロセッサ410、及びコントローラハブ420に直接的に結合される。
追加のプロセッサ415の任意的な性質は、破線で図4に表記される。各プロセッサ410、415は、本明細書に記載される処理コアのうち1または複数を含み、プロセッサ300の何らかのバージョンであり得る。
メモリ440は、例えば、動的ランダムアクセスメモリ(DRAM:dynamic random access memory)、相変化メモリ(PCM:phase change memory)、またはそれら2つの組み合わせであり得る。少なくとも1つの実施形態について、コントローラハブ420は、フロントサイドバス(FSB:frontside bus)等のマルチドロップバス、QuickPath相互接続(QPI:QuickPath Interconnect)等のポイントツーポイントインターフェース、または類似の接続495を介して、プロセッサ(複数可)410、415と通信する。
一実施形態では、コプロセッサ445は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサ等の特定目的プロセッサである。一実施形態では、コントローラハブ420は、集積グラフィックスアクセラレータを含み得る。
アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性等を含む利点のメトリクスの範囲の観点から、物理リソース410、415の間には様々な違いがあり得る。
一実施形態では、プロセッサ410は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内の埋め込みは、コプロセッサ命令であり得る。プロセッサ410は、これらのコプロセッサ命令を、付加されたコプロセッサ445によって実行されるべきタイプとして認識する。したがって、プロセッサ410は、コプロセッサバスまたは他の相互接続上で、コプロセッサ445に対して、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)を発行する。コプロセッサ(複数可)445は、受信されたコプロセッサ命令を受け入れ、それらを実行する。
図5は、或る実施形態に従う、第1のより具体的な、例示的なシステム500のブロック図を示す。図5に示されるように、マルチプロセッサシステム500は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続550を介して結合された第1のプロセッサ570及び第2のプロセッサ580を含む。プロセッサ570及び580の各々は、プロセッサ300の何らかのバージョンであり得る。本発明の一実施形態では、プロセッサ570及び580はそれぞれ、プロセッサ410及び415である一方で、コプロセッサ538はコプロセッサ445である。別の実施形態では、プロセッサ570及び580はそれぞれ、プロセッサ410、コプロセッサ445である。
それぞれ、集積メモリコントローラ(IMC:integrated memory controller)ユニット572及び582を含む、プロセッサ570及び580が示される。プロセッサ570は、また、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P:point−to−point)インターフェース576及び578を含み、同様に、第2のプロセッサ580は、P−Pインターフェース586及び588を含む。プロセッサ570、580は、P−Pインターフェース回路578、588を使用して、ポイントツーポイント(P−P)インターフェース550を介して情報を交換し得る。図5に示されるように、IMC572及び582は、プロセッサを、それぞれのメモリ、すなわち、メモリ532及びメモリ534に結合し、メモリ532及びメモリ534は、それぞれのプロセッサにローカルに取設された主メモリの部分であり得る。
各プロセッサ570、580は、ポイントツーポイントインターフェース回路576、594、586、598を使用して、個々のP−Pインターフェース552、554を介して、チップセット590と情報を交換し得る。チップセット590は、高性能インターフェース539を介して、任意にコプロセッサ538と情報を交換し得る。一実施形態では、コプロセッサ538は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、埋め込みプロセッサ等の特定目的プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサ内に、または両方のプロセッサの外に含まれ得るが、それでも、P−P相互接続を介してプロセッサと接続され得、これによって、プロセッサのどちらかまたは両方のローカルキャッシュ情報は、プロセッサが低電力モードに入れられる場合、共有キャッシュ内に記憶され得る。
チップセット590は、インターフェース596を介して第1のバス516に結合され得る。一実施形態では、第1のバス516は、周辺コンポーネント相互接続(PCI:Peripheral Component Interconnect)バス、またはPCIエクスプレスバスもしくは別の第3の生成I/O相互接続バス等のバスであり得るが、本発明の範囲はそのように限定されない。
図5に示されるように、様々なI/Oデバイス514は、第1のバス516を第2のバス520に結合するバスブリッジ518と共に、第1のバス516に結合され得る。一実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPUの、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP:digital signal processing)ユニット等)、フィールドプログラム可能ゲートアレイ、または任意の他のプロセッサ等の1または複数の追加のプロセッサ(複数可)515は、第1のバス516に結合される。一実施形態では、第2のバス520は、ロウピンカウント(LPC:low pin count)バスであり得る。一実施形態では、例えば、キーボード及び/またはマウス522、通信デバイス527、ならびに命令/コード及びデータ530を含み得るディスクドライブまたは他の大記憶デバイス等の記憶ユニット528を含む、様々なデバイスは、第2のバス520に結合され得る。さらに、オーディオI/O524は、第2のバス520に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図5のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
図6は、或る実施形態に従う、第2のより具体的な例示的なシステム600のブロック図を示す。図5及び6における同様の要素は、同様の参照番号を帯び、図5の或る特定の態様は、図6の他の態様を不明瞭にすることを回避するために、図6から省略された。
図6は、プロセッサ570、580がそれぞれ、集積メモリ及びI/O制御ロジック(「CL」)572及び582を含み得ることを図解する。したがって、CL572、582は、集積メモリコントローラユニットを含み、I/O制御ロジックを含む。図6は、メモリ532、534がCL572、582に結合されるだけでなく、I/Oデバイス614が制御ロジック572、582に結合されることも図解する。レガシーI/Oデバイス615は、チップセット590に結合される。
図7は、或る実施形態に従う、SoC700のブロック図を示す。図3における類似の要素は、同様の参照番号を帯びる。また、破線の囲みは、より高度なSoCに関する任意的な特徴である。図7において、相互接続ユニット(複数可)702は、1または複数のコア202A〜N及び共有キャッシュユニット(複数可)306のセットを含むアプリケーションプロセッサ710と、システムエージェントユニット310と、バスコントローラユニット(複数可)316と、集積メモリコントローラユニット(複数可)314と、集積グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る1または複数のコプロセッサのセット720と、静的ランダムアクセスメモリ(SRAM:static random access memory)ユニット730と、直接メモリアクセス(DMA:direct memory access)ユニット732と、1または複数の外部表示に結合するための表示ユニット740とを含み得る。一実施形態では、コプロセッサ(複数可)720は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサ等の特定目的プロセッサを含む。
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせにおいて実装される。実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性及び不揮発性メモリ及び/または記憶要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを備えるプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装される。
図5に図解されたコード530等のプログラムコードは、入力命令に適用されて、本明細書に記載される機能を実施し、出力情報を生成し得る。出力情報は、既知の様式で、1または複数の出力デバイスに適用され得る。この用途の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC:application specific integrated circuit)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するための高レベル手続き型またはオブジェクト指向型プログラミング言語において実装され得る。プログラムコードは、また、所望される場合、アセンブリまたは機械言語において実装され得る。事実、本明細書に記載される機構は、任意の特定のプログラミング言語に範囲を限定されない。いかなる場合も、言語は、コンパイルされたまたは解釈された言語であり得る。
少なくとも1つの実施形態のうち1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に記憶された代表的なデータによって実装され得、それは、機械によって読み出される場合、機械に、本明細書に記載される技法を実施するためのロジックをファブリケートさせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体(「テープ」)上に記憶され、様々な顧客または製造設備に供給されて、ロジックまたはプロセッサを実際に製作するファブリケーション機械へとロードし得る。例えば、ARM Holdings,Ltd.、及びChinese Academy of SciencesのInstitute of Computing Technology(ICT)によって開発されたプロセッサ等のIPコアは、様々な顧客または実施権者に認可または販売され、これらの顧客または実施権者によって生産されたプロセッサにおいて実装され得る。
そのような機械可読記憶媒体は、限定無しに、機械またはデバイスによって製造または形成される物品の非一時的、有形の配置を含み得、ハードディスク等の記憶媒体や、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読取り専用メモリ(CD−ROM:compact disk read−only memory)、書き換え可能コンパクトディスク(CD−RW:rewritable compact disk)、及び光磁気ディスクを含む任意の他のタイプのディスク、読取り専用メモリ(ROM)等の半導体デバイス、動的ランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、消去及びプログラム可能読取り専用メモリ(EPROM:erasable programmable read−only memory)、フラッシュメモリ、電気的消去可能プログラム可能読取り専用メモリ(EEPROM:electrically erasable programmable read−only memory)、相変化メモリ(PCM)、磁気もしくは光カード等のランダムアクセスメモリ(RAM:random access memory)、または電子命令を記憶するのに好適な任意の他のタイプの媒体を含み得る。
したがって、実施形態は、また、命令を含む、または本明細書に記載される構造、回路、装置、プロセッサ、及び/もしくはシステム特徴を定義するハードウェア記述言語(HDL:Hardware Description Language)等の設計データを含む、非一時的、有形の機械可読媒体を含む。そのような実施形態は、プログラム製品とも称され得る。
[エミュレーション(バイナリトランスレーション、コードモーフィング等を含む)]
本明細書に記載される単一の命令セットの最適化に加えて、命令転換は、ソース命令セットからターゲット命令セットへ命令を転換するために使用され得る。例えば、命令転換器は、コアによって処理されることになる1または複数の他の命令に命令をトランスレート(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを使用して)、モーフィング、エミュレート、そうでなければ転換し得る。命令転換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令転換器は、オンプロセッサ、オフプロセッサ、または一部オンプロセッサ及び一部オフプロセッサであり得る。
図8は、或る実施形態に従う、ターゲット命令セットにおけるバイナリ命令に、ソース命令セットにおけるバイナリ命令を転換するためにソフトウェア命令転換器の使用を対比するブロック図である。図解された実施形態では、命令転換器はソフトウェア命令転換器であるが、代わりに、命令転換器は、ソフトウェア、ファームウェア、ハードウェア、または様々なこれらの組み合わせにおいて実装され得る。図8は、高レベル言語802におけるプログラムが、x86コンパイラ804を使用してコンパイルされて、少なくとも1つのx86命令セットコア816を有するプロセッサによってネイティブに実行され得るx86バイナリコード806を生成し得ることを示す。
少なくとも1つのx86命令セットコア816を有するプロセッサは、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を成し遂げるために、以下を互換的に実行するか、そうでなければ別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ機能を実施し得る任意のプロセッサを表す。(1)Intel(登録商標)x86命令セットコアの命令セットの実質的な部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で走ることを目標とされたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン。x86コンパイラ804は、追加のリンケージ処理の有る無しに関わらず、少なくとも1つのx86命令セットコア816を有するプロセッサ上で実行され得るx86バイナリコード806(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図8は、高レベル言語802におけるプログラムが、代替の命令セットコンパイラ808を使用してコンパイルされて、少なくとも1つのx86命令セットコア814を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するか、及び/またはイングランドのケンブリッジのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード810を生成し得ることを示す。
命令転換器812は、x86命令セットコア814の無いプロセッサによってネイティブに実行され得るコードへと、x86バイナリコード806を転換するために使用される。この転換されたコードは、代替の命令セットバイナリコード810と同じである可能性が低い。なぜなら、これができる命令転換器は、製造することが難しいからである。しかしながら、転換されたコードは、一般的な動作を達成し、代替の命令セットからの命令から作り上げられることになる。したがって、命令転換器812は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、それは、エミュレーション、シミュレーション、または任意の他の処理を通して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、x86バイナリコード806を実行することを可能にする。
[最適化動的バイナリトランスレーションシステム]
DBTシステムは、融合可能な命令シーケンスを発見して、複数の命令を単一の命令へと融合することによりそれらの命令シーケンスを最適化することができる最適化動的バイナリトランスレーションシステムとして構成され得る。図9A〜9Bは、融合された命令へと複数の命令を融合することを含むランタイムバイナリ最適化を実施するための例示的なバイナリトランスレーションシステム及びロジックを図解する。図9Aは、或る実施形態に従う、動的バイナリトランスレーションのために構成されるコンピューティングシステムのブロック図である。図9Bは、単一の融合命令へとソースコードブロックにおける命令を融合するためのロジックの流れ図である。
図9Aのシステム900は、システムメモリ904に結合されたプロセッサ902を含む。一実施形態では、システムは、追加として、キャッシュメモリ905(例えば、図1Bのデータキャッシュユニット174またはL2キャッシュユニット176)、及びプロセッサ902と結合されたまたはプロセッサ902内に集積されたスクラッチパッドメモリ907を含む。プロセッサ902は、物理レジスタ906のセット及び1または複数のコア処理ユニット(例えば、「コア」903A〜N)を含む。一実施形態では、コア処理ユニットの各々は、複数の同時スレッドを実行するように構成される。
システムメモリ904は、ソースバイナリアプリケーション910、動的バイナリトランスレーションシステム915、及びホスト動作システム(「OS:operating system」)920をホストし得る。動的バイナリトランスレーションシステム915は、ターゲットバイナリコード912、レジスタマッピングモジュール916を含む動的バイナリトランスレータコード914、及び/またはソースレジスタ記憶918のブロックを含み得る。ソースバイナリアプリケーション910は、アセンブルされた低レベルコードまたはコンパイルされた高レベルコードであり得るソースバイナリコードブロックのセットを含む。ソースバイナリコードブロックは、インクリメント、比較、及びジャンプ命令を含むロジックを分岐させることを含み得る命令のシーケンスである。
一実施形態では、ターゲットバイナリコードブロック(複数可)912は、「コードキャッシュ」911と呼ばれるシステムメモリの領域内に記憶される。コードキャッシュ911は、ソースバイナリコードブロックの1または複数の対応するブロックからトランスレートされたターゲットバイナリコードブロック(複数可)912に対する記憶として使用される。システムメモリ904は、プロセッサレジスタ906へ/からデータをロード/記憶するように構成されるソースレジスタ記憶918をホストし得る。いくつかの実施形態では、キャッシュメモリ905及び/またはスクラッチパッドメモリ907は、プロセッサレジスタ(複数可)906へ/からデータをロード/記憶するように構成される。
一実施形態では、動的バイナリトランスレータコード914及びレジスタマッピングモジュール916は、ソースバイナリアプリケーション910のブロック(複数可)をターゲットバイナリコードブロック(複数可)912へと変換するために、ソースバイナリアプリケーション910上で動作するための1または複数のコアによって実行される。ターゲットバイナリコードブロック(複数可)912は、ソースバイナリアプリケーション910の対応するソースバイナリコードブロックの機能性を含むように構成される。一実施形態では、ソースバイナリアプリケーションのソースバイナリコードブロックの複数の命令が、より小さい数の命令に組み合わされて(例えば、融合されて)、より小さい数の命令にわたって実施されるソースバイナリアプリケーションと同じ機能性を含む最適化されたターゲットバイナリコード912を作成する。例えば、ソースバイナリアプリケーション910は、カウンタをインクリメントまたはデクリメントすること、カウンタを定数と比較すること、その後、或る特定の制限が満たされる場合(例えば、ループ変数がまだNまでインクリメントされなかった場合、Nは、ループ反復の所望される数である)ジャンプを呼び出すことを含む、比較及びジャンプ命令シーケンスを含み得る。一実施形態では、DBTシステム915は、3つの別個のインクリメント、比較、及びジャンプ命令を単一の命令へと圧縮する(例えば、融合する)ように構成される。
システム900がバイナリコードブロックを実行するための呼び出しを受信する場合、DBTシステム915は、融合可能な命令についてコードブロックをスキャンして、命令シーケンスを融合された命令へと組み合わせる。命令をスキャン及び最適化するための例示的なロジックは、図9Bに示される。DBTシステム915が図解される一方で、一実施形態では、SBTは、バイナリが実行される前に、バイナリに対して実施され、発見される任意の静的に融合可能な命令シーケンス(例えば、静的分析を介して安全であると判定される命令シーケンス)は、融合されて、最適化されたバイナリを実行のために作成し得る。
図9Bの920において示されるように、システムは、バイナリコードブロックを実行するための呼び出しを受信する。一実施形態では、システムは、922において示されるように、インクリメント、比較、及びジャンプ命令シーケンスについてスキャンする。命令シーケンスが図9Bの924において検出される場合、トランスレーションロジックは、926において、任意のデータ依存性が検出されたシーケンス内に存在するかどうかを判定することを含む追加の動作を実施し得る。そうでなければ、次のコードブロックが存在する場合、システムは、932において、次の利用可能なコードブロックに進む。例示的な検出されたコードシーケンスは、以下の表1に示される。
Figure 2018500657
表1の例示的な命令では、インクリメント命令が行(1)において示され、比較命令が行(3)において示され、ジャンプ命令が行(5)において示される。行(2)は、コード、fragment_Aを表し、それは、行(1)におけるインクリメントと行(3)における比較との間の0以上の命令を含み得る。行(4)は、コード、fragment_Bを表し、それは、行(3)における比較と行(5)におけるジャンプとの間の0以上の命令を含み得る。JE(等しい場合、ジャンプ)命令が行(5)において示される一方で、実施形態は任意の特定のジャンプ命令に限定されない。その上、CMP(比較)命令が示される一方で、他の比較動作(例えば、TEST)も融合され得る。
ADD、CMP、及びJE命令の間の命令断片は、いずれの他の命令も含まない場合がある。そのような場合は、ADD/CMP/JEシーケンスは連続しているであろう。しかしながら、他の命令は、断片内のコードシーケンスに存在し得る。コードシーケンスにおいて任意の追加の命令を順序変更する前に、トランスレーションロジックは、926において、任意のデータ依存が存在するかどうかを判定するために、コードシーケンスをスキャンする。fragment_Aまたはfragment_Bにおける命令のオペランドのいずれかが、追加、比較、またはジャンプ命令に対してオペランドに依存する場合、命令を順序変更することが可能にされていない場合があり、そのようなコードブロックが存在する場合、トランスレーションロジックは、932において、次の利用可能なコードブロックに進む。追加として、任意の追加の分岐命令がfragment_Aまたはfragment_Bのどちらかに存在する場合、命令を順序変更することを可能にされていない場合がある。しかしながら、いくつかの実施形態では、ジャンプ命令直後の追加の分岐命令が可能にされる。
しかしながら、fragment_Aまたはfragment_Bの命令が、追加、比較、またはジャンプ命令のオペランドとのデータ依存性を有しない場合、入来コードストリームにおいて追加の命令を可能にすることが合法であり、トランスレータは、任意のデータ依存性に違反することなく、自由にこれらの命令を順序変更するべきである。したがって、トランスレーションロジックは、ブロック928において、命令の検出されたシーケンス内のコード断片において、任意の命令を順序変更し得る。ブロック930において、トランスレーションロジックは、比較動作のためのレジスタ及び定数値、ならびにジャンプ動作のためのジャンプラベルを含む、命令シーケンスを実施するよう要求されるオペランドを含む、単一のインクリメント_比較_ジャンプ動作と、別個のインクリメント、比較、ジャンプ命令を置き換える。例示的な順序変更されたコードシーケンスは、以下の表2に示される。
Figure 2018500657
上記表2に示されるように、fragment_A及びfragment_Bのための命令は、行(6)及び行(7)において示されるように、順序変更され得る。行8において示されるように、インクリメント、比較、及びジャンプ動作のためのオペランドを含む融合されたインクリメント_比較_ジャンプ動作が挿入される。
例示的な融合された命令プロセッサ実装
図10A〜10Bは、インクリメント_比較_ジャンプ動作の例示的なプロセッサ実装を図解するブロック図である。いくつかの実施形態では、実装するプロセッサは、命令を実装するためのいくつかのアーキテクチャの特徴を含む。図10Aは、或る実施形態に従う、動作を実施するためのロジックを含むプロセッサコアのブロック図である。図10Bは、或る実施形態に従う、インクリメント_比較_ジャンプ動作を実装するための例示的な具体的なマイクロアーキテクチャのブロック図である。
図10Aに示されるように、一実施形態では、プロセッサコア1000は、実行されることになる命令をフェッチするためのインオーダフロントエンド1001を含み、プロセッサパイプライン内で、後で使用されることになる命令を準備する。一実施形態では、フロントエンド1001は、図1Bのフロントエンドユニット130に類似しており、メモリから命令をプリエンプティブにフェッチするための命令プリフェッチャ1026を含むコンポーネントを追加として含む。フェッチされた命令は、命令をデコードするか、解釈するための命令デコーダ1028に供給され得る。
一実施形態では、命令デコーダ1028は、受信された命令を、機械が実行し得る「マイクロ命令」または「マイクロ動作」と呼ばれる(micro opまたはuopとも呼ばれる)1または複数の動作へとデコードする。他の実施形態では、デコーダは、命令を、オペコードと対応するデータと、一実施形態に従う動作を実施するマイクロアーキテクチャによって使用される制御フィールドとにパースする。一実施形態では、トレースキャッシュ1029は、デコードされたuopを取り、それらを、uopキュー1034におけるプログラム順序のシーケンスまたはトレースに、実行のためにアセンブルする。
一実施形態では、プロセッサコア1000は、複合命令セットを実装する。トレースキャッシュ1029が複合命令に遭遇する場合、マイクロコードROM1032は、動作を完了するために必要とされるuopを提供する。いくつかの命令は、単一のmicro−opへと転換される一方で、他のものは、フル動作を完了するためのいくつかのmicro−opを必要とする。一実施形態では、命令は、命令デコーダ1028における処理のために、小さい数のmicro−opへとデコードされ得る。別の実施形態では、いくらかのmicro−opが、動作を達成するために必要とされる場合、命令は、マイクロコードROM1032内に記憶され得る。例えば、一実施形態では、5つ以上のmicro−opが命令を完了することを必要とされる場合、デコーダ1028は、命令を実施するために、マイクロコードROM1032にアクセスする。
トレースキャッシュ1029は、マイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを判定して、マイクロコードROM1032から一実施形態に従う1または複数の命令を完了するためのエントリポイントプログラム可能ロジックアレイ(PLA)を指す。マイクロコードROM1032が命令のためにmicro−opを順番に並べ終えた後、機械のフロントエンド1001は、トレースキャッシュ1029からmicro−opをフェッチすることを再開する。一実施形態では、プロセッサコア1000は、命令が実行のために準備されるアウトオブオーダ実行エンジン1003を含む。アウトオブオーダ実行ロジックは、命令フローを順序変更して、命令が命令パイプラインを通して進むにつれて性能を最適化するためのいくらかのバッファを有する。マイクロコードサポートのために構成される実施形態について、アロケータロジックは、各uopが実行の最中に使用する機械バッファ及びリソースを割り当てる。追加として、レジスタリネーミングロジックは、レジスタファイル中の物理レジスタにおいて、ロジックレジスタを物理レジスタにリネーミングする。
一実施形態では、アロケータは、命令スケジューラ、メモリスケジューラ、高速スケジューラ1002、遅い/一般的な浮動小数点スケジューラ1004、及び簡易浮動小数点スケジューラ1006の前に、各uopのエントリを2つのuopキューのうち1つに対して、1つをメモリ動作に、1つを非メモリ動作というふうに割り当てる。uopスケジューラ1002、1004、及び1006は、それらの従属入力レジスタオペランドソースの準備ができていること、及びuopがそれらの動作を完了する必要がある実行リソースuopの利用可能性に基づいて、いつuopの準備ができているのかを判定する。一実施形態の高速スケジューラ1002は、主クロックサイクルの各半分にスケジューリングをする場合がある一方で、他のスケジューラは、主プロセッサクロックサイクルにつき一度しかスケジューリングをしない場合がある。スケジューラは、実行のためのuopのスケジューリングをするために、ディスパッチポート間を調整する。
レジスタファイル1008、1010は、実行ブロック1011において、スケジューラ1002、1004、1006、及び実行ユニット1012、1014、1016、1018、1020、1022、1024の間に位置する。一実施形態では、整数及び浮動小数点動作に対してそれぞれ、別個のレジスタファイル1008、1010が存在する。一実施形態では、各レジスタファイル1008、1010は、まだレジスタファイルに書き込まれていない完了した結果を、新しい従属uopにバイパスまたは転送し得るバイパスネットワークを含み得る。整数レジスタファイル1008及び浮動小数点レジスタファイル1010は、また、データを他と通信することができる。一実施形態について、整数レジスタファイル1008は、2つの別個のレジスタファイルに、つまり、1つのレジスタファイルをデータの低オーダ32ビットに、第2のレジスタファイルをデータの高オーダ32ビットにというふうに、分けられる。一実施形態では、浮動小数点レジスタファイル1010は128ビット幅エントリを有する。
実行ブロック1011は、命令を実行するための実行ユニット1012、1014、1016、1018、1020、1022、1024を含む。レジスタファイル1008、1010は、マイクロ命令が実行する必要のある整数及び浮動小数点データオペランド値を記憶する。一実施形態のプロセッサコア1000は、いくらかの実行ユニット(アドレス生成ユニット(AGU:address generation unit)1012、AGU1014、高速ALU1016、高速ALU1018、遅いALU1020、浮動小数点ALU1022、及び浮動小数点移動ユニット1024)からなる。一実施形態について、浮動小数点実行ブロック1022、1024は、浮動小数点、MMX、SIMD、及びSSE、または他の動作を実行する。一実施形態の浮動小数点ALU1022は、除算、平方根、及び剰余micro−opを実行するための64ビット×64ビット浮動小数点除算器を含む。
一実施形態では、浮動小数点値に関わる命令は、浮動小数点ハードウェアを用いて扱われ得る。ALU動作は、高速度ALU実行ユニット1016、1018に移行する。一実施形態の高速ALU1016、1018は、クロックサイクルの半分の効果的なレイテンシーで高速動作を実行し得る。一実施形態について、ほとんどの複合整数動作は遅いALU1020に移行する。なぜなら、遅いALU1020は、乗算器、シフト、フラグロジック、及び分岐処理等の長いレイテンシータイプの動作のための整数実行ハードウェアを含むからだ。メモリロード/記憶動作は、AGU1012、1014によって実行される。一実施形態について、整数ALU1016、1018、1020は、64ビットデータオペランドに対して整数動作を実施するコンテキストにおいて記載される。代替の実施形態では、ALU1016、1018、1020は、16、32、128、256等を含む様々なデータビットをサポートするように実装され得る。同様に、浮動小数点ユニット1022、1024は、様々な幅のビットを有するオペランドの範囲をサポートするように実装され得る。一実施形態について、浮動小数点ユニット1022、1024は、SIMD及びマルチ媒体命令と併せて、128ビット幅パックデータオペランド上で動作し得る。
一実施形態では、uopスケジューラ1002、1004、1006は、親ロードが実行することを終了する前に、従属動作をディスパッチする。uopが推論的にスケジュールを立てられ、実行されるため、プロセッサコア1000は、また、メモリミスを扱うためのロジックを含む。データロードがデータキャッシュにおいてミスする場合、一時的に不正確なデータをスケジューラに残したパイプライン内にフライトにおける従属動作が存在し得る。再生機構は、不正確なデータを使用する命令を追跡して、再実行する。一実施形態では、従属動作のみが再生される必要があり、独立動作は、完了することを可能にされる。
一実施形態では、メモリ実行ユニット(MEI:memory execution unit)1041が含まれる。MEU1041は、メモリオーダバッファ(MOB:memory order buffer)1042、SRAMユニット1030、データTLBユニット1072、データキャッシュユニット1074、及びL2キャッシュユニット1076を含む。
プロセッサコア1000は、様々なコンポーネントを共有または区画化することによって、同時マルチスレッドされた動作に対して構成され得る。プロセッサ上で動作する任意のスレッドは、共有コンポーネントにアクセスし得る。例えば、共有バッファまたは共有キャッシュ内のスペースは、要求するスレッドに関係なく、スレッド動作に割り当てられ得る。一実施形態では、区画化されたコンポーネントは、スレッドにつき割り当てられる。具体的には、どのコンポーネントが共有され、どのコンポーネントが区画化されるのかが、実施形態に従って変動する。一実施形態では、実行ユニット(例えば、実行ブロック1011)及びデータキャッシュ(例えば、データTLBユニット1072、データキャッシュユニット1074)等のプロセッサ実行リソースは、共有リソースである。一実施形態では、L2キャッシュユニット1076及び他のより高レベルのキャッシュユニット(例えば、L3キャッシュ、L4キャッシュ)を含むマルチレベルキャッシュは、すべての実行スレッドの間で共有される。他のプロセッサリソースは、各スレッドベースで分配され、及び付与されるか、または割り当てられ、区画化されたリソースの具体的な区画は、具体的なスレッド専用である。例示的な区画化されたリソースは、MOB1042、アウトオブオーダエンジン1003のレジスタエイリアステーブル(RAT:register alias table)及び順序変更バッファ(ROB)(例えば、図1Bのリネーム/アロケータユニット152及びリタイアメントユニット154内で)、及びフロントエンド1001の命令デコーダ1028と関連付けられた1または複数の命令デコードキューを含む。一実施形態では、命令TLB(例えば、図1Bの命令TLBユニット136)及び分岐予測ユニット(例えば、図1Bの分岐予測ユニット132)は、区画化もされる。
実行ブロック1011の例示的な部分は、図10Bに示されるようなロジックを含み、それは、単一のサイクルインクリメント_比較_ジャンプ動作を実装するためのマイクロアーキテクチャ1050を図解する。一実施形態では、図解されたマイクロアーキテクチャ1050は、プロセッサ実行パイプライン内で実行ステージを実施するように構成される。マイクロアーキテクチャ1050は、算術ロジックユニット(ALU)1054及びジャンプ実行ユニット(JEU:jump execution unit)1056を含み、分岐及び算術命令を実行することができる。パイピングロジック1052A〜Bは、マイクロアーキテクチャを、前の及び連続するパイプラインステージのためのロジックと繋げ、ALU演算の結果1063(例えば、B+1)を連続するパイプラインステージに渡すために、ALU1054にオペランド(例えば、オペランド_A1060、オペランド_B1061)を供給する。一実施形態では、インクリメント動作の結果は、入力オペランドによって指示された適切なレジスタにコミットされる。制御ユニットからのALU1054への制御信号1066は、使用されて、ALU動作の間で選択するか、一実施形態では、オペコードをALUに提供する。制御信号1067は、また、制御ユニットから制御JEU動作までJEUに提供される。
一実施形態では、ALU1054は、比較動作を実施するために使用される。減算動作は、プレ修正比較命令に提供されるオペランド_A1060、オペランド_B1061を使用して、実施され得る。減算動作(例えば、A〜B)は、実施されて、JEU1056に供給されて(例えば、条件付き分岐1064についてのALUフラグ)、条件付き分岐を取るかどうかを判定するフラグを生成する(例えば、ジャンプと等しい、ジャンプと等しくない等)。
単一の実行サイクル内でインクリメント_比較_ジャンプ動作を実施するために、各コンポーネントは、サイクル内の適切な点における適切な入力を要求する。例えば、ALUフラグ1064は、サイクルにおける早期にJEU1056に到達するべきで、それらは、マルチサイクルバイパスの結果であり得ない。一実施形態では、フラグの具体的なサブセット(例えば、桁上げ、ゼロ、符号、オーバーフロー等)は、タイミング限定に基づいて、条件付きジャンプのために使用される。一実施形態では、アーキテクチャフラグレジスタ内のすべてのフラグは、パリティーフラグを含むジャンプ状況のために使用され得る。
一実施形態では、インクリメント_比較_ジャンプ動作は、ALU1054への桁上げ入力1062を利用することによって、単一のサイクル内で実施される。例えば、第0ビットスライス加算器への桁上げ入力1062は、アサートされ、ALU1054に、タイミングへの任意の実質的な影響無しに、インクリメント及び比較(例えば、比較A−B+1)を実施させ得る。演算は、サイクルにおける早期に実施され、必要に応じてジャンプ演算を実施するための時間内にジャンプ実行ユニット1056のためのALUフラグを生成し得る。ALUフラグ1064に少なくとも一部基づいて、JEU1056は、プロセッサフロントエンドに提供されて、かつ制御フロー変更を開始して、次の命令ポインタ(NIP:next instruction pointer)を更新するためのジャンプターゲットアドレスを含む制御リダイレクト情報1065を生成する。
図11は、或る実施形態に従う、インクリメント_比較_ジャンプ動作を実施するためのロジックを含む処理システムのブロック図である。例示的な処理システムは、主メモリ1100に結合されたプロセッサ1155を含む。プロセッサ1155は、インクリメント_比較_ジャンプ動作をデコードするためのデコードロジック1131を有するデコードユニット1130を含む。追加として、プロセッサ実行エンジンユニット1140は、命令を実行するための追加の実行ロジック1141を含む。レジスタ1105は、実行ユニット1140が命令ストリームを実行するとき、オペランド、制御データ、及び他のタイプのデータに、レジスタ記憶を提供する。
シングルプロセッサコア(「コア0」)の詳細は、簡潔にするために図11において図解される。しかしながら、図11に示される各コアが、コア0としてのロジックと同じセットを有し得ることが理解されよう。図解されるように、各コアは、また、指定されたキャッシュ管理ポリシーに従って、命令及びデータをキャッシュするための、専用のレベル1(L1)キャッシュ1112及びレベル2(L2)キャッシュ1111を含み得る。L1キャッシュ1111は、命令を記憶するための別個の命令キャッシュ1320、及びデータを記憶するための別個のデータキャッシュ1121を含む。様々なプロセッサキャッシュ内に記憶された命令及びデータは、固定サイズ(例えば、長さが64、128、512バイト)であり得るキャッシュ行の粒度において管理される。この例示的な実施形態の各コアは、主メモリ1100及び/または共有レベル3(L3)キャッシュ1116から命令をフェッチするための命令フェッチユニット1110、命令をデコードするためのデコードユニット1130、命令を実行するための実行ユニット1340、及び命令をリタイアして、結果をライトバックするためのライトバック/リタイアユニット1150を有する。
命令フェッチユニット1110は、メモリ1100(またはキャッシュのうち1つ)からフェッチされることになる次の命令のアドレスを記憶するための次の命令ポインタ1103、アドレストランスレーションの速度を改善するための最近使用された仮想命令アドレスから物理命令アドレスへのマップを記憶するための命令トランスレーションルックアサイドバッファ(ITLB:instruction translation look−aside buffer)1104のマップ、推論的に命令分岐アドレスを予測するための分岐予測ユニット1102、及び分岐アドレス及びターゲットアドレスを記憶するための分岐ターゲットバッファ(BTB:branch target buffer)1101を含む様々な周知のコンポーネントを含む。一旦フェッチされると、命令は、その後、デコードユニット1130、実行ユニット1140、及びライトバック/リタイアユニット1150を含む命令パイプラインの残りのステージにストリームされる。
図12は、或る実施形態に従う、ロジックが、インクリメント_比較_ジャンプ動作を処理するための流れ図である。ブロック1202において、命令パイプラインは、インクリメント_比較_ジャンプ動作を実施するための命令のフェッチから始まる。命令は、命令のインクリメント及び比較部分のための第1の及び第2の入力オペランド、ならびに命令の条件付きジャンプ部分のためのジャンプラベルオペランドを受け入れる。一実施形態では、第1のオペランドは、レジスタまたは即値であり得る一方で、第2のオペランドは、レジスタ、即値、またはメモリアドレスであり得る。いくつかの実施形態では、ジャンプラベルは、ジャンプターゲットアドレスに転換されるジャンプ命令からオフセットされる即値である。
ブロック1204において、デコードユニットは、インクリメント_比較_ジャンプ動作をデコードされた命令へとデコードする。一実施形態では、デコードされた命令は、単一のプロセッササイクルにおいて実行される単一の動作である。一実施形態では、デコードされた命令は、命令の各サブ要素を実施するための1または複数のマイクロ動作を含む。マイクロ動作は、ハードワイヤードであり得、あるいは、マイクロコード動作は、実行ユニット等のプロセッサのコンポーネントに、命令を実装するための様々な動作を実施させ得る。
ブロック1206において、プロセッサの実行ユニットは、デコードされた命令を実行して、融合されたインクリメント_比較_ジャンプ動作を実施して、インクリメントし、比較し、条件付きで、比較に基づいてジャンプターゲットラベルにジャンプ(例えば、分岐)する。一実施形態では、ALU比較(例えば、減算)動作及び任意の他のステータスフラグに起因するステータスフラグに基づいて、関連する場合、ジャンプターゲットアドレスが生成され、プロセッサフロントエンドに対して通信される。
ブロック1208において、プロセッサフロントエンドは、これらの結果に基づいて次の命令ポインタを更新し、プロセッサのリタイアメントユニットが命令をリタイアする。一実施形態では、次の命令ポインタは、ジャンプが実行されるかどうかに基づいて、シーケンスにおいて、ジャンプターゲットアドレスに対して更新されるか、次の命令に対して更新される。一実施形態では、アウトオブオーダプロセッサは、分岐予測プロセッサであり、プロセッサは、命令の結果を使用して分岐予測を解決する。分岐予測が正確な場合、パイプラインにおける命令フローは、中断されない状態が続く。しかしながら、分岐予測が不正確な場合、プロセッサは、予測誤り回復動作を実施して分岐予測誤りを解決する。
一実施形態では、予測誤りが検出される場合、JEUは、分岐予測誤りの後にフェッチされた命令によって生成された状態をフロントエンドから取り除く信号(例えば、JEクリア)をアサートし、新しい命令をフェッチすることを始めることをフロントエンドアドレスに対して指示する。分岐予測誤りから回復するのに費やされたプロセッササイクルは、予測誤りの分岐から十分に回復することが要求されるサイクルの数であるプロセッサ分岐予測誤りペナルティに貢献する。一実施形態では、命令融合は、別個の命令シナリオと比較された2つのサイクルによって、分岐予測誤りペナルティを減少させる。別個のインクリメント、比較、及びジャンプ命令に関わる分岐予測誤りから回復するために、一実施形態では、3つのプロセッササイクルを要求する。
別個のインクリメント、比較、及びジャンプ命令の間の比較は、以下の表に示される。表3は、別個のインクリメント、比較、及びジャンプ命令の例示的なパイプラインタイミングを示す。表4は、融合された、単一のサイクルインクリメント_比較_ジャンプについてのタイミングを示す。
Figure 2018500657
上記表3に示されるように、別個のインクリメント(INC)、比較(CMP)、及びジャンプ(JCC)命令は、スケジューリングされ、レジスタファイル読み出しを遂行し、アウトオブオーダプロセッサ(例えばアウトオブオーダエンジン1003)によって命令オーダから実行される。命令が別個に実行される場合、プロセッサのJEUは、N+4まで分岐アドレスをフロントエンドにディスパッチすることができず、プロセッサが不正確に分岐を予測する場合、予測誤りペナルティを拡張する。
Figure 2018500657
上記表4に示されるように、融合されたインクリメント_比較_ジャンプ動作は、スケジューリングされ、レジスタファイル読み出しを遂行し、別個の命令よりも早期に2つのサイクルを実行する。追加として、別個のアクションを実施するために要求されるハードウェア命令の数を減少させることは、様々な機能的ユニットへの圧力を減少させ、それらのユニットに自由に他の動作を実施させておき得る。一実施形態では、減少された数の命令が、プロセッサハードウェア内で、スケジューリングされ、管理されるので、融合された命令は、スケジューリング及び記帳ハードウェアに対する要求を減少させる。追加として、減少されたリソースが順序変更バッファ及びリザベーションステーションに要求される。
一実施形態では、個々の命令のレジスタの間の明示的な依存性があるであろうことと、単一の命令が使用される場合、レジスタオペランドのすべてが、単一の命令のオペランドであることとを考えると、命令の融合は、また、バイナリトランスレーションロジック内とプロセッサ内の両方で、レジスタ割り当てハードウェアへの圧力を減少させる。追加として、融合された命令は、バイナリトランスレーティングシステムのための命令キャッシュフットプリントを減少させ、命令フェッチ及びデコーディング帯域幅の使用量を減少させ、ならびにコード密度を改善する。
例示的な命令フォーマット
本明細書に記載される命令(複数可)の実施形態は、ベクトルフレンドリー命令フォーマットを含む異なるフォーマットにおいて具現され得る。ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル動作に特有である、或る特定のフィールドが存在する)。ベクトルとスカラ動作との両方がベクトルフレンドリー命令フォーマットを通してサポートされる実施形態が記載される一方で、代替の実施形態は、ベクトル動作ベクトルフレンドリー命令フォーマットのみを使用する。
図13A〜13Bは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。図13Aは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びそのクラスA命令テンプレートを図解するブロック図である一方で、図13Bは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びそのクラスB命令テンプレートを図解するブロック図である。具体的には、汎用ベクトルフレンドリー命令フォーマット1300について、クラスA及びクラスB命令テンプレートが定義されており、それらの両方は、メモリアクセス無し1305命令テンプレート及びメモリアクセス1320命令テンプレートを含む。汎用ベクトルフレンドリー命令フォーマットのコンテキストにおける「汎用」という用語は、任意の具体的な命令セットに結び付けられていない命令フォーマットを指す。
ベクトルフレンドリー命令フォーマットが以下をサポートする実施形態が記載されている。32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)(したがって、64バイトベクトルは、16ダブルワードサイズ要素、または代わりに8クワドワードサイズ要素のどちらかから成る)を有する64バイトベクトルオペランド長(またはサイズ)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトベクトルオペランド長(またはサイズ)、及び32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトベクトルオペランド長(またはサイズ)。しかしながら、代替の実施形態は、より多い、より少ない、または異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を用いて、より多い、より少ない、及び/または異なるベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)をサポートする。
図13Aにおけるクラス命令テンプレートは以下を含む。1)メモリアクセス無し1305命令テンプレート内で、メモリアクセス無し、フル丸め制御タイプ動作1310命令テンプレート及びメモリアクセス無し、データ変換タイプ動作1315命令テンプレートが示され、ならびに2)メモリアクセス1320命令テンプレート内で、メモリアクセス、時間的1325命令テンプレート及びメモリアクセス、非時間的1330命令テンプレートが示される。図13BにおけるクラスB命令テンプレートは以下を含む。1)メモリアクセス無し1305命令テンプレート内で、メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作1312命令テンプレート及びメモリアクセス無し、書き込みマスク制御、vsizeタイプ動作1317命令テンプレートが示され、ならびに2)メモリアクセス1320命令テンプレート内で、メモリアクセス、書き込みマスク制御1327命令テンプレートが示される。
汎用ベクトルフレンドリー命令フォーマット1300は、図13A〜13Bにおいて図解された順序で以下に一覧に示された以下のフィールドを含む。
フォーマットフィールド1340−このフィールドにおける具体的な値(命令フォーマット識別子値)は、ベクトルフレンドリー命令フォーマット、したがって命令ストリームにおけるベクトルフレンドリー命令フォーマットにおける命令の発生を一意的に識別する。よって、このフィールドは、それが、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットにとって必要とされないという意味で、任意的である。
ベース動作フィールド1342−その内容は、異なるベース動作を区別する。
レジスタインデックスフィールド1344−その内容は、直接的にまたはアドレス生成を通して、ソース及び宛先オペランドの位置を指定する(それらがレジスタ内またはメモリ内にある場合)。これらは、PxQ(例えば32x512、16x128、32x1024、64x1024)レジスタファイルからNレジスタを選択するための十分なビット数を含む。一実施形態では、Nは、3つのソース及び1つの宛先レジスタまでであり得、代替の実施形態は、より多くのまたはより少ないソース及び宛先レジスタをサポートし得る(例えば、2つのソースまでをサポートし得(これらのソースのうち1つがまた、宛先の働きをする場合)、3つのソースまでをサポートし得(これらのソースのうち1つがまた、宛先の働きをする場合)、2つのソース及び1つの宛先までをサポートし得る)。
修正子フィールド1346−その内容は、汎用ベクトル命令フォーマットにおいてメモリアクセスを指定する命令の発生を、それを指定しないものと区別し、つまり、メモリアクセス無し1305命令テンプレート及びメモリアクセス1320命令テンプレートを区別する。メモリアクセス動作は、メモリ階層への読み出し及び/または書き込む(いくつかの場合、レジスタにおける値を使用して、ソース及び/または宛先アドレスを指定する)一方で、非メモリアクセス動作はそれらを行わない(例えば、ソース及び宛先はレジスタである)。一実施形態では、このフィールドは、また、メモリアドレス計算を実施するための3つの異なる手段の間で選択する一方で、代替の実施形態は、メモリアドレス計算を実施するためのより多い、より少ない、または異なる手段をサポートし得る。
増大動作フィールド1350−その内容は、様々な異なる動作のうちどの1つが、ベース動作に加えて実施されることになるのかを区別する。このフィールドは、コンテキスト固有である。一実施形態では、このフィールドは、クラスフィールド1368、アルファフィールド1352、及びベータフィールド1354に分割される。増大動作フィールド1350は、動作の共通群が、2個、3個、または4個の命令ではなく、単一の命令において実施されることを可能にする。
スケールフィールド1360−その内容は、メモリアドレス生成について(例えば、2scale* index+baseを使用するアドレス生成について)、インデックスフィールドの内容をスケール変更することを可能にする。
変位フィールド1362A−その内容は、メモリアドレス生成の一部として使用される(例えば、2scale* index+base+displacementを使用するアドレス生成について)。
変位因子フィールド1362B(変位フィールド1362Aの変位因子フィールド1362Bの真上への並置は、一方または他方が使用されることを指示することに留意されたい)−その内容は、アドレス生成の一部として使用され、それは、メモリアクセス(N)のサイズによってスケール変更されることになる変位因子を指定する−ここで、Nは、メモリアクセスにおけるバイト数である(例えば、2scale* index+base+scaled displacementを使用するアドレス生成について)。冗長な低オーダビットは無視され、よって、効果的なアドレスを計算する際に使用されることになる最終的な変位を生成するために、変位因子フィールドの内容は、メモリオペランド全サイズ(N)を乗算される。Nの値は、プロセッサハードウェアによって、ランタイムにおいて、フルオペコードフィールド1374(本明細書に後で記載される)及びデータ操作フィールド1354Cに基づいて判定される。変位フィールド1362A及び変位因子フィールド1362Bは、それらが、メモリアクセス無し1305命令テンプレートのために使用されず、及び/または異なる実施形態が、2つのうち1つのみを実装するか、どちらも実装しない場合があるという意味で、任意的である。
データ要素幅フィールド1364−その内容は、いくらかのデータ要素幅のうちどの1つが、使用されることになるのか(いくつかの実施形態では、すべての命令のために、他の実施形態では、命令のいくつかのみのために)を区別する。このフィールドは、1つのデータ要素幅のみがサポートされ、及び/またはデータ要素幅がオペコードの何らかの態様を使用してサポートされる場合、それが必要とされないという意味で、任意的である。
書き込みマスクフィールド1370−その内容は、各データ要素位置ベースで、宛先ベクトルオペランドにおけるそのデータ要素位置が、ベース動作及び増大動作の結果を反映するかどうかを制御する。クラスA命令テンプレートは、併合書き込みマスキングをサポートする一方で、クラスB命令テンプレートは、併合とゼロ化書き込みマスキングとの両方をサポートする。併合するとき、ベクトルマスクは、宛先における要素の任意のセットが、任意の動作(ベース動作及び増大動作によって指定された)の実行の最中に更新から保護されることを可能にし、他の一実施形態では、対応するマスクビットが0を有する宛先の各要素の古い値を保存する。対照的に、ゼロ化ベクトルマスクは、宛先内の要素の任意のセットが、任意の動作(ベース動作及び増大動作によって指定された)の実行の最中にゼロ化されることを可能にする場合、一実施形態では、対応するマスクビットが値0を有する場合、宛先の要素は0に設定される。この機能性のサブセットは、実施されている動作のベクトル長(つまり、修正されている要素のスパン、最初から最後の1つまで)を制御するための能力であるが、しかしながら、修正される要素が連続的である必要はない。したがって、書き込みマスクフィールド1370は、ロード、記憶、算術、論理的等を含む部分的なベクトル動作を可能にする。書き込みマスクフィールドの1370の内容が、使用されることになる書き込みマスクを含むいくらかの書き込みマスクレジスタのうち1つを選択する実施形態が記載される一方で(したがって、書き込みマスクフィールドの1370の内容は、実施されることになるマスキングを間接的に識別する)、代替の実施形態は、代わりにまたは追加として、マスク書き込みフィールドの1370の内容が、実施されることになるマスキングを直接的に指定することを可能にする。
即値フィールド1372−その内容は、即値の指定を可能にする。このフィールドは、それが、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装において存在せず、それが、即値を使用しない命令において存在しないという意味で、任意的である。
クラスフィールド1368−その内容は、命令の異なるクラスの間で区別する。図13A〜13Bを参照して、このフィールドの内容は、クラスA及びクラスB命令との間で選択する。図13A〜13Bにおいて、角丸方形は、具体的な値がフィールド(例えば、それぞれ、図13A〜13Bにおけるクラスフィールド1368に対するクラスA1368A及びクラスB1368B)内に存在することを指示するために使用される。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス1305命令テンプレートの場合、アルファフィールド1352は、RSフィールド1352Aとして解釈され、その内容は、異なる増大動作タイプのうちどの1つが、実施されることになるのか(例えば、丸め1352A.1及びデータ変換1352A.2は、それぞれ、メモリアクセス無し、丸めタイプ動作1310及びメモリアクセス無し、データ変換タイプ動作1315命令テンプレートのために指定される)を区別する一方で、ベータフィールド1354は、指定されたタイプのどの動作が実施されることになるのかを区別する。メモリアクセス無し1305命令テンプレートにおいて、スケールフィールド1360、変位フィールド1362A、及び変位スケールフィールド1362Bは存在しない。
[メモリアクセス無し命令テンプレート−フル丸め制御タイプ動作]
メモリアクセス無しフル丸め制御タイプ動作1310命令テンプレートにおいて、ベータフィールド1354は、丸め制御フィールド1354Aとして解釈され、その内容(複数可)は静的丸めを提供する。記載された実施形態では、丸め制御フィールド1354Aは、全浮動小数点例外抑制(SAE:suppress all floating point exceptions)フィールド1356及び丸め動作制御フィールド1358を含む一方で、代替の実施形態は、これらの概念の両方を同じフィールドへとエンコードすること、またはこれらの概念/フィールドのうち一方もしくは他方のみを有することをサポートし得る(例えば、丸め動作制御フィールド1358のみを有し得る)。
SAEフィールド1356−その内容は、例外イベント報告を無効にするかどうかを区別し、SAEフィールドの1356の内容が、抑制が有効にされることを指示する場合、所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、任意の浮動小数点例外ハンドラを立てない。
丸め動作制御フィールド1358−その内容は、一群の丸め動作(例えば、切り上げ、切り捨て、0の方への丸め、及び直近への丸め)のうちどの1つを実施するのかを区別する。したがって、丸め動作制御フィールド1358は、各命令ベースで、丸めモードの変更を可能にする。一実施形態では、プロセッサは、丸めモードを指定するための制御レジスタを含み、丸め動作制御フィールドの1350の内容は、そのレジスタ値をオーバーライドする。
[メモリアクセス無し命令テンプレート−データ変換タイプ動作]
メモリアクセス無しデータ変換タイプ動作1315命令テンプレートにおいて、ベータフィールド1354は、データ変換フィールド1354Bとして解釈され、その内容は、いくらかのデータ変換のうちどの1つが実施されることになるのか(例えば、データ変換無し、スウィズル、ブロードキャスト)を区別する。
クラスAのメモリアクセス1320命令テンプレートの場合、アルファフィールド1352は、放逐ヒントフィールド1352Bとして解釈され、その内容は、放逐ヒントのうちどの1つが、使用されることになるのか(図13Aにおいて、時間的1352B.1及び非時間的1352B.2はそれぞれ、メモリアクセス、時間的1325命令テンプレート、及びメモリアクセス、非時間的1330命令テンプレートのために指定される)を区別する一方で、ベータフィールド1354は、データ操作フィールド1354Cとして解釈され、その内容は、いくらかのデータ操作動作(プリミティブとしても知られる)のうちどの1つが実施されることになるのか(例えば、操作無し、ブロードキャスト、ソースのアップ転換、及び宛先のダウン転換)を区別する。メモリアクセス1320命令テンプレートは、スケールフィールド1360、及び任意に変位フィールド1362Aまたは変位スケールフィールド1362Bを含む。
ベクトルメモリ命令は、転換サポートを用いて、メモリからのベクトルロード、及びメモリへのベクトル記憶を実施する。規則的なベクトル命令を用いるように、ベクトルメモリ命令は、データ要素単位の様式でメモリから/へデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容によって指令される。
[メモリアクセス命令テンプレート−時間的]
時間的データは、キャッシュすることから裨益するのに十分早く再使用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、該ヒントを完全に無視することを含め、それを異なる手段で実装し得る。
[メモリアクセス命令テンプレート−非時間的]
非時間的データは、第一レベルのキャッシュにキャッシュすることから裨益するのに十分早く再使用される可能性が高くないデータであり、放逐のために優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、該ヒントを完全に無視することを含め、これを異なる手段で実装され得る。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド1352は、書き込みマスク制御(Z)フィールド1352Cとして解釈され、その内容は、書き込みマスクフィールド1370によって制御される書き込みマスキングが併合またはゼロ化のどちらであるべきかを区別する。
クラスBの非メモリアクセス1305命令テンプレートの場合、ベータフィールド1354の一部は、RLフィールド1357Aとして解釈され、その内容は、どの異なる増大動作タイプのうち1つが実施されることになるのか(例えば、丸め1357A.1及びベクトル長(VSIZE)1357A.2は、それぞれ、メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作1312命令テンプレート、及びメモリアクセス無し、書き込みマスク制御、VSIZEタイプ動作1317命令テンプレートのために指定される)を区別する一方で、ベータフィールド1354の残りは、指定されたタイプのどの動作が実施されることになるのかを区別する。メモリアクセス無し1305命令テンプレートにおいて、スケールフィールド1360、変位フィールド1362A、及び変位スケールフィールド1362Bは存在しない。
メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作1310命令テンプレートにおいて、ベータフィールド1354の残りは、丸め動作フィールド1359Aとして解釈され、例外イベント報告は無効にされる(所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、任意の浮動小数点例外ハンドラを立てない)。
丸め動作制御フィールド1359A−ちょうど丸め動作制御フィールド1358のように、その内容は、一群の丸め動作(例えば、切り上げ、切り捨て、0の方への丸め、及び0の直近への丸め)のうちどの1つを実施するのかを区別する。したがって、丸め動作制御フィールド1359Aは、各命令ベースで、丸めモードの変更を可能にする。一実施形態では、プロセッサは、丸めモードを指定するための制御レジスタを含み、丸め動作制御フィールドの1350の内容は、そのレジスタ値をオーバーライドする。
メモリアクセス無し、書き込みマスク制御、VSIZEタイプ動作1317命令テンプレートにおいて、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈され、その内容は、いくらかのデータベクトル長のうちどの1つが実施されることになるのか(例えば、128、256、または512バイト)を区別する。
クラスBのメモリアクセス1320命令テンプレートの場合、ベータフィールド1354の一部は、ブロードキャストフィールド1357Bとして解釈され、その内容は、ブロードキャストタイプデータ操作動作が実施されることになるのかを区別する一方で、ベータフィールド1354の残りは、ベクトル長フィールド1359Bとして解釈される。メモリアクセス1320命令テンプレートは、スケールフィールド1360、及び任意に変位フィールド1362Aまたは変位スケールフィールド1362Bを含む。
汎用ベクトルフレンドリー命令フォーマット1300に関して、フォーマットフィールド1340、ベース動作フィールド1342、及びデータ要素幅フィールド1364を含むフルオペコードフィールド1374が示される。フルオペコードフィールド1374がこれらのフィールドのすべてを含む一実施形態が示される一方で、フルオペコードフィールド1374は、それらのすべてをサポートしない実施形態では、これらのフィールドのすべてより少ないものを含む。フルオペコードフィールド1374は、動作コード(オペコード)を提供する。
増大動作フィールド1350、データ要素幅フィールド1364、及び書き込みマスクフィールド1370は、これらの特徴が、汎用ベクトルフレンドリー命令フォーマットにおいて、各命令ベースで指定されることを可能にする。
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせは、マスクが異なるデータ要素幅に基づいて適用されることを可能にするので、型付けされた命令を作成する。
クラスA及びクラスB内で見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態では、プロセッサ内の異なるプロセッサまたは異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用コンピューティングのために意図された高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、グラフィックス及び/またはサイエンティフィック(スループット)コンピューティングのために意図されたコアは、クラスAのみをサポートし得、両方のために意図されたコアは、両方をサポートし得る(当然のことながら、両方のクラスからのテンプレート及び命令の何らかの混合を有するコアであるが、両方のクラスからのすべてのテンプレート及び命令が本発明の範囲内にあるわけではないコア)。また、単一のプロセッサは、複数のコアを含み得、それらのすべてが同じクラスをサポートするか、異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び/またはサイエンティフィックコンピューティングのために意図されたグラフィックスコアのうち1つは、クラスAのみをサポートし得る一方で、汎用コアのうち1または複数は、主にクラスBのみをサポートする汎用コンピューティングのために意図されたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAとクラスBとの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを含み得る。当然のことながら、1つのクラスからの特徴は、また、異なる実施形態の他のクラスにおいて実装され得る。高レベル言語において書き込まれたプログラムは、(例えば、ジャストインタイムで、コンパイルされるか、静的にコンパイルされ)以下を含む様々な異なる実行可能な形態へと置かれるだろう。1)実行のためのターゲットプロセッサによってサポートされるクラス(複数可)の命令のみを有する形態、または2)すべてのクラスの命令の異なる組み合わせを使用して書き込まれる代替のルーチンを有し、かつ現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形態。
[例示的な固有ベクトルフレンドリー命令フォーマット]
図14は、本発明の或る実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。図14は、それが、フィールドの位置、サイズ、解釈、及びオーダ、ならびにそれらのフィールドのいくつかのための値を指定するという意味で固有の、固有ベクトルフレンドリー命令フォーマット1400を示す。固有ベクトルフレンドリー命令フォーマット1400は、x86命令セットを拡張するために使用され得、したがって、フィールドのいくつかは、既存のx86命令セット及びその拡張(例えば、AVX)において使用されるものと類似しているか同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコーディングフィールド、真のオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドと整合するままである。図14のマップからのフィールドがマッピングする図13からのフィールドが図解される。
固有ベクトルフレンドリー命令フォーマット1400を参照して、図解の目的のための汎用ベクトルフレンドリー命令フォーマット1300のコンテキストにおいて、実施形態が記載されるが、本発明は、特許請求の範囲に記載される場合を除いて、固有ベクトルフレンドリー命令フォーマット1400に限定されないことを理解されたい。例えば、汎用ベクトルフレンドリー命令フォーマット1300は、様々なフィールドについての様々な可能なサイズを考慮する一方で、固有ベクトルフレンドリー命令フォーマット1400は、具体的なサイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド1364は、固有ベクトルフレンドリー命令フォーマット1400において、1ビットフィールドとして図解される一方で、本発明はそのように限定されない(つまり、汎用ベクトルフレンドリー命令フォーマット1300は、データ要素幅フィールド1364の他のサイズを考慮する)。
汎用ベクトルフレンドリー命令フォーマット1300は、図14Aにおいて図解された順序で以下に一覧に示された以下のフィールドを含む。
EVEXプレフィックス(バイト0〜3)1402は、4バイト形態においてエンコードされる。
フォーマットフィールド1340(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド1340であり、それは、0x62(本発明の一実施形態では、ベクトルフレンドリー命令フォーマットを区別するために使用される一意的な値)を含む。
第2〜第4バイト(EVEXバイト1〜3)は、具体的な可能性を提供するいくらかのビットフィールドを含む。
REXフィールド1405(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び1357BEXバイト1、ビット[5]−B)から成る。EVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数形を使用してエンコードされ、すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野において知られているレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)をエンコードし、そのため、Rrrr、Xxxx、及びBbbbは、EVEX.R、EVEX.X、及びEVEX.Bを追加することによって形成され得る。
REX'フィールド1310−これは、REX'フィールド1310の第1部分であり、拡張された32レジスタセットの上位16または下位16のどちらかをエンコードするために使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。一実施形態では、このビットは、以下に指示されるような他のものと共に、(周知のx86 32ビットモードにおいて)その真のオペコードバイトは62であるBOUND命令から区別するためにビット反転したフォーマットに記憶されるが、MODフィールドにおいて、MOD R/Mフィールド(以下に記載)中の値11を受け入れず、代替の実施形態は、これ及び他の以下に指示されたビットをフォーマットで記憶しない。値1は、下位16レジスタをエンコードするために使用される。言い換えると、R'Rrrrは、EVEX.R'、EVEX.R、及び他のフィールドからの他のRRRを組み合わせることにより形成される。
オペコードマップフィールド1415(EVEXバイト1、ビット[3:0]−mmmm)−その内容は、含意される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド1364(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記法によって表される。EVEX.Wは、データタイプ(32ビットデータ要素または64ビットデータ要素のどちらか)の粒度(サイズ)を定義するために使用される。
EVEX.vvvv1420(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形において指定された第1のソースレジスタオペランドをエンコードし、2以上のソースオペランドを有する命令に対して有効であり、2)EVEX.vvvvは、或る特定のベクトルシフトに対して1の補数形において指定された宛先レジスタオペランドをエンコードし、または3)EVEX.vvvvは、任意のオペランドをエンコードせず、フィールドはリザーブされ、1111bを含むべきである。したがって、EVEX.vvvvフィールド1420は、反転(1の補数)形において記憶された第1のソースレジスタ指定子の4低オーダビットをエンコードする。命令に従って、余分の異なるEVEXビットフィールドは、指定子サイズを32レジスタに拡張するために使用される。
EVEX.U1368クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、それはクラスAまたはEVEX.U0を指示し、EVEX.U=1の場合、それはクラスBまたはEVEX.U1を指示する。
プレフィックスエンコーディングフィールド1425(EVEXバイト2、ビット[1:0]−pp)は、ベース動作フィールドのために追加のビットを提供する。EVEXプレフィックスフォーマット中のレガシーSSE命令のためにサポートを提供することに加えて、これは、また、SIMDプレフィックスをコンパクトにする利点を有する(EVEXプレフィックスは、SIMDプレフィックスを表現するためのバイトを要求するのではなく、2ビットのみを要求する)。一実施形態では、レガシーフォーマットとEVEXプレフィックスフォーマットとの両方において、SIMDプレフィックス(66H、F2H、F3H)を使用するレガシーSSE命令をサポートするために、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスエンコーディングフィールドへとエンコードされ、及びデコーダのPLAに提供される前に、ランタイムにおいて、レガシーSIMDプレフィックスへと展開される(それ故、PLAは、修正無しで、これらのレガシー命令のレガシーとEVEXフォーマットとの両方を実行し得る)。より新しい命令が、直接的にオペコード拡張として、EVEXプレフィックスエンコーディングフィールドの内容を使用し得るが、或る特定の実施形態は、一貫性について類似の様式で展開するが、異なる意味が、これらのレガシーSIMDプレフィックスによって指定されることを可能にする。代替の実施形態は、2ビットSIMDプレフィックスエンコーディングをサポートするようにPLAを再設計し得、したがって展開を要求しない。
アルファフィールド1352(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、及びEVEX.Nとしても知られ、また、αと共に図解された)−前述のように、このフィールドコンテキスト固有である。
ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rrl、EVEX.LL0、EVEX.LLBとしても知られ、また、βββと共に図解された)−前述のように、このフィールドはコンテキスト固有である。
REX'フィールド1310−これは、REX'フィールドの剰余であり、拡張された32レジスタセットの上位16または下位16のどちらかをエンコードするために使用され得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットにおいて記憶される。値1は、下位16レジスタをエンコードするために使用される。言い換えると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド1370(EVEXバイト3、ビット[2:0]−kkk)−その内容は、前述のように、書き込みマスクレジスタにおいて、レジスタのインデックスを指定する。一実施形態では、具体的な値EVEX.kkk=000は、書き込みマスクが特定の命令のために使用されないことを含意する特別な振る舞いを有する(これは、すべてのものにハードワイヤードな書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの使用を含む様々な手段において、実装され得る)。
真のオペコードフィールド1430(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内で指定される。
MOD R/Mフィールド1440(バイト5)は、MODフィールド1442、Regフィールド1444、及びR/Mフィールド1446を含む。前述のように、MODフィールドの1442の内容は、メモリアクセスと非メモリアクセス動作との間で区別する。Regフィールド1444の役割は、2つの状況に要約され得る。宛先レジスタオペランドまたはソースレジスタオペランドのどちらかをエンコードするか、オペコード拡張として取り扱われ、任意の命令オペランドをエンコードするために使用されない。R/Mフィールド1446の役割は、以下を含み得る。メモリアドレスを参照する命令オペランドをエンコードするか、または宛先レジスタオペランドまたはソースレジスタオペランドのどちらかをエンコードする。
スケール、インデックス、ベース(SIB:Scale,Index,Base)バイト(バイト6)−前述のように、スケールフィールドの1350の内容は、メモリアドレス生成について使用される。SIB.xxx1454及びSIB.bbb1456−これらのフィールドの内容は、レジスタインデックスXxxx及びBbbbに関して以前に参照された。
変位フィールド1362A(バイト7〜10)−MODフィールド1442が10を含む場合、バイト7〜10は変位フィールド1362Aであり、それは、レガシー32ビット変位(disp32)と同じように働き、バイト粒度において働く。
変位因子フィールド1362B(バイト7)−MODフィールド1442が01を含む場合、バイト7は変位因子フィールド1362Bである。このフィールドの位置は、レガシーx86命令セット8ビット変位(disp8)と同じものであり、それは、バイト粒度で働く。disp8が符号拡張されるので、それは、−128及び127バイトオフセットの間のみ、アドレス指定する。また、64バイトキャッシュ行の観点から、disp8は、4つの真に有用な値−128、−64、0、及び64のみに設定され得る8ビットを使用する。より大きな範囲が多くの場合必要とされるので、disp32が使用される。しかしながら、disp32は4バイトを要求する。disp8及びdisp32と対照的に、変位因子フィールド1362Bはdisp8の再解釈である。変位因子フィールド1362Bを使用する場合、実際の変位は、メモリオペランドアクセス(N)のサイズを乗算した変位因子フィールドの内容によって判定されるこのタイプの変位はdisp8*Nと称される。これは、平均命令長(単一のバイトが、変位のために使用されるが、はるかに大きな範囲で使用される)を減少させる。そのような圧縮された変位は、効果的な変位がメモリアクセスの複数の粒度の倍数であり、よってアドレスオフセットの冗長な低位オーダビットがエンコードされる必要がないという前提に基づく。言い換えると、変位因子フィールド1362Bは、レガシーx86命令セット8ビット変位を代用する。したがって、変位因子フィールド1362Bは、x86命令セット8ビット変位と同じ手段でエンコードされ(それ故に、ModRM/SIBエンコーディング規則における変更が無く)、唯一の例外が、disp8が、disp8*Nに対して過負荷されることである。言い換えると、エンコーディング規則またはエンコーディング長において変更が無いが、変更は、ハードウェアによる変位値の解釈においてのみである(メモリオペランドのサイズによって変位をスケール変更して、バイト単位のアドレスオフセットを得る必要がある)。
即値フィールド1372は、前述のように動作する。
[フルオペコードフィールド]
図14Bは、一実施形態に従うフルオペコードフィールド1374を作り上げる固有ベクトルフレンドリー命令フォーマット1400のフィールドを図解するブロック図である。具体的には、フルオペコードフィールド1374は、フォーマットフィールド1340、ベース動作フィールド1342、及びデータ要素幅(W)フィールド1364を含む。ベース動作フィールド1342は、プレフィックスエンコーディングフィールド1425、オペコードマップフィールド1415、及び真のオペコードフィールド1430を含む。
[レジスタインデックスフィールド]
図14Cは、一実施形態に従うレジスタインデックスフィールド1344を作り上げる固有ベクトルフレンドリー命令フォーマット1400のフィールドを図解するブロック図である。具体的には、レジスタインデックスフィールド1344は、REXフィールド1405、REX'フィールド1410、MODR/M.regフィールド1444、MODR/M.r/mフィールド1446、VVVVフィールド1420、xxxフィールド1454、及びbbbフィールド1456を含む。
[増大動作フィールド]
図14Dは、一実施形態に従う増大動作フィールド1350を作り上げる固有ベクトルフレンドリー命令フォーマットの1400のフィールドを図解するブロック図である。クラス(U)フィールド1368が0を含む場合、それはEVEX.U0(クラスA1368A)を意味し、それが1を含む場合、それはEVEX.U1(クラスB1368B)を意味する。U=0、かつMODフィールド1442が11(メモリアクセス無し動作を意味する)を含む場合、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、rsフィールド1352Aとして解釈される。rsフィールド1352Aが、1(丸め1352A.1)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、丸め制御フィールド1354Aとして解釈される。丸め制御フィールド1354Aは、1ビットSAEフィールド1356及び2ビット丸め動作フィールド1358を含む。rsフィールド1352Aは、0(データ変換1352A.2)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ変換フィールド1354Bとして解釈される。U=0、かつMODフィールド1442が、00、01、または10(メモリアクセス動作を意味する)を含む場合、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、放逐ヒント(EH)フィールド1352Bとして解釈され、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ操作フィールド1354Cとして解釈される。
U=1の場合、アルファフィールド1352(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1352Cとして解釈される。U=1、かつMODフィールド1442が、11(メモリアクセス無し動作を意味する)を含む場合、ベータフィールド1354の一部(EVEXバイト3、ビット[4]−S0)は、RLフィールド1357Aとして解釈され、それが1(丸め1357A.1)を含む場合、ベータフィールド1354の残り(EVEXバイト3、ビット[6−5]−S2−1)は、丸め動作フィールド1359Aとして解釈される一方で、RLフィールド1357Aが0(VSIZE1357A.2)を含む場合、ベータフィールド1354の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド1359B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1、かつMODフィールド1442が00、01、または10(メモリアクセス動作を意味する)を含む場合、ベータフィールド1354(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1359B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1357B(EVEXバイト3、ビット[4]−B)として解釈される。
[例示的なレジスタアーキテクチャ]
図15は、一実施形態に従う、レジスタアーキテクチャ1500のブロック図である。図解された実施形態では、512ビット幅である32ベクトルレジスタ1510が存在し、これらのレジスタは、zmm0〜zmm31として参照される。下位16zmmレジスタの下位オーダ256ビットは、レジスタymm0−16上でオーバーレイされる。下位16zmmレジスタの下位オーダ128ビット(ymmレジスタの下位オーダ128ビット)は、レジスタxmm0−15上でオーバーレイされる。固有ベクトルフレンドリー命令フォーマット1400は、下の表5に図解されるように、これらのオーバーレイされたレジスタ上で動作する。
Figure 2018500657
言い換えると、ベクトル長フィールド1359Bは、最大長さ及び1または複数の他のより短い長さの間で選択し、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド1359Bを有しない命令テンプレートは、最大ベクトル長上で動作する。さらに、一実施形態では、固有ベクトルフレンドリー命令フォーマット1400のクラスB命令テンプレートは、パックまたはスカラ単一/倍精度浮動小数点データ及びパックまたはスカラ整数データ上で動作する。スカラ動作は、zmm/ymm/xmmレジスタ内の最低のオーダデータ要素位置に対して実施される動作であり、より高いオーダデータ要素位置は、それらが命令の前の状態か、または実施形態に従うゼロ化の状態のままかのどちらかにされる。
書き込みマスクレジスタ1515−図解された実施形態では、8つの書き込みマスクレジスタ(k0〜k7)が存在し、サイズが各64ビットである。代替の実施形態では、書き込みマスクレジスタ1515は、サイズが16ビットである。前述のように、一実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして使用され得ず、k0が書き込みマスクのために使用されることを通常指示するであろうことをエンコードする場合、それは、0xFFFFのハードワイヤード書き込みマスクを選択し、効果的にその命令に対する書き込みマスキングを無効にする。
汎用レジスタ1525−図解された実施形態では、アドレスメモリオペランドへの既存のx86アドレス指定モードと共に使用される16の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8〜R15のネームによって参照される。
MMXパック整数フラットレジスタファイル1550が上でエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1545、−図解された実施形態では、x87スタックは、x87命令セット拡張を使用して、32/64/80ビット浮動小数点データに対してスカラ浮動小数点動作を実施するために使用される8要素のスタックである一方で、MMXレジスタは、64ビットパック整数データ上で動作を実施して、ならびにMMX及びXMMレジスタの間で実施されるいくつかの動作のためにオペランドを保持するために使用される。
代替の実施形態は、より広いまたはより狭いレジスタを使用し得る。追加として、代替の実施形態は、より多い、より少ない、または異なるレジスタファイル及びレジスタを使用し得る。
一実施形態では、本明細書に記載される命令は、或る特定の動作を実施するように構成されるか、所定の機能性を有する特定用途向け集積回路(ASIC)等のハードウェアの具体的な構成を指す。そのような電子デバイスは、例示的には、1または複数の記憶デバイス(非一時的機械可読記憶媒体)、ユーザ入力出力デバイス(例えば、キーボード、タッチスクリーン、及び/または表示)、及びネットワーク接続等の1または複数の他のコンポーネントに結合された1または複数のプロセッサのセットを含む。プロセッサのセット及び他のコンポーネントの結合は、例示的には、1または複数のバス及びブリッジ(バスコントローラとも命名される)を通してのものである。ネットワークトラフィックを搬送する記憶デバイス及び信号はそれぞれ、1または複数の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、例示的には、その電子デバイスの1または複数のプロセッサのセットへの実行のために、コード及び/またはデータを記憶する。
前述の明細書では、本発明は、その具体的な例示的な実施形態を参照して記載された。しかしながら、様々な修正及び変更が、添付の特許請求の範囲に記載された本発明のより広範な精神及び範囲から逸脱することなく、それらに対して行われ得ることは、明白であろう。或る特定の例では、周知の構造及び機能は、本発明の主題を不明瞭にすることを回避するために、精巧な詳細において記載されなかった。したがって、明細書及び図面は、制限的な意味ではなく、例示的な意味においてみなされるべきである。したがって、本発明の範囲及び精神は、続く特許請求の範囲の用語において判断されるべきである。

Claims (24)

  1. 第1のオペランド及び第2のオペランドを含むデコードされた融合命令へと融合命令をデコードするためのデコードロジックと、
    前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施するための実行ユニットと、を備える、処理装置。
  2. 前記融合命令をフェッチするための命令フェッチユニットと、
    前記第1のオペランドまたは前記第2のオペランドによって指定されたレジスタに、前記インクリメント動作の結果をコミットするためのレジスタファイルユニットと、をさらに備える、請求項1に記載の処理装置。
  3. 前記実行ユニットが、
    前記インクリメント動作及び前記比較動作を実施するための算術ロジックユニット(ALU:arithmetic logic unit)と、
    前記ジャンプ動作を実施するためのジャンプ実行ユニットと、を備える、請求項1に記載の処理装置。
  4. 前記第1のオペランド及び前記第2のオペランドが、前記比較動作と関連付けられ、前記第1のオペランドまたは前記第2のオペランドのうち1つが、前記インクリメント動作と関連付けられる、請求項1に記載の処理装置。
  5. 前記デコードされた融合命令が、前記ジャンプ動作と関連付けられたジャンプターゲットオペランドを追加として含む、請求項4に記載の処理装置。
  6. 前記実行ユニットがさらに、単一のサイクルにおいて、前記インクリメント動作、前記比較動作、及び前記ジャンプ動作を実行する、請求項5に記載の処理装置。
  7. 前記ジャンプ動作が、前記比較動作を条件にする、請求項5に記載の処理装置。
  8. 前記ジャンプ動作が、前記比較動作によって設定されたゼロフラグを条件にする、請求項7に記載の処理装置。
  9. 前記ジャンプ動作が、前記比較動作によって設定された桁上げフラグを条件にする、請求項7に記載の処理装置。
  10. 前記ジャンプ動作が、前記比較動作によって設定されたオーバーフローフラグを条件にする、請求項7に記載の処理装置。
  11. 前記ジャンプ動作が、前記比較動作によって設定された符号フラグを条件にする、請求項7に記載の処理装置。
  12. 単一のマクロ命令へと複数のマクロ命令を融合するための方法であって、
    インクリメント命令、比較命令、及びジャンプ命令を含む命令シーケンスについて、第1のソースコードブロックをスキャンすることと、
    前記命令シーケンスを検出した後に、データ依存性について前記命令シーケンスをスキャンすることと、
    前記命令シーケンスにおいてコード断片を順序変更することと、
    インクリメント命令、比較命令、及びジャンプ命令のセットを、プロセッサによって実行される場合に、前記プロセッサに、インクリメント動作、比較動作、及びジャンプ動作を実施させるという単一の融合命令と置き換えることと、を含む、方法。
  13. 前記プロセッサが、単一のプロセッサパイプライン実行サイクルにおいて、前記融合命令を実行する、請求項12に記載の方法。
  14. 前記プロセッサが、算術ロジックユニット(ALU)を使用して前記インクリメント命令及び前記比較命令と関連付けられた第1のオペランド及び第2のオペランドの比較動作を実施する一方で、前記ALUへの桁上げ入力をアサートすることにより前記第1のオペランドまたは前記第2のオペランドをインクリメントすることによって、前記サイクルにおいて前記融合命令を実施する、請求項13に記載の方法。
  15. 前記プロセッサ内でジャンプ実行ユニットを使用して前記比較動作によって前記ALUから出力されたフラグを評価して、前記ジャンプ動作が実施されることになるかどうかを判定することをさらに含む、請求項14に記載の方法。
  16. 前記プロセッサが、分岐予測プロセッサであり、
    前記ジャンプ命令と関連付けられた分岐が実行されることになることを予測することと、
    前記融合命令の前記ジャンプ動作が実行されるかどうかを判定することと、
    前記ジャンプ命令について予測された前記分岐を解決することと、をさらに含む、請求項15に記載の方法。
  17. 請求項12〜16のいずれか1項に記載の方法を実施するための手段を備えるシステム。
  18. 命令を記憶する非一時的機械可読媒体であって、1または複数のプロセッサによって実行される場合に、前記1または複数のプロセッサに、請求項12〜16のいずれか1項に記載の方法を含む動作を実施させる、非一時的機械可読媒体。
  19. 融合されたマクロ命令の実施方法であって、
    第1のオペランド及び第2のオペランドを含むデコードされた融合命令へと融合命令をデコードすることと、
    前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施することと、を含む、方法。
  20. 単一の実行サイクルにおいて、前記デコードされた融合命令を実行することをさらに含む、請求項19に記載の方法。
  21. 前記動作の結果に基づいて、次の命令ポインタを更新することをさらに含む、請求項19に記載の方法。
  22. 前記第1のオペランドまたは前記第2のオペランドによって指示されたレジスタに、前記インクリメント動作の結果をコミットすることをさらに含む、請求項19に記載の方法。
  23. 前記ジャンプ動作の結果に基づいて、分岐予測を解決することをさらに含む、請求項19に記載の方法。
  24. データが記憶された機械可読媒体であって、少なくとも1つの機械によって実施される場合に、前記少なくとも1つの機械に、請求項19〜23のいずれか1項に記載の方法を含む動作を実施する少なくとも1つの集積回路をファブリケートさせる、機械可読媒体。
JP2017527588A 2014-12-23 2015-11-23 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック Active JP6849274B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/582,053 US20160179542A1 (en) 2014-12-23 2014-12-23 Instruction and logic to perform a fused single cycle increment-compare-jump
US14/582,053 2014-12-23
PCT/US2015/062098 WO2016105767A1 (en) 2014-12-23 2015-11-23 Instruction and logic to perform a fused single cycle increment-compare-jump

Publications (3)

Publication Number Publication Date
JP2018500657A true JP2018500657A (ja) 2018-01-11
JP2018500657A5 JP2018500657A5 (ja) 2018-03-08
JP6849274B2 JP6849274B2 (ja) 2021-03-24

Family

ID=56129480

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017527588A Active JP6849274B2 (ja) 2014-12-23 2015-11-23 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック

Country Status (7)

Country Link
US (1) US20160179542A1 (ja)
EP (1) EP3238046A4 (ja)
JP (1) JP6849274B2 (ja)
KR (1) KR102451950B1 (ja)
CN (1) CN107077321B (ja)
TW (1) TWI691897B (ja)
WO (1) WO2016105767A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7958181B2 (en) * 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US10275217B2 (en) 2017-03-14 2019-04-30 Samsung Electronics Co., Ltd. Memory load and arithmetic load unit (ALU) fusing
US10360034B2 (en) * 2017-04-18 2019-07-23 Samsung Electronics Co., Ltd. System and method for maintaining data in a low-power structure
US11150908B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US11256509B2 (en) 2017-12-07 2022-02-22 International Business Machines Corporation Instruction fusion after register rename
US11157280B2 (en) * 2017-12-07 2021-10-26 International Business Machines Corporation Dynamic fusion based on operand size
US11475951B2 (en) 2017-12-24 2022-10-18 Micron Technology, Inc. Material implication operations in memory
US10424376B2 (en) * 2017-12-24 2019-09-24 Micron Technology, Inc. Material implication operations in memory
US11194578B2 (en) 2018-05-23 2021-12-07 International Business Machines Corporation Fused overloaded register file read to enable 2-cycle move from condition register instruction in a microprocessor
CN111209044B (zh) * 2018-11-21 2022-11-25 展讯通信(上海)有限公司 指令压缩方法及装置
US10996952B2 (en) * 2018-12-10 2021-05-04 SiFive, Inc. Macro-op fusion
US10831496B2 (en) 2019-02-28 2020-11-10 International Business Machines Corporation Method to execute successive dependent instructions from an instruction stream in a processor
KR20210012335A (ko) 2019-07-24 2021-02-03 에스케이하이닉스 주식회사 반도체장치
US11216278B2 (en) * 2019-08-12 2022-01-04 Advanced New Technologies Co., Ltd. Multi-thread processing
US11537323B2 (en) 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
US11422803B2 (en) 2020-01-07 2022-08-23 SK Hynix Inc. Processing-in-memory (PIM) device
US12008369B1 (en) * 2021-08-31 2024-06-11 Apple Inc. Load instruction fusion

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS623336A (ja) * 1985-06-28 1987-01-09 Yokogawa Hewlett Packard Ltd 条件付きブランチ方式
JPH0573309A (ja) * 1990-04-04 1993-03-26 Internatl Business Mach Corp <Ibm> 複数スカラ命令の並列実行支援装置
JPH09265400A (ja) * 1996-03-28 1997-10-07 Hitachi Ltd コンパイル最適化方式
JPH09288564A (ja) * 1996-06-17 1997-11-04 Takeshi Sakamura データ処理装置
US20070038844A1 (en) * 2005-08-09 2007-02-15 Robert Valentine Technique to combine instructions
JP2010504595A (ja) * 2006-09-21 2010-02-12 インテル コーポレイション 論理比較動作を実行するための方法と装置
US20110264891A1 (en) * 2010-04-27 2011-10-27 Via Technologies, Inc. Microprocessor that fuses mov/alu/jcc instructions
JP2012507794A (ja) * 2008-10-30 2012-03-29 インテル コーポレイション 有効な命令ヒュージョンを進展させる技術
JP2014194755A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
JP2014194753A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数のテストソースを用いた論理和テストおよび論理積テスト機能を実現する融合可能な命令と論理

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5717910A (en) * 1996-03-29 1998-02-10 Integrated Device Technology, Inc. Operand compare/release apparatus and method for microinstrution sequences in a pipeline processor
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US6857063B2 (en) * 2001-02-09 2005-02-15 Freescale Semiconductor, Inc. Data processor and method of operation
US6931517B1 (en) * 2001-10-23 2005-08-16 Ip-First, Llc Pop-compare micro instruction for repeat string operations
US7051190B2 (en) * 2002-06-25 2006-05-23 Intel Corporation Intra-instruction fusion
US7451294B2 (en) * 2003-07-30 2008-11-11 Intel Corporation Apparatus and method for two micro-operation flow using source override
GB2414308B (en) * 2004-05-17 2007-08-15 Advanced Risc Mach Ltd Program instruction compression
GB2424727B (en) * 2005-03-30 2007-08-01 Transitive Ltd Preparing instruction groups for a processor having a multiple issue ports
US7797517B1 (en) * 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US7596681B2 (en) * 2006-03-24 2009-09-29 Cirrus Logic, Inc. Processor and processing method for reusing arbitrary sections of program code
US20100312991A1 (en) 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US8856496B2 (en) * 2010-04-27 2014-10-07 Via Technologies, Inc. Microprocessor that fuses load-alu-store and JCC macroinstructions
CN102163139B (zh) * 2010-04-27 2014-04-02 威盛电子股份有限公司 微处理器融合载入算术/逻辑运算及跳跃宏指令

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS623336A (ja) * 1985-06-28 1987-01-09 Yokogawa Hewlett Packard Ltd 条件付きブランチ方式
JPH0573309A (ja) * 1990-04-04 1993-03-26 Internatl Business Mach Corp <Ibm> 複数スカラ命令の並列実行支援装置
JPH09265400A (ja) * 1996-03-28 1997-10-07 Hitachi Ltd コンパイル最適化方式
JPH09288564A (ja) * 1996-06-17 1997-11-04 Takeshi Sakamura データ処理装置
US20070038844A1 (en) * 2005-08-09 2007-02-15 Robert Valentine Technique to combine instructions
JP2010504595A (ja) * 2006-09-21 2010-02-12 インテル コーポレイション 論理比較動作を実行するための方法と装置
JP2012507794A (ja) * 2008-10-30 2012-03-29 インテル コーポレイション 有効な命令ヒュージョンを進展させる技術
US20110264891A1 (en) * 2010-04-27 2011-10-27 Via Technologies, Inc. Microprocessor that fuses mov/alu/jcc instructions
US20110264896A1 (en) * 2010-04-27 2011-10-27 Via Technologies, Inc. Microprocessor that fuses mov/alu instructions
JP2014194755A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
JP2014194753A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数のテストソースを用いた論理和テストおよび論理積テスト機能を実現する融合可能な命令と論理

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SHILIANG HU, JAMES E. SMITH: "Using Dynamic Binary Translation to Fuse Dependent Instructions", PROCEEDINGS OF THE INTERNATIONAL SYMPOSIUM ON CODE GENERATION AND OPTIMIZATION 2004 (CGO2004), JPN6019047089, 20 March 2004 (2004-03-20), pages 12, ISSN: 0004315196 *
後藤弘茂: "インテルはCISCのアプローチをアーキテクチャに持ち込む", ASCII, vol. 第30巻,第5号,(通巻347号), JPN6019047094, 1 May 2006 (2006-05-01), JP, pages 114 - 119, ISSN: 0004315197 *

Also Published As

Publication number Publication date
KR20170097633A (ko) 2017-08-28
JP6849274B2 (ja) 2021-03-24
EP3238046A1 (en) 2017-11-01
WO2016105767A1 (en) 2016-06-30
KR102451950B1 (ko) 2022-10-11
CN107077321B (zh) 2021-08-17
US20160179542A1 (en) 2016-06-23
EP3238046A4 (en) 2018-07-18
TW201643706A (zh) 2016-12-16
CN107077321A (zh) 2017-08-18
TWI691897B (zh) 2020-04-21

Similar Documents

Publication Publication Date Title
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
JP6351682B2 (ja) 装置および方法
JP6238497B2 (ja) プロセッサ、方法、及びシステム
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
KR101679111B1 (ko) 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
KR102478874B1 (ko) 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
JP2018500653A (ja) ベクトルブロードキャストおよびxorand論理命令のための装置および方法
JP6673574B2 (ja) ベクトルビットシャッフルを実行するための方法および装置
EP3547119B1 (en) Apparatus and method for speculative conditional move operation
KR20170099869A (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
KR20170099855A (ko) 마스크 및 벡터 레지스터들 사이의 가변 확장을 위한 방법 및 장치
TWI603261B (zh) 用以執行離心操作的指令及邏輯
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2018507453A (ja) 命令フローを最適化するチェックを実行するための装置および方法
US11243766B2 (en) Flexible instruction set disabling
TWI628595B (zh) 用以執行反離心操作之處理設備和非暫態機器可讀取媒體
KR20170098806A (ko) 벡터 비트 수집을 수행하기 위한 방법 및 장치
KR20170099864A (ko) 마스크 값을 압축하기 위한 방법 및 장치
JP2018503162A (ja) スピンループジャンプを実行するための装置および方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170725

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20180119

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200310

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200804

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201013

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210202

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210301

R150 Certificate of patent or registration of utility model

Ref document number: 6849274

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150