JP3838279B2 - 計算機プログラムの実行コストの解析方法 - Google Patents
計算機プログラムの実行コストの解析方法 Download PDFInfo
- Publication number
- JP3838279B2 JP3838279B2 JP31181495A JP31181495A JP3838279B2 JP 3838279 B2 JP3838279 B2 JP 3838279B2 JP 31181495 A JP31181495 A JP 31181495A JP 31181495 A JP31181495 A JP 31181495A JP 3838279 B2 JP3838279 B2 JP 3838279B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- loop
- address
- statement
- subroutine
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
【発明の属する技術分野】
本発明は計算機プログラムの実行コストの解析方法に関するものである。特に,計算プログラムにおけるループ処理,配列演算のコストを算出する方法に関するものである。
【0002】
科学技術計算の分野のプログラムでは,多数の配列(ベクトル,行列)が使用され,その配列データに対する値の設定もしくは参照が多く行われる。通常,この設定,参照はループ(繰り返し処理)や配列演算で行われ,プログラム実行時間の多くがこの処理に費やされる。そのため,プログラムをチューニング(最適化)する際には,このループや配列演算に着目してチューニングすることが多い。この計算機プログラムの解析は性能解析プログラムにより行われる。
【0003】
【従来の技術】
従来の性能解析プログラムは被測定プログラム(ソースプログラム)の実行中にそのプログラムのサブルーチン等のルーチン単位で実行回数を測定し,実行コストを求めて出力していた。
【0004】
図9 (a), (b)は従来の計算機プログラムの実行コストの測定方法を示す図である。
図9 (a), (b)において,
110はソースプログラムであって,メインプログラム(プログラム名がメイン)とサブルーチン(サブルーチンA(111)等)を持つものである。
【0005】
111は,サブルーチンAである。
112はアドレスレジスタであって,サブルーチンA(111)の先頭アドレスを保持するものである。
【0006】
114はサブルーチンAの退避領域であって,サブルーチンA(111)が実行される時にそのオリジナルなプログラムを一時退避(複写)する領域である。
115は退避レジスタであって,サブルーチンA(111)が実行される時にその先頭アドレスを一時退避して保持するレジスタである。
【0007】
120は性能解析プログラムであって,ソースプログラム110の実行コストを測定するものである。
121は測定データ抽出部であって,実行中のソースプログラム110に対して一定時間間隔の割り込みの処理をするものである。
【0008】
122はルーチン判定部であって,割り込みをした時に処理をしているルーチンの名称を判定するものである。
123とコスト算出部であって,プログラムの実行コストを算出するものである。
【0009】
124は出力データ作成部であって,測定データに対して表示出力,印刷出力する形式のデータを作成するものである。
125は出力部であって,測定値を表示出力,印刷出力するものである。
【0010】
130は出力の例であって,ルーチン名と測定回数を出力したものである。
図9の構成の動作を説明する。
サブルーチンA(111)の先頭アドレスはアドレスレジスタ112に保持されている。ソースプログラム110のメインプログラム(メイン)の処理でサプルーチンA(111)が呼び出された時,サブルーチンA(111)の内容および先頭アドレスはそれぞれ退避領域114および退避レジスタ115に退避(複写)される。その後に,サブルーチンA(111)でプログラムの処理がなされ,その実行が終了して,メインプログラムに処理が戻ると,退避領域114および退避レジスタ115の内容がサブルーチンA(111)の元の領域およびアドレスレジスタ112に戻される。
【0011】
性能解析プログラム120の測定データ抽出部121はソースプログラム110に対して割り込みをする((1) ,(2) )。そして,ルーチン判定部122はその時に実行されているプログラムの先頭アドレスを求め,処理されているプログラムがメインプログラム(割り込みのタイミングが(1) の時)であるのか,あるいはサブルーチンAであるのか(割り込みのタイミングが(2) の時)を判定する。(2) のタイミングのようにサブルーチンA(111)が実行されている場合には退避レジスタ115のアドレスからサブルーチンA(111)が実行中であることを判定する。測定データ抽出部121は,一定の時間間隔(例えば,1秒おき等)でソースプログラム110に割り込みによりその内容(アドレス等)を参照する。
【0012】
コスト算出部123はこのようにして割り込みした時の実行中のプログラムのルーチン名を求め,その名称毎に測定回数を求める。そして,出力部125は測定されたメインプログラムの実行回数,サブルーチンの実行回数を表示出力する形式のデータを作成し,表示装置,印刷装置等に出力する。
【0013】
図9 (b)はコストの測定結果の表示の例である。
メインプログラムの実行回数,サブルーチン毎の実行回数を出力する。
【0014】
【発明が解決しようとする課題】
従来の性能解析プログラムによるコストの測定は,サブルーチン単位で,測定結果を表示していたので,処理の内容(ループ処理,配列演算処理等)を把握することができなかった。プログラムの実行において,ループ処理,配列演算が最もコストが高く,ループ処理,配列演算を最適化することがプログラムのチューニングの効率を高くすることになるが,従来の性能解析プログラムでは,ループ処理,配列演算のコストを把握することができなかった。
【0015】
本発明は,ループ処理,配列演算のコストを求める計算機プログラムの実行コストの解析方法を提供することを目的とする。
【0016】
【課題を解決するための手段】
本発明は、計算機が,計算機プログラムの実行コストを解析する解析方法において,
ソースプログラムを翻訳して得られる実行形式プログラムにソースプログラムの文番号とプログラムの先頭アドレスからの相対アドレスを保持する文番号テーブルと,ループ処理および配列演算処理のプログラム文の文番号を保持するループ情報テーブルとを作成し,実行中の実行形式プログラムに一定時間間隔毎に割り込みを行ない実行中のプログラム文の該割り込みをしたときのアドレスを求め,該アドレスとプログラムを保持する領域の先頭アドレスとの相対アドレスを求め,該相対アドレスに基づいて文番号テーブルを参照して実行中のプログラム文の文番号を求め,該文番号に基づいてループ情報テーブルを参照してプログラム文の種類を求め,前記割り込みの全体の回数に対する,割り込み毎の処理がループ処理であった回数および配列演算であった回数の割合を求めることにより実行コストを算出し,出力する構成をもつ。
【0017】
図1は,本発明の基本構成である。
図1において,
1はソースプログラムである。
【0018】
2はDOループ文であって,ループ処理のプログラム文(手続き)である。
3は配列演算文であって,配列演算のプログラム文である。
5はコパイラである。
【0019】
6はループ情報テーブル生成手段であって,実行形式プログラムの生成過程において生成される中間語を基にループ情報テーブル14を生成するものである。
10はオブジェクトプログラム(実行形式プログラム)である。
【0020】
11はオブジェクトプログラム10のDOループ文である。
12はオブジェクトプログラム10の配列演算文である。
13は文番号テーブル(後述するSSNテーブルに同じ)であって,プログラム(メインプログラムおよびサブルーチンのプログラム)の文番号をそれぞれのプログラムの先頭アドレスからの相対アドレス(オフセットアドレス)を対応付けたものである。
【0021】
14はループ情報テーブルであって,DOループ処理のループ処理,配列演算等の文の先頭文番号と末尾の処理の文番号を対応付けたものである。
20は性能解析プログラムであって,実行中のオブジェクトプログラム10におけるDOループ処理,配列演算等のコストを算出するものである。
【0022】
21はオフセットアドレス算出部であって,性能解析プログラム20が実行中のオブジェクトプログラム10に割り込んだ時にオブジェクトプログラム10で実行されているプログラム文(手続き)のアドレスとプログラム(メインプログラムもしくはサブルーチンのプログラム)の先頭アドレスとの差をとり,そのオフセットアドレスを求めるものである。
【0023】
22は文番号テーブル参照部であって,オフセットアドレスにより文番号テーブルを13を参照し,対応する文番号を求めるものである。
23はループ・配列演算判定部であって,文番号によりループ情報テーブル14を参照して,対応する文番号がループ演算であるか,配列演算であるか,あるいはそれ以外の手続きであるかを求めるものである。
【0024】
24はコスト算出部であって,ループ処理,配列演算,それ以外の手続きについて,測定により得られたそれぞれの回数およびその全体に対する割合を求めるものである。
【0025】
25は出力データ作成部であって,求められたループ処理の回数,配列演算の回数,それ以外の手続きのコストについて,表示出力もしくは印刷出力する形式の出力データを作成するものである。
【0026】
30は出力装置である。
図2は本発明の基本構成の動作説明図である。
図2において,
1はソースプログラムであって,メインプログラムである。図2のソースプログラム1は文番号10,11,12にループ処理を持つものを例示している。
【0027】
13は文番号テーブルである。図2の文番号テーブル13は,ループ処理のループの文1のオフセットアドレスY,ループの文2のオフセットアドレス(Y+4),ループの文3のオフセットアドレス(Y+8)を持つことを例として表している。
【0028】
14はループ情報テーブルである。図2のループ情報テーブル14はループ処理の先頭の文であるループの文1の文番号10と末尾の文であるループの文3の文番号12を保持することを例とて表している。
【0029】
21はオフセットアドレス算出部である。
ソースプログラム1を格納するメモリの先頭アドレスはX(実アドレス)であり,ループ処理の先頭のループの文1のソースプログラム1の先頭アドレスXからのオフセットアドレスはYである。Zは,性能解析プログラムによる割り込みのあったアドレスであって,例としてループの文3のアドレス(実アドレス)に割り込みがあったことを表している。
【0030】
性能解析プログラムの割り込んだ時点でループの文3(実アドレスZ)が実行されていたとする。その時,性能解析プログラムは,割り込みをしたアドレスZを得る。そして,オフセットアドレス算出部21はソースプログラム1の先頭アドレスXとによりZ−Xを演算し,ループの文3のオフセットアドレスY+8を求める。次に文番号テーブル参照部22(図1参照)はオフセットアドレス(Y+8)により文番号テーブル13を参照し,対応する文番号12を求める。次に,ループ・配列演算判定部23は,文番号12によりループ情報テーブル14を参照し,文番号12の処理がループ処理であることを判定する。
【0031】
コスト算出部24はそれまでに求めた文番号10から文番号12のループ処理31の回数に1を加算し,測定値を更新する。
上記において,性能解析プログラムが割り込んだ時にサブルーチンのプログラムが実行中の場合の動作も同様である。
【0032】
即ち,サブルーチンのプログラムはその文番号テーブル13,ループ情報テーブル14を備える。そして,割り込んだ時の実行中のサブルーチンの先頭アドレスを,例えばその退避レジスタを参照して求める。その先頭アドレスと割り込んだ時に実行中のプログラム文のアドレス(実アドレス)によりそのオフセットアドレスを求め,文番号テーブル13を参照してその文番号を求める。さらに,ループ情報テーブル14を参照してその文番号の手続きの種類を判定する。
【0033】
上記の処理を実行形式プログラムの開始から終了まで随時(例えば一定時間間隔)で行い,各ループ処理の回数,各配列演算の回数,その他の手続きの回数を求め,各ループ処理の実行コスト,各配列演算の信号コスト,その他の手続きの実行コストを算出し,出力する。
【0034】
本発明によれば,ソースプログラムの性能解析においてプログラムの実行コストの高いループ処理,配列演算のコストを測定できるので,プログラムのチューニングにおいて効率的なチューニングを行うことが可能になる。
【0035】
【発明の実施の形態】
図3は本発明のループ情報テーブルとSSNテーブル(文番号テーブル)の例である。
【0036】
図3において,
14はループ情報テーブルである。ループ情報テーブル14は,ループ処理,配列演算毎にそれぞれの先頭文番号,末尾文番号,ネストレベルがDOループ処理であるか配列演算であるかを識別するフラグを保持する。
【0037】
13はSSNテーブルであって,プログラム(メインプログラムおよびサブルーチンのプログラム)の先頭アドレスからの相対アドレス(オフセットアドレス)を対応付けたものであり,前述の文番号テーブルに同じである。
【0038】
図4は本発明の実施例構成を示す。
図4において,
1はソースプログラムであって,メインプログラムである。
【0039】
2’はサブルーチンのプログラムである。
5はコンパイラである。
6はループ情報テーブル生成手段であって,構文解析の結果に基づいて文番号テーブル13を生成するものである。
【0040】
7は構文解析部であって,ソースプログラムの構文解析を行うものである。
8は実行形式プログラム生成部であって,構文解析の結果得られる中間語(図示せず)をもとに実行形式プログラム(オブジェクトプログラム)10を生成するものである。
【0041】
10はオブジェクトプログラム(実行形式プログラム)である。
11’,11”はメインプログラムである。メインプログラム11’,11”はSSNテーブル13のアドレス,ループ情報テーブル14のアドレスをもつものである。
【0042】
12’はサブルーチンである。サブルーチン12’はSSNテーブル13のアドレス,ループ情報テーブル14のアドレスをもつ。
13はSSNテーブルである。
【0043】
14はループ情報テーブルである。
20は性能解析プログラムである。
30は出力装置である。
【0044】
35はOS部であって,制御プログラムである。
性能解析プログラム20において,
41は測定データ抽出部である。
【0045】
42は抽出データ保存部である。
43はプログラム(メインプログラム,サブルーチン)の先頭アドレス保存部である。
【0046】
44はオフセットアドレス算出部である。
45はSSNテーブル参照部である。
46はループ情報テーブル参照部である。
【0047】
47はループ・配列演算判定部である。
48はコスト算出部である。
49は出力データ作成部である。
【0048】
図4の構成の動作は後述する。
図5はソースプログラムの例である。
図5において,
文番号0005〜文番号0007はDOループの処理であって,I=1〜1000について,i×5を演算し,配列要素a(i)にi×5の演算結果を格納する処理である。文番号0005〜0007のDOループ文の先頭の文番号は0005であり,末尾の文番号は0007である。また,ネストレベルは1である。
【0049】
文番号0008〜文番号0010はDOループの処理であって,i=2〜101のiに対して配列a(i−1)に格納されている値に3を加え,演算結果を配列要素a(i)に格納する処理である。
【0050】
文番号0008〜0010のDOループ文の先頭の文番号は0008であり,末尾の文番号は0010である。また,ネストレベルは1である。
文番号0011は1000個ある配列要素bに対して値50を格納することを行う配列演算である。
【0051】
図6は本発明の実施例のフローチャートである(後述する)。
図7は本発明の実施例の動作説明図である。
図7において,
10はオブジェクトプログラムであって,プログラム名が「メイン」というものである。
【0052】
12’はサブルーチンであって,名称が「サブルーチンA」というものである。
12’はサブルーチンであって,名称が「サブルーチンB」というものである。
【0053】
61はメインプログラム(メイン)の退避領域である。
62は退避レジスタMであって,メインプログラムを格納する領域の先頭アドレスの退避領域である。
【0054】
63はサブルーチンAの退避領域である。
64は退避レジスタAであって,サブルーチンAを格納する領域の先頭アドレスの退避領域である。
【0055】
65はサブルーチンAのアドレスであって,アドレスレジスタに格納されているものである。
66はサブルーチンBのアドレスであって,アドレスレジスタに格納されているものである。
図6に従って,図4,図7を説明する。
【0056】
コンパイラ5はソースプログラム1を翻訳してオブジェクトプログラム(実行形式プログラム)10を作成する。このとき,オブジェクト10にSSNテーブル13およびループ情報テーブル14を作成する。
【0057】
(1) オブジェクトプログラムおよび性能解析プログラムを実行する。
(2) 性能解析プログラムの測定データ抽出部41は,一定時間間隔(例えば1秒)で実行中のオブジェクトプログラム10に対して,割り込みにより実行中のプログラム文のアドレスを参照し,アドレスを求める。また,この時,OS部35は実行中のプログラム(メインプログラムもしくはサブルーチン)の領域の先頭アドレスを通知して,先頭アドレス保存部43に保持する。サブルーチンの場合には,OS部35はそのアドレスを一時退避した退避レジスタ62により求めることができる。
【0058】
(3) オフセットアドレス算出部44は割り込みをしたアドレスとそのプログラムの先頭アドレスとの差をとり,オフセットアドレスを求める。そして,SSNテーブル45を参照し,オフセットアドレスから実行中のプログラム文の文番号を求める。
【0059】
(4) 求めた文番号についてループ情報テーブル14を先頭から終わりまで参照し,文番号の処理の種類,ネストレベルを求める。求めた各文番号について同様の処理を反復する。
【0060】
(5) 反復(4) において,求めた文番号がループ処理もしくは配列演算であればループ情報(ループ処理であることおよびネストレベル,もしくは配列演算であることを表す情報)を作成する。
【0061】
(6) 反復(4) において,(7) で文番号がループ範囲にあるか判定し,ループ範囲内にあれば(8) でループ情報を作成する。ループ範囲内になければ(9) の処理をする。
【0062】
(9) ループ処理もしくは配列演算でなければ,ループ以外の情報であることを設定する。
(10) プログラムの実行が終了したら処理を終了する。
【0063】
以上の処理を,一定時間間隔の割り込みにより行い(図7の割り込み1,割り込み2等),ループ処理,配列演算の回数およびそれ以外の手続きの回数をカウントする。そして,コスト算出部48はループ処理,配列演算の全体の回数に対する割合を求める。
【0064】
出力データ作成部49は求めたコストを表示もしくは印刷する出力データを作成し,出力する。
図8は解析結果の出力の例である。
【0065】
手続き全体の回数に対するループ処理,配列演算の全体の回数に対する割合を出力する。ループ処理の場合には参考情報としてネストレベルも出力する。
図8は図5のソースプログラム(プログラム名「メイン」の手続きの全体の回数が200回であることを示している。また,文番号0005−文番号0007のループ処理の実行回数が150回であり,全体の回数に対する割合が75%,文番号0008−文番号0010のループ処理の実行回数が30回であり,全体の回数に対する割合が15%,文番号0011の配列演算が5回であり,全体に対する割合が2.5%であることを表している。
【0066】
【発明の効果】
本発明によれば,プログラム解析において,プログラムに占める割合の高いループ処理で,配列演算のコストを測定して表示するので,効率的なプログラムのチューニングを行うことができるようになる。
【図面の簡単な説明】
【図1】本発明の基本構成を示す図である。
【図2】本発明の基本構成の動作説明図である。
【図3】ループ情報テーブルとSSNテーブル(文番号テーブル)の例を示す図である。
【図4】本発明の実施例構成を示す図である。
【図5】ソースプログラムの例を示す図である。
【図6】本発明の実施例のフローチャートを示す図である。
【図7】本発明の実施例の動作説明図である。
【図8】解析結果の出力の例を示す図である。
【図9】従来の計算機プログラムの実行コストの測定方法を示す図である。
【符号の説明】
1:ソースプログラム
2:DOループ文
3:配列演算文
5:コンパイラ
6:ループ情報テーブル生成手段
10:オブジェクトプログラム(実行形式プログラム)
11:DOループ文
12:配列演算文
13:文番号テーブル(SSNテーブル)
14:ループ情報テーブル
20:性能解析プログラム
21:オフセットアドレス算出部
22:文番号テーブル参照部
23:ループ・配列演算判定部
24:コスト算出部
25:出力データ作成部
30:出力装置
Claims (2)
- 計算機が,計算機プログラムの実行コストを解析する解析方法において,
ソースプログラムを翻訳して得られる実行形式プログラムにソースプログラムの文番号とプログラムの先頭アドレスからの相対アドレスを保持する文番号テーブルと,ループ処理および配列演算処理のプログラム文の文番号を保持するループ情報テーブルとを作成し,
実行中の実行形式プログラムに一定時間間隔毎に割り込みを行ない実行中のプログラム文の該割り込みをしたときのアドレスを求め,該アドレスとプログラムを保持する領域の先頭アドレスとの相対アドレスを求め,該相対アドレスに基づいて文番号テーブルを参照して実行中のプログラム文の文番号を求め,該文番号に基づいてループ情報テーブルを参照してプログラム文の種類を求め,
前記割り込みの全体の回数に対する,割り込み毎の処理がループ処理であった回数および配列演算であった回数の割合を求めることにより実行コストを算出し,出力することを特徴とする計算機プログラムの実行コストの解析方法。 - メインプログラムおよびサブルーチンの双方において該文番号テーブルおよびループ情報テーブルを備え,サブルーチンの実行中に該割り込みを行った場合には,実行中のサブルーチンの先頭アドレスを退避する退避レジスタにより該サブルーチンの先頭アドレスを求めることを特徴とする請求項1に記載の計算機プログラムの実行コストの解析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31181495A JP3838279B2 (ja) | 1995-11-30 | 1995-11-30 | 計算機プログラムの実行コストの解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31181495A JP3838279B2 (ja) | 1995-11-30 | 1995-11-30 | 計算機プログラムの実行コストの解析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09152982A JPH09152982A (ja) | 1997-06-10 |
JP3838279B2 true JP3838279B2 (ja) | 2006-10-25 |
Family
ID=18021741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP31181495A Expired - Fee Related JP3838279B2 (ja) | 1995-11-30 | 1995-11-30 | 計算機プログラムの実行コストの解析方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3838279B2 (ja) |
-
1995
- 1995-11-30 JP JP31181495A patent/JP3838279B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH09152982A (ja) | 1997-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6804814B1 (en) | Method for simulating back program execution from a traceback sequence | |
EP0406602A2 (en) | Method and apparatus for debugging parallel programs by serialization | |
US7240334B1 (en) | Methods, systems, and computer program products for deferred computer program tracing | |
JP3838279B2 (ja) | 計算機プログラムの実行コストの解析方法 | |
JP2715993B2 (ja) | シミュレーション方法および装置 | |
JP3910831B2 (ja) | プログラム開発支援装置、記録媒体、及びプログラム | |
JPH08263372A (ja) | キャッシュミス情報の収集とチューニングを行う装置 | |
JPH07191882A (ja) | メモリアクセス頻度測定方式 | |
JPH06282599A (ja) | 論理検証方法および装置 | |
JP2798364B2 (ja) | アプリケーションの評価方法及びシステム | |
JP2525393B2 (ja) | 論理シミュレ−ションのテストカバレ−ジ方式 | |
JP2795332B2 (ja) | ループ処理誤り検出装置 | |
Hurst | A source language performance monitoring facility for the B1800 Modula Interpreter | |
JP2004145670A (ja) | テストベンチ生成方法、テストベンチ生成装置、及びコンピュータプログラム | |
US7490227B1 (en) | Method and system to recreate instruction and data traces in an embedded processor | |
JP3330767B2 (ja) | 情報処理装置および情報処理装置におけるトレース取得方法 | |
JPH07200351A (ja) | プログラムデバッグ方法およびプログラムデバッグ支援装置 | |
JPH05334135A (ja) | プログラム異常終了時のエラー情報表示方式 | |
JPH11149466A (ja) | 構造解析装置 | |
JPH10187780A (ja) | 論理シミュレーションシステムおよび論理シミュレーション方法 | |
JPH10124300A (ja) | 座標測定装置 | |
JPH0659943A (ja) | プログラムの実行回数計測装置 | |
JPH0676038A (ja) | エディタ上での位置チェック方式 | |
JPH05197538A (ja) | プリコンパイラ方式における例外発生行番号表示方式 | |
JPS6214243A (ja) | プログラムコスト見積方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040615 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040906 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060725 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090811 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100811 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110811 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120811 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |