(57)【要約】【課題】並列プログラムの並列度が低くても、相互干渉を防止しつつ複数のコアでの処理単位の並列実行頻度を高めることが可能なマルチコアマイコンを提供する。【解決手段】マルチコアマイコン３１の各コア３１ｃ、３１ｄにおいて、実行タスク候補である各タスクの複数の処理単位の中で、その処理単位の実行時に利用予定のデータにアクセス可能である処理単位が、実行すべき処理単位として決定される。さらに、その利用予定データが他コアにおいて実行される処理単位によってアクセスされることを禁止するための禁止処理が実行される。そして、あるコアにおける禁止処理の実行の結果、他コアの処理単位について、利用予定のデータにアクセス不可と判定された場合には、他コアにおいて利用予定データにアクセス可能である別の処理単位が、実行すべき処理単位として決定される。【選択図】図６
2019215804.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン用の並列プログラム（３１ａ１’）を実行するマルチコアマイコン（３１）であって、
前記並列プログラムは、前記シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けと実行順序とが決定されたものであり、
前記マルチコアマイコンの前記複数のコアは、それぞれ、自コアに割り付けられた、複数のタスクに属するそれぞれの処理単位から、実行すべき処理単位を選択する選択部（Ｓ１１０〜Ｓ２００、Ｓ３１０〜Ｓ４００、５１０〜Ｓ６１０、Ｓ６７０）を有し、
前記選択部は、
各タスクの処理単位を対象として、当該処理単位の実行時に利用予定のデータにアクセス可能であるか否かを判定する判定部（Ｓ１４０、Ｓ３４０、Ｓ５４０）と、
前記判定部によって利用予定のデータにアクセス可能と判定された処理単位を実行すべき処理単位として決定するとともに、他コアにおいて実行される処理単位による該当データへのアクセスを禁止するための禁止処理（Ｓ１５０、Ｓ３５０、Ｓ５５０、Ｓ６７０）を実行する決定時処理部（Ｓ１５０〜Ｓ１６０、Ｓ３５０〜Ｓ３６０、Ｓ５５０〜Ｓ５６０、Ｓ６７０）と、を備え、
前記複数のコアは、それぞれ、前記決定時処理部によって決定された処理単位に含まれる命令を実行するマルチコアマイコン。
【請求項２】
前記選択部は、前記複数のタスクのそれぞれの処理優先度に基づいて、相対的に処理優先度の最も高いタスクに属する処理単位を特定する特定部（Ｓ１１０、Ｓ３１０、Ｓ５１０）を有し、
前記判定部は、前記特定部により特定された処理単位を対象として、利用予定のデータにアクセス可能であるか否かを判定し、
前記選択部は、さらに、前記判定部によって利用予定のデータにアクセス不可と判定されると、前記判定部の判定対象となる処理単位を、次に処理優先度の高いタスクに属する処理単位に切り替える切替部（Ｓ１７０〜Ｓ２００、Ｓ３７０〜Ｓ４００、Ｓ５８０〜Ｓ６１０）を有する請求項１に記載のマルチコアマイコン。
【請求項３】
前記切替部は、前記判定部によって前記データにアクセス不可と判定された処理単位が、最も低い処理優先度のタスクに属する場合、前記判定部の判定対象となる処理単位を、最も高い処理優先度のタスクに属する処理単位に切り替える請求項２に記載のマルチコアマイコン。
【請求項４】
前記切替部は、前記判定部の判定対象となる処理単位を、最も低い処理優先度のタスクに属する処理単位から最も高い処理優先度のタスクに属する処理単位に切り替える場合、一定の待機時間の経過後に切り替えを行う請求項３に記載のマルチコアマイコン。
【請求項５】
少なくとも自コアに割り付けられた前記複数のタスクの各処理単位に含まれる命令を格納する複数の命令キュー（４２ａ、４２ｂ）と、
前記命令キューから与えたれた命令に応じた演算処理を実行する演算処理部（４５）と、を有し、
前記複数の命令キューに、前記複数のタスクに属するそれぞれの処理単位に含まれる命令が保存され、
前記切替部は、前記演算処理部への命令の供給元となる命令キューを切り替える請求項２乃至４のいずれかに記載のマルチコアマイコン。
【請求項６】
前記並列プログラムの各々の処理単位は、その開始ポイントを示す開始ポイント命令を含み、
前記開始ポイント命令は、対応する処理単位に含まれる命令によって前記データへのアクセスが行われる場合、利用予定のデータを示すアクセスデータ情報を含む請求項１乃至５のいずれかに記載のマルチコアマイコン。
【請求項７】
前記判定部は、前記開始ポイント命令に応じて、処理単位の実行時に利用予定のデータにアクセス可能であるか否かを判定する請求項６に記載のマルチコアマイコン。
【請求項８】
前記並列プログラムの各々の処理単位は、その終了ポイントを示す終了ポイント命令を含み、
前記決定時処理部による前記禁止処理は、前記終了ポイント命令に応じて解除される請求項６又７に記載のマルチコアマイコン。
【請求項９】
前記決定時処理部は、前記禁止処理（Ｓ１５０、Ｓ５５０）として、利用予定の前記データが使用中であることを示すフラグを立てる処理を実施して当該データをロックし、
前記判定部は、利用予定の前記データに対応するフラグが立てられてロックされているか否かにより、当該データにアクセス可能であるか否かを判定する請求項１乃至８のいずれかに記載のマルチコアマイコン。
【請求項１０】
前記複数のコアによってアクセス可能なメモリと、
前記メモリに対するアクセスを管理するメモリ管理部（４７）と、を備え、
前記複数のコアが、割り付けられた前記複数のタスクのそれぞれの処理単位を実行する際に利用する前記データは、前記メモリに記憶され、
前記決定時処理部は、前記禁止処理（Ｓ３５０）として、前記メモリ管理部へ利用予定の前記データのロックを指示する処理を実施し、
前記判定部は、前記メモリ管理部によって利用予定の前記データがロックされているか否かにより、当該データにアクセス可能であるか否かを判定する請求項１乃至８のいずれかに記載のマルチコアマイコン。
【請求項１１】
前記決定時処理部は、前記禁止処理（Ｓ６７０）として、さらに、前記他コアに対して別のタスクの処理単位への切り替えを禁止する指示を出力する請求項９又は１０に記載のマルチコアマイコン。
【請求項１２】
前記マルチコアマイコンは、車両に搭載された車載機器を制御するための車載装置に適用され、前記並列プログラムを実行することで前記車載機器を制御するものである請求項１乃至１１のいずれかに記載のマルチコアマイコン。
【請求項１３】
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ，３１ｂ）を有するマルチコアマイコン用の並列プログラム（３１ａ１）を生成する並列化方法であって、
前記シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けと実行順序とを決定するコア割付及び実行順序決定手順（１０ａ〜１０ｄ）と、
前記実行順序決定手順にて決定された前記複数のコアへの割り付け及び実行順序に従って前記複数の処理単位が前記マルチコアマイコンの前記複数のコアで実行されるように前記並列プログラムを生成するとともに、前記並列プログラムの各々の処理単位の開始ポイントに開始ポイント命令を追加し、終了ポイントに終了ポイント命令を追加する並列プログラム生成手順（１０ｅ、１０ｆ）と、を備え、
前記開始ポイント命令と前記終了ポイント命令とは、前記マルチコアマイコンにおいて、前記複数のコアで同時期に実行される処理単位に含まれる命令によって同じデータへアクセスしないようにデータアクセスの調停を行なわせるとともに、データアクセスが禁止されたコアにおいて、該当するタスクの処理単位以外の別のタスクの処理単位を実行させるものである並列化方法。
【請求項１４】
前記開始ポイント命令は、対応する処理単位に含まれる命令によって前記データへのアクセスが行われる場合、そのアクセス対象となるデータを示すアクセスデータ情報を含む請求項１３に記載の並列化方法。
【請求項１５】
前記開始ポイント命令は、前記アクセスデータ情報が示すデータにアクセス可能か否かを判定する命令を含む請求項１４に記載の並列化方法。
【請求項１６】
前記開始ポイント命令は、前記アクセスデータ情報が示すデータにアクセス不可と判定した場合に、別のタスクの処理単位へ切り替える命令を含む請求項１５に記載の並列化方法。
【請求項１７】
前記開始ポイント命令は、前記アクセスデータ情報が示すデータにアクセス可能と判定した場合に、当該データをロックする命令を含む請求項１５又は１６に記載の並列化方法。
【請求項１８】
前記終了ポイント命令は、前記データのロックを解除する命令を含む請求項１７に記載の並列化方法。
【請求項１９】
前記並列プログラム生成手順は、前記データのロック指示命令を含む前記開始ポイント命令に続いて、他のコアに対して他のタスクの処理単位への切り替えを禁止する禁止命令を追加する請求項１７又は１８に記載の並列化方法。
【請求項２０】
前記並列プログラム生成手順は、前記終了ポイント命令の直前に、前記禁止命令を解除する解除命令を追加する請求項１９に記載の並列化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルプログラムから生成された並列プログラムを実行するマルチコアマイコン、及びシングルコアマイコン用のシングルプログラムからマルチコアマイコン用の並列プログラムを生成する並列化方法に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として、特許文献１に開示された並列化コンパイル方法が知られている。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードの字句解析や構文解析を行って中間言語に展開し、この中間言語を用いて、複数のマクロタスク（処理単位）の依存関係の解析や最適化等を行う。また、従来の並列化コンパイル方法では、各マクロタスクの依存関係やマクロタスク毎の実行時間を基にコアへの割り付けやスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、シングルプログラムから生成された並列プログラムの並列度が低い場合、すなわち、並列プログラムにおいて複数のコアにて並列実行できる処理単位が少ない場合には、マルチコアマイコンの処理能力を十分に活かすことができない。
【０００６】
本発明は、上述した点に鑑みてなされたものであり、生成される並列プログラムの並列度が低くても、相互干渉を防止しつつ複数のコアでの処理単位の並列実行頻度を高めることが可能なマルチコアマイコン及び並列化方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明によるマルチコアマイコンは、コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン用の並列プログラム（３１ａ１’）を実行するものであって、
並列プログラムは、シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けと実行順序とが決定されたものであり、
マルチコアマイコンの複数のコアは、それぞれ、自コアに割り付けられた、複数のタスクに属するそれぞれの処理単位から、実行すべき処理単位を選択する選択部（Ｓ１１０〜Ｓ２００、Ｓ３１０〜Ｓ４００、５１０〜Ｓ６１０、Ｓ６７０）を有し、
選択部は、
各タスクの処理単位を対象として、当該処理単位の実行時に利用予定のデータにアクセス可能であるか否かを判定する判定部（Ｓ１４０、Ｓ３４０、Ｓ５４０）と、
判定部によって利用予定のデータにアクセス可能と判定された処理単位を実行すべき処理単位として決定するとともに、他コアにおいて実行される処理単位による該当データへのアクセスを禁止するための禁止処理（Ｓ１５０、Ｓ３５０、Ｓ５５０、Ｓ６７０）を実行する決定時処理部（Ｓ１５０〜Ｓ１６０、Ｓ３５０〜Ｓ３６０、Ｓ５５０〜Ｓ５６０、Ｓ６７０）と、を備え、
複数のコアは、それぞれ、決定時処理部によって決定された処理単位に含まれる命令を実行するように構成される。
【０００８】
このように、本発明によるマルチコアマイコンによれば、各コアにおいて、割り付けられた各タスクの複数の処理単位の中で、その処理単位の実行時に利用予定のデータにアクセス可能である処理単位が、実行すべき処理単位として決定される。さらに、その利用予定のデータが他コアにおいて実行される処理単位によってアクセスされることを禁止するための禁止処理が実行される。これにより、複数のコアにおいて実行される処理単位同士が相互干渉することを防止することができる。
【０００９】
そして、あるコアにおける上記禁止処理の実行の結果、他コアの処理単位について、利用予定のデータにアクセス不可と判定された場合には、他コアにおいて利用予定データにアクセス可能である別の処理単位が、実行すべき処理単位として決定される。従って、他コアでの処理単位の実行により相互干渉を引き起こす虞がある場合には、当該他コアにおいて、そのような相互干渉を引き起こす虞のない別の処理単位が実行される。このため、生成される並列プログラムの並列度が低くても、複数のコアでの処理単位の並列実行頻度を高めることが可能となる。
【００１０】
また、本発明の並列化方法は、  コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ，３１ｂ）を有するマルチコアマイコン用の並列プログラム（３１ａ１）を生成するものであって、
シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けと実行順序とを決定するコア割付及び実行順序決定手順（１０ａ〜１０ｄ）と、
実行順序決定手順にて決定された複数のコアへの割り付け及び実行順序に従って複数の処理単位がマルチコアマイコンの複数のコアで実行されるように並列プログラムを生成するとともに、並列プログラムの各々の処理単位の開始ポイントに開始ポイント命令を追加し、終了ポイントに終了ポイント命令を追加する並列プログラム生成手順（１０ｅ、１０ｆ）と、を備え、
開始ポイント命令と終了ポイント命令とは、マルチコアマイコンにおいて、複数のコアで同時期に実行される処理単位に含まれる命令によって同じデータへアクセスしないようにデータアクセスの調停を行なわせるとともに、データアクセスが禁止されたコアにおいて、該当するタスクの処理単位以外の別のタスクの処理単位を実行させるものである。
【００１１】
従って、本発明の並列化方法は、マルチコアマイコンにおいて、複数のコアで実行される処理単位同士の相互干渉を防止しつつ、複数のコアでの処理単位の並列実行頻度を高めることが可能な並列プログラムを生成することができる。
【００１２】
上記括弧内の参照番号は、本開示の理解を容易にすべく、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、なんら発明の範囲を制限することを意図したものではない。
【００１３】
また、上述した特徴以外の、特許請求の範囲の各請求項に記載した技術的特徴に関しては、後述する実施形態の説明及び添付図面から明らかになる。
【図面の簡単な説明】
【００１４】
【図１】実施形態における、自動並列化ツールとしてのコンピュータの概略構成を示すブロック図である。
【図２】実施形態における、自動並列化ツールとしてのコンピュータの機能を示すブロック図である。
【図３】各タスクがそれぞれ複数の処理単位からなり、それら複数の処理単位の各コアへの割り付けの一例を示す図である。
【図４】マルチコアマイコンを内蔵する車載装置の構成の一例を示す図である。
【図５】マルチコアマイコンの各コア内の構成を概念的に示したブロック図である。
【図６】第１実施形態において、並列プログラムを実行する際のマルチコアマイコンの各コアにおける処理動作を説明するためのフローチャートである。
【図７】第２実施形態における、マルチコアマイコンの各コア内の構成を概念的に示したブロック図である。
【図８】第２実施形態において、並列プログラムを実行する際のマルチコアマイコンの各コアにおける処理動作を説明するためのフローチャートである。
【図９】第３実施形態における、マルチコアマイコンの各コア内の構成を概念的に示したブロック図である。
【図１０】第３実施形態において、並列プログラムを実行する際のマルチコアマイコンの各コアにおける処理動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００１５】
（第１実施形態）
以下において、図面を参照しながら、発明を実施するための第１実施形態を説明する。本実施形態では、並列化ツールとしてのコンピュータ１０が、コアが一つであるシングルコアマイコン用のシングルプログラムから、２個以上のコア３１ｃ、３１ｄを有するマルチコアマイコン３１用に並列化した並列プログラム３１ａ１を生成する例について説明する。なお、マルチコアマイコン３１のコアの数は、３個以上であっても良い。
【００１６】
このように、シングルプログラムから並列プログラム３１ａ１を生成する背景として、制御の高度化によりプログラム量は年々増加する傾向にあるのに対し、シングルコアマイコンの性能向上には限界があることが挙げられる。つまり、例えばシングルコアマイコンの動作周波数を高めて処理能力を向上しようとしても、動作周波数を高めるにも限界があり、また動作周波数を高めることにより発熱量の増大や消費電力の増加を招いてしまう。このため、コア数の増加により処理能力向上を図るマルチコアマイコン３１を適用することが有効と考えられている。
【００１７】
この際、プログラムの開発者が、マルチコアの能力を最大限に発揮させられるように、各コアに適切に処理を割り振ったり、そのスケジューリングも行ったりしなければならないとすると、プログラムの開発負荷が増加してしまう。このようなプログラムの開発負荷を低減するために、シングルプログラムから並列プログラム３１ａ１を自動生成することは技術的意義がある。さらに、シングルプログラムから並列プログラム３１ａ１を自動生成することにより、シングルプロセッサ用に開発した既存のソフトウエア資産を有効に活用することも可能となる。
【００１８】
まず、図１を参照して、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、シングルプログラムから並列プログラム３１ａ１を生成するものである。なお、本実施形態では、コンピュータ１０は、Ｃ言語で記述されたシングルプログラムに基づき、Ｃ言語で記述された並列プログラム３１ａ１を生成するように構成される。このため、後述するマルチコアマイコン３１のＲＯＭ（コードＲＯＭ）３１ａに記憶され、マルチコアマイコン３１によって実行される並列プログラム３１ａ１’は、例えば図２に示すように、さらにコンパイラ２０によりコンパイルされて、バイナリコードに翻訳されたものとなる。
【００１９】
しかしながら、本発明は、これに限定されない。シングルプログラムは、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。また、並列プログラム３１ａ１は、例えば、シングルプログラムの解析時に使用する中間言語で記述されていてもよい。あるいは、コンピュータ１０は、Ｃ言語で記述された並列プログラムと中間言語で記述された並列プログラムとをともに生成してもよい。さらに、コンピュータ１０が、コンパイラ２０としての機能も取り込み、直接、バイナリコードの並列プログラム３１ａ１’を生成してもよい。
【００２０】
コンピュータ１０は、図１に示すように、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。コンピュータ１０は、読取部１７により、記憶媒体１８に記憶された記憶内容を読み取ることができる。図１に示すように、記憶媒体１８には、例えば、自動並列化コンパイラ１が記憶される。なお、コンピュータ１０及び記憶媒体１８は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０と同様であるため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００２１】
自動並列化コンパイラ１は、並列プログラム３１ａ１を生成するための手順をコンピュータ１０に実行させるソフトウエアである。よって、自動並列化コンパイラ１により、コンピュータ１０は並列化方法を実行可能となる。換言すれば、自動並列化コンパイラ１は、並列化方法を含むプログラムである。コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列化ツールとして、並列プログラム３１ａ１を生成する。
【００２２】
次に、図２を参照して、並列化ツールとしてのコンピュータ１０が有する、シングルプログラムから並列プログラム３１ａ１を生成するための各機能及び処理手順について説明する。図２は、コンピュータ１０の各機能及び処理手順を機能ブロックとして表した図である。図２に示すように、コンピュータ１０は、字句解析部１０ａ、構文・意味解析部１０ｂ、依存関係解析部１０ｃ、コア割付及びスケジューリング部１０ｄ、同期ポイント命令追加部１０ｅ、及びコード生成部１０ｆとしての機能を有している。
【００２３】
本実施形態では、図２に示すように、コンピュータ１０には、制御対象機器を制御するためのシングルプログラム全体を一度に解析して並列プログラム３１ａ１を生成するのではなく、独立した処理機能（タスク）毎に分割されたシングルプログラムを対象として、その並列プログラム３１ａ１を生成する。なお、本実施形態により生成される並列プログラム３１ａ１は、マルチコアマイコン３１において実行されるときの実行速度を早めることができるので、制御対象機器として、例えば、素早い処理速度が求められる、車両に搭載されたエンジンや電動モータとすることが好適である。この場合、図４に示すように、マルチコアマイコン３１は、車両に搭載されるエンジン制御装置、モータ制御装置、ハイブリッド制御装置などの車載装置３０として具現化される。
【００２４】
タスク毎に分割されたシングルプログラムは複数の処理単位を含み、その複数の処理単位が実行されることにより、タスク毎の目的とする処理機能を実現することができる。このように複数の処理単位は、目的とする処理機能を実現するために協働するものであり、例えば先の処理単位で処理された変数データを参照する後の処理単位や、先の処理単位の条件分岐によって実行される後の処理単位などを含む。
【００２５】
ここで、処理単位とは、各コアに割り振る際の最小単位であるコア配置単位や、関数をいう。コア配置単位は、処理ブロック、マクロタスク、あるいは単なる処理単位などと言い換えることができる。コア配置単位と関数との関係は、コア配置単位≧関数である。つまり、関数は、コア配置単位自体である場合や、コア配置単位に含まれる親関数やサブ関数の場合がある。
【００２６】
字句解析部１０ａ及び構文・意味解析部１０ｂは、Ｃ言語で記述されたシングルプログラムのソースコードを対象として、字句解析や、構文と意味の解析を行い、中間言語に展開する。字句解析部１０ａ及び構文・意味解析部１０ｂによって展開された中間言語は、汎用的な命令を含んでいる。なお、字句解析部１０ａ及び構文・意味解析部１０ｂは、特開２０１５−１８０７号公報のＦＥ３に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００２７】
依存関係解析部１０ｃは、中間言語に展開されたシングルプログラムに含まれる処理単位の依存関係を解析し、並列実行可能な処理単位を抽出する。依存関係には、後に実行される処理単位が先に実行される処理単位で更新された変数データを参照するなどのデータ依存関係と、後に実行される処理単位が先に実行される処理単位の条件分岐先となるなどの制御依存関係とが含まれる。このような依存関係がある複数の処理単位は、依存関係に従う処理順序で実行される必要がある。なお、本実施形態では、上述したようにタスク毎に分割されたシングルプログラムが並列化の対象である。タスク毎に分割されたシングルプログラムに含まれる複数の処理単位は、データ依存関係や制御依存関係を有している。
【００２８】
コア割付及びスケジューリング部１０ｄは、依存関係解析部１０ｃで解析した解析結果に基づき、複数の処理単位を２個以上のコア３１ｃ、３１ｄに割り付ける（割り振る）。この際、コア割付及びスケジューリング部１０ｄは、例えば、並列実行可能な処理単位が２個以上のコア３１ｃ、３１ｄで並行して実行されるように、複数の処理単位の割り付けを行う。
【００２９】
図３に、各タスクが、それぞれ複数の処理単位からなり、それら複数の処理単位の各コア３１ｃ、３１ｄへの割り付けの一例を示す。図３に示す例では、シングルプログラムには、タスクＡ、タスクＢ、及びタスクＣの３つのタスクが含まれている。なお、図３では、説明のため、３つのタスクしか示していないが、実際には、シングルプログラムには、より多くのタスクが含まれる場合がある。
【００３０】
コア割付及びスケジューリング部１０ｄは、図３に示すように、タスクＡの処理単位Ａ１〜Ａ３に関して、処理単位Ａ１、Ａ２を第１コア３１ｃに割り付け、処理単位Ａ２と並列に実行可能な処理単位Ａ３を第２コア３１ｄに割り付ける。また、タスクＢの処理単位Ｂ１、Ｂ２に関して、処理単位Ｂ１、Ｂ２を第２コア３１ｄに割り付ける。そして、タスクＣの処理単位Ｃ１〜Ｃ４については、処理単位Ｃ１、Ｃ２を第１コア３１ｃに割り付け、それらと並列に実行可能な処理単位Ｃ３、Ｃ４を第２コア３１ｄに割り付ける。
【００３１】
そして、コア割付及びスケジューリング部１０ｄは、第１コア３１ｃ及び第２コア３１ｄに割り振られた複数の処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４のスケジューリングを行う。具体的には、コア割付及びスケジューリング部１０ｄは、各タスク毎に、各タスクの処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の依存関係に基づいて、第１コア３１ｃ及び第２コア３１ｄに割り振られた各処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の実行スケジュール（実行順序）を決定する。なお、依存関係解析部１０ｃ、及びコア割付及びスケジューリング部１０ｄは、特開２０１５−１８０７号公報のＭＰ５に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００３２】
同期ポイント命令追加部１０ｅは、コア割付及びスケジューリング部１０ｄによってスケジューリングされた、並列プログラムを構成する各タスクの複数の処理単位の各々の開始ポイントに開始ポイント命令を追加し、終了ポイントに終了ポイント命令を追加するものである。同期ポイント命令追加部１０ｅは、追加すべき開始ポイント命令、及び終了ポイント命令としてのプログラムを保有しており、各々の処理単位に対応しつつ、それぞれの開始ポイント及び終了ポイントに、開始ポイント命令及び終了ポイント命令を追加する。
【００３３】
開始ポイント命令は、対応する処理単位の開始ポイントを示すものであることに加え、以下に説明する情報や命令も含む。まず、開始ポイント命令は、対応する処理単位に含まれる命令によってメモリ（ＲＡＭ３１ｂやレジスタなど）に保存されたデータへのアクセス（データの読み取り、更新など）が行われる場合、そのアクセス対象となるデータを示すアクセスデータ情報を含む。同期ポイント命令追加部１０ｅは、アクセス対象となるデータに関する情報を、構文・意味解析部１０ｂから取得することができる。
【００３４】
これにより、マルチコアマイコン３１にて、並列プログラム３１ａ１’に含まれる各処理単位の実行開始時（実質的な処理の開始前）に、開始ポイント命令に基づき、その処理単位がいずれのデータにアクセスする予定であるかを事前に把握することができる。このアクセスデータ情報は、後述するように、各コア３１ｃ、３１ｄに設けられたアクセスデータ制御ユニット４３内のアクセスデータテーブル４３ａ、４３ｂに一時的に保存される。なお、処理単位がメモリに保存されたデータにアクセスするものではない場合、開始ポイント命令は、アクセスデータ情報を含まないか、あるいは、アクセスするデータが無いことを示すアクセスデータ情報を含む。
【００３５】
また、開始ポイント命令は、アクセスデータ情報が示すデータにアクセス可能か否かを判定するための命令を含む。この命令に基づき、各コア３１ｃ、３１ｄのアクセスデータ制御ユニット４３は、アクセスデータ情報が示すデータにアクセス可能か否かの判定を行う。より詳細には、アクセスデータ制御ユニット４３は、上記命令により、アクセス予定のデータに対応する禁止フラグの状態を確認する。禁止フラグは、並列プログラム３１ａ１’の各タスクのそれぞれの処理単位によりアクセスされるデータの各々に個別に対応するように設定され、各コア３１ｃ，３１ｄが読み書き可能なメモリの所定の記憶領域に保存される。例えば、禁止フラグの状態がセット状態である場合、アクセスデータ制御ユニット４３は、対応するデータにアクセス不可であると判定する。一方、禁止フラグの状態がリセット状態である場合、アクセスデータ制御ユニット４３は、対応するデータにアクセス可能であると判定する。
【００３６】
また、開始ポイント命令は、アクセスデータ制御ユニット４３にてアクセスデータ情報が示すデータにアクセス可能と判定された場合に、アクセスデータ制御ユニット４３が、該当データのロックを行うための命令を含む。このロック命令に基づき、アクセスデータ制御ユニット４３は、禁止フラグがリセット状態であり、対応するデータにアクセス可能と判定した場合、参照した禁止フラグをセット状態に変化させて、データをロックする。これにより、開始ポイント命令以降の処理単位の命令が開始された場合、その処理単位の命令を実行中に、他のコアで実行される処理単位による該当データへのアクセスを禁止することが可能となる。
【００３７】
また、開始ポイント命令は、アクセスデータ制御ユニット４３にてアクセスデータ情報が示すデータにアクセス不可と判定された場合、別のタスクの処理単位への切り替えを指示するための命令を含む。この命令に基づいて、プロセス切替ユニット４４は、アクセスデータ制御ユニット４３にてアクセスデータ情報が示すデータにアクセス不可と判定された場合に、実行対象となる処理単位を、別のタスクの処理単位に切り替える。その結果、データへのアクセス不可と判定されたコア３１ｃ、３１ｄにおいて、該当データが解放されるまで、処理単位の実行が待機されるのではなく、切り替えられた処理単位が実行されえる。このため、各コア３１ｃ、３１ｄでの処理単位の実行頻度を高めることが可能となる。なお、実行対象となった処理単位は、あらためて、アクセスデータ制御ユニット４３において、アクセス予定のデータへのアクセスが可能であるかどうかにより、その実行可否が判定される。
【００３８】
より詳細に説明すると、各コア３１ｃ，３１ｄに、いずれかの処理単位が割り振られた各タスクは、それぞれ処理優先度が定められている。プロセス切替ユニット４４は、初期的に、実行対象となる処理単位を、最も高い処理優先度を持つタスクの処理単位に定める。その処理単位に関して、アクセスデータ制御ユニット４３において、アクセス予定のデータへのアクセス不可と判定されると、プロセス切替ユニット４４は、実行対象となる処理単位を、次に処理優先度の高いタスクに属する処理単位に切り替える。
【００３９】
各タスクの処理優先度に関しては、開始ポイント命令が、各タスクの処理優先度を示す情報を含んでいても良い。その場合、開始ポイント命令に含まれる処理優先度情報が、プロセス切替ユニット４４のプライオリティテーブル４４ｃに展開される。プロセス切替ユニット４４は、プライオリティテーブル４４ｃに展開された各タスクの処理優先度情報に基づき、いずれのタスクが最も高い処理優先度を持つか、次に処理優先度が高いタスクはいずれであるか等を判定することができる。あるいは、各タスクの処理単位に含まれる命令を保存する命令キュー４２ａ、４２ｂについて、予め、各タスクと１対１に対応するように、各タスクとの対応関係を定めるとともに、プライオリティテーブル４４ｃには、各命令キュー４２ａ、４２ｂの処理優先度を定めても良い。
【００４０】
そして、終了ポイント命令は、対応する処理単位の終了ポイントを示すものであることに加え、以下に説明する命令も含む。すなわち、終了ポイント命令は、開始ポイント命令に含まれるデータのロック命令に基づき、データがロックされた場合、アクセスデータ制御ユニット４３が、そのデータのロックを解除するための命令を含む。処理単位の命令がすべて終了すれば、もはや、他のコアで実行される処理単位による該当データへのアクセスを禁止する必要は無いためである。終了ポイント命令に含まれるロック解除命令に基づいて、アクセスデータ制御ユニット４３は、禁止フラグの状態をセット状態からリセット状態に変化させる。
【００４１】
コード生成部１０ｆは、コア割付及びスケジューリング部１０ｄによって決定された各コア３１ｃ、３１ｄへの割り付け及び実行順序に従って該当するタスクの複数の処理単位が実行され、かつ各処理単位の開始ポイント及び終了ポイントでは、上述した開始ポイント命令及び終了ポイント命令が実行されるように、並列プログラム３１ａ１に相当するプログラムコードを生成する。コンピュータ１０は、コード生成部１０ｆによって生成されたプログラムコードを並列プログラム３１ａ１として出力する。
【００４２】
次に、車載装置３０の構成に関して説明する。車載装置３０は、図４に示すように、マルチコアマイコン３１、通信部３２、センサ部３３、及び入出力ポート３４などを備えて構成される。また、マルチコアマイコン３１は、ＲＯＭ３１ａ、ＲＡＭ３１ｂ、第１コア３１ｃ、及び第２コア３１ｄなどを備えて構成されている。車載装置３０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用され得る。以下、車載装置３０がエンジン制御装置として適用された例について説明する。
【００４３】
第１コア３１ｃと第２コア３１ｄは、コードＲＯＭとしてのＲＯＭ３１ａに保存された並列プログラム３１ａ１’を実行することで、例えばエンジン制御を実行する。具体的には、制御対象機器としての各アクチュエータを駆動することにより燃料噴射量、点火時期、吸入空気量などを制御する。なお、ＲＯＭ３１ａには、エンジン制御で使用される定数データなども保存されている。ＲＡＭ３１ｂは、変数データなどを一時的に格納するものであり、マルチコアマイコン３１が並列プログラム３１ａ１’を実行するときに、各コア３１ｃ、３１ｄにより適宜アクセスされる。通信部３２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う。センサ部３３は、エンジンの状態を検出するための各種のセンサを含む。入出力ポート３４は、エンジンを制御するための各種信号の送受信を行う。
【００４４】
図５は、各コア３１ｃ、３１ｄ内の構成を概念的に示したブロック図である。なお、各コア３１ｃ、３１ｄは同一の構成を有するため、図５には、第１コア３１ｃについてのみ、内部構成を示している。また、図５では、説明を簡単にするため、相対的に高い処理優先度を持つタスク_Ｈと、相対的に低い処理優先度を持つタスク_Ｌの２つのタスクを、実行の有無を判定する対象となる実行タスク候補とした例について説明する。
【００４５】
図５に示すように、各コア３１ｃ、３１ｄは、ＲＯＭ３１ａから読み出した各タスクの処理単位（タスク_Ｈ、タスク_Ｌ）に含まれる命令コードを格納する命令キャッシュメモリ４０ａ、４０ｂを有している。命令キャッシュメモリ４０ａ、４０ｂに格納された各処理単位の命令コードは、命令フェッチ・デコード部４１によって読み出され、デコードされて、それぞれの命令キュー４２ａ、４２ｂに転送される。
【００４６】
なお、図５において、タスク_Ｈ及びタスク_Ｌの処理単位の命令コードが分離したコードＲＯＭ３１ａに記憶されるように描かれているが、コードＲＯＭ３１ａが物理的に分離していることは必ずしも必要ではない。例えば、複数のタスクが共通のコードＲＯＭ３１ａに記憶されても良い。この場合、各コア３１ｃ、３１ｄが、実行タスク候補とする各タスクに対応する数のプログラムカウンタを備えることで、共通のＲＯＭ３１ａから各タスクの処理単位の命令コードを読み出すことができる。一方、命令キュー４２ａ、４２ｂに関しては、実行タスク候補の数に応じた複数の命令キューを備えることが好ましい。これにより、処理単位の切り替えを即座に行うことができるようになるためである。
【００４７】
ただし、各コア３１ｃ、３１ｄは、それぞれのコア３１ｃ、３１ｄに割り付けられたすべてのタスクに対応する数の命令キューを有していなくともよい。実行タスク候補となる複数のタスクの処理単位の命令が複数の命令キューに蓄積されていれば、ほとんどの場合、処理単位の切り替えを支障なく行うことができ、各コア３１ｃ、３１ｄが待機状態となることを回避できるためである。例えば、実行タスク候補とする複数のタスクは、タスク間で処理順序が規定されていないタスクの内、処理優先度の高いタスクから必要数のタスクを選択することができる。そして、実行タスク候補の１つのタスクについて、すべての処理単位の実行が終了した場合、未処理のタスクの中で、最も高い処理優先度のタスクで置き換えれば良い。
【００４８】
各コア３１ｃ、３１ｄは、図５に示すように、アクセスデータ制御ユニット４３を有する。このアクセスデータ制御ユニット４３は、実行タスク候補毎に、アクセスデータテーブル４３ａ、４３ｂを有する。アクセスデータテーブル４３ａ、４３ｂには、上述したように、開始ポイント命令に含まれるアクセスデータ情報が格納される。これにより、アクセスデータ制御ユニット４３は、実行タスク候補となっているタスクの処理単位が実行された場合に、アクセスすることになるデータを、その処理単位の実行前に把握することができる。そして、アクセスデータ制御ユニット４３は、アクセスデータ情報が示すデータに対応する禁止フラグの状態を参照することにより、アクセスデータ情報が示すデータにアクセス可能か否かの判定を行う。この判定において、アクセスデータ情報が示すデータにアクセス可能と判定すると、アクセスデータ制御ユニット４３は、該当データに対応する禁止フラグをセット状態に変化させて、そのデータをロックする。これにより、処理単位の命令を実行する準備が完了する。一方、アクセスデータ情報が示すデータにアクセス不可と判定すると、アクセスデータ制御ユニット４３は、その判定結果を、プロセス切替ユニット４４に与える。
【００４９】
プロセス切替ユニット４４は、上述したように、実行タスク候補の各々のタスクの処理優先度を示す情報を格納するプライオリティテーブル４４ｃを備える。プロセス切替ユニット４４は、プライオリティテーブル４４ｃの各々のタスクの処理優先度を示す情報に基づき、初期的に、最も高い処理優先度を持つタスクの処理単位を実行対象の処理単位として定める。具体的には、プロセス切替ユニット４４は、実行タスク候補となっている各タスクの処理単位の命令をそれぞれ格納しているレジスタ４４ａ、４４ｂの中で、最も高い処理優先度を持つタスクに対応するレジスタに格納されている命令を演算部４５へ転送する。ただし、プロセス切替ユニット４４は、最も高い処理優先度を有するタスクの処理単位がデータへのアクセス不可であるとの判定結果をアクセスデータ制御ユニット４３から得た場合、プロセス切替ユニット４４は、プライオリティテーブル４４ｃを参照して、次に処理優先度が高いタスクの処理単位を実行対象の処理単位とする。換言すれば、プロセス切替ユニット４４は、実行対象とする処理単位を、最も高い処理優先度を持つタスクの処理単位から、次に高い処理優先度を持つタスクの処理単位へと切り替える。このとき、プロセス切替ユニット４４は、実行タスク候補となっている各タスクの処理単位の命令をそれぞれ格納しているレジスタ４４ａ、４４ｂの中で、次に高い処理優先度を持つタスクに対応するレジスタに格納されている命令を演算部４５へ転送する。
【００５０】
演算部４５は、演算ユニット４５ａとレジスタ４５ｂとを有する。プロセス切替ユニット４４から転送された命令は、レジスタ４５ｂに一旦格納される。そして、レジスタ４５ｂに格納された命令に応じた処理が、演算ユニット４５ａにて実行される。このように、各コア３１ｃ、３１ｄでは、処理単位によってデータへのアクセス不可である場合、実行対象となる処理単位の切り替えが行われるので、各コア３１ｃ、３１ｄでの処理単位の実行頻度を高めることができるようになる。
【００５１】
データキャッシュメモリ４６は、実行対象となる処理単位によってアクセスされるデータを、予めメモリから読み出して保存しておくものである。処理単位の実行によって、そのデータが更新される場合には、その更新データがデータキャッシュメモリ４６に一旦保存され、その後、メモリ内のデータが更新データによって書換えられる。
【００５２】
ここで、上述した車載装置３０などの組み込みシステムのためのシングルプログラムでは、各タスク間で処理順序が規定されないことも多い。このため、各コア３１ｃ、３１ｄでデータアクセス待ちのために処理単位の実行処理が中断される状況が生じた場合、処理順序が規定されていないタスクの処理単位を代わりに実行することにより、各コア３１ｃ、３１ｄにおける並列実行頻度を高めることができる。その結果、生成された並列プログラム３１ａ１’の実行速度を早めることが可能となる。
【００５３】
そのため、本実施形態では、並列プログラム３１ａ１’及びマルチコアマイコン３１を、上述したように構成することで、各コア３１ｃ、３１ｄで実行される処理単位同士の相互干渉を防止しつつ、各コア３１ｃ、３１ｄでの処理単位の並列実行頻度を高めることを可能とした。
【００５４】
以下に、並列プログラム３１ａ１’を実行する際のマルチコアマイコン３１の動作を、図６のフローチャートを参照して説明することにより、各コア３１ｃ、３１ｄで実行される処理単位同士の相互干渉を防止しつつ、各コア３１ｃ、３１ｄでの処理単位の並列実行頻度を高めることができるかについてより詳しく説明する。なお、図６のフローチャートは、第１コア３１ｃにて実行される処理を示しているが、他のコアでも同様の処理が実行される。
【００５５】
図６のステップＳ１００では、実行タスク候補毎にそれぞれの処理単位に含まれる命令をロードし、対応する命令キュー４２ａ、４２ｂにエンキューする。ステップＳ１１０では、実行タスク候補の中で最も高い処理優先度を持つタスクを選択し、その選択したタスクに対応する命令キュー４２ａ、４２ｂの命令を参照する。ステップＳ１２０では、参照した命令が開始ポイント命令であるか否かを判定する。ステップＳ１２０にて開始ポイント命令であると判定した場合、ステップＳ１３０の処理に進んで、開始ポイント命令に含まれるアクセスデータ情報を取得し、アクセスデータテーブル４３ａに格納する。そして、ステップＳ１４０において、アクセスデータ情報が示すデータにアクセス可能であるか、つまり、そのデータに対応する禁止フラグがリセット状態となっているかどうかを判定する。なお、処理単位が、メモリに保存されたデータにアクセスするものではない場合には、ステップＳ１４０の判定結果は、常に“Ｙｅｓ”となる。
【００５６】
ステップＳ１４０にて、アクセスデータ情報が示すデータにアクセス可能と判定した場合、ステップＳ１５０の処理に進む。ステップＳ１５０では、アクセス可能と判定したデータに対応する禁止フラグの状態をセット状態に変化させる。これにより、開始ポイント命令以降の処理単位の命令を実行する準備が整う。そのため、ステップＳ１６０では、同タスクの処理単位の次の命令を参照した上で、ステップＳ１２０の処理に戻る。この場合、ステップＳ１２０では、開始ポイント命令では無いと判定され、ステップＳ２１０の処理に進む。さらに、参照している命令は、処理単位の実体的処理に係る命令であるため、ステップＳ２１０においても、終了ポイント命令ではないと判定され、ステップＳ２５０の処理に進む。
【００５７】
ステップＳ２５０では、参照している命令を実行する。すなわち、プロセス切替ユニット４４から該当する命令が演算部４５に転送され、その転送された命令に応じた処理が演算ユニット４５ａにおいて実行される。その後、ステップＳ２６０において、同タスクの処理単位の次の命令を参照した上で、ステップＳ１２０の処理に戻る。このような処理が、参照される命令が終了ポイント命令となるまで、すなわち、処理単位の終了ポイントに達するまで繰り返される。参照される命令が終了ポイント命令となると、ステップＳ２１０における判定結果が“Ｙｅｓ”となる。この場合、ステップＳ２２０の処理に進んで、演算部４５における演算出力データにより、メモリ内のデータを更新する。ただし、実行している処理単位がメモリ内のデータを書き換えるものではない場合には、この処理はスキップされる。
【００５８】
続くステップＳ２３０では、アクセス対象となっていたデータに対応する禁止フラグの状態をセット状態からリセット状態に変化させる。これにより、データのロックが解除され、他コア３１ｄにおいて実行される処理単位によって、該当データへのアクセスが可能となる。そして、ステップＳ２４０にて、同タスクの次の処理単位の命令を参照した上で、ステップＳ１２０の処理に戻る。このように、データへのアクセスが可能である限り、最も高い処理優先度を持つタスクの処理単位が順番に実行されていく。
【００５９】
処理単位の実行中に利用するデータへのアクセスが不可である場合、ステップＳ１４０における判定結果が“Ｎｏ”となる。この場合、ステップＳ１７０の処理に進み、実行対象となっているタスクは、実行タスク候補の中で最も低い処理優先度を持っているタスクであるか否かが判定される。このステップＳ１７０の判定結果が“Ｎｏ”である場合、実行タスク候補の中に、実行対象となっているタスクよりも低い処理優先度を有するタスクがあることになる。そのため、ステップＳ１８０の処理に進んで、次に処理優先度が高いタスクを実行対象とし、そのタスクに対応する命令キュー４２ｂに蓄積されている命令を参照した上で、ステップＳ１２０の処理に戻る。このようなタスクの切り替えが行われた場合、参照した命令は、次に処理優先度が高いタスクの処理単位の開始ポイント命令となる。従って、ステップＳ１２０における判定結果が“Ｙｅｓ”となり、上述したように、実行対象となった処理単位は、あらためて、アクセス予定のデータへのアクセスが可能であるかどうかにより、その実行可否が判定される。
【００６０】
一方、ステップＳ１７０において、実行対象となっているタスクは、実行タスク候補の中で最も低い処理優先度を持っているタスクと判定された場合、実行タスク候補の中に、よい低い処理優先度を持っているタスクは存在しない。このため、ステップＳ１７０の判定結果が“Ｙｅｓ”となった場合には、ステップＳ１９０の処理に進んで、一定時間待機する。そして、ステップＳ２００の処理で、実行タスク候補の中で最も高い処理優先度を持つタスクの処理単位の命令を参照する。つまり、最も低い処理優先度を持つタスクが実行対象となっているときに、処理単位の切り替えを行う必要が生じた場合には、一定時間待機した後、最も高い処理優先度を持つタスクの処理単位に切り替えるのである。これにより、再び、最も高い処理優先度を持つタスクの処理単位から順に、アクセス予定のデータへのアクセスが可能であるかどうかにより、その実行可否を判定した上で、実行可能な処理単位の命令を実行させることが可能となる。
【００６１】
以上説明したように、本発明の第１実施形態によれば、並列プログラム３１ａ１’の各タスクのそれぞれの処理単位によりアクセスされるデータの各々に個別に対応するように設定される禁止フラグを用いることにより、各コア３１ｃ、３１ｄにて実行しようとするタスクの処理単位が、その実行時に利用するデータにアクセス可能であるか否かを判定することが可能となる。従って、データへのアクセス不可と判定された場合には、そのデータへのアクセスが可能となるまで待機するのではなく、実行可能な処理単位への切り替えを行うことができるようになる。このため、生成された並列プログラム３１ａ１‘の並列度が低くても、複数のコア３１ｃ、３１ｄでの処理単位の並列実行頻度を高めることが可能となる。
【００６２】
（第２実施形態）
次に、本発明の第２実施形態について説明する。上述した第１実施形態では、並列プログラム３１ａ１’の各タスクのそれぞれの処理単位によりアクセスされるデータの各々に個別に対応するように設定される禁止フラグを用いて、各コア３１ｃ，３１ｄにて実行される処理単位の相互干渉を防止するものであった、しかしながら、１つのコアで実行中の処理単位によってアクセスされるデータへの、他のコアで実行される処理単位によるアクセスを禁止する手法は、上述した第１実施形態の手法に限られない。本第２実施形態では、第１実施形態とは異なる手法の一例について説明する。
【００６３】
第２実施形態におけるマルチコアマイコン３１の構成を図７に示す。図７に示されるように、本実施形態のマルチコアマイコン３１は、メモリへのアクセスを管理するメモリプロテクションユニット（ＭＰＵ）４７を備える。ＭＰＵ４７は、同一データに対するアクセスを単一のコア３１ｃ、３１ｄのみに許可するように作動する。すなわち、ＭＰＵ４７は、いずれのコア３１ｃ、３１ｄからもアクセスされていないデータに対して、いずれかのコア３１ｃ、３１ｄからのアクセス要求があった場合には、そのアクセス要求を許可する。しかし、ＭＰＵ４７は、いずれかのコア３１ｃ、３１ｄによってアクセスされているデータに対して、別のコア３１ｃ、３１ｄからのアクセス要求があっても、そのアクセス要求を拒否する。
【００６４】
ＭＰＵ４７に対するデータのアクセス要求は、図７に示すように、各コア３１ｃ、３１ｄのアクセスデータ制御ユニット４３から出力される。このアクセス要求に対し、ＭＰＵ４７は、アクセスを許可する許可通知もしくはアクセスを拒否する拒否通知を、アクセスデータ制御ユニット４３に返送する。各コア３１ｃ、３１ｄのアクセスデータ制御ユニット４３は、図８のステップＳ３４０において、ＭＰＵ４７からの許可通知もしくは拒否通知に基づき、メモリに保存されたデータへのアクセスの可否を判定する。
【００６５】
アクセスデータ制御ユニット４３がＭＰＵ４７から許可通知を受領すると、そのコアは、処理単位の実行のために該当データを読み出して、データキャッシュメモリ４６に保存する。さらに、図８のフローチャートのステップＳ３５０において、そのコアのアクセスデータ制御ユニット４３が、ＭＰＵ４７に対して、読み出したデータをロックするよう要求する。このロック要求に応じて、ＭＰＵ４７は該当データへの他コアからのアクセスを禁止するようになる。
【００６６】
そして、処理単位の実体的処理に係るすべての命令が終了し、その処理単位の終了ポイントに達すると、図８のフローチャートのステップＳ４１０における判定結果が“Ｙｅｓ”となり、ステップＳ４２０〜Ｓ４４０の処理が実行される。この内、ステップＳ４３０の処理では、アクセスデータ制御ユニット４３が、ＭＰＵ４７に対して、ロックしているデータをアンロックするよう要求する。このアンロック要求に応じて、ＭＰＵ４７は該当データを他コアからのアクセスにも開放するようになる。
【００６７】
その他のマルチコアマイコン３１の構成や、図８のフローチャートにおける処理は、上述した第１実施形態と同様であるため、説明を省略する。
【００６８】
以上の第２実施形態によっても、第１実施形態と同様に、各コア３１ｃ、３１ｄにて実行しようとするタスクの処理単位が、その実行時に利用するデータにアクセス可能であるか否かを判定することができる。従って、データへのアクセス不可と判定された場合には、そのデータへのアクセスが可能となるまで待機するのではなく、実行可能な処理単位への切り替えを行うことができるようになる。このため、生成された並列プログラム３１ａ１‘の並列度が低くても、複数のコア３１ｃ、３１ｄでの処理単位の並列実行頻度を高めることが可能となる。
【００６９】
（第３実施形態）
次に、本発明の第３実施形態について説明する。上述した第１実施形態及び第２実施形態では、１つのコアがアクセスしているデータへの他コアによるアクセスを禁止することにより、複数のコアで実行される処理単位による相互干渉を防止するものであった。
【００７０】
本実施形態では、上述した第１実施形態又は第２実施形態の構成に加えて、例えば、１つのコアが、制御上、特に重要なデータへのアクセスを行って、そのデータの更新などを行う場合に、他コアにおいて別タスクの処理単位への切り替えを禁止するものである。これにより、他コアにおける切り替え後の別タスクの処理単位によって、誤って、その重要なデータが影響を受けることを確実に防止することができる。加えて、同じタスク内の処理単位の間では、従来の並列化コンパイル方法により、依存関係に従って、例えば、同期ポイント命令追加部によって待合せ処理を追加することが可能である。これにより同じタスク内の処理単位同士で、誤って、その重要なデータが影響を受けることを確実に防止することができる。詳細は、特開２０１５−１８０７号公報を参照されたい。
【００７１】
本実施形態によるマルチコアマイコン３１は、図９に示すように、各コア３１ｃ、３１ｄのアクセスデータ制御ユニット４３同士が通信可能に構成されている。そして、各コア３１ｃ、３１ｄのアクセスデータ制御ユニット４３は、開始ポイント命令に続いて、他コアにおいて別タスクの処理単位への切り替えを禁止する排他区間の開始命令が設定されている場合（図１０のフローチャートのステップＳ６６０：Ｙｅｓ）、他コアのアクセスデータ制御ユニットへ、別タスクの制御単位への切り換えの禁止要求であるプリエンプション禁止要求を出力する（図１０のフローチャートのステップＳ６７０）。なお、図１０のフローチャートは、第１実施形態の構成による作動を前提としたものであるが、第２実施形態の構成に対して、本実施形態の構成を追加しても良い。
【００７２】
このプリエンプション禁止要求を受信した他コアのアクセスデータ制御ユニットは、実行対象となっているタスクの制御処理がアクセス予定のデータにアクセス不可であっても（図１０のフローチャートのステップＳ５４０：Ｎｏ）、図１０のフローチャートのステップＳ５７０に示すように、プリエンプション禁止要求に応じて、そのままステップＳ１２０の処理に戻ることにより、別タスクの処理単位への切り換えを禁止する。
【００７３】
排他区間開始命令と対をなすように、終了ポイント命令の直前に、排他区間終了命令が設定される。処理単位の実体的処理が終了して、排他区間終了命令が参照されると、図１０のフローチャートの判定結果が“Ｙｅｓ”となる。この場合、ステップＳ７２０の処理に進んで、他コアに対して出力しているプリエンプション禁止要求を停止する。
【００７４】
その他のマルチコアマイコン３１の構成や、図８のフローチャートにおける処理は、上述した第１実施形態と同様であるため、説明を省略する。
【００７５】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００７６】
例えば、上述した第１及び第２実施形態では、最初に最も高い処理優先度を持つタスクの処理単位に関して、その処理単位の命令によってアクセス予定のデータがアクセス可能であるかどうかを判定し、アクセス不可である場合に、実行対象となる処理単位を、次に高い処理優先度を持つタスクの処理単位に切り替えるものであった。しかしながら、例えば、最初に、実行タスク候補の各タスクの処理単位の命令によってアクセス予定のデータにアクセス可能であるかどうかを判定し、アクセス可能であるタスクの中で、最も処理優先度の高いタスクの処理単位を実行対象として決定しても良い。
【００７７】
また、上述した実施形態では、マルチコアマイコン３１を車載装置３０として適用する例について説明したが、マルチコアマイコン３１の適用対象はこれに限られない。
【符号の説明】
【００７８】
１：自動並列化コンパイラ、１０：コンピュータ、１０ａ：字句解析部、１０ｂ：意味解析部、１０ｃ：依存関係解析部、１０ｄ：コア割付及びスケジューリング部、１０ｅ：同期ポイント命令追加部、１０ｆ：コード生成部、１１：ディスプレイ、１２：ＨＤＤ、１３：ＣＰＵ、１４：ＲＯＭ、１５：ＲＡＭ、１６：入力装置、１７：読取部、１８：記憶媒体、２０：コンパイラ、３０：車載装置、３１：マルチコアマイコン、３１ａ：ＲＯＭ３１ａ１：並列プログラム、３１ｂ：ＲＡＭ、３１ｃ：第１コア、３１ｄ：第２コア、３２：通信部、３３：センサ部、３４：入出力ポート、４０ａ、４０ｂ：命令キャッシュメモリ、４１：命令フェッチ・デコード部、４２ａ、４２ｂ：命令キュー、４３：アクセスデータ制御ユニット、４３ａ、４３ｂ：アクセスデータテーブル、４４：プロセス切替ユニット、４４ａ、４４ｂ：レジスタ、４４ｃ：プライオリティテーブル、４５：演算部、４５ａ：演算ユニット、４５ｂ：レジスタ、４６：データキャッシュメモリ、４７：ＭＰＵ
【図１】
2019215804.tif 000003
【図２】
2019215804.tif 000004
【図３】
2019215804.tif 000005
【図４】
2019215804.tif 000006
【図５】
2019215804.tif 000007
【図６】
2019215804.tif 000008
【図７】
2019215804.tif 000009
【図８】
2019215804.tif 000010
【図９】
2019215804.tif 000011
【図１０】
2019215804.tif 000012