JP5356531B2 - シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能 - Google Patents

シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能 Download PDF

Info

Publication number
JP5356531B2
JP5356531B2 JP2011534805A JP2011534805A JP5356531B2 JP 5356531 B2 JP5356531 B2 JP 5356531B2 JP 2011534805 A JP2011534805 A JP 2011534805A JP 2011534805 A JP2011534805 A JP 2011534805A JP 5356531 B2 JP5356531 B2 JP 5356531B2
Authority
JP
Japan
Prior art keywords
instruction
copy
code
input
logic
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.)
Expired - Fee Related
Application number
JP2011534805A
Other languages
English (en)
Other versions
JP2012507805A (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 JP2012507805A publication Critical patent/JP2012507805A/ja
Application granted granted Critical
Publication of JP5356531B2 publication Critical patent/JP5356531B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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

Landscapes

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

Description

プロセッサを基本とする大半のシステムにおいて、プロセッサは、コピーや記憶といったオペレーションの効率的実行に合わせた命令を提供している。メモリへのコピーオペレーションに最適化されたソフトウェアは、特定のプロセッサ実装向けに調整されている。多くの場合、データのコピーを実行する最善の方法は変化するため、コンパイラ、オペレーティングシステム(OS)カーネル及びアプリケーションライターは、様々なシナリオ、様々なマイクロアーキテクチャ等に合わせてそれぞれ調整された数多くのコードを扱わなければならず、コードは、いわば移動標的のようなものとなっている。
命令のパラメータのうちの1つで規定される一定量のデータ要素をコピーするには、反復コピー命令を使用することができる。反復コピー命令は、例えば、バイト、ワード、ダブルワード、4倍長語等の様々なネイティブデータ要素長を有してもよい。ネイティブ長が長くなればなるほど、特定量のデータを動かすのに、命令がより効率的に実行され、これは、より大きな"ロード(読み込み)"及び"ストア(格納)"オペレーションを使用することができるからである。例えば、インテル(登録商標)アーキテクチャ(IA32)構造の、リピート(繰り返し)・ムーブ(移動)・バイト(REP MOVSB)命令は、コピーの長さを示す情報として、所定のレジスタ内の値を使用する。また、命令は、入力パラメータとして、コピー元ポインタ及びコピー先ポインタを受信する。このような命令は、データの1バイトを、一度に一つずつ移動するよう定義されている。ある条件下では、オペレーションが、長いオペレーション(例えば、一回に16バイト)を使用して実行され、このような場合には、命令の実行が、"高速モード"に切り替わると言える。IA32のプログラマのレファレンスマニュアルには、現在のプロセッサにおいて高速モードを実行してもよい条件が規定されている。
多くの場合、コンパイル時には、コピーの長さ及び設定されたオペレーションが未知であるので、反復コピーオペレーションの従来の実装形態を使用してコピーオペレーションの効力を改善するための解決方法の1つは、まず、ストリングの大部分を移動させる第1反復コピー命令を使用し、次に、データの残りを移動させる第2反復コピー命令を使用する(例えば、第1コピーオペレーションでは、一度にダブルワードを移動させ、第2コピーオペレーションでは、最後の0〜3バイトを移動させる)ことである。このようなシーケンスには、2つの欠点がある。(a)第2命令を実行することにより、データの残りの部分が0である場合であっても、さらなるサイクルを消費することになってしまう。(b)特定の長さを有する第1反復コピー命令、及びそれに続く第2の命令の限定されたシーケンスに対して最適化が調整されており、その他の組み合わせの場合には、大幅な性能損失が生じてしまう。
また、パイプライン機械では、最も好適な動作を決定するのに必要となるデータの一部が未知である、又はまだコミットされていないにも関わらず、命令の最も好適な動作を命令をデコードする時点で決定する必要がある場合が生じる。このような場合の一例として、フラグがまだ計算されていないにも関わらず、フラグによって分岐を選択する場合が挙げられる。このような問題を解決するための最も一般的なスキームは、分岐予測器を使用することである。しかしながら、予測器は、トレーニング(履歴を構築する)の時間を必要とし、コストも高く(多くのステートを保存する必要があるため)、また、断片的なパターンの下での性能は不確かである。
本発明の一実施形態に係る方法のフローチャートである。 本発明の一実施形態に係るシーケンス検出器のブロック図である。 本発明の一実施形態に係るシーケンスデコーダ状態機械の一例の状態図である。 本発明の一実施形態に係るプロセッサのブロック図である。 本発明の一実施形態に係るシステムのブロック図である。
様々な実施形態において、コンパイラが生成したコピーオペレーションの特性が、反復コピーオペレーションをより効率的に行うのに利用される。本明細書で使用されている"コピー"オペレーションという言葉は、データをメモリ内、メモリへ又はメモリの外へ移動させるメモリコピーオペレーション、メモリムーブオペレーション及びメモリセットオペレーションを総称する言葉として使用されている。異なる環境では、このような一般的なオペレーションに対して、異なる名前が付けられているかもしれない。これらのコピーオペレーションの"高速モード"は、多くのケースで実行可能である。実行不可能とされた場合(例えば、エイリアシング・リスクテストが不合格であった場合)であっても、多くの場合(ランダム分布であると仮定すると)、1度に1つのデータ要素がコピーされる、ネイティブモードよりも速いモードを実行可能である。最適化されたコピーシーケンスは、最初から、幾つかの異なる高速モード(すなわち、ネイティブモードよりも速いモード)のうちの1つを使用してコピーの実行を試みるが、ネイティブ長のオペレーションを使用してコピーを実行しなければならないのは僅かなケースにとどまる。プロセッサの命令セットは、プロセッサにメモリコピーオペレーション又はメモリセット(格納)オペレーションを実行させるよう指示する1以上の命令を含んでもよく、これらのオペレーションが効率的に実装されると、そのプロセッサハードウェアは、様々なマイクロアーキテクチャ世代及び様々なアーキテクチャ世代に渡る性能境界を保つことができる。
以下に記載されるように、一実施形態は、複数の主要な段階(以下に詳述する)を含んでもよく、(1)"高速コピー"を開始するのに必要な規則のチェックを実行し、次の段階のためのオペレーションを設定する部分、(2)条件付きコピーが実行されたヘッド部分(パイプレインのレイテンシをカバーし、条件付きオペレーションを使用することにより伝播によって生じるバブルを防ぐ)、(3)目的のケースを扱うための特色を加えた高速固定サイズ反復、及び(4)テール部分を含む。チェック及びヘッド部分(ステップ1及びステップ2)は、全ストリング長(すなわち、コピー長又はブロック長)について実行される。ヘッド部分は、全てのチェックが可であった場合に実行され、チェックの結果が不合格であった場合は、ハードウェアは、1度にネイティブサイズのコピーオペレーションを行うネイティブループに入る。高速ループ及びテール部分は、ヘッド部分で解析されるコピーの長さに応じて、必要に応じて実行される。判断を早い段階で行うことにより、実行経路が最小のパイプラインバブルを使用して選択され、分岐ミスが予測されることはない。長さの又はsrc‐dstの距離ハンドリングのうちの幾つかに、追加の制限を適用することもでき、"高速ループ"の幾つかの実装例においては、オペレーションの一部を再実行する必要がある厳密でない例外検出が、ヘッド部で行われるチェックに加えて存在してもよく、最大64Bまで戻ることが許され、コピー先のポイントが、コピー元ポインタの後ろであって63B未満であるか(すなわち、(dst mod 4K)−(src mod 4K)<63B)をチェックする必要がある。このような追加のチェックに失敗した場合、正確な実行を行うために、最適ではないが別のコードルーチンへと分岐することはできる。また、幾つかの実施形態では、選択肢として、コピーオペレーション長が非常に長く、キャッシングヒントを利用して性能を改善できる特別なケースを扱ってもよい。本明細書では特定のサイズのコピーオペレーションが記載されるが、本発明の範囲はこれらに限定されず、実施形態は、その他のサイズ(例えば、異なるバイト数及びキャッシュライン幅)に合わせて最適化されたコピーオペレーションを扱うことができる。
図1は、本発明の一実施形態に係る方法のフローチャートである。方法100は、汎用ハードウェアユニット又は専用ハードウェアユニットのようなプロセッサの様々なロケーションで実行することができる。方法100は、最適化された態様で、反復コピーオペレーションを実行するのに使用されてもよい。図1に示すように、方法100では、最初に、チェックが実行され、コピーオペレーションの準備が行われる(ブロック110)。具体的には、実行すべきコピーオペレーションの種類を判断するために様々なチェックを行い、また、コピーオペレーションで使用される様々なカウント値を、コピーオペレーションに関連付けられたカウンタに読み込ませることにより、カウンタを初期化してもよい。まず初めに、命令のネイティブ長よりも長い読み込み/格納オペレーションを使用してコピーオペレーションが行われる高速フローが実行可能かを判断するための幾つかのチェックが行われてもよい。幾つかのチェックのうちの1つでもチェックに失敗した場合には、ネイティブモードループが実行され、コピーオペレーションは、例えば、バイト単位で動くオペレーション又はダブルワード単位の命令といったように、命令のネイティブ長を使用して行われる(ブロック120)。必要な情報がすでに利用可能となっている及び既知である実行段階において取得されたデータを使用して、チェックを行う。チェックのいずれかが失敗となった場合には、関連付けられたパフォーマンスヒットが生じると共に、予測ミスコストが生じるが、通常の使用では希なケースであり、ネイティブループのコストを考えれば、相対的なロスも低い。
一実施形態では、チェックされる条件として、コピー先(dst)ポインタのストリングとコピー元(src)ポインタのストリングとの間の距離をチェックすることを含み、先に読み出されるsrcがオペレーションの振る舞いを変更することがないようにする。距離の測定は、0バイト(B)<((dst mod 4K)−(src mod 4K))<16Bであるかの判断で行われ、この範囲であれば、ネイティブモードへと移ってもよい。ページ間のメモリエイリアシングが無関係である場合の実施形態では、"mod 4K"なしで、オペレーションを行ってもよい。方向(DF)フラグのチェックも行う。DFフラグ==1である場合には、ネイティブモードへと移ってもよい。アドレス空間(src及びdstの両方について)のラップアラウンドに対するチェックを行ってもよく、チェック結果が真である場合には、ネイティブモードへと移る。その他の条件を追加、又は、高速モードへと入る条件の一部を取り除いて、別の実装形態を使用してもよい。
ブロック110では、例えば、"Fast Loop"のような高速ループの準備が行われ、テール部分も実行してもよい。一実施形態において、この段階は、高速CLループのためのカウンタを計算すること(例えば、長さがrcxレジスタでバイト単位で規定され、各ループは64バイトで動作し、反復の数は、rcx/64で計算される)、及びその値を、ゼロオーバードカウンタレジスタに読み込むこと("ヘッド"部分が、以下に説明するように、64Bまでのデータをコピーすると仮定し、高速ループ110へとジャンプする時にカウンタが1でデクリメントされる)を含む。"ヘッド"部分が64Bよりも大きいデータ(例えば128B)を扱う場合には、rcx/64の計算値から、定数を差し引くことが必要な場合もある。そして、テール条件が計算され、ゼロオーバーヘッドジャンプ制御レジスタに置かれる。
チェックのいずれかが失敗となった場合には、制御がブロック120に移り、コピーはネイティブモードで行われてもよい。様々な実施形態において、このネイティブモードは、ネイティブ長モードに従ってコピーオペレーションを実行されるのに使用することができる。ここで、方法100が終了してもよい。このように、コピーオペレーションを束ねるのに必要な条件を満たさない場合には、ゼロオーバーヘッドループを使用した各コピー反復(イタレーション)に、ネイティブ長が使用される(例えば、繰り返し移動バイト命令(REP MOVSB)の場合、一回のイタレーションにつき1バイト)。
チェックが完了し、高速コピーオペレーションを実行することができると判断された(ブロック110のチェック及び計算に基づいて)場合には、制御は、ブロック110からブロック130へと移る。ブロック130において、コピーオペレーションのヘッド部分を実行してもよい。具体的には、例えば64バイトである、所定の量のデータ以下のあらゆる長さを扱う条件付き読み込み/格納を実行してもよい。本明細書に記載するように、一実施形態において、最大64バイトであるデータのコピーを行うのに、コピーオペレーションを8回まで実行してもよい。具体的には、ブロック110のチェックを通過した場合には、この時点で、結果の正確性に影響を及ぼすことなく、ネイティブコピー長よりも長いコピーオペレーションを実行可能であるとプロセッサが知る。
ブロック130において、コピーオペレーションは、"条件付き"オペレーヨンを使用しており、Nバイト長の条件付きコピーのそれぞれは、残りの長さが少なくともNバイト存在している場合に実行される。条件は、実行時にチェックされるので、実行からデコード段階へと戻される長さ情報の伝播に依存しない。コピーに加えて、反復の各回では、次のオペレーションで使用されるべきsrcポインタ及びdstポインタをNだけインクリメントし、残りの長さをNだけデクリメントする。
コピーオペレーションの回数は、準備が"チェック"段階(ブロック110)で完了可能となり、パイプラインで伝播するように設定され、順番が来た時及びデコード段階で使用される時にペナルティを受けないようにする。"ロードゼロオーバーヘッドカウンタ"又は"ゼロオーバーヘッド分岐条件"がデコード段階から最終的な実行段階まで進むのに掛かる時間は、条件付きオペレーションがデコードされ実行される時間枠であり、デコードから実行までのパイプの深さに等しい。マシーンが扱うことのできる最大の読み込み/格納長さ(バイト単位)が、"N=2^n"であるとすると、2のべき乗の長さのシーケンス(2のツリーのべき乗と称すことができる)、すなわち、1、1、2、4、・・・、N/2、N、N、Nを使用して、コピーシーケンスを実行することができる。例えば、N=16の場合であって、パイプライン遅延をカバーするのにプロセッサが8回のオペレーションを必要であると仮定すると、シーケンスは、1、1、2、4、8、16、16、16となり、最大のコピー量が64Bとなる。0から64Bまでの範囲の各数字には、その量と同じデータを移動させることができるオペレーションのサブセットが存在する(例えば、3バイトを移動させるには、1及び2を実行する、また、10バイトの場合には、2及び8を実行する)。別の例として、N=32であり、パイプライン遅延をカバーするのに8回のオペレーションを必要であると仮定すると、シーケンスは、1、1、2、4、8、16、32、32であり、合計96Bとなる。幾つの実施形態では、条件付き部分が扱うことができる最大のデータ量が、Fast Loopのサイズの整数倍であると効率的である(例えば、64B×1=64B、64B×2=128B)。
一実施形態において、オペレーションのシーケンスは、上記の記載とは反対の順番で実行することにより(例えば、16、16、16、8、4、2、1、1)、ブロック130のヘッド部分で、0〜64Bの範囲のあらゆるバイト数のデータを正確にコピーするのに必要なオペレーションのサブセットを簡単に生成することができる。これは、残りの部分の長さを調べる条件を設定し、Remainder_Length(残りの長さ)−N>0である場合には、オペレーションが完了し、そうでない場合には、スキップされる。Remainder_Lengthは、各コピーオペレーションの後に、そのオペレーション長を使用して更新される。コピーオペレーションの都度、srcポインタ及びdstポインタを更新する替わりに、元のsrcポインタ及び元のdstポインタのオフセットのみを更新することも可能であり、srcポインタ及びdstポインタは、ブロック130の最後で(又は、ブロック中の別のスナップショットポイントで)新しい値へと更新される。このようにすることにより、各条件付き段階で、1回の"加算"オペレーションを節約することができる。
ヘッド部分130の最後で、カウンタ、選択されたループの種類及びブロック110で用意された条件を使用して、複数の態様の判定が行われる。具体的には、ゼロオーバーヘッドカウンタ値が、1以上である場合には、カウンタは1デクリメントされて、ブロック140のFast Loopが実行される。1未満である場合であて、テール条件が真である場合(すなわち、残りのバイト数が、64より小さくゼロより大きい場合)には、テール部分がブロック135で実行される。それ以外の場合であって、追加のデータがコピーされない場合には、方法100は終了する。"Fast Loop"を呼び出す必要があるかを判断するのに、ゼロオーバーヘッドカウンタ値を使用する。反復(イタレーション)回数+1の数がカウンタに読み込まれており、カウンタ値>1の場合には、デクリメントされ、"Fast Loop"のヘッド部にジャンプする。カウンタ値が1以下であると判断された場合には、ループを呼び出す必要はない。
図1に示すように、残りのカウント値が63バイトよりも大きい場合には、制御はブロック140へと移され、例えば、64バイト及び/又はキャッシュラインサイズのデータを1イタレーション毎に移動させる高速固定サイズ反復を実行してもよい。これは、所定の長さのコピーオペレーションを、予め読み込まれたゼロオーバーヘッドループカウンタで扱う高速ループである。幾つかの実施形態では、ブロック140のコピーオペレーションを実行する前に、いつヒットが予測ミスペナルティを受けるか(しかしながら、"高速実行"は可能)のチェックを行う。まず、更なるポインタの距離のチェックが実行されるが、これは、Fast Loopの制限が、ヘッド部分における条件付きコピーの制限よりも厳しい場合に必要となる。例えば、進行を追跡しないFast Loopは、一番初めから再実行する必要がある場合があり、前に行われている全てのチェックに加えて、((src mod 4K)−(dst mod 4K))>63Bをチェックする必要がある。上記のチェックに失敗した場合には、制御はブロック160に移り、第2高速ループが実行される(以下に詳述されるが、これは、制限は存在しないが、実行するのに遅くなる場合があるケースに対応する)、(2)ストリングの残りの長さがチェックされ、長さが規定の閾値(NT_threshold)よりも大きい場合には、制御がブロック150へと移り、キャッシュ汚染を回避するための、読み込み及び格納オペレーションのための非時間的ヒント(例えば、インテル(登録商標)のMOVNTDQA又はMOVNTSQ命令)のようなキャッシュヒントを使用するループが実行される。一実施形態では、このNT_thresholdパレメータは、最良の性能影響を達成するようにキャッシュサイズに対応させて調整することができる。別の実装例として、様々なキャッシングヒントのうち最も適切なものの使用を判断するために、複数の閾値レベルを使用してもよい。
ブロック140のループのイタレーション(反復)のそれぞれの間に、64Bのデータが可能な限り高速な態様でコピーされる(すなわち、コピー長に対して最適化されたコードシーケンスが使用される)。イタレーションの数は、ゼロオーバーヘッドループカウンタを使用して判断される。Fast Loopのブロック140の最後で、テール部を扱う条件がチェックされ、次のような判断がなされる(条件はプリセットされているので、ゼロオーバーヘッドである)。テール条件=真であれば、制御はブロック135のテール部分に移り、真でない場合には、更なるデータがコピーされることなく、方法100が終了する。
ブロック160において、fast_16 loop(高速16ループ)はFast Loopと同様なものであるが、各イタレーションで16Bを(このコピー長に最適化されたシーケンスに応じて)コピーする。ゼロオーバーヘッドカウンタは、ループの実行に先立って、16Bのイタレーションが可能となるように調整される。
64Bの塊(又は、ブロック140、150及び160のコピーオペレーションのサイズ)を、可能な限り多くコピーした後、63B以下のコピーオペレーションが残る場合がある(このようなテール部分が存在する場合にのみ、プロセッサがこの状態に至る)。テール部分は、ブロック135における条件付きコピーオペレーションのシーケンスを使用して扱われ、シーケンスは、ヘッド部で使用されたシーケンスと同様なものであるが、異なる点は、シーケンスが、1が2つではなく、1が1つで始まる(1、2、・・・)という点である。テール部の長さは、Fast Loopの1回のイタレーションにおけるデータ量から1を引いたサイズ(例えば、63B=64B−1)に設定され、パイプラインの深さとは関係しない。N=16及びFast Loopが64Bである上記の例の場合、テール部は、16、16、16、8、4、2、1バイト(7回のオペレーション)のデータの塊でコピーされる。上述のヘッド部の箇所で説明したように、移動させるオペレーションのサブセットを規定するプロセスを最適化するために、逆の順序が使用されている。N=32の場合、テール部のシーケンスは、32、16、8、4、2、1(6回のオペレーション)となる。
ブロック110でチェックされたDFフラグが1である場合には、ストリングは"逆順"となり、コピー元及びコピー先ポインタは、デクリメントされる。上述したアルゴリズムでは、この場合を、ネイティブループで扱う(制御をブロック120へと移す)。別の実装例として、このようなコピーオペレーションを、同様な"高速コピー"シーケンスを使用して実装してもよく、対称スキームを使用して、ポインタの調整オペレーションにおけるオペレーションを反転させる。
上述の方法100の実装例は、REP MOVSB命令を使用した反復コピーオペレーションに対するものであったが、その他のコピー命令を使用した別の実装例を採用してもよい。例えば、格納(ストア)命令(例えば、REP STOSB)を利用したアルゴリズムは、REP MOVSBと同様なスキームを扱うことができ、コピーオペレーションではload+storeが使用されたが、格納オペレーションではstoreのみが実行される点を除いて、上述と同じ段階が使用される。加えて、REP STOSBの場合には、プロセスを簡単にできる箇所が存在する。(1)srcとdstとの間の距離をチェックする必要がない。(2)srcポインタにおける条件をチェックする必要がない。また、最も長い格納オペレーションの長さ(上述の例の場合は、N=16又はN=32)を有する格納データレジスタを準備する段階が新たに必要となり、最も長い格納オペレーションは、格納アクションのためにデータの複製バージョンを保有する(STOSBは、格納先データレジスタの各バイトにおいて重複させる必要がある1バイトのデータを含む)。
図1の実装例は、REP MOVSB及び1イタレーションにつき64バイトに調整された例であったが、異なる長さの高速コピーオペレーションを扱うのにそのほかの実施形態を使用してもよい。また、ダブルワード長(例えば、REP MOVSD)を移動させるといった命令や、その他の命令を使用して、高速コピーオペレーションを実行するのに、このようなオペレーションを使用してもよい。別の実施形態として、ページの"エイリアシングが存在しない"という仮定を採用してもよい(この場合、モジュール4Kは取り除かれる)。上述したように、コードシーケンスの一部は、含まれる命令の特定の種類に対して最も効率的な態様で所望のオペレーションを実行するように最適化されており、別のシーケンス部分では、同じ命令が、最適化されていない態様で実行される場合がある。様々な実施形態において、シーケンス検出技術が実装され、入力される命令のシーケンスを分析し、コードを実行ユニットに提供して、所定のコードシーケンスの1以上の命令を最適化された態様で実行することを可能にする。
一例として、IA32 REP MOVS及びREP STOSオペレーションは、予め長さが知られていないコピーオペレーションを扱うために調整される。現在の最適化では、データの大部分を移動させるためにREP MOVSDを使用し、残りの部分にはREP MOVSBを使用することを基本としており、残り部分への使用は、0‐3の長さであることが知られている(REP MOVSB実行時間を最適化するのに使用される情報)。これらのコピーオペレーションを実装するコードの例が、表1に示されている(同様な構造が、REP STOSにも適用される)。
Figure 0005356531
REP MOVSBは、長さが0‐3の場合を早く処理し、その他の長さについてはペナルティを受けることによって、最適化されている。先行するオペレーションのために、上記のスキームは、カウントが決して0‐3を超えないように構成される。しかしながら、このような最適化を実行するためにその他の様々なシーケンスを使用してもよく、特にREP MOVSB命令のカウントを設定するのに別のシーケンスを使用してもよい。REP MOVSBの振る舞いを0‐3以外の長さに対して最適化する、例えば、REP MOVSQ命令が有する残りの部分の長さが0‐7であることに関連して最適化する場合、コードがうまく機能せず、多くの場合、性能が低下してしまう可能性がある(例では、長さが4‐7の場合)。同様に、どのような長さを扱っても効率的となるようなREP MOVSBに対するその他の最適化、及び、このような最適化の一部として0‐3の長さの場合に質の低下が生じる場合には、上記の表1に記載されたコードは適切に作動せず、性能が低下してしまう。ecxの値が命令の実行時でなければ知ることができないとしても、パイプライン遅延での時間損失を防ぐために、REP MOVSBがどの長さを扱うべきかの決定を、命令デコード時に行う必要があり、性能損失を引き起こす"バブル"が生成されてしまうことがある。
上述の最適化(表1)では、MOVSBは、REP MOVSD命令(D+Bシ−ケンスと称する)の直ぐ後に続き、このことは、プログラマがREP MOVSB命令を限られたバイト数、例えば0‐3バイトに設定することを意図しているというヒントとして機能する。実施形態は、このシーケンスヒントを使用して、様々な命令コードを、実行ユニットに提供し、(少なくとも)2番目のコピー命令の最適化を行うことを可能とする。完全な命令シーケンスは変化する場合があり、他のコードが同じ結果を達成するのに使用される場合もあることから、特定のシーケンスを探索する替わりに、ハードウェアが、REP MOVSD命令の後に続くREP MOVSBを、少ない数の命令で(例えば、1‐9)で探す。所定のデータ長に対して、どのフローをデコードし、どの最適化を選択するか関わらず、そしてデコーディングが正確に実行されたとしても、D+Bシーケンスが必ず検出される保証はないことから、D+Bシーケンスが間違って検出されてしまうことがないとも必ずしも言えない。
図2には、本発明の一実施形態に係るシーケンス検出器のブロック図が示されている。図2に示すように、プロセッサ200は、実行されるべき命令を受信する命令デコーダ210を含んでもよい。命令がデコーダで受信されると、受信された命令は、バッファ215に格納されてもよい。バッファ215は、デコードロジック220に、実行すべき次の命令を提供するよう動作してもよく、デコードロジック220は、シーケンス検出器状態機械240を含むフィードバック経路からデコード経路選択信号を受信する。この選択信号、及びデコードロジック220の様々な規則に基づいて、命令がデコードされて、実行ユニット230に提供され実行されてもよい。通常、デコードロジック220は、入力される命令を受信し、受信した命令から、デコードした命令を生成する。一実施形態において、このようなデコードされた命令は、命令に対応する機械コードの形式であってもよく、命令が実行可能となるよう実行ユニット230に提供される。例えば、命令コードは、命令ユニットにマイクロコードシーケンスを実行させる、又は所定の機能ユニットを選択して、所望のオペレーションを実行させてもよい。デコードロジック回路は、複数の命令のデコードを並列に実行してもよい。実行のために、別のデコードロジック回路が、1つの命令を複数の指示に変換してもよい。
図2に示すように、デコードされた命令が、フィードバック経路の命令比較器225に供給されてもよく、デコードされた命令を、状態機械240から受信した予測命令コードと比較してもよい。予測命令コードは、コードシーケンスの最初の部分に存在する、状態機械240及びデコードロジック220を使用して最適化されるのが望ましい所定の命令コードに対応していてもよい。ある実装形態では、内部のマイクロオペレーションアレイに対するインデックスを使用して、実装してもよい。また、幾つかの実装形態では、複数のこのような状態機械及び比較器が配置され、それぞれが、コードシーケンス中で探索されるべき所定の命令と関連付けられていてもよい。別の実装形態では、状態機械240及び比較器225は、複数の命令の比較及び解析をサポートするように拡張されてもよい。
1つの命令を実装する図2の実施形態に示されているように、比較器225に入力される2つのコードが一致する場合には、一致信号が比較器225から状態機械240へと報告される。また、図2に示すように、状態機械240は、サイクル毎に、ストール信号(又は、命令デコードを示す情報)を命令デコーダ210から受信する。図2には、命令のデコードが一度に1つ行われる場合が示されているが、複数の命令が並列にデコードされる場合に拡張することもできる。命令デコーダ210は、デコードロジック220へと供給される命令を保持する。一実施形態において、デコードロジック220は、特定の状態情報(例えば、ある命令を不正であると規定する機械のモード)を使用して命令を解析するロジック機能を含んでもよい。デコーダの出力は、"デコードされた命令"として示されており、この命令に対して実行されるであろうマイクロオペレーションを特定する。これらのオペレーションの性質は、機械のマイクロアーキテクチャの実装に依存するが、命令を一意的に表す2進値(又は値の範囲)として見なすこともできる。このコードは、実行ユニット230に供給されて、デコードされた命令に対応するオペレーションが、1以上のサイクルで実行される。
一実装形態では、最適化は、命令シーケンスに緩く基づく。命令の正確なオペレーションは、決定に関わらず保証されると仮定され、それにより、全てのケースでシーケンスの検出が正確であると保証する必要がなくなり、ほとんどの場合のシーケンスを検出が検出されるように最適化することが可能となる。命令比較器225は、状態機械240からの現在の命令と、命令デコーダ220から受信された"次の命令コード"とを比較する。以下に記載するように、このコードは、複数のコードの範囲又は1以上のコードを状態機械フローに基づいてカバーしてもよい。比較の結果が一致した場合には、状態機械240は、次の段階に移る。状態機械は、一致の検出(一致は、ある状態から別の状態へと変化する場合がある)若しくは、時間又は命令デコードカウントに基づいて、ある段階から別の段階へと移る。時間が使用される場合には、ストールを示す情報が、命令デコーダ210から提供され、状態機械が、命令デコーダ210がストールしている(例えば、下層のキャッシュ又はメモリからのフェッチの完了を待っている、又は実行ユニットがビジー状態で新たな命令を実行できない場合など)間に"カウント"してしまうのを防ぐ。このストールにより、実行サイクルのカウントが、デコードされた命令のカウントの近似となり、このように構成する方が実装が単純化される場合がある。シーケンス検出器状態機械240は、デコードロジック220に、状態情報信号をフィードバックし、図2では、"デコード経路選択信号"として示されている。この状態情報は、命令バッファ215における同じ命令に対して、デコーダの規則が、デコードされた異なる命令を実行ユニット230に信号で伝えるように、デコードロジック220を変更する。
オペレーションを明確にするため、REP MOVSBの実行を検出し最適化する例について、2つの場合を提供する。(1)REP MOVSB自体が、データ長が未知であって、3バイトよりも大きいと予想されるもののコピーに使用される(すなわち、"長REP MOVSB"命令)場合、そして、REP MOVSBが、コードシーケンスにおいてREP MOVSDと関連付けられて使用される場合であって、REP MOVSBの命令に対する長さが0‐3バイトの範囲であると予想され、ここでは"短REP MOVSB"と称することにする。このような2つの異なるコードを命令デコーダ210から出力することができ、実行ユニット230は、2つの異なる最適化されたコピーオペレーションのうちから選択された1つを実行する。
図3は、本発明の一実施形態に係るシーケンスデコーダ状態機械の一例の状態図であり、状態機械の実装が示されている。図3に示すように、オペレーション310では、状態機械は、REP MOVSD命令又はREP STOSD命令を探索する場合にリセットされる。この場合、状態機械からのデコード経路選択信号は、REP MOVSBがコードシーケンス中に生じた場合に、"長REP MOVSB"コードを生成するように設定される。同時に、命令デコーダには、REP MOVSD及びREP STOSDのコードが供給され、この2つのうちのどちらかのコードが生じた場合には、そのことを示す情報がシーケンス検出状態機械に提供され、REP MOVSB又はREP STOSBを"直ちに追従"を探すモードへと切り替わり、デコード経路選択信号が提供されて、"短REP MOVSB"オペレーションに対するコードがエンコードされる。状態機械は、特定されたREP MOVSB又はREP STOSDの閾値距離の間、少ない回数である"n回の非ストールサイクル"又は等価である"nl個の命令"の間は、この状態(オペレーション320‐340)にとどまる。1度に1つの命令がデコードされる場合には、nlはnに等しく、複数の命令が同時にデコードされる場合には、nlはnよりも大きく(例えば、4n)なる。デコーダが、このフローに対して新たな命令を発行するのを妨げるフェッチストール又はその他のストールが生じた場合には、カウントを一時停止して、シーケンス検出を保証するようにする。本例では、nは小さい数であり、例えば、4である。このような遅延の後、REP MOVSBが到達したか否かに関わらず、シーケンサは、REP MOVSD又はREP STOSDを探索する最初の状態310に戻り、新たなREP MOVSD+Bシーケンスが開始したことを暗に示すこととなる。REP MOVSBが存在しない場合又はREP STOSBが検出されなかった場合は、コードがREP MOVSDのみを含み、別の箇所では、REP MOVSBのみを含んでいるというシナリオをカバーする。ある実施形態では、状態機械オペレーションの途中で割り込みが発生した等のイベントは無視してもよく、これは、イベント発生の割合は、ミス予測のペナルティで乗算されるため、イベントのコストと比較して小さくなるからである。
選択肢の1つとして、状態機械は、最後の状態を実行せずに、状態320又は状態330で抜けて状態310に戻り、REP MOVSB又はREP STOSBを探索するように実装することができるが、コードシーケンスが短い場合は(REP MOVSBの直ぐ後に続くREP MOVSDが存在せず、固定遅延の間は検出されないと仮定して)、このように構成する必要はない。別の実施形態では、特定された命令間のシーケンスの距離が長い場合には、2番目(すなわち、別のさらなる命令)の検出時に、状態機械は、最初の探索状態(状態310)にリセットしてもよい。
選択された最適化に関わらず完全な実行が保証されるという事実は、REP MOVSD命令とREP MOVSB命令との間の例外のようなケースもカバーしている。このような稀な条件が発生した場合には、REP MOVSBの実行は、最適でない経路を選択してもよく、性能の点ではコストが生じてしまうかもしれないが、コードの正確な実行を損なうこと避けることができるかもしれない。他にも、パイプラインの掃き出しのような予測ミスを引き起こすケースが存在する(例えば、REP MOVSBが、REP MOVSDの後にデコードされて、掃き出される)。このようなケースでは、通常、状態機械はリセットしないことが望ましく、リセットしてしまうと、高い確率で、許容された遅延の時間枠内において、REP MOVSBが再びデコードされてしまう。
一実施形態において、フローが完全ではなく変動が生じるケースを正しく扱うために、シーケンス検出器状態機械の実装条件を緩めてもよい。例えば、完全シーケンスを探索する替わりに、タイマーを使用することにより、この問題に対処することができる。
現在のデコーダは、複数の命令を一度にデコードすることができる。上述の実装形態を、この場合を含むように、複数の態様で拡張することができる。初めに、"探索すべき"命令のデコードを、一度に1つに限定することができる。REP MOVSBの例では、REP MOVSD命令及びREP STOSD命令は、それ自身によってデコードされる。次に、複数の比較オペレーションが、各デコーダの出力に対して実行されて、シリアル化する(より最近のオペレーションをフラッシュする)又は、予測されたコードの全てに対して複数の比較器を使用して、状態機械があらゆるオペレーションからコードシーケンスを追従できるようにする。非シリアル化デコードが使用される場合には、状態機械は、複数の段階分岐を同時にサポートする(第1のデコードと並列に第2の一致のデコードをサポートする等)ように拡張されてもよい。
実施形態は、REP MOVSD+Bシーケンスを使用するように最適化された現在のコードに対して性能損失を生じさせることなく、新しいコードに大きな利益をもたらすREP MOVSB命令の最適化を可能にする。
図4は、本発明の一実施形態に係るプロセッサのブロック図を示している。図4に示すように、プロセッサ400は、複数段階にパイプライン化された、アウトオブオーダープロセッサであってもよい。図4では、上述の命令調整と関連して使用される様々な特徴を例示するために、プロセッサ400は相対的に簡略化されて描かれている。
図4に示すように、プロセッサ400は、フロントエンドユニット410を含み、実行すべきマクロ命令をフェッチするのに使用され、プロセッサにおいて後で使用するためにこれらマイクロ命令を準備しておく。例えば、フロントエンドユニット410は、フェッチユニット404、命令キャッシュ406及び命令デコーダ408を含んでもよい。幾つかの実装形態では、フロントエンドユニット410は、マイクロコードストレージ及びマイクロオペレーション(μOP)ストレージと共に、トレースキャッシュを更に含んでもよい。フェッチユニット404は、マクロ命令を、例えば、メモリ又は命令キャッシュ406からフェッチして、命令デコーダ408に供給し、命令を基本命令、すなわち、プロセッサによって実行されるμOPへとデコードしてもよい。本発明の一実施形態では、入力される命令グループが2つ以上の命令の所定のシーケンスを含む(又は、上記したように、選択された命令のシーケンスが互いに近接する)ように、シーケンス検出を実行するロジックを備えるように命令デコーダ408が構成される。このロジックは、命令デコーダ408に、デコードされた様々な命令、例えば、プロセッサパイプラインで後に実行されるμOPを、性能を最適化するために提供させる。幾つかの実装形態において、所定のマクロ命令が受信されると、命令デコーダ408は、所定のマイクロコードシーケンスを実行のために送信されるようにし、このシーケンスは、本発明の実施形態に係る高速モードコピーオペレーションを扱ってもよい。別の実装形態では、デコードされた命令に応答して効率的に高速コピーオペレーションを実行するべく、特定のハードウェアに対して、実行ユニットを拡張してもよい。
フロントエンドユニット410と実行ユニット420との間には、マイクロ命令を受信し、実行のために準備するのに使用されてもよいアウトオブオーダー(OOO)エンジン415が接続されている。具体的には、OOOエンジン415は、マイクロ命令フローを再順序付けし、実行に必要な様々なリソースを割り当てるための様々なバッファを含んでもよい。また、レジスタファイル430及び拡張されたレジスタファイル435のような様々なレジスタファイル内の格納位置に対して、論理レジスタのリネームを提供する。レジスタファイル430は、整数オペレーション及び浮動小数点オペレーションのために、別々のレジスタファイルを含んでもよい。拡張されたレジスタファイル435は、ベクトルサイズの単位、例えば、1レジスタにつき、256ビット又は512ビットといった記憶領域を提供してもよい。
様々なリソースが実行ユニット420内に存在してもよく、例えば、様々な整数、浮動小数点及び単一命令多重データ(SIMD)ロジックニット、及び他の専用ハードウェアが含まれる。結果は、リタイアメントロジック、すなわち、リオーダ(再整列)・バッファ(ROB)440に供給される。具体的には、ROB440は、実行される命令と関連付けられた情報を受信する様々なアレイ及びロジックを含んでもよい。情報は、ROB440によって調べられ、命令が、有効にリタイアでき、結果のデータがプロセッサのアーキテクチャ状態にコミットしたものとなるかを判断する、又は、命令の適切なリタイアメントを妨げるような1以上の例外が発生したかを判断する。無論、ROB440は、リタイアメントに関してその他のオペレーションを扱ってもよい。
図4に示すように、ROB440は、キャッシュ450と接続され、本発明はこの点に関して限定されないが、一実施形態では、低階層のキャッシュ(例えば、L1キャッシュ)であってもよい。実行ユニット420は、キャッシュ450と直接接続することができる。キャッシュ450から、高階層のキャッシュ、システムメモリ等に対しての通信が発生してもよい。図4の実施形態では、この構成が高階層に示されているが、本発明はこの点に関して限定されない。
実施形態は、多くの異なるシステムの型に実装されてもよい。図5には、本発明の一実施形態に係るシステムのブロック図が示されている。図5に示すように、マルチプロセッサシステム500は、ポイント・ツー・ポイント相互接続システムであって、ポイント・ツー・ポイント相互接続550によって連結された第1プロセッサ570及び第2プロセッサ580を含む。図5に示すように、プロセッサ570及びプロセッサ580のそれぞれは、マルチコアプロセッサであり、第1プロセッサコア及び第2プロセッサコア(すなわち、プロセッサコア574a及び574b、並びにプロセッサコア584a及び584b)を含む。各プロセッサコアは、図1‐4に示すように、命令調整を実行するハードウェア、ソフトウェア及びファームウェアを含んでもよい。
図5に示すように、第1プロセッサ570は、メモリ制御ハブ(MCH)572、及びポイント・ツー・ポイント(P‐P)インターフェース576及び578を含む。同様に、第2プロセッサ580は、MCH582、P‐Pインターフェース586及び588を含む。図5に示すように、MCH572及びMCH582は、プロセッサをそれぞれのメモリに、すなわち、メモリ532及びメモリ534に接続し、これらのメモリは、対応するプロセッサにローカルに取り付けられたメインメモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))の一部であってもよい。第1プロセッサ570及び第2プロセッサ580はそれぞれ、P‐P相互接続552及び554を介して、チップセット590に連結されていてもよい。図5に示すように、チップセット590は、P‐Pインターフェース594及び598を含む。
また、チップセット590は、チップセット590を、高性能グラフィックスエンジン538に接続するインターフェース592を含む。同様に、チップセット590は、インターフェース596を介して、第1バス516に接続されていてもよい。図5に示すように、様々なI/Oデバイス514が、第1バス516に接続されていてもよく、また、第1バス516と第2バス520とを接続するバスブリッジ518が第1バス516に接続されていてもよい。様々なデバイスを第2バス520に接続してもよく、例えば、キーボード/マウス522、通信デバイス526、及び、ディスクドライブ又は一実施形態においてコード530を含んでもよいその他のマスデータストレージデバイスのようなストレージユニット528を接続してもよい。また、オーディオI/O524を、第2バス520に接続してもよい。
実施形態は、コードに実装されてもよいし、システムに命令を実行させるようプログラムするのに使用可能な命令を格納する記憶媒体に記憶されてもよい。記憶媒体としては、特にこれに限定されないが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD−ROM)、再書き込み可能コンパクトディスク(CD−RW)及び磁気光学ディスクを含むあらゆるディスク、並びに、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)及びスタティックランダムアクセスメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能−プログラム可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能−プログラム可能リードオンリーメモリ(EEPROM)、磁気又は光学カードのような半導体デバイス、又は、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
本発明が、限られた数の実施形態を参照して説明されたが、数多くの変形例及び変更が可能であることは、当業者にとって明らかである。本発明の範囲及び精神の範囲内において、このような変形例及び変更についても添付の特許請求の範囲に含まれることを意図している。以下に本発明の実施形態の例を項目として示す。
[項目1]
命令コードによって示されるオペレーションを実行する実行ユニットと、
入力される命令を受信する命令デコーダと、
を備え、
命令デコーダは、第1入力命令を受信し、経路選択信号をフィードバック経路から受信する第1ロジックを含み、
フィードバック経路は、命令デコーダと連結されており、命令デコーダと連結され経路選択信号を生成するシーケンス検出器を含み、
経路選択信号は、第1入力命令の閾値距離内で命令デコーダによって受信された異なる入力命令の検出に対応しており、
第1ロジックは、第1入力命令を、経路選択信号に応答して、第1命令コード又は第2命令コードへとデコードする、装置。
[項目2]
命令デコーダから命令コードを、シーケンス検出器から予測コードを受信し、命令コードと予測コードとが一致する場合には、一致信号を生成する比較器を更に備える項目1に記載の装置。
[項目3]
シーケンス検出器は、一致信号が生成されていない場合に、第1ロジックに第1入力命令を第1命令コードにデコードさせる第1状態の経路選択信号を生成し、第1命令コードは、第1データ長に対して最適化されたコピーオペレーションに対応している項目2に記載の装置。
[項目4]
シーケンス検出器は、一致信号に応答して、第1ロジックに第1入力命令を第2命令コードにデコードさせる第2状態の経路選択信号を生成し、第2命令コードは、第1データ長とは異なる第2データ長について最適化されたコピーオペレーションに対応している項目3に記載の装置。
[項目5]
第2命令コードは、実行ユニットに、有限の長さのコピーオペレーションを実行させる項目4に記載の装置。
[項目6]
第1入力命令からの閾値距離に対応する第1の個数の命令内において、異なる入力命令が命令デコーダによって受信された場合に、シーケンス検出器は、第2状態の経路選択信号を生成する項目4に記載の装置。
[項目7]
閾値距離は、サイクル数及びデコードストール情報によって近似される項目6に記載の装置。
[項目8]
シーケンス検出器は、状態機械を有し、異なる入力命令が、第1の個数の命令内で受信されなかった場合には、状態機械はリセットされる項目6に記載の装置。
[項目9]
反復コピー命令が、反復コピー命令と関連付けられた情報に少なくとも一部基づいて最適化可能であるかを判断する段階と、
可能であると判断された場合に、2のツリーのべき乗のコピーを使用して、第1の量以下のデータを、第1の数以下の個数の塊で、第1コピー元ロケーションから第1コピー先ロケーションへとコピーする条件付きコピーオペレーションの第1シーケンスによって、反復コピー命令の第1部分を実行する段階と、
コピーすべきデータの残りの部分が第1閾値よりも大きい場合には、コピーオペレーションの高速ループを使用して、第2の量のデータを第2コピー元ロケーションから第2コピー先ロケーションへとコピーすることにより、反復コピー命令の第2部分を実行する段階と、
その後にコピーすべきデータが残っている場合には、第3の量以下のデータを、第3の数以下の個数の塊で、第3コピー元ロケーションから第3コピー先ロケーションへとコピーする条件付きコピーオペレーションの第2シーケンスによって、反復コピー命令の第3部分を実行する段階と、
を備える方法。
[項目10]
条件付きコピーオペレーションの第1シーケンスを実行する前に、高速ループ及び条件付きコピーオペレーションの第2シーケンスに対するセットアップ情報を取得する段階を更に備える項目9に記載の方法。
[項目11]
第2の量のデータが、第2閾値よりも大きいか否かを判断し、大きい場合には、キャッシュに格納することなく、キャッシングヒントを使用して第2の量のデータを直接メモリにコピーする段階をさらに備える項目9に記載の方法。
[項目12]
条件付きコピーオペレーションの第1シーケンスの第1番目は、Nバイトのデータ塊をコピーし、条件付きコピーオペレーションの第1シーケンスと関連付けられた第1ポインタ及び第2ポインタをインクリメントし、コピーすべき残りのデータと関連付けられたカウンタを更新する項目9に記載の方法。
[項目13]
2のツリーのべき乗は、プロセッサの最大読み込み長又は最大格納長に対応する、2のべき乗の一番目の長さで始まり、1バイトに対応する2のべき乗の最後の長さで終了する項目9に記載の方法。
[項目14]
反復コピー命令と関連付けられた第1ポインタと第2ポインタとの差分が、第3閾値と第4閾値の間であるかを判断する段階を更に備え、
判断の結果が真である場合には、高速ループの1イタレーションよりも短い幅を有するコピーオペレーションを使用して、第2の量のデータをコピーする項目9に記載の方法。
[項目15]
デコーダを含むフロントエンドを有するプロセッサと、
プロセッサに連結されたダイナミックランダムアクセスメモリ(DRAM)とを備えるシステムであって、
デコーダは第1デコードロジックを含み、
入力コピー命令及び少なくとも1つの別のコピー命令を含むデコーダに、命令のシーケンスが受信されたことが示唆された場合に、第1デコードロジックは、入力コピー命令を受信し、デコーダと連結されたフィードバック経路で選択信号を第2ロジックから受信し、選択信号に応答して、入力コピー命令を第1命令コード又は第2命令コードへとデコードし、
プロセッサは、第1命令コード又は第2命令コードを受信し、受信した命令コードに応答して、第1コピーオペレーション又は第2コピーオペレーションをそれぞれ実行する実行ユニットを更に有する、システム。
[項目16]
第2ロジックは、シーケンス検出器を含み、
少なくとも1つの別のコピー命令に対応する第2入力コピー命令の後に、第1の個数の命令内で入力コピー命令が受信される場合には、デコードロジックに第2命令を生成させ、その他の場合には、デコードロジックに第1命令を生成させる選択信号が、シーケンス検出器によって生成される項目15に記載のシステム。
[項目17]
入力コピー命令が、第1の個数の命令内で受信されない場合には、シーケンス検出器は、第2入力コピー命令を探索する第1状態へとリセットされる項目16に記載のシステム。
[項目18]
シーケンス検出器は、第2入力コピー命令が検出された後に、第1状態から、入力コピー命令を探索する第2状態へと進む項目17に記載のシステム。
[項目19]
デコーダから命令コードを、シーケンス検出器から予測コードを受信し、命令コードと予測コードとが一致する場合には一致信号を生成する比較器を更に備える項目16に記載のシステム。
[項目20]
第1コピーオペレーションは、第1データ長に対して最適化され、第2コピーオペレーションは、第1データ長とは異なる第2データ長に対して最適化されている項目15に記載のシステム。

