JP5255049B2 - データをキャッシュ・メモリにプリフェッチする方法、コンピュータ・プログラム、及びシステム - Google Patents

データをキャッシュ・メモリにプリフェッチする方法、コンピュータ・プログラム、及びシステム Download PDF

Info

Publication number
JP5255049B2
JP5255049B2 JP2010502506A JP2010502506A JP5255049B2 JP 5255049 B2 JP5255049 B2 JP 5255049B2 JP 2010502506 A JP2010502506 A JP 2010502506A JP 2010502506 A JP2010502506 A JP 2010502506A JP 5255049 B2 JP5255049 B2 JP 5255049B2
Authority
JP
Japan
Prior art keywords
data structure
program
data
objects
memory
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.)
Expired - Fee Related
Application number
JP2010502506A
Other languages
English (en)
Other versions
JP2010524106A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010524106A publication Critical patent/JP2010524106A/ja
Application granted granted Critical
Publication of JP5255049B2 publication Critical patent/JP5255049B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Description

本願は一般にデータ・プリフェッチに関するものである。より詳細には、本願は、プログラマブル・オブジェクト識別(programmable object identification)を使用してデータをプリフェッチする方法、システム、及びコンピュータ・プログラムに関するものである。
中央処理装置(CPU)キャッシュは、メモリ・アクセスの平均時間を短縮するためにコンピュータのCPUによって使用されるキャッシュである。CPUキャッシュは、最高使用頻度(most frequently used)のメイン・メモリ位置に所在するデータのコピーを記憶する、より小型且つ高速なメモリである。大部分のメモリ・アクセス対象がキャッシュ・メモリ位置である限り、メモリ・アクセスの平均待ち時間は、メイン・メモリ待ち時間よりもキャッシュ待ち時間の方に近くなる。
プロセッサがメイン・メモリ内のある位置の読み出し又は書き込みを行おうとするときは、まずそのメモリ位置がキャッシュ内にあるかどうかが検査される。この検査は、当該メモリ位置のアドレスと、そのアドレスを含む可能性があるキャッシュ内のすべてのタグとを比較することによって達成される。メモリ位置がキャッシュ内にあることをプロセッサが発見した場合には、キャッシュ・ヒットとなる。メモリ位置がキャッシュ内にあることをプロセッサが発見できない場合には、キャッシュ・ミスとなる。キャッシュ・ヒットの場合は、プロセッサは直ちに該当するキャッシュ・ライン内のデータの読み出し又は書き込みを行う。キャッシュ・ヒットとなるアクセスの割合はヒット率として知られ、これがキャッシュの有効性の尺度となる。
キャッシュ・ミスの場合は、大部分のキャッシュで新しいエントリが割り当てられるが、これには直前にミスとなったタグとメモリのデータのコピーとが含まれる。その後、新しいエントリにはキャッシュ・ヒットの場合と同様の参照が適用され得る。ミスの場合はデータをメイン・メモリに転送する必要があるので、処理は比較的低速となる。メイン・メモリはキャッシュ・メモリよりもずっと低速であるため、このような転送は遅延をもたらし、また、新しいデータをキャッシュに記録してからプロセッサに配信するオーバーヘッドも発生することになる。
キャッシュがいっぱいになったときは、より新しいデータ用のスペースを空けるためにデータをキャッシュから削除しなければならない。キャッシュから削除すべきデータを選択する最も一般的な方法は、特定のデータ・ブロックの最終使用時点を追跡し、未使用時間が最も長い(least recently used)ブロックをキャッシュから削除することである。したがって、データが最近使用されていなければキャッシュ内に存在する可能性は低くなり、CPUからのアクセスに先立って当該データをメイン・メモリからロードする必要が生じる。その結果、メモリからデータが検索されるまでCPUが待機することになり、性能が低下する恐れがある。
この課題に対する1つの解決策は、近い将来にどのようなデータが必要となるかを予想し、そのデータをキャッシュにプリフェッチすることである。プリフェッチすべきデータの判定に一般に使用される方法は、以下の2つである。
●順次読み出し(sequential read)
●タッチ命令(touch instruction)
順次読み出しを使用する際は、最終データ・アクセスの直前又は直後にデータ読み出しが行われる。順次読み出しは、空間的局所性が良好なデータのプリフェッチには有効であるが、ランダム位置のデータ・アクセスには有効でない。
タッチ命令が実行される度に、[0,サイズ−1]の範囲内の乱数がタッチ命令のアドレス・オペランドに追加されて仮想アドレスが生成される。アドレスのページ部分は、そのプロセスのページ参照列(page‐reference string)内の次の要素を構成する。タッチ命令によって無効なページのページ参照が生成されたときは、インタープリタはそのプロセスにフレームを割り当てなければならない。更に、タッチ命令は一般に勧告的な命令である。勧告的な命令はオプション命令であり、つまり、中央処理装置がビジー状態の場合は実行されない可能性がある。したがって、タッチ命令はハードウェアがビジー状態の場合は無効となる可能性がある。また、オブジェクトAがオブジェクトBを参照し、オブジェクトBがオブジェクトCを参照している場合のタッチ命令では、各オブジェクトは通常、ソフトウェア・スタックの様々なレイヤに所在している。その結果、オブジェクトCがオブジェクトAではなくオブジェクトBの直下にあることから、オブジェクトAを対象としたソフトウェア・スタックのレイヤ内の命令は、オブジェクトC及びオブジェクトCよりも下層に所在する他のオブジェクトを認識しないことになる。かかる状況は、タッチ命令を利用した場合にも、ソフトウェア・スタックの所与のレイヤでは階層内の直下に所在するオブジェクトしかプリフェッチすることができないことを意味する。即ち、オブジェクトAの直下に所在するオブジェクトはオブジェクトBのみであるため、オブジェクトAによってプリフェッチ可能なオブジェクトはオブジェクトBのみとなる。
例示的な諸実施形態は、オブジェクト間の既知の階層関係に基づいて、データをキャッシュにプリフェッチすることができるようにアクセス対象オブジェクトを識別する、インテリジェントな方法を提供する。プログラムが実行されたときに、前記プログラムの第1のオブジェクトのオブジェクトIDが取得される。データ構造のルックアップ処理が実行され、それによって前記オブジェクトIDが前記データ構造内に存在するかどうかが判定される。前記オブジェクトIDが前記データ構造内に存在することに応答して、前記オブジェクトIDによって参照される参照対象オブジェクトID(referenced object identifier)が検索される。前記参照対象オブジェクトIDに関連するデータがメイン・メモリから前記キャッシュ・メモリに取り出される。
例示的な諸実施形態は、前記オブジェクトIDが前記データ構造内で発見されなかったことに応答して、前記第1のオブジェクトが第2のオブジェクトを参照しているかどうかも判定する。前記第1のオブジェクトが前記第2のオブジェクトを参照していることに応答して、第1のオブジェクト情報が前記データ構造に入力される。例示的な諸実施形態は、前記第2のオブジェクトが第3のオブジェクトを参照しているかどうかも判定する。前記第2のオブジェクトが前記第3のオブジェクトを参照していることに応答して、第2のオブジェクト情報が前記データ構造に入力される。
例示的な諸実施形態において、前記オブジェクト情報は、前記オブジェクトID、オフセット、又は前記参照対象オブジェクトIDのうちの少なくとも1つを含むことができ、前記オフセットは、前記第2のオブジェクトのアドレスが参照される前記第1のオブジェクト内の位置を識別する。前記第1のオブジェクトは、複数のオブジェクトのうちの1つとすることができ、前記複数のオブジェクトはそれぞれ一意に識別することができる。リンカ/ローダ・プログラムは、前記複数の各オブジェクトを一意に識別する。前記リンカ/ローダ・プログラムは、前記複数の各オブジェクトに追加的なIDを付加することによって前記複数の各オブジェクトを一意に識別する。
他の例示的な諸実施形態では、コンピュータに読み込み可能なプログラムを有するコンピュータ使用可能な媒体を備えるコンピュータ・プログラムが提供される。前記コンピュータに読み込み可能なプログラムは、それ自体がコンピューティング・デバイス上で実行されたときに、上記の例示的な実施形態に係る方法に関して概要を示した様々な処理及びそれらの組合せを前記コンピューティング・デバイスに実行させる。
また別の例示的な実施形態では、システムが提供される。前記システムは、プロセッサと、前記プロセッサと結合されたメモリと、を備えることができる。前記メモリは、それらが前記プロセッサによって実行されたときに、上記の例示的な実施形態に係る方法に関して概要を示した様々な処理及びそれらの組合せを前記プロセッサに実行させる。
本発明ならびに本発明の好ましい使用態様及び他の目的は、以下の例示的な諸実施形態の詳細な説明を添付図面と併せて読めば最も良く理解されるはずである。
例示的な諸実施形態が実施され得るデータ処理システムのブロック図である。 例示的な一実施形態に係るプログラマブル・オブジェクト識別を使用したデータ・プリフェッチに使用される各コンポーネントの例示的なブロック図である。 例示的な一実施形態に係る例示的なオブジェクト関係を示す図である。 例示的な一実施形態に従ってオブジェクトが参照される例示的な実行可能プログラム・コードの一部分を示す図である。 例示的な一実施形態に係るオブジェクト・テーブルの例示的な論理表現を示す図である。 例示的な一実施形態に係る例示的なオブジェクト・アドレッシング・スキームを示す図である。 例示的な一実施形態に係るデータ・プリフェッチ処理のフローチャートである。
例示的な諸実施形態は、プログラマブル・オブジェクト識別を使用してデータをプリフェッチするメカニズムを提供する。図1は、本発明の諸実施形態が実施され得るデータ処理環境を例示する図である。図1は単なる例示にすぎず、本発明の諸態様又は諸実施形態が実施され得る環境を限定することを主張するものではなく、そのように暗示することも意図しているわけではないことを理解していただきたい。図示の環境には、本発明の趣旨及び範囲から逸脱しない限り様々な変更を施すことができる。
ここで図1を参照すると、例示的な諸実施形態が実施され得るデータ処理システムのブロック図が示されている。データ処理システム100は、例示的な諸実施形態に関する処理を実行するコンピュータ使用可能なコード又は命令が設置され得るコンピュータの一例である。
図示の例において、データ処理システム100は、ノース・ブリッジ及びメモリ・コントローラ・ハブ(MCH)102と、サウス・ブリッジ及び入力/出力(I/O)コントローラ・ハブ(ICH)104とを含むハブ・アーキテクチャを利用している。プロセッサ106、メイン・メモリ108、及びグラフィックス・プロセッサ110は、ノース・ブリッジ及びメモリ・コントローラ・ハブ102に連結されている。処理ユニット106は、1つ又は複数のプロセッサを含むことができ、また、1つ又は複数の異種プロセッサ・システムを使用して実装することもできる。グラフィックス・プロセッサ110は、例えば高速グラフィックス・ポート(AGP)を介してMCHに連結することができる。
図示の例において、ローカル・エリア・ネットワーク(LAN)アダプタ112は、サウス・ブリッジ及びI/Oコントローラ・ハブ104に連結され、オーディオ・アダプタ116、キーボード及びマウス・アダプタ120、モデム122、読み取り専用メモリ(ROM)124、ユニバーサル・シリアル・バス(USB)・ポート及び他の通信ポート132、ならびにPCI/PCIeデバイス134は、バス138を介してサウス・ブリッジ及びI/Oコントローラ・ハブ104に連結され、ハード・ディスク・ドライブ(HDD)126及びCD‐ROMドライブ130は、バス140を介してサウス・ブリッジ及びI/Oコントローラ・ハブ104に連結されている。PCI/PCIeデバイスとしては、例えばイーサネット(R)・アダプタ、アドイン・カード、及びノート型コンピュータ用のPCカード等を挙げることができる。PCIはカード・バス・コントローラを使用するが、PCIeはこれを使用しない。ROM 124は、例えばフラッシュ・バイナリ入力/出力システム(BIOS)等であってもよい。ハード・ディスク・ドライブ126及びCD‐ROMドライブ130は、例えば統合ドライブ・エレクトロニクス(IDE)やシリアル・アドバンスト・テクノロジー・アタッチメント(SATA)・インターフェース等を使用することができる。スーパーI/O(SIO)デバイス136は、サウス・ブリッジ及びI/Oコントローラ・ハブ104に連結することができる。
オペレーティング・システムは、プロセッサ106上で作動して図1のデータ処理システム100内の様々なコンポーネントの調整を行い、それらの制御を実行する。オペレーティング・システムは、Microsoft(R)Windows(R)XPのような市販のオペレーティング・システムであってもよい(「Microsoft」及び「Windows」は、マイクロソフト・コーポレーションの米国その他の国、又はその両方における商標である)。Java(TM)プログラミング・システムのようなオブジェクト指向のプログラミング・システムは、上記オペレーティング・システムと連動して作動することができ、データ処理システム100上で実行されているJavaプログラム又はアプリケーションから当該オペレーティング・システムへのコールを行うものである。「Java」及び「Java」に基づくすべての商標は、サン・マイクロシステムズの米国その他の国、又はその両方における商標である。
上記オペレーティング・システムに対する命令、上記オブジェクト指向のプログラミング・システム、及びアプリケーション又はプログラムは、ハード・ディスク・ドライブ126のようなストレージ・デバイス上に設置され、処理ユニット106による実行のためにメイン・メモリ108にロードすることができる。例示的な諸実施形態に関する各処理は、例えばメイン・メモリ108や読み取り専用メモリ124等のメモリ内に設置することも、1つ又は複数の周辺デバイス内に設置することもできるコンピュータ実装命令を使用して、処理ユニット106によって実行され得る。
図1のハードウェアは実装形態に応じて異なる可能性がある。図1に示されるハードウェアに加えて又はその代わりに、フラッシュ・メモリ又は同等の不揮発性メモリあるいは光ディスク・ドライブ等、他の内部ハードウェア又は周辺デバイスを使用することもできる。また、本発明の上記処理は、マルチプロセッサ・データ処理システムにも適用することができる。
いくつかの実例において、データ処理システム100は一般に、オペレーティング・システム・ファイル又はユーザ生成データあるいはその両方を記憶する不揮発性メモリを提供するフラッシュ・メモリが組み込まれた携帯情報端末(PDA)であってもよい。バス・システムは、システム・バス、I/Oバス、PCIバスのような1つ又は複数のバスから構成されることもある。言うまでもなく、上記バス・システムは、任意のタイプの通信ファブリック又はアーキテクチャであって、当該ファブリック又はアーキテクチャに取り付けられた様々なコンポーネント又はデバイス間でデータの転送を実施する通信ファブリック又はアーキテクチャを使用して実装することができる。通信ユニットは、モデムやネットワーク・アダプタ等、データの送受信に使用される1つ又は複数のデバイスを含むことができる。メモリは、例えばメイン・メモリ108であることも、ノース・ブリッジ及びメモリ・コントローラ・ハブ102内で見受けられるキャッシュであることもある。処理ユニットは、1つ又は複数のプロセッサあるいはCPUを含むことができる。図1に示される例及び上述の実例は、アーキテクチャ上の限定を暗示することを意図しているわけではない。例えば、データ処理システム100は、PDAの形をとるだけでなく、タブレット・コンピュータ、ラップトップ・コンピュータ、あるいは電話デバイスの形をとることもできる。
図2は、例示的な一実施形態に係るプログラマブル・オブジェクト識別を使用したデータ・プリフェッチに使用される各コンポーネントの例示的なブロック図である。例示的な諸実施形態では、オブジェクトがプログラムの基本ビルディング・ブロックとして使用されるランタイム・データ・ストレージの個々の単位となるので、データの代わりにオブジェクトという用語が使用される。プログラマブル・オブジェクト識別を使用してオブジェクトをプリフェッチするために、コンパイラ204はまずソース・コード202をコンパイルしなければならない。ソース・コード202は、図1のデータ処理システム100のようなデータ処理システムによって実行されるプログラム又はアプリケーションとすることができる。コンパイラ204は、ソース・コンピュータ言語で書かれたソース・コード202のテキストをターゲット・コンピュータ言語又はオブジェクト・コード206に変換するコンピュータ・プログラム又はプログラム・セットである。オブジェクト・コード206は、最も一般的にはリンカ/ローダ・モジュール208のような他のプログラムによる処理に適した形をとるが、人間が判読可能なテキスト・ファイルとすることもできる。ソース・コード202のコンパイル中、コンパイラ204は、オブジェクトID 210を使用してソース・コード202内のオブジェクトを識別する。次に、オブジェクト固有IDジェネレータ(object unique identifier generator)212は、オブジェクトID 210で識別される各オブジェクトに固有IDを割り当てる。その後、それらの一意識別オブジェクト(uniquely identified object)がオブジェクト・コード206に含められる。
ユーザがプログラムの実行を要求したときは、リンカ/ローダ・モジュール208は、コンパイラ204によって生成されたオブジェクト・コード206内の一意識別オブジェクトを識別する。更に、リンカ/ローダ・モジュール208は、あるプログラムのオブジェクトと別のプログラムのオブジェクトとを区別することができるように一意識別オブジェクトに追加的なIDを付加することによって、一意識別オブジェクトを一意に識別することもできる。更に、後述するように、プログラム固有の固有IDを用いてオブジェクトを区別することにより、オブジェクトを容易に識別することが可能となり、その結果キャッシュ性能が高まる可能性がある。次に、リンカ/ローダ・モジュール208は、コンパイラ204によって生成されたオブジェクト・コード206を解釈して実行可能プログラム214にアセンブルする。リンカ/ローダ・モジュール208によって作成された実行可能プログラム214は、図1のメイン・メモリ108のようなメモリ216に記憶される。
実行可能プログラム214は、それぞれ所与のコンポーネントに属するオブジェクトに作用することによって1組のタスクを達成する、いくつかのレイヤのコンポーネント・コードから成るスタックである。コンポーネントとは、インストール対象となるプログラム部分を指し、例えば単一ファイル、関連ファイル群、オブジェクト、レジストレーション、レジストリ・キー、ショートカット、リソース、ディレクトリにグループ化されるライブラリ、共有コード部分等が該当する。単純な一例としては、下層から順にアダプタ・ドライバ、プロトコル・ドライバ、アレイ・ドライバ、論理ボリューム・ドライバが配置され、以下同様にドライバが配置され得るいくつかのレイヤのドライバで構成されるI/Oスタックがある。
次に、処理ユニット218は、実行可能プログラム214を実行する。実行可能プログラム214が処理ユニット218によって実行されると、プログラマブル・オブジェクト・プリフェッチ/識別モジュール(programmable object prefetch/identifier module)220は、実行可能プログラム214内に現れる一意識別オブジェクトを識別していく。次に、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、オブジェクト・テーブル222を参照して、別のオブジェクトを参照する一意識別オブジェクトがオブジェクト・テーブル222内で参照されるかどうかを判定する。オブジェクト・テーブル222は、他の一意識別オブジェクトを参照する一意識別オブジェクトから成る2次元データ構造である。プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、プログラムの実行中に一意識別オブジェクトを発見しながらそれらをオブジェクト・テーブル222に入力していく。別のオブジェクトを参照する一意識別オブジェクトがオブジェクト・テーブル222内で参照されない場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、一意識別オブジェクトのオブジェクトIDと、一意識別オブジェクトによって参照されるすべてのオブジェクトと、各参照対象オブジェクトのアドレス位置に対応する一意識別オブジェクトのアドレス内の各オフセットとをオブジェクト・テーブル222に入力する。
次に、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、参照対象オブジェクトが他のオブジェクトを参照しているかどうかを判定する。参照対象オブジェクトが他のオブジェクトを参照している場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、参照対象オブジェクトのオブジェクトIDと、参照対象オブジェクトによって参照されるすべてのオブジェクトと、他の各参照対象オブジェクトのアドレス位置に対応する参照対象オブジェクトのアドレス内の各オフセットとをオブジェクト・テーブル222に入力する。他のオブジェクトによって参照されるオブジェクトをプリフェッチすることによってシステム性能を改善するために、オブジェクト・テーブル222には他のオブジェクトを参照するオブジェクトに関するオブジェクト情報だけが含められるので、実行可能プログラム214内の参照対象オブジェクトが他のオブジェクトを参照していない場合は、オブジェクト・テーブル222に情報は入力されない。
オブジェクト・テーブル222内に別のオブジェクトを参照する一意識別オブジェクトが存在する場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、メイン・メモリ内の参照対象オブジェクト224をプリフェッチするために、オブジェクト・テーブル222内で識別されたオフセットを使用して一意識別オブジェクトからアドレスを取得する。次に、プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、プリフェッチされたオブジェクトをキャッシュ226内に配置する。プログラマブル・オブジェクト・プリフェッチ/識別モジュール220は、オブジェクト・テーブル222内で識別されたオフセットを使用して一意識別オブジェクト内の各参照対象オブジェクトのアドレスを識別し、各参照対象オブジェクトをキャッシュ226にプリフェッチする。
図3は、例示的な一実施形態に係る例示的なオブジェクト関係を示している。オブジェクト関係300は、図2の実行可能プログラム214のような実行可能プログラム内に存在し得るオブジェクト間の関係である。オブジェクト関係300において、オブジェクトA 302は、他の2つのオブジェクト、即ちオブジェクトB 304及びオブジェクトC 306を参照している。図面から分かるように、オブジェクトB 304は更にオブジェクトD 308及びオブジェクトE 310も参照している。また、オブジェクトC 306は、オブジェクトF 312を参照している。
実行可能プログラムの実行中にプログラマブル・オブジェクト・プリフェッチ/識別モジュールがオブジェクトA 302を発見したときは、オブジェクトA 302内のオフセットを使用してオブジェクトB 304及びオブジェクトC 306がキャッシュにプリフェッチされる。オブジェクトB 304及びオブジェクトC 306がプリフェッチされると、やはりオブジェクトB 304及びオブジェクトC 306内の各オフセットを使用してオブジェクトD 308、オブジェクトE 310、及びオブジェクトF 312がキャッシュにプリフェッチされる。
図4は、例示的な一実施形態に従ってオブジェクトが参照される例示的な実行可能プログラム・コードの一部分を示している。実行可能プログラム・コード部分400は、図2の実行可能プログラム214のようなコードであってよい。実行可能プログラム・コード部分400は、図3のオブジェクト関係を表すプログラム・コードである。実行可能プログラム・コード部分400において、オブジェクトA 402は、他の2つのオブジェクト、即ちオブジェクトB 404及びオブジェクトC 406を参照している。図面から分かるように、オブジェクトB 404は更にオブジェクトD 408及びオブジェクトE 410も参照している。また、オブジェクトC 406はオブジェクトF 412を参照している。
このオブジェクト関係を把握することにより、実行可能プログラム・コード部分400の階層内の他のオブジェクトを効果的にプリフェッチすることが可能となる。重要なポイントは、プリフェッチされるオブジェクトに空間的局所性がないこと、及びオブジェクト関係がテーブルの形で構築されることである。上述のとおり、オブジェクト・タイプ毎に2次元オブジェクト・テーブルが維持される。オブジェクト・テーブルは、一意識別オブジェクトのオブジェクトID、一意識別オブジェクトによって参照されるすべてのオブジェクト、参照対象オブジェクトのアドレス位置に対応する一意識別オブジェクトのアドレス内の各オフセット等の情報を保持する。
図5は、例示的な一実施形態に係るオブジェクト・テーブルの例示的な論理表現を示している。オブジェクト・テーブル500は、オブジェクトID 502と、オブジェクト内オフセット(offset in the object)504と、被参照オブジェクト(object pointed to)506とを含む。オブジェクトID 502は、別のオブジェクトを参照する一意識別オブジェクトのID又は名前である。オブジェクト内オフセット504は、一意識別オブジェクト内で別のオブジェクトを参照するアドレスである。被参照オブジェクト506は、一意識別オブジェクトによって参照されるオブジェクトのIDである。オブジェクト・テーブル500は、ハードウェアによって例えばLRU(Least Recently Used:最長未使用時間)形式やLFU(Least Frequently Used:最低使用頻度)形式等で維持することができる。LRUアルゴリズムは、未使用時間が最も長いアイテムを最初に破棄する。LRUアルゴリズムでは、いつ何が使用されたかを追跡する必要がある。LFUアルゴリズムは、あるアイテムが必要とされる頻度をカウントし、使用頻度が最も低いアイテムを最初に破棄する。したがって、オブジェクト・テーブル500内の大部分のオブジェクト参照は、頻繁に参照又は使用されるオブジェクト・タイプが対象となる。
図6は、例示的な一実施形態に係る例示的なオブジェクト・アドレッシング・スキームを示している。オブジェクト・アドレッシング・スキーム600において、オブジェクトA 602の仮想アドレス(VA)は「0x1000」である。図5のオブジェクト・テーブル500のようなオブジェクト・テーブルを使用した場合、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、オブジェクトA 602を発見したときに(VA+0x10)がオブジェクトB 604の仮想アドレス(VB)「0x200」を指し、(VA+0x40)がオブジェクトC 606の仮想アドレス(VC)「0x4000」を指すことも理解する。その後、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、オブジェクトB 604を発見したときに(VB+0x80)がオブジェクトD 608の仮想アドレス(VD)「0x8800」を指し、(VB+0x88)がオブジェクトE 610の仮想アドレス(VE)「0x2000」を指すことも理解する。したがって、プログラマブル・オブジェクト・プリフェッチ/識別モジュールはその後、オブジェクトC 606を発見したときに(VC+0x48)がオブジェクトF 612の仮想アドレス(VF)「0x100」を指すことを理解する。このように、図2のプログラマブル・オブジェクト・プリフェッチ/識別モジュール220のようなプログラマブル・オブジェクト・プリフェッチ/識別モジュールによるオブジェクト識別は、ソフトウェア・スタックのレイヤ全体にわたるオブジェクトを実時間で効果的にフェッチする。
図7は、例示的な一実施形態に係るデータ・プリフェッチ処理のフローチャートを示している。上述のとおり、例示的な諸実施形態では、オブジェクトがプログラムの基本ビルディング・ブロックとして使用されるランタイム・データ・ストレージの個々の単位となるので、データの代わりにオブジェクトという用語が使用されている。処理が開始されると、図2のコンパイラ204のようなコンパイラがソース・コードをコンパイルする(ステップ702)。ソース・コードのコンパイル中に、コンパイラはオブジェクトIDを使用してソース・コード内のオブジェクトを識別する(ステップ704)。次に、コンパイラは、オブジェクト固有IDジェネレータを使用してオブジェクトIDで識別される各オブジェクトに固有IDを割り当てる(ステップ706)。次に、コンパイラは、一意識別オブジェクトを含むオブジェクト・コードを作成する(ステップ708)。
図2の処理ユニット218のような処理ユニットがプログラム実行要求を受信すると(ステップ710)、図2のリンカ/ローダ・モジュール208のようなリンカ/ローダ・モジュールは、コンパイラによって生成されたオブジェクト・コード内の一意識別オブジェクトを識別する(ステップ712)。次に、リンカ/ローダ・モジュールは、一意識別オブジェクトに追加的なIDを更に付加することによって一意識別オブジェクトを一意に識別する(ステップ714)。次に、リンカ/ローダ・モジュールは、オブジェクト・コード及びオブジェクトを単一の実行可能プログラムにアセンブルしてメモリに記憶する(ステップ716)。
次に、処理ユニットは、実行可能プログラムを実行する(ステップ718)。処理ユニットが実行可能プログラムを実行すると、図2のプログラマブル・オブジェクト・プリフェッチ/識別モジュール220のようなプログラマブル・オブジェクト・プリフェッチ/識別モジュールは、実行中のプログラム内に現れる一意識別オブジェクトを識別していく(ステップ720)。次に、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、図2のオブジェクト・テーブル222のようなオブジェクト・テーブルを参照する(ステップ722)。プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、別のオブジェクトを参照する一意識別オブジェクトがオブジェクト・テーブル内で参照されるかどうかを判定する(ステップ724)。
ステップ724で別のオブジェクトを参照する一意識別オブジェクトがオブジェクト・テーブル内で参照されない場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、一意識別オブジェクトのオブジェクトIDと、一意識別オブジェクトによって参照されるすべてのオブジェクトと、各参照対象オブジェクトのアドレス位置に対応する一意識別オブジェクトのアドレス内の各オフセットとをオブジェクト・テーブルに入力する(ステップ726)。次に、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、参照対象オブジェクトが他のオブジェクトを参照しているかどうかを判定する(ステップ728)。ステップ728で参照対象オブジェクトが他のオブジェクトを参照している場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、参照対象オブジェクトのオブジェクトIDと、参照対象オブジェクトによって参照されるすべてのオブジェクトと、他の各参照対象オブジェクトのアドレス位置に対応する参照対象オブジェクトのアドレス内の各オフセットとをオブジェクト・テーブルに入力し(ステップ730)、その後ステップ718に戻る。ステップ728でオブジェクト・テーブル内の参照対象オブジェクトが他のオブジェクトを参照していない場合には、ステップ718に戻る。
ステップ724に戻って、別のオブジェクトを参照する一意識別オブジェクトがオブジェクト・テーブル内に存在する場合には、プログラマブル・オブジェクト・プリフェッチ/識別モジュールは、オブジェクト・テーブル222内で識別されたオフセットを使用して一意識別オブジェクトからアドレスを取得し、それによってメイン・メモリ内のオブジェクトから参照対象オブジェクトをプリフェッチし、当該プリフェッチされたオブジェクトをキャッシュに配置する(ステップ732)。その後ステップ718に戻る。
このように、例示的な諸実施形態は、プログラマブル・オブジェクト識別を使用してデータをプリフェッチする。プログラムが実行されたときに、前記プログラムの第1のオブジェクトのオブジェクトIDが取得される。データ構造のルックアップ処理が実行され、それによって前記オブジェクトIDが前記データ構造内に存在するかどうかが判定される。前記オブジェクトIDが前記データ構造内に存在することに応答して、前記オブジェクトIDによって参照される参照対象オブジェクトIDが検索される。前記参照対象オブジェクトIDに関連するデータがメイン・メモリから前記キャッシュ・メモリに取り出され、またはプリフェッチされる。
例示的な諸実施形態は全体としてハードウェアの実施形態の形をとることも、全体としてソフトウェアの実施形態の形をとることもでき、ハードウェア要素とソフトウェア要素の両方を含む実施形態とすることもできることを理解していただきたい。例示的な一実施形態において、例示的な各実施形態に係るメカニズムは、必ずしもそれだけに限定されるわけではないが、ファームウェア、常駐ソフトウェア、マイクロコード等を含むソフトウェアで実施される。
更に、例示的な諸実施形態は、コンピュータ又は任意の命令実行システムによって、あるいはそれらに関連して使用されるプログラム・コードを備えるコンピュータ使用可能な又はコンピュータに読み込み可能な媒体からアクセスできる、コンピュータ・プログラム製品の形をとることもできる。本明細書では、コンピュータ使用可能な又はコンピュータに読み込み可能な媒体は、上記命令実行システム、装置、又はデバイスによって、あるいはそれらに関連して使用される上記プログラムを、収容し記憶し通信し伝搬し又は移送することができる任意の装置であってよい。
上記媒体は、電子系媒体、磁気系媒体、光学系媒体、電磁気系媒体、赤外線系媒体、又は半導体系媒体(あるいは装置又はデバイス)あるいは伝搬媒体であってもよい。コンピュータに読み込み可能な媒体の例としては、半導体又は固体メモリ、磁気テープ、着脱自在のコンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、固定磁気ディスク、及び光ディスクが挙げられる。光ディスクの現行例としては、コンパクト・ディスク読み取り専用メモリ(CD‐ROM)、コンパクト・ディスク読み出し/書き込み(CD‐R/W)、及びDVDが挙げられる。プログラム・コードを記憶し又は実行しあるいはその両方を行うのに適したデータ処理システムは、システム・バスを介してメモリ要素に直接又は間接的に連結される少なくとも1つのプロセッサを含む。上記メモリ要素は、上記プログラム・コードの実際の実行中に利用されるローカル・メモリ、バルク・ストレージ、及び実行中にバルク・ストレージからコードを検索しなければならない回数を少なくするために、少なくともいくつかのプログラム・コードを一時的に記憶するキャッシュ・メモリを含むことができる。
入力/出力、即ちI/Oデバイス(必ずしもそれだけに限定されるわけではないが、キーボード、ディスプレイ、ポインティング・デバイス等を含む)は、上記システムに直接連結することも、I/Oコントローラを介して連結することもできる。介在する私設ネットワーク又は公共ネットワークを通して他のデータ処理システムあるいは遠隔プリンタ又はストレージ・デバイスに、上記データ処理システムが連結できるようにするために、上記システムにネットワーク・アダプタを連結することもできる。モデム、ケーブル・モデム及びイーサネット・カードは、現時点で使用可能なタイプのネットワーク・アダプタのほんのいくつかにすぎない。
本発明の記載は例示及び説明のために提示しているものであって、本発明の実施形態を余すところのないものとし、又は開示の形態に限定することは、本出願人の意図するところではない。当業者には多くの修正、変更が可能なことは明白であろう。上記実施形態は、本発明の諸原理及び実際の応用例が最良の形で説明されるように、また、想定される特定の使用に適するように様々な修正が施された様々な実施形態について当業者が本発明を理解することが可能となるように選択され説明されている。

