JP4184900B2 - 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 - Google Patents
変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 Download PDFInfo
- Publication number
- JP4184900B2 JP4184900B2 JP2003301039A JP2003301039A JP4184900B2 JP 4184900 B2 JP4184900 B2 JP 4184900B2 JP 2003301039 A JP2003301039 A JP 2003301039A JP 2003301039 A JP2003301039 A JP 2003301039A JP 4184900 B2 JP4184900 B2 JP 4184900B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- value
- record
- processing
- variable
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
対象プログラムの手続きの実行時に、手続きが呼び出された順に変数に与えられた値を登録してゆき、値の種別がレコードの値リストの個数となった場合には、その時点以降に現れた新しい種別の値は登録しないものとする。
ここで、値リストの大きさが3であった場合に、3種類目の値“10”が与えられた時点でレコードの全ての値リストには値が格納されているため、それ以降に出現する新しい種類の値(“3”と“6”)は登録しない。したがって、プログラムの終了時点での値リストの状態は以下のようになる。
2)従来手法B:レコードの値リストが一杯になった時点で最小出現回数の値を切り捨て
対象プログラムの手続きの実行時に、手続きが呼び出された順に変数に与えられた値を登録してゆき、レコードの全ての値リストに値が格納されている場合に、その時点以降に新しい種別の値が現れた場合は、その時点で最も出現回数の少ない値を値リストから追い出し、新しい値を登録する。最も出現回数の少ない値が複数あった場合にはその中から適当に1つの値を選ぶ。
このとき、値リストの大きさが3であった場合に、6回目の呼び出しの時点での値リストの状態は以下のようになる。
続いて、7回目に新しい値“3”と共に呼び出されたとき、全ての値リストはすでに値が格納されているので、この方法では最も出現回数の少ない値“10”を値リストから追い出して、新しい値“3”を登録する。結果は以下のようになる。
さらに8回目の呼び出しでは、同様に値“3”が追い出されて代わりに値“6”が登録され、9回目の呼び出しでは同様に値“6”が追い出されて値“8”が登録される。この結果、プログラムの終了時点での値リストの状態は以下のようになる。
上記の処理例において、以下のような順序で値が与えられて手続きが呼ばれた場合に、レコードの値リストには、最も出現回数の高い値が保存されていない可能性がある。
この場合であれば、正しくは、以下のような値と回数との組が値リストに保存されていなければならない。
しかし、実際に保存される組は以下のとおりとなる。
2)従来手法Bの問題点
上記の処理例でいえば、以下のような順序で値が与えられて手続きが呼ばれた場合に、値リストには最も出現回数の高い値が保存されていない可能性がある。
この場合であれば、正しくは、以下のような値と回数との組が値リストに保存されていなければならない。
または{1,3},{3,2},{5,2}
しかし、実際に保存される組は以下のとおりとなる。
または{7,2},{5,2},{1,1}
または{7,2},{3,2},{1,1}
なお、実際にはどのような値と回数との組が値リストに保存されるかは、値リストが一杯になった時点でどの組を捨てるかによって変わることになる。
一次プロファイル処理では、第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理とをコンピュータに実行させる。
最終プロファイル処理では、第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコードの出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とをコンピュータに実行させる。
本発明では、まず、翻訳対象のプログラムの手続き中の変数に与えられる値のうち出現頻度が50%以上となりうる値を記録する処理(統計処理)を、翻訳対象のプログラムの適切な位置に挿入する処理を行う。ここで、統計処理の結果を記録するレコードとして、値リストの大きさを2に固定したレコードを用意する。
この場合に、実際に保存される組は以下のようになり、出現頻度50% の値“1”が記録される。
つまり、ある特定の値の出現頻度が50%以上になりうるものであるならば、その値は、実行中の出現間隔が一時的にまばらな期間があるために一旦値リストから追い出されたとしても、実行中のいつかの時点で十分な頻繁さで出現するために必ず値リストに再格納されるので、大きさ2の値リストを持つレコードに記録されることになるからである。
本発明では、さらに、1)変数に値を与える処理を含む基本ブロックの実行回数を計測する処理と、2)変数に与えらた値が前記の統計処理で得られたものであった場合に、その値の出現回数を計測する処理との2つの処理(以下、2つの処理を「統計検証処理」とする)を、翻訳対象のプログラムの適切な位置に挿入する処理を行う。
1)出現頻度が50%以上の値があるかないか、
2)あるとすれば何(値)であるか、
についての統計情報(最終プロファイル情報)が取得できる。
11 解析処理部
12 一時プロファイル処理部
13 一時プロファイル読み込み部
14 最終プロファイル処理部
15 最終プロファイル読み込み部
16 最適化部
17 目的プログラム生成部
31 一時プロファイル情報
32 最終プロファイル情報
4 原始プログラム
5 目的プログラム
6 レコード
Claims (5)
- プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理を、コンピュータに実行させるためのコンパイル処理プログラムにおいて、
プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理と、
第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理と、
第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコードの出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とを、
コンピュータに実行させる
ことを特徴とする変数の統計処理を行うコンパイル処理プログラム。 - さらに、前記最終プロファイル情報を読み込む処理と、
第3回目のプログラム翻訳時に、前記最終プロファイル情報から取得した前記値の出現回数と前記基本ブロックの実行回数にもとづいて前記値の出現頻度を算出する処理と、
前記出現頻度が50%以上である場合に、前記値により予測される動作を行う処理に最適化する処理とを、
コンピュータに実行させる
ことを特徴とする請求項1記載の変数の統計処理を行うコンパイル処理プログラム。 - プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理を、コンピュータに実行させるためのコンパイル処理プログラムを記録する記録媒体であって、
プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理と、
第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理と、
第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコードの出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理と、
前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理とを、
コンピュータに実行させるプログラムを記録する
ことを特徴とする変数の統計処理を行うコンパイル処理プログラム記録媒体。 - プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するために、解析処理部と一次プロファイル処理部と一次プロファイル読み込み部と最終プロファイル処理部と最終プロファイル読み込み部とを備えるコンピュータが実行するコンパイル処理方法において、
前記解析処理部がプログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する処理過程と、
前記一次プロファイル処理部が、第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理過程と、
前記一次プロファイル読み込み部が、第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する処理過程と、
前記最終プロファイル処理部が、第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコードの出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する処理過程と、
前記最終プロファイル読み込み部が、前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する処理過程とを備える
ことを特徴とする変数の統計処理を行うコンパイル処理方法。 - プログラム言語で記述されたプログラムを翻訳してコンピュータが実行可能な目的プログラムを生成するコンパイル処理装置において、
プロファイル情報を記憶する記憶部と、
プログラム内の全ての基本ブロックおよび変数に固有の識別情報を付与する解析処理部と、
第1回目のプログラム翻訳時に、前記プログラムの実行中に基本ブロック内の変数各々に対して、前記変数に与えられる値と前記値が与えられる回数との組を格納するレコードを2つ設けて、当該変数に与えられる値が前記レコードに格納されていない場合に、前記レコードのうち回数がより少ないレコードに当該値と回数の値1との組を記録し、当該変数に与えられる値が前記レコードに格納されている場合に、当該値を格納するレコードの回数を1加算した値を記録する統計処理を行う命令列と、前記プログラムの実行終了後に前記レコードに記録された情報を一次プロファイル情報として出力する一次プロファイル出力処理を行う命令列とを、前記プログラムに付加する一次プロファイル処理部と、
前記第1回目のプログラム実行の終了後に、前記一次プロファイル情報を記憶部に記憶する一次プロファイル読み込み部と、
第2回目のプログラム翻訳時に、前記一次プロファイル情報を読み込み、前記プログラム実行中に前記変数各々に対して、前記与えられる値と前記変数が与えられる回数との組を格納するレコードを2つ設けて、各変数のレコードに前記一次プロファイル情報の与えられた値を設定し、前記プログラムの実行中に当該設定された値の出現回数を前記レコードに記録し、前記変数が含まれる基本ブロックの実行回数を格納するカウンタを設けて、前記基本ブロックの実行回数をカウンタに記録する統計検証処理を行う命令列と、前記プログラムの実行終了後に前記レコードの出現回数と前記カウンタの実行回数とを最終プロファイル情報として出力する最終プロファイル出力処理を行う命令列とを、前記プログラムに付加する最終プロファイル処理部と、
前記第2回目のプログラム実行の終了後に、出力された前記最終プロファイル情報を記憶部に記憶する最終プロファイル読み込み部とを備える
ことを特徴とする変数の統計処理を行うコンパイル処理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003301039A JP4184900B2 (ja) | 2003-08-26 | 2003-08-26 | 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 |
US10/811,716 US7412696B2 (en) | 2003-08-26 | 2004-03-29 | Method, apparatus and computer program for compiling program using statistical information on variables, and recording medium therefor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003301039A JP4184900B2 (ja) | 2003-08-26 | 2003-08-26 | 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005071135A JP2005071135A (ja) | 2005-03-17 |
JP4184900B2 true JP4184900B2 (ja) | 2008-11-19 |
Family
ID=34213867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003301039A Expired - Fee Related JP4184900B2 (ja) | 2003-08-26 | 2003-08-26 | 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7412696B2 (ja) |
JP (1) | JP4184900B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060020574A1 (en) * | 2004-07-21 | 2006-01-26 | Mentor Graphics Corporation | Area optimization of hardware for algorithms by optimizing sizes of variables of the algorithm |
US7809936B2 (en) * | 2006-08-02 | 2010-10-05 | Freescale Semiconductor, Inc. | Method and apparatus for reconfiguring a remote device |
US20080034349A1 (en) * | 2006-08-04 | 2008-02-07 | Microsoft Corporation | Incremental program modification based on usage data |
JP5039948B2 (ja) * | 2007-10-30 | 2012-10-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムを最適化するコンパイラ |
JP4806060B2 (ja) * | 2009-09-15 | 2011-11-02 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム |
JP5719278B2 (ja) | 2011-11-11 | 2015-05-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 情報処理装置、プロファイル対象決定プログラム及び方法 |
US9027006B2 (en) * | 2012-08-09 | 2015-05-05 | Apple Inc. | Value profiling for code optimization |
US9760351B2 (en) * | 2013-04-02 | 2017-09-12 | Google Inc. | Framework for user-directed profile-driven optimizations |
US9348566B1 (en) * | 2014-01-02 | 2016-05-24 | Google Inc. | Continuous profiling for automatic feedback directed optimization |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5752035A (en) * | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
US5815720A (en) * | 1996-03-15 | 1998-09-29 | Institute For The Development Of Emerging Architectures, L.L.C. | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system |
JPH11149380A (ja) | 1997-11-18 | 1999-06-02 | Hitachi Ltd | コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体 |
-
2003
- 2003-08-26 JP JP2003301039A patent/JP4184900B2/ja not_active Expired - Fee Related
-
2004
- 2004-03-29 US US10/811,716 patent/US7412696B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7412696B2 (en) | 2008-08-12 |
JP2005071135A (ja) | 2005-03-17 |
US20050050532A1 (en) | 2005-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7784039B2 (en) | Compiler, compilation method, and compilation program | |
JP3664473B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
USRE45199E1 (en) | Compiler apparatus | |
JP2007528059A (ja) | ソフトウェアのモデル化、抽象、および分析のためのシステムと方法 | |
US20070094646A1 (en) | Static single assignment form pattern matcher | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US6986130B1 (en) | Methods and apparatus for compiling computer programs using partial function inlining | |
JP5583514B2 (ja) | バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム | |
JP2001282549A (ja) | プログラム変換装置及び方法並びに記録媒体 | |
US20100199269A1 (en) | Program optimization device and program optimization method | |
JP2010079894A (ja) | トレース操作の修正によるトレースのオーバーヘッドの削減 | |
JPH11212797A (ja) | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 | |
JP4184900B2 (ja) | 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 | |
JP2012510661A (ja) | 逐次コンピュータプログラムコードを並列処理する方法及びシステム | |
JP5048949B2 (ja) | 非同期プログラムフローのモデリングを含むソフトウェアツール | |
JP3539613B2 (ja) | ループ飛び出し文を含むループに対する配列サマリ解析方法 | |
JP4462676B2 (ja) | プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体 | |
JPWO2004036463A1 (ja) | コンパイラ及び論理回路の設計方法 | |
US20050144605A1 (en) | Information processing system and code generation method | |
WO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
JP7407192B2 (ja) | フィールド・プログラマブル・ゲート・アレイのためのコードを最適化する方法および装置 | |
US20170344351A1 (en) | Information processing apparatus, compiling management method, and recording medium | |
JPH10320212A (ja) | キャッシュ向け最適化方法 | |
JP5891976B2 (ja) | コンパイル実行・管理方法、装置、及びプログラム | |
WO2023155863A1 (en) | Methods and devices for compiler function fusion |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051026 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080313 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080527 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080728 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20080728 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20080728 |
|
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: 20080902 |
|
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: 20080904 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110912 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |