(57)【要約】本発明は、実行時に見込みポインタ値が識別され、かつ対応する記憶位置の内容がキャッシュ階層にプリフェッチされて有効メモリアクセスレイテンシを減らすことができるような技術を提供する。ある実現形態では、１若しくは複数の書き込み可能記憶域がプロセッサアーキテクチャに画定され、記憶アドレス空間の一部を区切る。
2005518601.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
レジスタと、
１若しくは複数の符号化された値に基づきメモリアドレスのサブセットを区切るような少なくとも１つの書き込み可能な記憶装置と、
前記レジスタに宛てられた値と前記メモリアドレスの前記区切られたサブセットとの対応に基づきプリフェッチを開始するようなプリフェッチ機能構造とを有することを特徴とするプロセッサ。
【請求項２】
アドレス計算に応答する論理を更に有し、
前記論理が、前記計算されたアドレスと前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記レジスタへの値の記憶に応答する論理を更に有し、
前記論理が、前記記憶された値と前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始することを特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項４】
前記レジスタ宛の前記値と前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始するようなアドレス照合論理を更に有し、
前記照合が、アドレス計算と前記レジスタへの記憶との間のパイプラインステージで実施されることを特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項５】
前記レジスタ宛の前記値が、アーキテクチャのレジスタまたはそれに対応するリオーダバッファ状態に宛てられることを特徴とする請求項１乃至請求項４のいずれか１つに記載のプロセッサ。
【請求項６】
前記レジスタが、作動レジスタセットのレジスタであることを特徴とする請求項１乃至請求項５のいずれか１つに記載のプロセッサ。
【請求項７】
前記作動レジスタセットが、特定のスレッドまたはプロセスに対応し、
前記メモリアドレスの前記区切られたサブセットが、前記特定のスレッドまたはプロセスによってまたは前記特定のスレッドまたはプロセスのために動的に割り振られた位置に対応することを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記少なくとも１つの書き込み可能な記憶装置が、メモリアドレスの連続範囲を区切るような内容を有する１対のレジスタを含むことを特徴とする請求項１乃至請求項７のいずれか１つに記載のプロセッサ。
【請求項９】
実行時に、前記区切られたサブセットが、ヒープに対応するようなある範囲のメモリアドレスをカバーすることを特徴とする請求項１乃至請求項８のいずれか１つに記載のプロセッサ。
【請求項１０】
対応するプリフェッチ命令が命令シーケンスに存在しないで前記プリフェッチが前記プロセッサによって実施されることを特徴とする請求項１乃至請求項９のいずれか１つに記載のプロセッサ。
【請求項１１】
自身によって自身のレジスタに宛てられた見込みポインタ値の検出に基づきメモリからデータを自動的にプリフェッチするようなプロセッサ。
【請求項１２】
前記見込みポインタ値検出が、計算されたアドレスと前記メモリの定義済領域との対応に基づくことを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記メモリの前記定義済領域が、少なくとも１つの書き込み可能な記憶装置の内容によって区切られることを特徴とする請求項１２に記載のプロセッサ。
【請求項１４】
前記メモリの前記定義済領域が、メモリアドレスの範囲を画定するような少なくとも１対のレジスタの内容によって区切られることを特徴とする請求項１２に記載のプロセッサ。
【請求項１５】
前記見込みポインタ値検出が、計算されたアドレスと前記メモリの定義済領域との対応に基づくことを特徴とする請求項１１、１２、１３、１４のいずれか１つに記載のプロセッサ。
【請求項１６】
コンピュータシステムにおいて少なくとも一部のデータを自動的にプリフェッチする方法であって、前記方法が、
レジスタをターゲットにするような第１の命令を含む命令シーケンスを実行する過程と、
対応するプリフェッチ命令が前記命令シーケンスに存在しないで、前記第１の命令を実行した結果として前記レジスタ宛の見込みポインタ値に対応するデータのプリフェッチを開始する過程とを含むことを特徴とする方法。
【請求項１７】
前記レジスタの内容をアドレス値として用いるようなメモリアクセス命令を実行する過程を更に含み、
前記プリフェッチの先の実行が、前記メモリアクセス命令がキャッシュから転送されることを可能にすることを特徴とする請求項１６に記載の方法。
【請求項１８】
アドレス指定可能なメモリのサブセットを区切るような少なくとも１つの書き込み可能な記憶装置の内容に対して前記見込みポインタ値を照合する過程を更に含むことを特徴とする請求項１６または請求項１７に記載の方法。
【請求項１９】
前記少なくとも１つの書き込み可能な記憶装置が、前記アドレス指定可能なメモリの前記区切られたサブセットの少なくとも１つの連続部分の境界を符号化するような１対のレジスタを含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記区切られたサブセットが、前記命令シーケンスによってまたは前記命令シーケンスの過程でメモリが動的に割り振られるようなヒープに対応することを特徴とする請求項１８または請求項１９に記載の方法。
【請求項２１】
前記ヒープの境界に対応するように前記少なくとも１つの書き込み可能な記憶装置を初期化する過程を更に含むことを特徴とする請求項２０に記載の方法。
【請求項２２】
ロック状態を記憶するために用いられるメモリアドレスの範囲に対応するように前記少なくとも１つの書き込み可能な記憶装置を初期化する過程を更に含むことを特徴とする請求項１８、１９、２０、２１のいずれか１つに記載の方法。
【請求項２３】
前記命令シーケンスにおいてプリフェッチ命令に基づき少なくとも他のデータをプリフェッチする過程を更に含むことを特徴とする請求項１６乃至２２のいずれか１つに記載の方法。
【請求項２４】
メモリアクセスストライドの予測に基づき少なくとも他のデータをプリフェッチする過程を更に含むことを特徴とする請求項１６乃至２２のいずれか１つに記載の方法。
【請求項２５】
プロセッサを作動する方法であって、
前記プロセッサのレジスタに宛てられた見込みポインタ値を検出する過程と、
前記見込みポインタ値に対応する記憶データからプリフェッチする過程とを含むことを特徴とする方法。
【請求項２６】
前記見込みポインタ値を検出する過程が、定義済アドレスパターンと比較する過程を含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
前記見込みポインタ値を検出する過程が、レジスタファイルに格納されているデータ値を定義済アドレスパターンと比較する過程を含むことを特徴とする請求項２５、２６のいずれか１つに記載の方法。
【請求項２８】
前記見込みポインタ値を検出する過程が、
レジスタファイルまたはリオーダバッファに格納された値をスキャンする過程と、
前記スキャンされた値を定義済アドレスパターンと比較する過程とを含むことを特徴とする請求項２５、２６、２７のいずれか１つに記載の方法。
【請求項２９】
前記プロセッサが投機的実行をサポートし、
前記見込みポインタ値を検出する過程が、定義済アドレスパターンと、非投機的になるようなレジスタ状態を比較する過程を含むことを特徴とする請求項２５、２６、２７、２８のいずれか１つに記載の方法。
【請求項３０】
前記見込みポインタ値を検出する過程が、定義済アドレスパターンと、命令セットのある命令の実行に基づき計算されたアドレス値を比較する過程を含むことを特徴とする請求項２５乃至２９のいずれか１つに記載の方法。
【請求項３１】
前記定義済アドレスパターンが、前記プロセッサの少なくとも１つの書き込み可能な記憶装置の内容によって画定されることを特徴とする請求項２６乃至３０のいずれか１つに記載の方法。
【請求項３２】
前記定義済アドレスパターンが、メモリアドレスの１若しくは複数の連続範囲を区切ることを特徴とする請求項２６乃至３０のいずれか１つに記載の方法。
【請求項３３】
前記定義済アドレスパターンが、記憶域がそこから動的に割り振られるようなメモリのサブセットを区切ることを特徴とする請求項２６乃至３０のいずれか１つに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリフェッチ技術に関し、特に、プロセッサによる見込みポインタ値（likely pointer value）の検出に基づく自動プリフェッチに関する。
【背景技術】
【０００２】
コンピュータシステムは通常、記憶装置及び１若しくは複数のプロセッサ及び／または実行ユニット等を含む。記憶装置は情報を保管するリポジトリとして働き、その一方でプロセッサは記憶装置から情報を読み出し、情報を演算・加工し、それを記憶装置に戻して格納する。プロセッサ速度及び記憶装置のサイズが増大するにつれて、任意の格納された情報をアドレス指定するプロセッサの能力とそれを迅速に供給する記憶装置の能力との間でミスマッチが増大してきている。このミスマッチに対処するために、記憶装置は通常、当該分野ではよく理解されているキャッシング技術を用いて階層として構成される。
【０００３】
一般に、メインメモリにアクセス（例えば読み出しまたは書き込み）する際の平均レイテンシの問題を減らすために、キャッシュを用いることができる。キャッシュは、通常、小型の特別に構成された高速メモリであり、メインメモリに表示される情報のごく一部を表示する。メインメモリ（大容量の比較的低速なメモリ）とプロセッサの間にキャッシュ（小容量の比較的高速な高価なメモリ）を配置することによって、記憶装置は全体として、プロセッサからのかなりの数の要求をキャッシュの速度で満たし、それによってシステムの全体レイテンシを減少させることができる。一部のシステムでは、マルチレベルのキャッシュを画定することができる。
【０００４】
プロセッサが要求するデータがキャッシュにあるとき（「ヒット」）、キャッシュの速度で要求が満たされる。しかし、プロセッサが要求するデータがキャッシュにないとき（「ミス」）、プロセッサは、より低速なメインメモリからデータが転送されるまで待たなければならないので、結果的にレイテンシが長くなる。通常、データがメインメモリから転送されている間は、有益な作業は一時中断される。従来から知られているように、あるアプリケーションまたは実行ランにおけるキャッシュミスの頻度は、他におけるキャッシュミスの頻度と比べてずっと高い。特に、一部のデータベースシステムに対するアクセスは、一部の科学技術アプリケーションまたはエンジニアリングアプリケーションよりも高い頻度で、キャッシュにおいてミスする傾向にある。一般に、キャッシュミス頻度のそのようなばらつきは、メモリアクセスシーケンスの異なる空間的及び時間的局所性特性に原因を求めることができる。
【０００５】
一部のアプリケーション、特にアレイアクセスによって特徴付けられるようなアプリケーションでは、ハードウェア技術を用いて後続のアクセスを予測することができる。ストライド予測技術及び関連するハードウェア・プリフェッチ戦略はその一例である。しかしながら、多くのアプリケーションでは、ハードウェアがメモリアクセスシーケンスの差異を認識しかつこれを予測することは困難であり、ハードウェアの代わりにまたはハードウェアに追加してソフトウェア技術を利用することができる。例えば、キャッシュヒットの確度を増しそれによって見かけ上のメモリアクセスレイテンシを向上させるべく、一部のコンピュータシステムは、メモリからキャッシュへデータをプリフェッチするための命令を定める。ソフトウェア（例えばプログラマまたはコンパイラのいずれか）がプリフェッチの機会を確認できるように妥当な位置にあることが前提条件である。
【０００６】
残念ながら、あるクラスのアプリケーションに対して、従来のハードウェア及びソフトウェア・プリフェッチ技術は特に有効であるわけではない。例えば、一部のアプリケーションでは、ポインタを用いてトラバースされるようなデータ構造で表示されるデータにプロセッサがいかにうまくアクセスできるかによって性能が決定される。特に、コンポーネントオブジェクトが動的に割り振られかつ実行の間中解放され、アクセスが高度の空間的及び時間的局所性を示さないような複雑なデータ構造においては、従来技術によってアクセスパターンを見分けることは困難であるかもしれない。リレーショナルデータベースシステムに通常用いられるようなデータ構造は、しばしばそのようなプリフェッチの課題を呈する。
【発明の開示】
【課題を解決するための手段】
【０００７】
上記課題を解決するため、実行時に見込みポインタ値が識別され、かつ対応する記憶位置の内容がキャッシュ階層にプリフェッチされて有効メモリアクセスレイテンシを減らすことができるような技術が開発された。特に、ある実現形態では、１若しくは複数の書き込み可能記憶域がプロセッサアーキテクチャに画定され、記憶アドレス空間の一部を区切る。
【発明を実施するための最良の形態】
【０００８】
以下の記述は、プロセッサにおけるメモリ参照値の検出に基づく自動プリフェッチを容易にするような一連のシステム、装置、方法及び技術を示す。模範的な実現形態は、プロセッサレジスタ宛の見込みポインタ値の検出に焦点を合わせ、１対の書き込み可能記憶装置を用いて自動化されたプリフェッチのための記憶アドレス値の関連範囲を区切る能力を有する。説明を簡単にするために、本明細書の記載は記憶アドレスの単一連続範囲に対応する値を強調するものとなっているが、より一般的には、ある実現形態において、アドレス指定可能な記憶装置の任意の（不連続範囲を含む）サブセットが識別され得る。１つの模範的なサブセットは、メモリがそこから動的に割り振られることができるようなヒープに対応する。しかしながら、より一般的には、望ましいサブセットは利用法固有のものである。同様に、本明細書の記載の多くは単一プロセッサ、プロセスまたはスレッドの関係を想定しているが、本発明に基づく一部の実現形態は、マルチプロセッサの各プロセッサ、実行の各プロセス及び／または各スレッドに対してカスタマイズ可能な自動化されたプリフェッチ機能を与える。従って、上記に鑑みて、しかしこれに制限されることなく、ある種の例示的な利用法についてここで述べる。
【０００９】
図１は、本発明のある実施例に基づき自動化されたプリフェッチ技術を用いて一部の記憶装置レイテンシが少なくとも部分的に隠蔽され得るような記憶階層を含むような例示的なプロセッサ１００の機能単位を示す。プロセッサ１００の記憶階層は、次のレベルキャッシュ１０２、１０２Ａ、メインメモリ１０４及び任意のレベル（特に図示せず）の追加キャッシュまたはバッファリングに加えてロード／格納ユニット１１０に関連するデータキャッシュ１０１を含む。プロセッサ１００のデザインは、ある種のＳＰＡＲＣアーキテクチャベースプロセッサのデザインを彷彿とさせ、例示的な１組の実行ユニット、即ち、ロード−格納ユニット１１０、整数実行ユニット１３０及び浮動小数点ユニット１５０を含む。
【００１０】
ＳＰＡＲＣアーキテクチャにおいて一般的な記述及び／または用語は、本明細書において只説明のために用いられ、本明細書中の説明に基づき、当業者は、多種多様なプロセッサインプリメンテーション及びアーキテクチャに適した本発明の利用法を理解することになるであろう。ＳＰＡＲＣアーキテクチャベースプロセッサは、米国カリフォルニア州パロアルト（Palo Alto）のサン・マイクロシステムズ社（Sun Microsystems, Inc）から入手可能である。ＳＰＡＲＣ商標は、米国及びその他の国においてスパーク・インターナショナル社（ＳＰＡＲＣ International, Inc.）の商標または登録商標であり、同社の許可を受けて用いられる。ＳＰＡＲＣ商標が付された商品は、サン・マイクロシステムズ社が開発したアーキテクチャに基づく。
【００１１】
図１において、レジスタ１２０のための記憶装置（あるインプリメンテーションでは、リネーム機能、リオーダバッファまたは他のアウトオブオーダー（out-of-order）実行及び／または投機的実行機能を含む）は、整数実行ユニット１３０と統合されている。他のインプリメンテーションでは、他の形式またはインプリメンテーションのアーキテクチャの状態に対する記憶装置を利用することができる。記憶装置の好適な形式及びインプリメンテーションは、アーキテクチャ固有かつプロセッサインプリメンテーション固有のものである。しかしながら、いかなる場合でも、メモリを参照する（またはメモリにアドレス指定する）のに適した記憶装置をターゲットにするような命令（または動作）を識別し、更に、そのようなメモリの定義可能サブセット（または部分）でそのような記憶装置宛の値の対応を検出するための機能が本発明に基づき与えられる。そのようなターゲット識別及び対応検出に基づいて、プリフェッチが開始される場合がある。例えば、図１の関係では、プリフェッチ動作は、ロード待ち行列１１１の利用可能な位置に挿入され得る。
【００１２】
そのような場合に常にプリフェッチが開始される必要があるわけではないことに留意されたい。例えば、キャッシュ（例えばデータキャッシュ１０１）にすでに常駐しているラインをターゲットにするようなプリフェッチは、通常、行われないことになる。同様に、すでに待ち行列に入れられたロードまたは格納動作が所望のプリフェッチとして同一キャッシュラインをターゲットにするならば、待ち行列に入れられたロードまたは格納動作はプリフェッチを未然に防ぐことができる。あるインプリメンテーションでは、ロード待ち行列の深さまたはメモリアクセスバンド幅が不十分であるとき、プリフェッチなしで済ませることが望ましい場合がある。一般に、特定のインプリメンテーションで様々な従来のロード／格納技術を用いることができ、そのような技術は当該分野でよく理解されている。どのような場合でも、開始されると、そのような自動的に生成されるプリフェッチは、命令ストリームにおいてプリフェッチ命令に対応する必要はなく（そして通常は対応しない）、プリフェッチは、従来のストライド予測技術が不適当であるとわかるような命令シーケンスに対して自動的に生成され得る。とは言うものの、本発明に基づく技術または機能と、ソフトウェアサポートプリフェッチ（例えばコンパイラ挿入プリフェッチ命令）及び／または従来のハードウェアサポートプリフェッチとを組み合わせることを妨げるものは何もない。
【００１３】
典型的なロード／格納プロセッサアーキテクチャ内のデータにアクセスするために、プログラム命令（例えばロード型命令及び格納型命令）は通常、レジスタに格納された完全特定ポインタ値で動作することになる。レジスタＲ２１に格納されるアドレスによって識別されるメモリの内容をレジスタＲ２２にロードするようなロード命令
ＬＤ ［Ｒ２１］，Ｒ２２
は、典型的なものである。一般に、Ｒ２１に存在するポインタ値は、先のロードの結果であるか（例えば連結リスト縦断の場合）、アドレス計算の結果であるか、或いは特定のプロセッサアーキテクチャによって画定される他の動作の副産物であり得る。特定の実現形態によって処理される各々のケースでは、レジスタ（例えばレジスタＲ２１）宛の値が、それがポインタ値であることを示唆するようなパターンに整合することを検出するべく、本発明に基づく技術を利用する。
【００１４】
本発明に基づく技術は、記憶アドレスの連続範囲に、ましてや単一連続範囲に必ずしも限定されないが、本発明の多くの側面は、記憶アドレスの単一連続範囲に対応するような検出パターンに従って理解されることになる。そのようなパターンに対する好適な符号化技術及び比較技術は単純明快である。それでもなお、本明細書の記載に基づき、当業者は、アドレス指定可能な記憶域の他のサブセットを区切るために用いられ得るような他のパターンへの好適な拡張を理解することになる。
【００１５】
上記を考慮して、しかしこれに制限されることなく、ポインタによって識別または参照されるデータは、単純な範囲によって説明されることが可能なメモリの領域にしばしば存在する。実際、ヒープにおける関心のあるデータへのほとんどのポインタが0xFFFF0000から0xFFFFFFFFまでの可能な値の範囲に対応するような位置に現れることを決定または発見することができる。言うまでもなく、前述の範囲を画定するような値は全く任意である。一般に、そのような範囲は、ヒープ自体の現在の境界またはその特定の部分に対応し得る。特定の範囲が何であれ、プロセッサのレジスタ宛の値は、見込みポインタ値を識別するために範囲に対して比較されることがある。
【００１６】
図２は、例示的なメモリ参照値検出機構の動作を説明する。プロセッサ２００における様々な実行ステージのどのステージでも（例えば、２０１Ａ、２０１Ｂ、２０１Ｃ．．．２０１Ｄ）、実行命令または動作は、レジスタ宛の値を生成することができる。一般に、プロセッサ固有の１組の命令、動作またはその変形は識別可能であり、これはプロセッサ２００のそのようなレジスタ（特に図示せず）をターゲットにする。言うまでもなく、多くのプロセッサインプリメンテーションにおいて、アーキテクチャ技術を用いてレジスタリネーミング及び／または投機的実行またはアウトオブオーダー実行を行うことができる。従って、プロセッサのレジスタをターゲットにするような命令または動作が、そのような状態がどのように一時的または投機的に表示され得るかにかかわらず、プロセッサのアーキテクチャの状態をターゲットにするようなこれらの命令または動作を包含することは、理解されるであろう。本明細書の記載に基づき、当業者は、本発明の特定のプロセッサ利用法に対するアーキテクチャの状態の関連リポジトリ及び命令または動作の関連セットを理解するであろう。
【００１７】
図２は、アーキテクチャの状態の表示２２０宛の値と、プロセッサ２００によってアドレス指定可能なメモリ２０４の対応するサブセット２０５Ａを識別するような１対の記憶装置２３０によって画定されるアドレスの範囲２０５との比較を示す。前述のように、アドレス指定可能なメモリ２０４のサブセット２０５Ａは、ヒープに、或いはアドレス指定可能なメモリの他の関連サブセットに対応し得る。ある実現形態では、サブセット２０５Ａは、一部の性能クリティカルデータ構造に用いられるアドレスの範囲に対応し得る。ある実現形態では、（例えば記憶装置２３０による）パターン記述のプロセッサ表示は、自動プリフェッチ機構の焦点のプログラマ制御を可能にするべくアプリケーションコードによって書き込み可能である。他の実現形態では、パターン記述の定義は、実行または動作環境の制御下にある場合がある。例えば、パターン記述は、ヒープの現在の広がり（エクステント）に対応するべくメモリアロケータによって維持され得る。
【００１８】
一般に、予想ポインタ値は様々な実行ステージのどのステージででも（例えば、２０１Ａ、２０１Ｂ、２０１Ｃ．．．２０１Ｄ）生成されることができ、好適なステージは通常プロセッサ及び命令または動作固有のものである。図３は、図示されたＳＰＡＲＣアーキテクチャベースプロセッサの命令の実行におけるパイプラインステージを示し、レジスタ宛の見込みポインタ値の識別が実施され得るようなパイプライン実行の様々な好適なステージを識別する。特に、図３は、フェッチ３０１、デコード３０２、グルーピング３０３、実行３０４、キャッシュアクセス３０５、ロードミス３０６、整数パイプ待ち３０７、トラップ解消（trap resolution）３０８及びライトバック３０９の９つのステージを有するパイプラインを示す。実行ステージ３０４では整数命令が実行され、仮想アドレスが計算される。ステージ３０５では、データキャッシュ（例えば、データキャッシュ１０１及び支持データＴＬＢ１０１Ａ、図１を参照）がアクセスされ、ヒット及びミスが決定される。後のステージ中では、ロードミスはロードバッファ（例えば、ロード待ち行列１１１、図１を参照）に入り、待ち状態及びトラップ（もしあれば）は消滅し、最終的にはステージ３０９で結果はレジスタ（例えばレジスタファイル１２０、図１を参照）に書き込まれ、命令が完遂される。
【００１９】
図３を参照すると、アドレス指定可能なメモリのサブセットに対応するようなパターンとの比較は、実行ステージ３０４の開始時に実施される場合がある。一般に、プリフェッチの開始はその後なるべく早く行われるか（例えば実行ステージ３０４それ自体の間）、或いはステージ３０９でレジスタ宛の値がレジスタ記憶域に実際に書き込まれるまで遅延されてもよい。一部の実現形態では、パターンまたは範囲に対する比較に適した値が利用可能であるような実行の特定のステージは、命令によって（または動作によって）または実行インスタンスによって異なってよい。例えば、ロード動作のある実行インスタンスによってメモリからレジスタ記憶へロードされた値は、データキャッシュアクセス（ステージ３０５）後またはその後に、例えばキャッシュライン充填後に、利用可能であり得る。一方で、（例えばアドレス計算の一部としての）算術計算の結果は、ステージ３０４で利用可能であり得る。一般に、レジスタ宛の結果値がサブセットアドレス指定可能なメモリを記述しているパターンと比較され得るような特定の実行ステージ及びオンチップ計算構造は、命令、プロセッサ及びインプリメンテーションに依存している。従って、見込みポインタ値に対するチェックの特定のタイミング及びそのようなチェックを実施するための計算構造の配置は、実現形態によって異なることになる。
【００２０】
本発明に基づき、プロセッサ実現形態のインプリメンテーションにおいて多種多様な他のデザインが利用できる。例えば、一部の実現形態では、見込みポインタ値チェックは全てのレジスタ境界（bound）値で事実上無差別に実施され得る。例えば、ある種のプロセッサアーキテクチャでは、結果のバストラヒックを観察することができる。他の実現形態では、ある種の計算構造またはパイプラインステージで見込みポインタ値チェックを実行することができる。代わりにまたは追加して、ある種の命令または動作の結果は焦点見込みポインタ値チェックであってもよい。そのような場合には、見込みポインタ値チェックは、命令タスク指名及び結果コミットメント論理に合わせることができる。特定のデザインが何であれ、本発明のある実施例に基づくプロセッサは、プロセッサによって、レジスタまたはアーキテクチャの状態の他の表示に宛てられた見込みポインタ値の検出に基づくメモリからのデータのプリフェッチを開始する。
【００２１】
図４は、本発明の実施例に基づくメモリ参照値検出機構の動作を示すフローチャートである。従来どおり、値は、適切な計算構造または本発明のプロセッサ利用法のパイプラインステージでモニタされる。図４では、命令のサブセットの結果は見込みポインタ値検出にターゲットにされる。よって、２つのチェックが強調される。第１に、全ての命令または動作のレジスタターゲティングサブセットの一部であるような命令または動作が特定される（４０１）。レジスタターゲティング命令は、ほとんどの命令セットアーキテクチャにおいて容易に認識される。例えば、一部のプロセッサインプリメンテーションでは、レジスタをターゲットにするような命令または動作は、デコード中に（またはデコードの結果として）マークされることがある。言うまでもなく、一部の実現形態（図４において特に図示せず）では、レジスタターゲティング命令のサブセットは、見込みポインタ値検出の焦点である場合がある。例えば、ある種の算術演算は、コンパイラによって生成されるアドレス計算命令シーケンスにおける最終段階（またはその後のステージ）として主に利用されることがある。従って、あるインプリメンテーションでは、そのような演算の結果値に見込みポインタ値検出の焦点となる。代わりにまたは追加して、ポインタ値の記憶域のためにレジスタのサブセットが偏重して用いられ、見込みポインタ値検出はそのようなレジスタをターゲットにするような命令に適切に焦点を合わせられることがある。
【００２２】
関連命令型（例えばレジスタターゲティング命令）の識別（もしあれば）後に、特定の結果値が、アドレス指定可能なメモリの関心のあるサブセットの記述であるようなパターンに対して比較される。関心のあるサブセットは、完全にインプリメンテーション固有のものであり得る。例えば、図４のフローチャートは、ヒープを区切るようなパターンを符号化するために１若しくは複数のマーカレジスタが利用されるような利用法を図示する。アドレス指定可能なメモリの他の部分は、他の利用法において望ましい場合がある。一般に、予想ポインタ値と、ベース／バウンド（base and bound）符号化またはベース／オフセット（base and offset）符号化との比較はそれぞれ非常に単純であり、ある種の挙動が良好なベース、バウンド及びオフセットに対しては、比較は特に効率的に計算され得る。アドレス指定可能なメモリ位置の単一連続範囲が多くのインプリメンテーションに適している一方で、他のインプリメンテーションは所望であれば複数の範囲（及び関連する記憶域、例えばマーカレジスタ４０３のセットの形式で）を与えることができる。例えば、複数のスレッドまたはプロセスに対して潜在的に異なる範囲をサポートし得るかアドレス指定可能なメモリの不連続サブセットをサポートするための実現形態がある。
【００２３】
一般に、アドレス指定可能なメモリの特定のサブセット（または範囲）が実行時に定義可能であることは望ましい。図４は、ヒープの現在のエクステントに対応するような見込みポインタ値の検出をサポートするべくパターン（１若しくは複数のマーカレジスタ４０３において符号化される）を維持するためのそのようなランタイム機能の特定の利用法を示す。一般に、そのようなマーカレジスタまたは他の好適な符号化の内容は、アドレス指定可能なメモリの関心のあるサブセットに対応するように初期化されることができ、一部の実現形態では、そのような符号化は、関心のあるサブセットが変わるとき（例えばヒープが拡大または縮小されるとき）に更新され得る。従って、マーカレジスタ４０３が、プログラム制御下で書き込み可能な記憶装置、例えば、マシン固有レジスタ（machine specific register）としてあるような実現形態もある。それにもかかわらず、アドレス指定可能な記憶装置の関心のあるサブセットがプログラムの特定のアプリケーションとは別個に画定され得るような利用法では、固定のサブセットまたは範囲符号化が好適である場合がある。本明細書の記載は、種々のパイプラインステージでインタセプト及び比較され得るような値との関連でなされているものがあるが、本発明のある実施例に基づく他の実現形態は、見込みポインタ値のためのレジスタまたは他のアーキテクチャの状態記憶域をスキャンし得る。
【００２４】
本発明について種々の実施例を参照して説明してきたが、これらの実施例は例示的なものであり、発明の範囲がこれらに限定されるものではないということは理解されるであろう。多くの変更、改変、付加、及び改良が可能である。例えば、本明細書の説明の多くはプリフェッチ及びアドレス指定可能なメモリの図示された関係に焦点を合わせているが、本発明の技術は、計算機環境に使用することができるような種々のアドレス指定可能な資源のための事前実行可能なアクティビティに適用され得る。上述のように、本発明の技術は、ハードウェアまたはソフトウェア指向であるような他のプリフェッチ機能と組み合わせて用いられてもよい。アドレス指定可能な記憶装置のサブセットを識別するために様々な好適なパターンを符号化し、同サブセットを識別するために様々な好適な物理構造を用いることができる。
【００２５】
「命令」及び「動作」なる語は、異なるもの、例えば、命令セット及び動作（マイクロコードまたは別のもの）に基づく命令を識別する文脈において用いられ得るが、そのような区別は本発明に照らして重要ではない。従って、命令なる語は請求項中に一般的に用いられているが、そのような語の範囲には、他で用いられ得るような区別には関係なく、命令、動作または類似の機能符号化、例えば演算コードやバイトコードなどが一般的な意味で当然含まれることは当業者であれば理解するであろう。同様に、ポインタ値（及び見込みポインタ値の検出）は仮想アドレス空間に通常画定されることになるが、他の定義（例えば、物理アドレス、リニアアドレス、インデックスなど）及び符号化はある種の利用法に好適であり得る。
【００２６】
より一般的には、本発明に基づく実現形態については特定の実施例に照らして述べてきた。これらの実施例は説明的なものであり、何ら限定する意図はない。従って、１つの例として本明細書に記載された部品に複数の例が適用され得る。種々の部品、動作及びデータ格納間の境界は幾分か任意であり、特定の図示された構成に照らして特定の動作が示される。機能性の他の割り振りは、想定され、かつ特許請求の範囲に含まれ得る。最終的に、模範的な構成において個別部品として示される構造及び機能性は、組み合わされた構造または部品として実行され得る。これら及び他の変更、改変、付加、及び改良は、特許請求の範囲に画定されるような本発明の範囲に含まれ得る。
【図面の簡単な説明】
【００２７】
【図１】種々のレベルのキャッシュメモリを含み、本発明のある実施例に基づき自動プリフェッチを行うべく本発明の技術が用いられ得るようなプロセッサアーキテクチャの例を示すブロック図である。
【図２】本発明に基づくメモリ参照値検出機構の動作を示す図である。
【図３】図示されたプロセッサの命令の実行におけるパイプラインステージを示し、レジスタ宛の見込みポインタ値の識別が実施され得るようなパイプライン制御の種々の好適なステージを識別するような図である。
【図４】本発明のある実施例に基づくメモリ参照値検出機構の動作を示すフローチャートである。フローチャートは、ヒープを区切るために１若しくは複数のマーカレジスタが用いられているような利用法を図示する。
【図１】
2005518601.tif 000003
【図２】
2005518601.tif 000004
【図３】
2005518601.tif 000005
【図４】
2005518601.tif 000006
【手続補正書】
【提出日】平成15年9月23日(2003.9.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサであって、
レジスタと、
１若しくは複数の符号化された値に基づきメモリアドレスのサブセットを区切るような少なくとも１つの書き込み可能な記憶装置であって、実行時には、前記区切られたサブセットが、メモリがそこから動的に割り振られるような少なくとも１つの範囲のアドレスをカバーするような前記記憶装置と、
前記レジスタに宛てられた値と前記メモリアドレスの前記区切られたサブセットとの対応に基づきプリフェッチを開始するようなプリフェッチ機能構造とを有することを特徴とするプロセッサ。
【請求項２】
アドレス計算に応答する論理を更に有し、
前記論理が、前記計算されたアドレスと前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記レジスタへの値の記憶に応答する論理を更に有し、
前記論理が、前記記憶された値と前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始することを特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項４】
前記レジスタ宛の前記値と前記メモリアドレスの前記区切られたサブセットとの照合に基づき前記プリフェッチを開始するようなアドレス照合論理を更に有し、
前記照合が、アドレス計算と前記レジスタへの記憶との間のパイプラインステージで実施されることを特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項５】
前記レジスタ宛の前記値が、アーキテクチャのレジスタまたはそれに対応するリオーダバッファ状態に宛てられることを特徴とする請求項１乃至請求項４のいずれか１つに記載のプロセッサ。
【請求項６】
前記レジスタが、作動レジスタセットのレジスタであることを特徴とする請求項１乃至請求項５のいずれか１つに記載のプロセッサ。
【請求項７】
前記作動レジスタセットが、特定のスレッドまたはプロセスに対応し、
前記メモリアドレスの前記区切られたサブセットが、前記特定のスレッドまたはプロセスによってまたは前記特定のスレッドまたはプロセスのために動的に割り振られた位置に対応することを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記少なくとも１つの書き込み可能な記憶装置が、メモリアドレスの連続範囲を区切るような内容を有する１対のレジスタを含むことを特徴とする請求項１乃至請求項７のいずれか１つに記載のプロセッサ。
【請求項９】
実行時に、前記区切られたサブセットが、ヒープに対応するようなある範囲のメモリアドレスをカバーすることを特徴とする請求項１乃至請求項８のいずれか１つに記載のプロセッサ。
【請求項１０】
対応するプリフェッチ命令が命令シーケンスに存在しないで前記プリフェッチが前記プロセッサによって実施されることを特徴とする請求項１乃至請求項９のいずれか１つに記載のプロセッサ。
【請求項１１】
自身によって自身のレジスタに宛てられた見込みポインタ値の検出に基づきメモリからデータを自動的にプリフェッチするようなプロセッサであって、
前記プロセッサが、前記レジスタ宛の値と前記メモリアドレスの前記区切られたサブセットとを比較することによって前記見込みポインタ値を検出し、
実行時には、前記区切られたサブセットが、メモリがそこから動的に割り振られるような少なくとも１つの範囲のアドレスをカバーするようなプロセッサ。
【請求項１２】
コンピュータシステムにおいて少なくとも一部のデータを自動的にプリフェッチする方法であって、前記方法が、
レジスタをターゲットにするような第１の命令を含む命令シーケンスを実行する過程と、
対応するプリフェッチ命令が前記命令シーケンスに存在しないで、前記第１の命令を実行した結果として前記レジスタ宛の見込みポインタ値に対応するデータのプリフェッチを開始する過程と、
アドレス指定可能なメモリのサブセットを区切るような少なくとも１つの書き込み可能な記憶装置の内容に対して前記見込みポインタ値を照合する過程とを含み、
前記区切られたサブセットが、前記命令シーケンスによってまたは前記命令シーケンスの過程でメモリが動的に割り振られるような少なくとも１つのアドレス範囲に対応することを特徴とする方法。
【請求項１３】
前記レジスタの内容をアドレス値として用いるようなメモリアクセス命令を実行する過程を更に含み、
前記プリフェッチの先の実行性能が、前記メモリアクセス命令をキャッシュがサービスすることを可能にすることを特徴とする請求項１２に記載の方法。
【請求項１４】
前記少なくとも１つの書き込み可能な記憶装置が、前記アドレス指定可能なメモリの前記区切られたサブセットの少なくとも１つの連続部分の境界を符号化するような１対のレジスタを含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記ヒープの境界に対応するように前記少なくとも１つの書き込み可能な記憶装置を初期化する過程を更に含むことを特徴とする請求項１２に記載の方法。
【請求項１６】
ロック状態を記憶するために用いられるメモリアドレスの範囲に対応するように前記少なくとも１つの書き込み可能な記憶装置を初期化する過程を更に含むことを特徴とする請求項１２、１４、１５のいずれか１つに記載の方法。
【請求項１７】
前記命令シーケンスにおいてプリフェッチ命令に基づき少なくとも他のデータをプリフェッチする過程を更に含むことを特徴とする請求項１２、１３、１４、１５、１６のいずれか１つに記載の方法。
【請求項１８】
メモリアクセスストライド予測手法に基づき少なくとも他のデータをプリフェッチする過程を更に含むことを特徴とする請求項１２、１３、１４、１５、１６のいずれか１つに記載の方法。
【請求項１９】
プロセッサを作動する方法であって、
前記プロセッサのレジスタに宛てられた見込みポインタ値を検出する過程であって、前記見込みポインタ値を検出する過程が、記憶域が動的に割り振られるようなメモリのサブセットを区切るような定義済アドレスパターンと比較する過程を含むような前記過程と、
前記見込みポインタ値に対応する記憶データからプリフェッチする過程とを含むことを特徴とする方法。
【請求項２０】
前記見込みポインタ値を検出する過程が、レジスタファイルに格納されているデータ値を定義済アドレスパターンと比較する過程を含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記見込みポインタ値を検出する過程が、
レジスタファイルまたはリオーダバッファに格納された値をスキャンする過程と、
前記スキャンされた値を定義済アドレスパターンと比較する過程とを含むことを特徴とする請求項１９、２０のいずれか１つに記載の方法。
【請求項２２】
前記プロセッサが投機的実行をサポートし、
前記見込みポインタ値を検出する過程が、定義済アドレスパターンと、非投機的になるようなレジスタ状態を比較する過程を含むことを特徴とする請求項１９、２０、２１のいずれか１つに記載の方法。
【請求項２３】
前記見込みポインタ値を検出する過程が、定義済アドレスパターンと、命令セットのある命令の実行に基づき計算されたアドレス値を比較する過程を含むことを特徴とする請求項１９、２０、２１、２２のいずれか１つに記載の方法。
【請求項２４】
前記定義済アドレスパターンが、前記プロセッサの少なくとも１つの書き込み可能な記憶装置の内容によって画定されることを特徴とする請求項１９、２０、２１、２２、２３のいずれか１つに記載の方法。
【請求項２５】
前記定義済アドレスパターンが、メモリアドレスの１若しくは複数の連続範囲を区切ることを特徴とする請求項１９、２０、２１、２２、２３のいずれか１つに記載の方法。
【請求項２６】
実行時に、前記区切られたサブセットが、ヒープと同一の広がりを持つ少なくとも１つの範囲のアドレスをカバーすることを特徴とする請求項１に記載の方法。
【請求項２７】
前記区切られたサブセットが、プログラム可能な範囲のアドレスをカバーすることを特徴とする請求項１に記載の方法。
【請求項２８】
実行時に、前記区切られたサブセットが、ヒープと同一の広がりを持つ少なくとも１つの範囲のアドレスをカバーすることを特徴とする請求項１１に記載の方法。
【請求項２９】
前記区切られたサブセットが、プログラム可能な範囲のアドレスをカバーすることを特徴とする請求項１１に記載の方法。
【請求項３０】
実行時に、前記区切られたサブセットが、ヒープと同一の広がりを持つ少なくとも１つの範囲のアドレスをカバーすることを特徴とする請求項１２に記載の方法。
【請求項３１】
前記区切られたサブセットが、プログラム可能な範囲のアドレスをカバーすることを特徴とする請求項１２に記載の方法。
【国際調査報告】
2005518601.tif 000007
2005518601.tif 000008
2005518601.tif 000009