(57)【要約】【課題】マルチコアプロセッサの性能を有効に活用できる並列プログラムを生成可能な並列化方法を提供すること。【解決手段】並列化方法は、逐次プログラムから複数のタスクを抽出するとともに、逐次プログラムから複数のハンドラ処理を抽出して各ハンドラ処理の実行動作を把握する手順を有している（Ｓ１０、Ｓ３０）。並列化方法は、目標実行時間を決定するとともに、複数のタスクを逐次タスクと並列タスクとに分類する手順を有している（Ｓ４０、Ｓ５０）。そして、並列化方法は、目標実行時間を基準とした所定範囲内に全タスクと全ハンドラ処理がおさまるように、複数のハンドラ処理をハンドラ実行コアのみに割り当て、並列タスクとハンドラ処理との干渉を抑制しつつ、複数のタスクをハンドラ実行コア及びハンドラ非実行コアに不均一に割り当てる手順を有している（Ｓ８０）。【選択図】図２
2020181407.tif 000002
【特許請求の範囲】
【請求項１】
シングルコアプロセッサで処理可能なように記述された逐次プログラムから、複数のコア（２１ｃ〜２１ｄ）を備えたマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラム（２１ａ１）をコンピュータ（１０）に生成させるための並列化方法であって、
前記逐次プログラムから複数のタスクを抽出するタスク抽出手順（Ｓ１０）と、
前記逐次プログラムから複数のハンドラ処理を抽出し、各ハンドラ処理の実行動作を把握するハンドラ把握手順（Ｓ３０）と、
抽出した複数の前記タスクの総実行時間と、抽出した複数の前記ハンドラ処理の総実行時間と、前記マルチコアプロセッサのコア数とから、前記マルチコアプロセッサによる複数の前記タスクと複数の前記ハンドラ処理の実行開始から実行終了までの目標実行時間を決定する目標決定手順（Ｓ４０）と、
複数の前記タスクを、各ハンドラ処理の実行動作に基づいて、前記マルチコアプロセッサを構成する単一コア上で逐次動作する逐次タスクと、前記マルチコアプロセッサを構成する複数コア上で並列動作する並列タスクとに分類する分類手順（Ｓ５０）と、
複数の前記コアにおける一つのコアのみを前記ハンドラ処理がまとめて割り当てられるハンドラ実行コアとし、他のコアを前記ハンドラ処理が割り当てられないハンドラ非実行コアとし、前記目標実行時間を基準とした所定範囲内に全タスクと全ハンドラ処理がおさまるように、複数の前記ハンドラ処理を前記ハンドラ実行コアのみに割り当て、前記並列タスクと前記ハンドラ処理との干渉を抑制しつつ、複数の前記タスクを前記ハンドラ実行コア及び前記ハンドラ非実行コアに不均一に割り当てる割当手順（Ｓ８０）と、を備えている並列化方法。
【請求項２】
前記目標決定手順は、複数の前記タスクの総実行時間と複数の前記ハンドラ処理の総実行時間とを加算して前記コア数で除算した値を、前記ハンドラ非実行コアの前記目標実行時間である第１目標実行時間として決定し、前記第１目標実行時間から複数の前記ハンドラ処理の総実行時間を減算した値を前記ハンドラ実行コアの前記目標実行時間である第２目標実行時間として決定する請求項１に記載の並列化方法。
【請求項３】
前記割当手順は、各タスクと各ハンドラ処理のデータ依存性の有無を解析し、複数の前記タスクのうち前記データ依存性がないタスクである非依存タスクに関しては、前記目標実行時間を基準とした所定範囲内におさまるように、前記ハンドラ実行コアと前記ハンドラ非実行コアのいずれかに割り当てる請求項１又は２に記載の並列化方法。
【請求項４】
前記割当手順は、複数の前記タスクのうち前記データ依存性があるタスクである依存タスクに関して、互いに前記データ依存性がある前記依存タスクと前記ハンドラ処理とにアトミック性がない場合、前記目標実行時間を基準とした所定範囲内におさまるように、前記ハンドラ実行コアと前記ハンドラ非実行コアのいずれかに割り当てる請求項３に記載の並列化方法。
【請求項５】
前記割当手順は、前記依存タスクに関して、前記アトミック性がある場合、前記依存タスクによってアクセスされるデータの一貫性を保つ保持処理を前記並列プログラムに追加しつつ、前記目標実行時間を基準とした所定範囲内におさまるように、前記ハンドラ実行コアと前記ハンドラ非実行コアのいずれかに割り当てる請求項４に記載の並列化方法。
【請求項６】
前記保持処理は、前記依存タスクが割り当てられた前記コアとは異なるコアから、前記データへのアクセスをブロックして前記データの一貫性を保つ機能を備えている請求項５に記載の並列化方法。
【請求項７】
前記データへのアクセスをブロックする機能として、前記依存タスクが割り当てられた前記コアから前記データへアクセスしている間、前記依存タスクが割り当てられた前記コアとは異なるコアによる前記データへのアクセスを保留させるコードを、前記依存タスク、又は、前記依存タスクに干渉するハンドラ処理のアクセスコードに付与する機能を備えている請求項６に記載の並列化方法。
【請求項８】
請求項１乃至７のいずれか１項に記載の並列化方法によって生成された前記並列プログラムが記憶された記憶部（２１ａ）と、前記並列プログラムを実行する複数の前記コアと、を備えた半導体制御装置。
【請求項９】
車両に搭載された車載機器を制御するものであり、
請求項１乃至７のいずれか１項に記載の並列化方法によって生成された前記並列プログラムが記憶された記憶部（２１ａ）と、前記並列プログラムを実行することで前記車載機器を制御するための演算を行う複数の前記コアと、を備えた半導体制御装置と、
複数の前記コアによる演算に用いる信号を前記半導体制御装置に出力するとともに、複数の前記コアによる演算結果を前記半導体制御装置から取得して前記車載機器に出力する周辺機器（２２〜２４）と、を備えた車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、並列化方法、半導体制御装置、及び車載制御装置に関する。
【背景技術】
【０００２】
従来、特許文献１に開示されているように、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した並列プログラムを生成する並列化方法がある。
【０００３】
この並列化方法は、逐次プログラムを構成する処理群を、マルチコアプロセッサを構成する単一コア上で逐次動作する逐次処理と、マルチコアプロセッサを構成する複数コア上で並列動作する並列処理とに分類する分類手順と、分類手順によって並列処理に分類された処理を複数コアに対して不均一に割り当てる不均一割当処理を実行する割当手順と、分類手順の分類結果および割当手順の割当結果に基づいて並列プログラムを生成する生成手順と、を備えている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−２１８５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、実際の処理は、割込みハンドラ処理の動作によって実行時間がばらつくことがある。このため、特許文献１では、並列処理に分類された処理を複数コアに対して不均一に割り当てる際に、先手に割り当てることができない可能性がある。よって、特許文献１では、マルチコアプロセッサの性能を有効に活用できない並列プログラムを生成する可能性がある。
【０００６】
本開示は、上記問題点に鑑みなされたものであり、マルチコアプロセッサの性能を有効に活用できる並列プログラムを生成可能な並列化方法を提供することを第１の目的とする。また、本開示は、マルチコアプロセッサの性能を有効に活用できる半導体制御装置を提供することを第２の目的とする。さらに、本開示は、マルチコアプロセッサの性能を有効に活用できる車載制御装置を提供することを第３の目的とする。
【課題を解決するための手段】
【０００７】
上記第１の目的を達成するために本開示は、
シングルコアプロセッサで処理可能なように記述された逐次プログラムから、複数のコア（２１ｃ〜２１ｄ）を備えたマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラム（２１ａ１）をコンピュータ（１０）に生成させるための並列化方法であって、
車載制御装置逐次プログラムから複数のタスクを抽出するタスク抽出手順（Ｓ１０）と、
車載制御装置逐次プログラムから複数のハンドラ処理を抽出し、各ハンドラ処理の実行動作を把握するハンドラ把握手順（Ｓ３０）と、
抽出した複数の車載制御装置タスクの総実行時間と、抽出した複数の車載制御装置ハンドラ処理の総実行時間と、車載制御装置マルチコアプロセッサのコア数とから、車載制御装置マルチコアプロセッサによる複数の車載制御装置タスクと複数の車載制御装置ハンドラ処理の実行開始から実行終了までの目標実行時間を決定する目標決定手順（Ｓ４０）と、
複数の車載制御装置タスクを、各ハンドラ処理の実行動作に基づいて、車載制御装置マルチコアプロセッサを構成する単一コア上で逐次動作する逐次タスクと、車載制御装置マルチコアプロセッサを構成する複数コア上で並列動作する並列タスクとに分類する分類手順（Ｓ５０）と、
複数の車載制御装置コアにおける一つのコアのみを車載制御装置ハンドラ処理がまとめて割り当てられるハンドラ実行コアとし、他のコアを車載制御装置ハンドラ処理が割り当てられないハンドラ非実行コアとし、車載制御装置目標実行時間を基準とした所定範囲内に全タスクと全ハンドラ処理がおさまるように、複数の車載制御装置ハンドラ処理を車載制御装置ハンドラ実行コアのみに割り当て、車載制御装置並列タスクと車載制御装置ハンドラ処理との干渉を抑制しつつ、複数の車載制御装置タスクを車載制御装置ハンドラ実行コア及び車載制御装置ハンドラ非実行コアに不均一に割り当てる割当手順（Ｓ８０）と、を備えていることを特徴とする。
【０００８】
このように、本開示は、上記のように決定した目標実行時間を基準とした所定範囲内に全タスクと全ハンドラ処理がおさまるように、全タスクと全ハンドラ処理を複数のコアに割り当てる。このため、本開示は、全タスクと全ハンドラ処理を複数のコアに割り当てやすくなる。また、本開示は、複数のハンドラ処理をハンドラ実行コアのみに割り当てるとともに、複数のタスクをハンドラ処理との干渉を抑制しつつ複数のコアに不均一に割り当てる。このため、本開示は、ハンドラ実行コアがハンドラ処理を実行している間に、その他のコアがタスクの実行を中断することを抑制可能な並列プログラムを生成することができる。
【０００９】
また、上記第２の目的を達成するために本開示は、
請求項１乃至７のいずれか１項に記載の並列化方法によって生成された並列プログラムが記憶された記憶部（２１ａ）と、並列プログラムを実行する複数のコアと、を備えていることを特徴とする。このため、本開示は、マルチコアプロセッサの性能を有効に活用できる。
【００１０】
また、上記第３の目的を達成するために本開示は、
車両に搭載された車載機器を制御するものであり、
請求項１乃至７のいずれか１項に記載の並列化方法によって生成された並列プログラムが記憶された記憶部（２１ａ）と、並列プログラムを実行することで車載機器を制御するための演算を行う複数のコアと、を備えた半導体制御装置と、
複数のコアによる演算に用いる信号を半導体制御装置に出力するとともに、複数のコアによる演算結果を半導体制御装置から取得して車載機器に出力する周辺機器（２２〜２４）と、を備えていることを特徴とする。このため、本開示は、マルチコアプロセッサの性能を有効に活用できる。
【００１１】
なお、特許請求の範囲、およびこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１２】
【図１】実施形態におけるコンピュータの概略構成を示すブロック図である。
【図２】実施形態における並列化方法を示すフローチャートである。
【図３】実施形態における不均一化方針に基づく並列化処理を示すフローチャートである。
【図４】実施形態における依存性解析処理を示すフローチャートである。
【図５】実施形態における並列プログラムの概略構成を示すイメージ図である。
【図６】実施形態における車載制御装置の概略構成を示すブロック図である。
【図７】実施形態における並列プログラムに基づく動作を示すイメージ図である。
【図８】変形例における並列化方法を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下において、図１〜図７を参照しながら、本開示を実施するための形態を説明する。
【００１４】
まず、図１〜図４を用いて、逐次プログラムから並列プログラム２１ａ１を生成する生成方法に関して説明する。この生成方法は、逐次プログラムから並列プログラム２１ａ１をコンピュータ１０に生成させる並列化方法と言える。
【００１５】
逐次プログラムは、コアを一つだけ有するシングルコアプロセッサで処理可能なように記述されたプログラムである。逐次プログラムは、複数の処理を含んでいる。一方、並列プログラム２１ａ１は、複数のコア２１ｃ〜２１ｅを有するマルチコアプロセッサ２１で処理可能なように記述されたプログラムである。並列プログラム２１ａ１は、逐次プログラムにおける複数の処理が、各コア２１ｃ〜２１ｅが実行可能なように、それぞれのコア２１ｃ〜２１ｅに割り当てられている。並列プログラム２１ａ１は、逐次プログラムにおける複数の処理が、各コア２１ｃ〜２１ｅが実行可能なように、それぞれのコア２１ｃ〜２１ｅに割り振られているとも言える。なお、本実施形態では、一例として、ホモジニアスタイプのマルチコアプロセッサ２１を採用する。マルチコアプロセッサ２１に関しては、後程説明する。
【００１６】
また、本実施形態では、一例として、複数の時間同期処理ｔｔ１〜ｔｔ５、複数の角度同期処理ａｔ１〜ａｔ９、複数の割込みハンドラ処理ｈｄ１〜ｈｄ４を含む逐次プログラムを採用する。しかしながら、本開示は、これに限定されず、他の処理を含んだ逐次プログラムを採用することができる。このため、並列プログラム２１ａ１は、これら複数の処理が各コア２１ｃ〜２１ｅに割り当てられたものとなる。
【００１７】
なお、第１時間同期処理ｔｔ１〜第５時間同期処理ｔｔ５は、時間に同期してコアが実行する処理である。つまり、第１時間同期処理ｔｔ１〜第５時間同期処理ｔｔ５は、予め決められた一定の時間毎にコアが実行する処理である。一方、第１角度同期処理ａｔ１〜第９角度同期処理ａｔ９は、回転角度に同期してコアが実行する処理である。つまり、複数の角度同期処理ａｔ１〜ａｔ９は、予め決められた一定の回転角度後にコアが実行する処理である。回転角度は、例えば、クランク軸の回転角度などを採用できる。第１割込みハンドラ処理ｈｄ１〜第４割込みハンドラ処理ｈｄ４は、割込みの発生に対応してコアが実行する処理である。
【００１８】
また、処理は、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。より具体的には、マルチコアプロセッサ２１上で動作するＯＳが管理するタスク、あるいは割込みハンドラである。
【００１９】
よって、逐次プログラムは、複数のタスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９を含むタスク群と、複数のハンドラ処理ｈｄ１〜ｈｄ４とを有している。以下においては、上記時間同期処理ｔｔ１〜ｔｔ５、角度同期処理ａｔ１〜ａｔ９を区別する必要がない場合は、まとめてタスクとも称する。また、上記割込みハンドラ処理ｈｄ１〜ｈｄ４を区別する必要がない場合は、まとめてハンドラ処理とも称する。
【００２０】
コンピュータ１０は、並列化方法に従って動作することで、並列プログラム２１ａ１を生成する。よって、コンピュータ１０は、並列化方法を実行する並列化ツールとも言える。また、コンピュータ１０は、並列プログラム２１ａ１を生成するため、プログラム生成ツールとも言える。
【００２１】
図１に示すように、コンピュータ１０は、例えば、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。しかしながら、本開示は、これに限定されず、例えばＨＤＤ１２を備えていないコンピュータ１０であっても採用できる。なお、以下においては、ＨＤＤ１２、ＲＯＭ１４、ＲＡＭ１５を区別する必要がない場合、単に記憶部とも記載する。
【００２２】
また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を、読取部１７によって読み取り可能に構成されている。よって、コンピュータ１０は、記憶媒体１８に記憶された記憶内容が入力される。なお、読取部１７は、記憶媒体１８記憶された記憶内容を読み取り可能に構成された記憶媒体リーダーとも言える。
【００２３】
自動並列化コンパイラ１は、並列化方法が記述されたプログラムである。よって、自動並列化コンパイラ１は、並列化方法に相当するとも言える。以下においては、自動並列化コンパイラ１を並列化コンパイラ１と略称で記載することもある。
【００２４】
コンピュータ１０は、読取部１７によって並列化コンパイラ１や逐次プログラムを読み込み、ＨＤＤ１２、ＲＯＭ１４、ＲＡＭ１５などに保存する。コンピュータ１０は、ＣＰＵ１３がＲＡＭ１５を一時記憶領域として用いつつ、並列化コンパイラ１を実行することで、逐次プログラムから並列プログラム２１ａ１を生成する。
【００２５】
ここで、図２、図３、図４を参照しながら本実施形態の並列化方法について説明する。並列化コンパイラ１には、図２、図３、図４のフローチャートが記述されている。また、コンピュータ１０は、図２、図３、図４のフローチャートを実行することで、逐次プログラムから並列プログラム２１ａ１を生成する。
【００２６】
なお、コンピュータ１０は、並列化コンパイラ１を読み込むことで、図２のフローチャートを実行する。また、コンピュータ１０は、ユーザからの指示によって、図２のフローチャートを実行してもよい。
【００２７】
ステップＳ１０では、自動並列化対象となる逐次プログラムが入力され、タスクが抽出される（タスク抽出手順）。ステップＳ１０は、逐次プログラムを取り込む処理とタスクを抽出する処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ１０を実行することで、逐次プログラムを取り込むとともに、逐次プログラムからタスクを抽出する。つまり、コンピュータ１０は、ＣＰＵ１３が参照可能なように、逐次プログラムを記憶部に取り込む。そして、ＣＰＵ１３は、取り込んだ逐次プログラムから全タスクを抽出する。
【００２８】
ステップＳ２０では、各タスクのタスク実行時間とタスク実行周期が入力される。ステップＳ２０は、逐次プログラムを構成する各タスクのタスク実行時間とタスク実行周期を取り込む処理を、コンピュータ１０に実行させる手順である。また、ステップＳ２０は、逐次プログラムを構成する各タスクのタスク実行時間とタスク実行周期を取り込んで、タスク実行時間とタスク実行周期を把握（確認）する処理を、コンピュータ１０に実行させる手順とも言える。このとき、ステップＳ２０は、コンピュータ１０に逐次プログラムを解析させて、タスク実行時間とタスク実行周期を把握（確認）させる。
【００２９】
よって、コンピュータ１０は、ステップＳ２０を実行することで、逐次プログラムを構成する各タスクのタスク実行時間とタスク実行周期を取り込む。つまり、コンピュータ１０は、ＣＰＵ１３が参照可能なように、タスク実行時間とタスク実行周期を記憶部に取り込んで、実行時間と実行周期を把握する。なお、タスク実行時間とタスク実行周期の決定方法などに関しては、特開２０１６−２１８５０３号公報を参照して適用することができる。
【００３０】
ステップＳ３０は、ハンドラ処理の実行動作が入力される（ハンドラ把握手順）。ハンドラ処理の実行動作は、ハンドラ実行タイミング、ハンドラ実行時間、ハンドラ実行回数などが含まれる。ステップＳ３０は、各ハンドラ処理の実行動作を取り込む処理を、コンピュータ１０に実行させる手順である。また、ステップＳ３０は、逐次プログラムから各ハンドラ処理の実行動作を取り込んで、その実行動作を把握（確認）する処理を、コンピュータ１０に実行させる手順とも言える。
【００３１】
よって、コンピュータ１０は、ステップＳ３０を実行することで、各ハンドラ処理の動作を取り込む。つまり、コンピュータ１０は、ＣＰＵ１３が参照可能なように、各ハンドラ処理の動作を記憶部に取り込んで、ハンドラ処理の動作を把握する。
【００３２】
詳述すると、ＣＰＵ１３は、ステップＳ１０で取り込んだ逐次プログラムから全ハンドラ処置を抽出し、各ハンドラ処理の動作を記憶部に取り込む。なお、ＣＰＵ１３は、ステップＳ１０において、逐次プログラムから全ハンドラ処置を抽出してもよい。
【００３３】
ハンドラ実行タイミングは、どのようなタイミングでハンドラ処理が実行されるかを示す。ハンドラ実行タイミングは、各タスクの実行に干渉するタイミングで、ハンドラ処理が実行されるか否かを示す情報とも言える。並列化コンパイラ１は、タスクとハンドラ処理とが干渉するか否かを把握するために、コンピュータ１０にハンドラ処理の動作を取り込ませる。
【００３４】
ハンドラ実行時間は、マルチコアプロセッサ２１がハンドラ処理を実行するのに要する時間である。よって、本実施形態では、マルチコアプロセッサ２１が第１ハンドラ処理ｈｄ１〜第４ハンドラ処理ｈｄ４を実行するのに要する時間である。一方、ハンドラ実行回数は、マルチコアプロセッサ２１がハンドラ処理を実行する回数である。よって、本実施形態では、マルチコアプロセッサ２１が第１ハンドラ処理ｈｄ１〜第４ハンドラ処理ｈｄ４を実行する回数、つまり４回である。
【００３５】
ステップＳ４０は、目標値が入力される（目標決定手順）。ステップＳ４０は、目標値を決定（算出）する処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ４０を実行することで、目標値を算出する。つまり、コンピュータ１０は、ＣＰＵ１３が目標値を算出する。目標値は、目標実行時間に相当する。
【００３６】
目標値は、全タスクと全ハンドラ処理を各コア２１ｃ〜２１ｅに割り当てる際の基準（目安）とする時間的範囲である。目標値は、概略的には、抽出した複数のタスクの総実行時間と、抽出した複数のハンドラ処理の総実行時間と、マルチコアプロセッサ２１のコア数とから決定される。目標値は、マルチコアプロセッサ２１による複数のタスクと複数のハンドラ処理の実行開始から実行終了までの時間とも言える。つまり、目標値は、各コア２１ｃ〜２１ｅが、割り当てられた各タスクと各ハンドラ処理の実行を開始してから実行を終了するまでに要する時間の予測値とも言える。この目標値の算出方法に関しては、後程説明する。
【００３７】
よって、コンピュータ１０は、例えば目標値を超えない範囲で、全タスクと全ハンドラ処理を各コア２１ｃ〜２１ｅに割り当てることになる。つまり、並列化コンパイラ１は、目標値を超えない範囲で、全タスクと全ハンドラ処理を各コア２１ｃ〜２１ｅに割り当てる手順を、コンピュータ１０に実行させる。また、本開示は、目標値から所定値以上超えない範囲で、全タスクと全ハンドラ処理を各コア２１ｃ〜２１ｅに割り当てるものであっても採用できる。
【００３８】
ここで、目標値の算出方法に関して説明する（目標決定手順）。後程説明するが、本実施形態では、ハンドラ処理を実行するハンドラ実行コアとして第１コア２１ｃを採用し、ハンドラ処理を実行しないハンドラ非実行コアとして第２コア２１ｄと第３コア２１ｅを採用する。目標値の算出方法は、ハンドラ実行コアとハンドラ非実行コアとで異なる。つまり、第１コア２１ｃと、第２コア２１ｄおよび第３コア２１ｅとで異なる。
【００３９】
第２コア２１ｄおよび第３コア２１ｅに対する第１目標値は、（Σタスク実行時間＋Σハンドラ実行時間）÷総コア数で算出する。第１目標値は、図５のタイミングｔ０〜ｔ２の期間に相当する。一方、第１コア２１ｃに対する第２目標値は、第１目標値−Σハンドラ実行時間で算出する。第２目標値は、図５のタイミングｔ０〜ｔ１の期間に相当する。これによって、最短の実行時間を目標値とすることができる。第１目標値は、第１目標実行時間に相当する。第２目標値は、第２目標実行時間に相当する。
【００４０】
ステップＳ５０では、逐次プログラムを構成する各タスクについて、逐次タスクとするか、並列タスクとするかを分類する（分類手順）。より具体的には、逐次プログラムを入力として、各タスクを逐次タスクまたは並列タスクのいずれかに分類する。つまり、逐次プログラムを構成するタスク群（複数のタスク）を、マルチコアプロセッサ２１における単一コア上で逐次動作する逐次タスクと、マルチコアプロセッサ２１を構成する複数コア上で並列動作する並列タスクとに分類する。
【００４１】
コンピュータ１０は、各ハンドラ処理の実行動作を用いて、複数のタスクを逐次タスクと並列タスクとに分類する。詳述すると、コンピュータ１０は、例えば、各タスクの実行時間を判断値として、それが一定値以上であれば仮の並列タスクとし、一定値未満であれば逐次タスクに分類する。そして、コンピュータ１０は、ハンドラ処理の実行動作に基づいて、仮の並列タスクを並列タスクとするか否かを判定する。
【００４２】
コンピュータ１０は、例えば、仮の並列タスクのうちハンドラ処理が干渉する可能性が低いものを並列タスクに採用し、干渉する可能性が高いものを並列タスクに採用せず逐次タスクとする。なお、機能安全に対応するために、冗長化された特定のコアで実行させたいなど、特段の事情があるタスクは、逐次タスクとする。
【００４３】
ステップＳ５０は、各タスクを逐次タスクと並列タスクに分類する処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ５０を実行することで、各タスクを逐次タスクと並列タスクに分類する。
【００４４】
ステップＳ６０は、逐次タスクを実行するコアを決定する。逐次処理を実行するコアの選定にあたっては、ユーザ側からの指定に基づいてもよく、プログラムの構造解析等から自動的に選定してもよい。ステップＳ６０は、逐次タスクを実行するコアを選定する処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ６０を実行することで、逐次処理を実行するコアを選定する。
【００４５】
逐次タスクを実行するコアは、上記ハンドラ実行コアに相当する。ハンドラ実行コアは、全てのハンドラ処理を実行するタスクである。並列プログラム２１ａ１は、複数のコア２１ｃ〜２１ｅにおける一つのコアだけがハンドラ処理を実行するように構成されている。
【００４６】
つまり、複数のコア２１ｃ〜２１ｅは、一つのコアのみがハンドラ処理がまとめて割り当てられるハンドラ実行コアとし、他のコアをハンドラ処理が割り当てられないハンドラ非実行コアとする。
【００４７】
よって、並列化コンパイラ１は、全ハンドラ処理を一つのコアが実行するように、全ハンドラ処理を一つのコアに割り当てる手順を含んでいるとも言える。よって、コンピュータ１０は、並列化コンパイラ１を実行することで、全ハンドラ処理を一つのコアに割り当てる。
【００４８】
ステップＳ７０では、不均一化指針を決定する。ステップＳ７０では、不均一化指針を決定する処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ７０を実行することで、不均一化指針を決定する。
【００４９】
マルチコアプロセッサの各コアで実行される逐次処理の実行時間、実行周期、並列処理の実行周期を利用し、不均一な処理負荷で並列動作するようにプログラム生成指針を決定する。一例としては、並列処理の実行周期に対する逐次処理の実行周期の比を重み付け値とし（比が１を超える場合は１を重み付け値とする）、逐次処理の実行時間に重み付け値をかけた値だけ差をつけることを不均一化の指針とする。なお、ステップＳ７０、プログラム生成指針の決定に関しては、特開２０１６−２１８５０３号公報を参照して適用することができる。
【００５０】
ステップＳ８０は、ステップＳ５０で並列タスクに分類された各タスクについて、不均一化指針に基づく並列化処理を実行する（割当手順）。ステップＳ８０は、並列処理に分類された各タスクについて、不均一化指針に基づく並列化処理の決定を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ８０を実行することで、並列処理に分類された各タスクについて、不均一化指針に基づく並列化処理を決定する。ステップＳ８０に関しては、図３を用いて後程説明する。
【００５１】
ステップＳ９０では、並列化処理後の並列プログラム２１ａ１を出力する。ステップＳ９０では並列プログラム２１ａ１の出力を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ９０を実行することで、並列プログラム２１ａ１を出力する。
【００５２】
続いて、図３に示されるフローチャートを参照しながら、並列化方法のステップＳ８０における不均一化指針に基づく並列化処理について説明する。
【００５３】
ステップＳ８１では、並列タスクの分割を実行する（割当手順）。ステップＳ８１は、並列処理の分割を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ８１を実行することで、並列処理の分割を行う。
【００５４】
並列処理の分割では、並列処理を細かな処理ブロックに分割をする。処理ブロックとは、並列化を行うための単位であり、例えば各種演算処理、代入処理、ループ処理、分岐処理、関数呼び出し等のプログラム言語のステートメント、またはこれらを複合的に組み合わせたものである。
【００５５】
処理ブロックはプログラム言語の単一ステートメントで構成することもできるが、そのような細かい単位で並列化するとコア間の同期や通信のオーバーヘッドのほうが大きくなってしまう。従って、処理ブロックは複数のステートメントから構成されるほうが好ましいし、その基準として処理ブロックの実行時間を用いることができる。処理ブロックの実行時間は、並列処理が実行されるマルチコアプロセッサのアーキテクチャを解析して決定してもよいし、実際の動作結果からフィードバックして決定してもよい。
【００５６】
本実施形態では、図５に示すように、一例として、第１時間同期処理ｔｔ１を、第１時間同期処理ｔｔ１１、第１時間同期処理ｔｔ１２に分割している。よって、第１時間同期処理ｔｔ１１、第１時間同期処理ｔｔ１２は、第１時間同期処理ｔｔ１から分割された処理ブロックと言える。
【００５７】
ステップＳ８２では、依存性解析を実行する（割当手順）。ステップＳ８２は、依存性解析を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ８２を実行することで、依存性解析を行う。ステップＳ８２に関しては、図４を用いて後程説明する。
【００５８】
ステップＳ８３では、並列性を抽出する（割当手順）。ステップＳ８３は、並列性の抽出を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ８３を実行することで、並列性の抽出を行う。ここでは、依存性解析ステップであるステップＳ８２で解析した処理ブロック間のデータの依存性、および制御の依存性に基づき、処理ブロック単位での並列性を抽出する。この場合、データの依存性も制御の依存性もない処理ブロックは並列実行可能であるため、並列性があると判断する。
【００５９】
ステップＳ８４では、不均一化指針に基づくスケジューリングを実行する（割当手順）。ステップＳ８４は、不均一化指針に基づくスケジューリングを、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ８４を実行することで、不均一化指針に基づくスケジューリングを行う。
【００６０】
不均一化指針に基づくスケジューリングでは、並列性抽出ステップであるステップＳ８３で抽出された並列性、および並列処理が実行されるマルチコアプロセッサが備えるコア数などの制約情報に基づき、処理ブロックが実行されるコアとその実行順序を決定する。
【００６１】
その際に不均一化指針に従い、各コアの処理負荷が不均一になるように、処理ブロックが実行されるコアを決定する。処理負荷が不均一になるとは、各コアで実行される処理ブロックの合計実行時間がコアによって不均一であるということである。この不均一さを決定づけるために、各処理ブロックの実行時間を用いることができる。最終的に、決定された処理ブロックの実行コア、実効順序に従い、並列化プログラムが生成される。なお、「不均一化指針に基づいて並列化」することができれば、並列化の手法は上記したものに限られない。
【００６２】
ステップＳ８４では、目標値を基準とした所定範囲内に全タスクと全ハンドラ処理がおさまるように、全タスクと全ハンドラ処理とを各コア２１ｃ〜２１ｅに割り当てる処理を、コンピュータ１０に実行させる。また、ステップＳ８４では、複数のハンドラ処理を第１コア２１ｃのみに割り当てる処理を、コンピュータ１０に実行させる。さらに、ステップＳ８４では、並列タスクとハンドラ処理との干渉を抑制しつつ、複数のタスクを各コア２１ｃ〜２１ｅに不均一に割り当てる処理を、コンピュータ１０に実行させる。
【００６３】
続いて、図４に示されるフローチャートを参照しながら、並列コンパイル方法のステップＳ０６における不均一化指針に基づく並列化処理について説明する。
【００６４】
ステップＳ８２１では、タスク間依存性を解析する（割当手順）。ステップＳ８２１は、タスク間依存性の解析を、コンピュータ１０に実行させる。よって、コンピュータ１０は、ステップＳ８２１を実行することで、タスク間依存性の解析を実行する。
【００６５】
詳述すると、ステップＳ８２１は、ステップＳ８１で得られたすべての処理ブロックに対して、処理ブロック間のデータの依存性と制御の依存性の解析を、コンピュータ１０に実行させる。処理ブロック間にデータの依存性があるとは、例えばある処理ブロックで更新したデータを、別の処理ブロックが参照している場合のことである。処理ブロック間に制御の依存性があるとは、例えばある処理ブロックで行われる条件判定の結果によって、別の処理ブロックが実行されるかどうかが決定される場合のことである。
【００６６】
ステップＳ８２２では、タスクとハンドラ処理間の依存性を解析する（割当手順）。ステップＳ８２２は、タスクとハンドラ処理間の依存性の解析を、コンピュータ１０に実行させる。よって、コンピュータ１０は、ステップＳ８２２を実行することで、タスクとハンドラ処理間の依存性の解析を実行する。
【００６７】
詳述すると、ステップＳ８２２は、ステップＳ８１で得られたすべての処理ブロックと、ハンドラ処理との間におけるデータの依存性の解析を、コンピュータ１０に実行させる。処理ブロックとハンドラ処理との間にデータ依存性があるとは、例えばある処理ブロックで更新したデータを、ハンドラ処理が参照している場合のことである。また、処理ブロックとハンドラ処理との間にデータ依存性があるとは、例えばある処理ブロックとハンドラ処理との間で、同一データに対する読み込みと書き込みの相互関係がある場合のことである。なお、データ依存性無しのタスクは、非依存タスクに相当する。一方、データ依存性有りのタスクは、依存タスクに相当する。
【００６８】
ステップＳ８２３では、依存性有り、且つアトミック性有りか否かを判定する（割当手順）。ステップＳ８２３は、データ依存性有り且つアトミック性有りか否かの判定を、コンピュータ１０に実行させる。よって、コンピュータ１０は、ステップＳ８２３を実行することで、データ依存性有り且つアトミック性有りか否かの判定を実行する。
【００６９】
つまり、ステップＳ８２３では、データ依存性有り、且つ、データ依存性がある依存タスクとハンドラ処理とにアトミック性有りか否かの判定を、コンピュータ１０に実行させる。言い換えると、互いにデータ依存性があると判定されたタスクとハンドラ処理とに、アトミック性が有るか否かを、コンピュータ１０に実行させる。
【００７０】
ステップＳ８２３では、コンピュータ１０がデータ依存性有り且つアトミック性有りと判定した場合はステップＳ８２４に進ませる。また、ステップＳ８２３では、コンピュータ１０がデータ依存性有り且つアトミック性有りと判定しなった場合は図４のフローチャートを終了させて図３のフローチャート（Ｓ８３）に戻らせる。
【００７１】
アトミック性無しの場合、ハンドラ処理によって、対象となるデータの読み込みや書き込みがなされたとしても、依存タスクの実行結果に影響する可能性が低い。よって、データ依存性有り、且つアトミック性無しと判定した場合は、データ依存性無しと判定した場合と同様、Ｓ８３に戻らせる。なお、対象となるデータとは、依存タスクとハンドラ処理の間に読み込みと書き込みの相互関係があるデータである。
【００７２】
これは、オリジナルの逐次プログラムにおける変数に、データをアトミックに保つ（データの一貫性を保つ）コード記述がされていることを前提とする。例えば、di（割り込み禁止）とei(割り込み禁止解除)でアトミックにしたいデータの始めと終わりに書かれていることで、一つのまとまりとして扱う。よって、コンピュータ１０は、このような記述がある場合は、アトミック性有りと判定し、記述がない場合は、アトミック性無しと判定する。また、以下のような専用の記述がある場合は、明確にアトミック性の有無を判定することが可能である。専用の記述は、例えば、start_atomic()、end_atomic()などである。
【００７３】
非依存タスクに関しては、ステップＳ８４において、目標実行時間を基準とした所定範囲内におさまるように、コア２１ｃ〜２１ｅのいずれかに割り当てる処理を、コンピュータ１０に実行させる。また、依存タスクに関してもアトミック性が無い場合は、ステップＳ８４において、目標実行時間を基準とした所定範囲内におさまるように、コア２１ｃ〜２１ｅのいずれかに割り当てる処理を、コンピュータ１０に実行させる。
【００７４】
ステップＳ８２４では、データ一貫性を保持する処理を追加する（割当手順）。ステップＳ８２４は、データ一貫性を保持する処理の追加を、コンピュータ１０に実行させてステップＳ８３に戻らせる。よって、コンピュータ１０は、ステップＳ８２４を実行することで、データ一貫性を保持する処理の追加を実行して、ステップＳ８３に戻る。データ一貫性を保持する処理は、保持処理に相当する。
【００７５】
つまり、依存タスクによってアクセスされるデータの一貫性を保つ保持処理を並列プログラム２１ａ１に追加しつつ、目標実行時間を基準とした所定範囲内におさまるように、コア２１ｃ〜２１ｅのいずれかに割り当てる処理を、コンピュータ１０に実行させる。保持処理は、依存タスクが割り当てられたコアとは異なるコアから、データへのアクセスをブロックしてデータの一貫性を保つ機能を備えている。保持処理としては、例えば、通信セマフォや、バスロックや、コアサスペンドなどを採用できる。
【００７６】
さらに、データへのアクセスをブロックする機能として、依存タスクが割り当てられたコアからデータへアクセスしている間、保留コードを、依存タスク、または、依存タスクに干渉するハンドラ処理のアクセスコードに付与する機能を備えていてもよい。保留コードは、依存タスクが割り当てられたコアとは異なるコアによるデータへのアクセスを保留させるコードである。本実施形態では、図５に示すように、一例として、同期処理ｓｔ１を採用している。
【００７７】
図５に、上記のように構成された並列化コンパイラ１によって、逐次プログラムの各タスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９および各ハンドラ処理ｈｄ１〜ｈｄが各コア２１ｃ〜２１ｅに不均一に割り当てられた一例を示している。全ハンドラ処理ｈｄ１〜ｈｄは、第１コア２１ｃに割り当てられている。さらに、第２コア２１ｄには、同期処理ｓｔ１が割り当てられている。
【００７８】
このように、並列化コンパイラ１は、決定した目標実行時間を基準とした所定範囲内に全タスクｔｔ１〜ａｔ９と全ハンドラ処理ｈｄ１〜ｈｄがおさまるように、全タスクｔｔ１〜ａｔ９と全ハンドラ処理ｈｄ１〜ｈｄを複数のコア２１ｃ〜２１ｅに割り当てる。このため、並列化コンパイラ１は、全タスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９と全ハンドラ処理ｈｄ１〜ｈｄを複数のコアに割り当てやすくなる。
【００７９】
また、並列化コンパイラ１は、複数のハンドラ処理ｔｄ１〜ｈｄ４を第１コア２１ｃのみに割り当てるとともに、複数のタスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９をハンドラ処理ｔｄ１〜ｈｄ４との干渉を抑制しつつ複数のコア２１ｃ〜２１ｅに不均一に割り当てる。このため、並列化コンパイラ１は、第１コア２１ｃがハンドラ処理を実行している間に、その他の２１ｄ、２１ｅがタスクの実行を中断することを抑制可能な並列プログラム２１ａ１を生成することができる。よって、並列化コンパイラ１は、マルチコアプロセッサ２１の性能を有効に活用できる並列プログラム２１ａ１を生成可能である。
【００８０】
次に、図６を参照しながら、本実施形態の並列化コンパイラ１により生成された並列プログラム２１ａ１が記憶されたマルチコアプロセッサ２１を備えた車載制御装置２０の構成について説明する。マルチコアプロセッサ２１は、半導体制御装置に相当する。
【００８１】
車載制御装置２０は、マルチコアプロセッサ２１、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄ、第３コア２１ｅ、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。車載制御装置２０は、例えば、車両に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載制御装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。通信部２２、センサ部２３、入出力ポート２４は、周辺機器に相当する。
【００８２】
ＲＯＭ２１ａは、上記のように並列化方法により生成された並列プログラム２１ａ１（バイナリデータ）が保存されている。ＲＡＭ２１ｂは、各コア２１ｃ〜２１ｅ等によりアクセスされる部位である。マルチコアプロセッサ２１は、並列プログラム２１ａ１に従い動作し、車載制御装置２０を統括制御する。また、車載制御装置２０は、マルチコアプロセッサ２１が並列プログラム２１ａ１に従い動作することで、制御対象である車載機器を制御する。
【００８３】
通信部２２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う通信装置である。センサ部２３は、制御対象等の状態を検出するための各種センサから出力された信号を受信する受信装置である。入出力ポート２４は、制御対象を制御するための各種信号の送受信を行う部位である。なお、図６に示す車載制御装置２０は、一例に過ぎず、通信部２２、センサ部２３、入出力ポート２４とは異なる装置を備えていてもよい。
【００８４】
マルチコアプロセッサ２１は、並列プログラム２１ａ１を実行する場合、図７に示すように、複数のタスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９、複数のハンドラ処理ｔｄ１〜ｈｄ４、同期処理ｓｔ１を実行する。上記のように、並列プログラム２１ａ１は、複数のタスクｔｔ１〜ｔｔ５、ａｔ１〜ａｔ９は、ハンドラ処理ｔｄ１〜ｈｄ４との干渉を抑制しつつ複数のコア２１ｃ〜２１ｅに不均一に割り当てられている。
【００８５】
このため、第１コア２１ｃは、第１割込みが発生した、第１ハンドラ処理ｈｄ１を実行する。しかしながら、第２コア２１ｄは、第１割込みが発生したとしても、第８角度同期処理ａｔ８の実行をとめずに、第８角度同期処理ａｔ８を実行することができる。また、第３コア２１ｅは、第１割込みが発生したとしても、第６角度同期処理ａｔ６の実行をとめずに、第６角度同期処理ａｔ６を実行することができる。マルチコアプロセッサ２１は、第２〜第４割込みが発生した場合も同様に動作する。
【００８６】
このように、並列プログラム２１ａ１は、割込みが発生した場合、特定のコア（第１コア２１ｃ）のみタスクの実行を止めてハンドラ処理を実行させるように構成されている。つまり、マルチコアプロセッサ２１は、割込みが発生した場合、第１コア２１ｃだけがタスクの実行を止めて、ハンドラ処理を実行するように構成されている。
【００８７】
よって、マルチコアプロセッサ２１は、割込みが発生した場合に、全てのコア２１ｃ〜２１ｅがタスクの実行を止める構成よりも、実行時間を短縮できる。これに伴って、マルチコアプロセッサ２１は、全てのコア２１ｃ〜２１ｅがタスクの実行を止める構成よりも、消費電力を低減できる。このように、車載制御装置２０は、マルチコアプロセッサ２１の性能を有効に活用できる。なお、並列化コンパイラ１は、マルチコアプロセッサ２１の実行時間を短縮させること、および消費電力を低減させることできる並列プログラム２１ａ１を生成できると言える。
【００８８】
なお、本実施形態では、電子制御装置の一例として、車載制御装置２０を採用している。しかしながら、本開示は、これに限定されず、車両に搭載されない電子制御装置であっても採用できる。つまり、並列化コンパイラ１は、車載制御装置２０に搭載されたマルチコアプロセッサ２１とは異なるマルチコアプロセッサで動作する並列プログラム２１ａ１を生成するための並列化方法であってもよい。よって、この電子制御装置は、車載制御装置２０と同様、マルチコアプロセッサ２１の性能を有効に活用できる。
【００８９】
以上、本開示の好ましい実施形態について説明した。しかしながら、本開示は、上記実施形態に何ら制限されることはなく、本開示の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００９０】
（変形例）
なお、上記実施形態、変形例では、各タスクの実行時間を判断値として、逐次タスクとするか、並列タスクとするかを分類する例を採用している。しかしながら、本開示は、これに限定されない。例えば、機能安全ルールをまもるための各タスクのコア配置の制約によっても、逐次タスクとするか、並列タスクとするかを分類してもよい。
【００９１】
変形例では、図８のステップＳ２５に示すように、各タスクをコア配置する際の制約を示す制約情報が入力される。ステップＳ２５は、制約情報を取り込む処理を、コンピュータ１０に実行させる手順である。よって、コンピュータ１０は、ステップＳ２５を実行することで、ＣＰＵ１３が参照可能なように、制約情報を記憶部に取り込む。ＣＰＵ１３は、入力装置１６や読取部１７から制約情報を取り込むことができる。
【００９２】
変形例の並列化コンパイラ１は、実行時間だけではなく、機能安全ルールをまもるためのタスクのコア配置の制約によって、逐次タスクとするか、並列タスクとするかを分類する処理をコンピュータ１０に実行させる手順を含んでいる。この場合、コンピュータ１０は、機能安全ルールをまもるためのタスクのコア配置の制約によって、逐次タスクとするか、並列タスクとするかを分類する。
【００９３】
さらに、並列化コンパイラ１は、動作速度を優先する場合や、電力効率を優先場合等のコア配置指針を示す配置情報を取得する手順と、この配置情報に基づいて逐次タスクとするか、並列タスクとするかを分類する手順を含んでいてもよい。つまり、並列化コンパイラ１は、配置情報を取得し、この配置情報に基づいて逐次タスクとするか、並列タスクとするかを分類する処理をコンピュータ１０に実行させる手順を含んでいてもよい。この場合、コンピュータ１０は、配置情報を取得し、この配置情報に基づいて逐次タスクとするか、並列タスクとするかを分類する。
【符号の説明】
【００９４】
１…自動並列化コンパイラ、１０…コンピュータ、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載制御装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ａ１…並列プログラム、２１ｂ…ＲＡＭ、２１ｃ…第１コア、２１ｄ…第２コア、２１ｅ…第３コア、２２…通信部、２３…センサ部、２４…入出力ポート
【図１】
2020181407.tif 000003
【図２】
2020181407.tif 000004
【図３】
2020181407.tif 000005
【図４】
2020181407.tif 000006
【図５】
2020181407.tif 000007
【図６】
2020181407.tif 000008
【図７】
2020181407.tif 000009
【図８】
2020181407.tif 000010