(57)【要約】推測式プロセッサにおいて信頼性のないデータを含む命令の実行を削減するシステムと方法である。方法は、プロセッサの推測的実行の間に生成されたスクラッチ値を識別することと、データ領域がスクラッチ値を保持することを示すために、プロセッサの少なくとも１つのデータ領域に関連付けられた少なくとも１つのタグを設定することとを有する。そのようなデータ領域には、レジスタ、プレディケイト（ｐｒｅｄｉｃａｔｅ）、フラグ、及びそれと同様のものが含まれる。命令もまた同様にタグを付けられることがある。前記方法は、コンピュータプロセッサの実行エンジンで実行されることがある。
2005508546.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの推測的実行の間に生成されたスクラッチ値を識別し、
データ領域がスクラッチ値を保持していることを示すために、前記プロセッサの少なくとも１つのデータ領域に関連付けられた少なくとも１つのタグを設定することを有する方法。
【請求項２】
請求項１に記載の方法であって、
設定することが、宛先としてレジスタを有する命令がキャッシュミスを生じる場合に、レジスタのタグを設定することからなる方法。
【請求項３】
請求項１に記載の方法であって、
複数の命令のうち、オペランドがスクラッチ値であることを示す関連付けられたタグを備えた少なくとも１つのオペランドを有する命令の実行を迂回することを更に有する方法。
【請求項４】
請求項１に記載の方法であって、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを備えたレジスタを少なくとも１つのオペランドとして有する算術命令の実行を迂回し、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを有するレジスタから導き出された値を有する保存命令の実行を迂回することを更に有する方法。
【請求項５】
請求項１に記載の方法であって、
分岐予測器を利用し、データがスクラッチ値であることを示すタグを有するデータに基づいて分岐命令により作られた計算済みの分岐結果を無効にすることを更に有する方法。
【請求項６】
請求項１に記載の方法であって、
命令がスクラッチ値を有するかどうかを示すタグで、パイプラインのそれぞれの命令にマークを付けることを更に有する方法。
【請求項７】
請求項１に記載の方法であって、
アドレス生成レジスタがスクラッチ値を保持していることをアドレス生成レジスタが示さない場合に、保存バッファを通じて前記タグを伝達することを更に有する方法。
【請求項８】
レジスタに保存されたデータがスクラッチ値を保持しているかどうかを示す対応する複数のレジスタのタグを有する複数のレジスタと、
フラグにより反映されたデータがスクラッチ値に基づくものであるかどうかを示す対応する複数のフラグのタグを有する複数のフラグと、
プレディケイト（ｐｒｅｄｉｃａｔｅ）により反映されたデータがスクラッチ値に基づくものであるかどうかを示す対応する複数のプレディケイト（ｐｒｅｄｉｃａｔｅ）のタグを有する複数のプレディケイト（ｐｒｅｄｉｃａｔｅ）と
を有するプロセッサ。
【請求項９】
請求項８に記載のプロセッサであって、
複数の命令を有する命令のセットを有し、
それぞれの命令が、命令がスクラッチ値を有するかどうかを示す命令のタグにより増加されたプロセッサ。
【請求項１０】
請求項９に記載のプロセッサであって、
前記レジスタのタグと、フラグのタグと、プレディケイト（ｐｒｅｄｉｃａｔｅ）のタグと、命令のタグが、１ビットのサイズを有するプロセッサ。
【請求項１１】
請求項９に記載のプロセッサであって、
前記レジスタのタグと、フラグのタグと、プレディケイト（ｐｒｅｄｉｃａｔｅ）のタグと、命令のタグが、少なくとも２ビットのサイズを有するプロセッサ。
【請求項１２】
少なくとも２つの算術ユニットと、
変換索引バッファと、
分岐予測ユニットと
実行されると、次の：
プロセッサの推測的実行の間に生成されたスクラッチ値を識別することと、
データ領域がスクラッチ値を保持していることを示すために、前記プロセッサの少なくとも１つのデータ領域に関連付けられた少なくとも１つのタグを設定することと
を有する動作を前記プロセッサに実行させる複数の命令を有する実行エンジンと
を有するプロセッサ。
【請求項１３】
請求項１２に記載のプロセッサであって、
設定することが、宛先としてレジスタを有する命令がキャッシュミスを生じる場合に、レジスタのタグを設定することからなるプロセッサ。
【請求項１４】
請求項１２に記載のプロセッサであって、
前記実行エンジンが、実行されると、
複数の命令のうち、オペランドがスクラッチ値であることを示す関連付けられたタグを備えた少なくとも１つのオペランドを有する命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するプロセッサ。
【請求項１５】
請求項１２に記載のプロセッサであって、
前記実行エンジンが、実行されると、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを備えたレジスタを少なくとも１つのオペランドとして有する算術命令の実行を迂回し、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを有するレジスタから導き出された値を有する保存命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するプロセッサ。
【請求項１６】
請求項１２に記載のプロセッサであって、
前記実行エンジンが、実行されると、
分岐予測器を利用し、データがスクラッチ値であることを示すタグを有するデータに基づいて分岐命令により作られた計算済みの分岐結果を無効にすること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するプロセッサ。
【請求項１７】
請求項１２に記載のプロセッサであって、
前記実行エンジンが、実行されると、
命令がスクラッチ値を有するかどうかを示すタグで、パイプラインのそれぞれの命令にマークを付けること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するプロセッサ。
【請求項１８】
請求項１２に記載のプロセッサであって、
前記実行エンジンが、実行されると、
アドレス生成レジスタがスクラッチ値を保持していることをアドレス生成レジスタが示さない場合に、保存バッファを通じて前記タグを伝達すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するプロセッサ。
【請求項１９】
メモリとストレージ装置とプロセッサとを有し、それぞれバスに結合されたシステムであって、
前記プロセッサが、前記プロセッサにより実行されると、次の：
プロセッサの推測的実行の間に生成されたスクラッチ値を識別することと、
データ領域がスクラッチ値を保持していることを示すために、前記プロセッサの少なくとも１つのデータ領域に関連付けられた少なくとも１つのタグを設定することと
を有する動作を前記プロセッサに実行させる命令を有する実行エンジンを有するシステム。
【請求項２０】
請求項１９に記載のシステムであって、
設定することが、宛先としてレジスタを有する命令がキャッシュミスを生じる場合に、レジスタのタグを設定することからなるシステム。
【請求項２１】
請求項１９に記載のシステムであって、
前記実行エンジンが、実行されると、
複数の命令のうち、オペランドがスクラッチ値であることを示す関連付けられたタグを備えた少なくとも１つのオペランドを有する命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するシステム。
【請求項２２】
請求項１９に記載のシステムであって、
前記実行エンジンが、実行されると、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを備えたレジスタを少なくとも１つのオペランドとして有する算術命令の実行を迂回し、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを有するレジスタから導き出された値を有する保存命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するシステム。
【請求項２３】
請求項１９に記載のシステムであって、
前記実行エンジンが、実行されると、
分岐予測器を利用し、データがスクラッチ値であることを示すタグを有するデータに基づいて分岐命令により作られた計算済みの分岐結果を無効にすること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するシステム。
【請求項２４】
請求項１９に記載のシステムであって、
前記実行エンジンが、実行されると、
命令がスクラッチ値を有するかどうかを示すタグで、パイプラインのそれぞれの命令にマークを付けること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するシステム。
【請求項２５】
請求項１９に記載のシステムであって、
前記実行エンジンが、実行されると、
アドレス生成レジスタがスクラッチ値を保持していることをアドレス生成レジスタが示さない場合に、保存バッファを通じて前記タグを伝達すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有するシステム。
【請求項２６】
プロセッサにより実行されると、次の：
プロセッサの推測的実行の間に生成されたスクラッチ値を識別することと、
データ領域がスクラッチ値を保持していることを示すために、前記プロセッサの少なくとも１つのデータ領域に関連付けられた少なくとも１つのタグを設定することと
を有する動作を前記プロセッサに実行させる保存された命令を有する機械読取可能媒体。
【請求項２７】
請求項２６に記載の機械読取可能媒体であって、
設定することが、宛先としてレジスタを有する命令がキャッシュミスを生じる場合に、レジスタのタグを設定することからなる機械読取可能媒体。
【請求項２８】
請求項２６に記載の機械読取可能媒体であって、
実行されると、
複数の命令のうち、オペランドがスクラッチ値であることを示す関連付けられたタグを備えた少なくとも１つのオペランドを有する命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有する機械読取可能媒体。
【請求項２９】
請求項２６に記載の機械読取可能媒体であって、
実行されると、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを備えたレジスタを少なくとも１つのオペランドとして有する算術命令の実行を迂回し、
レジスタがスクラッチ値であるデータを含むことを示す関連付けられたタグを有するレジスタから導き出された値を有する保存命令の実行を迂回すること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有する機械読取可能媒体。
【請求項３０】
請求項２６に記載の機械読取可能媒体であって、
実行されると、
分岐予測器を利用し、データがスクラッチ値であることを示すタグを有するデータに基づいて分岐命令により作られた計算済みの分岐結果を無効にすること
を有する更なる動作を前記プロセッサに実行させる更なる命令を有する機械読取可能媒体。
【発明の詳細な説明】
【０００１】
［発明の分野］
本発明は、プロセッサのアーキテクチャに関するものであり、特に使用可能なデータと使用できないデータとの間を識別するために、推測的実行の間にレジスタにマークを付けるためのシステムと方法に関するものである。
［背景］
従来は、コンピュータプロセッサは、プロセッサに提示された順に１つずつ命令を実行していた。プロセッサが進化するにつれて、パイプライン、先取り、順番通りでない処理、及び推測的実行の概念が、パーソナルコンピュータで使用されるプロセッサを含む多数のより普及しているコンピュータプロセッサに組み込まれてきた。この技術は、他の長い待ち時間の命令がその結果を形成することを待つ間に、コンピュータプロセッサが独立の命令を実行することを可能にする。長い待ち時間の命令を待つ間に命令を実行し、実行リソースを使用し続ける機能は、今日のプロセッサにおける高性能を達成する際に重要である。プロセッサの設計における進歩は、一般的なプロセッサの命令の待ち時間を急激に改善したが、メモリにアクセスしなければならない命令の待ち時間は少ししか改善されていない。例えば、いくつかの今日のプロセッサにおいて、処理して“加える”ために必要な時間に比べて、プロセッサがキャッシュミスを含む“ロード”を実行するためには１０００倍長い時間を要する場合がある。これは、プロセッサがロード命令の実行を完了するためにメモリから必要なデータを検索することを、キャッシュミスが必要とするからである。
【０００２】
従って、前述の性能向上技術を実装している場合、キャッシュミスが発生すると、プロセッサは作動しなければならない多くの時間を有する。プロセッサにより実行された推測的実行のいくつかは、正確でなく、役に立たないものとして消去されなければならないデータを作る。このように、プロセッサは、多くの命令を不必要に推測的に実行する場合がある。例えばスクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の実行は、プロセッサがキャッシュミスに続く命令を推測的に実行することを可能にすることにより、分岐予測に基づいて実行を可能にすることができる。しかし、多くの場合、キャッシュをミスしたロードの宛先レジスタに含まれる無効なデータに基づいて、実行が継続する。
【０００３】
キャッシュミスによって作られた無効なデータは、最終的に無効なデータに依存する他段階の命令を通じて伝達され得る。従って、無効なデータは、一般的に無用なその命令の結果、又は命令の連続を与える。従って、キャッシュミスから生じる値を消費する命令の実行は、推測的実行を通じて達成される命令に否定的な影響を与えることがある。無効なデータに依存するロードは、先取りの利益を全く提供せず、変換索引バッファ及び／又はキャッシュの汚染を引き起こすことがある。更に、無効なデータに依存する分岐は、しばしば不正確に解決され、分岐予測によって示された分岐経路の外にスクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の実行を導き、及び／又は無用な結果を与える。
【０００４】
本発明の更なる利点が、以下の詳細な説明を読むことにより、及び添付の図面を参照して明らかになる。
［詳細な説明］
コンピュータのプロセッサの推測的実行の間に作られた使用可能な信頼性のある値と使用できない値との間を識別するシステムと方法が提供される。そのような推測的実行には、例えばパイプライン、先取り、順番通りでない処理、及びスクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の実行が含まれる。１つの実施例において、プロセッサは、キャッシュミスから生じたデータを含む命令と分岐を選択的に取り消すことができる。その結果、プロセッサの電力消費が削減され、プロセッサの実行リソースが節約され、プロセッサのスループットが増加する。１つの実施例において、単一のビットの形式のタグが、レジスタやプレディケイト（ｐｒｅｄｉｃａｔｅ）やフラグ等を含むプロセッサの各データストレージ領域に加えられ、性能を向上させ、電力消費を削減するコスト効率の良い方法を提供する。
【０００５】
いくつかのプロセッサにおいて、順番通りでない（ＯＯＯ）実行は、命令が推測的でなくなるまで、再順序バッファ（ＲＯＢ）に推測的命令をバッファリングすることにより達成される。すなわち、命令に含まれるデータが、供給元であれ宛先であれ、利用可能になり又はアクセス可能になるまでである。命令が推測的でなくなると、それは実行されて退く。命令は推測的でなくなったときにのみ退くことができるため、それが最終的に実行されて退く前に、それは数百ものクロックサイクルの間にＲＯＢにバッファリングされることがある。それぞれの新しい命令が、実行され得る前にＲＯＢのエントリーに割り当てられなければならないため、長い待ち時間の命令が完了するのを待つ間にプロセッサが進行を続けることを可能にするために、数百から数千ものＲＯＢのエントリーが必要になることがある。
【０００６】
スクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の実行（ＳＭＥ）は、進行を進めるための数百ものＲＯＢエントリーを必要とすることなく、プロセッサが長い待ち時間の命令の待ち時間を許容することを可能にする１つの形式の推測的実行である。今日の順番通りでない（ＯＯＯ）実行のプロセッサと同様に、ＳＭＥは、長い待ち時間の命令の正確な結果を待つことなく、独立した命令の実行を継続することによって、長い待ち時間に対応する。ＯＯＯ実行と異なり、ＳＭＥは推測的命令をバッファリングしない。その代わり、ＳＭＥは推測的命令を実行し、レジスタが他の命令によって上書きされるまでその結果を保存することだけを行う。ＳＭＥは、推測的に実行された命令が退くことができることを保証する記帳をしないため、全ての推測的に実行された命令は、廃棄され、プロセッサにより再実行されなければならない。しかし、多くの長い待ち時間の命令（例えばロード及び分岐）が、キャッシュ割当てと分岐予測の更新のような副次的な影響を有するため、多くの場合にその命令の待ち時間が再実行により有意に削減される。
【０００７】
ここの説明を通じて、キャッシュミスにより生じる無効なデータと、命令により生じた全てのデータ値と、無効なデータに依存するデータは、スクラッチ値（ＳＶａｌ）と称される。ＳＶａｌから生じない他のデータ値は、信頼性のある値（ＲＶａｌ）と称される。ある研究によると、スクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の間に実行された全ての命令のうちの４０パーセントは、ＳＶａｌに依存し、完全に無視されることができる。ここで説明される方法は、ＳＶａｌに依存する命令とＲＶａｌに依存する命令とを異なって処理することを含む。１つの実施例において、ＳＶａｌのロードがキャッシュにアクセスすることを防ぎ、分岐予測がＳＶａｌに基づく分岐の解決を無効にすることを可能にすることによって、有意な性能の利益が提供される。
【０００８】
図１Ａは、ここで説明されるシステムと方法が実施され得るハードウェア環境を示したものである。１つの実施例において、ここで説明される方法は、コンピュータ装置１００で実施され得る。コンピュータ装置１００は、パーソナルコンピュータ、サーバ、個人情報端末（ＰＤＡ）、コンピュータタブレット、セットトップボックス、ゲームのコンソール、携帯電話、ワークステーション、又は他のコンピュータ装置である場合がある。コンピュータ装置１００は、プロセッサ１１０と、メモリ１１２と、ストレージ装置１１４と、他の装置を有し、その全てがバス１１８に結合される。簡潔にするため、ここで説明されるときに１つのみのバスが描かれているが、例えばデータバスや、命令バスや、周辺構成要素相互接続（ＰＣＩ）及びグラフィック専用高速ポート（ＡＧＰ）のような周辺装置バス等を含む複数のバスがコンピュータ装置１００に含まれることもある。
【０００９】
一般的に、プロセッサがソフトウェアプログラムを実行する場合、それはストレージ装置１１４から検索され得る。プロセッサ１１０が特定のソフトウェアプログラムを実行し、データ及び／又は命令がプロセッサ内のキャッシュメモリにおいてプロセッサに容易に利用可能でない場合、プロセッサは、例えばストレージ装置とメインメモリのような外部チップの供給元から命令及び／又はデータがロードされることを遮って待つことがある。現在のプロセッサの速度の観点から、命令及び／又はデータがストレージ装置又はメモリから検索されることを待たなければならない場合に、プロセッサはかなりの浪費時間を有する。この浪費時間は、バスの待ち時間と、相対的に遅い装置から情報を読み取ることに備わっている待ち時間のためである。（バスの速度とメモリの速度とストレージ装置の速度は、それぞれプロセッサの速度より相当遅い。）そのような待ち時間は、数千ものクロック周期になることがある。
【００１０】
先取り、パイプライン、順番通りでない処理、スクラッチモード（ｓｃｒａｔｃｈ  ｍｏｄｅ）の実行、及び推測的実行を含む多様な技術は、データがメモリ又はストレージ装置から回復されるのを待つ間にプロセッサが進行することを可能にすることは、周知である。前記技術の全ては、ここでは一般的に推測的処理と称される。データがロードされ、又はそうでない場合はメモリ１１２とストレージ装置１４４から検索されることを待つ間に、プロセッサ１１０が推測的に命令を実行する場合、信頼性のないＳＶａｌに基づいて、多様なデータ値が処理され、分岐が行われ、他の実行が行われる。ＳＶａｌに基づく、又はそうでない場合はＳＶａｌを含む命令の浪費される実行を軽減するために、ここで説明される方法によると、ＳＶａｌタグが、レジスタ、フラグ、プレディケイト（ｐｒｅｄｉｃａｔｅ）、及びプロセッサ１１０のようなプロセッサ内の他のデータの位置に加えられる。
【００１１】
１つの実施例において、プロセッサの各データの保存位置が単一のビットの形式のＳＶａｌタグで増加され得る。この実施例において、それぞれのレジスタやプレディケイト（ｐｒｅｄｉｃａｔｅ）やフラグ等は、ＳＶａｌタグビットと呼ばれる付加された追加ビットを有することがある。ビットがゼロ（０）に設定されている場合、マークを付けられた／関連付けられたデータは信頼性のある値又はＲＶａｌである。他の実施例において、１のビット値が信頼性の有る値を示し、ゼロ（０）のビット値がスクラッチ値を示すように、ＳＶａｌタグビットの値がその代わりに常に反対の値に設定され得ることがわかる。１つの実施例において、プレディケイト（ｐｒｅｄｉｃａｔｅ）とフラグはまた、同様の関連付けられたＳＶａｌタグを有することがある。１つの実施例において、スクラッチ値のオペランドを有する命令がプレディケイト（ｐｒｅｄｉｃａｔｅ）又はフラグのいずれかに書き込むと、フラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）に関連付けられたＳＶａｌタグは１に設定される。ＳＶａｌタグを備えたフラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）を使用して分岐が解決されると、分岐の計算結果が無視され、分岐予測ユニットにより分岐の方向が判断される。更に、命令は、ＳＶａｌタグビットと称される単一のビットの形式のＳＶａｌタグで増加され得る。この実施例において、ＳＶａｌビットが１に設定されている場合、関連付けられた命令がスクラッチ値を作り、ＳＶａｌビットがゼロ（０）に設定されている場合、関連付けられた命令が信頼性のある値を作る。他の実施例において、それぞれのレジスタやプレディケイト（ｐｒｅｄｉｃａｔｅ）やフラグや命令等に関連付けられたＳＶａｌタグは２以上のビットの大きさを有することがある。
【００１２】
図１Ｂは、ここで説明されるシステムと方法によるＳＶａｌタグを有するプロセッサの実施例のいくつかの内部構成を示したものである。１つの実施例において、プロセッサ１１０は、多様なレジスタ１３０を有することがあり、そのそれぞれがレジスタデータ１３２とレジスタＳＶａｌタグ１３４とを有する。ＳＶａｌに基づく命令がレジスタに書き込まれるデータを作る毎に、レジスタのＳＶａｌタグが例えば１に設定される。多様な実施例において、ＳＶａｌタグは、単一のビット、２ビット、又はそれより大きいエンティティであることがある。少ない数のビットがＳＶａｌに割り当てられるほど、プロセッサのダイがＳＶａｌタグに対応するために必要な空間がより少なくなり、結果として生じるプロセッサがより効率的になることがわかる。プロセッサ１１０はまた、複数のフラグデータ１４１がフラグデータ１４１のそれぞれのフラグに対応する複数のフラグＳＶａｌタグ１４２によって増加されるフラグを含むことがある。同様に、プレディケイト（ｐｒｅｄｉｃａｔｅ）１４４は、プレディケイト（ｐｒｅｄｉｃａｔｅ）データ１４５及び対応するＳＶａｌタグ１４６を有する。更に、プロセッサ１１０は、プレディケイト（ｐｒｅｄｉｃａｔｅ）予測ユニット１４８や、分岐予測ユニット（ＢＰＵ）１５０や、変換索引バッファ（ＴＬＢ）１５２や、実行ユニット１５４や、オンチップキャッシュ１５６や、再順序バッファ１５８のような周知の構成要素を有する。実行ユニット１５２は、単独又は複数で現れる加算器、浮動小数点乗加算器、及び他の実行ユニットであることがある。プロセッサ１１０は、他の周知の構成要素と複数の図示された構成要素を有することがあり、それはここで説明される本発明の詳細をあいまいにすることを回避するために示されていない。例えば、プロセッサは２つ以上のオンチップのメモリキャッシュを有することがある。
【００１３】
プロセッサ内のＳＶａｌタグの追加を利用するために、プロセッサの内部実行エンジン１６０は、ここで説明される方法を実施するように書き込まれることがある。実行エンジンは、配線によるロジックを有するハードウェアの構成要素として、又はプログラムされたコンピュータの構成要素とカスタムのハードウェアの構成要素の何らかの組み合わせにより、プロセッサ内に具体化され得る。他の実施例において、実行エンジンは、機械読取可能媒体上の機械読取形式の命令又はマイクロコードとして保存され、プロセッサ１１０に転送されることがある。機械読取可能媒体には、読取専用メモリ（ＲＯＭ）装置、ランダムアクセスメモリ（ＲＡＭ）装置、消去可能プログラム可能読取専用メモリ（ＥＰＲＯＭ）装置、電気的消去可能読取専用メモリ（ＥＥＰＲＯＭ）装置、ハードディスクドライブのような磁気ディスクストレージ媒体、読取専用コンパクトディスクメモリ（ＣＤ−ＲＯＭ）のような光学ストレージ媒体、フラッシュメモリ装置等が含まれ、それはローカルで結合され、又は遠隔からアクセス可能であり、電子的、光学的、音響的、又は他の形式の伝達信号（例えば搬送波、赤外線信号、デジタル信号等）を介して利用可能であることがあり、命令やマイクロコード等を保存するのに適した何らかの他の形式の機械読取可能媒体であることがある。
【００１４】
図２Ａは、ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−３２アーキテクチャに準拠するプロセッサの実施例を示したものである。１つの実施例において、ＳＶａｌタグは、ＩＡ−３２として知られる３２ビットのＩｎｔｅｌのアーキテクチャに準拠するプロセッサ内のレジスタ、フラグ、及び他の適切なデータストレージ領域を増加することがある。ＩＡ−３２に関する更なる情報については、ＩＡ−３２  Ｉｎｔｅｌアーキテクチャ・ソフトウェア開発者用マニュアル、改訂２（Ｉ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ，  Ｒｅｖ．２）（２００１年２月）を参照のこと。１つの実施例において、プロセッサ２００は、対応する多目的レジスタのＳＶａｌ２１２により増加した多目的レジスタ２１０を有することがある。更に、セグメントレジスタ２１４は、セグメントレジスタのＳＶａｌタグ２１６により増加されることがある。更に、Ｅフラグ２２０がＥフラグのＳＶａｌタグ２２２により増加されることがある。プロセッサ２００に示されている通り、それぞれのレジスタとそれぞれのフラグに対応するそれぞれのＳＶａｌタグは、単一のビットであることがある。他の実施例において、ＳＶａｌタグは２ビット又はそれより大きいことがある。
【００１５】
図２Ｂは、ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−６４アーキテクチャに準拠するプロセッサの実施例を示したものである。１つの実施例において、ＳＶａｌタグは、ＩＡ−６４として知られるＩｎｔｅｌの６４ビットアーキテクチャに準拠するプロセッサ内の浮動小数点レジスタ、分岐レジスタ、データ並びに多目的レジスタ、プレディケイト（ｐｒｅｄｉｃａｔｅ）、フラグ、及び他の内部データレポジトリを含むそれぞれの適切なレジストリに追加されることがある。ＩＡ−６４アーキテクチャに関する更なる情報については、カリフォルニア州サンタクララのインテル社から利用可能なＩＡ−６４  Ｉｎｔｅｌアーキテクチャ・ソフトウェア開発者用マニュアル、改訂１．１（Ｉ−６４  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ，  Ｒｅｖ．１．１）（２０００年７月）を参照のこと。この実施例において、汎用レジスタ２６２は、汎用レジスタのＳＶａｌタグ２６４により増加されることがあり、浮動小数点レジスタ２６６は、浮動小数点のＳＶａｌタグ２６８により増加されることがあり、プレディケイト（ｐｒｅｄｉｃａｔｅ）２７０は、プレディケイト（ｐｒｅｄｉｃａｔｅ）のＳＶａｌタグ２７２により増加されることがあり、分岐レジスタ２７４は、分岐レジスタのＳＶａｌタグ２７６により増加されることがあり、アプリケーションレジスタ２８０は、アプリケーションレジスタのＳＶａｌタグ２８２により増加されることがある。プロセッサ２６０に示されている通り、それぞれのＳＶａｌタグは１ビットであることがある。他の実施例において、ＳＶａｌタグは、２ビット又は２ビットより大きいサイズであることがある。
【００１６】
図３は、ここで説明される方法の実施例による命令とそのオペランドを処理する際に行われる動作の一般的なフローを示したものである。この動作フローは、プロセッサにより、特にプロセッサ内の実行エンジンにより達成され得る。ブロック３１０に示される通り、現在の命令が取得される。１つの実施例において、新しい命令がパイプラインに呼び出されると、命令のＳＶａｌタグが最初にゼロ（０）に設定される。ブロック３２０に示される通り、ＳＶａｌの存在について命令のオペランドが検査される。命令のオペランドが認識されると、命令のＳＶａｌタグは、そのオペランドのＳＶａｌタグの値に従って設定される。命令のオペランドのＳＶａｌタグの全てが１に設定されていない場合、その命令のＳＶａｌタグは初期値のゼロ（０）を保持する。現在の命令の少なくとも１つのオペランドがＳＶａｌである場合、ブロック３２４に示される通り、そのＳＶａｌタグが宛先に伝達され、それ故に宛先のＳＶａｌタグが１に設定される。少なくとも１つの命令のオペランドのＳＶａｌタグがＳＶａｌである場合、すなわちそれが１に設定されている場合、ブロック３３０に示される通り、その命令に関連付けられたＳＶａｌタグが１に設定される。ブロック３４０に示される通り、少なくとも１つの命令のオペランドが１に設定されたＳＶａｌを有する場合、命令の検査が迂回される。ブロック３５０に示される通り、命令が迂回されたかどうかを判断する検査が行われることがある。命令が迂回されていない場合、ブロック３６０に示される通り、命令が実行される。命令の実行が迂回されている場合、ブロック３７０に示される通り、次の命令が取得され、ブロック３２０において動作フローが継続する。同様に、ブロック３６０に示される通り、現在の命令が実行された後に、ブロック３７０に示される通り、次の命令が取得され、ブロック３２０において動作フローが継続する。命令を実行する際に、命令のＳＶａｌタグの値が、宛先のレジスタ（群）にコピーされる。
【００１７】
命令がロードであり、それがキャッシュをミスした場合、その宛先のＳＶａｌタグが１に設定される。命令がロードであり、それがキャッシュをヒットしたが、その供給元のオペランドの１つのＳＶａｌタグが１に設定されている場合、その宛先のレジスタのＳＶａｌタグが１に設定される。即座に利用可能なオペランドを備えた命令のＳＶａｌタグは、ゼロ（０）に設定される。１つの実施例において、推測的実行の間に保存バッファが使用される場合、ＳＶａｌタグが保存バッファを通じて伝達されることがある。この実施例において、保存バッファは、１ビットの形式のＳＶａｌタグで増加されることがある。保存命令が保存バッファに書き込むと、その命令のＳＶａｌタグが保存バッファに伝達される。ロード命令が保存バッファから読み取ると、保存バッファのエントリーにあるＳＶａｌタグが、保存バッファから検索されたデータと共にコピーされる。１つの実施例において、保存バッファへの書き込みを許可する前に、保存命令が２つの分類に区別される。保存命令の第１の分類には、アドレス生成レジスタのオペランドがスクラッチ値である保存命令が含まれる。保存命令の第２の分類には、アドレス生成レジスタのオペランドがスクラッチ値でないスクラッチ値としてマークを付けられた保存命令が含まれる。第１の分類については、宛先のアドレスが認識されていないため、ＳＶａｌタグが伝達されない。第２の分類については、宛先のアドレスが認識されているため、ＳＶａｌタグが保存バッファに伝達される。ロードは通常通り処理される。
【００１８】
図４は、ここで説明される方法の実施例による推測式プロセッサにおける命令を処理する際に行われる動作フローを示したものである。命令のＳＶａｌタグは、その命令がパイプラインで処理され、推測式プロセッサのスケジューラにより処理される方法に影響を与える。ＳＶａｌタグがゼロ（０）に設定されているか、又はその他の値に設定されているかに応じて、命令は異なって処理される。１つの実施例において、配線の設計者はＳＶａｌタグを伝達するかどうかを選択することがある。他の実施例において、伝達された値が信頼性のないものであることが高度に見込まれるまで、ＳＶａｌタグが伝達されない。１つの実施例において、ブロック４１０に示される通り、命令が取得された後に、ブロック４１２に示される通り、その命令のＳＶａｌタグが１に設定されているかどうかを判断するために検査が行われる。命令のＳＶａｌタグが１に設定されていない場合、すなわちゼロ（０）に設定されている場合、ブロック４１４に示される通り、命令が通常通り処理される。そうでない場合、ブロック４２０に示される通り、動作フローが命令の種類に基づいて進行する。ブロック４３０に示される通り、命令がロード命令である場合、ブロック４３２に示される通り、命令が取り消され、ＳＶａｌタグが宛先に伝達される。
【００１９】
ブロック４４０に示される通り、命令が保存である場合、ブロック４４２に示される通り、それがＳＶａｌであるかどうかを判断するために宛先アドレスが検査される。宛先アドレスがＳＶａｌである場合、命令（すなわち保存）が取り消される。保存値（すなわちデータ）がＳＶａｌから引き出されると、ブロック４４６に示される通り、ＳＶａｌタグが宛先に伝達される。アドレスと前記値の双方がＳＶａｌでない場合、保存が通常通り実行される。１つの実施例において、ブロック４８０に示される通り、命令が算術演算である場合、ブロック４８２に示される通り、それが取り消され、ＳＶａｌタグが宛先に伝達されない。
【００２０】
ブロック４６０に示される通り、命令が直接分岐である場合、直接分岐が依存するフラグ又はレジスタがＳＶａｌであるときに、ブロック４６２に示される通り、分岐の目的物が使用されず、分岐の指示が分岐予測器から導き出される。すなわち、分岐が依存するフラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）が、分岐予測器から導き出された値で書き込まれる。同様に、分岐が依存するフラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）の補足を表すフラグとプレディケイト（ｐｒｅｄｉｃａｔｅ）が、分岐予測器から導き出された値で書き込まれる。例えば、得られた“等しくない場合の分岐”（ＢＮＥ）のプレディケイト（ｐｒｅｄｉｃａｔｅ）は、等しくないフラグ、又は真に設定される状態を結果として生じ、等しいフラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）に偽が書き込まれることがある。フラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）の値が分岐予測器から導き出されると、フラグ又はプレディケイト（ｐｒｅｄｉｃａｔｅ）のＳＶａｌタグがクリアされ、以後の分岐が分岐予測器に従う。ブロック４５０に示される通り、命令が間接分岐である場合、ブロック４５２に示される通り、分岐の目的物が分岐予測ユニットから取得される。
【００２１】
ブロック４７０に示される通り、命令が条件付である場合、その命令に関連付けられたプレディケイト（ｐｒｅｄｉｃａｔｅ）とフラグは、分岐予測ユニットに従うことで解決される。しかし、プレディケイト（ｐｒｅｄｉｃａｔｅ）又はフラグが認識されていない場合、条件付の動作の宛先とプレディケイト（ｐｒｅｄｉｃａｔｅ）の命令がＳＶａｌとしてマークを付けられる。すなわち、ブロック４７２に示される通り、適切なプレディケイト（ｐｒｅｄｉｃａｔｅ）とフラグが認識されているかどうかを判断するために検査が行われる。それが認識されていない場合、ブロック４７６に示される通り、それにもかかわらず値がプレディケイト（ｐｒｅｄｉｃａｔｅ）の予測器及び／又は分岐予測器に従う。このように、信頼性の疑わしいプレディケイト（ｐｒｅｄｉｃａｔｅ）に基づく経路が除外され、プレディケイト（ｐｒｅｄｉｃａｔｅ）の予測器及び／又は分岐予測器に基づく更に信頼性のある経路選択が用いられる。１つの実施例において、プレディケイト（ｐｒｅｄｉｃａｔｅ）又は条件付が１に設定されているＳＶａｌタグを有する場合に、ＳＶａｌタグが宛先に伝達されるように、プレディケイト（ｐｒｅｄｉｃａｔｅ）と条件付が供給元のオペランドと同様の方法で処理されることがある。
【００２２】
１つの実施例において、単にＳＶａｌとＲＶａｌとしてデータと命令にマークを付けることを用いるのではなく、追加のマークが用いられることがある。１つの実施例において、ゼロ（０）の値を有するＳＶａｌタグがＲＶａｌであり、１の値を有するＳＶａｌタグがＳＶａｌであり、２の値を有するＳＶａｌタグがＰＶａｌであるように、プレディケイト（ｐｒｅｄｉｃａｔｅ）の値又はＰＶａｌが追加されることがある。このように、値の予測、又は概算の正確な値に対する正確な値の損失表示が、スクラッチ値の代わりに利用されることがある。この実施例において、ＰＶａｌタグのある命令の実行は、予測値で完了されることがある。このように、プロセッサは、周知及び／又は独自の内部アルゴリズム、ロジック、機構、及び他の技術に基づいてどのように進行するかについて、インテリジェントな選択を行うことがある。
【００２３】
図５は、ここで説明されるシステムと方法の実施例による状態機械を示したものである。１つの実施例において、プロセッサは、状態機械に従って前述の命令のタグを実施し得る。どの命令５１１が次に実行されるかを分岐予測器５１０が選択した後に、ブロック５１２に示される通り、命令がデコードされる。ブロック５１４に示される通り、次に命令と関連付けられたＳＶａｌタグ５１８により必要なデータを含むレジスタ５１６が読み取られる。レジスタが、関連付けられたレジスタのデータがスクラッチ値又は信頼性のない値であることを示すＳＶａｌタグを有する場合、経路５２２を介して示される通り、ＳＶａｌタグが、現在の命令の何らかの宛先のＳＶａｌタグに伝達される。前述の通り、ＳＶａｌタグはまた、プレディケイト（ｐｒｅｄｉｃａｔｅ）やフラグ等を通じて伝達されることがある。更に、ＳＶａｌタグは、命令自体に伝達される。
【００２４】
経路５２４を介して示される通り、現在の命令に対する少なくとも１つのオペランドがＳＶａｌタグによって示されるＳＶａｌである場合、ブロック５３０に示される通り、現在の命令は、特別にＳＶａｌの実行方法に従って実行される。すなわち、命令の実行はほとんどの場合に取り消される。オペランドのレジスタが、ＳＶａｌタグによりオペランドがＲＶａｌであることを示すと、ブロック５３２に示される通り、命令の実行が進行する。ブロック５３２の命令の実行の間に分岐が行われなければならず、その分岐がＳＶａｌから生じている場合、分岐予測誤り信号５３４が分岐予測器に伝えられる。命令の実行により、ブロック５４０に示される通り、レジスタのライトバック（ｗｒｉｔｅｂａｃｋ）ユニットを介して命令の結果がレジスタ５１６に書き戻されることがある。
【００２５】
前述の明細書において、本発明が、その特定の実施例を参照して説明された。特許請求の範囲に示される本発明のより広い要旨と範囲を逸脱することなく、多様な改良と変更が行われ得ることは明らかである。従って、明細書と図面は、限定的な意味ではなく、説明的な意味と考えられる。
【図面の簡単な説明】
【００２６】
【図１Ａ】ここで説明されるシステムと方法が実施され得るハードウェア環境を示したものである。
【図１Ｂ】ここで説明されるシステムと方法によるＳＶａｌタグを有するプロセッサの実施例のいくつかの内部構成要素を示したものである。
【図２Ａ】ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−３２アーキテクチャに準拠するプロセッサの実施例を示したものである。
【図２Ｂ−１】ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−３２アーキテクチャに準拠するプロセッサの実施例を示したものである。
【図２Ｂ−２】ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−３２アーキテクチャに準拠するプロセッサの実施例を示したものである。
【図２Ｂ−３】ここで説明されるシステムと方法によるＳＶａｌタグを有し、ＩｎｔｅｌのＩＡ−３２アーキテクチャに準拠するプロセッサの実施例を示したものである。
【図３】ここで説明される方法の実施例による命令とそのオペランドを処理する際に行われる動作の一般的なフローを示したものである。
【図４】ここで説明される方法の実施例による推測式プロセッサにおける命令を処理する際に行われる動作フローを示したものである。
【図５】ここで説明されるシステムと方法の１つの実施例による状態機械を示したものである。
【図１Ａ】
2005508546.tif 000003
【図１Ｂ】
2005508546.tif 000004
【図２Ａ】
2005508546.tif 000005
【図２Ｂ−１】
2005508546.tif 000006
【図２Ｂ−２】
2005508546.tif 000007
【図２Ｂ−３】
2005508546.tif 000008
【図３】
2005508546.tif 000009
【図４】
2005508546.tif 000010
【図５】
2005508546.tif 000011
【国際公開パンフレット】
2005508546.tif 000012
2005508546.tif 000013
2005508546.tif 000014
2005508546.tif 000015
2005508546.tif 000016
2005508546.tif 000017
2005508546.tif 000018
2005508546.tif 000019
2005508546.tif 000020
2005508546.tif 000021
2005508546.tif 000022
2005508546.tif 000023
2005508546.tif 000024
2005508546.tif 000025
2005508546.tif 000026
2005508546.tif 000027
2005508546.tif 000028
2005508546.tif 000029
2005508546.tif 000030
2005508546.tif 000031
2005508546.tif 000032
2005508546.tif 000033
2005508546.tif 000034
【国際調査報告】
2005508546.tif 000035
2005508546.tif 000036
2005508546.tif 000037