JP6558310B2 - 並列化方法、並列化ツール - Google Patents

並列化方法、並列化ツール Download PDF

Info

Publication number
JP6558310B2
JP6558310B2 JP2016117248A JP2016117248A JP6558310B2 JP 6558310 B2 JP6558310 B2 JP 6558310B2 JP 2016117248 A JP2016117248 A JP 2016117248A JP 2016117248 A JP2016117248 A JP 2016117248A JP 6558310 B2 JP6558310 B2 JP 6558310B2
Authority
JP
Japan
Prior art keywords
data
dependency
data dependency
processing units
program
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
JP2016117248A
Other languages
English (en)
Other versions
JP2017224046A (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 JP2016117248A priority Critical patent/JP6558310B2/ja
Priority to DE102017209285.8A priority patent/DE102017209285A1/de
Priority to US15/614,771 priority patent/US10228948B2/en
Publication of JP2017224046A publication Critical patent/JP2017224046A/ja
Application granted granted Critical
Publication of JP6558310B2 publication Critical patent/JP6558310B2/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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/456Parallelism detection
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び生成された並列プログラムを実装した車載装置に関する。
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献1に開示された並列化コンパイル方法がある。
この並列化コンパイル方法では、シングルプログラムのソースコードを字句解析や構文解析を行って中間言語を生成し、この中間言語を用いて、複数のマクロタスク(以下、処理単位)のデータ依存関係の解析や最適化等を行う。また、並列化コンパイル方法では、各処理単位のデータ依存関係や処理単位毎の実行時間を基にスケジューリングを行って並列プログラムを生成する。
特開2015−1807号公報
ところで、並列プログラムを生成する際には、ソフトウェア上の各処理単位のデータ依存関係を解析して、このデータ依存関係を維持しながら並列化する。これにより、並列プログラムでは、ソフトウェア上、シングルコアマイコン時の動作を維持可能となるが、実際の制御を考えると厳密にデータ依存関係を維持しなくても応答性を維持可能な場合がある。このような場合は、データ依存関係がある二つの処理単位間のデータ依存関係をあえて無視してスケジューリングすることで、ソフトウェア上の並列性に加え、制御上の並列性を併せた大きな並列性能を引き出すことが可能となると考えられる。
しかしながら、データ依存関係を無視してスケジューリングしたとしても、二つの処理単位間にデータ依存関係があったということは、共通のデータにアクセスしているということである。よって、これらの処理単位が割り当てられた異なるコアは、共通のデータに同時にアクセスすることがありうる。また、このデータは、異なるコアに同時にアクセスされた場合、データに異常が生じる可能性がある。このような場合は、並列プログラムにコア間排他処理を追加して、データに異常が生じることを回避することが考えられる。ところが、コア間排他処理は、オーバーヘッドによる性能低下が少なくない。
また、上記のようなデータに異常が生じることを回避する方法としては、データ依存関係がある処理単位どうしの同時実行を回避する同期処理が考えられる。しかしながら、この方法では、データ依存関係があると一律同期してしまうため、スケジューリング時の制約となり、並列実行時の性能が低下してしまうことが考えられる。
本開示は、上記問題点に鑑みなされたものであり、並列プログラムを生成する際の制約を低減しつつ、並列実行時の性能を向上できる並列プログラムを作成できる並列化方法、並列化ツールを提供することを目的とする。
上記目的を達成するために本開示の一つは、
シングルコアマイコン用に記述されたシングルプログラムを解析して、シングルプログラムの各処理単位間における同じデータへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な処理単位を並列化した並列プログラム(21a1)を生成するコンピュータが実行する並列化方法であって、
複数のデータ依存関係における無視可能なデータ依存関係を示す無視情報(30)を取得して、無視情報で示されたデータ依存関係のうち、同じデータへの書込みと書込みとを示すデータ依存関係を同期必須依存関係として抽出する抽出手順(10c)と、
無視情報で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視し、同期必須依存関係となる二つの処理単位の同時実行を回避することでデータの異常が発生しないようにしつつ、処理単位が最も多く並列化されるように並列プログラムを生成する生成手順(10d、10e、10f)と、を備えていることを特徴とする。
このように、本開示では、無視情報で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視して、処理単位が最も多く並列化されるように並列プログラムを生成する。このため、本開示は、データ依存関係を無視しない場合よりも、並列実行時の性能を向上できる並列プログラムを生成できる。
また、データは、異なるコアに同時にアクセスされた場合、特に、異なるコアからのデータの書込みが同時に発生した場合に異常が生じる可能性がある。そこで、本開示は、無視情報で示されたデータ依存関係のうち、同じデータへの書込みと書込みとを示すデータ依存関係を同期必須依存関係として抽出する。そして、本開示は、同期必須依存関係となる二つの処理単位による同じデータへの書込みが同時に発生しないようにしつつ、処理単位が最も多く並列化されるように並列プログラムを生成する。このため、本開示は、二つの処理単位による同じデータへの書込みが同時に発生しないようにし、且つ、二つの処理単位による書込みと参照が同時に発生しないようにする場合よりも、並列プログラムを生成する際の制約を低減ができる。
本開示の他の一つは、
シングルコアマイコン用に記述されたシングルプログラムを解析して、シングルプログラムの各処理単位間における同じデータへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な処理単位を並列化した並列プログラム(21a1)を生成する並列化ツールであって、
複数のデータ依存関係における無視可能なデータ依存関係を示す無視情報(30)を取得して、無視情報で示されたデータ依存関係のうち、同じデータへの書込みと書込みとを示すデータ依存関係を同期必須依存関係として抽出する抽出部(10c)と、
無視情報で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視し、同期必須依存関係となる二つの処理単位の同時実行を回避することでデータの異常が発生しないようにしつつ、処理単位が最も多く並列化されるように並列プログラムを生成する生成部(10d、10e、10f)と、を備えていることを特徴とする。
このように、並列化ツールでは、上記並列化方法と同様に、並列プログラムを生成する際の制約を低減しつつ、並列実行時の性能を向上できる並列プログラムを生成できる。
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
実施形態におけるコンピュータの概略構成を示すブロック図である。 実施形態における車載装置の概略構成を示すブロック図である。 実施形態におけるコンピュータの機能を示すブロック図である。 実施形態におけるコンピュータの処理を示すフローチャートである。 実施形態におけるコンピュータの処理を示すフローチャートである。 処理単位のデータ依存関係を示す図面である。 シングルプログラムの第1例を示す図面である。 図7のシングルプログラムに同期必須依存関係を適用した場合の図面である。 図8のシングルプログラムにおけるスケジュールパターンを示す図面である。 シングルプログラムの第2例を示す図面である。 図10のシングルプログラムに同期必須依存関係を適用した場合の図面である。 図11のシングルプログラムにおけるデータ依存パターンを示す図面である。
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位から第1コア21cと第2コア21dを有するマルチコアプロセッサ21用に並列化した並列プログラム21a1を生成するコンピュータ10を採用する。また、本実施形態は、並列プログラム21a1を生成するための自動並列化コンパイラ1を採用する。さらに、本実施形態では、コンピュータ10で生成された並列プログラム21a1を備えた車載装置20を採用する。なお、プロセッサは、マイコンと言い換えることができる。よって、マルチコアプロセッサは、マルチコアマイコンと言い換えることができる。
自動並列化コンパイラ1は、並列プログラム21a1を生成するための手順を含んでいる。よって、自動並列化コンパイラ1は、並列化方法に相当する。自動並列化コンパイラ1は、並列化方法を含むプログラムである。また、コンピュータ10は、自動並列化コンパイラ1を実行することで、並列プログラム21a1を生成する。よって、コンピュータ10は、並列化ツールに相当する。
上記処理単位は、処理ブロックやマクロタスク(MT)などと言い換えることができる。以下においては、処理単位をMTとも称する。本実施形態では、第1例として第11MT〜第13MTを採用して、第2例として第21MT〜第23MTを採用する。なお、各MTは、第1コア21cや第2コア21dが実行可能な命令を少なくとも一つ含んでいる。
このように、並列プログラム21a1を生成する背景としては、プロセッサの発熱量増大や消費電力増加、クロック周波数の限界問題から、マルチコアプロセッサ21が主流になることなどがあげられる。そして、マルチコアプロセッサ21は、車載装置の分野においても適用が必要となっている。また、並列プログラム21a1としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
なお、並列プログラム21a1を生成する際には、シングルプログラムにおける複数のMTのデータ依存関係を解析して、複数のMTをマルチコアプロセッサ21の異なるコア21c、21dに割り振る(言い換えると、割り付ける)。この点に関しては、特開2015−1807号公報を参照されたい。なお、本実施形態では、一例として、C言語で記述されたシングルプログラムを採用する。しかしながら、本発明は、これに限定されない。シングルプログラムは、C言語とは異なるプログラミング言語で記述されていてもよい。
本実施形態では、図7に示す第11MT〜第13MTを含むシングルプログラムや、図10に示す第21MT〜第23MTを含むシングルプログラムを採用する。この複数のMTは、お互いにデータ依存関係があるMTが含まれている。図7、図10では、データ依存関係があるMTどうしを矢印で繋いで図示している。特に、二点鎖線の矢印は、無視情報30に基づいて、データ依存関係を無視するデータ依存関係を示している。
また、シングルプログラムは、複数のMTを複数の機能群に区分可能に構成されている。例えば、ある複数のMTは、機能αを達成するためのものであり機能群αに区分される。そして、他の複数のMTは、機能βを達成するためのものであり、機能群βに区分される。
データ依存関係は、二つのMTが同一のデータにアクセスする際の関係である。データ依存関係は、図6に示すように、第1〜第3ケースがある。第1ケースは、第1MTがデータに書込み(Write)、そのデータを第2MTが参照(Read)する関係である。また、第2ケースは、第1MTと第2MTが同一のデータに書込み(Write)する関係である。そして、第3ケースは、第1MTがデータを参照(Read)し、そのデータに第2MTが書込み(Write)する関係である。なお、第1MTは、シングルプログラムにおける実行順序が第2MTよりも先である。
上記のように、第1ケースは、Write‐Readを示すデータ依存関係であるためWR関係とも称する。また、第2ケースは、Write‐Writeを示すデータ依存関係であるためWW関係とも称する。そして、第3ケースは、Read‐Writeを示すデータ依存関係であるためRW関係とも称する。
なお、一般的にプログラム内の異なる機能もしくは機能群の間では、独立性をもって設計されていることが多く、機能間もしくは機能群間の実行順序(データへのアクセス順序)の車載装置20の制御応答性への影響が十分に小さいことが多い。つまり、異なる機能群に区分されている二つのMTは、データ依存関係を無視してスケジューリングしてもよいことが多い。このようにして生成された並列プログラムは、車載装置20の制御への影響が十分に小さい、すなわち応答性を維持可能と言える。
そして、本実施形態では、上記の通り、機能間もしくは機能群間の実行順序の車載装置20の制御応答性への影響が十分に小さいケースを想定する。よってこの場合、異なる機能分に区分されている二つのMTのデータ依存関係は、無視可能なデータ依存関係であると定義できる。複数のデータ依存関係における無視可能なデータ依存関係を示す無視情報30を用いて、並列プログラム21a1を生成する。
なお、第1例は、第11MTと第12MTとが同じ機能群であり、第13MTが第11MT及び第12MTと異なる機能群である。一方、第2例は、第21MTと第22MTとが同じ機能群であり、第23MTが第21MT及び第22MTと異なる機能群である。また、第1例は、第11MTと第12MTとが同じコアに割り振られ、第13MTが第11MT及び第12MTと異なるコアに割り振られる。一方、第2例は、第21MTと第22MTとが同じコアに割り振られ、第23MTが第21MT及び第22MTと異なるコアに割り振られる。そして、本実施形態では、機能群間におけるデータ依存関係を無視して生成した並列プログラムは、車載装置20の制御への影響が十分に小さいものとする。
ところで、並列プログラム21a1は、データ依存関係がある二つのMTが別々のコア21c、21dに配置されることもある。よって、並列プログラム21a1は、データ依存関係がある二つのMTが別々のコア21c、21dに配置される場合、他コアに割り振られた処理順序が先のMTの実行が完了するのを待って、処理順序が後のMTを実行する同期処理を含んでいる。つまり、並列プログラム21a1は、自コアに割り振られたMTの実行が完了した場合に、他コアに割り振られたMTの実行が完了するのを待って、自コアに割り振られた次のMTを実行させる同期処理を含んでいる。
このため、後程説明する第1コア21cと第2コア21dは、同期処理を行うために、自身に割り振られたMTの実行が完了した場合、RAM21bにアクセスして、同期待ちであることを示す情報(以下、完了情報)をRAM21bに記憶する。そして、他コアにおけるデータ依存関係があるMTの実行完了を待っている自コアは、MTを実行することなく、定期的にRAM21bにアクセスして、RAM21bに完了情報が記憶されているか否かを確認する。つまり、他コアにおけるデータ依存関係があるMTの実行完了を待っている自コアは、非動作中に定期的に動作して、RAM21bにアクセスし、完了情報が記憶されているか否かを確認する。このように、第1コア21cと第2コア21dは、お互いに待合せをしながら、言い換えると同期を取りながら、MTの実行を行う。よって、同期処理は、待合わせ処理と言うこともできる。なお、並列プログラム21a1は、第1コア21cが実行するプログラムと、第2コア21dが実行するプログラムとを含んでいる。
ここで、図1、図3を用いて、コンピュータ10の構成に関して説明する。コンピュータ10は、ディスプレイ11、HDD12、CPU13、ROM14、RAM15、入力装置16、読取部17などを備えて構成されている。また、コンピュータ10は、記憶媒体18に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体18には、自動並列化コンパイラ1が記憶されている。よって、コンピュータ10は、記憶媒体18に記憶された自動並列化コンパイラ1を実行することで、並列プログラム21a1を生成する。
コンピュータ10及び記憶媒体18の構成は、特開2015−1807号公報に記載されたパーソナルコンピュータ100及び記憶媒体180を参照されたい。なお、自動並列化コンパイラ1は、特開2015−1807号公報に記載されたものに加えて、抽出手順、算出手順、決定手順を含んでいる。
また、コンピュータ10は、図3に示すように、機能ブロックとして、アクセス情報解析部10a、依存関係解析部10b、再構築部10c、スケジューリング部10d、並列度算出部10e、決定部10fを備えている。
アクセス情報解析部10aは、シングルプログラムにおける各MTのデータアクセス情報を解析する。つまり、アクセス情報解析部10aは、各MTにおけるデータに対するReadやWriteを解析する。なお、図7に示すように、第11MTのデータアクセスは、データX及びデータYに対するReadである。第12MTのデータアクセスは、データXに対するWriteである。第13MTのデータアクセスは、データX及びデータYに対するWriteである。また、図10に示すように、第21MT、第22MT、第23MT夫々のデータアクセスは、データXに対するWriteである。
依存関係解析部10bは、シングルプログラムのデータ依存関係を解析し、並列化可能なMTを抽出する。
再構築部10cは、無視情報30を加味したデータ依存関係を再構築する。そして、再構築部10cは、再構築したデータ依存関係に基づいて、複数のデータ依存パターンを生成する。
ところで、無視情報30で示されたデータ依存関係のうち、WW関係は、同時実行されることで、データで干渉が起こる可能性がある。これによって、データが破壊される可能性がある。つまり、図6に示す第1〜第3ケースのうち、第2ケースは、二つのMT間のデータ依存関係が無視されることにより、二つのMTが同時実行されるスケジューリングとされる可能性があり、その結果、データで干渉が起こる可能性がある。よって、WW関係の二つのMT間では、同期処理を追加する必要がある。つまり、データ干渉は、同じデータにWriteするMTどうしを同期処理により同時実行できないようにすれば回避できる。
そこで、再構築部10cは、無視情報30で示されたデータ依存関係のうち、同じデータに対するWW関係を同期必須依存関係として抽出する。なお、再構築部10cは、アクセス情報解析部10aの解析結果などから、同期必須依存関係を抽出できる。
そして、再構築部10cは、無視情報30で示されたデータ依存関係のうち、RW関係とWR関係に関しては無視する。一方、再構築部10cは、無視情報30で示されたデータ依存関係のうち、WW関係に関しては、WW関係となるMTの順番を入れ替えたデータ依存パターンを生成する。
さらに、無視情報30で示されたデータ依存関係におけるRW関係及びWR関係の中には、制御的に同時性、すなわちデータ更新タイミングの一致が必要なものもある。このデータ依存関係は、無視することで、データ更新タイミングが一致せず不具合が生じる可能性がある。
そこで、再構築部10cは、複数のデータのうち、RW関係やWR関係のタイミング規定が制御制約として必要なデータを示す同時性必要情報40を取得する。同時性必要情報40は、RW関係やWR関係のタイミング規定が制御制約として必要なデータが、例えばリストやプログラムコード上の指示子等の情報で与えられている。
そして、再構築部10cは、無視情報30で示されたデータ依存関係のうち、同時性必要情報40で示されたデータに対するWriteとReadを含むデータ依存関係を、さらに同期必須依存関係として抽出してもよい。WriteとReadを含むデータ依存関係は、RW関係とWR関係である。
再構築部10cは、無視情報30で示されたデータ依存関係のRW関係のうち、同時性必要情報40で示されたデータに対するRW関係に関しては、このRW関係となるMTの順番を入れ替えたデータ依存パターンを生成する。同様に、再構築部10cは、無視情報30で示されたデータ依存関係のWR関係のうち、同時性必要情報40で示されたデータに対するWR関係に関しては、このWR関係となるMTの順番を入れ替えたデータ依存パターンを生成する。
なお、本発明は、同時性必要情報40で示されたデータ依存関係を抽出しなくてもよい。本発明は、少なくともWW関係を同期必須依存関係として抽出するものであればよい。
このように、再構築部10cは、同期必須依存関係を抽出する部位であるため特許請求の範囲における抽出部に相当する。なお、コンピュータ10は、自動並列化コンパイラ1を実行することで抽出する。このため、再構築部10cは、特許請求の範囲の抽出手順にも相当するとみなせる。
ここで、図10、図11、図12を用いて、一例として第2例の第21MT〜第23MTにおけるデータ依存パターンの生成に関して説明する。なお、図11における太線の両方向矢印は、同期処理を追加する箇所であることを示している。
図10に示すように、第2例は、無視情報30によれば、第21MTと第23MTのデータ依存関係、及び第22MTと第23MTのデータ依存関係を無視できる。しかしながら、第21MTと第23MTはWW関係である。同様に、第22MTと第23MTはWW関係である。つまり、図11に示すように、第21MTと第23MTや、第22MTと第23MTは、コアを跨いでWW関係であるので、スケジュール結果で処理順序を決め、同期処理を追加して同時にデータへの書込みが発生しないようにする必要がある。
よって、コンピュータ10は、図12に示すように、データ依存パターンを生成する。第1データ依存パターンは、第21MTと第23MTに関して、シングルプログラムでの順番を逆転させたパターンである。第2データ依存パターンは、第22MTと第23MTに関して、シングルプログラムでの順番を逆転させたパターンである。第3データ依存パターンは、第21MT〜第23MTに関して、シングルプログラムでの順番を維持したパターンである。
なお、第1データ依存パターンにおいて、破線矢印で示す第23MTと第22MTのデータ依存関係は、実質効果がない。同様に、第3データ依存パターンにおいて、破線矢印で示す第21MTと第23MTのデータ依存関係は、実質効果がない。このため、並列実行時の同期処理は不要である。
このように、コンピュータ10は、抽出した同期必須依存関係の全てについて、二つのMTの処理順序をシングルプログラムでの順番を維持もしくは逆転させた全組合せについてのデータ依存パターンを生成する。これは、コア間排他をなくす提案手法を実施した場合に、データ依存関係を無視することで得られる性能向上を最大化するためである。
スケジューリング部10dと並列度算出部10eは、再構築部10cで生成した複数のデータ依存パターンの夫々に関して、個別にスケジューリングを行うとともに並列度を算出する。つまり、スケジューリング部10dと並列度算出部10eは、生成されたデータ依存パターン毎に、スケジューリングするとともに、複数のスケジューリング結果の夫々における並列度を算出する。
なお、スケジューリング部10dと並列度算出部10eは、特許請求の範囲の算出部に相当する。また、コンピュータ10は、自動並列化コンパイラ1を実行することでスケジューリングと並列度の算出を行う。このため、スケジューリング部10dと並列度算出部10eは、特許請求の範囲の算出手順にも相当するとみなせる。
決定部10fは、並列度最大の結果を適用する。つまり、決定部10fは、複数のスケジューリング結果から並列度が最大となるスケジューリング結果の採用を決定することで、MTが最も多く並列化された並列プログラムを生成する。このように、コンピュータ10は、データ依存関係の全パターンについてスケジューリングを行うとともに、並列度を算出して比較することで、最大性能の並列プログラムを生成できる。なお、並列度とは、シングルプログラムの処理時間に対する並列化後の最悪実行時間の改善度合いを示すものである。よって、並列化された複数のMTが多いほど、並列度が大きくなる。
上記のように、コンピュータ10は、自動並列化コンパイラ1を実行することで並列度が最大となるスケジューリング結果の採用を決定する。このため、決定部10fは、特許請求の範囲の決定手順に相当するとみなせる。
また、コンピュータ10は、データ依存パターンを生成することなく、並列プログラムを生成してもよい。この場合、再構築部10cは、無視情報30を加味したデータ依存関係を再構築する。再構築部10cは、無視情報30で示されたデータ依存関係のうち、同じデータに対するWW関係を同期必須依存関係として抽出する。また、再構築部10cは、無視情報30で示されたデータ依存関係のうち、同時性必要情報40で示されたデータに対するWriteとReadを含むデータ依存関係を、さらに同期必須依存関係として抽出してもよい。
スケジューリング部10dは、再構築部10cで抽出した同期必須依存関係となる二つのMTの処理順序をシングルプログラムでの順番を維持もしくは逆転させて並べて、複数のスケジュールパターンを生成する。並列度算出部10eは、スケジューリング結果である各スケジュールパターンの並列度を算出する。そして、決定部10fは、複数のスケジュールパターンから並列度が最大となるスケジュールパターンの採用を決定することで、並列化されるMTの合計処理時間が最も多くなる並列プログラムを生成する。このとき、決定部10fは、同期必須依存関係となる二つのMTによる同じデータへの書込みが同時に発生しないスケジュールパターンを選択する。また、同時性必要情報40を用いる場合、決定部10fは、タイミング規定が維持されるようにスケジュールパターンを選択する。
ここで、図7、図8、図9を用いて、一例として第1例の第11MT〜第13MTにおけるスケジュールパターンの生成に関して説明する。なお、図8における太線の両方向矢印は、同期処理を追加する箇所であることを示している。
図7に示すように、第1例は、無視情報30によれば、第11MTと第13MTのデータ依存関係、及び第12MTと第13MTのデータ依存関係を無視できる。しかしながら、第12MTと第13MTはWW関係である。つまり、第12MTと第13MTは、図8に示すように、コアを跨いでWW関係であるので、スケジュール結果で処理順序を決め、同期処理を追加して同時にデータへの書込みが発生しないようにする必要がある。
そして、コンピュータ10は、図9に示すように、複数のスケジュールパターンを生成する。ここでは、第1パターン、第2パターン、第3パターン、第4パターン、第5パターンのスケジュールパターンを生成している。なお、第4パターンは、第12MTと第13MTによるデータへの書込みが同時に発生する。このため、決定部10fは、第4パターンは選択しない。つまり、コンピュータ10は、第4パターンを除いてスケジューリングすることになる。
なお、スケジューリング部10dと並列度算出部10eと決定部10fは、特許請求の範囲の生成部に相当する。また、コンピュータ10は、自動並列化コンパイラ1を実行することで並列プログラムを生成する。このため、スケジューリング部10dと並列度算出部10eと決定部10fは、特許請求の範囲の生成手順にも相当するとみなせる。
ここで、図4、図5に示すフローチャートを用いて、コンピュータ10の処理動作に関して説明する。図4と図5は、コンピュータ10の一連の処理動作を示している。コンピュータ10は、動作を開始した場合、図4に示す処理をスタートする。また、コンピュータ10は、図4のステップS12でYES判定すると、図5のステップS19(A点)へ進む。そして、コンピュータ10は、図5のステップS21でNO判定した場合、及びステップS24の処理が終了した場合に、図4のステップS11(B点)へ進む。
ステップS10では、全MT間のデータ依存関係を解析する。つまり、データ依存関係がWW関係、WR関係、RW関係のいずれであるかを解析する。
ステップS11、S12では、処理対象のMTを順次スキャンして、無視情報30の未判断のMTがあるか否かを判定する。つまり、ステップS10で解析したデータ依存関係のうち、無視情報30に該当するか否かの判断が未処理のMTが存在するか否かを判定する。未処理のMTがあると判定した場合は、ステップS19へ進む。一方、未処理のMTがないと判定した場合は、ステップS13へ進む。
ステップS19では、無視情報30の判断済みとする。つまり、処理対象のMTに関して、無視情報30に該当するか否かの判断が済みであるとする。
ステップS20では、データ依存関係を全てスキャンする。ここでは、処理対象のMTに関するデータ依存関係を全てスキャンする。
ステップS21では、無視情報30が存在するか否かを判定する。処理対象のMTに関する未処理の無視情報30が存在するか否かを判定し、存在すると判定した場合は、ステップS22へ進む。一方、存在しないと判定した場合は、ステップS11へ戻る。
ステップS22では、データ依存関係がWW関係であるか否かを判定する。無視情報30に該当するデータ依存関係がWW関係であるか否か、すなわち、同期必須依存関係であるか否かを判定する。そして、WW関係であると判定した場合は、同期必須依存関係であるとみなしてステップS23へ進む。一方、WW関係でないと判定した場合は、同期必須依存関係でないとみなしてステップS25へ進む。
ステップS23では、該当するデータ依存関係を逆転候補に設定する。つまり、無視情報30に該当し、且つWW関係であるデータ依存関係を逆転候補に設定する。一方、ステップS25では、該当するデータ依存関係を削除する。つまり、無視情報30に該当するデータ依存関係を削除する。
ステップS24では、該当する無視情報30を処理済みとする。そして、ステップS24での処理が終了すると、ステップS11へ戻る。
ステップS13では、データ依存関係の組合せの全パターンを作成する。つまり、上記のように、全ての組合せのデータ依存パターンを作成する。よって、以下においては、データ依存パターンを組合せとも称する。コンピュータ10は、このようにして作成した複数のデータ依存パターンを用いて、以下のステップS14〜S18に示す処理を実行して並列プログラム21a1を生成する。
ステップS14では、全て組合せを一度ずつ処理(S16〜S18の実行を)したか否かを判定する。つまり、全ての組合せの夫々に対して、スケジューリングと並列度の算出の処理を行ったか否かを判定する。処理したと判定した場合は、ステップS15へ進む。一方、処理していないと判定した場合は、ステップS16へ進む。
ステップS15では、算出した並列度が最大のスケジューリングで並列化コードを生成する。つまり、並列度が最大のスケジューリングで並列プログラム21a1を生成する。
ステップS16、S17では、未処理のデータ依存関係の組合せをスキャンして、処理対象のデータ依存関係の組合せ中にデータ依存関係の循環があるか否かを判定する。つまり、データ依存関係を逆転させることにより矛盾が生じるケースがあるか否かを判定する。循環がないと判定した場合は、矛盾が生じないとみなしてステップS18へ進む。一方、循環があると判定した場合は、矛盾が生じるとみなしてステップS14へ進む。
ステップS18では、対象の組合せについて、スケジューリングするとともに並列度を算出する。
このように、コンピュータ10は、無視情報30で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視する。そして、コンピュータ10は、無視情報30で示されたデータ依存関係のうち同期必須依存関係となる二つのMTによる同じデータへの書込みが同時に発生しないようにしつつ、MTが最も多く並列化されるように並列プログラムを生成する。
また、コンピュータ10は、同時性必要情報40を取得する場合、無視情報で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視する。そして、コンピュータ10は、無視情報で示されたデータ依存関係のうち同期必須依存関係となる二つのMTによる同じデータへの書込みが同時に発生せず、且つ、タイミング規定が維持されるようにしつつ、MTが最も多く並列化されるように並列プログラムを生成する。
このように、コンピュータ10は、無視情報30で示されたデータ依存関係のうち同期必須依存関係で抽出されていないデータ依存関係を無視して、処理単位が最も多く並列化されるように並列プログラムを生成する。このため、コンピュータ10は、データ依存関係を無視しない場合よりも、並列実行時の性能を向上できる並列プログラム21a1を生成できる。
また、データは、異なるコア21c、21dに同時にアクセスされた場合、特に、異なるコア21c、21dからのデータの書込みが同時に発生した場合に異常が生じる可能性がある。そこで、コンピュータ10は、無視情報30で示されたデータ依存関係のうち、同じデータへのWW関係を同期必須依存関係として抽出する。そして、コンピュータ10は、同期必須依存関係となる二つのMTによる同じデータへの書込みが同時に発生しないようにしつつ、MTが最も多く並列化されるように並列プログラム21a1を生成する。
このため、コンピュータ10は、二つのMTによる同じデータへの書込みが同時に発生しないようにし、且つ、二つのMTによる書込みと参照が同時に発生しないようにする場合よりも、並列プログラム21a1を生成する際の制約を低減ができる。つまり、コンピュータ10は、無視情報30で示されたデータ依存関係のうち、同じデータへのWR関係やRW関係は無視できるため、並列プログラム21a1を生成する際の制約を低減ができる。
さらに、コンピュータ10は、データ依存関係を無視した複数のMTをマルチコア上で並行実行する際に、データ干渉の可能性があるMTどうしを抽出することができる。このため、コンピュータ10は、並列化コードの自動生成過程として限定せず、別途干渉対策が可能となる嬉しさがある。
また、コンピュータ10は、同時性必要情報40を用いることで、WW関係以外に、制御制約を考慮して同期必須依存関係を抽出することができる。この制御制約は、ソフト上解析不能なコア間排他処理を行う要因となる。しかしながら、コンピュータ10は、同時性必要情報40を用いることで、コア間排他処理を行うことなく、対策することが可能となる。
なお、コンピュータ10は、自動並列化コンパイラ1を実行することで並列プログラムを生成する。このため、自動並列化コンパイラ1は、コンピュータ10と同様の効果を奏することができる。
次に、車載装置20の構成に関して説明する。車載装置20は、図2に示すように、マルチコアプロセッサ21、通信部22、センサ部23、入出力ポート24を備えて構成されている。また、マルチコアプロセッサ21は、ROM21a、RAM21b、第1コア21c、第2コア21dを備えて構成されている。車載装置20は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。しかしながら、並列プログラム21a1は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
第1コア21cと第2コア21dは、並列プログラム21a1を実行することで、エンジン制御やハイブリッド制御などを行う。つまり、車載装置20は、第1コア21cと第2コア21dの夫々に割り当てられたMTを、第1コア21cと第2コア21dが実行することで、エンジン制御やハイブリッド制御などを行う。
よって、車載装置20は、より多くのMTが並列化された並列プログラム21a1を含んでいる。これによって、車載装置20は、各MTを最適に実行できる。
なお、RAM21b、通信部22、センサ部23、入出力ポート24は、特開2015−1807号公報に記載されたRAM420、通信部430、センサ部450、入出力ポート460を参照されたい。
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
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 (12)

  1. シングルコアマイコン用に記述されたシングルプログラムを解析して、前記シングルプログラムの各処理単位間における同じデータへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な前記処理単位を並列化した並列プログラム(21a1)を生成するコンピュータが実行する並列化方法であって、
    複数の前記データ依存関係における無視可能な前記データ依存関係を示す無視情報(30)を取得して、前記無視情報で示された前記データ依存関係のうち、同じ前記データへの書込みと書込みとを示す前記データ依存関係を同期必須依存関係として抽出する抽出手順(10c)と、
    前記無視情報で示された前記データ依存関係のうち、前記同期必須依存関係で抽出されていない前記データ依存関係を無視し、前記同期必須依存関係となる二つの前記処理単位の同時実行を回避することで前記データの異常が発生しないようにしつつ、前記処理単位が最も多く並列化されるように前記並列プログラムを生成する生成手順(10d、10e、10f)と、を備えている並列化方法。
  2. 前記抽出手順は、複数の前記データのうち、書込みと参照のタイミング規定が制御制約として必要な前記データを示す同時性必要情報(40)を取得するとともに、前記無視情報で示された前記データ依存関係のうち、前記同時性必要情報で示された前記データに対する書込みと参照とを含む前記データ依存関係をさらに前記同期必須依存関係として抽出し、
    前記生成手順は、前記無視情報で示された前記データ依存関係のうち、前記同期必須依存関係で抽出されていない前記データ依存関係を無視し、前記同期必須依存関係となる二つの前記処理単位による同じ前記データへの書込みが同時に発生せず、且つ、前記タイミング規定が維持されるようにしつつ、前記処理単位が最も多く並列化されるように前記並列プログラムを生成する請求項1に記載の並列化方法。
  3. 前記生成手順は、二つの前記処理単位の処理順序を前記シングルプログラムでの順番を維持もしくは逆転させて並べて、前記並列プログラムを生成する請求項1又は2に記載の並列化方法。
  4. 前記抽出手順は、抽出した前記同期必須依存関係の全てについて、二つの前記処理単位の処理順序を前記シングルプログラムでの順番を維持もしくは逆転させた全組合せについてのデータ依存パターンを生成する請求項1又は2に記載の並列化方法。
  5. 前記生成手順は、
    生成された前記データ依存パターン毎に、スケジューリングするとともに、複数のスケジューリング結果の夫々における並列度を算出する算出手順(10d、10e)と、
    前記算出手順での複数の前記スケジューリング結果から前記並列度が最大となる前記スケジューリング結果の採用を決定することで、前記処理単位が最も多く並列化された前記並列プログラムを生成する決定手順(10f)とを含んでいる請求項4に記載の並列化方法。
  6. 前記シングルプログラムは、複数の前記処理単位を複数の機能群に区分可能に構成されており、
    前記無視情報は、異なる前記機能群に区分される前記処理単位間の前記データ依存関係を、無視可能な前記データ依存関係として示す請求項1乃至5のいずれか一項に記載の並列化方法。
  7. シングルコアマイコン用に記述されたシングルプログラムを解析して、前記シングルプログラムの各処理単位間における同じデータへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な前記処理単位を並列化した並列プログラム(21a1)を生成する並列化ツールであって、
    複数の前記データ依存関係における無視可能な前記データ依存関係を示す無視情報(30)を取得して、前記無視情報で示された前記データ依存関係のうち、同じ前記データへの書込みと書込みとを示す前記データ依存関係を同期必須依存関係として抽出する抽出部(10c)と、
    前記無視情報で示された前記データ依存関係のうち前記同期必須依存関係で抽出されていない前記データ依存関係を無視し、前記同期必須依存関係となる二つの前記処理単位の同時実行を回避することで前記データの異常が発生しないようにしつつ、前記処理単位が最も多く並列化されるように前記並列プログラムを生成する生成部(10d、10e、10f)と、を備えている並列化ツール。
  8. 前記抽出部は、複数の前記データのうち、書込みと参照のタイミング規定が制御制約として必要な前記データを示す同時性必要情報(40)をさらに取得するとともに、前記無視情報で示された前記データ依存関係のうち、前記同時性必要情報で示された前記データに対する書込みと参照とを含む前記データ依存関係をさらに前記同期必須依存関係として抽出し、
    前記生成部は、前記無視情報で示された前記データ依存関係のうち前記同期必須依存関係で抽出されていない前記データ依存関係を無視し、前記同期必須依存関係となる二つの前記処理単位による同じ前記データへの書込みが同時に発生せず、且つ、前記タイミング規定が維持されるようにしつつ、前記処理単位が最も多く並列化されるように前記並列プログラムを生成する請求項7に記載の並列化ツール。
  9. 前記生成部は、二つの前記処理単位の処理順序を前記シングルプログラムでの順番を維持もしくは逆転させて並べて、前記並列プログラムを生成する請求項7又は8に記載の並列化ツール。
  10. 前記抽出部は、抽出した前記同期必須依存関係の全てについて、二つの前記処理単位の処理順序を前記シングルプログラムでの順番を維持もしくは逆転させた全組合せについてのデータ依存パターンを生成する請求項7又は8に記載の並列化ツール。
  11. 前記生成部は、
    生成された前記データ依存パターン毎に、スケジューリングするとともに、複数のスケジューリング結果の夫々における並列度を算出する算出部(10d、10e)と、
    前記算出部での複数の前記スケジューリング結果から前記並列度が最大となる前記スケジューリング結果の採用を決定することで、前記処理単位が最も多く並列化された前記並列プログラムを生成する決定部(10f)とを含んでいる請求項10に記載の並列化ツール。
  12. 前記シングルプログラムは、複数の前記処理単位を複数の機能群に区分可能に構成されており、
    前記無視情報は、異なる前記機能群に区分される前記処理単位間の前記データ依存関係を、無視可能な前記データ依存関係として示す請求項7乃至11のいずれか一項に記載の並列化ツール。
JP2016117248A 2016-06-13 2016-06-13 並列化方法、並列化ツール Active JP6558310B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2016117248A JP6558310B2 (ja) 2016-06-13 2016-06-13 並列化方法、並列化ツール
DE102017209285.8A DE102017209285A1 (de) 2016-06-13 2017-06-01 Parallelization method, parallelization tool, and in-vehicle device
US15/614,771 US10228948B2 (en) 2016-06-13 2017-06-06 Parallelization method, parallelization tool, and in-vehicle device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016117248A JP6558310B2 (ja) 2016-06-13 2016-06-13 並列化方法、並列化ツール

Publications (2)

Publication Number Publication Date
JP2017224046A JP2017224046A (ja) 2017-12-21
JP6558310B2 true JP6558310B2 (ja) 2019-08-14

Family

ID=60419956

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016117248A Active JP6558310B2 (ja) 2016-06-13 2016-06-13 並列化方法、並列化ツール

Country Status (3)

Country Link
US (1) US10228948B2 (ja)
JP (1) JP6558310B2 (ja)
DE (1) DE102017209285A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017228029A (ja) * 2016-06-21 2017-12-28 株式会社デンソー 並列化方法、並列化ツール、車載装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3039953B2 (ja) * 1989-04-28 2000-05-08 株式会社日立製作所 並列化装置
US6948162B2 (en) * 2002-01-09 2005-09-20 Sun Microsystems, Inc. Enhanced parallelism in trace scheduling by using renaming
US7882498B2 (en) * 2006-03-31 2011-02-01 Intel Corporation Method, system, and program of a compiler to parallelize source code
US20070260856A1 (en) * 2006-05-05 2007-11-08 Tran Thang M Methods and apparatus to detect data dependencies in an instruction pipeline
US7984431B2 (en) * 2007-03-31 2011-07-19 Intel Corporation Method and apparatus for exploiting thread-level parallelism
JP2009129179A (ja) * 2007-11-22 2009-06-11 Toshiba Corp プログラム並列化支援装置およびプログラム並列化支援方法
JP5036523B2 (ja) * 2007-12-21 2012-09-26 三菱電機株式会社 プログラム並列化装置
US9354884B2 (en) * 2013-03-13 2016-05-31 International Business Machines Corporation Processor with hybrid pipeline capable of operating in out-of-order and in-order modes
JP6018022B2 (ja) 2013-06-14 2016-11-02 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
JP6427054B2 (ja) 2015-03-31 2018-11-21 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ

Also Published As

Publication number Publication date
DE102017209285A1 (de) 2017-12-14
US20170357511A1 (en) 2017-12-14
US10228948B2 (en) 2019-03-12
JP2017224046A (ja) 2017-12-21

Similar Documents

Publication Publication Date Title
US10095657B2 (en) Processor, accelerator, and direct memory access controller within a core reading/writing local synchronization flag area for parallel
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
US9195444B2 (en) Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction
JPH04211830A (ja) 並列化コンパイル方式
JP6427054B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
US10296316B2 (en) Parallelization method, parallelization tool, and in-vehicle apparatus
Sukumaran-Rajam et al. The polyhedral model of nonlinear loops
JP2017228029A (ja) 並列化方法、並列化ツール、車載装置
EP2799986B1 (en) Apparatus and method for translating multithread program code
JP6558310B2 (ja) 並列化方法、並列化ツール
Carle et al. Predicate-aware, makespan-preserving software pipelining of scheduling tables
Jimborean et al. Adapting the polyhedral model as a framework for efficient speculative parallelization
US8806466B2 (en) Program generation device, program production method, and program
Juega et al. Adaptive mapping and parameter selection scheme to improve automatic code generation for gpus
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP6933001B2 (ja) 並列化方法、並列化ツール
JP7095513B2 (ja) マルチコアマイコン、及び車載装置
Patel et al. Principles of Speculative Run—Time Parallelization
JP4819442B2 (ja) コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム
WO2023155863A1 (en) Methods and devices for compiler function fusion
Kuroda et al. Applying Temporal Blocking with a Directive-based Approach
JP6933063B2 (ja) 並列化方法、並列化ツール、車載装置
Patel et al. Implementation issues of loop-level speculative run-time parallelization
JP2017091098A (ja) 並列化方法、並列化ツール、車載装置
Jimborean et al. Dynamic and speculative polyhedral parallelization of loop nests using binary code patterns

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190417

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190529

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190701

R151 Written notification of patent or utility model registration

Ref document number: 6558310

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