JP6488953B2 - 並列化方法、並列化ツール、車載装置 - Google Patents

並列化方法、並列化ツール、車載装置 Download PDF

Info

Publication number
JP6488953B2
JP6488953B2 JP2015180000A JP2015180000A JP6488953B2 JP 6488953 B2 JP6488953 B2 JP 6488953B2 JP 2015180000 A JP2015180000 A JP 2015180000A JP 2015180000 A JP2015180000 A JP 2015180000A JP 6488953 B2 JP6488953 B2 JP 6488953B2
Authority
JP
Japan
Prior art keywords
core
execution
storage
executed
storing
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.)
Active
Application number
JP2015180000A
Other languages
English (en)
Other versions
JP2017054447A (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.)
Denso Corp
Original Assignee
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 Denso Corp filed Critical Denso Corp
Priority to JP2015180000A priority Critical patent/JP6488953B2/ja
Priority to DE102016216298.5A priority patent/DE102016216298A1/de
Publication of JP2017054447A publication Critical patent/JP2017054447A/ja
Application granted granted Critical
Publication of JP6488953B2 publication Critical patent/JP6488953B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition

Description

本発明は、シングルコアマイコン用のプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成されたマルチコアマイコン用のプログラムを実装した車載装置に関する。
従来、シングルコアマイコン用にプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法の一例として特許文献1に開示された並列化コンパイル方法がある。
この並列化コンパイル方法では、シングルプロセッサシステムにより実行される組込みシステム用の逐次プログラムを複数のマクロタスクに分割した後、制御依存性を有するマクロタスクを一つのマクロタスクに融合する。その後、並列化コンパイル方法では、データ依存性に基づき並列実行可能なマクロタスクを抽出すると共に、スタティックスケジューリングを行い、並列プログラムを生成する。
特開2015−1807号公報
ところで、並列化方法では、並列化解析後、各コアへの通常処理の割り付けと、演算順序を維持するための同期処理を挿入することが考えられる。この同期処理としては、通常処理が完了したことを示す変数をセットする状態セットと、他コアにおいて変数がセットされることを待って自コアの通常処理に移行する待ち処理とを含む。
しかしながら、この変数は、ノイズなどによって、意図せず変わってしまうことも考えられる。このように変数が変わってしまった場合、マルチコアマイコンでは、少なくとも一つのコアにおいて、待ち処理が継続して、通常処理が実行できないデッドロック状態となるという問題がある。
本発明は、上記問題点に鑑みなされたものであり、デッドロックからの復帰を早めることができる並列化方法、並列化ツール、車載装置を提供することを目的とする。
上記目的を達成するために本発明は、
一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)から複数のコアを有するマルチコアマイコン用に並列化した並列プログラムを生成する並列化方法であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に、完了状態の記憶処理を並列プログラムに挿入する記憶処理挿入手順(S11)と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を並列プログラムに挿入する待ち処理挿入手順(S12)と、
記憶処理を実行したコアに対して、記憶処理を実行したコアが先行処理後に実行した、先行処理及び後行処理のいずれでもない処理が完了すると、記憶処理を再度実行させる再記憶処理を並列プログラムに挿入する再記憶処理挿入手順(S13)と、を有することを特徴とする。
このように、本発明は、先行処理の実行が完了した際に、完了状態の記憶処理を並列プログラムに挿入するとともに、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を並列プログラムに挿入する。このため、本発明は、異なるコアに割り振られた先行処理と後行処理の実行順序を維持可能な並列プログラムを生成できる。
さらに、本発明は、記憶処理を再度実行させる再記憶処理を並列プログラムに挿入するため、意図せず完了状態が消えた場合であっても、再度完了状態を記憶可能な並列プログラムとすることができる。このため、本発明は、意図せず完了状態が消えて、後行処理の実行に移行できないデッドロックになった場合に、早期にデッドロックから復帰可能な並列プログラムを生成できる。
また、本発明のさらなる特徴は、
一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)から複数のコアを有するマルチコアマイコン用に並列化した並列プログラムを生成する並列化ツールであって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に、完了状態の記憶処理を並列プログラムに挿入する記憶処理挿入ステップ(S11)と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を並列プログラムに挿入する待ち処理挿入ステップ(S12)と、
記憶処理を実行したコアに対して、記憶処理を実行したコアが先行処理後に実行した、先行処理及び後行処理のいずれでもない処理が完了すると、記憶処理を再度実行させる再記憶処理を並列プログラムに挿入する再記憶処理挿入ステップ(S13)と、を有する点になる。
これによって、上記と同様に、早期にデッドロックから復帰可能な並列プログラムを生成できる。
また、本発明のさらなる特徴は、
一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)を複数のコアを有するマルチコアマイコン用に並列化した並列プログラムと、並列プログラムで動作するマルチコアマイコンとを備えた車載装置であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
マルチコアマイコンは、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に、完了状態を記憶する記憶処理(S21)と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理(S31、S43)と、
記憶処理を実行したコアが行う処理であり、記憶処理を実行したコアが先行処理後に実行した、先行処理及び後行処理のいずれでもない処理が完了すると、記憶処理を再度実行する再記憶処理(S32、S42)と、を有する点にある。
これによって、車載装置は、先行処理の実行が完了した際に完了状態を記憶し、完了状態が記憶されるのを待って完了状態が記憶されたことを条件に後行処理の実行に移行するので、異なるコア間で実行順序を維持できる。さらに、車載装置は、記憶処理を実行したコアが行う処理であり、先行処理後に実行した他の処理が完了すると記憶処理を再度実行するため、意図せず完了状態が消えた場合であっても、再度完了状態を記憶できる。このため、車載装置は、意図せず完了状態が消えて、後行処理の実行に移行できないデッドロックになった場合であっても、早期にデッドロックから復帰できる。
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
実施形態における並列化ツールの概略構成を示すブロック図である。 実施形態における車載装置の概略構成を示すブロック図である。 実施形態におけるコンピュータの処理動作を示すフローチャートである。 実施形態における処理実行順と同期ロジックを示す図面である。 実施形態における車載装置の状態セット処理を示すフローチャートである。 実施形態における車載装置の待ち処理を示すフローチャートである。 実施形態における車載装置の正常時の処理動作を示すタイムチャートである。 実施形態における車載装置のノイズ発生時の処理動作を示すタイムチャートである。 比較例における車載装置のノイズ発生時の処理動作を示すタイムチャートである。 変形例1における車載装置の処理動作を示すフローチャートである。 変形例2における処理実行順と同期ロジックを示す図面である。
以下において、図面を参照しながら、発明を実施するための複数の形態を説明する。各形態において、先行する形態で説明した事項に対応する部分には同一の参照符号を付して重複する説明を省略する場合がある。各形態において、構成の一部のみを説明している場合は、構成の他の部分については先行して説明した他の形態を参照し適用することができる。
本実施形態では、一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)を第1コア21cと第2コア21dを有するマルチコアマイコン用に並列化した並列プログラム21a1を生成する例を採用する。なお、並列プログラム21a1を生成する際には、特開2015−1807号公報に記載されているように、シングルプログラムを解析して、複数の処理を第1コア21cと第2コア21dに割り振る処理などを行う。この点に関しては、特開2015−1807号公報を参照されたい。
以下においては、処理を処理ブロックとも称する。本実施形態では、複数の処理ブロックとして、図4に示すように、第1処理ブロックT1〜第14処理ブロックT14を採用する。また、複数の処理ブロックT1〜T14は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。例えば、第1処理ブロックT1と第8処理ブロックT8とは、第1処理ブロックT1が先行処理であり、第8処理ブロックT8が後行処理である。また、第3処理ブロックT3と第8処理ブロックT8とは、第8処理ブロックT8が先行処理であり、第3処理ブロックT3が後行処理である。
まず、コンピュータ10と、車載装置20の構成に関して説明する。コンピュータ10は、並列化手順を実行する並列化ツールに相当する。図1に示すように、コンピュータ10は、ディスプレイ11、HDD12、CPU13、ROM14、RAM15、入力装置16、読取部17などを備えて構成されている。また、コンピュータ10は、記憶媒体18に記憶された記憶内容を読み取り可能に構成されている。なお、HDDは、hard disk driveの略称である。CPUは、Central Processing Unitの略称である。ROMは、Read Only Memoryの略称である。RAMは、Random Access Memoryの略称である。コンピュータ10及び記憶媒体18の構成は、特開2015−1807号公報に記載されたパーソナルコンピュータ100及び記憶媒体180を参照されたい。
自動並列化コンパイラ1は、並列化方法に相当する。つまり、自動並列化コンパイラ1は、並列化方法が記述されたプログラムである。自動並列化コンパイラ1は、特開2015−1807号公報に記載されたものに加えて、状態セット処理の挿入手順、待ち処理の挿入手順、再状態セット処理の挿入手順を含んでいる。
状態セット処理の挿入手順は、コア21c,21d間で実行順序を維持するために、先行処理の実行が完了した際に、完了状態を記憶する状態セット処理F1〜F9を並列プログラム21a1に挿入する手順である。つまり、状態セット処理の挿入手順は、コア21c,21dが先行処理の実行を完了した際に、コア21c,21dに状態セット処理を実行せるためである。
ここでは、完了状態の記憶方法として状態フラグA1、A3、A4、A13、B1、B10、B11、B12、B14を採用している。各状態フラグは、1がセットされている場合に完了状態を示し、1がセットされていない場合、すなわち0の場合に完了状態でないことを示す。このため、車載装置20は、複数の先行処理の夫々に対応して状態フラグをセットできるように構成されている。この状態セット処理の挿入手順は、記憶処理挿入手順に相当する。また、状態セット処理は、完了状態の記憶処理に相当する。
待ち処理の挿入手順は、コア21c,21d間で実行順序を維持するために、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させる待ち処理W1〜W9を並列プログラム21a1に挿入する手順である。よって、待ち処理W1〜W9の挿入手順は、先行処理が完了するのを待って、先行処理が完了したことを条件に後行処理の実行に移行させる待ち処理W1〜W9を挿入する手順と言える。つまり、待ち処理W1〜W9の挿入手順は、コア21c,21dに対して、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させるためである。この待ち処理W1〜W9の挿入手順は、待ち処理挿入手順に相当する。
再状態セット処理の挿入手順は、状態セット処理を実行したコア21c,21dに対して、先行処理後に実行した他の処理ブロックが完了すると、状態セット処理を再度実行させる再状態セット処理W1〜W9を、並列プログラム21a1に挿入する手順である。つまり、再状態セット処理の挿入手順は、状態セット処理を実行したコア21c,21dに対して、先行処理後に実行した他の処理ブロックが完了すると、状態セット処理を再度実行させるためである。この再状態セット処理の挿入手順は、再記憶処理挿入手順に相当する。
また、本実施形態では、全コアの処理を同時に完了させるための同期処理として、並列プログラム21a1の最後に、状態セット処理と待ち処理を挿入する手順を有した自動並列化コンパイラ1を採用している。一例として、自動並列化コンパイラ1では、図4に示すように、状態セット処理F4と待ち処理W5、及び状態セット処理F9と待ち処理W9を挿入する手順を採用している。これによって、自動並列化コンパイラ1は、第1コア21cと第2コア21dが同時に処理を完了可能な並列プログラム21a1を生成できる。
なお、本実施形態では、状態セット処理を実行したコア21c,21dが他の処理ブロックが完了した後に待ち処理W1〜W9を実行する例を採用している。さらに、本実施形態では、状態セット処理を実行したコア21c,21dによる待ち処理W1〜W9中に実行される再状態セット処理を挿入する再状態セット処理の挿入手順を採用している。よって、本実施形態では、待ち処理と再記憶処理とに同じ符号W1〜W9を付与している。しかしながら、本発明はこれに限定されない。並列化方法は、状態セット処理F1〜F9後に実行される再状態セット処理を挿入する再状態セット処理の挿入手順であってもよい。
車載装置20は、図2に示すように、マルチコアプロセッサ21、ROM21a、RAM21b、第1コア21c、第2コア21d、通信部22、センサ部23、入出力ポート24を備えて構成されている。車載装置20は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載装置20をエンジン制御装置に適用した例を採用する。この場合、並列プログラム21a1は、エンジン制御などの自動車制御プログラムと言える。なお、マルチコアプロセッサは、マルチコアマイコンに相当する。また、コアは、プロセッサエレメントとも称することができる。
RAM21b、通信部22、センサ部23、入出力ポート24は、特開2015−1807号公報に記載されたRAM420.通信部430、センサ部450、入出力ポート460を参照されたい。
ROM21aには、並列化方法で生成された並列プログラム21a1が記憶されている。第1コア21cと第2コア21dは、並列プログラム21a1を実行することで、エンジン制御を行う。
次に、図3、図4を用いて、コンピュータ10の処理動作に関して説明する。CPU13は、入力装置16によって挿入処理の実行指示がなされた場合に、図3に示すフローチャートを実行する。CPU13は、自動並列化コンパイラ1を実行することで、シングルプログラムから並列プログラム21a1を生成する。CPU13は、特開2015−1807号公報に記載された手順に従って並列プログラム21a1を生成する際に、下記のステップS11〜S13を実行する。
ステップS11では、状態セット処理の挿入ステップを行う(記憶処理挿入ステップ)。CPU13は、自動並列化コンパイラ1における状態セット処理の挿入手順を実行する。つまり、CPU13は、状態セット処理F1〜F9を並列プログラム21a1に挿入する。本実施形態では、図4に示すように、例えば、第1処理ブロックT1の後に状態セット処理F1、第8処理ブロックT8の後に状態セット処理F8を挿入する。このように、ステップS11は、状態セット処理の挿入手順を実行する処理であるため、記憶処理挿入手順とも言える。
ステップS12では、待ち処理の挿入ステップを行う(待ち処理挿入ステップ)。CPU13は、自動並列化コンパイラ1における待ち処理の挿入手順を実行する。つまり、CPU13は、待ち処理W1〜W9を並列プログラム21a1に挿入する。本実施形態では、図4に示すように、例えば、第8処理ブロックT8の前に待ち処理W6、第3処理ブロックT3の前に待ち処理W1を挿入する。このように、ステップS12は、待ち処理の挿入手順を実行する処理であるため、待ち処理挿入手順とも言える。
ステップS13では、再状態セット処理の挿入ステップを行う(再記憶処理挿入ステップ)。CPU13は、自動並列化コンパイラ1における再状態セット処理の挿入手順を実行する。つまり、CPU13は、再状態セット処理を並列プログラム21a1に挿入する。このように、ステップS13は、再状態セット処理の挿入手順を実行する処理であるため、再記憶処理挿入手順とも言える。
また、本実施形態では、全コアの処理を同時に完了させるための同期処理として、並列プログラム21a1の最後に、状態セット処理と待ち処理を挿入するコンピュータ10を採用している。一例として、コンピュータ10は、図4に示すように、状態セット処理F4と待ち処理W5、及び状態セット処理F9と待ち処理W9を挿入する。これによって、コンピュータ10は、第1コア21cと第2コア21dgが同時に処理を完了可能な並列プログラム21a1を生成できる。
本実施形態では、待ち処理中に実行される再状態セット処理を挿入する例を採用している。このため、本実施形態では、図4に示すように、例えば、第8処理ブロックT8の前に再状態セット処理を含む待ち処理W6、第3処理ブロックT3の前に再状態セット処理を含む待ち処理W1を挿入する。本実施形態では、例えば図4の第3処理ブロックの前に挿入しているdo{A1=1}while(B8=0)のように、再状態セット処理を含む待ち処理をdo-while文で表している。この場合、第1コア21cは、状態フラグB8が0の間は1がセットされるのを待つとともに状態フラグA1に1をセットし、状態フラグB8に1がセットされたことを条件に第3処理ブロックT3の実行に移行させる。このように、コンピュータ10は、待ち処理W1〜W9中に実行される再状態セット処理を並列プログラム21a1に挿入するため、再状態セット処理によるオーヘッドを小さくできる並列プログラム21a1を生成できる。また、本実施形態の並列化方法は同様の効果を奏することができる。
なお、本発明はこれに限定されない。コンピュータ10は、状態セット処理F1〜F9後に実行される再状態セット処理を挿入してもよい。
このように、本実施形態では、コンピュータ10が、特開2015−1807号公報に記載された並列化方法に加えて、ステップS13を実行することで、並列プログラム21a1を生成する。しかしながら、本発明はこれに限定されない。作業者などが、特開2015−1807号公報に記載された並列化方法に加えて、ステップS13を行うことで、並列プログラム21a1を生成してもよい。
このようにして生成された並列プログラム21a1の一例を図4に示す。この例では、第1コア21cに第1処理ブロックT1〜第6処理ブロックT6、第13処理ブロックT13が割り振られており、第2コア21dに第7処理ブロックT7〜第12処理ブロックT12、第14処理ブロックT14が割り振られている。また、並列プログラム21a1では、第1処理ブロックT1や第8処理ブロックT8の後に、状態セット処理F1、F5が挿入されている。さらに、並列プログラム21a1では、第3処理ブロックT3や第8処理ブロックT8の前に、再状態セット処理を含む待ち処理W1、W6が挿入されている。
以上のように、コンピュータ10は、先行処理の実行が完了した際に、状態セット処理を並列プログラム21a1に挿入するとともに、状態フラグに1が記憶されたことを条件に後行処理の実行に移行させる待ち処理を並列プログラム21a1に挿入する。このため、コンピュータ10は、第1コア21cと第2コア21dに割り振られた先行処理と後行処理の実行順序を維持可能な並列プログラム21a1を生成できる。
さらに、コンピュータ10は、状態セット処理を再度実行させる再状態セット処理を並列プログラム21a1に挿入するため、意図せず状態フラグの値が消えた場合であっても、再度状態フラグに1をセット可能な並列プログラムとすることができる。このため、コンピュータ10は、意図せず状態フラグの値が消えて、後行処理の実行に移行できないデッドロックになった場合に、早期にデッドロックから復帰可能な並列プログラム21a1を生成できる。
また、コンピュータ10は、待ち処理中に実行される再状態セット処理を並列プログラム21a1に挿入するため、再状態セット処理によるオーヘッドを小さくできる並列プログラムを生成できる。なお、自動並列化コンパイラ1は、コンピュータ10と同様の効果を奏することができる。
次に、図4に加えて、図5〜図9を用いて、第1コア21c及び第2コア21dの処理動作に関して説明する。
第1コア21cと第2コア21dは、図4の並列プログラム21a1における自身に割り振られた処理を上から順番に実行すると同時に、コア間で順序を守るべく同期をとって処理を実行していく。つまり、第1コア21cは、処理実行のトリガに応じて、第1処理ブロックT1から順番に処理を実行する。一方、第2コア21dは、処理実行のトリガに応じて、第7処理ブロックT7から順番に処理を実行する。
また、第1コア21cと第2コア21dは、図5に示すように、処理ブロックの実行が完了して状態セット処理を実行する際には、状態フラグをセットする(ステップS21)。つまり、第1コア21cと第2コア21dは、処理ブロックの実行が完了したことを記憶するために、状態フラグに1をセットする。例えば、第1コア21cは、図4、図7に示すように、第1処理ブロックT1の実行が完了すると、タイミングtm1で状態セット処理F1を実行して状態フラグA1に1をセットする。第2コア21dは、第8処理ブロックT8の実行が完了すると、タイミングtm4で状態セット処理F5を実行して状態フラグB8に1をセットする。各処理ブロックと各状態フラグとは、一対一の対応関係をなしている。よって、第1コア21cと第2コア21dは、複数の処理ブロックT1〜T14のうち、どの処理ブロックの実行が完了しているかを記憶しておくと言える。
この状態セット処理F1〜F9は、第1コア21cと第2コア21d間で実行順序を維持するための処理である。言い換えると、状態セット処理F1〜F9は、第1コア21cと第2コア21dにおける同期のために、処理ブロックの実行が完了したことを記録するブロックである。
よって、第1コア21cと第2コア21dは、相手コアとの間で実行順序を維持するために、先行処理の実行が完了した際に、その先行処理の完了状態を記憶する。第1コア21cは、自身に割り振られた先行処理の後に、第2コア21dに割り振られた後行処理が実行されるように、状態セット処理を実行する。また、第1コア21cは、自身に割り振られた先行処理の実行が完了したことを、後行処理が割り振られた第2コア21dに知らせるために、状態セット処理を実行すると言える。例えば、第1コア21cは、自身に割り振られた第1処理ブロックT1の後に、第2コア21dに割り振られた第8処理ブロックT8が実行されるように、状態セット処理F1を実行する。
同様に、第2コア21dは、自身に割り振られた先行処理の後に、第2コア21dに割り振られた後行処理が実行されるように、状態セット処理を実行する。また、第2コア21dは、自身に割り振られた先行処理の実行が完了したことを、後行処理が割り振られた第1コア21cに知らせるために、状態セット処理を実行すると言える。例えば、第2コア21dは、自身に割り振られた第8処理ブロックT8の後に、第1コア21cに割り振られた第3処理ブロックT3が実行されるように、状態セット処理F5を実行する。
また、第1コア21cと第2コア21dは、待ち処理を実行する際、図6に示すフローチャートを実行する。ステップS32では、先行処理の状態フラグが0であるか否かを判定する。第1コア21cと第2コア21dは、先行処理の状態フラグが0と判定した場合、ステップS31へ進み、先行処理の状態フラグが1と判定した場合、図6の処理を終了する。
第1コア21cと第2コア21dは、先行処理の状態フラグが1と判定した場合、次の処理ブロックの実行に移行する。つまり、第1コア21cと第2コア21dは、先行処理の状態フラグが1になるのを待って、後行処理の実行に移行する。例えば、第2コア21dは、図4、図7に示すように、待ち処理W6において、タイミングtm2で状態フラグA1に1がセットされていると判定した場合、第8処理ブロックT8の実行に移行する。また、第1コア21cは、待ち処理W1において、タイミングtm3から状態フラグB8が0であるか否かを判定し、タイミングtm4で状態フラグB8に1がセットされていると判定した場合、第3処理ブロックT3の実行に移行する。
なお、先行処理の状態フラグが1であるか否か、すなわち相手コアの処理ブロックの実行が完了したか否かを確認することを、以下ではポーリングとも称する。また、先行処理の実行が完了したことを待って、後行処理の実行に移行することを、待ち合わせ処理とも称する。また、相手コアの処理ブロックの実行が完了したか否かを確認する方法は、状態フラグの再セットが定期的に実施されればポーリング以外の方法でもよい。
ステップS31では、自身の状態フラグを再セットする。第1コア21cと第2コア21dは、再度、自身の状態フラグに1をセットして、ステップS32へ進む。このように、第1コア21cと第2コア21dは、先行処理の状態フラグが0の間は1がセットされるのを待つとともに、自身がセットした状態フラグに1をセットする。例えば、第1コア21cは、待ち処理W1において、状態フラグB8が0であるタイミングtm3〜tm4の間、状態フラグA1に1をセットする。
なお、図7の例における状態フラグA1は、タイミングtm1で1がセットされてから0になることなく、1が維持されている。つまり、図7は、正常時の状態フラグA1を示している。このように、状態フラグが正常の場合、第1コア21cと第2コア21dは、ステップS31において、1がセットされた状態フラグに再度1をセットすることになる。
しかしながら、状態フラグは、ノイズなどによって値が変わってしまうこともある。つまり、状態フラグは、意図せず完了状態である1が消えて0になってしまうことがある。この点に関して、図9を用いて説明する。比較例の並列プログラムは、ステップS31の処理が含まれておらず、その他の本実施形態と同様である。
比較例の並列プログラムを実行する第1コアは、タイミングtm21で状態フラグA1に1をセットする。しかしながら、状態フラグA1は、タイミングtm22で、ノイズなどによって意図せず1が消えて0となってしまう。
このため、第2コアは、タイミングtm23でポーリングを開始しても、状態フラグA1が0のままなので、第8処理ブロックT8を実行できない。つまり、第2コアは、ポーリングが継続されてデッドロック状態となってしまう。さらに、この比較例では、第2コアが第8処理ブロックT8を実行できないため、状態フラグB8に1がセットされない。このため、第1コアは、タイミングtm24でポーリングを開始しても、状態フラグB8が0のままなので、第3処理ブロックT3を実行できない。つまり、第1コアは、ポーリングが継続されてデッドロック状態となってしまう。
ここで、図8を用いて、状態フラグの値が意図せず変わってしまった場合の第1コア21cと第2コア21dの処理動作に関して説明する。並列プログラム21a1は、再状態セット処理を含む待ち処理W1〜W9を有している。そして、第1コア21cと第2コア21dは、この並列プログラムを実行するため、上記のように、先行処理の状態フラグが0の間は1がセットされるのを待つとともに、自身がセットした状態フラグに1をセットする。
第1コア21cは、タイミングtm11で状態フラグA1に1をセットする。しかしながら、状態フラグA1は、タイミングtm12で、ノイズなどによって意図せず1が消えて0となってしまう。一方、第2コア21dは、タイミングtm13でポーリングを開始する。
この場合、第1コア21cは、タイミングtm14でポーリングを開始する。そして、第1コア21cは、状態フラグB8が0であるため、タイミングtm15以降で、状態フラグA1に1をセットする。これによって、第1コア21cは、ノイズなどで0になった状態フラグA1を再度1に戻すことができる。従って、第2コア21dは、タイミングtm15以降で、第8処理ブロックT8を実行に移行できる。
以上のように、車載装置20の第1コア21cと第2コア21dは、先行処理の実行が完了した際に状態フラグに1をセットし、状態フラグに1がセットされるのを待ち、状態フラグに1がセットされたことを条件に後行処理の実行に移行する。このため、車載装置20は、第1コア21cと第2コア21dとの間で実行順序を維持できる。
さらに、車載装置20の第1コア21cと第2コア21dは、状態セット処理を実行したコアが行う処理であり、先行処理後に実行した他の処理ブロックの実行が完了すると状態セット処理を再度実行する。このため、車載装置20の第1コア21cと第2コア21dは、意図せず状態フラグの値が消えた場合であっても、再度状態フラグに1をセットできる。このため、車載装置20は、意図せず状態フラグの値が消えて、後行処理の実行に移行できないデッドロックになった場合であっても、早期にデッドロックから復帰できる。
また、車載装置20の第1コア21cと第2コア21dは、再状態セット処理を含む待ち処理W1〜W9を実行するため、再状態セット処理によるオーヘッドを小さくできる。つまり、車載装置20の第1コア21cと第2コア21dは、先行処理の実行を待っている間に、すなわち、エンジン制御における有効な演算などを行っていない間に、再状態セット処理を行うため、再状態セット処理によるオーヘッドを小さくできる。
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。以下において、本発明のその他の形態である変形例1、2に関して説明する。上記実施形態及び変形例1、2は、夫々単独で実施することも可能であるが、適宜組み合わせて実施することも可能である。本発明は、実施形態において示された組み合わせに限定されることなく、種々の組み合わせによって実施可能である。
(変形例1)
変形例1の自動並列化コンパイラ1は、異常判断処理を並列プログラム21a1に挿入する異常判断処理挿入手順を有していてもよい。また、変形例1のコンピュータ10は、異常判断処理を並列プログラム21a1に挿入する異常判断処理挿入ステップを有していてもよい。よって、変形例1の第1コア21cと第2コア21dは、異常判断処理を実行することになる。なお、異常判断処理は、判断処理に相当する。
なお、変形例1の異常判断処理は、再状態セット時に、状態フラグが0であるか否かによって、状態フラグに異常が生じているか否かを判断する処理である。つまり、異常判断処理は、再状態セット時に、再状態セット時の状態フラグの値と、再状態セット前の状態フラグの値とを比較し、両値が異なる場合に異常と判断するとも言える。この異常判断処理は、変形例2の異常判断処理とは異なる。なお、ここでは、便宜的に上記実施形態と同じ符号を用いている。
変形例1の第1コア21cと第2コア21dは、待ち処理を実行する際、図10に示すフローチャートを実行する。
ステップS40では、状態フラグのいずれかが0であるか否かを判定する。第1コア21cと第2コア21dは、状態フラグのいずれかが0であると判定した場合、ステップS41へ進み、状態フラグのいずれかが0であると判定しなかった場合、ステップS42へ進む。例えば、第1コア21cは、待ち処理W2を実行する場合、状態フラグA1、A3、A4のいずれかが0と判定した場合はステップS41へ進む。状態フラグA1、A3、A4は、再状態セット時に1がセットされる。よって、状態フラグA1、A3、A4のいずれかが0の場合、再状態セット時の記憶内容と再状態セット前の記憶内容とが異なることになる。
また、第1コア21cは、状態フラグA1、A3、A4の全てが1であると判定した場合はステップS42へ進む。なお、第1コア21cは、待ち処理W1を実行する場合、状態フラグA1が0であるか否かを判定することになる。よって、ステップS40で判定する状態フラグの数は、一つの場合と複数の場合がある。
ステップS41では、異常フラグをセットする。第1コア21cと第2コア21dは、状態フラグが異常であることを記憶するために、異常フラグに1をセットする。異常フラグは、1がセットされている場合に異常状態を示し、1がセットされていない場合、すなわち0の場合に異常状態でないことを示す。
なお、ステップS42は、上記ステップS31と同様である。また、ステップS43は、上記32と同様である。
このように、変形例1の自動並列化コンパイラ1及びコンピュータ10は、判断処理を並列プログラム21a1に挿入するため、意図せず状態フラグの値が消えたか否かを判断可能な並列プログラムを生成できる。また、変形例1の第1コア21cと第2コア21dは、意図せず状態フラグの値が消えたか否か、すなわち状態フラグに異常が生じたか否かを判断できる。
さらに、変形例1の自動並列化コンパイラ1及びコンピュータ10は、異常と判断した場合に異常フラグをセットする処理を並列プログラム21a1に挿入するため、状態フラグに異常が生じたことを記憶可能な並列プログラムを生成できる。また、変形例1の第1コア21cと第2コア21dは、異常と判断した場合に異常フラグをセットするため、状態フラグに異常が生じたことを記憶できる。
(変形例2)
変形例2では、記憶処理R1〜R9の内容、待ち処理の内容、再記憶処理の内容が上記実施形態と異なる。よって、変形例2の自動並列化コンパイラ1は、変形例2における記憶処理、待ち処理、再記憶処理の夫々を並列プログラムに挿入する手順を有している。また、コンピュータ10は、変形例2における記憶処理、待ち処理、再記憶処理の夫々を並列プログラムに挿入するステップを有している。さらに、第1コア21cと第2コア21dは、変形例2における記憶処理、待ち処理、再記憶処理を有した並列プログラムに従って動作する。なお、ここでは、便宜的に上記実施形態と同じ符号を用いている。
変形例2の記憶処理R1〜R9は、第1コア21cと第2コア21d間で実行順序を維持するために、先行処理の実行が完了した際に、RAMにおける状態値A、Bをインクリメントすることで完了状態を記憶する。例えば、第1コア21cは、図11に示すように、第1処理ブロックT1の実行が完了すると、記憶処理R1で状態値Aをインクリメントとし、第3処理ブロックT3の実行が完了すると、記憶処理R2で状態値Aをさらにインクリメントとする。同様に、第2コア21dは、第8処理ブロックT8の実行が完了すると、記憶処理R5で状態値Bをインクリメントとし、第10処理ブロックT10の実行が完了すると、記憶処理R6で状態値Bをさらにインクリメントとする。なお、第1コア21cと第2コア21dは、最初の処理ブロックを実行する前に、RAMの状態値A、Bに初期値を書き込む。例えば、状態値A、Bは、初期値が0で、インクリメントする毎に1、2,3と更新される。また、状態値A、Bの更新方法はインクリメントでなく値の書き込みでもよい。
変形例2の待ち処理WR1〜WR9は、第1コア21cと第2コア21d間で実行順序を維持するために、状態値A、Bがインクリメントされるのを待って、状態値A、Bがインクリメントされたことを条件に後行処理の実行に移行させる。また、変形例2の再記憶処理は、記憶処理を実行した第1コア21cと第2コア21dに対して、先行処理後に実行した他の処理ブロックが完了すると、記憶処理を再度実行させる。なお、変形例2の再記憶処理は、記憶処理を再度実行させるとき、一つ前の値を状態値として書き込ませる。ここでは、再記憶処理を含む待ち処理WR1〜WR9を採用している。
例えば、第1コア21cは、図11の待ち処理WR1で、状態値Bが1より小さい間は1が書き込まれるのを待つとともに状態値Aに一つ前の値1を書き込み、状態値Bが1以上になったことを条件に第3処理ブロックT3の実行に移行させる。同様に、第1コア21cは、待ち処理WR2で、状態値Bが2より小さい間は2が書き込まれるのを待つとともに状態値Aに一つ前の値3を書き込み、状態値Bが2以上になったことを条件に第5処理ブロックT5の実行に移行させる。また、第2コア21dは、待ち処理WR7で、状態値Aが2より小さい間は2が書き込まれるのを待つとともに状態値Bに一つ前の値1を書き込み、状態値Aが2以上になったことを条件に第10処理ブロックT10の実行に移行させる。
なお、変形例2の自動並列化コンパイラ1は、異常判断処理を並列プログラム21a1に挿入する異常判断処理挿入手順を有していてもよい。また、変形例2のコンピュータ10は、異常判断処理を並列プログラム21a1に挿入する異常判断処理挿入ステップを有していてもよい。よって、変形例2の第1コア21cと第2コア21dは、異常判断処理を実行することになる。
変形例2の異常判断処理は、再記憶処理時の状態値が、再記憶処理前の状態値と一緒であるか否かによって、状態値に異常が生じているか否かを判断する処理である。例えば、第1コア21cは、待ち処理WR3で状態値Aとして3を書き込む再に、RAM21bの状態値Aが3でなかった場合、異常と判断する。そして、第1コア21cは、異常と判断した場合、異常フラグに1をセットする。
また、本変形例では、上記実施形態と同様に、同期処理として、並列プログラム21a1の最後に、状態セット処理と待ち処理を挿入する手順を有した自動並列化コンパイラ1を採用している。本変形例では、同期処理として、並列プログラム21a1の最後に、状態セット処理と待ち処理を挿入するコンピュータ10を採用している。同期処理は、記憶処理R4と待ち処理WR5、及び記憶処理R9と待ち処理WR9である。
変形例2の自動並列化コンパイラ1及びコンピュータ10は、変形例1と同様の効果を奏することができる。また、変形例2の第1コア21cと第2コア21dは、変形例1と同様の効果を奏することができる。
1 自動並列化コンパイラ、10 コンピュータ、11 ディスプレイ、12 HDD、13 CPU、14 ROM、15 RAM、16 入力装置、17 読取部、18 記憶媒体、20 車載装置、21 マルチコアプロセッサ、21a ROM、21a1 並列プログラム、21b RAM、21c 第1コア、21d 第2コア、22 通信部、23 センサ部、24 入出力ポート

Claims (9)

  1. コアが一つであるシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)から複数の前記コアを有するマルチコアマイコン用に並列化した並列プログラムを生成する並列化方法であって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、
    前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に、完了状態の記憶処理を前記並列プログラムに挿入する記憶処理挿入手順(S11)と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を前記並列プログラムに挿入する待ち処理挿入手順(S12)と、
    前記記憶処理を実行した前記コアに対して、前記記憶処理を実行した前記コアが前記先行処理後に実行した、前記先行処理及び前記後行処理のいずれでもない前記処理が完了すると、前記記憶処理を再度実行させる再記憶処理を前記並列プログラムに挿入する再記憶処理挿入手順(S13)と、を有することを特徴とする並列化方法。
  2. 前記再記憶処理挿入手順は、前記記憶処理を実行した前記コアが前記先行処理及び前記後行処理のいずれでもない前記処理が完了した後に前記待ち処理を実行する場合、前記記憶処理を実行した前記コアによる前記待ち処理中に実行される前記再記憶処理を挿入することを特徴とする請求項1に記載の並列化方法。
  3. 前記再記憶処理時に、前記再記憶処理時の記憶内容と前記再記憶処理前の記憶内容とを比較し、両記憶内容が異なる場合に異常と判断する判断処理を前記並列プログラムに挿入する判断処理挿入手順を有することを特徴とする請求項1又は2に記載の並列化方法。
  4. コアが一つであるシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)から複数の前記コアを有するマルチコアマイコン用に並列化した並列プログラムを生成する並列化ツールであって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に、完了状態の記憶処理を前記並列プログラムに挿入する記憶処理挿入ステップ(S11)と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を前記並列プログラムに挿入する待ち処理挿入ステップ(S12)と、
    前記記憶処理を実行した前記コアに対して、前記記憶処理を実行した前記コアが前記先行処理後に実行した、前記先行処理及び前記後行処理のいずれでもない前記処理が完了すると、前記記憶処理を再度実行させる再記憶処理を前記並列プログラムに挿入する再記憶処理挿入ステップ(S13)と、を有することを特徴とする並列化ツール。
  5. 前記再記憶処理挿入ステップは、前記記憶処理を実行した前記コアが前記先行処理及び前記後行処理のいずれでもない前記処理が完了した後に前記待ち処理を実行する場合、前記記憶処理を実行した前記コアによる前記待ち処理中に実行される前記再記憶処理を挿入することを特徴とする請求項4に記載の並列化ツール。
  6. 前記再記憶処理時に、前記再記憶処理時の記憶内容と前記再記憶処理前の記憶内容とを比較し、両記憶内容が異なる場合に異常と判断する判断処理を前記並列プログラムに挿入する判断処理挿入ステップを有することを特徴とする請求項4又は5に記載の並列化ツール。
  7. コアが一つであるシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理(T1〜T14)を複数の前記コアを有するマルチコアマイコン用に並列化した並列プログラムと、前記並列プログラムで動作する前記マルチコアマイコンとを備えた車載装置であって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    前記マルチコアマイコンは、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に、完了状態を記憶する記憶処理(S21)と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理(S32、S43)と、
    前記記憶処理を実行した前記コアが行う処理であり、前記記憶処理を実行した前記コアが前記先行処理後に実行した、前記先行処理及び前記後行処理のいずれでもない前記処理が完了すると、前記記憶処理を再度実行する再記憶処理(S31、S42)と、を有することを特徴とする車載装置。
  8. 前記記憶処理を実行した前記コアは、自身が前記先行処理及び前記後行処理のいずれでもない前記処理が完了した後に前記待ち処理を実行する場合、自身による前記待ち処理中に前記再記憶処理を実行することを特徴とする請求項7に記載の車載装置。
  9. 前記マルチコアマイコンは、前記再記憶処理時に、前記再記憶処理時の記憶内容と前記再記憶処理前の記憶内容とを比較し、両記憶内容が異なる場合に異常と判断する判断処理を有することを特徴とする請求項7又は8に記載の車載装置。
