JP2005524171A - メモリ領域ベースのプリフェッチング - Google Patents

メモリ領域ベースのプリフェッチング Download PDF

Info

Publication number
JP2005524171A
JP2005524171A JP2004502137A JP2004502137A JP2005524171A JP 2005524171 A JP2005524171 A JP 2005524171A JP 2004502137 A JP2004502137 A JP 2004502137A JP 2004502137 A JP2004502137 A JP 2004502137A JP 2005524171 A JP2005524171 A JP 2005524171A
Authority
JP
Japan
Prior art keywords
memory
data
processor
stride
prefetch
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.)
Granted
Application number
JP2004502137A
Other languages
English (en)
Other versions
JP4566737B2 (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.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of JP2005524171A publication Critical patent/JP2005524171A/ja
Application granted granted Critical
Publication of JP4566737B2 publication Critical patent/JP4566737B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

マイクロプロセッサの速度が向上するにつれて、プロセッサ性能は、データアクセス動作によってますます大きく影響されるようになっている。プロセッサが、動作の際に、データ検索時間が遅いためにデータを待つことを要求される場合、これは、プロセッサストールと呼ばれ、また、定量的用語では、プロセッサストールサイクルと呼ばれる。予想されるように、RAMメモリからのデータのプリフェッチングは、このプロセッサストールサイクルを低減するために遂行され、プロセッサベースのシステムにおけるプリフェッチングの目標は、プロセッサストールサイクルの際に被る処理時間ペナルティを低減することに置かれる。ハードウェア・ソフトウェア指向プリフェッチング結合アプローチは:プログラム流内に追加されるインストラクションの量を制限することで、インストラクション帯域幅に対する制約を軽減できること、及びハードウェア資源の追加の量を最小限に抑えられることから、最適な解決策であるといえる。従来の技術のように、ハードウェア或いはソフトウェアによるメモリ参照における規則性を検出することを目指す代わりに、本発明によるハードウェア・ソフトウェア指向プリフェッチング技術は、プログラム流内に明示的プリフェッチインストラクションを用いることなく、かつ、チップ面積の追加の量を最小限に抑えながら遂行される。プロセッサのインストラクション帯域幅を最小限に抑えるために、このソフトウェア・ハードウェア指向プリフェッチングアプローチにおいては、プリフェッチ領域とそれら領域の各々に対して用いられるべき各ストライドを指定するためにプロセッサのアーキテクチャレベルの所に配置された追加のレジスタが用いられる。本発明はによると、利点として、プロセッサによるインストラクションの処理がインストラクション帯域幅に与える影響は、アプリケーション内にこれらレジスタをセットするために挿入される追加のインストラクションの帯域幅に制限される。本発明によると、プリフェッチの頻度がアプリケーション内に含まれるメモリアクセスインストラクションの間隔によって制御される。

Description

本発明は、コンピュータメモリからデータをプリフェッチングする分野、より詳細には、コンピュータメモリから、プロセッサストールサイクルが最小となるようなやり方にてデータをプリフェッチングする分野に係る。
マイクロプロセッサの速度が向上するにつれて、プロセッサ性能は、データアクセス動作によってますます大きく影響されるようになっている。プロセッサが、動作の際に、データ検索時間が遅いためにデータを待つことを要求される場合、これは、プロセッサストールと呼ばれ、また、定量的用語では、プロセッサストールサイクルと呼ばれる。プロセッサストールサイクルの回数が多いことは、遅延がより長いことを示す。
初期のコンピュータシステムでは、磁気メモリ媒体の速度の制約が問題であった。このため、公知のように、データアクセス性能を向上させるために、ディスクドライブデータのキャッシングが行なわれた。典型的なキャッシング動作においては、データは、プロセッサによってより素早くアクセスできるように、そのメモリ位置から、キャッシュ、つまり、一時的ではあるがより高速なメモリ媒体に、フェッチ或いはプリフェッチされる。こうして、格納されている全データを、例えば、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)の形態の、メモリ要件が決定される。要求されるメモリのサイズ及びタイプに基づいて、オペレーティングシステムは、プログラムメモリの一部をそのアプリケーションに割当てる。実行の際、そのアプリケーションは、データに、メモリを、データメモリの形態にて割当てる。勿論、しばしば、そのアプリケーションに対して、そのヘッダ内に定義される最大の利用可能データメモリが割当てられる。実行の際にリクエストされるデータメモリの各ブロックには、そのアプリケーションのプログラムストリーム内のインストラクションによる将来のアクセスのために、データメモリのブロックに対するハンドル、つまり、メモリ管理ポインタテーブル内のポインタへのポインタが提供される。そのアプリケーションに関する限り、そのアプリケーションに割当てられたこれら複数のデータメモリのブロックは、連続的かつ固定的である。ただし、これらブロックは、連続的であることも、固定的であることも必要とされない。メモリ管理ポインタテーブルは、アクセスされているデータの現在位置をポイントするためである。このため、アプリケーションには各割当てられたデータメモリブロックをポイントするハンドルのみが提供され、オペレーティングシステムは、このハンドルを用いてメモリの内容を移動させることで、存在するメモリのより効果的な使用を図る。こうすることで、オペレーティングシステムには、アプリケーションにはそれが参照する各データメモリブロックをポイントするハンドルが割当てられるためにアプリケーションに対する変更を必要とされることなく、データメモリ内のメモリブロックの絶対位置をスワッピングする際の柔軟的性が与えられる。
図1には、公知のメモリマッピング技術によるコンピュータメモリ101のデータメモリ100の部分の従来技術によるマップが示されている。このタイプのメモリマップは、例えば、WindowsTM等のマルチタスキングオペレーティングシステムを用いる場合に見られる。マルチタスキングオペレーティングシステムは、メモリ内に含まれる複数の異なるアプリケーションを実行する能力を有する。これを機能させるためには、各アプリケーションは、その使用のために特別に割当てられたデータメモリの部分を有する。この例においては、これら複数のアプリケーションの各々のデータ要素は、それらの各々のデータメモリブロック内に格納される。これらデータメモリブロックは、異なるタイプとサイズから成り、その中には各アプリケーションに対して特定な変数が格納される。つまり、各アプリケーションは、自身のデータメモリブロックにアクセスし、他のアプリケーションのデータメモリブロックを上書きすることはなく、これによってマルチタスキングが可能とされる。APP1は、例えば、画像データに対して割当てられているデータメモリブロック102と、オーディオデータに対して割当てられているもう一つのセットのデータメモリブロック103と、プリファレンスデータに対して割当てられているもう一つのセットのデータメモリブロック104とを有する。APP3は、他方、画像データに対するデータメモリブロック105と、プリファレンスデータに対するデータメモリブロック106とを有し、他方、APP4は、画像データを格納するために割当てられたデータメモリブロック107と、ビデオデータを格納するために割当てられたてデータメモリブロック108と、制御データを格納するために割当てられたデータメモリブロック109とを有する。これらデータメモリブロックは、各アプリケーションに対して、そのソフトウェアアプリケーション内のデータ割当てリクエストの順番に基づいて割当てられる。このようにして、類似のタイプのデータが、典型的には、多くの異なる位置に格納される。このタイプのメモリ割当ては、従来技術において公知であり、従って、これらデータメモリブロックからデータ要素をプリフェッチングするために用いるための様々な公知の方法が存在する。
従来技術の図2には、ハードウェア・ソフトウェアフェッチングに用いるためのセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションをロード及び実行する(ステップ10)。プロセッサがインストラクションを実行する際(ステップ10)に、ソフトウェア18によるメモリアクセス動作を遂行することでメモリ100からインストラクションによって用いるためのデータが取り出される(ステップ16)。メモリ100がこれらインストラクションによってアクセスされている間に、ハードウェア17にてメモリアクセスパターンを分析することでストライドが決定される(ステップ12)。いったんアクセスパターンからストライドが決定されると、ハードウェアにて決定されたストライドに基づいてデータのプリフェッチが遂行される(ステップ14)。このプリフェッチは、そのプログラムストリーム内のあるインストラクションによる予測される将来の使用のために、メモリから予測されるデータを取り出す。不幸なことに、メモリアクセスパターンを分析するためにハードウェアを用いるやり方では多量のハードウェア資源が要求され、幾つかのケースにおいては、データのプリフェッチングを効率的に遂行するために、第二のプロセッサの使用が必要となる。このアプローチは多量の追加のハードウェア資源を必要とするために、高価なものとなることが知られている。加えて、このハードウェアでは、メモリアクセスパターンを検出するための時間が必要とされ、幾つかのケースでは、メモリが参照されるやり方のために、ハードウェアアプローチでは有効なストライド情報を提供することができないこともある。
従来技術の図3には、ハードウェア・ソフトウェアプリフェッチングのために用いるための同一のセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する(ステップ20)。プロセッサがプログラムストリーム内のインストラクションを実行する間に、メモリアクセス動作を遂行することでメモリ100からデータが取り出される(ステップ26)。メモリがこれらインストラクションによってアクセスされている間に、ソフトウェアにてメモリアクセスパターンを分析することでストライドが決定される(ステップ22)。いったんアクセスパターンからストライドが決定されると、ソフトウェアによってデータのプリフェッチが先導され(ステップ24)、次に、ハードウェアによって決定されたストライドに基づいてそのプリフェッチが実行される(ステップ25)。典型的には、プリフェッチの先導(ステップ24)のためには、追加のインストラクション或いは割り込みをプログラムストリーム内に挿入し、ハードウェアに対してそのプリフェッチ動作の実行(ステップ25)がいつされるべきかを通知することが必要となる。不幸なことに、ステップ22はソフトウェア28にて実行されること、及びプログラムストリーム内にインストラクションを追加的に挿入することが必要されることなどから、プロセッサはメモリアクセスパターンを分析するための追加の機能を遂行する必要が生じることから、プロセッサ帯域幅が著しく低減され、結果として、ソフトウェアプログラムストリームの実行は、メモリを追加のハードウェアを用いて分析するステップ12のプロセスと比較して遅くなる。ただし、ソフトウェアを用いるやり方は、ストライドの決定のための追加の回路のコストの低減に寄与することが確かである。
従来技術の図4には、ハードウェア・ソフトウェアフェッチングに用いるためのセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する(ステップ30)。プロセッサがプログラムストリーム内のインストラクションを実行する間に、ソフトウェア38にてメモリアクセス動作が遂行され、メモリ100からデータを取り出される(ステップ36)。メモリがこれらインストラクションによってアクセスされている間に、ソフトウェアにてメモリアクセスパターンが分析され、ストライドを決定される(ステップ32)。いったんアクセスパターンからストライドが決定されると、プリフェッチが先導され、ハードウェア37は、このプリフェッチを決定されたストライドに基づいて遂行することで、データにアクセスする。プリフェッチは、データメモリ100(図1)から予測されるデータを、プログラムストリーム内のあるインストラクションによる将来の予測される使用のために取り出す。不幸なことに、ストライドは動的に計算されたり、ストライドがいったん計算されるとプログラムがいったん実行されるとそのストライドは固定されたり、ストライドは大多数のデータメモリアクセスに対して一度しか計算されなかったりするために、マルチメディアアプリケーションの場合のように、アプリケーションによって、様々なタイプのデータに対して様々なストライドが必要とされる状況に対しては不十分である。
従来技術の図5には、ハードウェア・ソフトウェアフェッチングに用いるための異なるセットの一般タスクの概略が示されている。プロセッサは、オペレーティングシステムと協力してインストラクション並びにプリフェッチインストラクションを含むプログラムストリームを有するソフトウェアアプリケーションを実行する(ステップ40)。プロセッサがこれらインストラクションを実行する間に、ソフトウェアにて、プログラムストリーム内の、メモリからデータを取り出すためのプリフェッチインストラクションが実行され(ステップ44)、その後、ソフトウェア48にてメモリアクセス動作を遂行することでメモリからデータが取り出される(ステップ46)。このプリフェッチインストラクションは、プログラマ或いはコンパイラによって挿入される。典型的には、インストラクション流を効率的に処理するためには、ハードウェアプラットホームのアーキテクチャを事前に知る必要があり、このためソフトウェアアプリケーションを、他のハードウェアプラットホーム上でも効率的に動作するように変更することを要求される。
ハードウェア・ソフトウェア指向プリフェッチング結合アプローチ(combined solution of hardware and software directed pre-fetching )は:プログラムストリーム内に追加されるインストラクションの量を制限することで、インストラクション帯域幅に対する制約を軽減できること、及びハードウェア資源の追加の量を最小限に抑えられることから、最適な解決策であるといえる。ハードウェア資源は、これら追加の要素(形状)に対して要求されるチップ面積の量としてひびく。従来の技術のように、ハードウェア或いはソフトウェアによるメモリ参照における規則性を検出することを目指す代わりに、ハードウェア・ソフトウェア指令プリフェッチング技術は、本発明の一つの実施例によると、プログラムストリーム内に明示的プリフェッチインストラクションを用いることなく、かつ、チップ面積の追加の量を最小限に抑えながら遂行される。
図6は、ソフトウェア・ハードウェア指向領域ベースプリフェッチング(software and hardware directed region based pre-fetching)において用いるための本発明の一つの実施例を示す。この好ましい実施例においては、プロセッサ60は、電気的に、キャッシュメモリ63、並びにバッファメモリ65に接続される。プリフェッチ回路62も、プロセッサ60と、これら2つのメモリ65、63に接続される。メモリ61は、ランダムアクセスメモリ(RAM)の形態を有し、電気的に、メモリ61からのデータをバッファメモリ65或いはキャッシュメモリ63に提供するためにバス64に接続される。プリフェッチ回路62は、データブロックのメモリ61からこれら2つのメモリ63、65のいずれかへの転送を、プロセッサ60によるプログラムストリームを含むソフトウェアアプリケーションの実行の結果として得られる、プロセッサ60からのインストラクションに基づいて指令(指揮)する。典型的には、キャッシュメモリ63は、プロセッサ60及びプリフェッチ回路62と一体化される。データブロックは、メモリ61とキャッシュメモリ63との間、メモリ61とバッファメモリ65との間、キャッシュメモリ63とバッファメモリ65との間、或いはキャッシュメモリ内の異なる2つの階層レベル間で転送されるデータの基本単位から成る。例えば、データブロックのサイズは、キャッシュメモリ63内の単一のキャッシュラインのサイズと等しくされる。プロセッサ60は、プリフェッチングを不能にするための回路62aも含む。
プロセッサのインストラクション帯域幅を最小限に抑えるために、このソフトウェア・ハードウェア指向プリフェッチングアプローチにおいては、プリフェッチ領域とそれら領域の各々に対して用いられるべき各ストライドを指定するためにプロセッサのアーキテクチャレベルの所に配置された追加のレジスタが用いられる。例えば、これら追加のレジスタはプロセッサ内に設けられ、これらは、マルチラインレジスタ検索テーブル(multi line register lookup table)601内の、領域_ベース(アドレス)レジスタ66、領域_サイズレジスタ67、及び領域_ストライドレジスタ68から構成される。これら領域_ベースレジスタ66、領域_サイズレジスタ67、及び領域_ストライドレジスタ68は、全て、トリプレットとして関連付けられ、レジスタ検索テーブル内の単一のラインと対応する。ここで、これら領域_ベースレジスタ内からのある領域_ベースレジスタは、これらレジスタの各トリプレット、つまり、領域_ベース、領域_ストライド及び領域_サイズを参照する。オプションとして、レジスタ検索テーブルは、領域ベースアドレス、領域サイズ及び領域ストライドから成る複数のトリプレットを収容できるように複数のラインを有するようにすることもできる。
レジスタ検索テーブル内の単一ライン内において、領域_ベース(アドレス)レジスタは、メモリ61内のソースメモリ領域のベースアドレスを受信するために用いられ、領域_サイズレジスタはソースメモリ領域のサイズを受信するために用いられ、領域_ストライドレジスタはソースメモリ領域内のデータをプリフェッチングするために用いられるべきストライドを受信するために用いられる。プロセッサによるインストラクションの処理のインストラクション帯域幅への影響は、そのアプリケーション内に含まれるこれらレジスタを設定するために要求される追加のインストラクションに制限される。いったんこれらレジスタが設定されると、アプリケーションのローディングの際には、アプリケーションの実行の際にこれらレジスタにさらなる値を提供するためにさらなる時間は必要とされない。
領域ベースのハードウェア・ソフトウェア指令プリフェッチングアプローチを可能にするためには、各アプリケーションに対して割当てられるデータメモリは、図1に示される従来技術による技術とは異なるやり方にて格納される。図8に示されるように、メモリは、ここでは、領域ベースのハードウェア・ソフトウェア指向プリフェッチング結合アプローチが可能となるように編成される。この領域ベースのアプローチにおいては、図8に示されるように、データメモリブロックをデータメモリ内の適当な領域に割当てることが重要となる。アプリケーションデータをこれら領域に割当てるためには、この改良されたメモリ編成を可能にするために、図7に示されるように、アプリケーションヘッダに対する修正がなされる。
アプリケーションがメモリ61内にロードされると、そのアプリケーションのヘッダ部分70がオペレーティングシステムによって読み出され、プロセッサ60によってそのアプリケーションに対するメモリ要件を決定するために処理される。このヘッダ部分70内には、検索テーブル601が格納されている。検索テーブル601は、ストライド74を、データタイプ73と、そのデータタイプのサイズ72とに関連付ける。リクエストされるメモリのサイズ72及びデータタイプ73に基づいて、オペレーティングシステムは、データメモリ内の領域を、その領域内に格納されることとなるデータタイプ73に基づいて割当てる。リクエストされたデータメモリの各領域には、その領域に対するハンドル(handle)が設けらており、このハンドルは、レジスタ検索テーブル内の、領域_ベースレジスタ66の一つ内の格納される。対応する領域サイズ72が対応する領域_サイズレジスタ67a内に格納され、その領域のストライド74が対応する領域_ストライドレジスタ内に格納される。この領域_ストライドレジスタ内に格納するための値は、プログラムのヘッダ部分内にプログラマ或いはコンパイラより形成或いは格納される。オプションとして、領域_サイズをプログラマ或いはコンパイラによって挿入することもできるが、ただし、幾つかのケースにおいては領域のサイズは既知ではなく、その領域内に格納されているデータタイプのみが既知であり、このため、その与えられた領域に対してはストライドのみが決定される。
例えば、APP1がプロセッサ及びオペレーティングシステムによってメモリ内にロードされる。APP1からのヘッダ70を処理すると、プロセッサはAPP1は画像データ、ビデオデータ、オーディオデータ、及びプリファレンスデータを用いていることを知る。このため、APP1はこれらデータタイプを格納するために用いるためにこれらメモリ領域の各々に対するハンドルを必要とする。データメモリ69内において、プロセッサは、データメモリ69内に画像メモリ領域30を割当て、このメモリ領域に対するハンドルを領域_ベースレジスタ66a内に提供する。APP1はビデオデータも用い、このためプロセッサはデータメモリ69内にビデオメモリ領域34を割当て、このメモリ領域に対するハンドルを領域_ベースレジスタ66d内に供給する。オーディオデータメモリ空間もAPP1によってリクエストされ、このため、プロセッサは、データメモリ69内にオーディオメモリ領域31を提供し、このメモリ領域に対するハンドルを領域_ベースレジスタ66b内に提供する。APP1はプリファレンスデータも用い、このため、プロセッサは、データメモリ69内にプリファレンスメモリ領域32を提供し、このメモリ領域に対するハンドルを領域_ベースレジスタ66c内に提供する。もう一つのアプリケーション、例えば、APP3もメモリ内にロードされる場合、このアプリケーションは画像データを用い、このため、プロセッサは、データメモリ69内にAPP3による使用のための画像データ領域33を割当て、このメモリ領域に対するハンドルを領域_ベースレジスタ66e内に提供する。
図9は、データのプリフェッチングを遂行するためにプロセッサによって取られるステップを概説する。使用において、このプロセッサは、オペレーティングシステムと協力して、ソフトウェアアプリケーションによってプログラムストリーム内に提供され、メモリのインストラクション部分内に格納されているインストラクションを実行する。プログラムストリーム内のメモリ参照インストラクションに応答して、プロセッサ60は、データメモリ69内の、それらインストラクションによって提供されるアドレスの所の、様々なメモリ領域に、インストラクションデータ以外のデータを処理するためにアクセスする(ステップ900)。具体的には、プロセッサは、メモリ参照インストラクションによって提供されたアドレスを、レジスタ検索テーブル内の、領域_ベースレジスタ66、及び領域_サイズレジスタ67と比較する(ステップ900)。いったん一致が発見されると、プロセッサは、次に、メモリ参照インストラクションを検索テーブル内に提供される対応する領域_ストライドを用いて実行(ステップ901)し、そのメモリ参照インストラクションによって参照された領域内から次のデータブロックをプリフェッチする。具体的には、プログラムストリーム内のあるインストラクションによってメモリ内のある特定の領域内のメモリアドレス参照が行なわれると、プリフェッチが、そのメモリアドレスから、そのアクセスされた領域に対して特定なストライドだけオフセットして位置するデータ要素に対して開始される(ステップ902)。プリフェッチを始動するために、プリフェッチ回路に、そのデータブロックの開始位置、及びそのデータブロックが位置する領域に対して用いられるべきストライドが供給される(ステップ903)。この領域ベースのアプローチによると、データ要素のプリフェッチング(ステップ904)或いはコピーを参照されているメモリ領域に基づいて、従来技術によるプリフェッチング技術との関連で説明したようなデータメモリの参照における規則(single regularity)の検出を全く要求されることなく、行うことが可能となる。こうして、メモリに、領域ベースのあるアドレスからアクセスするやり方(ステップ900)は、結果として、領域ベース(アドレス)+領域ストライドの所に位置するデータをプリプリフェッチングすることとなる(ステップ904)。そして、領域_ベース(アドレス)+領域_ストライド(の所に位置するデータ)への更なるアクセス(ステップ900)においては、領域_ベース+2×領域_ストライドの所に位置する次のデータブロックがロードされる(ステップ902)こととなり、これが繰返される。領域_ストライドがキャッシュメモリ内のキャッシュラインと同一サイズである場合は、この技術は、ネクストシーケンシャルデータブロックプリフェッチングと呼ばれる。
通常は、メモリアクセスインストラクションアドレスと領域_ベース(アドレス)レジスタ内に格納されているアドレス値とは、領域_ベースレジスタ内のアドレスはプログラムストリーム内に利用されるデータ領域から生成されることから一致する。このレジスタ検索テーブルは、プログラムストリーム内のインストラクションによって用いられるメモリアクセスアドレスを表す。勿論、インストラクションデータは、実行されてないときは、そのデータ部分内のデータを構成する。例えば、コンパイラを実行する際には、このことが該当する。つまり、コンパイラは、インストラクションデータではあるが、ただし、コンパイラの動作の際には、データとして管理され、インストラクションとしては扱われないデータを出力する。勿論、これらの区別は当業者においては明白である。
プリフェッチされたデータは、バッファメモリ65(図6)或いはキャッシュメモリ63のいずれかに格納される。プリフェッチされた一つ或いは複数のデータブロックがキャッシュメモリ内に格納された場合は、より高いキャッシュメモリ階層内に位置するデータブロックは上書き(オーバライト)され、これらキャッシュメモリのより高い階層内に以前に置かれていたデータブロックは、キャッシュメモリの階層内を下方に移動され、このため、プロセッサによって直ちにアクセスすることはできなくなる。このような状況下においては、プロセッサがキャッシュミスを解決しようと試みた場合、プロセッサストールが発生することとなる。逆に、プリフェッチされたデータがバッファメモリ内に格納された場合は、これがデータがキャッシュメモリ階層内に含まれるデータブロックを妨害することはなく、このため、この方が望ましい。最適な処理速度を実現するために、プロセッサは、最初に、キャッシュメモリ内にデータブロックが存在しないか、階層のより高いレベルの所に位置するデータから開始して、階層のより低いレベルに向かってチェックする。一つ或いは複数のデータブロックがいったんバッファメモリ内に格納されると、これらは必要に応じてキャッシュメモリに移動することができるが、ただし、幾つかのケースにおいては、コピーコマンドがソースメモリ位置から宛先メモリ位置に向けて発行されている場合には、それら一つ或いは複数のデータブロックは、バッファメモリから、キャッシュメモリに格納されることなく、直接に宛先メモリへとコピーされる。
このハードウェア・ソフトウェア指令プリフェッチングアプローチは、データをソースメモリ位置から宛先メモリ位置にコピーするためにも有効である。例えば、コピー動作においては、複数のデータ要素を含むある量のデータブロックが、ソースメモリ位置から、同一メモリ領域内の、宛先メモリ位置にコピーされる。このコピープロセスを実現するためには、プロセッサに対する一連のロード及び格納インストラクションが必要となる。典型的には、ソース位置の所のデータ要素は、キャッシュメモリ階層の高いレベルの所にも、バッファメモリ内にも存在しない。このプリフェッチングプロセスを用いると、プロセッサの性能が、データブロックをプロセッサによって要求されることを予測して、それが実際にメモリアクセスインストラクションの形態にて実現されるロードインストラクションによって要求される前にフェッチングすることで、向上させる。
例えば、図10は、データブロックをソースメモリ位置30から宛先メモリ位置(図示せず)に順次コピーする動作(図示せず)において用いられる、画像メモリ30内のデータブロックを図解する。各データブロック121−125は、複数のデータ要素を含む。ロードインストラクション(load instruction)が領域_ベース(アドレス)レジスタと比較され、いったん一致がみられると、プロセッサは、対応する領域_ストライド値、及び領域_サイズ値を用いる。領域_ストライドレジスタを、典型的にはプログラマ或いはコンパイラによって設定される、その領域内のデータブロックのサイズに設定すると、ソース領域内の第一のデータブロックを参照するメモリアクセス動作は、同一領域内の第二のデータブロックのプリフェッチを先導する。第二のデータブロックを参照する動作は、第三のデータブロックのプリフェッチを先導し、これが反復される。この技術は、ネクストシーケンシャルデータブロックプリフェッチングとして知られている。プログラムストリームは、プロセッサに対して、そのプロセッサによるコピー動作の実行の前に、そのコピー動作に関する情報を提供する。こうすることで、ソースメモリ位置から宛先メモリ位置へのコピー性能が、ストライドがその領域に対して予め決定されており、このためプロセッサストールサイクルが低減されるために、改善される。幾つかの領域内に含まれるデータのデータ処理が、他の領域内に含まれるデータの処理よりも速く終了することがある。このため、データがより高速にて処理できる領域に対しては、データの処理に時間がかかる領域に対するよりも大きなストライドが用いられる。
図10は、画像ソースメモリ領域30内に、APP1との関連で、格納されている複数のデータブロック(121−124)を図解する。この領域に対するストライドは、プログラマ或いはコンパイラによって事前に決定され、領域_ストライドレジスタ内に格納される。このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、ロードインストラクションが第一のデータブロック121を参照すると、データブロック122が自動的にプリフェッチされ;第二のデータブロック122が参照されると、データブロック123がプリフェッチされ、以下同様となる。このケースにおいては、ストライドはデータブロックのサイズとされる。
勿論、データブロックのプリフェッチ動作を遂行するために必要とされる時間が単一のデータブロックを宛先アドレスにコピーするために必要とされる時間より大きな場合は、プロセッサは、データブロックがまだプロセッサによって利用できる状態にないために、ストール(失速)する。このようなケースにおいては、その与えられた領域に対するストライドを2データブロックに相当するストライドに設定することで、ソース領域の更に前方を見るようにされる。こうすると、プロセッサはより多くのデータを処理するためにより長い時間が必要となり、要求されるデータブロックをフェッチするための次のプリフェッチ動作に対してより多くの時間を確保することが可能となる。
再度、図10との関連で、ストライドを2データブロックに相当するサイズに設定した場合のプリフェッチングシーケンスは、以下の通りとなる。つまり、ロードインストラクションが第一のデータブロック121を参照すると、第一のデータブロック121、並びに第二のデータブロック122がバッファメモリ内に格納され;データブロック123、並びに124が自動的にプリフェッチされ、第三のデータブロック123が参照されると、データブロック125と126のプリフェッチが行なわれる。
図11は、ソースメモリ開始位置が、同一メモリ領域、例えば画像メモリ領域30内においてある一定の値だけ離されており、各コピー動作においてコピーされるようにデータブロックにグループ化されるデータ要素の量は一定とされる、マルチコピー動作の場合について図解する。好ましくは、ストライドは、様々なソースメモリ開始位置間を分離するための値、例えば、データブロック500とデータブロック501とを分離するアドレスの差と等しく設定される。このマルチコピー動作においては、データブロック500を参照すると、第二のデータブロック501内に位置する全てのデータ要素130、131、132がプリフェッチされ、次のメモリ位置のデータブロック501を参照すると、第三のデータブロック502内に位置するデータ要素133、134、135がプリフェッチされる。各メモリ位置に対する開始アドレスは、その与えられた領域に対するストライドだけ増分される。このマルチコピー動作は、より大きな二次元構造の2次元サブ構造をコピーするためにも有効である。
例えば、複数のデータブロックをプリフェッチするプロセスは、メモリ内に格納されている圧縮画像、例えば、JPEG圧縮画像に対して適用することも考えられる。このケースにおいては、圧縮の性格のために、画像のデータブロックを処理することが必要となる。このプロセスを用いた場合、複数のデータブロックがメモリの画像領域内に格納されている画像データからプロセッサによって読み出される際に、プロセッサは、少なくとも画像の部分的な解凍を遂行するために、画像メモリ領域からプリフェッチされた十分なデータを有することとなる。このプロセスが用いられず、メモリの画像領域から十分なデータブロックが読み出されていない場合は、プロセッサは、前のデータブロックの部分的な解凍を継続するためには、次のデータブロックを得るためにメモリの画像部分を再び参照しなければならず、このためストールサイクル(stall cycle)を経験することとなる。データブロックのサイズがその自律的処理に対して十分でない場合には、プロセッサストールが発生する。他方、読み出されるデータブロックの数が多すぎる場合には、プロセッサはデータの残りの部分を利用しなかったり、一度に過多にバスを利用し過ぎ、バスを利用する他のデバイスを不必要に遅延させることとなる。このため、オプションとして圧縮画像ファイルにはメモリ内の特定の領域が指定される。
この領域ベースのプリフェッチングアプローチは、マルチタスキング環境に対して理想的である。このケースにおいては、マルチタスキング環境を用いて動作する際には、オペレーティングシステムは、実行されている現在のアプリケーションを追跡する。あるアプリケーションが実行のために選択されると、オペレーティングシステムは、その現在のアプリケーションに対して、対応するレジスタ検索テーブルをロードする。そして、次のアプリケーションが実行のために選択されると、第一のアプリケーションからのレジスタ検索テーブルは格納され、次のアプリケーションからのレジスタ検索テーブルがプロセッサ内にロードされる。こうして、プログラムストリーム内のメモリ参照インストラクションが実行されると、オペレーティングシステムは、現在のプログラムストリーム内のインストラクションによってアクセスされているメモリ領域を比較し、ある与えられたアプリケーションに対して十分なデータ処理が遂行できるように、そのアプリケーションによって提供される最も現在のストライドを用いる。
このタイプのストラド及び関連するデータ処理システムは、そのサーバ内に主プロセッサに接続された多数の”ダム(dumb)”端末を有し;これらダム端末は限られた処理容量を有し、そのサーバ内の主プロセッサはこれらダム端末の各々からのデータを処理するために用いられるタイプのサーバに対しても有効である。このようなケースにおいては、ダム端末上で実行されているアプリケーションがプロセッサによる実行のためにロードされると、そのアプリケーションに特定なレジスタ検索テーブルがプロセッサ内にそのプログラムストリームが効率的に処理できるようにロードされ、こうすることでプロセッサストールの低減が図られる。そして、例えば、マルチメディアアプリケーションを処理するときには、好ましくは、ある特定のストライドが、その方が各アプリケーションをより効率的に処理できるために、用いられる。
一つの代替実施例においては、領域_ストライドレジスタ内に格納されているストライドは、プロセッサの所定のメモリ領域へのアクセス性能に基づいて再計算される。例えば、そのベース領域がある初期領域_ストライドを用いてアクセスされたが、そのプログラム内或いはそのプロセッサハードウェア内の追加のインストラクションを実行した結果、そのストライドを用いてプリフェッチングするとプロセッサストールが発生することがわかった場合、ソフトウェアは、そのストライドが、その所定のメモリ領域に対してフェッチングされるデータについて、より先を見るように修正される。領域ストライドを変更したが、処理時間の改善が僅かしかみられない場合は、ソフトウェアは、領域ストライドを再び変更し、この過程が、ストライドが概ね最大許容ストライドに達するまで、或いは所定の性能の改善が達成されるまで行なわれる。次に、この改善されたストライドが、コンパイルされたコード内に自己修正コードの形式にて組み込まれ、その与えられたプログラムストリームを含むソフトウェアアプリケーションの次の実行の際に、この修正に基づく改善されたストライドが領域_ストライドレジスタ内に格納される。好ましくは、システム性能の微調節を行うために、ストライドが定期的に評価される。
インストラクション流内にメモリ参照インストラクションを有するソフトウェアアプリケーションを実行するこのやり方によると、メモリ領域からのプリフェッチ動作の頻度を調節することが可能となる。つまり、このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、ソフトウェアアプリケーションの効率的なコーディング及び厳密なコンパイルを通じて、可能であるときは、プリフェッチデータブロック転送の発生を時間的に拡散させ、これによってバスのバースト的な利用を防止するとともに、プロセッサストールサイクルの確率を低減させることも可能となる。本発明のこの実施例によると、ハードウェアを用いてストライド情報を決定するのではなく、ソフトウェアを用いてメモリアドレス領域に関するストライド情報が得られ、プログラムストリーム内に、データメモリ内のメモリ位置を参照するインストラクションを挿入することで、プリフェッチングの頻度が制御される。勿論、プリフェッチの時間的拡散は、メモリ参照パターンと関係を有し、メモリ参照パターンはプログラムストリーム内に含まれるメモリ参照インストラクションの頻度と関係し;メモリ参照インストラクションの間隔を狭くするほど、プロセッサストールの確率は高くなる。
一つの好ましい実施例においては、このプリフェッチングプロセスを更に改善させるために、コンパイラによって、ある与えられた領域を参照するメモリ参照インストラクションに対してプリフェッチが起動されるべきであるか否かを示す指標が、好ましくは、ビットの形式にて、メモリ参照インストラクション内に挿入される。この実施例においては、プロセッサ内に、メモリアクセスインストラクション内に含まれるこの指標に基づいてプリフェッチング回路62によるプリフェッチ動作を選択的に不能にするための、追加のハードウェア62aが設けられる。幾つかのケースにおいては、データのプリフェッチングは望ましくない。プリフェッチを停止させる指標がない場合は、プロセッサは、他のやり方にて指令しない限り、データをプリフェッチすることとなる。コンパイル時においてあるデータブロックのプリフェッチングが結果としてプロセッサインストールを招くことが知られている場合は、この指標を用いることで、ストール状態を回避することが可能となる。加えて、プリフェッチを遂行するためには、データブロックプリフェッチング用の別個のハードウェアを追加することも、或いは現存のデータブロックフェッチングハードウェア資源を用いることもできる。
長所として、このハードウェア・ソフトウェア指令プリフェッチングアプローチによると、プロセッサのインストラクション処理帯域幅への影響を、あるメモリ領域にアクセスする前にプロセッサに供給されるべき情報は領域ベースアドレス、領域サイズ及びストライドのサイズのみであるために、最小限に抑えることができる。更に、これらレジスタによって要求される追加のハードウェア資源がチップ上に占める量は僅かである。
加えて、プリフェッチを時間的に拡散させること、追加のレジスタを用いること、及びメモリ参照インストラクション内にプリフェッチイング動作を行うべきか否かを指定すること;並びに、モリ参照パターン、つまり、メモリ参照インストラクションの間隔をソフトウェアを用いてプリフェッチハードウェアに伝えることにより、プロセッサキャッシュミスが低減される。加えて、長所として、プリフェッチングを指令(管理)するために、ハードウェアとソフトウェアの両方を用いることで、従来の技術によるそれより設計及び実現が容易になるとともに、キャッシュミスが発生した際にそれらに対処するのではなく、プロセッサキャッシュミス自体を低減させるための手段が得られる。
代替として、構造化されたメモリ割当アーキテクチャをサポートするオペレーティングシステムにて、メモリを、自動的に、適当なストライドの領域に編成し、或いは代替として、割当てられたメモリの周辺に適当なストライドの領域を自動的に定義することもできる。この方式によると、例えば、画像データメモリがリクエストされると、オペレーティングシステムは、それを、画像データをサポートする領域内に(自動的に)割当てる。各ハンドルは、あるアプリケーションに対するポインタテーブルをポイントするようにされるが、ただし、そのアプリケーションのデータは、オペレーティングシステムによって、ストライド要件に基づいて非連続に格納される。この方式においては、オペレーティングシステムは、アプリケーションソフトウェアの関与或いは知識なしに、ストライドデータをプロセッサに供給し、このため、アプリケーションソフトウェアを異なるプロセッサハードウェア或いは新たなより良いプリフェッチストライド値をサポートするために修正する必要はなくなる。
こうして、本発明は、様々なシステムレベルのいずれに実現でき、かつ、必要であれば、アプリケーション開発者にトランスパレントな形で効率的に実現できる点で、非常に有効である。
他の様々な形態が本発明の精神或いは範囲から逸脱することなく想達できるものである。
従来技術によるコンピュータメモリのデータメモリ部分のマップを示す図である。 従来技術において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられるセットの一般タスクの概要を示す図である。 従来技術のもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられる同一セットの一般タスクの概要を示す図である。 従来技術のさらにもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられるセットの一般タスクの概要を示す図である。 従来技術のさらにもう一つの形態において教示されるハードウェア・ソフトウェアプリフェッチングに対して用いられる異なるセットの一般タスクの概要を示す図である。 ソフトウェア・ハードウェア指向領域ベースプリフェチングに対して用いるための本発明の一つの実施例を示す図である。 好ましい実施例によるアプリケーションのヘッダ部分に対する修正を示す図である。 本発明のこの一つの実施例による領域ベースのハードウェア・ソフトウェア指令プリフェッチングアプローチを可能にするためのメモリ編成を示す図である。 プロセッサによってデータのプリフェッチングを遂行するために取られるステップの概要を示す図である。 一つの実施例に従って遂行されるシーケンシャルコピー動作に対して用いるためのメモリ編成を示す図である。 メモリ内に同一の距離だけ離して格納された複数のデータブロックをコピーする様子を示す図である。
符号の説明
60 プロセッサ
61 メモリ
62 プリフェッチ回路
62a プリフェッチング不能化回路
バス 64
65 バッファメモリ
66 領域_ベースレジスタ
67 領域_サイズレジスタ
68 領域_ストライドレジスタ
70 アプリケーションのヘッダ部分
601 マルチラインレジスタ検索テーブル

