(57)【特許請求の範囲】
【請求項１】
シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラムをコンピュータに生成させるための並列化コンパイル方法であって、
前記逐次プログラムを構成する処理群を、前記マルチコアプロセッサを構成する単一コア上で逐次動作する逐次処理と、前記マルチコアプロセッサを構成する複数コア上で並列動作する並列処理とに分類する分類手順と、
前記分類手順によって前記並列処理に分類された処理を、前記複数コアに対して前記逐次処理の実行時間の長さに基づいて割り当てる割当処理を実行する割当手順と、
前記分類手順の分類結果及び前記割当手順の割当結果に基づいて前記並列プログラムを
生成する生成手順と、を備え、
前記割当手順では、前記単一コアと、前記単一コア以外の前記複数コアとで、前記逐次処理の実行時間の長さに１より小さい重み付け値を乗算した分だけ差をつけることで、前記割当処理を実行する、ことを特徴とする並列化コンパイル方法。
【請求項２】
前記割当手順では、前記並列処理の実行周期と前記逐次処理の実行周期との比を用いて前記重み付け値を決定する、ことを特徴とする請求項１に記載の並列化コンパイル方法。
【請求項３】
前記割当手順では、前記並列処理の実行周期及び前記逐次処理の実行周期の指定を受け付け、この指定に基づいて静的に前記実行周期を決定する、ことを特徴とする請求項２に記載の並列化コンパイル方法。
【請求項４】
前記割当手順では、前記並列処理の実行周期及び前記逐次処理の実行周期を、前記並列処理及び前記逐次処理の実際の動作結果からフィードバックして決定する、ことを特徴とする請求項２に記載の並列化コンパイル方法。
【請求項５】
シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラムをコンピュータに生成させるための並列化コンパイラであって、
前記逐次プログラムを構成する処理群を、前記マルチコアプロセッサを構成する単一コア上で逐次動作する逐次処理と、前記マルチコアプロセッサを構成する複数コア上で並列動作する並列処理とに分類する分類手順と、
前記分類手順によって前記並列処理に分類された処理を、前記複数コアに対して前記逐次処理の実行時間の長さに基づいて割り当てる割当処理を実行する割当手順と、
前記分類手順の分類結果及び前記割当手順の割当結果に基づいて前記並列プログラムを生成する生成手順と、を前記コンピュータに実行可能にさせるように構成され、
前記割当手順では、前記単一コアと、前記単一コア以外の前記複数コアとで、前記逐次処理の実行時間の長さに１より小さい重み付け値を乗算した分だけ差をつけることで、前記割当処理を実行する、ことを特徴とする並列化コンパイラ。
【請求項６】
前記割当手順では、前記並列処理の実行周期と前記逐次処理の実行周期との比を用いて前記重み付け値を決定する、ことを特徴とする請求項５に記載の並列化コンパイラ。
【請求項７】
前記割当手順では、前記並列処理の実行周期及び前記逐次処理の実行周期の指定を受け付け、この指定に基づいて静的に前記実行周期を決定する、ことを特徴とする請求項６に記載の並列化コンパイラ。
【請求項８】
前記割当手順では、前記並列処理の実行周期及び前記逐次処理の実行周期を、前記並列処理及び前記逐次処理の実際の動作結果からフィードバックして決定する、ことを特徴とする請求項６に記載の並列化コンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアプロセッサ用に記述された逐次プログラムからマルチコアプロセッサ用に並列化した並列プログラムを生成する並列化コンパイル方法、及び並列化コンパイラに関する。
【背景技術】
【０００２】
自動車における制御系，情報系の高度化，統合化のためには、それらを実現するためのプロセッサの高能力化が重要となる。例えば、安全，快適で燃費の良い自動車開発のために重要なエンジン制御系を高度化するためには、制御アルゴリズムの高度化や新たな制御機能の実現等、計算負荷の増大が避けられない。このような問題を解決する為には、リアルタイム制御を実現しているプロセッサの高速化が必須となる。
【０００３】
しかし、従来のようにプロセッサの動作周波数を向上させることは、消費電力が周波数の三乗に比例して増大するため、困難となっている。このため、１チップ上に低動作周波数のプロセッサコアを複数集積し、電力削減のために低周波数化・低電圧化したプロセッサコアを並列動作させることで、処理の高速化と低電力化を同時に実現可能なマルチコアプロセッサへの移行が急ピッチで行われている。
【０００４】
マルチコアプロセッサにて、シングルコアプロセッサよりも高速な処理を行うためには、シングルコアプロセッサ用の逐次プログラムの処理を分割し、プロセッサコア間の通信が最小になる形で各プロセッサコアに各処理を割り当てる必要がある。従来、このような逐次プログラムの並列化の作業は人手で行う必要があったが、このような作業は大変困難で長期間を要し、開発費の増加や並列化されたプログラムの信頼性等、多くの課題が生じている。
【０００５】
下記特許文献１では、開発期間や開発費を抑えつつ、信頼性が高く、高速な処理が可能な車載装置用の組込みシステム向けの並列化プログラムを作成することができる並列化コンパイル方法が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来の技術では、逐次プログラムが複数の処理を有する場合、複数の処理全てを並列化し、複数のコアに割り当てる並列化プログラムを生成するものであった。この場合、複数のコアそれぞれの処理負荷を均一化するため、処理時間がコア数で按分され、例えば２つのコアの場合の処理時間は逐次プログラムの略半分程度になる。しかしながら、逐次プログラムに含まれる処理に実行時間の短いものが含まれる場合、その処理を並列化することによるコア間の通信処理時間といったオーバーヘッドにおける時間増大分が本来の処理実行時間に比して無視できないものになる場合がある。このような場合には、その実行時間の短い処理はそのまま逐次動作とし、他の処理を並列動作とするような並列化プログラムを生成することになる。
【０００８】
更に、逐次プログラムに含まれる処理の中には、機能安全に対応するために冗長化された特定のコアで実行させたい処理が含まれる場合がある。しかしながら、一般的にマルチコアプロセッサの全てのコアを冗長化することがないため、前述の処理は冗長化された特定のコアで実行させる必要があり、このような処理は逐次動作のままとしておくことが求められる。このように、並列化されず逐次動作のままの処理が並列化プログラムに含まれる場合、本来意図した処理負荷の均一化による性能向上が図れないという課題があった。
【０００９】
本発明はこのような課題に鑑みてなされたものであり、その目的は、逐次プログラムが複数の処理を有する場合に、一部の処理を逐次動作とし、残部の処理を並列動作とする場合に、性能向上効果を最適化することが可能な並列化コンパイル方法、及び並列化コンパイラを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明に係る並列化コンパイル方法は、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラムをコンピュータに生成させるための並列化コンパイル方法であって、前記逐次プログラムを構成する処理群を、前記マルチコアプロセッサを構成する単一コア上で逐次動作する逐次処理と、前記マルチコアプロセッサを構成する複数コア上で並列動作する並列処理とに分類する分類手順と、前記分類手順によって前記並列処理に分類された処理を、前記複数コアに対して前記逐次処理の実行時間の長さに基づいて割り当てる割当処理を実行する割当手順と、前記分類手順の分類結果及び前記割当手順の割当結果に基づいて前記並列プログラムを生成する生成手順と、を備える。前記割当手順では、前記単一コアと、前記単一コア以外の前記複数コアとで、前記逐次処理の実行時間の長さに１より小さい重み付け値を乗算した分だけ差をつけることで、前記割当処理を実行する。
【００１１】
また、本発明に係る並列化コンパイラは、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ（２１）で処理可能なように並列化した並列プログラムを生成する並列化コンパイラであって、前記並列化コンパイル方法の分類手順と、割当手順と、生成手順と、を実行可能なように構成されている。
【００１３】
これら本発明によれば、分類手順によって並列処理に分類された処理を複数コアに対して不均一に割り当てる不均一割当処理を実行するので、逐次処理を含めた場合の性能向上の最適化を図ることができる。
【発明の効果】
【００１４】
本発明によれば、逐次プログラムが複数の処理を有する場合に、一部の処理を逐次動作とし、残部の処理を並列動作とする場合に、性能向上効果を最適化することが可能な並列化コンパイル方法、及び並列化コンパイラを提供することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図２】図２は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図３】図３は、本発明の実施形態に係る車載装置を示すブロック図である。
【図４】図４は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図５】図５は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図６】図６は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図７】図７は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図８】図８は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【図９】図９は、本発明の実施形態に係る並列化コンパイル方法を説明するための図である。
【発明を実施するための形態】
【００１６】
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【００１７】
図１に示されるフローチャートを参照しながら本実施形態の並列コンパイル方法について説明する。
【００１８】
ステップＳ０１では、自動並列化対象となる逐次プログラムが入力される。ステップＳ０１に続くステップＳ０２では、逐次プログラムを構成する各処理の実行時間や、実行周期が入力される。
【００１９】
ステップＳ０２に続くステップＳ０３は、本発明における分類手順に相当する処理である。ステップＳ０３では、逐次プログラムを構成する各処理について、逐次処理とするか、並列処理とするかを分類する。より具体的には、複数の処理群からなるシングルコアで動作する逐次プログラムを入力として、各処理を逐次処理または並列処理のいずれかに分類する。例えば各処理の実行時間を判断値として、それが一定値以上であれば並列処理とし、一定値未満であれば逐次処理に分類する。
【００２０】
ステップＳ０３に続くステップＳ０４は、本発明における割当手順に相当する処理である。ステップＳ０４では、逐次処理を実行するコアを決定する。逐次処理を実行するコアの選定にあたっては、ユーザ側からの指定に基づいてもよく、プログラムの構造解析等から自動的に選定してもよい。
【００２１】
ステップＳ０４に続くステップＳ０５では、不均一化指針を決定する。より詳細には後述するけれども、マルチコアプロセッサの各コアで実行される逐次処理の実行時間、実行周期、並列処理の実行周期を利用し、不均一な処理負荷で並列動作するようにプログラム生成指針を決定する。一例としては、並列処理の実行周期に対する逐次処理の実行周期の比を重み付け値とし（比が1を超える場合は１を重み付け値とする）、逐次処理の実行時間に重み付け値をかけた値だけ差をつけることを不均一化の指針とする。
【００２２】
ステップＳ０５に続くステップＳ０６は、本発明における生成手順に相当する処理である。ステップＳ０５に続くステップＳ０６では、ステップＳ０３で並列処理に分類された各処理について、不均一化指針に基づく並列化処理を実行する（詳細は後述する）。ステップＳ０６に続くステップＳ０７では、並列化処理後の並列プログラムを出力する。
【００２３】
続いて、図２に示されるフローチャートを参照しながら、並列コンパイル方法のステップＳ０６における不均一化指針に基づく並列化処理について説明する。
【００２４】
ステップＳ０６１では、並列処理の分割を実行する。並列処理の分割では、並列処理を細かな処理ブロックに分割をする。処理ブロックとは、並列化を行うための単位であり、例えば各種演算処理、代入処理、ループ処理、分岐処理、関数呼び出し等のプログラム言語のステートメント、またはこれらを複合的に組み合わせたものである。処理ブロックはプログラム言語の単一ステートメントで構成することもできるが、そのような細かい単位で並列化するとコア間の同期や通信のオーバーヘッドのほうが大きくなってしまう。従って、処理ブロックは複数のステートメントから構成されるほうが好ましいし、その基準として処理ブロックの実行時間を用いることができる。処理ブロックの実行時間は、並列処理が実行されるマルチコアプロセッサのアーキテクチャを解析して決定してもよいし、実際の動作結果からフィードバックして決定してもよい。
【００２５】
ステップＳ０６２では、依存関係解析を実行する。並列処理の分割ステップであるステップＳ０６１で得られたすべての処理ブロックに対して、処理ブロック間のデータの依存性と制御の依存性を解析する。処理ブロック間にデータの依存性があるとは、例えばある処理ブロックで更新したデータを、別の処理ブロックが参照している場合のことである。処理ブロック間に制御の依存性があるとは、例えばある処理ブロックで行われる条件判定の結果によって、別の処理ブロックが実行されるかどうかが決定される場合のことである。
【００２６】
ステップＳ０６３では、並列性を抽出する。依存関係解析ステップであるステップＳ０６２で解析した処理ブロック間のデータの依存性、および制御の依存性に基づき、処理ブロック単位での並列性を抽出する。この場合、データの依存性も制御の依存性もない処理ブロックは並列実行可能であるため、並列性があると判断する。
【００２７】
ステップＳ０６４では、不均一化指針に基づくスケジューリングを実行する。不均一化指針に基づくスケジューリングでは、並列性抽出ステップであるステップＳ０６３で抽出された並列性、および並列処理が実行されるマルチコアプロセッサが備えるコア数などの制約情報に基づき、処理ブロックが実行されるコアとその実行順序を決定する。その際に不均一化指針に従い、各コアの処理負荷が不均一になるように、処理ブロックが実行されるコアを決定する。処理負荷が不均一になるとは、各コアで実行される処理ブロックの合計実行時間がコアによって不均一であるということである。この不均一さを決定づけるために、各処理ブロックの実行時間を用いることができる。最終的に、決定された処理ブロックの実行コア、実効順序に従い、並列化プログラムが生成される。なお、「不均一化指針に基づいて並列化」することができれば、並列化の手法は上述したものに限られない。
【００２８】
続いて、図３を参照しながら、本実施形態の自動並列化コンパイル方法により生成された並列化プログラムにより動作する車載装置２０の構成について説明する。無論、自動並列化コンパイル方法は、車載装置２０に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。また、本実施形態の自動並列化コンパイル方法に基づく自動並列化コンパイラを提供することもできる。
【００２９】
車載装置２０は、マルチコアプロセッサ２１，通信部２２，センサ部２３，入出力ポート２４等を備える。
【００３０】
マルチコアプロセッサ２１は、ＲＯＭ２１ａと、ＲＡＭ２１ｂと、複数のコア２１ｃ，２１ｄ，２１ｅ…等を有している。
【００３１】
ＲＯＭ２１ａは、自動並列化コンパイル方法により生成された並列化プログラム２１ａ−１（バイナリデータ）が保存されている。マルチコアプロセッサ２１は、並列化プログラム２１ａ−１に従い動作し、車載装置２０を統括制御する。
【００３２】
ＲＡＭ２１ｂは、コア２１ｃ，２１ｄ，２１ｅ…等によりアクセスされる部位である。通信部２２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う部位である。
【００３３】
センサ部２３は、制御対象等の状態を検出するための各種センサから構成される部位である。入出力ポート２４は、制御対象を制御するための各種信号の送受信を行う部位である。
【００３４】
続いて、本実施形態の自動並列化コンパイル方法により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、「処理」という記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。より具体的には、マルチコアプロセッサ２１上で動作するＯＳが管理するタスク、あるいは割り込みハンドラである。
【００３５】
図４は、本実施形態に係る並列化コンパイル方法によって、シングルコア向けプログラムをマルチコア向けプログラムに変換する概念を示した図である。図４に示される例では、「時間同期処理Ａ」をコア２１ｃ，２１ｄ，２１ｅで処理するように並列化し、「時間同期処理Ｂ」をコア２１ｃ，２１ｄで処理するように並列化している。また、「角度同期処理Ａ」は逐次処理のままコア２１ｃで処理し、「角度同期処理Ｂ」はコア２１ｄ，２１ｅで処理するように並列化している。本実施形態では、この並列化の不均一処理を行うものであるので、図５以降では、コア２１ｃ，コア２１ｄに処理コアを限定し、「処理Ａ」「処理Ｂ」といった簡略表記を用いて説明する。
【００３６】
図５の（Ａ）には、コア２１ｃで処理する逐次プログラムを示しており、１システム周期において、処理Ａと処理Ｂとを実行するように構成されている。図５の（Ｂ）に示す並列化では、処理Ａも処理Ｂも均一に並列化している。逐次プログラムに対して図５の（Ｂ）に示す並列化では、性能向上効果は、図示される「性能向上効果（Ｂ）」となっている。
【００３７】
性能向上効果のみを考慮すれば、図５の（Ｂ）に示す並列化が適しているといえるが、処理Ｂが並列化に適さない処理である場合も想定される。例えば、処理Ｂが、短い実行時間の処理だったり、機能安全に対応するために、冗長化された特定のコアで実行させたい処理だったりする場合、これらの処理は逐次動作のままとしておくことが求められる。
【００３８】
そこで、図５の（Ｃ）に示されるような並列化手法が考えられる。図５の（Ｃ）に示される並列化手法は、処理Ａを均一に並列化し、コア２１ｃにおいて処理Ｂを逐次処理するように並列化プログラムを構成している。この場合の性能向上効果は、図示される「性能向上効果（Ｃ）」となっている。
【００３９】
「性能向上効果（Ｂ）」程ではないものの、「性能向上効果（Ｃ）」よりも効果の高い並列化手法が、図５の（Ｄ）に示す並列化手法である。図５の（Ｄ）に示される並列化手法は、処理Ａを不均一に並列化し、コア２１ｃにおいて処理Ｂを逐次処理するように並列化プログラムを構成している。より具体的には、処理Ｂを逐次処理する側のコア２１ｃに割り当てる処理Ａの一部が要する実行時間よりも、コア２１ｄに割り当てる処理Ａの一部が要する実行時間が長くなるように並列化している。この場合の性能向上効果は、図示される「性能向上効果（Ｄ）」となっており、「性能向上効果（Ｃ）」よりも性能向上効果が高められている。
【００４０】
図６に示されるように、逐次処理である処理Ｂの実行時間の長さに基づいて、不均一割当処理を実行することができる。より具体的には、逐次処理を実行する単一コアであるコア２１ｃに割り当てられる処理Ａの実行時間と、単一コア以外の複数コアであるコア２１ｄに割り当てられる処理Ａの実行時間とを、処理Ｂの実行時間だけコア２１ｄに割り当てられる処理Ａの実行時間を長くしている（図６の（Ａ）参照）。このように並列化することで、図６の（Ｂ）に示されるように、コア２１ｃとコア２１ｄの実行時間が略同一なものとなる。
【００４１】
逐次処理である処理Ｂの実行時間の長さは、処理Ｂが動作するコア２１ｃを含むマルチコアプロセッサ２１のアーキテクチャを予め解析することで静的に決定することができる。より具体的には、コア２１ｃが備えるアセンブリ言語の実行サイクル数の情報を用い、処理Ｂをアセンブリ言語で記述した時に実行時間の長さを決定することができる。さらに、コア２１ｃからＲＯＭ２１ａやＲＡＭ２１ｂへのアクセスにかかる時間の情報を用い、より精度を高くして処理Ｂの実行時間を決定することができる。このようにすることで、処理Ｂの実行時間の長さを、コア２１ｃを含むマルチコアプロセッサ２１の構造等を反映させてより正確に決定することができる。本方法は、車載装置２０が開発途中である等、処理Ｂを実際に動作させる環境を準備できない、あるいは準備するのが大変な場合に有効である。
【００４２】
逐次処理である処理Ｂの実行時間の長さは、処理Ｂの実際の動作結果からフィードバックして決定することができる。このようにすることで、実際の動作環境における変動要因を含んだ実行速度を反映させることができる。動作環境における変動要因とは、具体的に、処理Ｂ中に含まれる条件判定部分の判定結果次第で、実行される内容が変わることによる実行時間の変動、またはコア２１ｃ、コア２１ｄが同時にＲＯＭ２１ａやＲＡＭ２１ｂにアクセスした場合に発生するアクセス調停に伴う実行時間の遅延などである。動作条件によらず平均的に性能向上効果を高めたい場合は、複数の動作条件下における処理Ｂの動作結果を平均化し、処理Ｂの実行時間の長さを決定するとよい。また、特定の動作条件において性能向上効果を最も高めたい場合、例えばマルチコアプロセッサ２１全体の処理負荷が最も高くなる時に最大の性能向上効果を得たい場合は、その特定の動作条件下における処理Ｂの動作結果をフィードバックして処理Ｂの実行時間の長さを決定するとよい。 本方法は、並列化プログラム２１ａ−１の処理負荷に対してマルチコアプロセッサ２１の処理能力に余裕がない場合のように、手間をかけてでも性能向上効果を高めたい場合に有効である。
【００４３】
図６を参照しながら説明した並列化方法は、図７に示されるような実行周期の場合により適したものとなる。図７に示される実行周期は、処理Ａの実行周期と処理Ｂの実行周期とが同調しており、同一の実行周期において、処理Ａも処理Ｂも必ず実行される。従って、処理Ａ及び処理Ｂ全体で実行時間の最小化を図る並列化方法が適したものとなる。
【００４４】
一方、図８に示されるように、逐次処理である処理Ｂが実行されるコア２１ｃと、コア２１ｄとで、処理Ｂの実行時間の長さに１より小さい重み付け値を乗算した分だけ差をつけるような不均一割当処理とすることもできる。図８に示される例では、重み付け値を０．５として、コア２１ｃに割り当てられる処理Ａの実行時間に対して、処理Ｂの実行時間の０．５倍の実行時間分だけコア２１ｄに割り当てられる処理Ａの実行時間を長くしている（図８の（Ａ）参照）。このように並列化することで、図８の（Ｂ）に示されるように、コア２１ｃの実行時間がコア２１ｄの実行時間よりも長くなっている。
【００４５】
図８を参照しながら説明した並列化方法は、図９に示されるような実行周期の場合により適したものとなる。図９に示される実行周期は、処理Ａの実行周期に対して処理Ｂの実行周期が倍である。重み付け値は０．５としているので、並列処理である処理Ａの実行周期と逐次処理である処理Ｂの実行周期との比を用いて重み付け値が決定されている。処理Ａを基準として見た場合、処理Ｂの実行は２回に１回となるので、図６を参照しながら説明した並列化方法では、処理Ｂを実行しない場合に処理Ａの不均一時間差が全体の効率低下を招いてしまう。そこで、処理Ｂが実行される周期と、処理Ｂが実行されない周期とのバランスを取るために、図８に示したような並列化方法が用いられる。
【００４６】
並列処理である処理Ａの実行周期及び逐次処理である処理Ｂの実行周期の指定を受け付け、この指定に基づいて静的に実行周期を決定することができる。ユーザは、並列処理である処理Ａの実行周期及び逐次処理である処理Ｂの実行周期を入力することで、各実行周期に応じた並列化処理を実現することができる。
【００４７】
並列処理である処理Ａの実行周期及び逐次処理である処理Ｂの実行周期を、処理Ａ及び処理Ｂの実際の動作結果からフィードバックして決定することができる。並列処理である処理Ａの実行周期及び逐次処理である処理Ｂの実行周期をフィードバックすることで、実際の実行周期に応じた並列化処理を実現することができる。
【００４８】
処理Ｂを逐次処理とするか否かは、ユーザの指定により特定されてもよい。ユーザが意図的に並列化処理を行わないとする場合の例としては、
・プログラムのデータ構造上は依存性がなく並列化可能だが、制御仕様上は逐次的に実行順番が規定されているときに、プログラムと制御仕様の対応を維持して理解しやすくしたい場合。
・機能安全対応のため冗長化されたコア（例えばロックステップコア）で実行しなければならない場合。
・特殊なＣＰＵアーキテクチャを想定した制御である場合。例えばベクタ処理など、ヘテロジニアスアーキテクチャにおけるアクセラレータ側で動くソフトウェアである場合。
が挙げられる。
【００４９】
本実施形態の並列化手法は、ＯＳによって動的に実行されるコアが決定されるのではなく、静的に実行されるコアが決定されるシステムを特に好適な適用システムとして考えられている。特に、リアルタイム性がより重視される制御系、特に走る・曲がる・止まるに関わる車載制御のプログラムに用いるのが好適である。
【００５０】
尚、逐次プログラムを入力して並列プログラムを生成することについて説明したけれども、マルチコアで動作する並列プログラムをさらに細分するように使ってもよい。
【符号の説明】
【００５１】
２０：車載装置
２１：マルチコアプロセッサ
【図１】
0006428476.tif 000002
【図２】
0006428476.tif 000003
【図３】
0006428476.tif 000004
【図４】
0006428476.tif 000005
【図５】
0006428476.tif 000006
【図６】
0006428476.tif 000007
【図７】
0006428476.tif 000008
【図８】
0006428476.tif 000009
【図９】
0006428476.tif 000010