JP2015180000A 2015-09-11 2015-09-11 並列化方法、並列化ツール、車載装置 Active JP6488953B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015180000A JP6488953B2 (ja) 2015-09-11 2015-09-11 並列化方法、並列化ツール、車載装置
DE102016216298.5A DE102016216298A1 (de) 2015-09-11 2016-08-30 Parallelisierungsverfahren, parallelisierungstool und an einem fahrzeug befestigte vorrichtung

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015180000A JP6488953B2 (ja) 2015-09-11 2015-09-11 並列化方法、並列化ツール、車載装置

Publications (2)

Publication Number Publication Date
JP2017054447A JP2017054447A (ja) 2017-03-16
JP6488953B2 true JP6488953B2 (ja) 2019-03-27

Family

ID=58160759

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015180000A Active JP6488953B2 (ja) 2015-09-11 2015-09-11 並列化方法、並列化ツール、車載装置

Country Status (2)

Country Link
JP (1) JP6488953B2 (ja)
DE (1) DE102016216298A1 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0646385B2 (ja) * 1985-01-31 1994-06-15 富士重工業株式会社 自動車用コンピユ−タの誤動作防止方法
JP5076342B2 (ja) * 2006-03-28 2012-11-21 トヨタ自動車株式会社 分散制御装置
JP6018022B2 (ja) * 2013-06-14 2016-11-02 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Also Published As