Claims (19)

  1. 外部RAMメモリにアクセスするためにメモリアクセスインストラクションを含むインストラクションデータを処理するためのプロセッサであって、
    プリフェッチ動作のストライドを格納するための領域ストライドメモリ位置と、
    前記外部RAMメモリ内のその内部に格納された前記プリフェッチ動作ストライドを適用するメモリ領域を示すデータを格納するためのメモリ領域識別子と、
    前記外部RAMメモリからデータをプリフェッチするためのプリフェッチ回路とを備え、前記プリフェッチ回路は前記プリフェッチメモリ領域内のデータにアクセスするとき、前記プリフェッチメモリストライドに応答し、前記ストライドを用いて前記メモリからプリフェッチングすることを特徴とするプロセッサ。
  2. 前記メモリ領域識別子は、前記プロセッサ内の少なくともプリフェッチメモリ開始アドレス用領域ベースレジスタを含むことを特徴とする請求項1記載のプロセッサ。
  3. 前記メモリ領域識別子は、前記プロセッサ内の少なくともプリフェッチメモリサイズ用領域サイズレジスタを含むことを特徴とする請求項2記載のプロセッサ。
  4. 前記領域ストライドメモリ位置は、前記プロセッサ内の少なくともプリフェッチストライド用領域ストライドレジスタを含むことを特徴とする請求項3記載のプロセッサ。
  5. 前記少なくとも領域ストライドレジスタは可変であり、インストラクションデータの実行に伴ってプリフェッチ動作ストライドが格納されることを特徴とする請求項4記載のプロセッサ。
  6. 前記プロセッサは、プリフェッチストライドを動的に計算するための回路は備えないことを特徴とする請求項5記載のプロセッサ。
  7. プリフェッチメモリ開始アドレスレジスタ、プリフェッチメモリサイズレジスタ及びプリフェッチメモリストライドレジスタの形式にてセットのレジスタを格納するためのレジスタ検索テーブルを備えることを特徴とする請求項4記載のプロセッサ。
  8. 前記検索テーブルは、その中に格納されている複数のプリフェッチメモリ開始アドレスレジスタの内からの、特定のプリフェッチメモリ開始アドレスによって割り出されることを特徴とする請求項7記載のプロセッサ。
  9. 前記プロセッサは、プリフェッチストライド計算回路は備えないことを特徴とする請求項1記載のプロセッサ。
  10. プリフェッチ動作を不能にするための回路を備え、この回路は前記メモリアクセスインストラクション内に含まれる前記プリフェッチング回路によるプリフェッチ動作を選択的に不能にするためインジケータに応答することを特徴とする請求項1記載のプロセッサ。
  11. 外部RAMメモリからデータをプリフェッチングするための方法であって、
    プロセッサに、メモリ位置内に格納するために、外部RAM内のあるメモリ領域を決定できるためのデータと、そのメモリ領域内からデータをプリフェッチングする際に用いるためのストライドと、を提供するステップと、
    そこからプリフェッチされるデータがその内部に格納されている領域を決定するステップと、
    前記領域との関連で前記プロセッサ内に格納されているプリフェッチのストライドを決定するステップと、
    前記プリフェッチストライドに基づいてあるサイズを有するデータブロックを定義するとともに、前記外部メモリ内の先にプリフェッチされたデータブロックのメモリ位置に基づいて開始位置を定義するステップと、
    前記開始位置の所のデータブロックを宛先メモリ位置にコピーするステップと、を含むことを特徴とする方法。
  12. 前記プリフェッチストライドは、前記プロセッサにソフトウェアの実行によって供給され、前記プリフェッチストライドは、前記ソフトウェアによって識別されるある領域と関連付けられることを特徴とする請求項11記載のデータをプリフェッチングする方法。
  13. 前記領域は、類似するデータを格納するために用いられ、これら類似するデータは同一ストライドを用いてアクセスされることを特徴とする請求項11記載のデータをプリフェッチングする方法。
  14. 複数の異なるソフトウェアアプリケーションからのデータが同一の領域内に格納されることを特徴とする請求項11記載のデータをプリフェッチングする方法。
  15. 前記領域は複数の領域から選択され、各領域はある関連するストライドを有し、これら関連するストライドは前記プロセッサ内に前記領域と関連させて事前に格納されることを特徴とする請求項11記載のデータをプリフェッチングする方法。
  16. その上にデータが格納されたメモリ媒体であって、このデータは、
    プロセッサのメモリ内に第一のプリフェッチストライドを示すデータを格納するステップと、
    前記プロセッサ内のメモリ内にその内部において前記第一のプリフェッチストライドが用いられるべきメモリの第一の領域を示すデータを格納するステップと、
    を遂行するための実行可能なデータを示すことを特徴とするメモリ媒体。
  17. 前記第一の領域を示すデータは、前記メモリ媒体内に格納されている領域開始アドレスと領域長とを含むことを特徴とする請求項16記載のメモリ媒体。
  18. 前記第一の領域を示すデータは、前記メモリ媒体内に格納された領域開始アドレスと領域終端アドレスとを含むことを特徴とする請求項16記載のメモリ媒体。
  19. 前記媒体は、その内部にプリフェッチ動作を遂行するためのインストラクションを表すデータは含まないことを特徴とする請求項16記載のメモリ媒体。
JP2004502137A 2002-05-01 2003-04-22 メモリ領域ベースのプリフェッチング Expired - Lifetime JP4566737B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/136,732 US6760818B2 (en) 2002-05-01 2002-05-01 Memory region based data pre-fetching
PCT/IB2003/001701 WO2003093981A2 (en) 2002-05-01 2003-04-22 Memory region based data pre-fetching

Publications (2)

Publication Number Publication Date
JP2005524171A true JP2005524171A (ja) 2005-08-11
JP4566737B2 JP4566737B2 (ja) 2010-10-20

Family

ID=29268998

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004502137A Expired - Lifetime JP4566737B2 (ja) 2002-05-01 2003-04-22 メモリ領域ベースのプリフェッチング

Country Status (6)

Country Link
US (1) US6760818B2 (ja)
EP (1) EP1504341A2 (ja)
JP (1) JP4566737B2 (ja)
CN (1) CN100371886C (ja)
AU (1) AU2003219446A1 (ja)
WO (1) WO2003093981A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010198342A (ja) * 2009-02-25 2010-09-09 Fujitsu Semiconductor Ltd メモリアクセス判定回路、メモリアクセス判定方法および電子機器

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4093741B2 (ja) * 2001-10-03 2008-06-04 シャープ株式会社 外部メモリ制御装置およびそれを含んだデータ駆動型情報処理装置
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
US6816946B2 (en) * 2002-07-01 2004-11-09 Sony Computer Entertainment, Inc. Methods and apparatus for controlling a cache memory
US6957317B2 (en) * 2002-10-10 2005-10-18 Intel Corporation Apparatus and method for facilitating memory data access with generic read/write patterns
US7143264B2 (en) * 2002-10-10 2006-11-28 Intel Corporation Apparatus and method for performing data access in accordance with memory access patterns
JP4116413B2 (ja) 2002-12-11 2008-07-09 株式会社日立製作所 プリフェッチアプライアンスサーバ
TWI220194B (en) * 2002-12-26 2004-08-11 Rdc Semiconductor Co Ltd Method and system for accessing memory data
US7284014B2 (en) 2003-04-07 2007-10-16 Hitachi, Ltd. Pre-fetch computer system
US7124255B2 (en) * 2003-06-30 2006-10-17 Microsoft Corporation Message based inter-process for high volume data
WO2005013105A1 (ja) * 2003-08-04 2005-02-10 Fujitsu Limited ルックアップテーブル及びデータ取得方法
DE10335643B4 (de) * 2003-08-04 2007-10-31 Infineon Technologies Ag Vorrichtung und Verfahren zum Steuern des Zugriffs von mehreren Datenverarbeitungseinrichtungen auf einen Speicher
KR100546403B1 (ko) * 2004-02-19 2006-01-26 삼성전자주식회사 감소된 메모리 버스 점유 시간을 가지는 시리얼 플레쉬메모리 컨트롤러
JP4212521B2 (ja) * 2004-06-30 2009-01-21 株式会社東芝 先読み制御装置、プロセッサの一時記憶装置へデータの先読みを制御する先読み制御方法およびプログラム
US7539831B2 (en) * 2004-08-18 2009-05-26 Intel Corporation Method and system for performing memory clear and pre-fetch for managed runtimes
EP1815343A2 (en) * 2004-11-15 2007-08-08 Koninklijke Philips Electronics N.V. Cache with prefetch
US20060174228A1 (en) * 2005-01-28 2006-08-03 Dell Products L.P. Adaptive pre-fetch policy
US7206889B2 (en) * 2005-03-22 2007-04-17 Hewlett-Packard Development Company, L.P. Systems and methods for enabling communications among devices in a multi-cache line size environment and disabling communications among devices of incompatible cache line sizes
US8607005B2 (en) * 2006-02-17 2013-12-10 International Business Machines Corporation Monitoring program execution to learn data blocks accessed by software process for facilitating efficient prefetching
US8327115B2 (en) 2006-04-12 2012-12-04 Soft Machines, Inc. Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode
US20070276989A1 (en) * 2006-05-29 2007-11-29 Sandisk Il Ltd. Predictive data-loader
JP2008083983A (ja) * 2006-09-27 2008-04-10 Toshiba Corp 情報処理装置及び情報処理方法
CN107368285B (zh) * 2006-11-14 2020-10-09 英特尔公司 多线程架构
ATE504039T1 (de) * 2007-01-25 2011-04-15 Nxp Bv Hardwaregetriggerte daten-cacheleitungs- vorzuteilung
JP5574455B2 (ja) * 2009-07-20 2014-08-20 フリースケール セミコンダクター インコーポレイテッド プリフェッチ・モジュールを備える信号処理システムおよび集積回路、並びにそのための方法
US8321703B2 (en) * 2009-12-12 2012-11-27 Microsoft Corporation Power aware memory allocation
KR20130028903A (ko) * 2010-03-09 2013-03-20 해피 클라우드 인코포레이티드 대화형 결정 지향적 소프트웨어 애플리케이션을 위한 데이터 스트리밍
CN102023931B (zh) * 2010-12-17 2015-02-04 曙光信息产业(北京)有限公司 一种自适应缓存预取方法
CN108108188B (zh) 2011-03-25 2022-06-28 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
TW201327161A (zh) * 2011-12-23 2013-07-01 Ibm 記憶體控制方法與實施此方法之電腦系統
CN103729142B (zh) * 2012-10-10 2016-12-21 华为技术有限公司 内存数据的推送方法及装置
US20140189249A1 (en) * 2012-12-28 2014-07-03 Futurewei Technologies, Inc. Software and Hardware Coordinated Prefetch
EP2972836B1 (en) 2013-03-15 2022-11-09 Intel Corporation A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9280476B2 (en) * 2014-06-04 2016-03-08 Oracle International Corporation Hardware stream prefetcher with dynamically adjustable stride
US9594513B1 (en) * 2015-06-29 2017-03-14 EMC IP Holding Company LLC Data storage system with file system stream detection
US9575897B2 (en) * 2015-07-09 2017-02-21 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions from nearby memory addresses
US10185561B2 (en) 2015-07-09 2019-01-22 Centipede Semi Ltd. Processor with efficient memory access
CN105607892A (zh) * 2015-10-26 2016-05-25 珠海格力电器股份有限公司 一种多程序的并发执行方法和系统
CN106933539B (zh) * 2016-04-20 2019-03-15 上海兆芯集成电路有限公司 侦测自修正程序码的处理器与方法
JP2018124915A (ja) * 2017-02-03 2018-08-09 富士通株式会社 解析プログラム、解析方法及びストレージシステム
CN107193757B (zh) * 2017-05-16 2020-03-13 龙芯中科技术有限公司 数据预取方法、处理器和设备
US10671536B2 (en) * 2017-10-02 2020-06-02 Ananth Jasty Method and apparatus for cache pre-fetch with offset directives
US11061591B2 (en) 2018-11-02 2021-07-13 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method thereof
CN114691024A (zh) * 2020-12-31 2022-07-01 华为技术有限公司 数据预取的方法、装置和设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0454653A (ja) * 1990-06-25 1992-02-21 Hitachi Ltd キャッシュメモリ
JPH07129464A (ja) * 1993-11-05 1995-05-19 Hitachi Ltd 情報処理装置
JPH1055307A (ja) * 1996-04-22 1998-02-24 Internatl Business Mach Corp <Ibm> コンピュータ・システム
JP2000235520A (ja) * 1999-01-15 2000-08-29 Hewlett Packard Co <Hp> キャッシュ・データ管理方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6356731A (ja) * 1986-08-27 1988-03-11 Mitsubishi Electric Corp デ−タ処理装置
US5146578A (en) * 1989-05-01 1992-09-08 Zenith Data Systems Corporation Method of varying the amount of data prefetched to a cache memory in dependence on the history of data requests
US5357618A (en) * 1991-04-15 1994-10-18 International Business Machines Corporation Cache prefetch and bypass using stride registers
SE469402B (sv) 1991-05-02 1993-06-28 Swedish Inst Of Computer Scien Foerfarande foer att haemta data till ett cache-minne
US5423048A (en) * 1992-08-27 1995-06-06 Northern Telecom Limited Branch target tagging
US5442767A (en) 1992-10-23 1995-08-15 International Business Machines Corporation Address prediction to avoid address generation interlocks in computer systems
JPH06314241A (ja) * 1993-03-04 1994-11-08 Sharp Corp 高速半導体記憶装置及び高速連想記憶装置
JP2778623B2 (ja) 1995-07-21 1998-07-23 日本電気株式会社 プリフェッチ制御装置
US5854921A (en) 1995-08-31 1998-12-29 Advanced Micro Devices, Inc. Stride-based data address prediction structure
US5761506A (en) 1996-09-20 1998-06-02 Bay Networks, Inc. Method and apparatus for handling cache misses in a computer system
US5961631A (en) 1997-07-16 1999-10-05 Arm Limited Data processing apparatus and method for pre-fetching an instruction in to an instruction cache
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
US6202130B1 (en) * 1998-04-17 2001-03-13 Motorola, Inc. Data processing system for processing vector data and method therefor
GB2339037B (en) 1998-07-03 2002-11-20 Advanced Risc Mach Ltd Memory address translation in a data processing system
US6073215A (en) * 1998-08-03 2000-06-06 Motorola, Inc. Data processing system having a data prefetch mechanism and method therefor
US6321330B1 (en) * 1999-05-28 2001-11-20 Intel Corporation Each iteration array selective loop data prefetch in multiple data width prefetch system using rotating register and parameterization to avoid redundant prefetch
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0454653A (ja) * 1990-06-25 1992-02-21 Hitachi Ltd キャッシュメモリ
JPH07129464A (ja) * 1993-11-05 1995-05-19 Hitachi Ltd 情報処理装置
JPH1055307A (ja) * 1996-04-22 1998-02-24 Internatl Business Mach Corp <Ibm> コンピュータ・システム
JP2000235520A (ja) * 1999-01-15 2000-08-29 Hewlett Packard Co <Hp> キャッシュ・データ管理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010198342A (ja) * 2009-02-25 2010-09-09 Fujitsu Semiconductor Ltd メモリアクセス判定回路、メモリアクセス判定方法および電子機器

Also Published As

Publication number Publication date
EP1504341A2 (en) 2005-02-09
CN100371886C (zh) 2008-02-27
CN1650260A (zh) 2005-08-03
US6760818B2 (en) 2004-07-06
US20030208660A1 (en) 2003-11-06
WO2003093981A3 (en) 2004-03-04
WO2003093981A2 (en) 2003-11-13
AU2003219446A1 (en) 2003-11-17
JP4566737B2 (ja) 2010-10-20

Similar Documents

Publication Publication Date Title
JP4566737B2 (ja) メモリ領域ベースのプリフェッチング
US5829025A (en) Computer system and method of allocating cache memories in a multilevel cache hierarchy utilizing a locality hint within an instruction
US7577790B2 (en) Caching of dynamic arrays
JP3816586B2 (ja) 先取り命令を生成する方法とシステム
US5958040A (en) Adaptive stream buffers
US5537573A (en) Cache system and method for prefetching of data
US6076151A (en) Dynamic memory allocation suitable for stride-based prefetching
US7716427B2 (en) Store stream prefetching in a microprocessor
US7934061B2 (en) Methods and arrangements to manage on-chip memory to reduce memory latency
JP3739491B2 (ja) プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御
US20040049641A1 (en) System and method for controlling prefetching
JPH0612386A (ja) プロセス内のスレッドを同期するための方法およびシステム
EP1023661A1 (en) Application programming interface enabling application programs to control allocation of physical memory in a virtual memory system
JP2004246898A (ja) キャッシュのロックを使用するストリーミング・データ
US6668307B1 (en) System and method for a software controlled cache
US5784711A (en) Data cache prefetching under control of instruction cache
JPH09160827A (ja) コールド・キャッシュ命令のプリフェッチ
US7353337B2 (en) Reducing cache effects of certain code pieces
US7139879B2 (en) System and method of improving fault-based multi-page pre-fetches
EP1702270B1 (en) Dedicated cache memory
EP0482706A2 (en) Method for intelligent data cache prefetching, and computer for implementing this method
EP1320801A2 (en) System and method for pre-fetching for pointer linked data structures
JPH0492940A (ja) トランザクション実行方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060420

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20080703

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090723

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090814

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20091116

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20091124

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20091214

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20091221

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100114

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100226

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100526

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100602

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100614

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100804

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4566737

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

R370 Written measure of declining of transfer procedure

Free format text: JAPANESE INTERMEDIATE CODE: R370

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130813

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term