[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP5036523B2 - プログラム並列化装置 - Google Patents

プログラム並列化装置 Download PDF

Info

Publication number
JP5036523B2
JP5036523B2 JP2007330336A JP2007330336A JP5036523B2 JP 5036523 B2 JP5036523 B2 JP 5036523B2 JP 2007330336 A JP2007330336 A JP 2007330336A JP 2007330336 A JP2007330336 A JP 2007330336A JP 5036523 B2 JP5036523 B2 JP 5036523B2
Authority
JP
Japan
Prior art keywords
task
program
predicate
process element
tasks
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
JP2007330336A
Other languages
English (en)
Other versions
JP2009151645A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2007330336A priority Critical patent/JP5036523B2/ja
Publication of JP2009151645A publication Critical patent/JP2009151645A/ja
Application granted granted Critical
Publication of JP5036523B2 publication Critical patent/JP5036523B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

この発明は、並列化したプログラムを実行する並列処理装置に対して、プログラムを並列に実行可能な複数のタスクに自動的に分割するプログラム並列化装置に関するものである。
プログラム並列化装置では、一般に一つのプログラムを複数のタスクに分割し、複数のプロセスエレメント上で並列に実行するため、プログラムの演算対象である変数に関して読み出しと書き込みに関するフロー依存、逆依存、出力依存の各依存関係からデータ依存を解析し、タスク間の先行制約を抽出し、分割したプログラムに対して同期命令を組み込むことで、プロセスエレメントに割り付けたタスク間の先行制約を守り、演算結果の整合性を保証する。
このようなプログラム並列化装置において、従来の装置では、一つの仮想マシンコードを一つのタスクとして扱い、プログラムを並列に実行可能なタスクに分割し、複数のプロセッサにタスクスケジュールを行った後、タスクの結合が可能なときには、タスクを結合し再度タスクスケジュールをすることで、同期処理によるオーバーヘッドを小さくするようにしたものがあった(例えば、特許文献1参照)。
また、従来のプログラム並列化装置として次のような装置があった。即ち、実行プロセッサが指定されているタスクを含む各タスクの依存関係を示すタスクグラフに基づいて、各タスクのタスクスケジューリングを各タスクの実行前に行う静的なタスクスケジューリングシステムにおいて、各タスクから終端のタスクに至るまでのパス長が長いタスクに高い優先度が与えられ、優先度の高い順に登録される順方向リストと、終端のタスクから各タスクに至るまでのパス長が長いタスクに高い優先度が与えられ、優先度の低い順に登録される逆方向リストを持つようにしたものがあった(例えば、特許文献2参照)。そして、このようなプログラム並列化装置では、スケジューリングする際に、順方向リストか逆方向リストかのいずれかのリストを選択し、選択されたリストに基づいて各タスクの実行時刻を決定する。このようなプログラム並列化装置は、各プロセッサの最優先タスクの状況によって、順方向と逆方向のタスクスケジューリングを適宜行うため、タスクの待ち状態を少なくして、プロセッサの使用効率を向上させることができる。
特許第3039953号公報 特開2003−29988号公報
しかしながら、プログラムを複数のタスクに分割して複数のプロセスエレメントに割り付けるタスクスケジューリングを行う際に、従来のプログラム並列化装置では実行効率の高い割り付けを行っているとは言えなかった。
即ち、並列化した後のプログラムの全体の実行時間は、最も処理時間が長いプロセスエレメントの処理時間によって決まる。機器に組み込んで、その機器の制御を行うプログラムの場合、そのプログラムは実行を終えた時点で、外部との入出力によってデータの更新が必要であるため、分割後に割り付けたプログラムの処理が早く終了したプロセスエレメントだけを、他のプロセスエレメントに先行して、次の処理周期に進めることができない。処理が早く終了したプロセスエレメントは、最も処理時間を必要とするプロセスエレメントでの処理が終了するまで、待機する必要がある。その結果、先に処理を終えたプロセスエレメントは、次の周期の処理を開始するまでの間、空き時間が発生することになる。タスクスケジューリングの結果、全てのプロセスエレメントが同時に処理を終了するように各プロセスエレメントに対して処理が割り付けられていれば良いが、ある一つのプロセスエレメントのみがその他のプロセスエレメントより処理時間が長くなるようなスケジューリング結果となった場合、その他のプロセスエレメントは、その一つのプロセスエレメントが処理を終了するまでの間、待機することになり、複数のプロセスエレメントの実行効率が低くなるという問題があった。
上記の問題は、プロセスエレメントに割り当てた処理の最後の部分についての問題であるが、同様の問題はプロセスエレメントに割り当てた処理の途中の時点でも発生する場合がある。あるプロセスエレメントに割り当てたタスクが、他のプロセスエレメントに割り付けたタスク(先行タスクと呼ぶ)に含まれる変数に対してデータ依存の関係にある場合、他のプロセスエレメントに割り付けた先行タスクの完了を待機する必要がある。このため、先行タスクの完了を待機する間にも、空き時間が発生するという問題があった。後続のタスクの中で、データ依存がなく、かつコントロールフローの点からも制約がないタスクを、この空き時間に割り当てることによって、空き時間をなくすことも可能である。しかし、これは、後続のタスクにそのような条件が成り立つタスクが存在する場合であって、条件が成立するタスクが存在しない場合は、先に述べたようにプロセスエレメントの処理に空き時間が発生し、そのプロセスエレメントの実行効率が低下するという問題が同様に発生する。
例えば、特許文献1に記載された装置のように、一つの仮想マシンコードを一つのタスクとして扱い、プログラムを並列に実行可能なタスクに分割し、複数のプロセッサにタスクスケジュールを行った後に、結合が可能なタスク同士を結合した後、改めてスケジューリングを行う方法では、空き時間が少なくなるようにスケジューリングされるため、プロセスエレメントの実行効率は改善されるが、スケジューリングを行う回数が多く、演算量が増えるという問題があった。
また、組み込み機器の制御プログラムでは、実行条件とその条件下での処理の組み合わせの連続によってプログラムを構成できる。特許文献1に記載された装置でのタスクの扱いに基づいて、このようなプログラムの1マシンコードを1タスクとして扱おうとすると、個々のマシンコードに対して実行条件を考慮してタスクの結合の可否を判断する必要がある。実行条件が異なるタスクは一つのタスクとして結合できないためである。その結果、このような制御プログラムの場合、タスクを結合する際に実行条件を考慮に入れるため、演算量が増えるという問題があった。
また、特許文献2に記載された装置では、各タスクの依存関係を示すタスクグラフに基づいて、実行前にスケジューリングを行う静的なタスクスケジューリングシステムにおいて、優先度の高い順にタスクが登録された順方向リストと、優先度の低い順にタスクが登録された逆方向リストを用い、各プロセッサの最優先タスクの状況によって、順方向リストと逆方向リストを選択してタスクスケジューリングを行う。これにより、タスクの待ち状態である空き時間を削減できるとしている。しかし、データの依存性を持つタスク間では、依然としてこの方法では解決できない空き時間が発生するという問題があった。
この発明は上記のような課題を解決するためになされたもので、プロセスエレメントの空き時間を削減してプログラムの実行効率を改善し、最大実行時間を短縮することのできるプログラム並列化装置を得ることを目的とする。
この発明に係るプログラム並列化装置は、複数のプロセスエレメントで、実行条件とその条件下での処理内容の対で構成されるタスクの並列処理を行う並列処理装置において、複数のプロセスエレメントのそれぞれは、次の命令を実行するか否かを決定するための真偽値を格納するプレディケートレジスタと、他のプロセスエレメントから受信した次の命令を実行するか否かを決定するための真偽値が付いたプレディケート付き同期イベントを格納するプレディケート受信レジスタと、タスクの実行条件判定結果を他のプロセスエレメントで実行されるタスクに対して通知するタスクを実行する場合は、プレディケートレジスタの真偽値が付いたプレディケート付き同期イベントを他のプロセスエレメントに通知し、他のプロセスエレメントで実行されるタスクの実行条件判定結果に基づいて実行されるタスクを実行する場合は、プレディケート付き同期イベントの受信レジスタの真偽値に基づいて当該自身のタスクを実行する命令実行部とを備えた並列処理装置に対して、プログラムを複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、プログラムに含まれるデータの依存関係を解析する解析部と、解析部の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、分割したタスクを、複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、スケジューリング部でスケジューリングを行った結果、スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、タスク分割部がタスクの処理を複数のプロセスエレメントに対応して一つのタスクを複数のタスクへ再分割すると共に、コード生成部が、分割したタスクの処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するようにしたものである。
この発明のプログラム並列化装置は、プログラムに含まれるデータの依存関係を解析する解析部と、解析部の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、分割したタスクを、複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、スケジューリング部でスケジューリングを行った結果、スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、タスク分割部がタスクの処理を複数のプロセスエレメントに対応して一つのタスクを複数のタスクへ再分割すると共に、コード生成部が、分割したタスクの処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するようにしたので、プログラムの実行効率を改善し、最大実行時間を短縮することができる。
実施の形態1.
図1は、この発明の実施の形態1による並列処理装置を示す構成図である。
図において、並列処理装置は、プロセッサ1と外部メモリ5およびこれらを相互に接続するためのバス6から構成されている。プロセッサ1は、二つ以上のプロセスエレメント(実施の形態1ではプロセスエレメント(PE)#0(2)、#1(3)の2台)と内蔵メモリ4からなる。これらプロセスエレメント#0(2)、#1(3)は、それぞれ、プレディケートレジスタ7,12、プレディケート受信レジスタ8,11、命令実行部9,13、同期機構10,14を備えている。
プレディケートレジスタ7,12は、それぞれのプロセスエレメント#0(2),#1(3)において、次の命令を実行するか否かを決定するための真偽値を格納するレジスタである。これらのプレディケートレジスタ7,12の値は、プロセスエレメント#0(2),#1(3)上での演算によって値が変化する。例えば、変数間の比較命令の結果が一致しない場合や、大小比較命令の結果が不成立の場合にこのレジスタの値が偽になる。一方で、変数間の比較命令の結果が一致したり、大小比較命令の結果が成立した場合には、このレジスタの値が真になる。
プレディケート受信レジスタ8,11は、他のプロセスエレメントで実行された命令の結果(真偽値)を受信するためのレジスタである。即ち、プレディケート受信レジスタ8は、プロセスエレメント#1(3)による命令実行結果を、また、プレディケート受信レジスタ11は、プロセスエレメント#0(2)による命令実行結果を受信する。
命令実行部9,13は、自身に割り当てられたタスクの実行結果が、他のプロセスエレメントに割り当てられているタスクに同期している場合は、自身のタスクに対応した同期イベントを他のプロセスエレメントに通知すると共に、他のプロセスエレメントで実行されるタスクの同期イベントに基づいて実行されるタスクを実行する場合、その同期イベントの受信に基づいて自身のタスクを実行し、かつ、タスクの実行条件判定結果を他のプロセスエレメントで実行されるタスクに対して通知するタスクを実行する場合は、プレディケートレジスタ7,12の真偽値を、他のプロセスエレメントに通知すると共に、他のプロセスエレメントで実行されるタスクの実行条件判定結果に基づいて実行されるタスクを実行する場合は、プレディケート受信レジスタ8,11の真偽値に基づいて自身のタスクを実行するよう構成されている。
即ち、これらの命令実行部9,13は、条件付き実行命令をサポートしている。条件付き実行命令の実行は、プレディケートレジスタ7,12の値に依存する。プレディケートレジスタ7,12には、真偽のいずれかの値が格納されるが、このプレディケートレジスタ7,12の値が真の場合は、読み出した条件付き実行命令を実行して、その演算結果を内蔵メモリ4に書き込む。一方、プレディケートレジスタ7,12の値が偽の場合は、読み出した条件付き実行命令を実行せず、次の命令を読み出す。
同期機構10,14は、プロセッサ1上の複数のプロセスエレメント#0(2),#1(3)間で、同期をとるための仕組みであり、自身のプロセスエレメントから通知されている同期イベントを待機する命令と、他のプロセスエレメントから通知された同期イベントの命令により、これらのプロセスエレメント間の同期を行う。
即ち、各プロセスエレメント#0(2),#1(3)は、他のプロセスエレメントに対して同期イベントを通知する命令を持つ。この同期イベントには、固有の番号が付けられる。この同期イベントの固有の番号は、後述するプログラム並列化装置20がプログラム30を分割する際に、静的に決定し、対応する命令をマシンコード31に組み込むものである。尚、プログラム30およびマシンコード31についても後述する。
例えば、プロセスエレメント#1(3)がプロセスエレメント#0(2)からの同期イベントを待機する場合は、プロセスエレメント#1(3)の同期機構14は、例えば”WAITEV 0”という命令で待機し、プロセスエレメント#0(2)は、例えば”SENDEV 0”という命令で同期イベントを同期機構14に通知する。待機しているプロセスエレメント#1(3)が、対応する同期イベントを受信すると、待機しているプロセスエレメント#1(3)が持つ同期機構14がそれを認識し、この場合は、プロセスエレメント#1(3)の実行処理を再開する。プロセスエレメントの処理は、”WAITEV n”(nは整数)が呼び出された時点で、対応する同期イベントがシステム上の外のプロセスエレメントが発行するまで待機する。
また、プロセッサ1における内蔵メモリ4は、外部メモリ5に格納されているプログラムやデータを保持し、かつ、命令実行部9,13によって実行結果が書き込まれるメモリである。即ち、プロセッサ1上の各プロセスエレメント#0(2),#1(3)は外部メモリ5上の対応するプログラム領域からマシンコード31を読み出し、内蔵メモリ4から値を読み出して演算を行い、内蔵メモリ4上の変数に結果を書き込む。尚、内蔵メモリ4はアービトレーション機能を持ち、プロセスエレメント#0(2),#1(3)からの一つの変数へのアクセスは排他的に行われる。
この例では、マシンコード31を外部メモリ5上に配置しているが、プロセッサ1内部に存在する内蔵メモリ4上に配置してもよい。また、内蔵メモリ4上に配置されている変数は、外部メモリ5上に配置することもできる。尚、外部メモリ5もアービトレーション機能を持ち、アクセスが排他的に行われる。また、バス6は、プロセッサ1と外部メモリ5とを相互に接続するためのバスである。
また、図1では、プロセッサ1に含まれるプロセスエレメントが2個の場合について示しているが、3個以上存在しても良い。この場合、各プロセスエレメントが持つ同期機構とプレディケートレジスタは、それぞれ自プロセスエレメント以外の全てのプロセスエレメントと接続される。
次に、プログラム並列化装置について説明する。
図2は、プログラム並列化装置の構成図である。
図示のプログラム並列化装置20は、解析部21、タスク分割部22、スケジューリング部23、コード生成部24を備えている。
解析部21は、入力されたプログラム30について、字句解析、構文解析を行い、中間コードへ変換する。中間コードとしては、例えば四つ組が挙げられる。また、解析部21は、プログラム30内で表現されている演算内容とその順序に基づいて、変数間の依存性の解析を行うよう構成されている。タスク分割部22は、中間コードで表現されたプログラムを複数のタスクへ分割する。タスクの単位としては、基本ブロックや、実行条件とその条件下での処理を一まとまりとしたものが挙げられる。尚、基本ブロックとは、途中に分岐がなくプログラムが記述された順に連続して実行されるプログラムの単位である。これらを単位としたタスクについて、タスク分割部22では、変数間の依存性の解析結果を基に、タスク間の実行順序制約を求める。
スケジューリング部23は、タスク分割部22においてタスクに分割されたプログラムを、複数のプロセスエレメントに対して割り付ける機能部である。スケジューリング方式としては、クリティカルパス法が挙げられるが、いずれのスケジューリング・アルゴリズムでも採用することができる。ただし、実施の形態1では、各タスクの処理時間を評価関数とするクリティカルパス法に基づいたスケジューリングについて説明する。スケジューリングは、先のタスク間の実行順序制約に基づいて行われる。コード生成部24は、スケジューリング部23で複数のプロセスエレメントへ割り付けられた個々のタスクについて、実行するプロセスエレメントのマシンコード31を生成する機能部である。このコード生成の際に、タスク間での変数についての依存性がプロセスエレメント間にわたる場合は、異なるプロセスエレメント間で実行順序を守る必要があるため、コード生成部24ではその箇所に同期命令を追加するよう構成されている。
尚、プログラム並列化装置20はコンピュータによって実現され、解析部21〜コード生成部24に対応したソフトウェアと、これらのソフトウェアを実行するためのCPUやメモリ等のハードウェアから構成されている。あるいは、解析部21〜コード生成部24は専用のハードウェアから構成されている。
また、プログラム並列処理装置20と図1に示した並列実行装置とは、例えば、ネットワークケーブルやUSBケーブルによって接続され、プログラム並列化装置20によって並列化されたプログラムを、並列実行装置のプログラムを格納する外部メモリ5へ転送するよう構成されている。
次に、実施の形態1のプログラム並列化装置と並列処理装置の動作について説明する。
例えば、あるプログラムを、実行条件とその条件下での処理のまとまりを一つのタスクとして扱った場合のタスク間の依存関係が、図3で表現されるようなプログラムを対象に説明する。図3は、プログラムの一部であり、その前後には他のタスクが存在していても良い。
図3の各ノードはタスクを表し、円の中の数字はタスクの番号である。また、円の右の数値はそのタスクの処理時間を数値で表現したものである。更にノード間の矢印は、タスク間の先行制約を表現している。例えば、タスク2はタスク1が終了するまで処理を開始することができず、タスク4はタスク2とタスク3が終了するまで処理を開始することができない。
以下では、各タスクは実行条件とその条件下での処理内容の対で表現されているとし、各タスクの先頭には必ず実行条件の判定が存在するとものとして扱う。尚、プログラムを記述する言語としては、実行条件とその条件下での処理が記述できる言語であれば何でも良く、対象となる言語が限定される訳ではない。
以下、図3で示されるタスク構成を持つプログラムを、プログラム30としてプログラム並列化装置20に入力した際の処理の流れについて図4を用いて説明する。
プログラム並列化装置20は、プログラム30を入力として受けると、解析部21で字句解析・構文解析を行い中間コードを生成する(ステップST1)。このとき、タスク分割部22によって図3に示すタスク間の依存関係を求める(ステップST2)。次に、スケジューリング部23において、図3に示すタスクの依存性解析結果と各タスクの処理時間から、例えばクリティカルパス法を用いて、プロセスエレメントに対してタスクの割付を行う(ステップST3)。二つのプロセスエレメントに対して、図3のタスク構成を割り付けた例を図5に示す。
図5では、プロセスエレメント#0(2)に対してタスク1、タスク2、およびタスク4を割り付け、プロセスエレメント#1(3)に対してタスク3を割り付けている。尚、タスク3の実行はタスク1の終了を待つ必要があるため、これらのタスク間に同期イベントの受け渡しを行う命令を追加する。つまり、タスク3の先頭にタスク1からの同期イベントを待機する命令を追加し、タスク1の最後にタスク3への同期イベントを通知する命令を追加する。尚、ここでは、同期に要する時間を1としている。このため、タスク1、タスク2及びタスク4の処理時間の合計に、タスク1からタスク3への同期イベントの受け渡し時間1を加算した65がこのスケジューリングによる処理時間である。全てのタスクを一つのプロセスエレメント上で順に処理した場合の処理時間は、全てのタスクの処理時間の合計である84になるため、並列化によって処理時間が短縮されている。
同期イベントは、同期イベント通知命令”SENDEV n”および同期イベント待機命令”WAITEV n”で表現する。尚、nは整数で、イベントの番号を意味する。即ち、WAITEV命令でイベントを待機する側は、指定したイベント番号の同期イベントが通知されるまで、処理を待機する。一方、同期イベントを通知する側は、同期イベントを通知すべき相手を、イベント番号で特定する。
同期イベントの通知では、一つの同期イベント通知命令が、複数の同期イベント待機命令に対して、ある一つの同期イベントをブロードキャストしてもよい。
また、プレディケート付き同期イベントは、例えば同期イベント通知命令“SENDEV_PD n”およびプレディケート付き同期イベント待機命令“WAITEV_PD n”で表現する。
スケジューリング部23において、プロセスエレメントへのタスクの割り付けを終えると、スケジューリングした結果について、プロセスエレメント間の通信オーバーヘッドに要する時間よりも長い時間に渡って、タスクが割り付けられておらず、空いた時間が存在するかどうかを確認する(ステップST4)。空き時間の確認は、スケジューリング結果を、先頭から順に走査し、タスクが割り当てられていない時間を抽出することで行う。
図5の例では、タスク4をプロセスエレメント#1(3)が実行している間、プロセスエレメント#0(2)にはタスクが割り当てられておらず、空き時間が存在する。そこで、タスク分割部22によるタスク再分割(ステップST5)に分岐し、タスクの再分割を行う。
図6は、図4におけるタスクの再分割(ステップST5)の処理の流れを示すフローチャートである。
先ず、空き時間を持つプロセスエレメントについて、空き時間の処理開始からの時刻とその時刻に空き時間を持つプロセスエレメントの数を求める(ステップST11)。次に、その時刻で処理を分割することができるタスクが存在するかを確認する(ステップST12)。このとき、タスクの処理時間が短く、分割して並列化するより、並列化による同期イベントの受け渡しのオーバーヘッドが大きくなる場合は、分割可能なタスクが存在しないと判断して処理を終了する。一方、図5のタスク4のように、同期イベントの受け渡しのオーバーヘッドに対して処理時間が長いタスクが存在する場合は、ステップST13に移行して、分割可能なタスクの処理を空き時間を持つプロセスエレメントの数で分割する。図5の例では、プロセスエレメントが二つ存在するため、タスク4の処理を二つに分割する。このようにタスクの処理を複数に分割する際には、処理の内部でのデータの依存性を確認し、依存性を持つ処理の間で分割することを避ける必要がある。その理由は、依存性を持つ処理を複数のプロセスエレメントに対して割り付けると、この依存性を保証するために、新たに同期イベントの受け渡しの命令を追加する必要があるためである。従って、異なるプロセスエレメントに分割する際には、依存性を持たない処理を割り付ける。依存性を持つ場合は、依存関係がある処理をまとめて一つのプロセスエレメントに配置し、残りの処理を別のプロセスエレメントに配置する。
図6に示す処理の流れに沿って、図5のタスク4を二つに分割し、タスク4−1とタスク4−2を生成する。尚、タスク4−1はタスク4の前半の処理を、タスク4−2はタスク4の後半の処理である。タスク4の実行条件判定の処理はタスク4−1に含まれる。そこで、タスク4−1で求めた実行条件であるプレディケートの値を、タスク4−2に通知する。
このようにタスクを再分割した際には、分割後のタスクの起動元タスクの同期イベントを発行する位置にプレディケート付き同期命令を追加する(ステップST14)。更に、起動先の同期イベントの待機位置にプレディケート付き同期イベントを待機する命令を追加する(ステップST15)。
以上がタスクを再分割する際のタスク分割部22の処理である。
タスクを再分割した後は、新たなタスク構成に対して、スケジューリング部23でスケジューリングを行う(図4におけるステップST3)。そして、スケジューリング結果の中にプロセスエレメントの空き時間が存在するかどうかを確認する(ステップST4)。このステップST4において、空き時間が存在する場合は、改めてタスクの再分割処理(ステップST5)を行う。
空き時間がない場合は、コード生成部24でマシンコード31の生成を行う(ステップST6)。コード生成部24では、タスク間の依存関係に基づいて、同期イベントの受け渡しを行うための、同期イベント通知命令と同期イベントの待機命令を追加する。尚、タスクを再分割した際に追加したプレディケート付き同期命令が追加されたタスクについては、マシンコード31を生成する際に、その命令をマシンコード31中に組み込む。
尚、あるプロセスエレメントから特定のプロセスエレメントに対して、同期イベントの通知処理を繰り返すなど、冗長な同期イベントの受け渡しについては、マシンコード31を生成する時点で必要最小限まで同期イベントを削除しても良い。
図5に示したスケジューリング結果の空き時間を短縮する目的で、図4及び図6に示した処理を実行した結果、図7に示すスケジューリング結果が得られる。
図7は、図5のタスク4の処理を二つのプロセスエレメントに分割することで、空き時間を削減し、プログラム全体の処理時間を短縮している。尚、タスク4の条件判定処理の時間を2とすると、この時間は分割できないため、プロセスエレメント#1(3)上で処理を行う。この条件判定処理によって求められたプレディケートの値を、プロセスエレメント#0(2)に割り付けられたタスク4−2に通知する。このように、タスクを分割した結果、全体の処理時間は、タスク1及びタスク2の時間とタスク4−2の時間(=19)に対し、条件判定の時間2と二つの同期命令の時間の合計の47となる。
次に、上記プログラム並列化装置20で生成された並列化プログラム(図7に示す状態のプログラム)が外部メモリ5に格納された場合の並列処理装置の動作について説明する。
並列処理装置のプロセスエレメント#0(2)は、図7の左側のタスクであるタスク1、タスク2、タスク4−2のプログラムを順に実行する。また、プロセスエレメント#1(3)は、図7の右側のタスクであるタスク3、タスク4−1のプログラムを順に実行する。
先ず、プロセスエレメント#0(2)は、タスク1のプログラムをメモリ(内蔵メモリ4または外部メモリ5)から読み込んで処理を開始する。このとき、プロセスエレメント#1(3)でもタスク3のプログラムを読み込んで処理を開始するが、先頭の命令が、タスク3の先頭にタスク1が終了した時点でプロセスエレメント#0(2)から発行される同期イベントを待機する命令であるため、プロセスエレメント#1(3)が持つ同期機構14に、プロセスエレメント#0(2)からのイベントを待機する設定を行い、そのイベントの待機状態となる。尚、この同期イベントには固有の番号が割り振られており、その番号を持つイベントが発行されるまで待機する。同期イベントの固有番号は、プログラム並列化装置20のコード生成部24によって、同期イベントの受け渡しが必要となる箇所に、同期イベントの送受信命令を追加する際に、それぞれの箇所について固有の番号を割り付けられている。
プロセスエレメント#0(2)の命令実行部9は、タスク1の処理を完了すると、プロセスエレメント#1(3)のタスク3が待機している同期イベントを同期機構14に通知する。次に、プロセスエレメント#0(2)の命令実行部9は、タスク2のプログラムを読み出し、その実行を開始する。
プロセスエレメント#0(2)からの同期イベントを受けたプロセスエレメント#1(3)は、同期機構14によって受信した同期イベントが、待機状態を抜ける条件となる同期イベントであるかを判断する。この場合は、待機状態を抜け出す条件の同期イベントであるため、待機状態を抜け、命令実行部13での処理を再開し、プログラム3の処理を開始する。プロセスエレメント#0(2)の命令実行部9は、タスク2の処理が完了すると、タスク4−2のプログラムを読み出す。このプログラム4−2の先頭は、プロセスエレメント#1(3)からのプレディケート付き同期イベントを待機する命令である。このため、プロセスエレメント#0(2)の命令実行部9は、同期機構10に待機する同期イベントを登録し、待機状態に移る。
プロセスエレメント#1(3)の命令実行部13は、タスク3の処理を終えると、タスク4−1の処理に移る。命令実行部13は、タスク4−1の先頭部分の実行条件判定処理の実行を終えると、プログラム並列化装置20によってプログラム上のその次の位置に追加されたプレディケート付き同期命令を実行する。このプレディケート付き同期命令は、命令が実行された時点でのプレディケートレジスタ12の真偽の値を、同期イベントと共に、対象プロセスエレメントに対して通知する命令である。この場合、タスク4−1の実行条件判定の処理を終えた時点で、プレディケート付き同期命令を発行しているため、タスク4−1の実行条件判定処理終了時点でのプレディケートレジスタ12の値をプロセスエレメント#0(2)に対して同期イベントと共に通知する。ここで、プレディケートレジスタ12の値はプレディケート受信レジスタ8に通知される。これは、タスク4−2の実行開始を指示すると共に、タスク4−2に含まれる条件付き実行命令に対して、実行する/しないを通知する処理になる。プロセスエレメント#1(3)からの同期イベントとプレディケート値を受けたプロセスエレメント#0(2)は、命令実行部9により、受け取ったプレディケート値に基づいて、タスク4−2の処理を開始する。
このように、プロセスエレメントへのタスク割り付けを行った後に、プロセスエレメントに空き時間が存在し、その時間に実行条件判定を行った後の処理を分割可能なタスクが存在する場合は、そのタスクの処理の部分を、空き時間を持つプロセスエレメントに対して割り付け、割り付けたプログラムの実行開始タイミングを通知する同期イベントの受け渡しの命令を追加すると共に、実行条件判定の結果を合わせて通知する機構を設けることによって、プログラム全体の処理時間を短縮することができる。
以上のように、実施の形態1のプログラム並列化装置によれば、プログラムを、実施の形態1の並列処理装置における複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、プログラムに含まれるデータの依存関係を解析する解析部と、解析部の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、分割したタスクを、複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、スケジューリング部でスケジューリングを行った結果、スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、タスク分割部がタスクの処理を複数のプロセスエレメントに対応して一つのタスクを複数のタスクへ再分割すると共に、コード生成部が、分割したタスクの処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するようにしたので、並列処理装置におけるプログラムの実行効率を改善し、最大実行時間を短縮することができる。
実施の形態2.
実施の形態2における並列処理装置とプログラム並列化装置の構成は実施の形態1と同様であるため、実施の形態1の図面を用いて説明する。
実行条件とその条件下での処理内容の一まとまりを一つのタスクとして扱った場合のタスク間の依存関係が図8に示されるようなプログラムを例に実施の形態2によるプログラム並列化装置20の処理の流れと並列処理装置の動作について説明する。
図8は、プログラムの一部であり、その前後には他のタスクが存在していても良い。
図8において、実施の形態1と同様に、各ノードがタスクを表し、円の中の数値はタスクの番号を表す。また、円の右側の数値はそのタスクの処理時間である。更に、ノード間の矢印は、タスク間の先行制約を表現している。この例では、処理時間4のタスク3を実行するためには、処理時間が40であるタスク1と処理時間が20であるタスク2の両方のタスクが処理を完了していなければならない。
図8で示されるタスク構成を持つプログラムをプログラム並列化装置20に入力すると、プログラムを解析し中間コードを生成した後、図8のようなタスクの単位に分割し、プロセスエレメントへのタスクの割り付けを行うスケジューリングを終了した時点で、図9のようなスケジューリング結果が得られる。プロセスエレメント#0(2)上では、タスク1とタスク3を、プロセスエレメント#1(3)上では、タスク2を実行する。このとき、プログラム全体の処理時間は、プロセスエレメント#0(2)での処理時間となり、タスク1の処理時間とタスク3の処理時間を合わせた44となる。
スケジューリングを終えると、いずれかのプロセスエレメント上にプロセスエレメント間の通信のオーバーヘッドを越える空き時間が存在するかを確認する(図4におけるステップST4)。この例では、プロセスエレメント#1(3)において、タスク2を実行した後の時間が空き時間になっている。このため、プログラム並列化装置20は、タスクの再分割の処理に入る。
タスクの再分割(図6参照)では、空き時間の時刻とその時刻に空き時間を持つPEの数を求める(ステップST11)。その後、同時刻で処理を分割可能なタスクが存在するかを確認する(ステップST12)。この例では、プロセスエレメント#1(3)でタスク2の実行を完了した後の時間では、プロセスエレメント#0(2)上でタスク1の処理を行っている。この処理は、タスク2の処理完了後20の時間に渡って行われるため、分割可能なタスクの処理となる。そこで、分割可能なタスクの処理を割当可能なPEの数で分割する(ステップST13)。この例では、タスク1をタスク1−1とタスク1−2に分割する。
そして、起動元タスクの同期イベント発行位置となるタスク1−1に含まれる実行条件判定の処理を終えた位置にプレディケート付き同期命令を追加する(ステップST14)。次に、その同期イベントの通知先となるタスク1−2の先頭位置に、プレディケート付き同期イベントを待機する命令を追加する(ステップST15)。このように、タスク1を前後二つに分割した状態で、再度スケジューリングを実施する。
その結果、プログラムは、図10に示すようにプロセスエレメントに対して割り付けられる。ここで、分割されたタスク1−2は、タスク2の後にスケジューリングされている。この例では、タスク1とタスク2の間に依存関係がないため、どちらのタスクを先に実行しても問題はない。ただし、タスク1−2は、タスク1−1で行われる実行条件判定の処理結果であるプレディケート値を必要とするため、このプレディケート値が確定してから処理を開始するようにした方がプロセスエレメントの空き時間の発生を抑えられる。そのため、プロセスエレメント#0(2)上で実行条件判定の処理を行っている時間に並行して、プロセスエレメント#1(3)上ではタスク2の処理を行うようにタスクを割り付ける。
図10のスケジューリング結果では、図9のタスク1の処理を二つのプロセスエレメントに分割することで、空き時間を削減し、プログラム全体の処理時間を短縮している。タスク1の実行条件判定の処理時間を4とした場合、図9のスケジューリング結果でのプログラム全体の処理時間が44であるの対し、図10に示すように、タスク1の処理の部分を分割して処理を並列化することにより、プログラム全体の処理時間を35に短縮することができる。
次に、この実施の形態での並列処理装置の動作について説明する。
並列処理装置のプロセスエレメント#0(2)は、図10のタスク1−1のプログラムを実行する。また、プロセスエレメント#1(3)は、図10のタスク2のプログラムから実行を開始する。
プロセスエレメント#0(2)が、タスク1−1の実行条件判定の処理を完了した時点で、プロセスエレメント#1(3)に対して、プレディケート付き同期イベントを通知する。その後、プロセスエレメント#0(2)は、タスク1−1の後続の処理を続けて行う。
プロセスエレメント#1(3)は、開始時にタスク2のプログラムから実行を開始するが、タスク2の実行中にプロセスエレメント#0(2)からプレディケート付き同期イベントを受信する。このとき、この同期イベント通知に対応する受信命令はまだ実行されていない。この同期イベントを受信する命令は、タスク2の処理が完了した後に実行するタスク1−2の先頭に存在するためである。このような場合、プレディケート付き同期イベントを受信したプロセスエレメント#1(3)は、この同期イベントの番号を同期機構14に保持すると共に、受信したプレディケートの値を、プレディケート受信レジスタ11に保持する。
プロセスエレメント#1(3)でのタスク2の処理が完了すると、引き続きタスク1−2の処理を開始する。このときタスク1−2の先頭は、先にプロセスエレメント#0(2)から送信されたプレディケート付き同期イベントを受信する命令である。そこで、プロセスエレメント#1(3)の命令実行部13は、同期機構14に対してそのイベントを既に受信しているかを確認する。この例では、既に対象となるプレディケート付き同期命令を受信しているため、後続の処理をそのまま継続する。プロセスエレメント#1(3)は、タスク1−2の処理を終了すると、引き続きタスク3のプログラムを読み出しながら、最後まで処理を進める。
このように、実施の形態2では、プロセスエレメントへのタスクの割り付けを行った後に、プロセスエレメントに空き時間が存在し、その時間に条件実行判定を行った後の処理を分割可能なタスクが存在する場合は、そのタスクの処理の部分を、空き時間を持つプロセスエレメントに対して割り付け、割り付けたプログラムの実行開始タイミングを通知する同期イベントの受け渡しの命令を追加すると共に、実行条件判定の結果を合わせて通知する機構を設けることによって、プログラム全体の処理時間を短縮することができる。
実施の形態3.
実施の形態3はタスクの先行制約において、後続のタスクを多数持つタスクを分割するようにしたものである。
実施の形態3におけるプログラム並列化装置および並列処理装置の図面上の構成は、実施の形態1と同様であるため、これらの図を援用して説明する。
実施の形態3のプログラム並列化装置20において、タスク分割部22は、解析部21の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割すると共に、データ依存の関係において後続のタスクが所定の個数以上の対象タスクがあった場合は対象タスクを分割するよう構成されている。そしてスケジューリング部23でスケジューリングを行った結果、処理時間が短縮される場合は、対象タスクの分割を行ってマシンコード31を生成するよう構成されている。これ以外の構成は実施の形態1のプログラム並列化装置20と同様である。また、並列処理装置の構成については実施の形態1と同様であるため、ここでの説明は省略する。
以下、実行条件とその条件下での処理内容を一まとまりとして一つのタスクとして扱った場合のタスク間の依存関係が図11に示されるようなプログラムを例に実施の形態3によるプログラム並列化装置20の処理の流れについて説明する。
図11において、実施の形態1と同様に、各ノードがタスクを表し、円の中の数値はタスクの番号を表す。また、円の右側の数値はそのタスクの処理時間である。更に、ノード間の矢印は、タスク間の先行制約を表現している。この例では、処理時間が18であるタスク1を実行した後、タスク3〜タスク6が実行可能になる。また、タスク2は常に実行可能である。
スケジューリング後に、実施の形態1、2に示すように、プログラム中のいずれかのタスクを分割しても、スケジューリング結果に改善が見られない状況であっても、プロセスエレメント上には、空き時間が存在する場合がある。同期によるオーバーヘッドのため、タスクを分割して同期命令を追加するより、そのまま空き時間とした方が、プログラム全体の処理時間が短いと判断される状況である。
しかし、このような細かな空き時間がスケジューリング結果の複数箇所に存在する場合、後続のタスクを多数持つタスクを分割することでスケジューリングの条件を改善し、プログラム全体の処理時間を短くできる可能性がある。
後続のタスクを多数持つタスクを分割し、処理の終了時間を早めると、タスクの先行制約により、先行タスクが完了するまでスケジューリングの対象にならなかったタスク群が、従来よりも早い時間にスケジューリング可能となることで、スケジュール対象のタスクの候補が多くなる。その結果、従来では、タスクの先行制約により、空き時間となっていた箇所が、新たにスケジュール可能となったタスクが割り当てられることで、空き時間が減少し、プログラム全体の処理時間を短くすることができる。
例えば、後続のタスクが四つ以上で、かつ、分割によって処理時間が短縮可能なタスクを検出し、それらのタスクについて、順にタスクの分割の前後で、プログラムの処理時間を比較し、効果があるタスクについてのみ、その分割を採用する方法がある。この場合、プログラムの先頭から順に、該当するタスクを検出し、プログラムの終端まで進んだ時点で処理を終了する。
図11のようなタスク構成を持つプログラムを二つのプロセスエレメントに対して割り付けを行うと図12のようになる。図12のタスクを示す矢印の右側の数値は、そのタスクの処理時間を表す。このとき、タスク1の実行条件判定の時間を1とする。タスク1とタスク2の間の時間差は3であるため、同期処理のオーバーヘッドを考慮すると、タスク1を分割する効果はない。このためタスク1は分割しない。このときのプログラムの処理時間は、26になる。
一方、実施の形態3では、後続のタスク数が多いタスクを強制的に分割する。この例では、タスク1に続くタスクが四つあるため、タスク1を二つに分割する。そして、タスク1の処理の後半の部分を起動するため、プレディケート付き同期イベントの送受信処理を追加する。
タスク1を分割した際のスケジューリング結果を図13に示す。図13のようなスケジューリングを行った際のプログラムの処理時間は25になり、タスク1を一つのタスクとして扱う場合に比べ短縮できる。図13のタスクを示す矢印の右側の数値は、そのタスクの処理時間を表す。
以上の処理の流れを図14に示す。
先ず、タスク分割部22は、全てのタスクのうち、後続のタスクが例えば三つ以上あるタスクについて、プログラム上の先頭のタスクから順にタスクを分割し(ステップST21,ST22)、スケジューリング部23でスケジューリングを行う(ステップST23)。その結果、ステップST24において処理時間短縮の効果があれば、そのスケジューリング結果を採用し、そのタスクを分割する。一方、ステップST24において、分割による効果がなければ、タスクを分割前に戻す(ステップST25)。
次に、タスク分割部22は、そのタスクがプログラムの最後のタスクかどうかを確認する(ステップST26)。また、上記のステップST21において、後続のタスクが三つ以上でなかった場合もステップST26に移行する。ステップST26において、そのタスクが最後のタスクであれば処理を終了する。一方、そのタスクが最後のタスクでない場合は、ステップST21に戻って次のタスクに移る。このとき、後続のタスクが三つ以上あるタスクに移る。
尚、この例では、後続のタスクの数を3タスク以上としたが、このタスクの数は、3タスク以上に限定されるものではなく、2タスクや4タスク以上であってもよい。
尚、並列処理装置の動作については、実施の形態1,2と同様であるため、ここでの説明は省略する。
また、実施の形態1または2を実施した後、更に実施の形態3のタスク分割を適用することで、更なるプログラムの処理時間の短縮を行うことができる。
以上のように、実施の形態3のプログラム並列化装置によれば、プログラムを、実施の形態3の並列処理装置における複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、プログラムに含まれるデータの依存関係を解析する解析部と、解析部の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割すると共に、データ依存の関係において後続のタスクが所定の個数以上の対象タスクがあった場合は、所定の個数以上の後続タスクを持つある一つのタスクの処理内容を更に分割して、実行条件と分割された処理内容を持つタスクと、分割された残りの一つ若しくは複数の処理内容へ分け、実行条件と分割された処理内容を持つタスクの実行条件が確定した後に、実行条件の値を受け渡すプレディケート付き同期イベントの送信処理を追加し、残りの分割された処理内容のそれぞれの先頭に、プレディケート付き同期イベントの受信処理を追加して、並列に実行可能な分割された処理内容を持つタスクと分割された一つ若しくは複数の処理内容へ分割するタスク分割部と、タスク分割部で分割したタスクを、複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、スケジューリング部でスケジューリングを行った結果、スケジューリング部が処理時間の短縮が可能と判断した場合は、タスク分割部が対象タスクの分割を行うようにしたので、データの先行制約が原因で空き時間となっている時間に対して、その時刻で割当可能となるタスクの数が増加することにより、その空き時間に割当可能なタスクが現れた場合、プログラム全体の処理時間を短縮できる。
実施の形態4.
実施の形態4は、タスクの実行条件の判定処理を複数のプロセスエレメントに対応して分割するようにしたものである。
プログラム並列化装置の図面上の構成は図2と同様であるため、図2を用いて説明する。
実施の形態4のプログラム並列化装置20におけるタスク分割部22は、解析部21の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割すると共に、スケジューリング部23でスケジューリングを行った結果、いずれかのプロセスエレメントで、タスク実行の空き時間が存在した場合は、タスクの実行条件の判定処理を複数のプロセスエレメントに対応して分割するよう構成されている。また、コード生成部24は、タスク分割部22で、タスクの実行条件の判定処理を分割した場合に、分割したタスクの実行条件の判定処理を同期させるための同期命令を付加するよう構成されている。それ以外の構成は実施の形態1と同様である。
図15は、実施の形態4の並列処理装置におけるプロセスエレメントの構成図である。
実施の形態4のプロセッサはN(Nは任意の整数)個のプロセスエレメント(PE)を備えており、図15はN番目(#N)のプロセスエレメント50を示している。
図示のプロセスエレメント50は、プレディケートレジスタ51、N−1個のプレディケート受信レジスタ52、命令実行部53、同期機構54を備えている。プレディケートレジスタ51は、そのプロセスエレメントで処理するプログラム用のプレディケート値を保持する(自プロセスエレメントの処理結果の真偽値を格納する)ためのレジスタであり、N−1個のプレディケート受信レジスタ52は、それぞれ、他のプロセスエレメントからプレディケート付き同期イベントによって受信した、接続先のプレディケート値を格納するためのレジスタである。また、命令実行部53は、プレディケートレジスタ51の値とプレディケート受信レジスタ52の値とに基づいて、タスクの実行を行うものである。更に、同期機構54は、実施の形態1における同期機構10,14と同様に、他のプロセスエレメントとの同期を行うためのものである。
実施の形態4では、分割可能なタスクの実行条件の判定処理を空き時間を持つPEの数で分割する。そして、並列に演算する実行条件判定の結果を一つにまとめるために、複数のプロセスエレメント間でプレディケート付き同期イベントを受け渡す。
以下、実行条件とその条件下での処理内容の一まとまりを一つのタスクとして扱った場合のタスク間の依存関係が図16に示されるようなプログラムを例に実施の形態4によるプログラム並列化装置20の処理の流れと並列処理装置の動作について説明する。
図16において、実施の形態1と同様に、各ノードがタスクを表し、円の中の数値はタスクの番号を表す。また、円の右側の数値はそのタスクの処理時間である。更にノード間の矢印は、タスク間の先行制約を表現している。この例では、処理時間が40であるタスク1を実行した後、タスク2とタスク3が実行可能になる。
図16で示されるタスク構成を持つプログラムをプログラム並列化装置20に入力すると、プログラムを解析し中間コードを生成した後、図16に示すタスクの単位に分割し、スケジューリングを終了した時点で、図17のようなスケジューリング結果が得られる。図17のタスクの動作を示す矢印の右側の数値は、そのタスクの処理時間を表す。プロセスエレメント#0(2)上ではタスク1とタスク2を、プロセスエレメント#1(3)上ではタスク3を実行する。このとき、プログラム全体の処理時間は、プロセスエレメント#0(2)での処理時間となり、タスク1の処理時間とタスク2の処理時間を合わせた61となる。
スケジューリングを終えると、スケジューリング部23は、いずれかのプロセスエレメント上にプロセスエレメント間の通信のオーバーヘッドを越える空き時間が存在するかを確認する。この例では、プロセスエレメント#0(2)においてタスク1を実行している間、プロセスエレメント#1(3)に空き時間が生じている。このため、プログラム並列化装置20は、タスクの再分割の処理に入る。
図18は、タスクの再分割の処理を示すフローチャートである。
タスクの再分割では、空き時間の時刻とその時刻に空き時間を持つPEの数を求める(ステップST31)。その後、同時刻において処理を分割可能なタスクが存在するかを確認する(ステップST32)。ここで、タスク1は処理時間が40のタスクであるが、その処理時間40のうち実行条件判定の処理に30の時間を要するタスクであるとする。
この例では、プロセスエレメント#0(2)で処理時間が40のタスク1の実行を行っている間、プロセスエレメント#1(3)には処理が割り当てられておらず、空き時間がある。このため、30の時間を要するタスク1の実行条件判定を分割することができる。また、分割したタスク1の割当可能なプロセスエレメントは、プロセスエレメント#0(2)とプロセスエレメント#1(3)の二つである。そこで、プロセスエレメント#0(2)上で実行するタスク1の実行条件判定の処理を二つに分割し、それぞれをプロセスエレメント#0(2)とプロセスエレメント#1(3)の二つに割り付ける(ステップST33)。
実行条件判定の処理は、値の比較、論理演算、実行条件を求めるための処理をまとめた関数や、様々な実行条件の論理和や論理積の組み合わせによって構成される。実行条件判定の処理に長い時間を要する場合、個々の実行条件の演算を行った後、これらの実行条件について論理積や論理和を求めている場合がある。このような場合、個々の実行条件を求める処理を複数のプロセスエレメントに割り当てることで並列に処理を行えば、処理時間を短縮できる。
そして、各プロセスエレメントで求めた実行条件の演算結果を、プレディケート値として同期イベントと共に、プレディケート付き同期命令を用いて、他のプロセスエレメントに対して送信する。他のプロセスエレメントからプレディケート付き同期イベントを受信するプロセスエレメントには、プレディケート付き同期イベントの受信命令を追加する。そして、元のプログラムでの論理演算をプレディケートレジスタ間の演算命令に置き換える。
即ち、タスク分割部22は、起動元タスクの同期イベント発行位置にプレディケート付き同期命令を追加し(ステップST34)、起動先の同期イベント待機位置に同期待ち命令を追加する(ステップST35)。そして、同期イベント待ち後に受信したプレディケート値とプレディケートレジスタの値を用いた論理計算命令を追加する(ステップST36)。このようにタスクを再分割したスケジューリング結果を図19に示す。
プレディケートレジスタ間の演算命令とは、そのプロセスエレメントで処理するプログラム用のプレディケート値を保持するプレディケートレジスタと、他のプロセスエレメントからプレディケート付き同期イベントによって受信した、接続先のプレディケート値を格納するプレディケートレジスタ間で論理演算する命令である。この演算結果は、自プロセスエレメントのプレディケート値を格納するプレディケートレジスタに入れる。
以上の構成により、条件実行判定の処理を複数のプロセスエレメントに分割して割り付けて並列実行すると共に、割り当てた実行条件判定の演算結果をプレディケート付き同期命令によって集約し、プレディケートレジスタ間で論理演算を行うことで、実行条件判定処理での実行条件を求めるまでの処理時間を短縮することができる。
次に、実施の形態4の並列処理装置の動作を、図19に示すスケジューリング結果のプログラムを例として説明する。
並列処理装置のプロセスエレメント#0(2)は、分割されたタスク1−1を実行する。ここで、タスク1−1は、タスク1の実行条件判定処理の中の前半の処理である。また、プロセスエレメント#1(3)は、分割されたタスク1−2を実行する。タスク1−2は、タスク1の実行条件判定処理の中の後半の処理である。タスク1−1のプログラムの最後の部分には、プレディケート付きイベントの受信命令と、通知されるプレディケート値と自プロセスエレメントのプレディケート値との間で論理演算を行う命令が追加されている。また、タスク1−2のプログラムの最後の部分には、プレディケート付き同期イベントの送信命令が追加されている。
プロセスエレメント#0(2)上のタスク1−1が、プロセスエレメント#1(3)上のタスク1−2より先に終了すると、タスク1−2からのプレディケート付き同期イベントの待機状態となる。即ち、プロセスエレメント#0(2)の同期機構54に待機命令を格納する。そして、プロセスエレメント#1(3)上のタスク1−2の処理を終了した時点で、命令実行部53は、プレディケート付き同期イベントをプロセスエレメント#0(2)の同期機構54に対して送信する。このタスク1−2からのプレディケート付き同期イベントを受信することで、プロセスエレメント#0(2)の命令実行部53は、プレディケート間の演算を行う。
一方、プロセスエレメント#1(3)のタスク1−2が、プロセスエレメント#0(2)のタスク1−1より先に終了した場合は、終了時点でのプロセスエレメント#1(3)のプレディケート値を、プロセスエレメント#0(2)のプレディケート受信レジスタ52に対して、プレディケート付き同期イベントによって通知する。そして、プロセスエレメント#1(3)の命令実行部53は、タスク3のプログラムを読み出し、実行を開始する。ここで、タスク3の先頭には、プロセスエレメント#0(2)からの同期イベントの受信命令であるため、プロセスエレメント#0(2)からの同期イベントを待機する。
プロセスエレメント#0(2)では、タスク1−1の処理の最後で、プレディケート付き同期イベントの受信命令を実行する。このとき、対象となる同期イベントは既にプロセスエレメント#1(3)から受信している。そのため、プロセスエレメント#0(2)の命令実行部53では、自プロセスエレメント#0(2)のプレディケートレジスタ51と、同期イベントと共に受信しプレディケート受信レジスタ52に格納されているプロセスエレメント#1(3)のプレディケート値を用いて、タスク1の実行条件判定の全体のプレディケート値を演算によって求める。
プロセスエレメント#0(2)の命令実行部53では、複数のプロセスエレメント上で並列に演算した実行条件判定の結果を、プレディケート付き同期命令によって集約し、プレディケート受信レジスタ52とプレディケートレジスタ51間で演算を行い、実行条件判定部分のプレディケート値を求める。このプレディケートレジスタの真偽値に基づいて、タスク1−3の処理を行う。
プロセスエレメント#0(2)の命令実行部53は、タスク1−3の実行を終えると、プロセスエレメント#1(3)上のタスク3に対して同期イベントを発行する。また、タスク2の処理を開始する。このとき、同期イベントを受信したプロセスエレメント#1(3)では、タスク3の処理を開始し、タスク2とタスク3の処理を並行して行う。
以上の流れを図20〜図22を用いて説明する。
図20は、実施の形態4におけるタスク1の分割前のプログラムの概要を示す説明図である。この図20の処理Eの実行条件の判定処理において、論理和の部分で分割したものが、図21と図22である。この例では、図21の処理をプロセスエレメント#0(2)に、図22の処理をプロセスエレメント#1(3)に割り付けた例を示している。
図21に示すプログラムは、条件Aと条件Bの論理積をプレディケートレジスタ51に格納し、プロセスエレメント#1(3)からのプレディケート値の受信を待機することを示している。プロセスエレメント#0(2)は、プレディケート付き同期イベントを受信すると、そのプレディケート受信レジスタ52に格納された値と、自身のプレディケートレジスタ51の論理和を取ってプレディケートレジスタ51に格納する。そして、処理Eは、そのプレディケートレジスタ51の真偽値に基づいて、処理を実行する。その後、図16に示したタスクの先行関係に基づいて、タスク3を起動するために同期イベントをプロセスエレメント#1(3)に対して送信する。その後、タスク2の処理に進む。
一方、図22に示すプログラムは、条件Cと条件Dの論理積をプレディケートレジスタ51に格納し、そのプレディケート値を同期イベントと共にプロセスエレメント#0(2)に送信することを示している。その後、プロセスエレメント#1(3)に割り当てられたタスク3の実行を開始するための同期イベントを待機する。
このような処理を行うことにより、タスク1の分割前の図17に示すスケジューリングでは61の時間がかかっていたプログラムの処理時間は、実行条件判定の処理の並列化によって、図19に示すように48に短縮される。
以上のように、実施の形態4のプログラム並列化装置によれば、プログラムを、実施の形態4の並列処理装置における複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、プログラムに含まれるデータの依存関係を解析する解析部と、解析部の解析結果に基づいて、プログラムを複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、分割したタスクを、複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、スケジューリング部でスケジューリングを行った結果、スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、タスク分割部がタスクの実行条件の判定処理を複数のプロセスエレメントに対応して複数のタスクへ再分割すると共に、コード生成部が、分割したタスクの実行条件の判定処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するようにしたので、並列処理装置におけるプログラムの実行効率を改善し、最大実行時間を短縮することができる。

この発明の実施の形態1による並列処理装置を示す構成図である。 この発明の実施の形態1によるプログラム並列化装置を示す構成図である。 この発明の実施の形態1におけるタスクの先行関係を示す説明図である。 この発明の実施の形態1によるプログラム並列化装置の動作を示すフローチャートである。 この発明の実施の形態1におけるタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態1によるプログラム並列化装置のタスクの再分割処理を示すフローチャートである。 この発明の実施の形態1におけるタスク再分割後のタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態2におけるタスクの先行関係を示す説明図である。 この発明の実施の形態2におけるタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態2におけるタスク再分割後のタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態3におけるタスクの先行関係を示す説明図である。 この発明の実施の形態3におけるタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態3におけるタスク再分割後のタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態3によるプログラム並列化装置のタスクの分割処理を示すフローチャートである。 この発明の実施の形態4による並列処理装置のプロセスエレメントを示す構成図である。 この発明の実施の形態4におけるタスクの先行関係を示す説明図である。 この発明の実施の形態4におけるタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態4によるプログラム並列化装置のタスクの再分割処理を示すフローチャートである。 この発明の実施の形態4におけるタスク再分割後のタスク構成をプロセスエレメントに割り付けた状態を示す説明図である。 この発明の実施の形態4における分割前のプログラムを示す説明図である。 この発明の実施の形態4における分割後のプログラムを一方のプロセスエレメントに割り付けた場合のプログラムを示す説明図である。 この発明の実施の形態4における分割後のプログラムを他方のプロセスエレメントに割り付けた場合のプログラムを示す説明図である。
符号の説明
1 プロセッサ、2,3,50 プロセスエレメント、4 内蔵メモリ、5 外部メモリ、6 バス、7,12,51 プレディケートレジスタ、8,11,52 プレディケート受信レジスタ、9,13,53 命令実行部、10,14,54 同期機構、20 プログラム並列化装置、21 解析部、22 タスク分割部、23 スケジューリング部、24 コード生成部、30 プログラム、31 マシンコード。

Claims (3)

  1. 複数のプロセスエレメントを備え、これら複数のプロセスエレメントで、実行条件と当該実行条件下での処理内容の対で構成されるタスクの並列処理を行う並列処理装置において、
    前記各プロセスエレメントは、
    次の命令を実行するか否かを決定するための真偽値を格納するプレディケートレジスタと、
    他のプロセスエレメントから受信した次の命令を実行するか否かを決定するための真偽値が付いたプレディケート付き同期イベントを格納するプレディケート受信レジスタと、
    タスクの実行条件判定結果を他のプロセスエレメントで実行されるタスクに対して通知するタスクを実行する場合は、前記プレディケートレジスタの真偽値が付いたプレディケート付き同期イベントを前記他のプロセスエレメントに通知し、他のプロセスエレメントで実行されるタスクの実行条件判定結果に基づいて実行されるタスクを実行する場合は、前記プレディケート付き同期イベントの受信レジスタの真偽値に基づいて当該自身のタスクを実行する命令実行部とを備えた並列処理装置に対して、プログラムを前記複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、
    プログラムに含まれるデータの依存関係を解析する解析部と、
    前記解析部の解析結果に基づいて、前記プログラムを前記複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、
    前記分割したタスクを、前記複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、
    スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して前記各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、
    前記スケジューリング部でスケジューリングを行った結果、前記スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、前記タスク分割部がタスクの処理を前記複数のプロセスエレメントに対応して一つのタスクを複数のタスクへ再分割すると共に、前記コード生成部が、当該分割したタスクの処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するプログラム並列化装置。
  2. 複数のプロセスエレメントを備え、これら複数のプロセスエレメントで、実行条件と当該実行条件下での処理内容の対で構成されるタスクの並列処理を行う並列処理装置において、
    前記各プロセスエレメントは、
    次の命令を実行するか否かを決定するための真偽値を格納するプレディケートレジスタと、
    他のプロセスエレメントから受信した次の命令を実行するか否かを決定するための真偽値が付いたプレディケート付き同期イベントを格納するプレディケート受信レジスタと、
    タスクの実行条件判定結果を他のプロセスエレメントで実行されるタスクに対して通知するタスクを実行する場合は、前記プレディケートレジスタの真偽値が付いたプレディケート付き同期イベントを前記他のプロセスエレメントに通知し、他のプロセスエレメントで実行されるタスクの実行条件判定結果に基づいて実行されるタスクを実行する場合は、前記プレディケート付き同期イベントの受信レジスタの真偽値に基づいて当該自身のタスクを実行する命令実行部とを備えた並列処理装置に対して、プログラムを前記複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、
    プログラムに含まれるデータの依存関係を解析する解析部と、
    前記解析部の解析結果に基づいて、前記プログラムを前記複数のプロセスエレメントに対応したタスクに分割すると共に、データ依存の関係において後続のタスクが所定の個数以上の対象タスクがあった場合は、前記所定の個数以上の後続タスクを持つある一つのタスクの処理内容を更に分割して、実行条件と分割された処理内容を持つタスクと、分割された残りの一つ若しくは複数の処理内容へ分け、前記実行条件と分割された処理内容を持つタスクの実行条件が確定した後に、前記実行条件の値を受け渡すプレディケート付き同期イベントの送信処理を追加し、残りの前記分割された処理内容のそれぞれの先頭に、プレディケート付き同期イベントの受信処理を追加して、並列に実行可能な前記分割された処理内容を持つタスクと前記分割された一つ若しくは複数の処理内容へ分割するタスク分割部と、
    前記タスク分割部で分割したタスクを、前記複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、
    スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して前記各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、
    前記スケジューリング部でスケジューリングを行った結果、前記スケジューリング部が処理時間の短縮が可能と判断した場合は、前記タスク分割部が前記対象タスクの分割を行うプログラム並列化装置。
  3. 複数のプロセスエレメントを備え、これら複数のプロセスエレメントで、実行条件と当該実行条件下での処理内容の対で構成されるタスクの並列処理を行う並列処理装置において、
    前記各プロセスエレメントは、
    次の命令を実行するか否かを決定するための真偽値を格納するプレディケートレジスタと、
    他のプロセスエレメントから受信した次の命令を実行するか否かを決定するための真偽値が付いたプレディケート付き同期イベントを格納するプレディケート受信レジスタと、
    タスクの実行条件判定結果を他のプロセスエレメントで実行されるタスクに対して通知するタスクを実行する場合は、前記プレディケートレジスタの真偽値が付いたプレディケート付き同期イベントを前記他のプロセスエレメントに通知し、他のプロセスエレメントで実行されるタスクの実行条件判定結果に基づいて実行されるタスクを実行する場合は、前記プレディケート付き同期イベントの受信レジスタの真偽値に基づいて当該自身のタスクを実行する命令実行部とを備えた並列処理装置に対して、プログラムを前記複数のプロセスエレメント上で並列に実行するタスクに分割するプログラム並列化装置であって、
    プログラムに含まれるデータの依存関係を解析する解析部と、
    前記解析部の解析結果に基づいて、前記プログラムを前記複数のプロセスエレメントに対応したタスクに分割するタスク分割部と、
    前記分割したタスクを、前記複数のプロセスエレメントで実行するためのスケジューリングを行うスケジューリング部と、
    スケジューリングされた各プロセスエレメント毎のタスクを、データの依存関係に応じた同期命令を付加して前記各プロセスエレメントの実行形式のコードとして生成するコード生成部とを備え、
    前記スケジューリング部でスケジューリングを行った結果、前記スケジューリング部がいずれかのプロセスエレメントで、タスク実行の空き時間が存在すると判断した場合は、前記タスク分割部がタスクの実行条件の判定処理を前記複数のプロセスエレメントに対応して複数のタスクへ再分割すると共に、前記コード生成部が、当該分割したタスクの実行条件の判定処理を同期させるためのプレディケート付き同期イベントの受け渡しを行う命令を付加するプログラム並列化装置。
JP2007330336A 2007-12-21 2007-12-21 プログラム並列化装置 Expired - Fee Related JP5036523B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007330336A JP5036523B2 (ja) 2007-12-21 2007-12-21 プログラム並列化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007330336A JP5036523B2 (ja) 2007-12-21 2007-12-21 プログラム並列化装置

Publications (2)

Publication Number Publication Date
JP2009151645A JP2009151645A (ja) 2009-07-09
JP5036523B2 true JP5036523B2 (ja) 2012-09-26

Family

ID=40920718

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007330336A Expired - Fee Related JP5036523B2 (ja) 2007-12-21 2007-12-21 プログラム並列化装置

Country Status (1)

Country Link
JP (1) JP5036523B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024030705A1 (en) * 2022-08-02 2024-02-08 Qualcomm Incorporated Reordering workloads to improve concurrency across threads in processor-based devices

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9043401B2 (en) 2009-10-08 2015-05-26 Ebay Inc. Systems and methods to process a request received at an application program interface
JP5178852B2 (ja) * 2011-01-12 2013-04-10 株式会社東芝 情報処理装置およびプログラム
JP6428476B2 (ja) * 2015-05-14 2018-11-28 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ
JP6558310B2 (ja) * 2016-06-13 2019-08-14 株式会社デンソー 並列化方法、並列化ツール
US10656964B2 (en) * 2017-05-16 2020-05-19 Oracle International Corporation Dynamic parallelization of a calculation process
JP7385989B2 (ja) * 2018-12-12 2023-11-24 日立Astemo株式会社 演算制御装置
WO2020194402A1 (ja) * 2019-03-22 2020-10-01 三菱電機株式会社 情報処理装置、計算機、計算機システム、情報処理方法及び情報処理プログラム
CN114270307A (zh) * 2019-08-22 2022-04-01 谷歌有限责任公司 用于同步处理器的分片
DE112019007851T5 (de) * 2019-12-12 2022-10-27 Mitsubishi Electric Corporation Datenverarbeitungsausführungseinrichtung, Datenverarbeitungsausführungsverfahren und Datenverarbeitungsausführungsprogramm
JP2024127077A (ja) * 2023-03-08 2024-09-20 富士通株式会社 演算処理装置及び演算処理方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62295162A (ja) * 1986-06-14 1987-12-22 Agency Of Ind Science & Technol マルチプロセツサシステム
JP3039953B2 (ja) * 1989-04-28 2000-05-08 株式会社日立製作所 並列化装置
JP2004310651A (ja) * 2003-04-10 2004-11-04 Fujitsu Ltd コスト解析に基づいてループの自動並列化処理を行う情報処理装置
JP3938387B2 (ja) * 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
WO2007105309A1 (ja) * 2006-03-14 2007-09-20 Fujitsu Limited 並列化プログラム生成プログラム、並列化プログラム生成装置、及び並列化プログラム生成方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024030705A1 (en) * 2022-08-02 2024-02-08 Qualcomm Incorporated Reordering workloads to improve concurrency across threads in processor-based devices

Also Published As

Publication number Publication date
JP2009151645A (ja) 2009-07-09

Similar Documents

Publication Publication Date Title
JP5036523B2 (ja) プログラム並列化装置
US10095657B2 (en) Processor, accelerator, and direct memory access controller within a core reading/writing local synchronization flag area for parallel
US5408658A (en) Self-scheduling parallel computer system and method
US20090254892A1 (en) Compiling method and compiler
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
JPH1027108A (ja) スレッド実行方法
JP2007328415A (ja) ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US8359588B2 (en) Reducing inter-task latency in a multiprocessor system
JP2008500627A (ja) 信号処理装置
JP2008158759A (ja) プログラミング方法、プログラム処理方法、処理プログラム及び情報処理装置
CN115061803A (zh) 一种多核处理系统及其任务调度方法、芯片、存储介质
EP2799986B1 (en) Apparatus and method for translating multithread program code
US8196146B2 (en) Information processing apparatus, parallel processing optimization method, and program
JP4168281B2 (ja) 並列処理システム、インタコネクションネットワーク、ノード及びネットワーク制御プログラム
US20080271041A1 (en) Program processing method and information processing apparatus
Kitagawa et al. DAG scheduling algorithm for a cluster-based many-core architecture
WO2024109312A1 (zh) 任务调度执行方法、任务调度执行指令的生成方法及装置
JPH09293057A (ja) 階層構造型マルチプロセッサシステムにおけるタスク割り当て方法
US11822960B2 (en) Cascading of graph streaming processors
WO2019188175A1 (ja) デッドロック回避方法、デッドロック回避装置
JP2000020482A (ja) ループ並列化方法
US20140223419A1 (en) Compiler, object code generation method, information processing apparatus, and information processing method
US20100223596A1 (en) Data processing device and method
US20240045737A1 (en) Information processing method and information processing apparatus
JP5315703B2 (ja) 並列化プログラム生成方法、並列化プログラム生成プログラム、及び並列化プログラム生成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110208

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110404

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111213

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120208

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

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

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

Free format text: PAYMENT UNTIL: 20150713

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees