JP2016192152A - 並列化コンパイル方法、並列化コンパイラ、及び車載装置 - Google Patents

並列化コンパイル方法、並列化コンパイラ、及び車載装置 Download PDF

Info

Publication number
JP2016192152A
JP2016192152A JP2015072812A JP2015072812A JP2016192152A JP 2016192152 A JP2016192152 A JP 2016192152A JP 2015072812 A JP2015072812 A JP 2015072812A JP 2015072812 A JP2015072812 A JP 2015072812A JP 2016192152 A JP2016192152 A JP 2016192152A
Authority
JP
Japan
Prior art keywords
program
procedure
processing
cores
macrotask
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
JP2015072812A
Other languages
English (en)
Other versions
JP6427053B2 (ja
Inventor
和志 信田
Kazuyuki Shinoda
和志 信田
範幸 鈴木
Noriyuki Suzuki
範幸 鈴木
博徳 笠原
Hironori Kasahara
博徳 笠原
啓二 木村
Keiji Kimura
啓二 木村
広紀 見神
Hironori Migami
広紀 見神
弾 梅田
Dan Umeda
弾 梅田
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.)
Waseda University
Denso Corp
Original Assignee
Waseda University
Denso 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 Waseda University, Denso Corp filed Critical Waseda University
Priority to JP2015072812A priority Critical patent/JP6427053B2/ja
Priority to DE102016204960.7A priority patent/DE102016204960A1/de
Priority to US15/083,526 priority patent/US9934012B2/en
Publication of JP2016192152A publication Critical patent/JP2016192152A/ja
Application granted granted Critical
Publication of JP6427053B2 publication Critical patent/JP6427053B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution

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)

Abstract

【課題】逐次プログラムにマクロタスクの追加・削除が発生した場合であっても、追加・削除といった変更の無いマクロタスクの処理に影響を与えないように分割プログラムをコンパイルできる並列化コンパイル方法を提供する。【解決手段】複数のコアに割り当てられているマクロタスクの移動が起きないように、マクロタスクの追加及び/又は削除に基づいて分割プログラムをコンパイルする。【選択図】図3

Description

本発明は、シングルコアプロセッサ用に記述された逐次プログラムからマルチコアプロセッサ用に並列化した分割プログラムを生成する並列化コンパイル方法、並列化コンパイラ、及び車載装置に関する。
自動車における制御系,情報系の高度化,統合化のためには、それらを実現するためのプロセッサの高能力化が重要となる。例えば、安全,快適で燃費の良い自動車開発のために重要なエンジン制御系を高度化するためには、制御アルゴリズムの高度化や新たな制御機能の実現等、計算負荷の増大が避けられない。このような問題を解決する為には、リアルタイム制御を実現しているプロセッサの高速化が必須となる。
しかし、従来のようにプロセッサの動作周波数を向上させることは、消費電力が周波数の三乗に比例して増大するため、困難となっている。このため、1チップ上に低動作周波数のプロセッサコアを複数集積し、電力削減のために低周波数化・低電圧化したプロセッサコアを並列動作させることで、処理の高速化と低電力化を同時に実現可能なマルチコアプロセッサへの移行が急ピッチで行われている。
マルチコアプロセッサにて、シングルコアプロセッサよりも高速な処理を行うためには、シングルコアプロセッサ用の逐次プログラムの処理を分割し、プロセッサコア間の通信が最小になる形で各プロセッサコアに各処理を割り当てる必要がある。従来、このような逐次プログラムの並列化の作業は人手で行う必要があったが、このような作業は大変困難で長期間を要し、開発費の増加や並列化されたプログラムの信頼性等、多くの課題が生じている。
下記特許文献1では、開発期間や開発費を抑えつつ、信頼性が高く、高速な処理が可能な車載装置用の組込みシステム向けの並列化プログラムを作成することができる並列化コンパイル方法が提案されている。
特開2015−1807号公報
従来の技術では、シングルコアプロセッサ用に記述された逐次プログラムを一旦並列化し、その後逐次プログラムにマクロタスクが追加・削除された場合には、再度並列化処理を行うことになる。このため、最初の並列化処理で第1コアに割り当てられたマクロタスクが、次の並列化処理では第2コアに割り当てられることも発生し、最初の逐次プログラムから追加・削除といった変更の無いマクロタスクがコア間を移動することになる。結果として、プログラム全体の変更が大きなものとなり、並列化後のテスト工数などが嵩むといった課題が発生する。
本発明はこのような課題に鑑みてなされたものであり、その目的は、逐次プログラムにマクロタスクの追加・削除が発生した場合であっても、追加・削除といった変更の無い他のマクロタスクの処理に影響を与えないように分割プログラムをコンパイルできる並列化コンパイル方法、並列化コンパイラ、及び車載装置を提供することにある。
上記課題を解決するために、本発明に係る並列化コンパイル方法は、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した分割プログラムを生成する並列化コンパイル方法であって、前記逐次プログラムを構成するマクロタスクを、前記マルチコアプロセッサを構成する複数のコアに割り当てて前記分割プログラムを生成する第1手順と、前記逐次プログラムに前記マクロタスクを追加又は前記逐次プログラムから前記マクロタスクを削除する第2手順と、前記第1手順において前記複数のコアに割り当てられている前記マクロタスクの移動が起きないように、前記第2手順における前記マクロタスクの追加及び/又は削除に基づいて前記分割プログラムをコンパイルする第3手順と、を備えることを特徴とする。
また、本発明に係る並列化コンパイラは、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した分割プログラムを生成する並列化コンパイラ(1)であって、前記並列化コンパイル方法の第1手順と、第2手順と、第3手順と、を実行可能なように構成されている。
また、本発明に係る車載装置は、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化し生成された分割プログラムにより動作するマルチコアプロセッサを備える車載装置(20)であって、前記並列化コンパイル方法の第1手順と、第2手順と、第3手順と、を実行可能なように構成されている。
これら本発明によれば、複数のコアに割り当てられているマクロタスクの移動が起きないように、マクロタスクの追加及び/又は削除に基づいて分割プログラムをコンパイルするので、逐次プログラムにマクロタスクの追加・削除が発生した場合であっても、追加・削除といった変更の無い他のマクロタスクの処理に影響を与えないように分割プログラムをコンパイルできる。
本発明によれば、逐次プログラムにマクロタスクの追加・削除が発生した場合であっても、追加・削除といった変更の無いマクロタスクの処理に影響を与えないように分割プログラムをコンパイルできる並列化コンパイル方法、並列化コンパイラ、及び車載装置を提供することができる。
本発明の実施形態に係る並列化コンパイラを示すブロック図である。 本発明の実施形態に係る車載装置を示すブロック図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。 本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
1.自動並列化コンパイラについて
本実施形態の自動並列化コンパイラは、組込みシステム向けのシングルコアプロセッサシステム用のソースプログラム(逐次プログラム)から、組込みシステム向けのマルチコアプロセッサシステム用の並列化プログラム(分割プログラム)を生成する機能を有している。
1−1.自動並列化コンパイラの設計概念
本実施形態の自動並列化コンパイラは、以下の機能を有している。
(1)マルチグレイン並列処理
(2)コンパイル時のスタティックスケジューリングコードの挿入
(3)実行時のダイナミックスケジューリングコードの生成
(4)階層型マクロデータフローの実現
(5)マクロタスクの分割/融合,Loop distribution/interchange等の並列性抽出
(6)データローカライズによるデータ転送効率の向上
(7)コンパイラによる電力削減
1−2.自動並列化コンパイラの内部処理
自動並列化コンパイラは、Front End(FE),Middle Path(MP),Back End(BE)の3つのステージを有している。各ステージは実行形態として独立しており、FE,MPから生成される中間言語によりコード授受が行われる。
FEは、逐次プログラムのソースコードを字句解析・構文解析を行い、MPにおいてparse可能な中間言語を生成する部位である。FEの生成する中間言語は、基本的に4つのオペランドを持つ解析木(parse tree)で表現されており、全体として1つのブロックを形成していて構造化は行われていない。
MPは、制御依存性解析・データ依存性解析・最適化等を行う部位であり、そのデータを用いて粗粒度・中粒度・近細粒度並列化のマルチグレイン並列処理を行う。
BEは、MPが生成した並列化中間言語を読み込んで実際のマシンコードを生成する部位である。当該部位は、ターゲットとなっているマルチコアアーキテクチャのアセンブラコードを生成するBEの他、OpenMP用の並列化FortranコードやCコードを生成するBEを有している。さらには、当該部位は、後述する並列化APIによりメモリ配置,データ転送を含めて並列化したコードを生成するBE等、多様なアーキテクチャに対応したコードを出力するBEを有している。
1−3.自動並列化コンパイラの並列性解析
自動並列化コンパイラは、逐次プログラムを、基本ブロック(BB),繰り返しブロック(RB),サブルーチンブロック(SB)の3種類の粗粒度タスク(マクロタスク(MT))に分割するマクロデータフロー処理を行う。しかし、マクロデータフロー処理では、プログラムの形状によってはプロセッサの利用効率が上がらず、十分な粗粒度並列性が抽出できないという問題点がある。
そこで、自動並列化コンパイラでは、従来の単階層マクロデータフロー処理手法を拡張し、MT内部に対してマクロデータフロー処理を階層的に利用する階層型マクロデータフロー処理を採用している。階層的マクロデータフロー処理では、MTの階層的な定義を行い、各階層のマクロタスクに対してマクロタスク間の並列性の解析を行う。
<マクロフローグラフ(MFG)の生成>
自動並列化コンパイラは、まず、生成された各階層のマクロタスクに対して、マクロタスク間の制御依存性とデータ依存性を解析する。この解析結果は、マクロフローグラフ(MFG)として表される。
<マクロタスクグラフ(MTG)の生成>
MFGは、マクロタスク間の制御依存性とデータ依存性を表すが、並列性は表していない。並列性を抽出するためには、各マクロタスクに対し、制御依存性とデータ依存性の両方を考慮した最早実行可能条件解析を行う必要がある。最早実行可能条件とは、そのMTが最も早い時点で実行可能になる条件であり、次のような実行条件から求められる。
(1)MTiがMTjにデータ依存するならば、MTjの実行が終了するまでMTiは実行できない。
(2)MTjの条件分岐先が確定すれば、MTjの実行が終了しなくても、MTjに制御依存するMTiは実行できる。
したがって、最早実行可能条件の一般形は次のようになる。
(MTiが制御依存するMTjがMTiに分岐する)AND((MTiがデータ依存するMTk(0≦k≦|N|))が終了)OR(MTkが実行されないことが決定する))
マクロタスクの最早実行可能条件は、マクロタスクグラフ(MTG)で表される。
1−4.マルチグレイン並列処理
自動並列化コンパイラでは、従来のループ並列化に加え、ループ間,サブルーチン間における粗粒度タスク間の並列性を利用する粗粒度タスク並列処理や、ステートメント間の並列性を利用する近細粒度並列処理を効果的に組み合わせたマルチグレイン並列処理(参考文献1(本多弘樹, 岩田雅彦, 笠原博徳、「Fortranプログラム粗粒度タスク間の並列性検出手法」、電子情報通信学会論文誌、1990年)参照)を実現している。
<粗粒度タスク並列処理>
自動並列化コンパイラは、BB,RB,SB等のMT間の制御依存性とデータ依存性を表現したマクロフローグラフ(MFG)を生成し、さらに、MFGから最早実行可能条件解析により引きだしたMT間の並列性を、マクロタスクグラフ(MTG)として表現する(参考文献1,参考文献2(笠原,合田,吉田,岡本,本多、「Fortranマクロデータフロー処理のマクロタスク生成手法」、信学論、1992年、Vol.J75-D-I、No.8、pp.511-525)参照)。
その後、自動並列化コンパイラは、MTG上のMTを、1つ以上のプロセッサエレメント(PE)をグルーピングしたプロセッサグループ(PG)に割り当てる。
<中粒度並列処理>
PGに割り当てられたMTが、DOALLループ、或いはイタレーションレベルで並列処理が可能なものであれば、そのMTには、プロセッサクラスタ内のプロセッサによって中粒度並列処理がなされる。この中粒度並列処理は、DOループイタレーション間の並列性を利用する並列処理のことであり、マルチコアプロセッサにおける並列処理では最も一般的なものである。
<近細粒度並列処理>
ステートメントレベルの近細粒度タスクに対する並列処理を、近細粒度並列処理という。これによって、依存の無いステートメントも並列実行が可能になり、実行時間が短縮される。
1−5.マクロタスクスケジューリング
粗粒度タスク並列処理では、各階層で生成されたマクロタスクは、PGに割り当てられて実行される。どのPGにマクロタスクを割り当てるかを決定するスケジューリング手法として、下記のダイナミックスケジューリングとスタティックスケジューリングがあり、これらは、マクロタスクグラフの形状や実行時非決定性等を元に選択される。
<ダイナミックスケジューリング>
条件分岐等の実行時不確定性が存在する場合には、ダイナミックスケジューリングによって実行時にマクロタスクをPGに割り当てる。ダイナミックスケジューリングルーチンは、マクロタスクの終了や分岐方向の決定に応じてマクロタスク実行管理テーブルを操作し、各マクロタスクの最早実行可能条件を検査する。
マクロタスクが実行可能であれば、レディキューにマクロタスクが投入される。レディキュー内のマクロタスクは、その優先順位に従ってソートされ、レディキューの先頭のマクロタスクが、アイドル状態のプロセッサクラスタに割り当てられる。
また、ダイナミックスケジューリングコード生成時には、一つの専用のプロセッサがスケジューリングを行う集中スケジューリング方式と、スケジューリング機能を各プロセッサに分散した分散スケジューリング方式を、使用するプロセッサ台数,システムの同期オーバーヘッドに応じて使い分けることができる。
<スタティックスケジューリング>
一方、スタティックスケジューリングは、マクロタスクグラフがデータ依存エッジのみを持つ場合に使用され、自動並列化コンパイラが、コンパイル時にPGへのマクロタスクの割り当てを決める方式である。
スタティックスケジューリングは、実行時スケジューリングオーバーへッドを無くし、データ転送と同期のオーバーへッドを最小化することが可能であるため、粒度の細かいタスクのスケジューリングに対しても効果的に利用できる。
また、スタティックスケジューリングの際、タスクのコストは自動並列化コンパイラでのタスクコスト推定値を適用するが、自動並列化コンパイラのプロファイル自動フィードバック機能を用いることで、実コストでタスクスケジューリングを行うことも可能である。
プロファイル自動フィードバック機能を用いる場合、第1フェーズとして、逐次プログラムをMTに分解し、MT毎にプロファイラ関数を挿入して逐次プログラムを生成する。このプロファイラ関数では、タスク実行コスト(clock cycle)とタスク実行回数を計測する。このプロファイラ関数が挿入された逐次プログラムを一度ターゲットとなるマシン上で実行することで、ターゲットとなるマシン上でのタスク実行コストとタスク実行回数の情報を持つファイルを出力する。
そして、第2フェーズにて、この出力ファイルと逐次プログラムを入力として、実コストに基づきスケジューリングした並列化プログラムが生成される。
1−6.データローカライゼーション
自動並列化コンパイラは、プログラム全域に渡るキャッシュ最適化を行うことが可能である。自動並列化コンパイラは、ループ間などの並列性を解析した後、ループ間にデータ依存があることが分かると、依存があるループ間でのキャッシュのグローバル最適化を試みる(参考文献3(特許第4177681号公報)参照)。
具体的には、各ループでアクセスされる配列を調査し、同一の分割ループは同一の配列部分にアクセスするように調整することにより、同一の分割ループを同一プロセッサに割り当てる。これにより、同一の分割ループでは、全ての配列データがキャッシュ上で再利用されるようになる。
このローカライズ技術は、
(1)任意のサイズのローカルメモリ或いは分散共有メモリが与えられた時に、DMA(DTU)(参考文献4(特許第4476267号公報)参照)を用いアクセスされる前に、前記プロセッサに近接したローカル或いは分散共有メモリに事前ロードし、プログラム全域で再利用する。
(2)送付先のメモリが一杯の場合には、送付先プロセッサのDTUが、メモリからの掃き出し優先順位に従ってデータを共有メモリ等へ掃き出したことを同期フラグで知らされたら、自動的に空いたメモリにデータを転送する。
(3)将来再利用されるデータであるが、暫くの間使用されず、メモリの領域を開ける必要がある場合には、CPUによるタスク実行の裏側でDTUが当該データを集中共有メモリに待避し、使用時までに再ロードする。
といったローカルメモリ管理,データ転送技術へと進化している(参考文献5(英国特許第2478874号明細書)。
1−7.並列化プログラムの生成
自動並列化コンパイラにおける並列化プログラムの生成は、自動並列化API(参考文献7(早稲田大学、「Optimally Scheduled Advanced Multiprocessor Application Program Interface」、2008年)参照)を用い、並列化C或いは並列化Fortranのような、source-to-sourceで並列化を行うことが可能である。
この場合には、自動並列化コンパイラは、様々なプラットフォームにおいて並列化プログラムを実行可能とするため、後述する自動並列化API標準解釈系を用いて、各プロセッサ用のC或いはFortranのディレクティブ部分をランタイムライブラリコールに変換する。その後、自動並列化コンパイラは、各プロセッサ用のコードを逐次コンパイラでコンパイルしてバイナリを生成し、このバイナリをリンクすると、対象となるマルチコアプロセッサ上で並列化プログラムを実行可能となる。
2.組み込みシステム用の逐次プログラムの並列化手順と手法
次に、組み込みシステム用の逐次プログラムの特徴について述べ、本実施形態の自動並列化コンパイラによる並列化手法について説明する。なお、組み込みシステムとは、例えば、車載装置であっても良いし、車載装置以外の電子装置であっても良い。また、逐次プログラムは、モデルベース設計により自動生成されたもの(一例として、MathWork社のMatlab(登録商標),Simulink(登録商標)にて自動生成されたもの)であっても良い。
自動並列化コンパイラは、条件分岐と代入文により構成され、処理が細かい逐次プログラムに対して、インライン展開やリネーミングを行い、並列性を抽出する。また、リアルタイム性を順守するために条件分岐隠蔽のためのタスク融合を行い、オーバーヘッドが低くなるようにスタティックスケジューリングを行う。さらに、実コストでスタティックスケジューリングを行うために、プロファイル自動フィードバック機能を適用しても良い。
また、逐次プログラムにおいて、条件コンパイルスイッチ(プリプロセッサへの命令)により、仕向地や機能やハードウェアの構成等が異なる組み込みシステムの各種別に応じてコンパイルの対象となる記述を選択する条件付コンパイルが行われる場合がある。このような場合、逐次プログラムの各条件コンパイルスイッチの引数として、いずれかの種別に対応する情報(仕向地等を示す情報)を設定することで、逐次プログラムから、該種別に対応するバイナリコードが生成される。
これに対し、本実施形態の自動並列化コンパイラは、条件付コンパイルによるコンパイル対象の選択を無視し、逐次プログラムの全ての部分を対象としてマクロタスクの分割や並列性の抽出やスタティックスケジューリング等を行い、並列化プログラムを生成する。その後、並列化プログラムから、条件付コンパイルによりコンパイルの対象外となる記述を特定し、該記述を除いた状態で、マルチコアプロセッサを動作させるためのバイナリデータを生成する。
2−1.自動並列化コンパイラの動作環境等について
自動並列化コンパイラ1は、例えば、DVD,CD−ROM,USBメモリ,メモリカード(登録商標)等の光ディスク,磁気ディスク,半導体製メモリ等として構成された記憶媒体18に記憶された状態で、ユーザに提供される(図1参照)。無論、ネットワークを経由してユーザに提供されても良い。
そして、自動並列化コンパイラ1がインストールされたパーソナルコンピュータ(PC)10は、自動並列化コンパイル装置として動作する。PC10は、ディスプレイ11,HDD12,CPU13,ROM14,RAM15,入力装置16,読取部17等を備える。
ディスプレイ11は、CPU13から受けた映像信号を、ユーザに対して映像として表示する。
入力装置16は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をCPU13に出力する。
読取部17は、自動並列化コンパイラ1等が記憶された記憶媒体18からデータを読み取る部位である。
RAM15は読み出し、書き込み可能な揮発性メモリであり、ROM14は読み出し専用の不揮発性メモリであり、HDD12は読み出し,書き込みが可能な不揮発性メモリである。ROM14,HDD12には、CPU13が読み出して実行するプログラム等が予め記憶されている。
RAM15は、CPU13がROM14,HDD12に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域や、作業用のデータを一時的に保存するための記憶領域として用いられる。
CPU13は、OSをHDD12から読み出して実行し、HDD12に記録されている各種プログラムをOS上のプロセスとして実行する。また、CPU13は、このプロセスにおいて、必要に応じて入力装置16から信号の入力を受け付け、ディスプレイ11に映像信号を出力し、RAM15,HDD12に対してデータの読み出し/書き込みの制御を行う。
PC10には、読取部17を介して記憶媒体18から読み取られた自動並列化コンパイラ1がインストールされており、自動並列化コンパイラ1は、HDD12に保存され、OS上のプロセスとして実行されるアプリケーションの1つとなっている。
なお、この自動並列化コンパイル装置は、車載装置等といった組み込みシステム向けの並列化プログラムの開発に用いられる。しかしながら、これに限定されることは無く、例えば情報家電等といった様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
3.車載装置の構成について
続いて、本実施形態の自動並列化コンパイラ1により生成された並列化プログラムにより動作する車載装置20の構成について説明する(図2参照)。無論、自動並列化コンパイラ1は、車載装置20に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。
車載装置20は、マルチコアプロセッサ21,通信部22,センサ部23,入出力ポート24等を備える。
マルチコアプロセッサ21は、ROM21aと、RAM21bと、複数のコア21c,21d…等を有している。
ROM21aは、自動並列化コンパイラ1により生成された並列化プログラム21a−1(バイナリデータ)が保存されている。マルチコアプロセッサ21は、並列化プログラム21a−1に従い動作し、車載装置20を統括制御する。
RAM21bは、コア21c,21d…等によりアクセスされる部位である。通信部22は、車内LAN等を介して接続された他のECUと通信を行う部位である。
センサ部23は、制御対象等の状態を検出するための各種センサから構成される部位である。入出力ポート24は、制御対象を制御するための各種信号の送受信を行う部位である。
[具体例について]
続いて、本実施形態の自動並列化コンパイラ1により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、処理a等といった記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。
図3に示す具体例は、変更規模最小化オプションが無い場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理した分割プログラムを示し、(B)はマクロタスク追加後の逐次プログラム及びそれを並列化処理した分割プログラムを示している。
図3の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
図3の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。処理aから処理eまでと処理xをコア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理xと処理dとが割り付けられ、コア1には処理bと処理cと処理eとが割り付けられる。
図3の(A)と(B)とを比較すると、確かに全体の処理時間が最も短くなるという観点からは最適な並列化であるといえるけれども、(A)ではコア0に割り付けられていた処理cが(B)ではコア1に割り付けられ、(A)ではコア1に割り付けられていた処理dが(B)ではコア0に割り付けられている。このように、処理c及び処理dは、コア間を移動するように割り付けられることなる。
このように予め割り付けられた処理がコア間を移動するのを許容しないようにする変更規模最小化オプションについて説明する。図4に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク追加(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
図4の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
図4の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。変更規模最小化オプションが有る場合は、図4の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理d、処理eの割り付けを動かすこと無く、より処理時間の短いコア1に処理xを割り付ける。
図3の(B)と図4の(B)とを比較すると、全体の処理時間が最も短くなるという観点からは図3の(B)に示す並列化が優れているけれども、既に割り付けられた処理の移動が最小限になっているという観点からは図4の(B)に示す並列化が優れている。
図4に示した変更規模最小化オプション有りの場合の並列化処理の変形例について、図5を参照しながら説明する。図5に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク追加(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
図5の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理bと処理cが割り付けられ、コア1には処理cと処理eとが割り付けられる。これら処理aから処理eの割り付けが図4の(A)に示した並列化とは異なっている。
図5の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。変更規模最小化オプションが有る場合は、図5の(A)に示す既に各コアに割り付けられた処理を極力変更しないようにする。具体的には、コア0への処理a、処理b、処理dの割り付け、コア1への処理c、処理eの割り付けを動かすこと無く、より処理時間の短いコア0に処理xを割り付ける。
続いて、マクロタスクを削除する場合の並列化について説明する。図6に示す具体例は、変更規模最小化オプションが無い場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
図6の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
図6の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。処理aから処理eまでと処理xをコア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理cが割り付けられ、コア1には処理aと処理bと処理eとが割り付けられる。
図6の(A)と(B)とを比較すると、確かに全体の処理時間が最も短くなるという観点からは最適な並列化であるといえるけれども、(A)ではコア0に割り付けられていた処理aが(B)ではコア1に割り付けられている。このように、処理aは、コア間を移動するように割り付けられることなる。
このように予め割り付けられた処理がコア間を移動するのを許容しないようにする変更規模最小化オプションについて説明する。図7に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
図7の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
図7の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。変更規模最小化オプションが有る場合は、図7の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理eの割り付けを動かすこと無く、コア1に割り付けられていた処理dのみを削除する。
図6の(B)と図7の(B)とを比較すると、全体の処理時間が最も短くなるという観点からは図6の(B)に示す並列化が優れているけれども、既に割り付けられた処理の移動が最小限になっているという観点からは図7の(B)に示す並列化が優れている。
続いて、図7を参照しながら説明した並列化について、処理aと処理dとの間にデータ依存性があり、処理dと処理eとの間にもデータ依存性がある場合について図8を参照しながら説明する。
図8に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
図8の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
図8の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。変更規模最小化オプションが有る場合は、図8の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理eの割り付けを動かすことは無い。
しかしながら、図8に示す例では、上記したように、処理aと処理dとの間にデータ依存性があり、処理dと処理eとの間にもデータ依存性がある。ここで処理dを単純に削除してしまうと、処理dを介して処理aと処理eとの間にあったデータ依存性が切れてしまい、処理eの実行に不具合が生じる可能性がある。そこで本例では、処理dの処理コマンドのみを削除し、処理dと処理aとが依存関係にあり、処理dと処理eとも依存関係にあるという情報は残しておいている。このため、コア1では、処理dの処理コマンド分の負荷が低減されると共に、処理eの確実な実行が確保される。
1:自動並列化コンパイラ
20:車載装置
21:マルチコアプロセッサ

Claims (15)

  1. シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ(21)で処理可能なように並列化した分割プログラムを生成する並列化コンパイル方法であって、
    前記逐次プログラムを構成するマクロタスクを、前記マルチコアプロセッサを構成する複数のコアに割り当てて前記分割プログラムを生成する第1手順と、
    前記逐次プログラムに前記マクロタスクを追加又は前記逐次プログラムから前記マクロタスクを削除する第2手順と、
    前記第1手順において前記複数のコアに割り当てられている前記マクロタスクの移動が起きないように、前記第2手順における前記マクロタスクの追加及び/又は削除に基づいて前記分割プログラムをコンパイルする第3手順と、を備えることを特徴とする並列化コンパイル方法。
  2. 前記第2手順において、前記マクロタスクを前記逐次プログラムに追加する場合に、
    前記第3手順において、前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにすると共に、前記マクロタスクを追加した前記分割プログラムの処理長さに応じて前記複数のコアのいずれに割り当てるかを決定してコンパイルする、ことを特徴とする請求項1に記載の並列化コンパイル方法。
  3. 前記複数のコアの内、前記マクロタスクを追加した前記分割プログラムの処理長さが短くなる方の前記コアに前記マクロタスクを割り当ててコンパイルすることを特徴とする請求項2に記載の並列化コンパイル方法。
  4. 前記第2手順において、前記マクロタスクを前記逐次プログラムから削除する場合に、
    前記第3手順において、前記マクロタスクを削除すると共に、この削除によっても前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにコンパイルすることを特徴とする請求項1に記載の並列化コンパイル方法。
  5. 前記第3手順において、前記マクロタスクを削除する際に、データ依存性の情報を保持することを特徴とする請求項4に記載の並列化コンパイル方法。
  6. シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ(21)で処理可能なように並列化した分割プログラムを生成する並列化コンパイラ(1)であって、
    前記逐次プログラムを構成するマクロタスクを、前記マルチコアプロセッサを構成する複数のコアに割り当てて前記分割プログラムを生成する第1手順と、
    前記逐次プログラムに前記マクロタスクを追加又は前記逐次プログラムから前記マクロタスクを削除する第2手順と、
    前記第1手順において前記複数のコアに割り当てられている前記マクロタスクの移動が起きないように、前記第2手順における前記マクロタスクの追加及び/又は削除に基づいて前記分割プログラムをコンパイルする第3手順と、を実行可能なように構成されていることを特徴とする並列化コンパイラ。
  7. 前記第2手順において、前記マクロタスクを前記逐次プログラムに追加する場合に、
    前記第3手順において、前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにすると共に、前記マクロタスクを追加した前記分割プログラムの処理長さに応じて前記複数のコアのいずれに割り当てるかを決定してコンパイルする、ことを特徴とする請求項6に記載の並列化コンパイラ。
  8. 前記複数のコアの内、前記マクロタスクを追加した前記分割プログラムの処理長さが短くなる方の前記コアに前記マクロタスクを割り当ててコンパイルすることを特徴とする請求項7に記載の並列化コンパイラ。
  9. 前記第2手順において、前記マクロタスクを前記逐次プログラムから削除する場合に、
    前記第3手順において、前記マクロタスクを削除すると共に、この削除によっても前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにコンパイルすることを特徴とする請求項6に記載の並列化コンパイラ。
  10. 前記第3手順において、前記マクロタスクを削除する際に、データ依存性の情報を保持することを特徴とする請求項9に記載の並列化コンパイラ。
  11. シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ(21)で処理可能なように並列化し生成された分割プログラムにより動作するマルチコアプロセッサを備える車載装置(20)であって、
    前記逐次プログラムを構成するマクロタスクを、前記マルチコアプロセッサを構成する複数のコアに割り当てて前記分割プログラムを生成する第1手順と、
    前記逐次プログラムに前記マクロタスクを追加又は前記逐次プログラムから前記マクロタスクを削除する第2手順と、
    前記第1手順において前記複数のコアに割り当てられている前記マクロタスクの移動が起きないように、前記第2手順における前記マクロタスクの追加及び/又は削除に基づいて前記分割プログラムをコンパイルする第3手順と、を実行可能なように構成されていることを特徴とする車載装置。
  12. 前記第2手順において、前記マクロタスクを前記逐次プログラムに追加する場合に、
    前記第3手順において、前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにすると共に、前記マクロタスクを追加した前記分割プログラムの処理長さに応じて前記複数のコアのいずれに割り当てるかを決定してコンパイルする、ことを特徴とする請求項11に記載の車載装置。
  13. 前記複数のコアの内、前記マクロタスクを追加した前記分割プログラムの処理長さが短くなる方の前記コアに前記マクロタスクを割り当ててコンパイルすることを特徴とする請求項12に記載の車載装置。
  14. 前記第2手順において、前記マクロタスクを前記逐次プログラムから削除する場合に、
    前記第3手順において、前記マクロタスクを削除すると共に、この削除によっても前記複数のコアに割り当てられている前記マクロタスクの移動が起きないようにコンパイルすることを特徴とする請求項11に記載の車載装置。
  15. 前記第3手順において、前記マクロタスクを削除する際に、データ依存性の情報を保持することを特徴とする請求項14に記載の車載装置。
JP2015072812A 2015-03-31 2015-03-31 並列化コンパイル方法、及び並列化コンパイラ Active JP6427053B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015072812A JP6427053B2 (ja) 2015-03-31 2015-03-31 並列化コンパイル方法、及び並列化コンパイラ
DE102016204960.7A DE102016204960A1 (de) 2015-03-31 2016-03-24 Parallelisierungskompilierverfahren, Parallelisierungskompilierer und Fahrzeugvorrichtung
US15/083,526 US9934012B2 (en) 2015-03-31 2016-03-29 Parallelization compiling method, parallelization compiler, and vehicular device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015072812A JP6427053B2 (ja) 2015-03-31 2015-03-31 並列化コンパイル方法、及び並列化コンパイラ

Publications (2)

Publication Number Publication Date
JP2016192152A true JP2016192152A (ja) 2016-11-10
JP6427053B2 JP6427053B2 (ja) 2018-11-21

Family

ID=56937620

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015072812A Active JP6427053B2 (ja) 2015-03-31 2015-03-31 並列化コンパイル方法、及び並列化コンパイラ

Country Status (3)

Country Link
US (1) US9934012B2 (ja)
JP (1) JP6427053B2 (ja)
DE (1) DE102016204960A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019159931A (ja) * 2018-03-14 2019-09-19 株式会社デンソー 並列化方法、並列化ツール、及びマルチコアマイコン

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6427054B2 (ja) * 2015-03-31 2018-11-21 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ
CN109522720A (zh) * 2018-11-29 2019-03-26 北京元心科技有限公司 动态度量的方法、装置、电子设备及计算机可读存储介质
US20220147617A1 (en) * 2019-03-19 2022-05-12 Nec Corporation Information processing apparatus, information processing method, and storage medium

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265721A (ja) * 1992-03-03 1993-10-15 Nec Corp 差分コンパイル方法および装置
JPH0721015A (ja) * 1993-06-23 1995-01-24 Nec Software Ltd リンク処理方式
JP2007226739A (ja) * 2006-02-27 2007-09-06 Seiko Epson Corp ソフトウェア開発装置およびプログラム
WO2013157244A1 (ja) * 2012-04-18 2013-10-24 日本電気株式会社 タスク配置装置、タスク配置方法、および、コンピュータ・プログラム
JP2015001807A (ja) * 2013-06-14 2015-01-05 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3039953B2 (ja) * 1989-04-28 2000-05-08 株式会社日立製作所 並列化装置
US20030033588A1 (en) * 2001-01-29 2003-02-13 John Alexander System, method and article of manufacture for using a library map to create and maintain IP cores effectively
US20030105620A1 (en) * 2001-01-29 2003-06-05 Matt Bowen System, method and article of manufacture for interface constructs in a programming language capable of programming hardware architetures
US8914590B2 (en) * 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
US7159211B2 (en) * 2002-08-29 2007-01-02 Indian Institute Of Information Technology Method for executing a sequential program in parallel with automatic fault tolerance
JP4177681B2 (ja) 2003-02-20 2008-11-05 学校法人早稲田大学 コンパイル方法、コンパイラ、およびコンパイル装置
JP2004310651A (ja) 2003-04-10 2004-11-04 Fujitsu Ltd コスト解析に基づいてループの自動並列化処理を行う情報処理装置
US7590977B2 (en) * 2005-10-13 2009-09-15 International Business Machines Corporation Method and system for reducing memory reference overhead associated with threadprivate variables in parallel programs
JP4476267B2 (ja) 2006-10-06 2010-06-09 株式会社日立製作所 プロセッサ及びデータ転送ユニット
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
JP5224498B2 (ja) 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265721A (ja) * 1992-03-03 1993-10-15 Nec Corp 差分コンパイル方法および装置
JPH0721015A (ja) * 1993-06-23 1995-01-24 Nec Software Ltd リンク処理方式
JP2007226739A (ja) * 2006-02-27 2007-09-06 Seiko Epson Corp ソフトウェア開発装置およびプログラム
WO2013157244A1 (ja) * 2012-04-18 2013-10-24 日本電気株式会社 タスク配置装置、タスク配置方法、および、コンピュータ・プログラム
JP2015001807A (ja) * 2013-06-14 2015-01-05 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019159931A (ja) * 2018-03-14 2019-09-19 株式会社デンソー 並列化方法、並列化ツール、及びマルチコアマイコン
JP7139633B2 (ja) 2018-03-14 2022-09-21 株式会社デンソー 並列化方法、並列化ツール、及びマルチコアマイコン

Also Published As

Publication number Publication date
US9934012B2 (en) 2018-04-03
US20160291948A1 (en) 2016-10-06
DE102016204960A1 (de) 2016-10-06
JP6427053B2 (ja) 2018-11-21

Similar Documents

Publication Publication Date Title
JP6018022B2 (ja) 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
JP6319880B2 (ja) 並列性の抽出方法及びプログラムの作成方法
JP6427054B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP4936517B2 (ja) ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US8438359B2 (en) Memory management method, information processing device, program creation method, and program
EP1881405B1 (en) Global compiler for controlling heterogeneous multiprocessor
KR101559090B1 (ko) 이종 코어를 위한 자동 커널 마이그레이션
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
EP3238053A1 (en) Technologies for low-level composable high performance computing libraries
JP6488739B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
JP6488738B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
WO2021098105A1 (en) Method and apparatus for functional unit assignment
JP6600888B2 (ja) 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法
CN117910523A (zh) 将暂存存储器分配给异构设备的方法和系统
Ghadge Improving Code Overlay Performance by Pre-fetching in Scratch Pad Memory Systems
Matsumoto et al. A GPGPU PROGRAMMING FRAMEWORK BASED ON A SHARED-MEMORY MODEL

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171019

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180516

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180703

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180828

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181026

R150 Certificate of patent or registration of utility model

Ref document number: 6427053

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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