Claims (11)

  1. データ処理システムにおいてデータをキャッシュ・メモリにプリフェッチする方法であって、
    プログラムを実行するステップと、
    前記プログラムが実行されたときに、複数のオブジェクトを含む前記プログラムの第1のオブジェクトのオブジェクトIDを取得するステップと、
    他の一意識別オブジェクトを参照する一意識別オブジェクトのIDを保持するためのオブジェクト・テーブルであることを特徴とするデータ構造に関して第1のルックアップ処理を実行して前記オブジェクトIDが前記データ構造内に存在するかどうかを判定するステップと、
    前記オブジェクトIDが前記データ構造内に存在することに応答して、第1のオブジェクトの前記オブジェクトIDによって参照される参照対象オブジェクトの参照対象オブジェクトIDを検索するステップと、
    記参照対象オブジェクトのデータをメイン・メモリから前記キャッシュ・メモリにプリフェッチするステップと、
    を含む方法。
  2. 前記オブジェクトIDが前記データ構造内で発見されなかったことに応答して、前記第1のオブジェクトが第2のオブジェクトを参照しているかどうかを判定するステップと、
    前記第1のオブジェクトが前記第2のオブジェクトを参照していることに応答して、前記データ構造に第1のオブジェクト情報が含まれるように入力するステップと、
    を更に含む、請求項1に記載の方法。
  3. 前記第2のオブジェクトが第3のオブジェクトを参照しているかどうかを判定するステップと、
    前記第2のオブジェクトが前記第3のオブジェクトを参照していることに応答して、前記データ構造に第2のオブジェクト情報が含まれるように入力するステップと、
    を更に含む、請求項2に記載の方法。
  4. 前記オブジェクト情報は、前記オブジェクトID、オフセット、又は前記参照対象オブジェクトIDのうちの少なくとも1つを含み、前記オフセットは、前記第2のオブジェクトのアドレスが参照される前記第1のオブジェクト内の位置を識別する、請求項2に記載の方法。
  5. 前記第1のオブジェクトは、複数のオブジェクトのうちの1つであり、前記複数のオブジェクトはそれぞれ一意に識別される、請求項1乃至4のいずれかに記載の方法。
  6. リンカ/ローダ・プログラムに基づいて、前記複数の各オブジェクトを一意に識別し、任意選択で前記複数の各オブジェクトに追加的なIDを付加することによって前記複数の各オブジェクトを一意に識別する、請求項5に記載の方法。
  7. データ処理システム内で実行されたときに前記データ処理システムに、
    プログラムが実行されたときに、前記プログラムの第1のオブジェクトのオブジェクトIDを取得させ、
    他の一意識別オブジェクトを参照する一意識別オブジェクトのIDを保持するためのオブジェクト・テーブルであることを特徴とするデータ構造のルックアップ処理を実行させて前記オブジェクトIDが前記データ構造内に存在するかどうかを判定させ、
    前記オブジェクトIDが前記データ構造内に存在することに応答して、前記オブジェクトIDによって参照される参照対象オブジェクトIDを検索させ、
    前記参照対象オブジェクトIDに関連するデータをメイン・メモリからキャッシュ・メモリにプリフェッチさせるための
    コンピュータ・プログラム。
  8. プロセッサと、
    前記プロセッサと結合されたメモリと、
    を備えるシステムであって、前記メモリは、それらが前記プロセッサによって実行されたときに前記プロセッサに
    プログラムを実行させ、
    前記プログラムが実行されたときに、複数のオブジェクトを含む前記プログラムの第1のオブジェクトのオブジェクトIDを取得させ、
    他の一意識別オブジェクトを参照する一意識別オブジェクトのIDを保持するためのオブジェクト・テーブルであることを特徴とするデータ構造に関して第1のルックアップ処理を実行させて前記オブジェクトIDが前記データ構造内に存在するかどうかを判定させ、
    前記オブジェクトIDが前記データ構造内に存在することに応答して、第1のオブジェクトの前記オブジェクトIDによって参照される参照対象オブジェクトの参照対象オブジェクトIDを検索させ、
    記参照対象オブジェクトのデータをメイン・メモリからキャッシュ・メモリにプリフェッチさせるためのものである
    命令を備えるシステム。
  9. 前記命令は更に、前記プロセッサに
    前記オブジェクトIDが前記データ構造内で発見されなかったことに応答して、前記第1のオブジェクトが第2のオブジェクトを参照しているかどうかを判定させ、
    前記第1のオブジェクトが前記第2のオブジェクトを参照していることに応答して、前記データ構造に第1のオブジェクト情報が含まれるように入力させるためのものである
    請求項8に記載のシステム。
  10. 前記命令は更に、前記プロセッサに
    前記第2のオブジェクトが第3のオブジェクトを参照しているかどうかを判定させ、
    前記第2のオブジェクトが前記第3のオブジェクトを参照していることに応答して、前記データ構造に第2のオブジェクト情報が含まれるように入力させるためのものである
    請求項9に記載のシステム。
  11. 前記オブジェクト情報は、前記オブジェクトID、オフセット、又は前記参照対象オブジェクトIDのうちの少なくとも1つを含み、前記オフセットは、前記第2のオブジェクトのアドレスが参照される前記第1のオブジェクト内の位置を識別する、請求項9に記載のシステム。
JP2010502506A 2007-04-10 2008-04-10 データをキャッシュ・メモリにプリフェッチする方法、コンピュータ・プログラム、及びシステム Expired - Fee Related JP5255049B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/733,352 2007-04-10
US11/733,352 US7640400B2 (en) 2007-04-10 2007-04-10 Programmable data prefetching
PCT/EP2008/054327 WO2008122660A1 (en) 2007-04-10 2008-04-10 Programmable data prefetching

Publications (2)

Publication Number Publication Date
JP2010524106A JP2010524106A (ja) 2010-07-15
JP5255049B2 true JP5255049B2 (ja) 2013-08-07

Family

ID=39422701

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010502506A Expired - Fee Related JP5255049B2 (ja) 2007-04-10 2008-04-10 データをキャッシュ・メモリにプリフェッチする方法、コンピュータ・プログラム、及びシステム

Country Status (5)

Country Link
US (1) US7640400B2 (ja)
JP (1) JP5255049B2 (ja)
KR (1) KR101159412B1 (ja)
CN (1) CN101652759B (ja)
WO (1) WO2008122660A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008225915A (ja) * 2007-03-13 2008-09-25 Fujitsu Ltd プリフェッチ制御装置、記憶装置システムおよびプリフェッチ制御方法
US8032714B2 (en) * 2007-09-28 2011-10-04 Aggregate Knowledge Inc. Methods and systems for caching data using behavioral event correlations
JP2014035431A (ja) * 2012-08-08 2014-02-24 Renesas Mobile Corp ボコーダ処理方法、半導体装置、及び電子装置
US10268586B2 (en) * 2015-12-08 2019-04-23 Via Alliance Semiconductor Co., Ltd. Processor with programmable prefetcher operable to generate at least one prefetch address based on load requests
CN108073525B (zh) * 2016-11-08 2021-10-19 华为技术有限公司 预取数据的方法、装置和系统
US10860491B2 (en) * 2019-05-03 2020-12-08 Mediate Inc. Cache management method using object-oriented manner and associated microcontroller
US11687611B2 (en) * 2021-10-15 2023-06-27 Servicenow, Inc. Intermediate widget cache

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537573A (en) * 1993-05-28 1996-07-16 Rambus, Inc. Cache system and method for prefetching of data
US5822576A (en) * 1997-03-26 1998-10-13 International Business Machines Corporation Branch history table with branch pattern field
US6728726B1 (en) * 1999-03-05 2004-04-27 Microsoft Corporation Prefetching and caching persistent objects
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching
US6643743B1 (en) 2000-03-31 2003-11-04 Intel Corporation Stream-down prefetching cache
US6662274B2 (en) * 2001-06-20 2003-12-09 Intel Corporation Method for using cache prefetch feature to improve garbage collection algorithm
US6751709B2 (en) * 2002-05-15 2004-06-15 Sun Microsystems, Inc. Method and apparatus for prefetching objects into an object cache
US7266676B2 (en) * 2003-03-21 2007-09-04 Analog Devices, Inc. Method and apparatus for branch prediction based on branch targets utilizing tag and data arrays
US7124253B1 (en) * 2004-02-18 2006-10-17 Sun Microsystems, Inc. Supporting directory-based cache coherence in an object-addressed memory hierarchy
CN100445944C (zh) * 2004-12-21 2008-12-24 三菱电机株式会社 控制电路以及控制方法

Also Published As

Publication number Publication date
WO2008122660A1 (en) 2008-10-16
CN101652759A (zh) 2010-02-17
US20080256302A1 (en) 2008-10-16
KR20090129395A (ko) 2009-12-16
US7640400B2 (en) 2009-12-29
KR101159412B1 (ko) 2012-07-10
CN101652759B (zh) 2012-11-28
JP2010524106A (ja) 2010-07-15

Similar Documents

Publication Publication Date Title
US10896128B2 (en) Partitioning shared caches
JP4301520B2 (ja) 不連続なデータ構造を事前取出しする方法
US8490065B2 (en) Method and apparatus for software-assisted data cache and prefetch control
JP5255049B2 (ja) データをキャッシュ・メモリにプリフェッチする方法、コンピュータ・プログラム、及びシステム
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
JP5090047B2 (ja) ロックされたキャッシュ内のセットの置換を管理するための方法、コンピュータ・プログラム、キャッシング・システムおよびプロセッサ
US7516279B2 (en) Method using stream prefetching history to improve data prefetching performance.
US8521964B2 (en) Reducing interprocessor communications pursuant to updating of a storage key
US11176055B1 (en) Managing potential faults for speculative page table access
JP7443344B2 (ja) 外部メモリベースのトランスレーションルックアサイドバッファ
CN114667508B (zh) 为加速器取回数据的方法和系统
JP2017516228A (ja) 自己書き換えコードのハードウェアサポートを提供する方法及び装置
US20160224261A1 (en) Hardware-supported per-process metadata tags
KR20200017364A (ko) PCIe 메모리 요청들의 라우팅을 촉진하기 위해 NVMe 물리적 영역 페이지 목록 포인터들 및 데이터 포인터들을 수정
KR20210070935A (ko) 보안 멀티쓰레딩 실행을 위한 파이프라인들
KR20160035545A (ko) 디스크립터 링 관리
US11157415B2 (en) Operation of a multi-slice processor implementing a unified page walk cache
KR100582340B1 (ko) 캐시 시스템, 캐시 관리 방법 및 컴퓨터 판독가능한 기록매체
TW202139014A (zh) 具混和回寫及完全寫入資料快取
US8166252B2 (en) Processor and prefetch support program
JP2020536310A (ja) アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理
Bae et al. Ssdstreamer: Specializing i/o stack for large-scale machine learning
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
US11822652B1 (en) Prime and probe attack mitigation
US11693780B2 (en) System, method, and apparatus for enhanced pointer identification and prefetching

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121218

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130307

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130418

R150 Certificate of patent or registration of utility model

Ref document number: 5255049

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20160426

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees