(57)【特許請求の範囲】
【請求項１】
命令コードによって示されるオペレーションを実行する実行ユニットと、
入力される命令を受信する命令デコーダと、
前記命令デコーダと連結され経路選択信号を生成するシーケンス検出器と
を備え、
前記命令デコーダは、命令を受信し、前記経路選択信号を前記シーケンス検出器から受信する第１ロジックを含み、
前記経路選択信号は、第２の種類のコピー命令である所定の入力命令が前記第１ロジックに受信されてから閾値距離の範囲内であるか否かを示すものであり、
前記第１ロジックは、第１の種類のコピー命令である第１入力命令を受信した際に、前記経路選択信号に基づいて、前記第１入力命令を、第１命令コードまたは第２命令コードへとデコードするものである、装置。
【請求項２】
前記命令デコーダから命令コードを、前記シーケンス検出器から予測コードを受信し、前記命令コードと前記予測コードとが一致する場合には、一致信号を生成する比較器であって、前記予測コードは、前記第２の種類のコピー命令に対応する命令コードである、前記比較器を更に備える請求項１に記載の装置。
【請求項３】
前記シーケンス検出器は、前記一致信号が生成されていない場合か、または、前記一致信号が生成されてから前記閾値距離を超えた場合に、前記第１ロジックに前記第１入力命令を前記第１命令コードにデコードさせる第１状態の前記経路選択信号を生成するものであり、
前記第１命令コードは、第１データ長に対して最適化されたコピーオペレーションに対応している、請求項２に記載の装置。
【請求項４】
前記シーケンス検出器は、前記一致信号が生成されてから前記閾値距離の範囲内であることに応答して、前記第１ロジックに前記第１入力命令を前記第２命令コードにデコードさせる第２状態の前記経路選択信号を生成するものであり、
前記第２命令コードは、前記第１データ長とは異なる第２データ長について最適化されたコピーオペレーションに対応している、請求項３に記載の装置。
【請求項５】
前記第２命令コードは、前記実行ユニットに、有限の長さのコピーオペレーションを実行させるものである、請求項４に記載の装置。
【請求項６】
前記シーケンス検出器は、前記所定の入力命令が前記第１ロジックによって受信されてから前記閾値距離に対応する第１の個数の命令内であるときに、前記第２状態の前記経路選択信号を生成するものである、請求項４に記載の装置。
【請求項７】
前記閾値距離と比較されるべき、先行する前記所定の入力命令と後続の前記第１入力命令の距離は、サイクル数及びデコードストール情報によって求められるものである、請求項６に記載の装置。
【請求項８】
前記シーケンス検出器は、状態機械を有し、
前記所定の入力命令が前記第１ロジックによって受信されてから前記第１の個数の命令内において、前記第１入力命令が前記第１ロジックによって受信されなかった場合には、前記状態機械はリセットされるものである、請求項６に記載の装置。
【請求項９】
デコーダを含むフロントエンドを有するプロセッサと、
前記プロセッサに連結されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備えるシステムであって、
前記プロセッサは前記デコーダと連結され選択信号を生成する第２ロジックを含み、
前記デコーダは、命令を受信し、前記選択信号を前記第２ロジックから受信する第１デコードロジックを含み、
前記選択信号は、第２の種類のコピー命令である所定のコピー命令が前記第１デコードロジックに受信されたことに応じて、前記所定のコピー命令に後続して受信される命令が、第１の種類のコピー命令である入力コピー命令ならば、前記所定のコピー命令と前記入力コピー命令を含む命令のシーケンスが前記第１デコードロジックに受信されたことになることを示唆するものであり、
前記第１デコードロジックは、予め定められた前記第１の種類のコピー命令である前記入力コピー命令を受信した際に、前記選択信号に基づいて、前記入力コピー命令を、第１命令コードまたは第２命令コードへとデコードするものであり、
前記プロセッサは、前記第１命令コードまたは前記第２命令コードを受信し、受信した命令コードに応答して、第１コピーオペレーションまたは第２コピーオペレーションをそれぞれ実行する実行ユニットを更に有する、システム。
【請求項１０】
前記第２ロジックは、シーケンス検出器を含み、
前記シーケンス検出器が前記選択信号を生成するものであり、
前記選択信号は、前記所定のコピー命令に対応する第２入力コピー命令の後に、第１の個数の命令内で前記入力コピー命令が受信される場合には、前記第１デコードロジックに前記第２命令コードを生成させ、その他の場合には、前記第１デコードロジックに前記第１命令コードを生成させるものである、請求項９に記載のシステム。
【請求項１１】
前記入力コピー命令が、前記第１の個数の命令内で受信されない場合には、前記シーケンス検出器は、前記第２入力コピー命令を探索する第１状態へとリセットされる、請求項１０に記載のシステム。
【請求項１２】
前記シーケンス検出器は、前記第２入力コピー命令が検出された後に、前記第１状態から、前記入力コピー命令を探索する第２状態へと進む、請求項１１に記載のシステム。
【請求項１３】
前記デコーダから命令コードを、前記シーケンス検出器から予測コードを受信し、前記命令コードと前記予測コードとが一致する場合には一致信号を生成する比較器であって、前記予測コードは、前記第２の種類のコピー命令に対応する命令コードである、前記比較器を更に備える、請求項１０に記載のシステム。
【請求項１４】
前記第１コピーオペレーションは、第１データ長に対して最適化され、前記第２コピーオペレーションは、前記第１データ長とは異なる第２データ長に対して最適化されている請求項９に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセッサを基本とする大半のシステムにおいて、プロセッサは、コピーや記憶といったオペレーションの効率的実行に合わせた命令を提供している。メモリへのコピーオペレーションに最適化されたソフトウェアは、特定のプロセッサ実装向けに調整されている。多くの場合、データのコピーを実行する最善の方法は変化するため、コンパイラ、オペレーティングシステム（ＯＳ）カーネル及びアプリケーションライターは、様々なシナリオ、様々なマイクロアーキテクチャ等に合わせてそれぞれ調整された数多くのコードを扱わなければならず、コードは、いわば移動標的のようなものとなっている。
【０００２】
命令のパラメータのうちの１つで規定される一定量のデータ要素をコピーするには、反復コピー命令を使用することができる。反復コピー命令は、例えば、バイト、ワード、ダブルワード、４倍長語等の様々なネイティブデータ要素長を有してもよい。ネイティブ長が長くなればなるほど、特定量のデータを動かすのに、命令がより効率的に実行され、これは、より大きな"ロード（読み込み）"及び"ストア（格納）"オペレーションを使用することができるからである。例えば、インテル（登録商標）アーキテクチャ（ＩＡ３２）構造の、リピート（繰り返し）・ムーブ（移動）・バイト（ＲＥＰ  ＭＯＶＳＢ）命令は、コピーの長さを示す情報として、所定のレジスタ内の値を使用する。また、命令は、入力パラメータとして、コピー元ポインタ及びコピー先ポインタを受信する。このような命令は、データの１バイトを、一度に一つずつ移動するよう定義されている。ある条件下では、オペレーションが、長いオペレーション（例えば、一回に１６バイト）を使用して実行され、このような場合には、命令の実行が、"高速モード"に切り替わると言える。ＩＡ３２のプログラマのレファレンスマニュアルには、現在のプロセッサにおいて高速モードを実行してもよい条件が規定されている。
【０００３】
多くの場合、コンパイル時には、コピーの長さ及び設定されたオペレーションが未知であるので、反復コピーオペレーションの従来の実装形態を使用してコピーオペレーションの効力を改善するための解決方法の１つは、まず、ストリングの大部分を移動させる第１反復コピー命令を使用し、次に、データの残りを移動させる第２反復コピー命令を使用する（例えば、第１コピーオペレーションでは、一度にダブルワードを移動させ、第２コピーオペレーションでは、最後の０〜３バイトを移動させる）ことである。このようなシーケンスには、２つの欠点がある。（ａ）第２命令を実行することにより、データの残りの部分が０である場合であっても、さらなるサイクルを消費することになってしまう。（ｂ）特定の長さを有する第１反復コピー命令、及びそれに続く第２の命令の限定されたシーケンスに対して最適化が調整されており、その他の組み合わせの場合には、大幅な性能損失が生じてしまう。
【０００４】
また、パイプライン機械では、最も好適な動作を決定するのに必要となるデータの一部が未知である、又はまだコミットされていないにも関わらず、命令の最も好適な動作を命令をデコードする時点で決定する必要がある場合が生じる。このような場合の一例として、フラグがまだ計算されていないにも関わらず、フラグによって分岐を選択する場合が挙げられる。このような問題を解決するための最も一般的なスキームは、分岐予測器を使用することである。しかしながら、予測器は、トレーニング（履歴を構築する）の時間を必要とし、コストも高く（多くのステートを保存する必要があるため）、また、断片的なパターンの下での性能は不確かである。
【図面の簡単な説明】
【０００５】
【図１】本発明の一実施形態に係る方法のフローチャートである。
【図２】本発明の一実施形態に係るシーケンス検出器のブロック図である。
【図３】本発明の一実施形態に係るシーケンスデコーダ状態機械の一例の状態図である。
【図４】本発明の一実施形態に係るプロセッサのブロック図である。
【図５】本発明の一実施形態に係るシステムのブロック図である。
【発明を実施するための形態】
【０００６】
様々な実施形態において、コンパイラが生成したコピーオペレーションの特性が、反復コピーオペレーションをより効率的に行うのに利用される。本明細書で使用されている"コピー"オペレーションという言葉は、データをメモリ内、メモリへ又はメモリの外へ移動させるメモリコピーオペレーション、メモリムーブオペレーション及びメモリセットオペレーションを総称する言葉として使用されている。異なる環境では、このような一般的なオペレーションに対して、異なる名前が付けられているかもしれない。これらのコピーオペレーションの"高速モード"は、多くのケースで実行可能である。実行不可能とされた場合（例えば、エイリアシング・リスクテストが不合格であった場合）であっても、多くの場合（ランダム分布であると仮定すると）、１度に１つのデータ要素がコピーされる、ネイティブモードよりも速いモードを実行可能である。最適化されたコピーシーケンスは、最初から、幾つかの異なる高速モード（すなわち、ネイティブモードよりも速いモード）のうちの１つを使用してコピーの実行を試みるが、ネイティブ長のオペレーションを使用してコピーを実行しなければならないのは僅かなケースにとどまる。プロセッサの命令セットは、プロセッサにメモリコピーオペレーション又はメモリセット（格納）オペレーションを実行させるよう指示する１以上の命令を含んでもよく、これらのオペレーションが効率的に実装されると、そのプロセッサハードウェアは、様々なマイクロアーキテクチャ世代及び様々なアーキテクチャ世代に渡る性能境界を保つことができる。
【０００７】
以下に記載されるように、一実施形態は、複数の主要な段階（以下に詳述する）を含んでもよく、（１）"高速コピー"を開始するのに必要な規則のチェックを実行し、次の段階のためのオペレーションを設定する部分、（２）条件付きコピーが実行されたヘッド部分（パイプレインのレイテンシをカバーし、条件付きオペレーションを使用することにより伝播によって生じるバブルを防ぐ）、（３）目的のケースを扱うための特色を加えた高速固定サイズ反復、及び（４）テール部分を含む。チェック及びヘッド部分（ステップ１及びステップ２）は、全ストリング長（すなわち、コピー長又はブロック長）について実行される。ヘッド部分は、全てのチェックが可であった場合に実行され、チェックの結果が不合格であった場合は、ハードウェアは、１度にネイティブサイズのコピーオペレーションを行うネイティブループに入る。高速ループ及びテール部分は、ヘッド部分で解析されるコピーの長さに応じて、必要に応じて実行される。判断を早い段階で行うことにより、実行経路が最小のパイプラインバブルを使用して選択され、分岐ミスが予測されることはない。長さの又はｓｒｃ‐ｄｓｔの距離ハンドリングのうちの幾つかに、追加の制限を適用することもでき、"高速ループ"の幾つかの実装例においては、オペレーションの一部を再実行する必要がある厳密でない例外検出が、ヘッド部で行われるチェックに加えて存在してもよく、最大６４Ｂまで戻ることが許され、コピー先のポイントが、コピー元ポインタの後ろであって６３Ｂ未満であるか（すなわち、（ｄｓｔ  ｍｏｄ  ４Ｋ）−（ｓｒｃ  ｍｏｄ  ４Ｋ）＜６３Ｂ）をチェックする必要がある。このような追加のチェックに失敗した場合、正確な実行を行うために、最適ではないが別のコードルーチンへと分岐することはできる。また、幾つかの実施形態では、選択肢として、コピーオペレーション長が非常に長く、キャッシングヒントを利用して性能を改善できる特別なケースを扱ってもよい。本明細書では特定のサイズのコピーオペレーションが記載されるが、本発明の範囲はこれらに限定されず、実施形態は、その他のサイズ（例えば、異なるバイト数及びキャッシュライン幅）に合わせて最適化されたコピーオペレーションを扱うことができる。
【０００８】
図１は、本発明の一実施形態に係る方法のフローチャートである。方法１００は、汎用ハードウェアユニット又は専用ハードウェアユニットのようなプロセッサの様々なロケーションで実行することができる。方法１００は、最適化された態様で、反復コピーオペレーションを実行するのに使用されてもよい。図１に示すように、方法１００では、最初に、チェックが実行され、コピーオペレーションの準備が行われる（ブロック１１０）。具体的には、実行すべきコピーオペレーションの種類を判断するために様々なチェックを行い、また、コピーオペレーションで使用される様々なカウント値を、コピーオペレーションに関連付けられたカウンタに読み込ませることにより、カウンタを初期化してもよい。まず初めに、命令のネイティブ長よりも長い読み込み／格納オペレーションを使用してコピーオペレーションが行われる高速フローが実行可能かを判断するための幾つかのチェックが行われてもよい。幾つかのチェックのうちの１つでもチェックに失敗した場合には、ネイティブモードループが実行され、コピーオペレーションは、例えば、バイト単位で動くオペレーション又はダブルワード単位の命令といったように、命令のネイティブ長を使用して行われる（ブロック１２０）。必要な情報がすでに利用可能となっている及び既知である実行段階において取得されたデータを使用して、チェックを行う。チェックのいずれかが失敗となった場合には、関連付けられたパフォーマンスヒットが生じると共に、予測ミスコストが生じるが、通常の使用では希なケースであり、ネイティブループのコストを考えれば、相対的なロスも低い。
【０００９】
一実施形態では、チェックされる条件として、コピー先（ｄｓｔ）ポインタのストリングとコピー元（ｓｒｃ）ポインタのストリングとの間の距離をチェックすることを含み、先に読み出されるｓｒｃがオペレーションの振る舞いを変更することがないようにする。距離の測定は、０バイト（Ｂ）＜（（ｄｓｔ  ｍｏｄ  ４Ｋ）−（ｓｒｃ  ｍｏｄ  ４Ｋ））＜１６Ｂであるかの判断で行われ、この範囲であれば、ネイティブモードへと移ってもよい。ページ間のメモリエイリアシングが無関係である場合の実施形態では、"ｍｏｄ  ４Ｋ"なしで、オペレーションを行ってもよい。方向（ＤＦ）フラグのチェックも行う。ＤＦフラグ＝＝１である場合には、ネイティブモードへと移ってもよい。アドレス空間（ｓｒｃ及びｄｓｔの両方について）のラップアラウンドに対するチェックを行ってもよく、チェック結果が真である場合には、ネイティブモードへと移る。その他の条件を追加、又は、高速モードへと入る条件の一部を取り除いて、別の実装形態を使用してもよい。
【００１０】
ブロック１１０では、例えば、"Ｆａｓｔ  Ｌｏｏｐ"のような高速ループの準備が行われ、テール部分も実行してもよい。一実施形態において、この段階は、高速ＣＬループのためのカウンタを計算すること（例えば、長さがｒｃｘレジスタでバイト単位で規定され、各ループは６４バイトで動作し、反復の数は、ｒｃｘ／６４で計算される）、及びその値を、ゼロオーバードカウンタレジスタに読み込むこと（"ヘッド"部分が、以下に説明するように、６４Ｂまでのデータをコピーすると仮定し、高速ループ１１０へとジャンプする時にカウンタが１でデクリメントされる）を含む。"ヘッド"部分が６４Ｂよりも大きいデータ（例えば１２８Ｂ）を扱う場合には、ｒｃｘ／６４の計算値から、定数を差し引くことが必要な場合もある。そして、テール条件が計算され、ゼロオーバーヘッドジャンプ制御レジスタに置かれる。
【００１１】
チェックのいずれかが失敗となった場合には、制御がブロック１２０に移り、コピーはネイティブモードで行われてもよい。様々な実施形態において、このネイティブモードは、ネイティブ長モードに従ってコピーオペレーションを実行されるのに使用することができる。ここで、方法１００が終了してもよい。このように、コピーオペレーションを束ねるのに必要な条件を満たさない場合には、ゼロオーバーヘッドループを使用した各コピー反復（イタレーション）に、ネイティブ長が使用される（例えば、繰り返し移動バイト命令（ＲＥＰ  ＭＯＶＳＢ）の場合、一回のイタレーションにつき１バイト）。
【００１２】
チェックが完了し、高速コピーオペレーションを実行することができると判断された（ブロック１１０のチェック及び計算に基づいて）場合には、制御は、ブロック１１０からブロック１３０へと移る。ブロック１３０において、コピーオペレーションのヘッド部分を実行してもよい。具体的には、例えば６４バイトである、所定の量のデータ以下のあらゆる長さを扱う条件付き読み込み／格納を実行してもよい。本明細書に記載するように、一実施形態において、最大６４バイトであるデータのコピーを行うのに、コピーオペレーションを８回まで実行してもよい。具体的には、ブロック１１０のチェックを通過した場合には、この時点で、結果の正確性に影響を及ぼすことなく、ネイティブコピー長よりも長いコピーオペレーションを実行可能であるとプロセッサが知る。
【００１３】
ブロック１３０において、コピーオペレーションは、"条件付き"オペレーヨンを使用しており、Ｎバイト長の条件付きコピーのそれぞれは、残りの長さが少なくともＮバイト存在している場合に実行される。条件は、実行時にチェックされるので、実行からデコード段階へと戻される長さ情報の伝播に依存しない。コピーに加えて、反復の各回では、次のオペレーションで使用されるべきｓｒｃポインタ及びｄｓｔポインタをＮだけインクリメントし、残りの長さをＮだけデクリメントする。
【００１４】
コピーオペレーションの回数は、準備が"チェック"段階（ブロック１１０）で完了可能となり、パイプラインで伝播するように設定され、順番が来た時及びデコード段階で使用される時にペナルティを受けないようにする。"ロードゼロオーバーヘッドカウンタ"又は"ゼロオーバーヘッド分岐条件"がデコード段階から最終的な実行段階まで進むのに掛かる時間は、条件付きオペレーションがデコードされ実行される時間枠であり、デコードから実行までのパイプの深さに等しい。マシーンが扱うことのできる最大の読み込み／格納長さ（バイト単位）が、"Ｎ＝２＾ｎ"であるとすると、２のべき乗の長さのシーケンス（２のツリーのべき乗と称すことができる）、すなわち、１、１、２、４、・・・、Ｎ／２、Ｎ、Ｎ、Ｎを使用して、コピーシーケンスを実行することができる。例えば、Ｎ＝１６の場合であって、パイプライン遅延をカバーするのにプロセッサが８回のオペレーションを必要であると仮定すると、シーケンスは、１、１、２、４、８、１６、１６、１６となり、最大のコピー量が６４Ｂとなる。０から６４Ｂまでの範囲の各数字には、その量と同じデータを移動させることができるオペレーションのサブセットが存在する（例えば、３バイトを移動させるには、１及び２を実行する、また、１０バイトの場合には、２及び８を実行する）。別の例として、Ｎ＝３２であり、パイプライン遅延をカバーするのに８回のオペレーションを必要であると仮定すると、シーケンスは、１、１、２、４、８、１６、３２、３２であり、合計９６Ｂとなる。幾つの実施形態では、条件付き部分が扱うことができる最大のデータ量が、Ｆａｓｔ  Ｌｏｏｐのサイズの整数倍であると効率的である（例えば、６４Ｂ×１＝６４Ｂ、６４Ｂ×２＝１２８Ｂ）。
【００１５】
一実施形態において、オペレーションのシーケンスは、上記の記載とは反対の順番で実行することにより（例えば、１６、１６、１６、８、４、２、１、１）、ブロック１３０のヘッド部分で、０〜６４Ｂの範囲のあらゆるバイト数のデータを正確にコピーするのに必要なオペレーションのサブセットを簡単に生成することができる。これは、残りの部分の長さを調べる条件を設定し、Ｒｅｍａｉｎｄｅｒ＿Ｌｅｎｇｔｈ（残りの長さ）−Ｎ＞０である場合には、オペレーションが完了し、そうでない場合には、スキップされる。Ｒｅｍａｉｎｄｅｒ＿Ｌｅｎｇｔｈは、各コピーオペレーションの後に、そのオペレーション長を使用して更新される。コピーオペレーションの都度、ｓｒｃポインタ及びｄｓｔポインタを更新する替わりに、元のｓｒｃポインタ及び元のｄｓｔポインタのオフセットのみを更新することも可能であり、ｓｒｃポインタ及びｄｓｔポインタは、ブロック１３０の最後で（又は、ブロック中の別のスナップショットポイントで）新しい値へと更新される。このようにすることにより、各条件付き段階で、１回の"加算"オペレーションを節約することができる。
【００１６】
ヘッド部分１３０の最後で、カウンタ、選択されたループの種類及びブロック１１０で用意された条件を使用して、複数の態様の判定が行われる。具体的には、ゼロオーバーヘッドカウンタ値が、１以上である場合には、カウンタは１デクリメントされて、ブロック１４０のＦａｓｔ  Ｌｏｏｐが実行される。１未満である場合であて、テール条件が真である場合（すなわち、残りのバイト数が、６４より小さくゼロより大きい場合）には、テール部分がブロック１３５で実行される。それ以外の場合であって、追加のデータがコピーされない場合には、方法１００は終了する。"Ｆａｓｔ  Ｌｏｏｐ"を呼び出す必要があるかを判断するのに、ゼロオーバーヘッドカウンタ値を使用する。反復（イタレーション）回数＋１の数がカウンタに読み込まれており、カウンタ値＞１の場合には、デクリメントされ、"Ｆａｓｔ  Ｌｏｏｐ"のヘッド部にジャンプする。カウンタ値が１以下であると判断された場合には、ループを呼び出す必要はない。
【００１７】
図１に示すように、残りのカウント値が６３バイトよりも大きい場合には、制御はブロック１４０へと移され、例えば、６４バイト及び／又はキャッシュラインサイズのデータを１イタレーション毎に移動させる高速固定サイズ反復を実行してもよい。これは、所定の長さのコピーオペレーションを、予め読み込まれたゼロオーバーヘッドループカウンタで扱う高速ループである。幾つかの実施形態では、ブロック１４０のコピーオペレーションを実行する前に、いつヒットが予測ミスペナルティを受けるか（しかしながら、"高速実行"は可能）のチェックを行う。まず、更なるポインタの距離のチェックが実行されるが、これは、Ｆａｓｔ  Ｌｏｏｐの制限が、ヘッド部分における条件付きコピーの制限よりも厳しい場合に必要となる。例えば、進行を追跡しないＦａｓｔ  Ｌｏｏｐは、一番初めから再実行する必要がある場合があり、前に行われている全てのチェックに加えて、（（ｓｒｃ  ｍｏｄ  ４Ｋ）−（ｄｓｔ  ｍｏｄ  ４Ｋ））＞６３Ｂをチェックする必要がある。上記のチェックに失敗した場合には、制御はブロック１６０に移り、第２高速ループが実行される（以下に詳述されるが、これは、制限は存在しないが、実行するのに遅くなる場合があるケースに対応する）、（２）ストリングの残りの長さがチェックされ、長さが規定の閾値（ＮＴ＿ｔｈｒｅｓｈｏｌｄ）よりも大きい場合には、制御がブロック１５０へと移り、キャッシュ汚染を回避するための、読み込み及び格納オペレーションのための非時間的ヒント（例えば、インテル（登録商標）のＭＯＶＮＴＤＱＡ又はＭＯＶＮＴＳＱ命令）のようなキャッシュヒントを使用するループが実行される。一実施形態では、このＮＴ＿ｔｈｒｅｓｈｏｌｄパレメータは、最良の性能影響を達成するようにキャッシュサイズに対応させて調整することができる。別の実装例として、様々なキャッシングヒントのうち最も適切なものの使用を判断するために、複数の閾値レベルを使用してもよい。
【００１８】
ブロック１４０のループのイタレーション（反復）のそれぞれの間に、６４Ｂのデータが可能な限り高速な態様でコピーされる（すなわち、コピー長に対して最適化されたコードシーケンスが使用される）。イタレーションの数は、ゼロオーバーヘッドループカウンタを使用して判断される。Ｆａｓｔ  Ｌｏｏｐのブロック１４０の最後で、テール部を扱う条件がチェックされ、次のような判断がなされる（条件はプリセットされているので、ゼロオーバーヘッドである）。テール条件＝真であれば、制御はブロック１３５のテール部分に移り、真でない場合には、更なるデータがコピーされることなく、方法１００が終了する。
【００１９】
ブロック１６０において、ｆａｓｔ＿１６  ｌｏｏｐ（高速１６ループ）はＦａｓｔ  Ｌｏｏｐと同様なものであるが、各イタレーションで１６Ｂを（このコピー長に最適化されたシーケンスに応じて）コピーする。ゼロオーバーヘッドカウンタは、ループの実行に先立って、１６Ｂのイタレーションが可能となるように調整される。
【００２０】
６４Ｂの塊（又は、ブロック１４０、１５０及び１６０のコピーオペレーションのサイズ）を、可能な限り多くコピーした後、６３Ｂ以下のコピーオペレーションが残る場合がある（このようなテール部分が存在する場合にのみ、プロセッサがこの状態に至る）。テール部分は、ブロック１３５における条件付きコピーオペレーションのシーケンスを使用して扱われ、シーケンスは、ヘッド部で使用されたシーケンスと同様なものであるが、異なる点は、シーケンスが、１が２つではなく、１が１つで始まる（１、２、・・・）という点である。テール部の長さは、Ｆａｓｔ  Ｌｏｏｐの１回のイタレーションにおけるデータ量から１を引いたサイズ（例えば、６３Ｂ＝６４Ｂ−１）に設定され、パイプラインの深さとは関係しない。Ｎ＝１６及びＦａｓｔ  Ｌｏｏｐが６４Ｂである上記の例の場合、テール部は、１６、１６、１６、８、４、２、１バイト（７回のオペレーション）のデータの塊でコピーされる。上述のヘッド部の箇所で説明したように、移動させるオペレーションのサブセットを規定するプロセスを最適化するために、逆の順序が使用されている。Ｎ＝３２の場合、テール部のシーケンスは、３２、１６、８、４、２、１（６回のオペレーション）となる。
【００２１】
ブロック１１０でチェックされたＤＦフラグが１である場合には、ストリングは"逆順"となり、コピー元及びコピー先ポインタは、デクリメントされる。上述したアルゴリズムでは、この場合を、ネイティブループで扱う（制御をブロック１２０へと移す）。別の実装例として、このようなコピーオペレーションを、同様な"高速コピー"シーケンスを使用して実装してもよく、対称スキームを使用して、ポインタの調整オペレーションにおけるオペレーションを反転させる。
【００２２】
上述の方法１００の実装例は、ＲＥＰ  ＭＯＶＳＢ命令を使用した反復コピーオペレーションに対するものであったが、その他のコピー命令を使用した別の実装例を採用してもよい。例えば、格納（ストア）命令（例えば、ＲＥＰ  ＳＴＯＳＢ）を利用したアルゴリズムは、ＲＥＰ  ＭＯＶＳＢと同様なスキームを扱うことができ、コピーオペレーションではｌｏａｄ＋ｓｔｏｒｅが使用されたが、格納オペレーションではｓｔｏｒｅのみが実行される点を除いて、上述と同じ段階が使用される。加えて、ＲＥＰ  ＳＴＯＳＢの場合には、プロセスを簡単にできる箇所が存在する。（１）ｓｒｃとｄｓｔとの間の距離をチェックする必要がない。（２）ｓｒｃポインタにおける条件をチェックする必要がない。また、最も長い格納オペレーションの長さ（上述の例の場合は、Ｎ＝１６又はＮ＝３２）を有する格納データレジスタを準備する段階が新たに必要となり、最も長い格納オペレーションは、格納アクションのためにデータの複製バージョンを保有する（ＳＴＯＳＢは、格納先データレジスタの各バイトにおいて重複させる必要がある１バイトのデータを含む）。
【００２３】
図１の実装例は、ＲＥＰ  ＭＯＶＳＢ及び１イタレーションにつき６４バイトに調整された例であったが、異なる長さの高速コピーオペレーションを扱うのにそのほかの実施形態を使用してもよい。また、ダブルワード長（例えば、ＲＥＰ  ＭＯＶＳＤ）を移動させるといった命令や、その他の命令を使用して、高速コピーオペレーションを実行するのに、このようなオペレーションを使用してもよい。別の実施形態として、ページの"エイリアシングが存在しない"という仮定を採用してもよい（この場合、モジュール４Ｋは取り除かれる）。上述したように、コードシーケンスの一部は、含まれる命令の特定の種類に対して最も効率的な態様で所望のオペレーションを実行するように最適化されており、別のシーケンス部分では、同じ命令が、最適化されていない態様で実行される場合がある。様々な実施形態において、シーケンス検出技術が実装され、入力される命令のシーケンスを分析し、コードを実行ユニットに提供して、所定のコードシーケンスの１以上の命令を最適化された態様で実行することを可能にする。
【００２４】
一例として、ＩＡ３２  ＲＥＰ  ＭＯＶＳ及びＲＥＰ  ＳＴＯＳオペレーションは、予め長さが知られていないコピーオペレーションを扱うために調整される。現在の最適化では、データの大部分を移動させるためにＲＥＰ  ＭＯＶＳＤを使用し、残りの部分にはＲＥＰ  ＭＯＶＳＢを使用することを基本としており、残り部分への使用は、０‐３の長さであることが知られている（ＲＥＰ  ＭＯＶＳＢ実行時間を最適化するのに使用される情報）。これらのコピーオペレーションを実装するコードの例が、表１に示されている（同様な構造が、ＲＥＰ  ＳＴＯＳにも適用される）。
【００２５】
【表１】
0005356531.tif 000002
【００２６】
ＲＥＰ  ＭＯＶＳＢは、長さが０‐３の場合を早く処理し、その他の長さについてはペナルティを受けることによって、最適化されている。先行するオペレーションのために、上記のスキームは、カウントが決して０‐３を超えないように構成される。しかしながら、このような最適化を実行するためにその他の様々なシーケンスを使用してもよく、特にＲＥＰ  ＭＯＶＳＢ命令のカウントを設定するのに別のシーケンスを使用してもよい。ＲＥＰ  ＭＯＶＳＢの振る舞いを０‐３以外の長さに対して最適化する、例えば、ＲＥＰ  ＭＯＶＳＱ命令が有する残りの部分の長さが０‐７であることに関連して最適化する場合、コードがうまく機能せず、多くの場合、性能が低下してしまう可能性がある（例では、長さが４‐７の場合）。同様に、どのような長さを扱っても効率的となるようなＲＥＰ  ＭＯＶＳＢに対するその他の最適化、及び、このような最適化の一部として０‐３の長さの場合に質の低下が生じる場合には、上記の表１に記載されたコードは適切に作動せず、性能が低下してしまう。ｅｃｘの値が命令の実行時でなければ知ることができないとしても、パイプライン遅延での時間損失を防ぐために、ＲＥＰ  ＭＯＶＳＢがどの長さを扱うべきかの決定を、命令デコード時に行う必要があり、性能損失を引き起こす"バブル"が生成されてしまうことがある。
【００２７】
上述の最適化（表１）では、ＭＯＶＳＢは、ＲＥＰ  ＭＯＶＳＤ命令（Ｄ＋Ｂシ−ケンスと称する）の直ぐ後に続き、このことは、プログラマがＲＥＰ  ＭＯＶＳＢ命令を限られたバイト数、例えば０‐３バイトに設定することを意図しているというヒントとして機能する。実施形態は、このシーケンスヒントを使用して、様々な命令コードを、実行ユニットに提供し、（少なくとも）２番目のコピー命令の最適化を行うことを可能とする。完全な命令シーケンスは変化する場合があり、他のコードが同じ結果を達成するのに使用される場合もあることから、特定のシーケンスを探索する替わりに、ハードウェアが、ＲＥＰ  ＭＯＶＳＤ命令の後に続くＲＥＰ  ＭＯＶＳＢを、少ない数の命令で（例えば、１‐９）で探す。所定のデータ長に対して、どのフローをデコードし、どの最適化を選択するか関わらず、そしてデコーディングが正確に実行されたとしても、Ｄ＋Ｂシーケンスが必ず検出される保証はないことから、Ｄ＋Ｂシーケンスが間違って検出されてしまうことがないとも必ずしも言えない。
【００２８】
図２には、本発明の一実施形態に係るシーケンス検出器のブロック図が示されている。図２に示すように、プロセッサ２００は、実行されるべき命令を受信する命令デコーダ２１０を含んでもよい。命令がデコーダで受信されると、受信された命令は、バッファ２１５に格納されてもよい。バッファ２１５は、デコードロジック２２０に、実行すべき次の命令を提供するよう動作してもよく、デコードロジック２２０は、シーケンス検出器状態機械２４０を含むフィードバック経路からデコード経路選択信号を受信する。この選択信号、及びデコードロジック２２０の様々な規則に基づいて、命令がデコードされて、実行ユニット２３０に提供され実行されてもよい。通常、デコードロジック２２０は、入力される命令を受信し、受信した命令から、デコードした命令を生成する。一実施形態において、このようなデコードされた命令は、命令に対応する機械コードの形式であってもよく、命令が実行可能となるよう実行ユニット２３０に提供される。例えば、命令コードは、命令ユニットにマイクロコードシーケンスを実行させる、又は所定の機能ユニットを選択して、所望のオペレーションを実行させてもよい。デコードロジック回路は、複数の命令のデコードを並列に実行してもよい。実行のために、別のデコードロジック回路が、１つの命令を複数の指示に変換してもよい。
【００２９】
図２に示すように、デコードされた命令が、フィードバック経路の命令比較器２２５に供給されてもよく、デコードされた命令を、状態機械２４０から受信した予測命令コードと比較してもよい。予測命令コードは、コードシーケンスの最初の部分に存在する、状態機械２４０及びデコードロジック２２０を使用して最適化されるのが望ましい所定の命令コードに対応していてもよい。ある実装形態では、内部のマイクロオペレーションアレイに対するインデックスを使用して、実装してもよい。また、幾つかの実装形態では、複数のこのような状態機械及び比較器が配置され、それぞれが、コードシーケンス中で探索されるべき所定の命令と関連付けられていてもよい。別の実装形態では、状態機械２４０及び比較器２２５は、複数の命令の比較及び解析をサポートするように拡張されてもよい。
【００３０】
１つの命令を実装する図２の実施形態に示されているように、比較器２２５に入力される２つのコードが一致する場合には、一致信号が比較器２２５から状態機械２４０へと報告される。また、図２に示すように、状態機械２４０は、サイクル毎に、ストール信号（又は、命令デコードを示す情報）を命令デコーダ２１０から受信する。図２には、命令のデコードが一度に１つ行われる場合が示されているが、複数の命令が並列にデコードされる場合に拡張することもできる。命令デコーダ２１０は、デコードロジック２２０へと供給される命令を保持する。一実施形態において、デコードロジック２２０は、特定の状態情報（例えば、ある命令を不正であると規定する機械のモード）を使用して命令を解析するロジック機能を含んでもよい。デコーダの出力は、"デコードされた命令"として示されており、この命令に対して実行されるであろうマイクロオペレーションを特定する。これらのオペレーションの性質は、機械のマイクロアーキテクチャの実装に依存するが、命令を一意的に表す２進値（又は値の範囲）として見なすこともできる。このコードは、実行ユニット２３０に供給されて、デコードされた命令に対応するオペレーションが、１以上のサイクルで実行される。
【００３１】
一実装形態では、最適化は、命令シーケンスに緩く基づく。命令の正確なオペレーションは、決定に関わらず保証されると仮定され、それにより、全てのケースでシーケンスの検出が正確であると保証する必要がなくなり、ほとんどの場合のシーケンスを検出が検出されるように最適化することが可能となる。命令比較器２２５は、状態機械２４０からの現在の命令と、命令デコーダ２２０から受信された"次の命令コード"とを比較する。以下に記載するように、このコードは、複数のコードの範囲又は１以上のコードを状態機械フローに基づいてカバーしてもよい。比較の結果が一致した場合には、状態機械２４０は、次の段階に移る。状態機械は、一致の検出（一致は、ある状態から別の状態へと変化する場合がある）若しくは、時間又は命令デコードカウントに基づいて、ある段階から別の段階へと移る。時間が使用される場合には、ストールを示す情報が、命令デコーダ２１０から提供され、状態機械が、命令デコーダ２１０がストールしている（例えば、下層のキャッシュ又はメモリからのフェッチの完了を待っている、又は実行ユニットがビジー状態で新たな命令を実行できない場合など）間に"カウント"してしまうのを防ぐ。このストールにより、実行サイクルのカウントが、デコードされた命令のカウントの近似となり、このように構成する方が実装が単純化される場合がある。シーケンス検出器状態機械２４０は、デコードロジック２２０に、状態情報信号をフィードバックし、図２では、"デコード経路選択信号"として示されている。この状態情報は、命令バッファ２１５における同じ命令に対して、デコーダの規則が、デコードされた異なる命令を実行ユニット２３０に信号で伝えるように、デコードロジック２２０を変更する。
【００３２】
オペレーションを明確にするため、ＲＥＰ  ＭＯＶＳＢの実行を検出し最適化する例について、２つの場合を提供する。（１）ＲＥＰ  ＭＯＶＳＢ自体が、データ長が未知であって、３バイトよりも大きいと予想されるもののコピーに使用される（すなわち、"長ＲＥＰ  ＭＯＶＳＢ"命令）場合、そして、ＲＥＰ  ＭＯＶＳＢが、コードシーケンスにおいてＲＥＰ  ＭＯＶＳＤと関連付けられて使用される場合であって、ＲＥＰ  ＭＯＶＳＢの命令に対する長さが０‐３バイトの範囲であると予想され、ここでは"短ＲＥＰ  ＭＯＶＳＢ"と称することにする。このような２つの異なるコードを命令デコーダ２１０から出力することができ、実行ユニット２３０は、２つの異なる最適化されたコピーオペレーションのうちから選択された１つを実行する。
【００３３】
図３は、本発明の一実施形態に係るシーケンスデコーダ状態機械の一例の状態図であり、状態機械の実装が示されている。図３に示すように、オペレーション３１０では、状態機械は、ＲＥＰ  ＭＯＶＳＤ命令又はＲＥＰ  ＳＴＯＳＤ命令を探索する場合にリセットされる。この場合、状態機械からのデコード経路選択信号は、ＲＥＰ  ＭＯＶＳＢがコードシーケンス中に生じた場合に、"長ＲＥＰ  ＭＯＶＳＢ"コードを生成するように設定される。同時に、命令デコーダには、ＲＥＰ  ＭＯＶＳＤ及びＲＥＰ  ＳＴＯＳＤのコードが供給され、この２つのうちのどちらかのコードが生じた場合には、そのことを示す情報がシーケンス検出状態機械に提供され、ＲＥＰ  ＭＯＶＳＢ又はＲＥＰ  ＳＴＯＳＢを"直ちに追従"を探すモードへと切り替わり、デコード経路選択信号が提供されて、"短ＲＥＰ  ＭＯＶＳＢ"オペレーションに対するコードがエンコードされる。状態機械は、特定されたＲＥＰ  ＭＯＶＳＢ又はＲＥＰ  ＳＴＯＳＤの閾値距離の間、少ない回数である"ｎ回の非ストールサイクル"又は等価である"ｎｌ個の命令"の間は、この状態（オペレーション３２０‐３４０）にとどまる。１度に１つの命令がデコードされる場合には、ｎｌはｎに等しく、複数の命令が同時にデコードされる場合には、ｎｌはｎよりも大きく（例えば、４ｎ）なる。デコーダが、このフローに対して新たな命令を発行するのを妨げるフェッチストール又はその他のストールが生じた場合には、カウントを一時停止して、シーケンス検出を保証するようにする。本例では、ｎは小さい数であり、例えば、４である。このような遅延の後、ＲＥＰ  ＭＯＶＳＢが到達したか否かに関わらず、シーケンサは、ＲＥＰ  ＭＯＶＳＤ又はＲＥＰ  ＳＴＯＳＤを探索する最初の状態３１０に戻り、新たなＲＥＰ  ＭＯＶＳＤ＋Ｂシーケンスが開始したことを暗に示すこととなる。ＲＥＰ  ＭＯＶＳＢが存在しない場合又はＲＥＰ  ＳＴＯＳＢが検出されなかった場合は、コードがＲＥＰ  ＭＯＶＳＤのみを含み、別の箇所では、ＲＥＰ  ＭＯＶＳＢのみを含んでいるというシナリオをカバーする。ある実施形態では、状態機械オペレーションの途中で割り込みが発生した等のイベントは無視してもよく、これは、イベント発生の割合は、ミス予測のペナルティで乗算されるため、イベントのコストと比較して小さくなるからである。
【００３４】
選択肢の１つとして、状態機械は、最後の状態を実行せずに、状態３２０又は状態３３０で抜けて状態３１０に戻り、ＲＥＰ  ＭＯＶＳＢ又はＲＥＰ  ＳＴＯＳＢを探索するように実装することができるが、コードシーケンスが短い場合は（ＲＥＰ  ＭＯＶＳＢの直ぐ後に続くＲＥＰ  ＭＯＶＳＤが存在せず、固定遅延の間は検出されないと仮定して）、このように構成する必要はない。別の実施形態では、特定された命令間のシーケンスの距離が長い場合には、２番目（すなわち、別のさらなる命令）の検出時に、状態機械は、最初の探索状態（状態３１０）にリセットしてもよい。
【００３５】
選択された最適化に関わらず完全な実行が保証されるという事実は、ＲＥＰ  ＭＯＶＳＤ命令とＲＥＰ  ＭＯＶＳＢ命令との間の例外のようなケースもカバーしている。このような稀な条件が発生した場合には、ＲＥＰ  ＭＯＶＳＢの実行は、最適でない経路を選択してもよく、性能の点ではコストが生じてしまうかもしれないが、コードの正確な実行を損なうこと避けることができるかもしれない。他にも、パイプラインの掃き出しのような予測ミスを引き起こすケースが存在する（例えば、ＲＥＰ  ＭＯＶＳＢが、ＲＥＰ  ＭＯＶＳＤの後にデコードされて、掃き出される）。このようなケースでは、通常、状態機械はリセットしないことが望ましく、リセットしてしまうと、高い確率で、許容された遅延の時間枠内において、ＲＥＰ  ＭＯＶＳＢが再びデコードされてしまう。
【００３６】
一実施形態において、フローが完全ではなく変動が生じるケースを正しく扱うために、シーケンス検出器状態機械の実装条件を緩めてもよい。例えば、完全シーケンスを探索する替わりに、タイマーを使用することにより、この問題に対処することができる。
【００３７】
現在のデコーダは、複数の命令を一度にデコードすることができる。上述の実装形態を、この場合を含むように、複数の態様で拡張することができる。初めに、"探索すべき"命令のデコードを、一度に１つに限定することができる。ＲＥＰ  ＭＯＶＳＢの例では、ＲＥＰ  ＭＯＶＳＤ命令及びＲＥＰ  ＳＴＯＳＤ命令は、それ自身によってデコードされる。次に、複数の比較オペレーションが、各デコーダの出力に対して実行されて、シリアル化する（より最近のオペレーションをフラッシュする）又は、予測されたコードの全てに対して複数の比較器を使用して、状態機械があらゆるオペレーションからコードシーケンスを追従できるようにする。非シリアル化デコードが使用される場合には、状態機械は、複数の段階分岐を同時にサポートする（第１のデコードと並列に第２の一致のデコードをサポートする等）ように拡張されてもよい。
【００３８】
実施形態は、ＲＥＰ  ＭＯＶＳＤ＋Ｂシーケンスを使用するように最適化された現在のコードに対して性能損失を生じさせることなく、新しいコードに大きな利益をもたらすＲＥＰ  ＭＯＶＳＢ命令の最適化を可能にする。
【００３９】
図４は、本発明の一実施形態に係るプロセッサのブロック図を示している。図４に示すように、プロセッサ４００は、複数段階にパイプライン化された、アウトオブオーダープロセッサであってもよい。図４では、上述の命令調整と関連して使用される様々な特徴を例示するために、プロセッサ４００は相対的に簡略化されて描かれている。
【００４０】
図４に示すように、プロセッサ４００は、フロントエンドユニット４１０を含み、実行すべきマクロ命令をフェッチするのに使用され、プロセッサにおいて後で使用するためにこれらマイクロ命令を準備しておく。例えば、フロントエンドユニット４１０は、フェッチユニット４０４、命令キャッシュ４０６及び命令デコーダ４０８を含んでもよい。幾つかの実装形態では、フロントエンドユニット４１０は、マイクロコードストレージ及びマイクロオペレーション（μＯＰ）ストレージと共に、トレースキャッシュを更に含んでもよい。フェッチユニット４０４は、マクロ命令を、例えば、メモリ又は命令キャッシュ４０６からフェッチして、命令デコーダ４０８に供給し、命令を基本命令、すなわち、プロセッサによって実行されるμＯＰへとデコードしてもよい。本発明の一実施形態では、入力される命令グループが２つ以上の命令の所定のシーケンスを含む（又は、上記したように、選択された命令のシーケンスが互いに近接する）ように、シーケンス検出を実行するロジックを備えるように命令デコーダ４０８が構成される。このロジックは、命令デコーダ４０８に、デコードされた様々な命令、例えば、プロセッサパイプラインで後に実行されるμＯＰを、性能を最適化するために提供させる。幾つかの実装形態において、所定のマクロ命令が受信されると、命令デコーダ４０８は、所定のマイクロコードシーケンスを実行のために送信されるようにし、このシーケンスは、本発明の実施形態に係る高速モードコピーオペレーションを扱ってもよい。別の実装形態では、デコードされた命令に応答して効率的に高速コピーオペレーションを実行するべく、特定のハードウェアに対して、実行ユニットを拡張してもよい。
【００４１】
フロントエンドユニット４１０と実行ユニット４２０との間には、マイクロ命令を受信し、実行のために準備するのに使用されてもよいアウトオブオーダー（ＯＯＯ）エンジン４１５が接続されている。具体的には、ＯＯＯエンジン４１５は、マイクロ命令フローを再順序付けし、実行に必要な様々なリソースを割り当てるための様々なバッファを含んでもよい。また、レジスタファイル４３０及び拡張されたレジスタファイル４３５のような様々なレジスタファイル内の格納位置に対して、論理レジスタのリネームを提供する。レジスタファイル４３０は、整数オペレーション及び浮動小数点オペレーションのために、別々のレジスタファイルを含んでもよい。拡張されたレジスタファイル４３５は、ベクトルサイズの単位、例えば、１レジスタにつき、２５６ビット又は５１２ビットといった記憶領域を提供してもよい。
【００４２】
様々なリソースが実行ユニット４２０内に存在してもよく、例えば、様々な整数、浮動小数点及び単一命令多重データ（ＳＩＭＤ）ロジックニット、及び他の専用ハードウェアが含まれる。結果は、リタイアメントロジック、すなわち、リオーダ（再整列）・バッファ（ＲＯＢ）４４０に供給される。具体的には、ＲＯＢ４４０は、実行される命令と関連付けられた情報を受信する様々なアレイ及びロジックを含んでもよい。情報は、ＲＯＢ４４０によって調べられ、命令が、有効にリタイアでき、結果のデータがプロセッサのアーキテクチャ状態にコミットしたものとなるかを判断する、又は、命令の適切なリタイアメントを妨げるような１以上の例外が発生したかを判断する。無論、ＲＯＢ４４０は、リタイアメントに関してその他のオペレーションを扱ってもよい。
【００４３】
図４に示すように、ＲＯＢ４４０は、キャッシュ４５０と接続され、本発明はこの点に関して限定されないが、一実施形態では、低階層のキャッシュ（例えば、Ｌ１キャッシュ）であってもよい。実行ユニット４２０は、キャッシュ４５０と直接接続することができる。キャッシュ４５０から、高階層のキャッシュ、システムメモリ等に対しての通信が発生してもよい。図４の実施形態では、この構成が高階層に示されているが、本発明はこの点に関して限定されない。
【００４４】
実施形態は、多くの異なるシステムの型に実装されてもよい。図５には、本発明の一実施形態に係るシステムのブロック図が示されている。図５に示すように、マルチプロセッサシステム５００は、ポイント・ツー・ポイント相互接続システムであって、ポイント・ツー・ポイント相互接続５５０によって連結された第１プロセッサ５７０及び第２プロセッサ５８０を含む。図５に示すように、プロセッサ５７０及びプロセッサ５８０のそれぞれは、マルチコアプロセッサであり、第１プロセッサコア及び第２プロセッサコア（すなわち、プロセッサコア５７４ａ及び５７４ｂ、並びにプロセッサコア５８４ａ及び５８４ｂ）を含む。各プロセッサコアは、図１‐４に示すように、命令調整を実行するハードウェア、ソフトウェア及びファームウェアを含んでもよい。
【００４５】
図５に示すように、第１プロセッサ５７０は、メモリ制御ハブ（ＭＣＨ）５７２、及びポイント・ツー・ポイント（Ｐ‐Ｐ）インターフェース５７６及び５７８を含む。同様に、第２プロセッサ５８０は、ＭＣＨ５８２、Ｐ‐Ｐインターフェース５８６及び５８８を含む。図５に示すように、ＭＣＨ５７２及びＭＣＨ５８２は、プロセッサをそれぞれのメモリに、すなわち、メモリ５３２及びメモリ５３４に接続し、これらのメモリは、対応するプロセッサにローカルに取り付けられたメインメモリ（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ））の一部であってもよい。第１プロセッサ５７０及び第２プロセッサ５８０はそれぞれ、Ｐ‐Ｐ相互接続５５２及び５５４を介して、チップセット５９０に連結されていてもよい。図５に示すように、チップセット５９０は、Ｐ‐Ｐインターフェース５９４及び５９８を含む。
【００４６】
また、チップセット５９０は、チップセット５９０を、高性能グラフィックスエンジン５３８に接続するインターフェース５９２を含む。同様に、チップセット５９０は、インターフェース５９６を介して、第１バス５１６に接続されていてもよい。図５に示すように、様々なＩ／Ｏデバイス５１４が、第１バス５１６に接続されていてもよく、また、第１バス５１６と第２バス５２０とを接続するバスブリッジ５１８が第１バス５１６に接続されていてもよい。様々なデバイスを第２バス５２０に接続してもよく、例えば、キーボード／マウス５２２、通信デバイス５２６、及び、ディスクドライブ又は一実施形態においてコード５３０を含んでもよいその他のマスデータストレージデバイスのようなストレージユニット５２８を接続してもよい。また、オーディオＩ／Ｏ５２４を、第２バス５２０に接続してもよい。
【００４７】
実施形態は、コードに実装されてもよいし、システムに命令を実行させるようプログラムするのに使用可能な命令を格納する記憶媒体に記憶されてもよい。記憶媒体としては、特にこれに限定されないが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光学ディスクを含むあらゆるディスク、並びに、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）及びスタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能−プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能−プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気又は光学カードのような半導体デバイス、又は、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
【００４８】
本発明が、限られた数の実施形態を参照して説明されたが、数多くの変形例及び変更が可能であることは、当業者にとって明らかである。本発明の範囲及び精神の範囲内において、このような変形例及び変更についても添付の特許請求の範囲に含まれることを意図している。以下に本発明の実施形態の例を項目として示す。
［項目１］
命令コードによって示されるオペレーションを実行する実行ユニットと、
入力される命令を受信する命令デコーダと、
を備え、
命令デコーダは、第１入力命令を受信し、経路選択信号をフィードバック経路から受信する第１ロジックを含み、
フィードバック経路は、命令デコーダと連結されており、命令デコーダと連結され経路選択信号を生成するシーケンス検出器を含み、
経路選択信号は、第１入力命令の閾値距離内で命令デコーダによって受信された異なる入力命令の検出に対応しており、
第１ロジックは、第１入力命令を、経路選択信号に応答して、第１命令コード又は第２命令コードへとデコードする、装置。
［項目２］
命令デコーダから命令コードを、シーケンス検出器から予測コードを受信し、命令コードと予測コードとが一致する場合には、一致信号を生成する比較器を更に備える項目１に記載の装置。
［項目３］
シーケンス検出器は、一致信号が生成されていない場合に、第１ロジックに第１入力命令を第１命令コードにデコードさせる第１状態の経路選択信号を生成し、第１命令コードは、第１データ長に対して最適化されたコピーオペレーションに対応している項目２に記載の装置。
［項目４］
シーケンス検出器は、一致信号に応答して、第１ロジックに第１入力命令を第２命令コードにデコードさせる第２状態の経路選択信号を生成し、第２命令コードは、第１データ長とは異なる第２データ長について最適化されたコピーオペレーションに対応している項目３に記載の装置。
［項目５］
第２命令コードは、実行ユニットに、有限の長さのコピーオペレーションを実行させる項目４に記載の装置。
［項目６］
第１入力命令からの閾値距離に対応する第１の個数の命令内において、異なる入力命令が命令デコーダによって受信された場合に、シーケンス検出器は、第２状態の経路選択信号を生成する項目４に記載の装置。
［項目７］
閾値距離は、サイクル数及びデコードストール情報によって近似される項目６に記載の装置。
［項目８］
シーケンス検出器は、状態機械を有し、異なる入力命令が、第１の個数の命令内で受信されなかった場合には、状態機械はリセットされる項目６に記載の装置。
［項目９］
反復コピー命令が、反復コピー命令と関連付けられた情報に少なくとも一部基づいて最適化可能であるかを判断する段階と、
可能であると判断された場合に、２のツリーのべき乗のコピーを使用して、第１の量以下のデータを、第１の数以下の個数の塊で、第１コピー元ロケーションから第１コピー先ロケーションへとコピーする条件付きコピーオペレーションの第１シーケンスによって、反復コピー命令の第１部分を実行する段階と、
コピーすべきデータの残りの部分が第１閾値よりも大きい場合には、コピーオペレーションの高速ループを使用して、第２の量のデータを第２コピー元ロケーションから第２コピー先ロケーションへとコピーすることにより、反復コピー命令の第２部分を実行する段階と、
その後にコピーすべきデータが残っている場合には、第３の量以下のデータを、第３の数以下の個数の塊で、第３コピー元ロケーションから第３コピー先ロケーションへとコピーする条件付きコピーオペレーションの第２シーケンスによって、反復コピー命令の第３部分を実行する段階と、
を備える方法。
［項目１０］
条件付きコピーオペレーションの第１シーケンスを実行する前に、高速ループ及び条件付きコピーオペレーションの第２シーケンスに対するセットアップ情報を取得する段階を更に備える項目９に記載の方法。
［項目１１］
第２の量のデータが、第２閾値よりも大きいか否かを判断し、大きい場合には、キャッシュに格納することなく、キャッシングヒントを使用して第２の量のデータを直接メモリにコピーする段階をさらに備える項目９に記載の方法。
［項目１２］
条件付きコピーオペレーションの第１シーケンスの第１番目は、Ｎバイトのデータ塊をコピーし、条件付きコピーオペレーションの第１シーケンスと関連付けられた第１ポインタ及び第２ポインタをインクリメントし、コピーすべき残りのデータと関連付けられたカウンタを更新する項目９に記載の方法。
［項目１３］
２のツリーのべき乗は、プロセッサの最大読み込み長又は最大格納長に対応する、２のべき乗の一番目の長さで始まり、１バイトに対応する２のべき乗の最後の長さで終了する項目９に記載の方法。
［項目１４］
反復コピー命令と関連付けられた第１ポインタと第２ポインタとの差分が、第３閾値と第４閾値の間であるかを判断する段階を更に備え、
判断の結果が真である場合には、高速ループの１イタレーションよりも短い幅を有するコピーオペレーションを使用して、第２の量のデータをコピーする項目９に記載の方法。
［項目１５］
デコーダを含むフロントエンドを有するプロセッサと、
プロセッサに連結されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）とを備えるシステムであって、
デコーダは第１デコードロジックを含み、
入力コピー命令及び少なくとも１つの別のコピー命令を含むデコーダに、命令のシーケンスが受信されたことが示唆された場合に、第１デコードロジックは、入力コピー命令を受信し、デコーダと連結されたフィードバック経路で選択信号を第２ロジックから受信し、選択信号に応答して、入力コピー命令を第１命令コード又は第２命令コードへとデコードし、
プロセッサは、第１命令コード又は第２命令コードを受信し、受信した命令コードに応答して、第１コピーオペレーション又は第２コピーオペレーションをそれぞれ実行する実行ユニットを更に有する、システム。
［項目１６］
第２ロジックは、シーケンス検出器を含み、
少なくとも１つの別のコピー命令に対応する第２入力コピー命令の後に、第１の個数の命令内で入力コピー命令が受信される場合には、デコードロジックに第２命令を生成させ、その他の場合には、デコードロジックに第１命令を生成させる選択信号が、シーケンス検出器によって生成される項目１５に記載のシステム。
［項目１７］
入力コピー命令が、第１の個数の命令内で受信されない場合には、シーケンス検出器は、第２入力コピー命令を探索する第１状態へとリセットされる項目１６に記載のシステム。
［項目１８］
シーケンス検出器は、第２入力コピー命令が検出された後に、第１状態から、入力コピー命令を探索する第２状態へと進む項目１７に記載のシステム。
［項目１９］
デコーダから命令コードを、シーケンス検出器から予測コードを受信し、命令コードと予測コードとが一致する場合には一致信号を生成する比較器を更に備える項目１６に記載のシステム。
［項目２０］
第１コピーオペレーションは、第１データ長に対して最適化され、第２コピーオペレーションは、第１データ長とは異なる第２データ長に対して最適化されている項目１５に記載のシステム。
【図１】
0005356531.tif 000003
【図２】
0005356531.tif 000004
【図３】
0005356531.tif 000005
【図４】
0005356531.tif 000006
【図５】
0005356531.tif 000007