Claims (14)

  1. 命令コードによって示されるオペレーションを実行する実行ユニットと、
    入力される命令を受信する命令デコーダと
    前記命令デコーダと連結され経路選択信号を生成するシーケンス検出器と
    を備え、
    前記命令デコーダは、令を受信し、前記路選択信号を前記シーケンス検出器から受信する第1ロジックを含み、
    前記路選択信号は、第2の種類のコピー命令である所定の入力命令が前記第1ロジックされてから閾値距離の範囲内であるか否かを示すものであり
    前記第1ロジックは、第1の種類のコピー命令である第1入力命令を受信した際に、前記経路選択信号に基づいて、前記第1入力命令を、1命令コードまたは第2命令コードへとデコードするものである、装置。
  2. 前記命令デコーダから命令コードを、前記シーケンス検出器から予測コードを受信し、前記命令コードと前記予測コードとが一致する場合には、一致信号を生成する比較器であって、前記予測コードは、前記第2の種類のコピー命令に対応する命令コードである、前記比較器を更に備える請求項1に記載の装置。
  3. 前記シーケンス検出器は、前記一致信号が生成されていない場合か、または、前記一致信号が生成されてから前記閾値距離を超えた場合に、前記第1ロジックに前記第1入力命令を前記第1命令コードにデコードさせる第1状態の前記経路選択信号を生成するものであり、
    前記第1命令コードは、第1データ長に対して最適化されたコピーオペレーションに対応している請求項2に記載の装置。
  4. 前記シーケンス検出器は、前記一致信号が生成されてから前記閾値距離の範囲内であることに応答して、前記第1ロジックに前記第1入力命令を前記第2命令コードにデコードさせる第2状態の前記経路選択信号を生成するものであり、
    前記第2命令コードは、前記第1データ長とは異なる第2データ長について最適化されたコピーオペレーションに対応している請求項3に記載の装置。
  5. 前記第2命令コードは、前記実行ユニットに、有限の長さのコピーオペレーションを実行させるものである、請求項4に記載の装置。
  6. 前記シーケンス検出器は、前記所定の入力命令が前記第1ロジックによって受信されてから前記閾値距離に対応する第1の個数の命令内であるときに、前記第2状態の前記経路選択信号を生成するものである、請求項4に記載の装置。
  7. 前記閾値距離と比較されるべき、先行する前記所定の入力命令と後続の前記第1入力命令の距離は、サイクル数及びデコードストール情報によって求められるものである、請求項6に記載の装置。
  8. 前記シーケンス検出器は、状態機械を有し、
    前記所定の入力命令が前記第1ロジックによって受信されてから前記第1の個数の命令内において、前記第1入力命令が前記第1ロジックによって受信されなかった場合には、前記状態機械はリセットされるものである、請求項6に記載の装置。
  9. デコーダを含むフロントエンドを有するプロセッサと、
    前記プロセッサに連結されたダイナミックランダムアクセスメモリ(DRAM)とを備えるシステムであって、
    前記プロセッサは前記デコーダと連結され選択信号を生成する第2ロジックを含み、
    前記デコーダは、命令を受信し、前記選択信号を前記第2ロジックから受信する第1デコードロジックを含み、
    前記選択信号は、第2種類のコピー命令である所定のコピー命令が前記第1デコードロジックに受信されたことに応じて、前記所定のコピー命令に後続して受信される命令が、第1の種類のコピー命令である入力コピー命令ならば、前記所定のコピー命令と前記入力コピー命令を含む命令のシーケンスが前記第1デコードロジックに受信されたことになることを示唆するものであり、
    前記第1デコードロジックは、予め定められた前記第1の種類のコピー命令である前記入力コピー命令を受信した際に、前記選択信号に基づいて、前記入力コピー命令を、第1命令コードまたは第2命令コードへとデコードするものであり
    前記プロセッサは、前記第1命令コードまたは前記第2命令コードを受信し、受信した命令コードに応答して、第1コピーオペレーションまたは第2コピーオペレーションをそれぞれ実行する実行ユニットを更に有する、システム。
  10. 前記第2ロジックは、シーケンス検出器を含み、
    前記シーケンス検出器が前記選択信号を生成するものであり、
    前記選択信号は、前記所定のコピー命令に対応する第2入力コピー命令の後に、第1の個数の命令内で前記入力コピー命令が受信される場合には、前記第1デコードロジックに前記第2命令コードを生成させ、その他の場合には、前記第1デコードロジックに前記第1命令コードを生成させるものである、請求項に記載のシステム。
  11. 前記入力コピー命令が、前記第1の個数の命令内で受信されない場合には、前記シーケンス検出器は、前記第2入力コピー命令を探索する第1状態へとリセットされる、請求項10に記載のシステム。
  12. 前記シーケンス検出器は、前記第2入力コピー命令が検出された後に、前記第1状態から、前記入力コピー命令を探索する第2状態へと進む、請求項11に記載のシステム。
  13. 前記デコーダから命令コードを、前記シーケンス検出器から予測コードを受信し、前記命令コードと前記予測コードとが一致する場合には一致信号を生成する比較器であって、前記予測コードは、前記第2の種類のコピー命令に対応する命令コードである、前記比較器を更に備える、請求項10に記載のシステム。
  14. 前記第1コピーオペレーションは、第1データ長に対して最適化され、前記第2コピーオペレーションは、前記第1データ長とは異なる第2データ長に対して最適化されている請求項に記載のシステム。
JP2011534805A 2008-11-05 2009-10-30 シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能 Expired - Fee Related JP5356531B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/290,962 2008-11-05
US12/290,962 US8543796B2 (en) 2008-11-05 2008-11-05 Optimizing performance of instructions based on sequence detection or information associated with the instructions
PCT/US2009/062736 WO2010053837A2 (en) 2008-11-05 2009-10-30 Optimizing performance of instructions based on sequence detection or information associated with the instructions

Publications (2)

Publication Number Publication Date
JP2012507805A JP2012507805A (ja) 2012-03-29
JP5356531B2 true JP5356531B2 (ja) 2013-12-04

Family

ID=42132911

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011534805A Expired - Fee Related JP5356531B2 (ja) 2008-11-05 2009-10-30 シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能

Country Status (7)

Country Link
US (2) US8543796B2 (ja)
JP (1) JP5356531B2 (ja)
KR (1) KR101267911B1 (ja)
CN (1) CN101788903B (ja)
BR (1) BRPI0920790A2 (ja)
TW (1) TWI434213B (ja)
WO (1) WO2010053837A2 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009689B2 (en) * 2010-11-09 2015-04-14 Intel Corporation Speculative compilation to generate advice messages
JP5916355B2 (ja) * 2011-11-21 2016-05-11 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラムの命令を実行する装置および命令をキャッシュするシステム
CN109086073B (zh) * 2011-12-22 2023-08-22 英特尔公司 浮点舍入处理器、方法、系统和指令
US9971603B2 (en) 2011-12-29 2018-05-15 Intel Corporation Causing an interrupt based on event count
US9575766B2 (en) * 2011-12-29 2017-02-21 Intel Corporation Causing an interrupt based on event count
US9330014B2 (en) 2012-12-31 2016-05-03 Sunedison Semiconductor Limited (Uen201334164H) Method and system for full resolution real-time data logging
US9519324B2 (en) * 2014-03-26 2016-12-13 Intel Corporation Local power gate (LPG) interfaces for power-aware operations
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US11169925B2 (en) * 2015-08-25 2021-11-09 Samsung Electronics Co., Ltd. Capturing temporal store streams into CPU caches by dynamically varying store streaming thresholds
US10261790B2 (en) * 2016-03-31 2019-04-16 Intel Corporation Memory copy instructions, processors, methods, and systems
GB2552153B (en) * 2016-07-08 2019-07-24 Advanced Risc Mach Ltd An apparatus and method for performing a rearrangement operation
US9984004B1 (en) * 2016-07-19 2018-05-29 Nutanix, Inc. Dynamic cache balancing
US10394559B2 (en) * 2016-12-13 2019-08-27 International Business Machines Corporation Branch predictor search qualification using stream length prediction
US10379827B2 (en) * 2016-12-29 2019-08-13 Intel Corporation Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
CN109032665B (zh) * 2017-06-09 2021-01-26 龙芯中科技术股份有限公司 微处理器中指令输出处理方法及装置
US11029953B2 (en) * 2019-06-26 2021-06-08 Intel Corporation Branch prediction unit in service of short microcode flows
US11263014B2 (en) * 2019-08-05 2022-03-01 Arm Limited Sharing instruction encoding space between a coprocessor and auxiliary execution circuitry
GB2593513B (en) 2020-03-25 2022-09-21 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory
GB2593514B (en) * 2020-03-25 2022-04-27 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57153341A (en) * 1981-03-19 1982-09-21 Mitsubishi Electric Corp Microprogram processing system
JP2513884B2 (ja) * 1989-01-17 1996-07-03 富士通株式会社 マイクロプロセッサ
US5185694A (en) * 1989-06-26 1993-02-09 Motorola, Inc. Data processing system utilizes block move instruction for burst transferring blocks of data entries where width of data blocks varies
JP2677719B2 (ja) * 1991-05-08 1997-11-17 富士通株式会社 情報処理装置
JPH0721034A (ja) * 1993-06-28 1995-01-24 Fujitsu Ltd 文字列複写処理方法
US5781750A (en) * 1994-01-11 1998-07-14 Exponential Technology, Inc. Dual-instruction-set architecture CPU with hidden software emulation mode
US5542059A (en) * 1994-01-11 1996-07-30 Exponential Technology, Inc. Dual instruction set processor having a pipeline with a pipestage functional unit that is relocatable in time and sequence order
US5481684A (en) * 1994-01-11 1996-01-02 Exponential Technology, Inc. Emulating operating system calls in an alternate instruction set using a modified code segment descriptor
US5761472A (en) * 1994-03-09 1998-06-02 Sun Microsystems, Inc. Interleaving block operations employing an instruction set capable of delaying block-store instructions related to outstanding block-load instructions in a computer system
JPH1091430A (ja) 1996-09-13 1998-04-10 Matsushita Electric Ind Co Ltd 命令解読装置
US5966734A (en) * 1996-10-18 1999-10-12 Samsung Electronics Co., Ltd. Resizable and relocatable memory scratch pad as a cache slice
KR19980079634A (ko) 1997-03-13 1998-11-25 포맨 제프리 엘 비 순서적인 프로세싱 시스템에서의 효율적인 인스트럭션 송출방법 및 장치
US5923872A (en) * 1997-11-26 1999-07-13 Digital Equipment Corporation Apparatus for sampling instruction operand or result values in a processor pipeline
US6173393B1 (en) * 1998-03-31 2001-01-09 Intel Corporation System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
US6269440B1 (en) * 1999-02-05 2001-07-31 Agere Systems Guardian Corp. Accelerating vector processing using plural sequencers to process multiple loop iterations simultaneously
EP1050804A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Execution of instruction loops
US6609193B1 (en) 1999-12-30 2003-08-19 Intel Corporation Method and apparatus for multi-thread pipelined instruction decoder
US6810502B2 (en) * 2000-01-28 2004-10-26 Conexant Systems, Inc. Iteractive decoder employing multiple external code error checks to lower the error floor
US7506328B2 (en) 2002-02-11 2009-03-17 Xerox Corporation Method and system for optimizing performance of an apparatus
US7346716B2 (en) 2003-11-25 2008-03-18 Intel Corporation Tracking progress of data streamer
US7577947B2 (en) 2003-12-19 2009-08-18 Intel Corporation Methods and apparatus to dynamically insert prefetch instructions based on garbage collector analysis and layout of objects
US7496908B2 (en) 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
TWI266238B (en) 2004-04-12 2006-11-11 Univ Nat Chiao Tung Hierarchical instruction coding suitable for very long instruction word and decoder thereof
US7698354B2 (en) * 2004-04-16 2010-04-13 Analog Devices, Inc. Programmable engine core for executing digital signal processing functions
US20070150705A1 (en) 2005-12-28 2007-06-28 Intel Corporation Efficient counting for iterative instructions
US20080243840A1 (en) * 2007-03-29 2008-10-02 Microsoft Corporation Comparing data sets through identification of matching blocks
US20080244224A1 (en) * 2007-03-29 2008-10-02 Peter Sassone Scheduling a direct dependent instruction
US8082233B2 (en) * 2007-03-29 2011-12-20 Microsoft Corporation Comparing data sets through identification of matching blocks
CN100549938C (zh) * 2007-11-28 2009-10-14 北京中星微电子有限公司 Fifo控制电路及控制方法

Also Published As

Publication number Publication date
US20130346728A1 (en) 2013-12-26
CN101788903B (zh) 2014-10-29
KR101267911B1 (ko) 2013-05-31
KR20110050722A (ko) 2011-05-16
US20100115240A1 (en) 2010-05-06
WO2010053837A2 (en) 2010-05-14
CN101788903A (zh) 2010-07-28
JP2012507805A (ja) 2012-03-29
WO2010053837A3 (en) 2010-07-29
TW201030606A (en) 2010-08-16
US8935514B2 (en) 2015-01-13
TWI434213B (zh) 2014-04-11
US8543796B2 (en) 2013-09-24
BRPI0920790A2 (pt) 2020-08-18

Similar Documents

Publication Publication Date Title
JP5356531B2 (ja) シーケンス検出又は命令に関連付けられた情報に基づいた命令の最適化性能
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
KR101511837B1 (ko) 벡터 분할 루프들의 성능 향상
US6697932B1 (en) System and method for early resolution of low confidence branches and safe data cache accesses
KR101225075B1 (ko) 실행되는 명령의 결과를 선택적으로 커밋하는 시스템 및 방법
KR101417597B1 (ko) 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제
JP6331865B2 (ja) プログラム最適化方法,プログラム最適化プログラム及びプログラム最適化装置
JP2009540412A (ja) ローカル及びグローバル分岐予測情報の格納
US8499293B1 (en) Symbolic renaming optimization of a trace
US10338923B2 (en) Branch prediction path wrong guess instruction
US8250344B2 (en) Methods and apparatus for dynamic prediction by software
CN112241288A (zh) 在硬件中检测条件分支的动态控制流重汇聚点
US10185561B2 (en) Processor with efficient memory access
JP7046087B2 (ja) キャッシュ・ミス・スレッド・バランシング
CN111324948B (zh) 模拟方法及模拟系统
JP4137735B2 (ja) 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム
US20160011889A1 (en) Simulation method and storage medium
US20060015706A1 (en) TLB correlated branch predictor and method for use thereof
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report
US20240111541A1 (en) Reducing Overhead In Processor Array Searching
US20060259752A1 (en) Stateless Branch Prediction Scheme for VLIW Processor
CN118012509A (zh) 清空流水线的方法、处理器、芯片及电子设备
US20150127318A1 (en) Apparatus and method for simulating an operation of an out-of-order processor
JP2008501166A (ja) Tlb相関型分岐予測器及びその使用方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130402

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130618

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: 20130702

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130731

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130806

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130828

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees