JP4231516B2 - 実行コードの生成方法及びプログラム - Google Patents

実行コードの生成方法及びプログラム Download PDF

Info

Publication number
JP4231516B2
JP4231516B2 JP2006213342A JP2006213342A JP4231516B2 JP 4231516 B2 JP4231516 B2 JP 4231516B2 JP 2006213342 A JP2006213342 A JP 2006213342A JP 2006213342 A JP2006213342 A JP 2006213342A JP 4231516 B2 JP4231516 B2 JP 4231516B2
Authority
JP
Japan
Prior art keywords
intermediate code
code
cpu
computer
cache 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
JP2006213342A
Other languages
English (en)
Other versions
JP2008040734A (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2006213342A priority Critical patent/JP4231516B2/ja
Priority to US11/707,146 priority patent/US7739530B2/en
Publication of JP2008040734A publication Critical patent/JP2008040734A/ja
Application granted granted Critical
Publication of JP4231516B2 publication Critical patent/JP4231516B2/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
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4432Reducing the energy consumption
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Power Sources (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、複数のCPUを効率よく動作させる技術に関し、特に、並列処理を行うプログラムを生成するコンパイラに関する。
近年、半導体製造技術の進歩による素子の微細化により、膨大な数のトランジスタを集積することが可能となっている。この進歩によってCPU(プロセッサ)の高周波数化も進んだが、CPUの消費電力の増加や、リーク電流に起因する待機時電力の増加により、消費電力を低減しながらCPUの処理能力を向上させることが検討されている。
特に、数十ないし数百のCPUを用いて並列処理を行う大規模な並列計算機などでは、多大な電力を必要とし、また、電力に応じた計算機からの多大な発熱に対処する必要が生じている。
CPUの消費電力を低減させるべく、近年ではCPUの動作周波数と動作電圧を動的に変更可能にする省電力機構(低電力化機能)を備えたCPUが普及しつつある。この種のCPUでは、アイドル時には動作周波数と動作電圧を最低値に切り替え、高負荷時にのみ動作周波数と動作電圧を最大値に切り替える。また、負荷の状況に応じて動作周波数と動作電圧を段階的に切り替えるCPUも知られている。動作周波数と動作電圧の切替は、OSまたはOSを介したアプリケーションからCPUに対して所定のコマンドを発行することで制御することができる。
このような省電力機構を備えたCPUを備えた計算機で実行するプログラムでは、ソースコードを実行コードに変換するコンパイルの際に、省電力機構を機能させるコードを埋め込む手法が知られている(例えば、特許文献1)。
これらは、まず、ユーザプログラム(ソースコード)に対して予めパラメータを設定してコンパイラへ入力し、コンパイラは暫定コード(アセンブラ)を出力する。次に、暫定コードを実行し、実行中の状態をプロファイルとして記憶させる。
そして、暫定コードの実行によって得られたプロファイルを参照しながらユーザプログラムをコンパイルして目的とする出力コードを生成する。コンパイラは、プロファイルを参照することで計算機のリソースの利用状態などからCPUの発熱を考慮した最適な出力コード(ロードモジュール)を生成する。
特開2003−44289号
しかしながら、上記従来例ではソースコードを1回コンパイルした暫定コードを実行させて実行時のプロファイルを取得しておき、2回目のコンパイル時にプロファイルを用いて消費電力を抑制する最適化を行って出力コードを生成する構成となっている。このため、プロファイルを取得するための暫定コードの実行と、本来の目的である演算結果を得るための出力コードの実行とを行うため、同一の演算を2回行わねばならない。したがって、目的とする出力コードを実行させるまでに多大な時間を要することになって、ソースコードの入力から出力コードの実行を迅速に行うことができない、という問題があった。
また、暫定コードを実行させる演算では、消費電力の低減のためのプロファイルを取得するために出力コードの実行時と同様の演算を行うので、ひとつの出力コードを得るまでに多大な電力が必要になる、という問題があった。
さらに、上記従来例による出力コードでは、プロファイルを取得した条件と同一の条件で出力コードを実行する必要があり、同一の条件で実行できない場合には、プロファイルに基づく電力の低減を実現できない場合があった。
例えば、並列計算機を用いて並列処理を行うようなシミュレーションの出力コードでは、ループ演算の長さ(ループ長)やループ演算の実行回数を変更して出力コードの実行を行う場合がある。この場合では、プロファイルの取得時とループ長が異なるため、予定していた電力の低減を実現することができない。
また、並列計算機では並列処理を実行するノード数(またはCPU数あるいはコア数)を変更する場合がある。この場合では、ノード数の変化によってCPUの2次キャッシュメモリなどのヒット率が変化するため、プロファイルの取得時とはCPUの動作条件が異なるため、予定していた電力の低減を実現することができない、という問題があった。
そこで本発明は、上記問題点に鑑みてなされたもので、ソースコードのコンパイルから出力コードの実行までを迅速にしながらも、計算機の消費電力を確実に低減させることを目的とする。
本発明は、低電力化機能を有するCPUと、キャッシュメモリ及び主記憶を含む計算機で実行する実行コードに、前記CPUの低電力化機能を有効にする低電力化コードを付加する実行コードの生成方法であって、前記計算機が、ソースコードから生成された中間コードを読み込む手順と、前記計算機が、前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求める手順と、前記計算機が、前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで実行したときに前記キャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算する手順と、前記計算機が、前記第1のサイクル数と第2のサイクル数の比率をCPU負荷比率として求める手順と、前記計算機が、前記中間コードのうち、前記CPU負荷比率が所定の値以下となる領域を判定する手順と、前記計算機が前記前記CPU負荷比率が所定の値以下と判定された前記領域に、前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する手順と、前記中間コードから前記計算機で実行可能な中間コードを生成する手順と、を含む。
また、前記計算機は、前記実行コードを並列的に実行する複数のノードを備え、前記計算機が、前記中間コードのうちループ演算を含む範囲を対象領域として抽出し、当該抽出した対象領域を分割する手順は、前記実行コードを並列的に実行するときに指定される前記ノードの数と、前記ループ回数から、前記対象領域を前記ノードの数で分割し、当該分割後の対象領域のループ演算の回数として前記指定されたループ回数を前記ノードの数で除した値に設定する。
したがって、本発明は、メモリアクセスの実行比率が所定値を超えてCPUの実行比率よりも高い領域では、CPUの省電力機構を機能させて動作周波数または動作電圧を低減して、CPUの消費電力を確実に低減させることができる。
そして、本発明によれば、一回の処理で実行コードを作成することができ、また、生成した実行コードは、実行するノード数の変化に係わらず実行可能であるため、前記従来例のように、最初にコンパイルしたロードモジュールを実行させてプロファイルを取得し、プロファイルに基づいて再度コンパイルする場合に比して、極めて迅速に実行コードを得ることができるのである。
以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明の第1の実施形態を示す計算機システムのブロック図である。並列処理を実行する計算機1は、ソースプログラム、ロードモジュール(実行コード)、コンパイラまたはデータを格納するストレージ装置2に接続される。
計算機1は、ネットワーク5を介して複数のユーザ端末(クライアント)3に接続され、複数のユーザが計算機1を利用可能となっている。なお、各ユーザ端末3にはストレージ装置4が接続され、データやソースプログラムを格納することができる。各ユーザ端末3のユーザは、計算機1にソースプログラムのコンパイルを指令したり、コンパイルで生成されたロードモジュールを実行させて演算結果を利用することができる。
図2は計算機1の構成を示すブロック図である。計算機1は複数のノード10−1〜nと、各ノード10−1〜nを接続するスイッチ16とを備える。なお、スイッチ16は図示しないネットワークインターフェースに接続されており、各ノード10−1〜nをネットワーク5に接続する。また、スイッチ16は図示しないファイバチャネルアダプタにも接続され、計算機1とストレージ装置4とを接続する。
各ノード10−1〜nは同様に構成され、演算処理を行うCPU11とデータやロードモジュールを格納する主記憶15を含んで構成される。なお、各ノード10−1〜nとスイッチ16は、各ノード10−1〜nに備えた図示しないブリッジ(例えば、チップセット)等を介して接続される。
CPU11は、1つのCPUに複数のコアを備えたもので、複数の演算器(演算ユニット)12−1,12−2はそれぞれ1次(L1)キャッシュメモリ13−1,13−2を有し、演算器12−1と12−2で共有する2次キャッシュメモリ14から構成される。
演算器12−1、12−2は、主記憶15から読み込んだデータまたは実行コードを2次キャッシュメモリ14へ一旦格納する。そして、各演算器12−1と12−2は、実行に必要な2次キャッシュメモリ14の情報をそれぞれの演算器に接続した1次キャッシュメモリ13−1または13−2へ読み込んでから演算器12−1、12−2で実行する。なお、図2において、主記憶15は各ノード10−1〜nに設けたが、図示はしないが各ノード10−1〜nからアクセス可能な共有メモリで構成しても良い。また、CPU11は単一のコアで構成されても良く、各ノード10−1〜nで並列処理を実行できればよい。
CPU11は、OSなどから所定のコマンド(低電力化コード)を受け付けると、動作周波数の変更(動作周波数の増大または減少)や動作電圧の変更(動作電圧の上昇または降下)を行う省電力機構を備えている。
また、計算機1には並列処理を効率よく行うために図示しないバリア同期機構を設けても良い。
図3、図4は計算機1で実行されるソフトウエアの概略を示すブロック図で、図3はソースプログラム(ソースコード)50をコンパイルする際のブロック図を示し、図4はコンパイルによって得られたロードモジュール500を実行する際のブロック図を示す。
図3は、ユーザ端末3が選択した任意のノード(例えばノード10−1)でコンパイルを行う例を示す。各ノード10−1〜nではOS100がそれぞれ実行されており、ノード10−1には、ユーザ端末3からの指令によって最適化コード300を出力するコンパイラ200と、最適化コード300を解析してCPU11の省電力機構を制御する低電力化コード生成モジュール400と、がロードされている。
ノード10−1は、ユーザ端末3からの指示に基づいて、コンパイラ200を実行する。コンパイラ200はストレージ装置2からユーザ端末3が指定したソースプログラム50を読み込んで、最適化コード300を出力する。最適化コード300は、例えば、中間コードやオブジェクトコード(実行コード)で構成される。そして、コンパイラ200は最適化コード300をストレージ装置2へ格納する。
次に、ユーザ端末3からの指令に基づいて、低電力化コード生成モジュール400をノード10−1で起動する。低電力化コード生成モジュール400は、最適化コード300を読み込んで、プログラムの内容を解析してCPU11の駆動周波数の切り換えや駆動電圧の切り換えを行う省電力機構を制御するための低電力化コードを最適化コード300に付加し、ロードモジュール(実行コード)500として出力する。なお、低電力化コード生成モジュール400はロードモジュール500をストレージ装置2へ格納する。
本実施形態では、ソースプログラム50は科学技術計算などのシミュレーションを行うもので、大量のループ演算を実行するため並列処理を行うものである。
図4は、コンパイラ200と低電力化コード生成モジュール400で生成されたロードモジュール500を、ユーザ端末3からの指示に基づくノード数で実行する例を示す。図4では、3つのノード10−1〜10−3でそれぞれロードモジュール500を読み込んで、実行する例を示す。各ノードのロードモジュール500は、ユーザ端末3で指定されたデータをストレージ装置2などから読み込んで、それぞれ並列して実行される。ロードモジュール500は、シミュレーションの演算結果をユーザ端末3やファイルとして出力する。
図5は、コンパイラ200と低電力化コード生成モジュール400の構成の一例を示すブロック図である。
コンパイラ200は、周知のコンパイラと同様に構成されており、入力されたソースプログラム50を解析するソース解析部210と、ソースプログラム50の解析結果に基づいて、周知の最適化法を用い、ソースプログラム50のステートメントの順序や演算順序の変更などを行って、実行効率の良い処理の最適化を行う最適化法適用部220と、実行効率の良い中間コードまたは実行コードを生成し、出力する最適化コード生成部230とを備える。
なお、コンパイラ200は、前記従来例のように、ロードモジュール500の実行状態(実行プロフィール)などを参照せずに、ソースプログラム50とユーザ端末3からの指定などに基づいてコンパイルを実行する。
低電力化コード生成モジュール400は、コンパイラ200の出力結果である最適化コードを読み込んで、CPU11の省電力機構を制御する低電力化コードを付加したロードモジュール500を生成し、出力する。
低電力化コード生成モジュール400は、最適化コード300を読み込んで、並列処理の領域(対象領域)毎に解析を行い、対象領域毎にデータ再利用テーブル430を作成し、このデータ再利用テーブル430に基づいて低電力化コードの付加の適否を決定する低電力化解析部410と、ロードモジュール500を実行する計算機1の設定(または構成)に関する情報を入力する設定入力部440と、上記決定と設定情報に基づいて低電力化コードを付加したロードモジュール500を生成するコード生成部420と、を含んで構成される。コード生成部420は、さらに、対象領域の大きさ(ループ長)に応じて低電力化コードを実行するか否かの条件分岐をロードモジュール500に付加することができる。
図6は、低電力化コード生成モジュール400で実行される処理の一例を示すフローチャートである。この処理は、ユーザ端末3からの指示に基づいて計算機1の任意のノード10−1〜nで実行される。
まず、ステップS1では使用する計算機1の設定や構成に関する情報(設定情報)をユーザ端末3から受け付ける。設定情報としては、計算機1のキャッシュの容量(2次キャッシュメモリ14の容量)や構成、動作周波数の切り換えに要する時間や駆動電圧の切り換えに要する時間などを入力する。この他、計算機1の利用するノード10−1〜nの基準となる動作周波数や、動作周波数や駆動電圧の切り換え条件(低電力化コード付加の条件分岐)を手動にて設定するようにしてもよい。
次に、ステップS2では、コンパイラ200が出力した最適化コード300を読み込む。次に、ステップS3では、最適化コード300を解析してループ演算の範囲を対象領域として抽出する
例えば、図7に示すように、最適化コード300に、X(i)を求めるループ演算と、X(i)を用いて、Y(i)を求めるループ演算を含む場合、データの依存性に基づいてこれらの2つのループ演算を対象領域310として抽出する。そして、ロードモジュール500の実行時に指定されるループ指標(ループ回数)nと並列指標(ノード数)pから複数の対象領域310−1〜310−Pに分割する。ただし、この時点で、ループ指標nと並列指標pは未定であるので、条件式として分割しておく。この例では、P個の対象領域に分割したものとする。
次に、ステップS4では、各対象領域310−1〜P毎にCPU11の演算量と、2次キャッシュメモリ14のメモリアクセス量を算出する。CPU11の演算量は、分割した対象領域310−1〜P内の演算子毎に、計算機1が演算処理を行うサイクル数を予め設定しておき、各対象領域310−1〜Pのサイクル数を演算する。例えば、図7の例では、Y(i)+Z(i)×aであるので、加算と乗算に要するサイクル数を求める。
メモリアクセス量は、各対象領域310−1〜P毎に主記憶15と2次キャッシュメモリ14の間で行われるアクセス(ロード命令またはプリフェッチ命令あるいはストア命令)の数と、データ量からアクセス量をバイト数などで算出する。
次に、ステップS5では、各対象領域310−1〜Pからループ長(総演算回数)を決定する指標を抽出する。図7の例では、分割後の対象領域310−1〜Pのループ指標nをノードの数を示す並列指標pで除したn/pをループ長決定指標として抽出される。つまり、各対象領域310−1〜P毎の総ループ数を求める指標を抽出し、所定の変数へ代入する。
次に、ステップS6では、2次キャッシュメモリ14上のデータを再利用する時間間隔を示す指標としてループ長(n/p)を求めて所定の変数へ代入する。図7の分割した対象領域310−1〜Pでは、2×n/p−1がループ長となる。
次に、ステップS7では、並列処理数に依存する指標を各対象領域310−1〜Pから抽出する。図7の例では、実行するノード数を示す並列指標pを抽出する。ステップS8では、対象領域310−1〜P毎に2次キャッシュメモリ14へ読み込んだデータの再利用回数を演算する。この再利用回数は、変数の数と再利用した回数で構成される。図7の例では、2回目のループ演算でx(i−1)とZ(i)が1回目のデータを再利用しているため、再利用性は、(1回、2変数)となる。
ステップS9では、CPU11のキャッシュメモリ14の容量と、再利用するデータ量を比較するため、再利用するデータ量と、再利用するまでに2次キャッシュメモリ14へ読み込まれる他のデータ量(再利用までの他のデータ量)を求める。
S10では、上記S8で求めた再利用回数と、S9で求めた再利用までの他のデータ量と、S4〜S7で求めた演算量と、ループ長決定指標n/pと、並列指標pをデータ再利用テーブル430に格納する。
ここで、データ再利用テーブル430は、図8で示すように構成され、各対象領域310−1〜P毎に生成される。データ再利用テーブル430には、分割後の対象領域における変数名、データの性質(連続したデータまたはストライド)、データの引用間隔(バイト数)、データの引用間隔を決定する間隔制御変数、データ再利用回数、再利用までの他のデータ量、他のデータ量(バイト数)、演算量から構成される。なお、データの性質は、連続またはストライド(飛び飛び)のいずれかを設定するもので、2次キャッシュメモリ14へ読み込むデータから低電力化コード生成モジュール400が決定しても良いし、ユーザ端末3から設定するようにしてもよい。ストライドの判定は、2次キャッシュメモリ14のキャッシュラインへ読み込んだデータのうち、ひとつまたは一部のみを利用する場合をストライドと判定することができる。
なお、図8のデータ再利用テーブル430の内容は、図9に示す分割した対象領域310’の内容に基づくものである。
次に、S11では、上記データ再利用テーブル430と設定情報に基づいて、低電力化コードを付加したロードモジュール500を生成する。
図10は、上記S11で行われる低電力化コード付加のサブルーチンを示すフローチャートで、各対象領域310−1〜P毎に実行される。
まず、ステップS20では、対象領域の処理が完了するまでの時間と、CPU11の実際の実行時間との比率をCPU11の実行比率とし、対象領域の処理が完了するまでの時間と、2次キャッシュメモリ14がデータの転送に要する時間との比率をメモリアクセス実行比率とし、CPU11の実行比率と2次キャッシュメモリ14のメモリアクセス実行比率の比率をCPU負荷とする。
次に、ステップ21では、各対象領域310−1〜P毎にS20で求めたCPU負荷をCPU11の平均負荷比率(以下、CPU負荷比率)とする。
なお、上記S4では、演算量をサイクル数で求め、メモリアクセス量をバイト数で求めたので、メモリアクセス量をサイクル数に変換し、
CPU負荷比率=メモリアクセス量(サイクル数)/演算量
としてもよい。なお、メモリアクセス量のサイクル数への変換は、主記憶15の転送レートからメモリアクセス量(バイト数)に応じた時間を求め、この時間をCPU11の最大動作周波数からサイクル数へ変換すればよい。
ステップ22では、CPU負荷比率を所定の切り換え条件と比較して低電力化コードの付加の有無を判定する。所定の切り換え条件は、予め低電力化コード生成モジュール400に設定した値(例えば、70%)または図6のS1で入力した周波数/電圧切り換えの条件である。CPU負荷比率が切り換え条件を超えていれば、演算器12−1,2は効率よく(ストールを起こさず)実行できるので、ステップ25に進んで低電力化コードは付加せず(または、最大の動作周波数最高の動作電圧を設定)に最大の動作周波数でCPU11を駆動する。
一方、CPU負荷比率が切り換え条件以下であれば、この対象領域ではメモリアクセスの時間が長く、CPU11がストールを起こす可能性が大きいため、ステップ23でCPU負荷比率に応じた低電力化コードを設定する。なお、CPU11の動作周波数と動作電圧が段階的に変更可能であれば、CPU負荷比率が小さくなるにつれて、動作周波数と動作電圧を段階的に小さくなるような低電力化コードを求める。
なお、除算命令のように1命令のサイクル数が大きい命令を含む場合では、2次キャッシュメモリ14のメモリアクセス量が多くても演算量が多くなり、CPU負荷比率は切り換え条件を超えて最大の動作周波数で駆動されることになる。このため、対象領域内のCPU11の演算時間とメモリアクセスの時間の比率を平均CPU負荷比率として演算することで、メモリアクセス量が多くても演算量が多い場合には、動作周波数や動作電圧を低下させることなく、高速な処理を実現できるのである。
そして、ステップ24では、S23で求めた低電力化コードを最適化コード300に付加し、ロードモジュール500として出力する。なお、S1で低電力化コード実行の条件分岐が設定されていれば、各対象領域310−1〜P毎に低電力化コードを実行するか否かを判定する条件分岐を付加する。なお、最適化コード300が中間コードの場合には、上記S24またはS25で計算機1の実行コードに変換してロードモジュール500を得る。
上記ステップS24で低電力化コードを付加したロードモジュール500に相当するプログラムの例を図11に示す。各対象領域310−1〜Pには、上記ステップ1で設定した条件分岐「if(n/p*3*B>M) 」が設定され、この条件分岐に設定された条件(n/p*3*B>M)を満たしたときに、低電力化コード(周波数低下指令A1)が実行される。そして、一つの対象領域が終了すると、条件分岐の設定条件を満たしていた場合には、通常の動作周波数へ戻す指令A2が実行されるようにロードモジュール500が生成される。なお、低電力化コードを実行する条件分岐は、例えば、ループ長(n/p)が長く、データ量(B)が2次キャッシュメモリ14の容量(M)に比して大きいときに実行するようにする。つまり、ロードモジュール500を実行するノード数が多いときには、各対象領域310−1〜Pのループ長は短く、データ量も少なくなってCPU負荷比率が高くなるので、演算器(演算パイプライン)12−1,2はストールすることなく低電力化コードを実行する必要はない。一方、ロードモジュール500を実行するノード数が少ないときには、各対象領域310−1〜Pのループ長は長く、データ量も多くなってCPU負荷比率が低くなるので、演算器(演算パイプライン)12−1,2はストールを起こす可能性が高いので、低電力化コードを実行させることで演算器の無駄な電力消費を防いで、計算機1の消費電力の低減を実現でき、かつ演算処理の遅延を防ぐことができる。したがって、低電力化コードを実行するか否かの判定を行う条件分岐は、ロードモジュール500の実行時のループ長に応じて行うようにすればよい。
以上のような処理により生成されたロードモジュール500を、図4で示したように計算機1にループ指標nと並列処理の指標Pを設定して所望のノード10−1〜nで実行させると、メモリアクセスの実行比率が所定値を超えてCPU実行比率よりも高い対象領域310−1〜Pでは、CPU11の省電力機構を機能して動作周波数または動作電圧を低減して、CPU11の消費電力を確実に低減させることができる。メモリアクセスの実行比率が高いときには、CPU11の演算器12−1,2は主記憶15からのデータを待ってストールしやすいため、動作周波数または動作電圧を低減させても実行コードの実行速度は低下することはない。
そして、本発明によれば、コンパイラ200と低電力化コード生成モジュール400は、1回の処理でロードモジュール500を得ることができるので、前記従来例のように、最初にコンパイルしたロードモジュールを実行させてプロファイルを取得し、プロファイルに基づいて再度コンパイルする場合に比して、極めて迅速にロードモジュール500を得ることができるのである。
さらに、ロードモジュール500は並列指標pを変更することで、実行させるノード数を任意に設定できるので、前記従来例のように再コンパイルの必要はなくなって、科学技術などのシミュレーション演算を効率よく行うことができるのである。
なお、上記第1の実施形態ではCPU11をデュアルコアで構成した例を示したが、シングルコアやクワッドコアで構成しても良い。
また、本実施形態では、低電力化コード生成モジュール400が中間コードを受け付けるようにしたため、コンパイラ200に既存のものを用いることが可能となって、低コストで低電力化コードを付加することができる。
<第2実施形態>
図12、図13は第2の実施形態を示し、前記第1実施形態のCPU11が3次キャッシュメモリ17を備える例を示す。
図12において、CPU11の2次キャッシュメモリ14は、主記憶15側に3次キャッシュメモリ14を備える。その他の構成は前記第1実施形態と同様である。
図13は、低電力化コード生成モジュール400の上記ステップS11で実行されるサブルーチンを示す。
図13において、ステップS20〜S22及びS25は、前記第1実施形態の図10と同様であり、低電力化コードを付加するステップS30以降が第1実施形態とは異なる。
ステップS22の判定で、CPU負荷比率が切り換え条件以下であれば、この対象領域ではメモリアクセスの時間が長く、CPU11がストールを起こす可能性が大きいため、ステップS31以降で低電力化コードを付加する。
ステップS31では、対象領域の演算に必要なデータの読み込み時点であれば、読み込むデータが2次キャッシュメモリ14に存在するかを判定する。2次キャッシュメモリ14に読み込むデータが存在すれば、S36へ進んでCPU負荷比率に応じた動作周波数と動作電圧を算出し、S37でS36で決定した動作周波数と動作電圧に対応する低電力化コードを付加する。
一方、2次キャッシュメモリ14に読み込むデータが存在しない場合には、S32へ進む。
ステップS32では、対象領域の演算に必要なデータの読み込み時点であれば、読み込むデータが3次キャッシュメモリ17に存在するかを判定する。3次キャッシュメモリ17に読み込むデータが存在すれば、S38へ進んで2次キャッシュメモリ14のキャッシュミスによるレイテンシとCPU負荷比率に応じた動作周波数と動作電圧を算出し、S39でS38で決定した動作周波数と動作電圧に対応する低電力化コードを付加する。
ステップS32の判定で、3次キャッシュメモリ17にも読み込むデータが存在しない場合には、S33へ進む。
ステップS33では、3次キャッシュメモリ17のキャッシュミスによるレイテンシ(主記憶15から読み込むレイテンシ)とCPU負荷比率に応じた動作周波数と動作電圧を算出し、S34ではS33で決定した動作周波数と動作電圧に対応する低電力化コードを付加する。
このように、2次キャッシュメモリ14と3次キャッシュメモリ17を備える場合では、キャッシュミスが発生した位置から、データが存在する位置に応じてレイテンシを変更し、動作周波数と動作電圧を変更すればよい。なお、レイテンシは、主記憶15や3次キャッシュメモリ17のデータ転送レートから予め設定しておけばよい。
なお、3次キャッシュメモリ17は、主記憶15側に設けた例を示したが、図示はしないがバックサイドバスに設けても良い。
<第3実施形態>
図14は、第3の実施形態を示し、前記第1実施形態の低電力化コード生成モジュール400をコンパイラに組み込んだもので、その他の構成は前記第1実施形態と同様である。
コンパイラ200Aの最適化コード生成部230は、最適化コードを低電力化コード生成モジュール400へ出力する。低電力化コード生成モジュール400は、最適化コードを解析し、前記第1実施形態と同様に低電力化コードを付加したロードモジュール500を出力する。
この例では、中間コードを出力する必要がないので、ロードモジュール500をさらに迅速に得ることができる。
なお、上記第1実施形態ないし第3実施形態では、低電力化コードを付加する対象領域を、読み込んだ最適化コードの演算領域からループ演算を選択したが、これに限定されるものではなく、予め設定したプログラム構造であればよく、サブルーチンなどに適用しても良い。
以上のように、本発明では、1回のコンパイルと低電力化コード生成モジュールの実行で、並列処理に適したロードモジュールに低電力化コードを付加することができ、並列処理に適したコンパイラまたはロードモジュール生成プログラムに適用することができる。
第1の実施形態を示す計算機システムのブロック図である。 計算機の構成を示すブロック図である。 ソースプログラムをコンパイルする際の計算機システムのブロック図を示す。 コンパイルによって得られたロードモジュールを実行する際の計算機システムのブロック図を示す。 コンパイラと低電力化コード生成モジュールの構成の一例を示すブロック図である。 低電力化コード生成モジュール400で実行される処理の一例を示すフローチャートである。 対象領域の分割の様子を示す説明図である。 データ再利用テーブルの一例を示す説明図である。 対象領域の一例を示す説明図である。 図6のS11で行われる低電力化コード付加のサブルーチンを示すフローチャート 低電力化コードを付加したロードモジュールに相当するプログラムの一例を示す説明図である。 は第2の実施形態を示し、CPUのブロック図である。 低電力化コード生成モジュール400の上記図6のステップS11で実行されるサブルーチンの他の例を示す。 第3の実施形態を示し、コンパイラのブロック図である。
符号の説明
1 計算機
14 2次キャッシュメモリ14
50 ソースプログラム
200 コンパイラ
300 最適化コード
400 低電力化コード生成モジュール
500 ロードモジュール

Claims (10)

  1. 低電力化機能を有するCPUと、キャッシュメモリ及び主記憶を含む計算機で実行する実行コードに、前記CPUの低電力化機能を有効にする低電力化コードを付加する実行コードの生成方法であって、
    前記計算機が、ソースコードから生成された中間コードを読み込む手順と、
    前記計算機が、前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求める手順と、
    前記計算機が、前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで実行したときに前記キャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算する手順と、
    前記計算機が、前記第1のサイクル数と第2のサイクル数の比率をCPU負荷比率として求める手順と、
    前記計算機が、前記中間コードのうち、前記CPU負荷比率が所定の値以下となる領域を判定する手順と、
    前記計算機が前記前記CPU負荷比率が所定の値以下と判定された前記領域に、前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する手順と、
    前記中間コードから前記計算機で実行可能な中間コードを生成する手順と、
    を含むことを特徴とする中間コードの生成方法。
  2. 前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する手順は、
    前記CPU負荷比率に比例してCPUの動作周波数または動作電圧を段階的に求める手順と、
    前記求めた動作周波数または動作電圧を設定する低電力化コードを前記中間コードに付加する手順と、
    を含むことを特徴とする請求項1に記載の中間コードの生成方法。
  3. 前記計算機が、前記中間コードのうちループ演算を含む範囲を対象領域として抽出し、当該抽出した対象領域を分割する手順をさらに含み、
    前記計算機が、前記中間コードを読み込んで、当該中間コードに対応する命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求める手順は、
    前記分割された対象領域を読み込んで、前記対象領域に含まれる命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求め、
    前記計算機が前記読み込んだ中間コードを解析してキャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算する手順は、
    前記分割された対象領域を読み込んで、前記対象領域を解析してキャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書するデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算することを特徴とする請求項1に記載の中間コードの生成方法。
  4. 前記計算機は、前記中間コードに対応する命令を並列的に実行する複数のノードを備え、
    前記計算機が、前記中間コードのうちループ演算を含む範囲を対象領域として抽出し、当該抽出した対象領域を分割する手順は、
    前記中間コードに含まれる命令を並列的に実行するときに指定される前記ノードの数と、前記ループ回数から、前記対象領域を前記ノードの数で分割し、当該分割後の対象領域のループ演算の回数として前記指定されたループ回数を前記ノードの数で除した値に設定することを特徴とする請求項3に記載の中間コードの生成方法。
  5. 前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する手順は、
    前記中間コードに対応する命令の実行時に、前記対象領域のループ演算の回数と前記ノードの数の比が所定の条件を満たしたときに低電力化機能を有効にする低電力化コードを実行する条件分岐命令を付加する手順を含むことを特徴とする請求項4に記載の中間コードの生成方法。
  6. 低電力化機能を有するCPUと、キャッシュメモリ及び主記憶を含む計算機で実行する中間コードに、前記CPUの低電力化機能を有効にするコードを付加するプログラムであって、
    ソースコードから生成された中間コードを読み込む処理と、
    前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求める処理と、
    前記読み込んだ中間コードを解析して前記中間コードに対応する命令を前記CPUで実行したときに前記キャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算する処理と、
    前記第1のサイクル数と第2のサイクル数の比率をCPU負荷比率として求める処理と、
    前記前記CPU負荷比率が所定の値以下と判定された前記領域に、前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する処理と、
    前記中間コードから前記計算機で実行可能な中間コードを生成する処理と、
    を前記計算機に実行させることを特徴とするプログラム。
  7. 前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する処理は、
    前記CPU負荷比率に比例してCPUの動作周波数または動作電圧を段階的に求める処理と、
    前記求めた動作周波数または動作電圧を設定する低電力化コードを前記中間コードに付加する処理と、
    を含むことを特徴とする請求項6に記載のプログラム。
  8. 前記中間コードのうちループ演算を含む範囲を対象領域として抽出し、当該抽出した対象領域を分割する処理をさらに含み、
    前記中間コードを読み込んで、当該中間コードに対応する命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求める処理は、
    前記分割された対象領域を読み込んで、前記対象領域に含まれる命令を前記CPUで演算するときのサイクル数を第1のサイクル数として求め、
    前記読み込んだ中間コードを解析してキャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリに読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算する処理は、
    前記分割された対象領域を読み込んで、前記対象領域を解析してキャッシュメモリアクセスする命令の数と、前記CPUがキャッシュメモリ読み書きするデータ量に前記命令の数を乗じてメモリアクセス量を求め、前記メモリアクセス量を前記CPUのサイクル数に変換して第2のサイクル数として演算することを特徴とする請求項6に記載のプログラム。
  9. 前記計算機は、前記中間コードに対応する命令を並列的に実行する複数のノードを備え、
    前記中間コードのうちループ演算を含む範囲を対象領域として抽出し、当該抽出した対象領域を分割する処理は、
    前記中間コードに対応する命令を並列的に実行するときに指定される前記ノードの数と、前記ループ回数から、前記対象領域を前記ノードの数で分割し、当該分割後の対象領域のループ演算の回数として前記指定されたループ回数を前記ノードの数で除した値に設定することを特徴とする請求項8に記載のプログラム。
  10. 前記低電力化機能を有効にする低電力化コードを前記中間コードに付加する処理は、
    前記中間コードに対応する命令の実行時に、前記対象領域のループ演算の回数と前記ノードの数の比が所定の条件を満たしたときに低電力化機能を有効にする低電力化コードを実行する条件分岐命令を付加する処理を含むことを特徴とする請求項9に記載のプログラム。
JP2006213342A 2006-08-04 2006-08-04 実行コードの生成方法及びプログラム Expired - Fee Related JP4231516B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006213342A JP4231516B2 (ja) 2006-08-04 2006-08-04 実行コードの生成方法及びプログラム
US11/707,146 US7739530B2 (en) 2006-08-04 2007-02-16 Method and program for generating execution code for performing parallel processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006213342A JP4231516B2 (ja) 2006-08-04 2006-08-04 実行コードの生成方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2008040734A JP2008040734A (ja) 2008-02-21
JP4231516B2 true JP4231516B2 (ja) 2009-03-04

Family

ID=39030670

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006213342A Expired - Fee Related JP4231516B2 (ja) 2006-08-04 2006-08-04 実行コードの生成方法及びプログラム

Country Status (2)

Country Link
US (1) US7739530B2 (ja)
JP (1) JP4231516B2 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008129786A1 (ja) * 2007-04-09 2008-10-30 Panasonic Corporation マルチプロセッサ制御装置、その制御方法および集積回路
WO2009037731A1 (ja) * 2007-09-21 2009-03-26 Fujitsu Limited 翻訳装置と翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサ
JP4339907B2 (ja) * 2007-10-24 2009-10-07 株式会社日立製作所 マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US8312442B2 (en) * 2008-12-10 2012-11-13 Oracle America, Inc. Method and system for interprocedural prefetching
JP2010231306A (ja) * 2009-03-26 2010-10-14 Nec Corp コンピュータシステム、ハードウェアリソース制御方法及びそのプログラム
KR101155202B1 (ko) * 2009-12-24 2012-06-13 포항공과대학교 산학협력단 멀티 코어 프로세서의 전력 관리 방법, 멀티 코어 프로세서의 전력 관리 방법이 기록된 기록매체 및 이를 실행하는 멀티 코어 프로세서 시스템
JP5574816B2 (ja) * 2010-05-14 2014-08-20 キヤノン株式会社 データ処理装置及びデータ処理方法
JP5618670B2 (ja) 2010-07-21 2014-11-05 キヤノン株式会社 データ処理装置及びその制御方法
US8943334B2 (en) * 2010-09-23 2015-01-27 Intel Corporation Providing per core voltage and frequency control
WO2012105000A1 (ja) * 2011-02-01 2012-08-09 富士通株式会社 プログラム実行方法
JP5794010B2 (ja) * 2011-07-19 2015-10-14 富士通株式会社 情報処理装置、制御プログラムおよび制御方法
US8799693B2 (en) * 2011-09-20 2014-08-05 Qualcomm Incorporated Dynamic power optimization for computing devices
US9098309B2 (en) 2011-09-23 2015-08-04 Qualcomm Incorporated Power consumption optimized translation of object code partitioned for hardware component based on identified operations
GB2503743B (en) * 2012-07-06 2015-08-19 Samsung Electronics Co Ltd Processing unit power management
JP6042170B2 (ja) * 2012-10-19 2016-12-14 ルネサスエレクトロニクス株式会社 キャッシュ制御装置及びキャッシュ制御方法
CN103853307A (zh) * 2012-12-04 2014-06-11 鸿富锦精密工业(深圳)有限公司 电子装置及降低处理器系统功耗的方法
US10133557B1 (en) * 2013-01-11 2018-11-20 Mentor Graphics Corporation Modifying code to reduce redundant or unnecessary power usage
US9594560B2 (en) * 2013-09-27 2017-03-14 Intel Corporation Estimating scalability value for a specific domain of a multicore processor based on active state residency of the domain, stall duration of the domain, memory bandwidth of the domain, and a plurality of coefficients based on a workload to execute on the domain
US9829957B2 (en) * 2014-03-26 2017-11-28 Intel Corporation Performance scalability prediction
KR101860248B1 (ko) * 2014-03-27 2018-05-21 인텔 코포레이션 그래픽 처리 유닛 주파수의 동적 조절을 지원하는 방법 및 장치
US10180828B2 (en) * 2014-04-29 2019-01-15 Significs And Elements, Llc Systems and methods for power optimization of processors
US10248180B2 (en) 2014-10-16 2019-04-02 Futurewei Technologies, Inc. Fast SMP/ASMP mode-switching hardware apparatus for a low-cost low-power high performance multiple processor system
US10928882B2 (en) * 2014-10-16 2021-02-23 Futurewei Technologies, Inc. Low cost, low power high performance SMP/ASMP multiple-processor system
JP6439623B2 (ja) 2015-08-05 2018-12-19 富士通株式会社 計算機、動作周波数決定プログラム及び動作周波数決定方法
KR101668564B1 (ko) * 2015-09-02 2016-10-21 충북대학교 산학협력단 소프트웨어 코드 리팩토링 방법 및 이를 기록한 기록매체
JP7230719B2 (ja) * 2019-07-19 2023-03-01 富士通株式会社 情報処理装置及び情報処理方法
JP7436192B2 (ja) 2019-12-05 2024-02-21 ファナック株式会社 制御装置及び産業機械
US20230141385A1 (en) 2020-06-08 2023-05-11 Mitsubishi Electric Corporation Information processing system and information processing system control method

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014742A1 (en) * 2001-07-09 2003-01-16 Sasken Communication Technologies Limited Technique for compiling computer code to reduce energy consumption while executing the code
JP4131909B2 (ja) 2001-07-26 2008-08-13 株式会社東芝 コンパイル方法
US6795781B2 (en) * 2002-06-27 2004-09-21 Intel Corporation Method and apparatus for compiler assisted power management
US7185215B2 (en) * 2003-02-24 2007-02-27 International Business Machines Corporation Machine code builder derived power consumption reduction
US7334143B2 (en) * 2004-04-19 2008-02-19 Hewlett-Packard Development Company, L.P. Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value
WO2006024325A1 (en) * 2004-08-31 2006-03-09 Freescale Semiconductor, Inc. Method for estimating power consumption
US7386739B2 (en) * 2005-05-03 2008-06-10 International Business Machines Corporation Scheduling processor voltages and frequencies based on performance prediction and power constraints
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US7861068B2 (en) * 2006-03-07 2010-12-28 Intel Corporation Method and apparatus for using dynamic workload characteristics to control CPU frequency and voltage scaling
US9582060B2 (en) * 2006-08-31 2017-02-28 Advanced Silicon Technologies Llc Battery-powered device with reduced power consumption based on an application profile data
US7853812B2 (en) * 2007-02-07 2010-12-14 International Business Machines Corporation Reducing power usage in a software application

Also Published As

Publication number Publication date
US7739530B2 (en) 2010-06-15
JP2008040734A (ja) 2008-02-21
US20080034236A1 (en) 2008-02-07

Similar Documents

Publication Publication Date Title
JP4231516B2 (ja) 実行コードの生成方法及びプログラム
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
US10469397B2 (en) Processors and methods with configurable network-based dataflow operator circuits
US10915471B2 (en) Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US10380063B2 (en) Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10416999B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10445451B2 (en) Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10558575B2 (en) Processors, methods, and systems with a configurable spatial accelerator
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US20190303297A1 (en) Apparatus, methods, and systems for remote memory access in a configurable spatial accelerator
US20190101952A1 (en) Processors and methods for configurable clock gating in a spatial array
US5966534A (en) Method for compiling high level programming languages into an integrated processor with reconfigurable logic
US20190095383A1 (en) Processors, methods, and systems for debugging a configurable spatial accelerator
US20100235611A1 (en) Compiler, compile method, and processor core control method and processor
US20140304490A1 (en) Information processing device and information processing method
US20060248520A1 (en) Program conversion device and program conversion method
US20220100680A1 (en) Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
WO2013112282A1 (en) Method and apparatus for register spill minimization
US8732679B2 (en) Loop transformation for computer compiler optimization
Araujo et al. Challenges in code generation for embedded processors
CN110852930B (zh) 一种基于OpenCL的FPGA图处理加速方法和系统
CN104346132A (zh) 应用于智能卡虚拟机运行的控制装置及智能卡虚拟机
US20230116546A1 (en) Method for compilation, electronic device and storage medium
JP4158458B2 (ja) 情報処理装置、その情報処理方法
EP4227795A1 (en) A computer-implemented method and a computer-readable medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080520

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080715

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080812

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081014

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

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

R150 Certificate of patent or registration of utility model

Ref document number: 4231516

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20111212

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20121212

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131212

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees