(57)【要約】マイクロプロセッサの速度が向上するにつれて、プロセッサ性能は、データアクセス動作によってますます大きく影響されるようになっている。プロセッサが、動作の際に、データ検索時間が遅いためにデータを待つことを要求される場合、これは、プロセッサストールと呼ばれ、また、定量的用語では、プロセッサストールサイクルと呼ばれる。予想されるように、RAMメモリからのデータのプリフェッチングは、このプロセッサストールサイクルを低減するために遂行され、プロセッサベースのシステムにおけるプリフェッチングの目標は、プロセッサストールサイクルの際に被る処理時間ペナルティを低減することに置かれる。ハードウェア・ソフトウェア指向プリフェッチング結合アプローチは：プログラム流内に追加されるインストラクションの量を制限することで、インストラクション帯域幅に対する制約を軽減できること、及びハードウェア資源の追加の量を最小限に抑えられることから、最適な解決策であるといえる。従来の技術のように、ハードウェア或いはソフトウェアによるメモリ参照における規則性を検出することを目指す代わりに、本発明によるハードウェア・ソフトウェア指向プリフェッチング技術は、プログラム流内に明示的プリフェッチインストラクションを用いることなく、かつ、チップ面積の追加の量を最小限に抑えながら遂行される。プロセッサのインストラクション帯域幅を最小限に抑えるために、このソフトウェア・ハードウェア指向プリフェッチングアプローチにおいては、プリフェッチ領域とそれら領域の各々に対して用いられるべき各ストライドを指定するためにプロセッサのアーキテクチャレベルの所に配置された追加のレジスタが用いられる。本発明はによると、利点として、プロセッサによるインストラクションの処理がインストラクション帯域幅に与える影響は、アプリケーション内にこれらレジスタをセットするために挿入される追加のインストラクションの帯域幅に制限される。本発明によると、プリフェッチの頻度がアプリケーション内に含まれるメモリアクセスインストラクションの間隔によって制御される。
2005524171.tif 000002
【特許請求の範囲】
【請求項１】
外部RAMメモリにアクセスするためにメモリアクセスインストラクションを含むインストラクションデータを処理するためのプロセッサであって、
プリフェッチ動作のストライドを格納するための領域ストライドメモリ位置と、
前記外部RAMメモリ内のその内部に格納された前記プリフェッチ動作ストライドを適用するメモリ領域を示すデータを格納するためのメモリ領域識別子と、
前記外部RAMメモリからデータをプリフェッチするためのプリフェッチ回路とを備え、前記プリフェッチ回路は前記プリフェッチメモリ領域内のデータにアクセスするとき、前記プリフェッチメモリストライドに応答し、前記ストライドを用いて前記メモリからプリフェッチングすることを特徴とするプロセッサ。
【請求項２】
前記メモリ領域識別子は、前記プロセッサ内の少なくともプリフェッチメモリ開始アドレス用領域ベースレジスタを含むことを特徴とする請求項1記載のプロセッサ。
【請求項３】
前記メモリ領域識別子は、前記プロセッサ内の少なくともプリフェッチメモリサイズ用領域サイズレジスタを含むことを特徴とする請求項２記載のプロセッサ。
【請求項４】
前記領域ストライドメモリ位置は、前記プロセッサ内の少なくともプリフェッチストライド用領域ストライドレジスタを含むことを特徴とする請求項３記載のプロセッサ。
【請求項５】
前記少なくとも領域ストライドレジスタは可変であり、インストラクションデータの実行に伴ってプリフェッチ動作ストライドが格納されることを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記プロセッサは、プリフェッチストライドを動的に計算するための回路は備えないことを特徴とする請求項５記載のプロセッサ。
【請求項７】
プリフェッチメモリ開始アドレスレジスタ、プリフェッチメモリサイズレジスタ及びプリフェッチメモリストライドレジスタの形式にてセットのレジスタを格納するためのレジスタ検索テーブルを備えることを特徴とする請求項４記載のプロセッサ。
【請求項８】
前記検索テーブルは、その中に格納されている複数のプリフェッチメモリ開始アドレスレジスタの内からの、特定のプリフェッチメモリ開始アドレスによって割り出されることを特徴とする請求項７記載のプロセッサ。
【請求項９】
前記プロセッサは、プリフェッチストライド計算回路は備えないことを特徴とする請求項１記載のプロセッサ。
【請求項１０】
プリフェッチ動作を不能にするための回路を備え、この回路は前記メモリアクセスインストラクション内に含まれる前記プリフェッチング回路によるプリフェッチ動作を選択的に不能にするためインジケータに応答することを特徴とする請求項１記載のプロセッサ。
【請求項１１】
外部RAMメモリからデータをプリフェッチングするための方法であって、
プロセッサに、メモリ位置内に格納するために、外部RAM内のあるメモリ領域を決定できるためのデータと、そのメモリ領域内からデータをプリフェッチングする際に用いるためのストライドと、を提供するステップと、
そこからプリフェッチされるデータがその内部に格納されている領域を決定するステップと、
前記領域との関連で前記プロセッサ内に格納されているプリフェッチのストライドを決定するステップと、
前記プリフェッチストライドに基づいてあるサイズを有するデータブロックを定義するとともに、前記外部メモリ内の先にプリフェッチされたデータブロックのメモリ位置に基づいて開始位置を定義するステップと、
前記開始位置の所のデータブロックを宛先メモリ位置にコピーするステップと、を含むことを特徴とする方法。
【請求項１２】
前記プリフェッチストライドは、前記プロセッサにソフトウェアの実行によって供給され、前記プリフェッチストライドは、前記ソフトウェアによって識別されるある領域と関連付けられることを特徴とする請求項１１記載のデータをプリフェッチングする方法。
【請求項１３】
前記領域は、類似するデータを格納するために用いられ、これら類似するデータは同一ストライドを用いてアクセスされることを特徴とする請求項１１記載のデータをプリフェッチングする方法。
【請求項１４】
複数の異なるソフトウェアアプリケーションからのデータが同一の領域内に格納されることを特徴とする請求項１１記載のデータをプリフェッチングする方法。
【請求項１５】
前記領域は複数の領域から選択され、各領域はある関連するストライドを有し、これら関連するストライドは前記プロセッサ内に前記領域と関連させて事前に格納されることを特徴とする請求項１１記載のデータをプリフェッチングする方法。
【請求項１６】
その上にデータが格納されたメモリ媒体であって、このデータは、
プロセッサのメモリ内に第一のプリフェッチストライドを示すデータを格納するステップと、
前記プロセッサ内のメモリ内にその内部において前記第一のプリフェッチストライドが用いられるべきメモリの第一の領域を示すデータを格納するステップと、
を遂行するための実行可能なデータを示すことを特徴とするメモリ媒体。
【請求項１７】
前記第一の領域を示すデータは、前記メモリ媒体内に格納されている領域開始アドレスと領域長とを含むことを特徴とする請求項１６記載のメモリ媒体。
【請求項１８】
前記第一の領域を示すデータは、前記メモリ媒体内に格納された領域開始アドレスと領域終端アドレスとを含むことを特徴とする請求項１６記載のメモリ媒体。
【請求項１９】
前記媒体は、その内部にプリフェッチ動作を遂行するためのインストラクションを表すデータは含まないことを特徴とする請求項１６記載のメモリ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータメモリからデータをプリフェッチングする分野、より詳細には、コンピュータメモリから、プロセッサストールサイクルが最小となるようなやり方にてデータをプリフェッチングする分野に係る。
【背景技術】
【０００２】
マイクロプロセッサの速度が向上するにつれて、プロセッサ性能は、データアクセス動作によってますます大きく影響されるようになっている。プロセッサが、動作の際に、データ検索時間が遅いためにデータを待つことを要求される場合、これは、プロセッサストールと呼ばれ、また、定量的用語では、プロセッサストールサイクルと呼ばれる。プロセッサストールサイクルの回数が多いことは、遅延がより長いことを示す。
【０００３】
初期のコンピュータシステムでは、磁気メモリ媒体の速度の制約が問題であった。このため、公知のように、データアクセス性能を向上させるために、ディスクドライブデータのキャッシングが行なわれた。典型的なキャッシング動作においては、データは、プロセッサによってより素早くアクセスできるように、そのメモリ位置から、キャッシュ、つまり、一時的ではあるがより高速なメモリ媒体に、フェッチ或いはプリフェッチされる。こうして、格納されている全データを、例えば、RAMメモリ内にキャッシングすることで、バルクメモリ媒体の速度の問題が解消される。
【０００４】
今日においてはプロセッサは非常に速くなり、データをRAMメモリから取り出すときでさえも、プロセッサストールサイクルが発生するようになっている。プロセッサストールサイクルは、データアクセス動作を完了させるための時間を増加させるために用いられる。予想できるように、プロセッサストールサイクルを低減させるために、現在では、データのRAMメモリからのプリフェッチが行なわれている。この目的のために、異なるメモリアクセス速度をサポートするための異なるレベルのキャッシュメモリが、様々な異なるプリフェッチされたデータを格納するために用いられている。ところが、キャッシュメモリ内に誤ったデータがプリフェッチされると、キャッシュミス状態が発生し、これを解決するための追加のプロセッサストールサイクルが必要となる。更に、キャッシュメモリ内に誤ったデータがプリフェッチされると、キャッシュが汚染される結果；つまり、有効でないプリフェッチされたデータのために、有効なキャッシュデータが除去される結果となる。そして、除去されたデータがプロセッサによって再び必要とされることから、不必要なキャッシュミスが発生することとなる。
【０００５】
メモリは、より大きなブロックのメモリがより高速に転送できるように、データブロックとして移動される。あるデータブロックは、あるキャッシュメモリ内で転送される或いはキャッシュメモリ階層の異なるレベル間で転送されるデータの基本単位を表し；典型的には、あるデータブロックは、複数のデータ要素を含む。あるデータブロックがプロセッサによって実際に必要とされる前に、そのデータブロックをキャッシュメモリ階層のより高いレベルにフェッチングすることで、キャッシュミスに起因するプロセッサストールサイクルを回避することができる。好ましくは、キャッシュメモリ階層の最も高いレベルは、キャッシュメモリ階層のこの最も高いレベルにプリフェッチされたデータブロックは、プロセッサによってストールペナルティなしに検索できるようにされるが；この場合にピークのプロセッサ性能が得られる。勿論、検索されるべきではあるが、まだキャッシュメモリ階層の最も高いレベル内に存在しないデータブロックは、それらが要求される前にプリフェッチングされるべきであり、さもなければ、全体としてのプロセッサ性能が低減することとなる。
【０００６】
プロセッサベースのシステムにおけるプリフェッチングの一つの目標は、プロセッサキャッシュミスの結果として発生する処理時間ペナルティを低減することに置かれる。これに向けての取り組みが従来の技術においてなされている。例えば、米国特許第6,272,516号明細書においては、キャッシュミスを複数のプロセッサを用いることで低減する方法が開示されている。更に、「コンピュータシステム内においてキャッシュミスを扱うための方法及び装置（Method and apparatus for handling cache misses in a computer system）」なる名称の米国特許第5,761,506号明細書においてもキャッシュミスを低減する方法が開示されている。
【０００７】
Dundas J.D.によって The University of Michigan 1997に掲載の論文「インストラクション流の動的前処理によるプロセッサ性能の改善（Improving Processor Performance by Dynamically Pre-Processing the Instruction Stream）」においては、複数の動的プリフェッチング技術並びにこれらを用いるための方法が開示されている。従来の技術によるプリフェッチ技術は、通常は、プロセッサがインストラクションを実行することによってなされるRAM内に格納されているデータへの参照におけるある規則性に依存する。例えば、メモリ参照インストラクション（memory reference instruction）、例えば、プロセッサロードインストラクション(processor load instruction)が次々と実行されると、ストライド（stride）として知られる一定の値だけ分離されたメモリアドレスが次々と参照される。このストライドは、将来の参照されることが予測されるメモリアドレス（anticipated future referenced memory address）内に含まれるデータブロックを指示するために用いられる。つまり、プリフェッチングは、プロセッサ性能を改善するために、メモリ参照間の空間的相関を利用するが、この際には、プロセッサ性能を改善するために、データブロック間の空間的相関が用いられる。更に、幾つかのケースにおいては、キャッシュメモリ内において、性能を改善するために、データブロックの空間的局所性が利用される。「ストライドベースのデータアドレス予測構造（Stride-based data address prediction structure）」なる名称の従来技術の米国特許第6,079,006号明細書は、予測アレイ内に、ベースアドレス（base addresses）とストライド値（stride values）とを格納するデータ予測構造を開示する。
【０００８】
プリフェッチングは、ソフトウェアによって指令することも、プログラミングを介して指令することも、コンパイラにて挿入されたプリフェッチインストラクションによって指令することも、或いはハードウェアを介して指令することもできる。ハードウェア指向プリフェッチング（hardware directed pre-fetching）の場合は、ハードウェアは、メモリ参照における規則性を検出し、プログラムストリーム内には明示的なプリフェッチインストラクションを用いることなく、自動的に、データブロックのプリフェッチングを行う。ハードウェアとソフトウェアとの結合型の技術も、従来技術において知られている。これら従来のプリフェッチング技術は、プロセッサ性能の改善を図るが、これらの使用については幾つかの弱点が存在する。
【０００９】
例えば、従来技術のプリフェッチメカニズムにおいては、メモリアドレスA、A+200、A+400、及びA+600への一連の参照において、そのデータブロックがまだキャッシュメモリ階層のより高いレベル内に存在せず、まだリクエストされてないときは、200なるストライドを想定した場合、アドレスA+800を含むデータブロックをプリフェッチすることとなる。
【００１０】
データブロックをプリフェッチングするプロセスにおいては、RAMの形態でのメモリとキャッシュメモリとの間の通信を確保するためにバスが用いられ、このためメモリからのデータブロックをプリフェッチングするためにはバスが用いられ、このため、プリフェッチングプロセスは、バスの利用を増加させ、バスの帯域幅を低減させることとなる。また、場合によっては、プリフェッチングプロセスによって、プロセッサによっては用いられない（要求されない）データブロックがプリフェッチングされることもあり、このような場合には、要求されるデータを得るために、そのプロセッサのためにもう一度フェッチを行うことが必要となるが、このような場合も、バス利用に対する不必要な負荷が追加されることとなる。データブロックをキャッシュメモリ階層のあるレベル内にフェッチングするためには、現存するキャッシュ内のデータブロックを交換することが必要となるが、このようなデータブロックの交換も余分なバスの利用をもたらす。しばしば、キャッシュ内のデータブロックは、交換されるブロックがそのキャッシュメモリ階層のより低いレベルに移動されるように再編成される。そして、こうして移動されたデータブロックはもはやキャッシュメモリ階層の最も高いレベルの所には存在せず、その後、それが参照された場合には、別のキャッシュミスが発生することとなる。
【００１１】
他方においては、余分なデータブロックの、プロセッサによるそれらの使用を予測してのプリフェッチングは、プリフェッチが時間的に拡散されず、互いに引き続いて迅速に起こる、いわゆる、バースト性のバス利用をももたらす。この問題は、例えば、一連のプリフェッチが、より大きな二次元構造の二次元サブ構造に関するデータを含む複数のデータブロックをフェッチするために行なわれる場合には、最も顕著となる。例えば、切り取り・貼りつけ動作（cut and paste operation）の場合には、サブグラフィック画像がメモリ内に行順フォーマット（row-order format）にてレイアウトされたより大きなグラフィック画像からフェッチされることとなり、バースト性の問題が顕著となる。バースト性のバス利用が発生すると、その共有バス資源を必要とする他のプロセッサ要素の一時的な飢餓状態（starvation）が起こり、結果として、他のタイプのプロセッサストールサイクルを招来し、こうしてプロセッサ性能に悪影響を及ぼす。ソフトウェア指向プリフェッチング（software directed pre-fetching）においては、典型的には、プロセッサによって実行されるプログラムストリーム内にプリフェッチインストラクションを挿入することが必要となり、このために、プロセッサインストラクション帯域幅が低減される。他方、ハードウェア指向プリフェッチング（hardware directed pre-fetching）は、通常は、メモリ参照における規則性を検出するために、かなりの量のチップ面積を必要とする。従来の技術において、ハードウェアベースの技術に対して、メモリ参照を監視するために、数キロバイトのメモリを用いることは知られていない。このようなハードウェア技術は、データブロックのプリフェッチングが十分に早く開始され、そのプリフェッチがプリフェッチされたデータがプロセッサによって実際に要求される時間までに完了するようるよう採用される。さもなければ、プロセッサは、キャッシュミス状態を解決するためにストールすることとなる。
【発明の開示】
【００１２】
効率的なプリフェッチングは、プロセッサ性能を著しく向上させるとともに、上述の短所を克服することができる。従って、プログラムストリーム内のインストラクションによってなされるデータメモリ参照における不規則性を動的に検出することには依存しないプリフェッチ技術を確保すること、並びにキャッシュミスに起因するプロセッサストールサイクルの発生を低レベルに保つことができるプリフェッチ技術を確保することは、非常に有意義なことであると考える。
【００１３】
本発明によると、プロセッサストールサイクルを低減させることが可能な、データをプリフェッチングするためのハードウェア・ソフトウェア指令アプローチが提唱される。
【００１４】
本発明によると、外部RAMメモリにアクセスするために、メモリアクセスインストラクションを含むインストラクションデータを処理するためのプロセッサが提供される。このプロセッサは、プリフェッチ動作のストライドを格納するための領域ストライドメモリ位置と、外部RAMメモリ内のその内部において上で格納されたプリフェッチ動作ストライドを適用されるべきメモリ領域を示すデータを格納するためのメモリ領域識別子と、外部RAMメモリからデータをプリフェッチするためのプリフェッチ回路とを備える。このプリフェッチ回路は、プリフェッチメモリ領域内のデータにアクセスするとき、プリフェッチメモリストライドに応答し、そのストライドを用いてメモリからプリフェッチングする。
【００１５】
本発明によると、更に、外部RAMメモリからデータをプリフェッチングするための方法が提供される。この方法は、プロセッサに、メモリ位置内に格納するために、ストライドと、外部RAM内のあるメモリ領域を決定できるためのデータと、を提供するステップを含む。ここで、このストライドは、メモリ領域内からデータをプリフェッチングする際に用いられる。この方法は、更に、プリフェッチされるデータがその内部に格納されている領域を決定するステップと、その領域との関連でプロセッサ内に格納されているプリフェッチのストライドを決定するステップと、プリフェッチストライドに基づいてあるサイズを有するデータブロックを定義するとともに、外部メモリ内の先にプリフェッチされたデータブロックのメモリ位置に基づいて開始位置を定義するステップと、開始位置の所のデータブロックを宛先メモリ位置にコピーするステップと、を含む。
【００１６】
本発明によると、更に、データブロックをデータメモリからバッファメモリにプリフェッチするための方法が提供される。この方法は、その内部にメモリを有するプロセッサとプリフェッチ回路とを提供するステップと、ランダムアクセスメモリを提供するステップと、プロセッサのメモリ内にその内部には少なくと一つの領域と対応する領域ストライド間のリレーションが格納されている検索テーブルを提供するステップと、データメモリ参照インストラクションのデータメモリアクセスアドレスを検索テーブル内に格納されている少なくとも一つの領域と比較することで、その内部にそのデータメモリ参照インストラクションのデータメモリアクセスアドレスが位置する領域を決定するステップと、その内部にそのデータメモリ参照インストラクションのデータメモリアクセスアドレスが位置する領域と関連する領域ストライドをプロセッサのプリフェッチ回路に供給するステップとを含む。
【００１７】
本発明のもう一つの態様によると、その上にデータが格納されているメモリ媒体が提供される。本発明によると、このデータは、プロセッサのメモリ内に第一のプリフェッチストライドを示すデータを格納するステップと、プロセッサ内のメモリ内にその内部において第一のプリフェッチストライドが用いられるべきメモリの第一の領域を示すデータを格納するステップと、を遂行するための実行可能なデータを表す。
【００１８】
本発明の更にもう一つの態様によると、メモリ割当て動作を遂行するステップを遂行するプロセスが提供される。このメモリ割当て動作は、割当てられたメモリ内に格納されるべきデータのタイプに依存し、このメモリ割当て動作は、メモリ内にメモリ領域を割当てるステップと、プロセッサ内のメモリ内に、割当てられたメモリ領域に対する第一のプリフェッチストライドを表すデータを格納するステップと、プロセッサ内のメモリ内に、その内部において第一のプリフェッチストライドが用いられる前記割当てられたメモリ領域の位置及びサイズを表すデータを格納するステップと、を含む。
【００１９】
以下では、本発明の幾つかの実施例について図面との関連で説明する。
【発明を実施するための最良の形態】
【００２０】
典型的には、ソフトウェアアプリケーションファイルは、通常はそのアプリケーションファイルの開始の所に見つけられるヘッダ部分を有する。そのアプリケーションがローディングされると、このヘッダ部分をオペレーティングシステムによって読み出し、プロセッサによって処理することで、そのアプリケーションのインストラクションコード部分に対して必要とされる、コンピュータランダムアクセスメモリ（RAM）の形態の、メモリ要件が決定される。要求されるメモリのサイズ及びタイプに基づいて、オペレーティングシステムは、プログラムメモリの一部をそのアプリケーションに割当てる。実行の際、そのアプリケーションは、データに、メモリを、データメモリの形態にて割当てる。勿論、しばしば、そのアプリケーションに対して、そのヘッダ内に定義される最大の利用可能データメモリが割当てられる。実行の際にリクエストされるデータメモリの各ブロックには、そのアプリケーションのプログラムストリーム内のインストラクションによる将来のアクセスのために、データメモリのブロックに対するハンドル、つまり、メモリ管理ポインタテーブル内のポインタへのポインタが提供される。そのアプリケーションに関する限り、そのアプリケーションに割当てられたこれら複数のデータメモリのブロックは、連続的かつ固定的である。ただし、これらブロックは、連続的であることも、固定的であることも必要とされない。メモリ管理ポインタテーブルは、アクセスされているデータの現在位置をポイントするためである。このため、アプリケーションには各割当てられたデータメモリブロックをポイントするハンドルのみが提供され、オペレーティングシステムは、このハンドルを用いてメモリの内容を移動させることで、存在するメモリのより効果的な使用を図る。こうすることで、オペレーティングシステムには、アプリケーションにはそれが参照する各データメモリブロックをポイントするハンドルが割当てられるためにアプリケーションに対する変更を必要とされることなく、データメモリ内のメモリブロックの絶対位置をスワッピングする際の柔軟的性が与えられる。
【００２１】
図１には、公知のメモリマッピング技術によるコンピュータメモリ１０１のデータメモリ１００の部分の従来技術によるマップが示されている。このタイプのメモリマップは、例えば、WindowsTM等のマルチタスキングオペレーティングシステムを用いる場合に見られる。マルチタスキングオペレーティングシステムは、メモリ内に含まれる複数の異なるアプリケーションを実行する能力を有する。これを機能させるためには、各アプリケーションは、その使用のために特別に割当てられたデータメモリの部分を有する。この例においては、これら複数のアプリケーションの各々のデータ要素は、それらの各々のデータメモリブロック内に格納される。これらデータメモリブロックは、異なるタイプとサイズから成り、その中には各アプリケーションに対して特定な変数が格納される。つまり、各アプリケーションは、自身のデータメモリブロックにアクセスし、他のアプリケーションのデータメモリブロックを上書きすることはなく、これによってマルチタスキングが可能とされる。APP1は、例えば、画像データに対して割当てられているデータメモリブロック１０２と、オーディオデータに対して割当てられているもう一つのセットのデータメモリブロック１０３と、プリファレンスデータに対して割当てられているもう一つのセットのデータメモリブロック１０４とを有する。APP3は、他方、画像データに対するデータメモリブロック１０５と、プリファレンスデータに対するデータメモリブロック１０６とを有し、他方、APP4は、画像データを格納するために割当てられたデータメモリブロック１０７と、ビデオデータを格納するために割当てられたてデータメモリブロック１０８と、制御データを格納するために割当てられたデータメモリブロック１０９とを有する。これらデータメモリブロックは、各アプリケーションに対して、そのソフトウェアアプリケーション内のデータ割当てリクエストの順番に基づいて割当てられる。このようにして、類似のタイプのデータが、典型的には、多くの異なる位置に格納される。このタイプのメモリ割当ては、従来技術において公知であり、従って、これらデータメモリブロックからデータ要素をプリフェッチングするために用いるための様々な公知の方法が存在する。
【００２２】
従来技術の図２には、ハードウェア・ソフトウェアフェッチングに用いるためのセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションをロード及び実行する（ステップ１０）。プロセッサがインストラクションを実行する際（ステップ１０）に、ソフトウェア１８によるメモリアクセス動作を遂行することでメモリ１００からインストラクションによって用いるためのデータが取り出される（ステップ１６）。メモリ１００がこれらインストラクションによってアクセスされている間に、ハードウェア１７にてメモリアクセスパターンを分析することでストライドが決定される（ステップ１２）。いったんアクセスパターンからストライドが決定されると、ハードウェアにて決定されたストライドに基づいてデータのプリフェッチが遂行される（ステップ１４）。このプリフェッチは、そのプログラムストリーム内のあるインストラクションによる予測される将来の使用のために、メモリから予測されるデータを取り出す。不幸なことに、メモリアクセスパターンを分析するためにハードウェアを用いるやり方では多量のハードウェア資源が要求され、幾つかのケースにおいては、データのプリフェッチングを効率的に遂行するために、第二のプロセッサの使用が必要となる。このアプローチは多量の追加のハードウェア資源を必要とするために、高価なものとなることが知られている。加えて、このハードウェアでは、メモリアクセスパターンを検出するための時間が必要とされ、幾つかのケースでは、メモリが参照されるやり方のために、ハードウェアアプローチでは有効なストライド情報を提供することができないこともある。
【００２３】
従来技術の図３には、ハードウェア・ソフトウェアプリフェッチングのために用いるための同一のセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する（ステップ２０）。プロセッサがプログラムストリーム内のインストラクションを実行する間に、メモリアクセス動作を遂行することでメモリ１００からデータが取り出される（ステップ２６）。メモリがこれらインストラクションによってアクセスされている間に、ソフトウェアにてメモリアクセスパターンを分析することでストライドが決定される（ステップ２２）。いったんアクセスパターンからストライドが決定されると、ソフトウェアによってデータのプリフェッチが先導され（ステップ２４）、次に、ハードウェアによって決定されたストライドに基づいてそのプリフェッチが実行される（ステップ２５）。典型的には、プリフェッチの先導（ステップ２４）のためには、追加のインストラクション或いは割り込みをプログラムストリーム内に挿入し、ハードウェアに対してそのプリフェッチ動作の実行（ステップ２５）がいつされるべきかを通知することが必要となる。不幸なことに、ステップ２２はソフトウェア２８にて実行されること、及びプログラムストリーム内にインストラクションを追加的に挿入することが必要されることなどから、プロセッサはメモリアクセスパターンを分析するための追加の機能を遂行する必要が生じることから、プロセッサ帯域幅が著しく低減され、結果として、ソフトウェアプログラムストリームの実行は、メモリを追加のハードウェアを用いて分析するステップ１２のプロセスと比較して遅くなる。ただし、ソフトウェアを用いるやり方は、ストライドの決定のための追加の回路のコストの低減に寄与することが確かである。
【００２４】
従来技術の図４には、ハードウェア・ソフトウェアフェッチングに用いるためのセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する（ステップ３０）。プロセッサがプログラムストリーム内のインストラクションを実行する間に、ソフトウェア３８にてメモリアクセス動作が遂行され、メモリ１００からデータを取り出される（ステップ３６）。メモリがこれらインストラクションによってアクセスされている間に、ソフトウェアにてメモリアクセスパターンが分析され、ストライドを決定される（ステップ３２）。いったんアクセスパターンからストライドが決定されると、プリフェッチが先導され、ハードウェア３７は、このプリフェッチを決定されたストライドに基づいて遂行することで、データにアクセスする。プリフェッチは、データメモリ１００（図１）から予測されるデータを、プログラムストリーム内のあるインストラクションによる将来の予測される使用のために取り出す。不幸なことに、ストライドは動的に計算されたり、ストライドがいったん計算されるとプログラムがいったん実行されるとそのストライドは固定されたり、ストライドは大多数のデータメモリアクセスに対して一度しか計算されなかったりするために、マルチメディアアプリケーションの場合のように、アプリケーションによって、様々なタイプのデータに対して様々なストライドが必要とされる状況に対しては不十分である。
【００２５】
従来技術の図５には、ハードウェア・ソフトウェアフェッチングに用いるための異なるセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクション並びにプリフェッチインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する（ステップ４０）。プロセッサがこれらインストラクションを実行する間に、ソフトウェアにて、プログラムストリーム内の、メモリからデータを取り出すためのプリフェッチインストラクションが実行され（ステップ４４）、その後、ソフトウェア４８にてメモリアクセス動作を遂行することでメモリからデータが取り出される（ステップ４６）。このプリフェッチインストラクションは、プログラマ或いはコンパイラによって挿入される。典型的には、インストラクション流を効率的に処理するためには、ハードウェアプラットホームのアーキテクチャを事前に知る必要があり、このためソフトウェアアプリケーションを、他のハードウェアプラットホーム上でも効率的に動作するように変更することを要求される。
【００２６】
ハードウェア・ソフトウェア指向プリフェッチング結合アプローチ（combined solution of hardware and software directed pre-fetching ）は：プログラムストリーム内に追加されるインストラクションの量を制限することで、インストラクション帯域幅に対する制約を軽減できること、及びハードウェア資源の追加の量を最小限に抑えられることから、最適な解決策であるといえる。ハードウェア資源は、これら追加の要素（形状）に対して要求されるチップ面積の量としてひびく。従来の技術のように、ハードウェア或いはソフトウェアによるメモリ参照における規則性を検出することを目指す代わりに、ハードウェア・ソフトウェア指令プリフェッチング技術は、本発明の一つの実施例によると、プログラムストリーム内に明示的プリフェッチインストラクションを用いることなく、かつ、チップ面積の追加の量を最小限に抑えながら遂行される。
【００２７】
図６は、ソフトウェア・ハードウェア指向領域ベースプリフェッチング（software and hardware directed region based pre-fetching）において用いるための本発明の一つの実施例を示す。この好ましい実施例においては、プロセッサ６０は、電気的に、キャッシュメモリ６３、並びにバッファメモリ６５に接続される。プリフェッチ回路６２も、プロセッサ６０と、これら２つのメモリ６５、６３に接続される。メモリ６１は、ランダムアクセスメモリ（RAM)の形態を有し、電気的に、メモリ６１からのデータをバッファメモリ６５或いはキャッシュメモリ６３に提供するためにバス６４に接続される。プリフェッチ回路６２は、データブロックのメモリ６１からこれら２つのメモリ６３、６５のいずれかへの転送を、プロセッサ６０によるプログラムストリームを含むソフトウェアアプリケーションの実行の結果として得られる、プロセッサ６０からのインストラクションに基づいて指令（指揮）する。典型的には、キャッシュメモリ６３は、プロセッサ６０及びプリフェッチ回路６２と一体化される。データブロックは、メモリ６１とキャッシュメモリ６３との間、メモリ６１とバッファメモリ６５との間、キャッシュメモリ６３とバッファメモリ６５との間、或いはキャッシュメモリ内の異なる２つの階層レベル間で転送されるデータの基本単位から成る。例えば、データブロックのサイズは、キャッシュメモリ６３内の単一のキャッシュラインのサイズと等しくされる。プロセッサ６０は、プリフェッチングを不能にするための回路６２ａも含む。
【００２８】
プロセッサのインストラクション帯域幅を最小限に抑えるために、このソフトウェア・ハードウェア指向プリフェッチングアプローチにおいては、プリフェッチ領域とそれら領域の各々に対して用いられるべき各ストライドを指定するためにプロセッサのアーキテクチャレベルの所に配置された追加のレジスタが用いられる。例えば、これら追加のレジスタはプロセッサ内に設けられ、これらは、マルチラインレジスタ検索テーブル（multi line register lookup table）６０１内の、領域＿ベース（アドレス）レジスタ６６、領域＿サイズレジスタ６７、及び領域＿ストライドレジスタ６８から構成される。これら領域＿ベースレジスタ６６、領域＿サイズレジスタ６７、及び領域＿ストライドレジスタ６８は、全て、トリプレットとして関連付けられ、レジスタ検索テーブル内の単一のラインと対応する。ここで、これら領域＿ベースレジスタ内からのある領域＿ベースレジスタは、これらレジスタの各トリプレット、つまり、領域＿ベース、領域＿ストライド及び領域＿サイズを参照する。オプションとして、レジスタ検索テーブルは、領域ベースアドレス、領域サイズ及び領域ストライドから成る複数のトリプレットを収容できるように複数のラインを有するようにすることもできる。
【００２９】
レジスタ検索テーブル内の単一ライン内において、領域＿ベース（アドレス）レジスタは、メモリ６１内のソースメモリ領域のベースアドレスを受信するために用いられ、領域＿サイズレジスタはソースメモリ領域のサイズを受信するために用いられ、領域＿ストライドレジスタはソースメモリ領域内のデータをプリフェッチングするために用いられるべきストライドを受信するために用いられる。プロセッサによるインストラクションの処理のインストラクション帯域幅への影響は、そのアプリケーション内に含まれるこれらレジスタを設定するために要求される追加のインストラクションに制限される。いったんこれらレジスタが設定されると、アプリケーションのローディングの際には、アプリケーションの実行の際にこれらレジスタにさらなる値を提供するためにさらなる時間は必要とされない。
【００３０】
領域ベースのハードウェア・ソフトウェア指令プリフェッチングアプローチを可能にするためには、各アプリケーションに対して割当てられるデータメモリは、図１に示される従来技術による技術とは異なるやり方にて格納される。図８に示されるように、メモリは、ここでは、領域ベースのハードウェア・ソフトウェア指向プリフェッチング結合アプローチが可能となるように編成される。この領域ベースのアプローチにおいては、図８に示されるように、データメモリブロックをデータメモリ内の適当な領域に割当てることが重要となる。アプリケーションデータをこれら領域に割当てるためには、この改良されたメモリ編成を可能にするために、図７に示されるように、アプリケーションヘッダに対する修正がなされる。
【００３１】
アプリケーションがメモリ６１内にロードされると、そのアプリケーションのヘッダ部分７０がオペレーティングシステムによって読み出され、プロセッサ６０によってそのアプリケーションに対するメモリ要件を決定するために処理される。このヘッダ部分７０内には、検索テーブル６０１が格納されている。検索テーブル６０１は、ストライド７４を、データタイプ７３と、そのデータタイプのサイズ７２とに関連付ける。リクエストされるメモリのサイズ７２及びデータタイプ７３に基づいて、オペレーティングシステムは、データメモリ内の領域を、その領域内に格納されることとなるデータタイプ７３に基づいて割当てる。リクエストされたデータメモリの各領域には、その領域に対するハンドル（handle）が設けらており、このハンドルは、レジスタ検索テーブル内の、領域＿ベースレジスタ６６の一つ内の格納される。対応する領域サイズ７２が対応する領域＿サイズレジスタ６７ａ内に格納され、その領域のストライド７４が対応する領域＿ストライドレジスタ内に格納される。この領域＿ストライドレジスタ内に格納するための値は、プログラムのヘッダ部分内にプログラマ或いはコンパイラより形成或いは格納される。オプションとして、領域＿サイズをプログラマ或いはコンパイラによって挿入することもできるが、ただし、幾つかのケースにおいては領域のサイズは既知ではなく、その領域内に格納されているデータタイプのみが既知であり、このため、その与えられた領域に対してはストライドのみが決定される。
【００３２】
例えば、APP1がプロセッサ及びオペレーティングシステムによってメモリ内にロードされる。APP1からのヘッダ７０を処理すると、プロセッサはAPP1は画像データ、ビデオデータ、オーディオデータ、及びプリファレンスデータを用いていることを知る。このため、APP1はこれらデータタイプを格納するために用いるためにこれらメモリ領域の各々に対するハンドルを必要とする。データメモリ６９内において、プロセッサは、データメモリ６９内に画像メモリ領域３０を割当て、このメモリ領域に対するハンドルを領域＿ベースレジスタ６６ａ内に提供する。APP1はビデオデータも用い、このためプロセッサはデータメモリ６９内にビデオメモリ領域３４を割当て、このメモリ領域に対するハンドルを領域＿ベースレジスタ６６ｄ内に供給する。オーディオデータメモリ空間もAPP1によってリクエストされ、このため、プロセッサは、データメモリ６９内にオーディオメモリ領域３１を提供し、このメモリ領域に対するハンドルを領域＿ベースレジスタ６６b内に提供する。APP1はプリファレンスデータも用い、このため、プロセッサは、データメモリ６９内にプリファレンスメモリ領域３２を提供し、このメモリ領域に対するハンドルを領域＿ベースレジスタ６６ｃ内に提供する。もう一つのアプリケーション、例えば、APP3もメモリ内にロードされる場合、このアプリケーションは画像データを用い、このため、プロセッサは、データメモリ６９内にAPP3による使用のための画像データ領域３３を割当て、このメモリ領域に対するハンドルを領域＿ベースレジスタ６６ｅ内に提供する。
【００３３】
図９は、データのプリフェッチングを遂行するためにプロセッサによって取られるステップを概説する。使用において、このプロセッサは、オペレーティングシステムと協力して、ソフトウェアアプリケーションによってプログラムストリーム内に提供され、メモリのインストラクション部分内に格納されているインストラクションを実行する。プログラムストリーム内のメモリ参照インストラクションに応答して、プロセッサ６０は、データメモリ６９内の、それらインストラクションによって提供されるアドレスの所の、様々なメモリ領域に、インストラクションデータ以外のデータを処理するためにアクセスする（ステップ９００）。具体的には、プロセッサは、メモリ参照インストラクションによって提供されたアドレスを、レジスタ検索テーブル内の、領域＿ベースレジスタ６６、及び領域＿サイズレジスタ６７と比較する（ステップ９００）。いったん一致が発見されると、プロセッサは、次に、メモリ参照インストラクションを検索テーブル内に提供される対応する領域＿ストライドを用いて実行（ステップ９０１）し、そのメモリ参照インストラクションによって参照された領域内から次のデータブロックをプリフェッチする。具体的には、プログラムストリーム内のあるインストラクションによってメモリ内のある特定の領域内のメモリアドレス参照が行なわれると、プリフェッチが、そのメモリアドレスから、そのアクセスされた領域に対して特定なストライドだけオフセットして位置するデータ要素に対して開始される（ステップ９０２）。プリフェッチを始動するために、プリフェッチ回路に、そのデータブロックの開始位置、及びそのデータブロックが位置する領域に対して用いられるべきストライドが供給される（ステップ９０３）。この領域ベースのアプローチによると、データ要素のプリフェッチング（ステップ９０４）或いはコピーを参照されているメモリ領域に基づいて、従来技術によるプリフェッチング技術との関連で説明したようなデータメモリの参照における規則（single regularity）の検出を全く要求されることなく、行うことが可能となる。こうして、メモリに、領域ベースのあるアドレスからアクセスするやり方（ステップ９００）は、結果として、領域ベース（アドレス）＋領域ストライドの所に位置するデータをプリプリフェッチングすることとなる（ステップ９０４）。そして、領域＿ベース（アドレス）＋領域＿ストライド（の所に位置するデータ）への更なるアクセス（ステップ９００）においては、領域＿ベース＋２×領域＿ストライドの所に位置する次のデータブロックがロードされる（ステップ９０２）こととなり、これが繰返される。領域＿ストライドがキャッシュメモリ内のキャッシュラインと同一サイズである場合は、この技術は、ネクストシーケンシャルデータブロックプリフェッチングと呼ばれる。
【００３４】
通常は、メモリアクセスインストラクションアドレスと領域＿ベース（アドレス）レジスタ内に格納されているアドレス値とは、領域＿ベースレジスタ内のアドレスはプログラムストリーム内に利用されるデータ領域から生成されることから一致する。このレジスタ検索テーブルは、プログラムストリーム内のインストラクションによって用いられるメモリアクセスアドレスを表す。勿論、インストラクションデータは、実行されてないときは、そのデータ部分内のデータを構成する。例えば、コンパイラを実行する際には、このことが該当する。つまり、コンパイラは、インストラクションデータではあるが、ただし、コンパイラの動作の際には、データとして管理され、インストラクションとしては扱われないデータを出力する。勿論、これらの区別は当業者においては明白である。
【００３５】
プリフェッチされたデータは、バッファメモリ６５（図６）或いはキャッシュメモリ６３のいずれかに格納される。プリフェッチされた一つ或いは複数のデータブロックがキャッシュメモリ内に格納された場合は、より高いキャッシュメモリ階層内に位置するデータブロックは上書き（オーバライト）され、これらキャッシュメモリのより高い階層内に以前に置かれていたデータブロックは、キャッシュメモリの階層内を下方に移動され、このため、プロセッサによって直ちにアクセスすることはできなくなる。このような状況下においては、プロセッサがキャッシュミスを解決しようと試みた場合、プロセッサストールが発生することとなる。逆に、プリフェッチされたデータがバッファメモリ内に格納された場合は、これがデータがキャッシュメモリ階層内に含まれるデータブロックを妨害することはなく、このため、この方が望ましい。最適な処理速度を実現するために、プロセッサは、最初に、キャッシュメモリ内にデータブロックが存在しないか、階層のより高いレベルの所に位置するデータから開始して、階層のより低いレベルに向かってチェックする。一つ或いは複数のデータブロックがいったんバッファメモリ内に格納されると、これらは必要に応じてキャッシュメモリに移動することができるが、ただし、幾つかのケースにおいては、コピーコマンドがソースメモリ位置から宛先メモリ位置に向けて発行されている場合には、それら一つ或いは複数のデータブロックは、バッファメモリから、キャッシュメモリに格納されることなく、直接に宛先メモリへとコピーされる。
【００３６】
このハードウェア・ソフトウェア指令プリフェッチングアプローチは、データをソースメモリ位置から宛先メモリ位置にコピーするためにも有効である。例えば、コピー動作においては、複数のデータ要素を含むある量のデータブロックが、ソースメモリ位置から、同一メモリ領域内の、宛先メモリ位置にコピーされる。このコピープロセスを実現するためには、プロセッサに対する一連のロード及び格納インストラクションが必要となる。典型的には、ソース位置の所のデータ要素は、キャッシュメモリ階層の高いレベルの所にも、バッファメモリ内にも存在しない。このプリフェッチングプロセスを用いると、プロセッサの性能が、データブロックをプロセッサによって要求されることを予測して、それが実際にメモリアクセスインストラクションの形態にて実現されるロードインストラクションによって要求される前にフェッチングすることで、向上させる。
【００３７】
例えば、図１０は、データブロックをソースメモリ位置３０から宛先メモリ位置（図示せず）に順次コピーする動作（図示せず）において用いられる、画像メモリ３０内のデータブロックを図解する。各データブロック１２１−１２５は、複数のデータ要素を含む。ロードインストラクション（load instruction）が領域＿ベース（アドレス）レジスタと比較され、いったん一致がみられると、プロセッサは、対応する領域＿ストライド値、及び領域＿サイズ値を用いる。領域＿ストライドレジスタを、典型的にはプログラマ或いはコンパイラによって設定される、その領域内のデータブロックのサイズに設定すると、ソース領域内の第一のデータブロックを参照するメモリアクセス動作は、同一領域内の第二のデータブロックのプリフェッチを先導する。第二のデータブロックを参照する動作は、第三のデータブロックのプリフェッチを先導し、これが反復される。この技術は、ネクストシーケンシャルデータブロックプリフェッチングとして知られている。プログラムストリームは、プロセッサに対して、そのプロセッサによるコピー動作の実行の前に、そのコピー動作に関する情報を提供する。こうすることで、ソースメモリ位置から宛先メモリ位置へのコピー性能が、ストライドがその領域に対して予め決定されており、このためプロセッサストールサイクルが低減されるために、改善される。幾つかの領域内に含まれるデータのデータ処理が、他の領域内に含まれるデータの処理よりも速く終了することがある。このため、データがより高速にて処理できる領域に対しては、データの処理に時間がかかる領域に対するよりも大きなストライドが用いられる。
【００３８】
図１０は、画像ソースメモリ領域３０内に、APP1との関連で、格納されている複数のデータブロック（１２１−１２４）を図解する。この領域に対するストライドは、プログラマ或いはコンパイラによって事前に決定され、領域＿ストライドレジスタ内に格納される。このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、ロードインストラクションが第一のデータブロック１２１を参照すると、データブロック１２２が自動的にプリフェッチされ；第二のデータブロック１２２が参照されると、データブロック１２３がプリフェッチされ、以下同様となる。このケースにおいては、ストライドはデータブロックのサイズとされる。
【００３９】
勿論、データブロックのプリフェッチ動作を遂行するために必要とされる時間が単一のデータブロックを宛先アドレスにコピーするために必要とされる時間より大きな場合は、プロセッサは、データブロックがまだプロセッサによって利用できる状態にないために、ストール（失速）する。このようなケースにおいては、その与えられた領域に対するストライドを２データブロックに相当するストライドに設定することで、ソース領域の更に前方を見るようにされる。こうすると、プロセッサはより多くのデータを処理するためにより長い時間が必要となり、要求されるデータブロックをフェッチするための次のプリフェッチ動作に対してより多くの時間を確保することが可能となる。
【００４０】
再度、図１０との関連で、ストライドを２データブロックに相当するサイズに設定した場合のプリフェッチングシーケンスは、以下の通りとなる。つまり、ロードインストラクションが第一のデータブロック１２１を参照すると、第一のデータブロック１２１、並びに第二のデータブロック１２２がバッファメモリ内に格納され；データブロック１２３、並びに１２４が自動的にプリフェッチされ、第三のデータブロック１２３が参照されると、データブロック１２５と１２６のプリフェッチが行なわれる。
【００４１】
図１１は、ソースメモリ開始位置が、同一メモリ領域、例えば画像メモリ領域３０内においてある一定の値だけ離されており、各コピー動作においてコピーされるようにデータブロックにグループ化されるデータ要素の量は一定とされる、マルチコピー動作の場合について図解する。好ましくは、ストライドは、様々なソースメモリ開始位置間を分離するための値、例えば、データブロック５００とデータブロック５０１とを分離するアドレスの差と等しく設定される。このマルチコピー動作においては、データブロック５００を参照すると、第二のデータブロック５０１内に位置する全てのデータ要素１３０、１３１、１３２がプリフェッチされ、次のメモリ位置のデータブロック５０１を参照すると、第三のデータブロック５０２内に位置するデータ要素１３３、１３４、１３５がプリフェッチされる。各メモリ位置に対する開始アドレスは、その与えられた領域に対するストライドだけ増分される。このマルチコピー動作は、より大きな二次元構造の２次元サブ構造をコピーするためにも有効である。
【００４２】
例えば、複数のデータブロックをプリフェッチするプロセスは、メモリ内に格納されている圧縮画像、例えば、JPEG圧縮画像に対して適用することも考えられる。このケースにおいては、圧縮の性格のために、画像のデータブロックを処理することが必要となる。このプロセスを用いた場合、複数のデータブロックがメモリの画像領域内に格納されている画像データからプロセッサによって読み出される際に、プロセッサは、少なくとも画像の部分的な解凍を遂行するために、画像メモリ領域からプリフェッチされた十分なデータを有することとなる。このプロセスが用いられず、メモリの画像領域から十分なデータブロックが読み出されていない場合は、プロセッサは、前のデータブロックの部分的な解凍を継続するためには、次のデータブロックを得るためにメモリの画像部分を再び参照しなければならず、このためストールサイクル（stall cycle）を経験することとなる。データブロックのサイズがその自律的処理に対して十分でない場合には、プロセッサストールが発生する。他方、読み出されるデータブロックの数が多すぎる場合には、プロセッサはデータの残りの部分を利用しなかったり、一度に過多にバスを利用し過ぎ、バスを利用する他のデバイスを不必要に遅延させることとなる。このため、オプションとして圧縮画像ファイルにはメモリ内の特定の領域が指定される。
【００４３】
この領域ベースのプリフェッチングアプローチは、マルチタスキング環境に対して理想的である。このケースにおいては、マルチタスキング環境を用いて動作する際には、オペレーティングシステムは、実行されている現在のアプリケーションを追跡する。あるアプリケーションが実行のために選択されると、オペレーティングシステムは、その現在のアプリケーションに対して、対応するレジスタ検索テーブルをロードする。そして、次のアプリケーションが実行のために選択されると、第一のアプリケーションからのレジスタ検索テーブルは格納され、次のアプリケーションからのレジスタ検索テーブルがプロセッサ内にロードされる。こうして、プログラムストリーム内のメモリ参照インストラクションが実行されると、オペレーティングシステムは、現在のプログラムストリーム内のインストラクションによってアクセスされているメモリ領域を比較し、ある与えられたアプリケーションに対して十分なデータ処理が遂行できるように、そのアプリケーションによって提供される最も現在のストライドを用いる。
【００４４】
このタイプのストラド及び関連するデータ処理システムは、そのサーバ内に主プロセッサに接続された多数の”ダム（dumb）”端末を有し；これらダム端末は限られた処理容量を有し、そのサーバ内の主プロセッサはこれらダム端末の各々からのデータを処理するために用いられるタイプのサーバに対しても有効である。このようなケースにおいては、ダム端末上で実行されているアプリケーションがプロセッサによる実行のためにロードされると、そのアプリケーションに特定なレジスタ検索テーブルがプロセッサ内にそのプログラムストリームが効率的に処理できるようにロードされ、こうすることでプロセッサストールの低減が図られる。そして、例えば、マルチメディアアプリケーションを処理するときには、好ましくは、ある特定のストライドが、その方が各アプリケーションをより効率的に処理できるために、用いられる。
【００４５】
一つの代替実施例においては、領域＿ストライドレジスタ内に格納されているストライドは、プロセッサの所定のメモリ領域へのアクセス性能に基づいて再計算される。例えば、そのベース領域がある初期領域＿ストライドを用いてアクセスされたが、そのプログラム内或いはそのプロセッサハードウェア内の追加のインストラクションを実行した結果、そのストライドを用いてプリフェッチングするとプロセッサストールが発生することがわかった場合、ソフトウェアは、そのストライドが、その所定のメモリ領域に対してフェッチングされるデータについて、より先を見るように修正される。領域ストライドを変更したが、処理時間の改善が僅かしかみられない場合は、ソフトウェアは、領域ストライドを再び変更し、この過程が、ストライドが概ね最大許容ストライドに達するまで、或いは所定の性能の改善が達成されるまで行なわれる。次に、この改善されたストライドが、コンパイルされたコード内に自己修正コードの形式にて組み込まれ、その与えられたプログラムストリームを含むソフトウェアアプリケーションの次の実行の際に、この修正に基づく改善されたストライドが領域＿ストライドレジスタ内に格納される。好ましくは、システム性能の微調節を行うために、ストライドが定期的に評価される。
【００４６】
インストラクション流内にメモリ参照インストラクションを有するソフトウェアアプリケーションを実行するこのやり方によると、メモリ領域からのプリフェッチ動作の頻度を調節することが可能となる。つまり、このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、ソフトウェアアプリケーションの効率的なコーディング及び厳密なコンパイルを通じて、可能であるときは、プリフェッチデータブロック転送の発生を時間的に拡散させ、これによってバスのバースト的な利用を防止するとともに、プロセッサストールサイクルの確率を低減させることも可能となる。本発明のこの実施例によると、ハードウェアを用いてストライド情報を決定するのではなく、ソフトウェアを用いてメモリアドレス領域に関するストライド情報が得られ、プログラムストリーム内に、データメモリ内のメモリ位置を参照するインストラクションを挿入することで、プリフェッチングの頻度が制御される。勿論、プリフェッチの時間的拡散は、メモリ参照パターンと関係を有し、メモリ参照パターンはプログラムストリーム内に含まれるメモリ参照インストラクションの頻度と関係し；メモリ参照インストラクションの間隔を狭くするほど、プロセッサストールの確率は高くなる。
【００４７】
一つの好ましい実施例においては、このプリフェッチングプロセスを更に改善させるために、コンパイラによって、ある与えられた領域を参照するメモリ参照インストラクションに対してプリフェッチが起動されるべきであるか否かを示す指標が、好ましくは、ビットの形式にて、メモリ参照インストラクション内に挿入される。この実施例においては、プロセッサ内に、メモリアクセスインストラクション内に含まれるこの指標に基づいてプリフェッチング回路６２によるプリフェッチ動作を選択的に不能にするための、追加のハードウェア６２ａが設けられる。幾つかのケースにおいては、データのプリフェッチングは望ましくない。プリフェッチを停止させる指標がない場合は、プロセッサは、他のやり方にて指令しない限り、データをプリフェッチすることとなる。コンパイル時においてあるデータブロックのプリフェッチングが結果としてプロセッサインストールを招くことが知られている場合は、この指標を用いることで、ストール状態を回避することが可能となる。加えて、プリフェッチを遂行するためには、データブロックプリフェッチング用の別個のハードウェアを追加することも、或いは現存のデータブロックフェッチングハードウェア資源を用いることもできる。
【００４８】
長所として、このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、プロセッサのインストラクション処理帯域幅への影響を、あるメモリ領域にアクセスする前にプロセッサに供給されるべき情報は領域ベースアドレス、領域サイズ及びストライドのサイズのみであるために、最小限に抑えることができる。更に、これらレジスタによって要求される追加のハードウェア資源がチップ上に占める量は僅かである。
【００４９】
加えて、プリフェッチを時間的に拡散させること、追加のレジスタを用いること、及びメモリ参照インストラクション内にプリフェッチイング動作を行うべきか否かを指定すること；並びに、モリ参照パターン、つまり、メモリ参照インストラクションの間隔をソフトウェアを用いてプリフェッチハードウェアに伝えることにより、プロセッサキャッシュミスが低減される。加えて、長所として、プリフェッチングを指令（管理）するために、ハードウェアとソフトウェアの両方を用いることで、従来の技術によるそれより設計及び実現が容易になるとともに、キャッシュミスが発生した際にそれらに対処するのではなく、プロセッサキャッシュミス自体を低減させるための手段が得られる。
【００５０】
代替として、構造化されたメモリ割当アーキテクチャをサポートするオペレーティングシステムにて、メモリを、自動的に、適当なストライドの領域に編成し、或いは代替として、割当てられたメモリの周辺に適当なストライドの領域を自動的に定義することもできる。この方式によると、例えば、画像データメモリがリクエストされると、オペレーティングシステムは、それを、画像データをサポートする領域内に（自動的に）割当てる。各ハンドルは、あるアプリケーションに対するポインタテーブルをポイントするようにされるが、ただし、そのアプリケーションのデータは、オペレーティングシステムによって、ストライド要件に基づいて非連続に格納される。この方式においては、オペレーティングシステムは、アプリケーションソフトウェアの関与或いは知識なしに、ストライドデータをプロセッサに供給し、このため、アプリケーションソフトウェアを異なるプロセッサハードウェア或いは新たなより良いプリフェッチストライド値をサポートするために修正する必要はなくなる。
【００５１】
こうして、本発明は、様々なシステムレベルのいずれに実現でき、かつ、必要であれば、アプリケーション開発者にトランスパレントな形で効率的に実現できる点で、非常に有効である。
【００５２】
他の様々な形態が本発明の精神或いは範囲から逸脱することなく想達できるものである。
【図面の簡単な説明】
【００５３】
【図１】従来技術によるコンピュータメモリのデータメモリ部分のマップを示す図である。
【図２】従来技術において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられるセットの一般タスクの概要を示す図である。
【図３】従来技術のもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられる同一セットの一般タスクの概要を示す図である。
【図４】従来技術のさらにもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられるセットの一般タスクの概要を示す図である。
【図５】従来技術のさらにもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられる異なるセットの一般タスクの概要を示す図である。
【図６】ソフトウェア・ハードウェア指向領域ベースプリフェチングに対して用いるための本発明の一つの実施例を示す図である。
【図７】好ましい実施例によるアプリケーションのヘッダ部分に対する修正を示す図である。
【図８】本発明のこの一つの実施例による領域ベースのハードウェア・ソフトウェア指令プリフェッチングアプローチを可能にするためのメモリ編成を示す図である。
【図９】プロセッサによってデータのプリフェッチングを遂行するために取られるステップの概要を示す図である。
【図１０】一つの実施例に従って遂行されるシーケンシャルコピー動作に対して用いるためのメモリ編成を示す図である。
【図１１】メモリ内に同一の距離だけ離して格納された複数のデータブロックをコピーする様子を示す図である。
【符号の説明】
【００５４】
６０  プロセッサ
６１  メモリ
６２  プリフェッチ回路
６２ａ  プリフェッチング不能化回路
バス  ６４
６５  バッファメモリ
６６  領域＿ベースレジスタ
６７  領域＿サイズレジスタ
６８  領域＿ストライドレジスタ
７０  アプリケーションのヘッダ部分
６０１  マルチラインレジスタ検索テーブル
【図１】
2005524171.tif 000003
【図２】
2005524171.tif 000004
【図３】
2005524171.tif 000005
【図４】
2005524171.tif 000006
【図５】
2005524171.tif 000007
【図６】
2005524171.tif 000008
【図７】
2005524171.tif 000009
【図８】
2005524171.tif 000010
【図９】
2005524171.tif 000011
【図１０】
2005524171.tif 000012
【図１１】
2005524171.tif 000013
【国際調査報告】
2005524171.tif 000014
2005524171.tif 000015
2005524171.tif 000016