Publication number Publication date
JP2017054447A (ja) 2017-03-16
DE102016216298A1 (de) 2017-03-16

Similar Documents

Publication Publication Date Title
US7844953B2 (en) Program, apparatus and method for verifying program
US8336038B2 (en) System and method for parallel execution of a program
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
EP3343351A1 (en) Parallel program generating method and parallelization compiling apparatus
US10296316B2 (en) Parallelization method, parallelization tool, and in-vehicle apparatus
US8595726B2 (en) Apparatus and method for parallel processing
JP7385989B2 (ja) 演算制御装置
JP6464982B2 (ja) 並列化方法、並列化ツール、車載装置
JP6427055B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP6488953B2 (ja) 並列化方法、並列化ツール、車載装置
WO2022183572A1 (zh) 命令提交方法和装置、命令读取方法和装置、电子设备
JP4840605B2 (ja) Osの起動方法
JP6243266B2 (ja) 電子制御装置及びメモリ診断方法
JP6690570B2 (ja) 並列化方法、並列化ツール、車載制御装置
JP6428557B2 (ja) 並列化方法、並列化ツール
JP2009238176A (ja) 情報処理装置およびプログラムの検証方法
JP6558310B2 (ja) 並列化方法、並列化ツール
JP4952317B2 (ja) 退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置
JP5017396B2 (ja) 情報処理装置およびプログラムの検証方法
WO2021140812A1 (ja) 演算装置及び検査方法
JP2019179412A (ja) デッドロック回避方法、デッドロック回避装置
JP6600888B2 (ja) 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法
JP2018151803A (ja) コンピュータプログラムの検査装置および車両制御用コンピュータプログラムの検査を行う車載装置
WO2021024504A1 (ja) 処理特定装置、方法及びプログラム
JP6221110B2 (ja) 処理装置におけるエラーを判定及び解決する装置及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180620

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

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190211

R151 Written notification of patent or utility model registration

Ref document number: 6488953

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

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