(57)【要約】      （修正有）【課題】特定のプロセッサに処理負荷が偏ることを抑制するマルチプロセッサシステムを提供する。【解決手段】３個以上のプロセッサを有するマルチプロセッサシステムであって、起動時に共有メモリから前回起動コアＮｏ．を読み込む（Ｓ１）。起動コア決定アルゴリズムを実行し、起動コアを決定し（Ｓ２）、起動コアは、タスクを複数のプロセッサのいづれでも動作させるＳＭＰか、特定のプロセッサで動作させるＡＭＰのどちらで起動させるかを前回の起動選択情報より決定し（Ｓ４）、全てのコアを決定した条件で起動させ（Ｓ５）、今回の起動時の選択結果を記憶する（Ｓ６）。【選択図】図４
2011100277.tif 000002
【特許請求の範囲】
【請求項１】
３個以上のプロセッサを有するマルチプロセッサシステムであって、
第１のタスクを複数のプロセッサのいずれのプロセッサでも動作させる第１起動種別で起動させた複数のプロセッサからなる第１プロセッサ群と、
第２のタスクを特定のプロセッサで動作させる第２起動種別で起動させた１個以上のプロセッサからなる第２プロセッサ群と、
マルチプロッセサシステムが有する各プロセッサを第１起動種別と第２起動種別のいずれの起動種別で起動させるかを選択するプロセッサ起動種別選択手段
を備え、
前記プロセッサ起動種別選択手段は、過去のプロセッサの起動種別の選択結果に基づいて各プロッセサの起動種別を選択することを特徴とするマルチプロッセサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに関する。
【背景技術】
【０００２】
マルチプロセッサシステムは、複数のＣＰＵ[Central Processing Unit]（プロセッサ）を備えている。マルチプロセッサシステムの一般的な動作形態として、ＳＭＰ[Symmetrical Multi Processing]が利用されている。ＳＭＰでは、複数のタスクを複数のＣＰＵに動的に分散させ、各ＣＰＵの負荷を分散させる。特許文献１には、自ＣＰＵの負荷が規定された上限値以上になった場合、自ＣＰＵ内のＣＰＵ占有率の高いタスクを停止させ、ＣＰＵ負荷が規定された下限値以下の他のＣＰＵを検索し、検索された他のＣＰＵに対してその停止させたタスクの起動指令を出力するＳＭＰの手法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−３２２４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、精密な動作タイミングが必要なタスク（例えば、ドライバなどのように下位層のハードウェアを直接操作するタスク）が存在する場合、ＳＭＰによって動作中にＣＰＵが変更されると精密なタイミングがとれないので、ＳＭＰだけで動作させることができない場合がある。そのような場合、特定のタスクを特定のＣＰＵに割り付けるＡＭＰ[Asymmetrical Multiple Processing]も利用される。そのため、マルチプロセッサシステムでは、ＳＭＰとＡＭＰが混在した環境で動作させることが多い。
【０００５】
ＳＭＰの場合にはＳＭＰに割り付けられた各ＣＰＵの負荷を平準化することは可能であるが、ＡＭＰの場合にはＡＭＰに割り付けられた各ＣＰＵの負荷を平準化することは困難である。そのため、ＳＭＰとＡＭＰが混在したマルチプロセッサシステムでは、ＡＭＰに割り付けられたＣＰＵの負荷を他のＣＰＵの負荷と平準化できない。その結果、特定のＣＰＵに負荷が偏り、そのＣＰＵが他のＣＰＵよりも先に劣化し、システムの寿命が短くなる可能性がある。例えば、ＣＤリッピング、ナビゲーションの経路案内、音声認識などのように使用頻度は高くないが処理速度を優先させる必要があるアプリケーションの場合、必要なときに処理速度を出せるように配慮してＣＰＵを割り付けるが、使用頻度が低いので、結果的には割り付けられたＣＰＵの平均負荷は低くなる。一方、通常走行中の地図描画、現在位置計算などのように使用頻度は高いが比較的負荷が低いアプリケーションの場合、使用頻度が多いので、割り付けられたＣＰＵの平均負荷は高くなる。このようにアプリケーション（タスク）によって負荷が変わるので、ＡＭＰに割り付けた場合には負荷が偏る。
【０００６】
そこで、本発明は、特定のプロセッサに処理負荷が偏ることを抑制するマルチプロセッサシステムを提供することを課題とする。
【課題を解決するための手段】
【０００７】
本発明に係るマルチプロセッサシステムは、３個以上のプロセッサを有するマルチプロセッサシステムであって、第１のタスクを複数のプロセッサのいずれのプロセッサでも動作させる第１起動種別で起動させた複数のプロセッサからなる第１プロセッサ群と、第２のタスクを特定のプロセッサで動作させる第２起動種別で起動させた１個以上のプロセッサからなる第２プロセッサ群と、マルチプロッセサシステムが有する各プロセッサを第１起動種別と第２起動種別のいずれの起動種別で起動させるかを選択するプロセッサ起動種別選択手段を備え、プロセッサ起動種別選択手段は、過去のプロセッサの起動種別の選択結果に基づいて各プロッセサの起動種別を選択することを特徴とする。
【０００８】
このマルチプロセッサシステムでは、３個以上のプロッセサを有しており、その３個以上のプロッセサが第１プロッセサ群（ＳＭＰで動作させるプロセッサ群に相当）と第２プロッセサ群（ＡＭＰで動作させるプロセッサ群に相当）に分けられる。第１プロセッサ群は、第１起動種別で起動された複数のプロセッサからなり、その複数のプロセッサに第１のタスク（１個以上のタスク）を動的に分散させる。第２プロッセサ群は、第２起動種別で起動された１個以上のプロセッサからなり、その１個以上のプロッセサに第２のタスク（第１のタスクと異なる１個以上のタスク）を固定で割り付ける。特に、マルチプロセッサシステムでは、プロセッサ起動種別選択手段により、過去のプロセッサの起動種別の選択結果に基づいて、各プロセッサを第１起動種別と第２起動種別のいずれの起動種別で起動させるかを選択する。したがって、マルチプロセッサシステムでは、起動する毎に、第１プロセッサ群に属する複数のプロセッサと第２プロセッサ群に属する１個以上のプロセッサが変わり、特定のタスク（第２のタスク）を動作させるプロセッサが変わる。このように、このマルチプロセッサシステムは、起動する毎にＡＭＰとして動作するプロセッサを変えることにより、特定のプロセッサに負荷が偏ることを抑制できる。その結果、全てのプロセッサの負荷を平準化でき、システムとしての寿命を延ばすことができる。
【発明の効果】
【０００９】
本発明は、起動する毎にＡＭＰとして動作するプロセッサを変えることにより、特定のプロセッサに負荷が偏ることを抑制できる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態に係るマルチコアマイコンの構成図である。
【図２】図１のマルチコアマイコンにおける前回の起動時の起動コア決定後の動作の流れであり、（ａ）が起動コアが他のコアを起動する場合であり、（ｂ）が起動コアが起動コアＮｏ．を書き込む場合である。
【図３】図１のマルチコアマイコンにおける今回の起動時の動作の流れであり、（ａ）が全コアが前回起動コアＮｏ．を読み込む場合であり、（ｂ）が起動コアが他のコアを起動する場合であり、（ｃ）が全コアが起動完了した場合であり、（ｄ）が起動コアが起動コアＮｏ．を書き込む場合である。
【図４】図１のマルチコアマイコンにおける起動時の処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、本発明に係るマルチプロセッサシステムの実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
【００１２】
本実施の形態では、本発明に係るマルチプロセッサシステムを、車両に搭載され、車両の各種制御（例えば、エンジン制御、ブレーキ制御、操舵制御などの車両制御、通信制御、ナビゲーション制御）を行うためのＥＣＵ[Electronic Control Unit]のマルチコアマイコンに適用する。本実施の形態に係るマルチコアマイコンは、４個のＣＰＵコア（プロセッサ）及び１個の共有メモリを有している。
【００１３】
図１〜図３を参照して、本実施の形態に係るマルチコアマイコン１について説明する。図１は、本実施の形態に係るマルチコアマイコンの構成図である。図２は、図１のマルチコアマイコンにおける前回の起動時の起動コア決定後の動作の流れである。図３は、図１のマルチコアマイコンにおける今回の起動時の動作の流れである。
【００１４】
マルチコアマイコン１は、４個のＣＰＵコア（第０コア１０、第１コア１１、第２コア１２、第３コア１３）及び１個の共有メモリ１４を備えており、この４個のＣＰＵコアによってＯＳ[Operating System]や各種アプリケーションを動作させる。ＯＳは、ＥＣＵ全体を管理する基本ソフトウェアである。アプリケーションは、ＥＣＵでの各制御を行うためのソフトウェアである。また、マルチコアマイコン１は、４個のコア１０，１１，１２，１３がＳＭＰとＡＭＰに分かれ、複数のアプリケーションのうちの特定のアプリケーションをＡＭＰに割り付けられたコアで動作させ、その他のアプリケーションをＳＭＰに割り付けられたコアで動作させる。特に、マルチコアマイコン１では、起動時に、前回の起動コアに応じてマスタとなる起動コアを順に変更し、その起動コアがＡＭＰのコアとＳＭＰのコアを順に変更する。
【００１５】
なお、本実施の形態では、４個のコア１０，１１，１２，１３のうちＳＭＰに割り付けられたコア群が特許請求の範囲に記載する第１プロセッサ群に相当し、ＡＭＰに割り付けられたコア群が特許請求の範囲に記載する第２プロセッサ群に相当し、各コア１０，１１，１２，１３が特許請求の範囲に記載するプロセッサ起動種別選択手段に相当する。
【００１６】
各コア１０，１１，１２，１３は、ＯＳやアプリケーションを動作させる機能を有している。特に、ＡＭＰに割り付けられた各コアは、ＡＭＰで動作させる特定のアプリケーション（１個以上のアプリケーション）だけを動作させる。ＡＭＰで動作させる特定のアプリケーションは、その負荷状況や設計思想などによって決定され、例えば、精密な動作タイミングが要求されるアプリケーションである。ＳＭＰに割り付けられた各コアは、ＡＭＰで動作させる以外の複数のアプリケーションを動的に分散して動作させる。どのコアにどのアプリケーションを動作させるかは、ＯＳで決定する。
【００１７】
マルチコアマイコン１における起動時の処理について説明する。前提として、初回の起動コアは、第０コア１０と予め決定されている。また、ＳＭＰに割り付けるコアを２個、ＡＭＰに割り付けるコアを２個とする。また、起動コア決定アルゴリズムとして、今回起動コアＮｏ．＝ｆ（前回起動コアＮｏ．）＝（前回起動コアＮｏ．＋１）％４とする。つまり、前回起動コアＮｏ．に１を加算した値を４で割ったときの余りの数値（番号）のコアを、今回起動コアとする。例えば、前回起動コアＮｏ．が「０（第０コア１０）」の場合にはｆ（０）＝（０＋１）％４＝１となり、第１コア１１が今回起動コアとなり、前回起動コアＮｏ．が「３（第３コア１３）」の場合にはｆ（３）＝（３＋１）％４＝０となり、第０コア１０が今回起動コアとなる。
【００１８】
前回の起動時に、マスタの前回の起動コアが、他の３個のコアを起動後、共有メモリ１４に自身のコアＮｏ．を書き込む。図２に示す例の場合、第０コア１０が前回起動コアであり、第０コア１０が、（ａ）図の実線の矢印で示すように他のコア１１，１２，１３を起動した後、（ｂ）図の一点鎖線の矢印で示すように共有メモリ１４に自身のコアＮｏ．の「０」を書き込む。
【００１９】
今回の起動時にマルチコアマイコン１全体がハードウェア的に立ち上がると、全てのコア１０，１１，１２，１３は、共有メモリ１４に記憶されている前回起動コアＮｏ．を読み込む。そして、全てのコア１０，１１，１２，１３は、その読み込んだ前回起動コアＮｏ．を用いて、起動コア決定アルゴリズムを実行する。ここで、各コア１０，１１，１２，１３は、起動コア決定アルゴリズムを実行した結果、今回起動コアＮｏ．が自身のコアＮｏ．に合致したか否かを判断する。今回起動コアＮｏ．が自身のコアＮｏ．に合致していないと判断した３個のコアでは、起動途中で一旦待機状態となる。
【００２０】
今回起動コアＮｏ．が自身のコアＮｏ．に合致していると判断したコアでは、マスタの起動コアとして、起動処理を継続して起動を完了させる。そして、今回の起動コアでは、ＳＭＰのコアとＡＭＰのコアを決定する。この決定方法としては、起動毎にＡＭＰのコアが順次変わっていけば、どのような方法でもよい。例えば、今回起動コア自身と次のＮｏ．のコアをＡＭＰのコアとし、他の２個のコアをＳＭＰのコアとする。
【００２１】
さらに、今回起動コアでは、待機状態である他の３個のコアを、決定したＡＭＰとＳＭＰのいずれかの動作種別でそれぞれ起動する。他の３個のコアの起動が完了すると、今回起動コアでは、共有メモリ１４に自身のコアＮｏ．を書き込む。そして、各コア１０，１１，１２，１３では、マルチコアマイコン１が停止するまで、決定されてＡＭＰ又はＳＭＰでそれぞれ動作する。
【００２２】
図３に示す例の場合、マルチコアマイコン１全体がハードウェア的に立ち上がると、全てのコア１０，１１，１２，１３が、（ａ）図の破線の矢印で示すように共有メモリ１４から前回起動コアＮｏ．の「０」を読み込み、この「０」を用いて起動コア決定アルゴリズムを実行すう。前回起動コアＮｏ．の「０」から今回起動コアが第１コア１１であると決定すると、第１コア１１が、ＡＭＰとＳＭＰの各コアを決定した上で、（ｂ）図の実線の矢印で示すように他のコア１０，１２，１３を起動する。起動が完了すると、（ｃ）図に示すように、全てのコア１０，１１，１２，１３が互いに情報を遣り取りしつつ、第１コア１１と第２コア１２がＡＭＰとして動作し、第３コア１３と第０コア１０がＳＭＰとして動作する。最後に、第１コア１１が、（ｄ）図の一点鎖線の矢印で示すように共有メモリ１４に自身のコアＮｏ．の「１」に書き換える。
【００２３】
図１を参照して、マルチコアマイコン１の起動時の動作について説明する。ここでは、図４のフローチャートに沿って説明する。図４は、図１のマルチコアマイコンにおける起動時の処理の流れを示すフローチャートである。
【００２４】
マルチコアマイコン１の起動時、全てのコア１０，１１，１２，１３では、共有メモリ１４から前回起動コアＮｏ．を読み込む（Ｓ１）。そして、全てのコア１０，１１，１２，１３では、前回起動コアＮｏ．を用いて起動コア決定アルゴリズムを実行し、起動コアを決定する（Ｓ２）。ここで、起動コア以外のコアは、一旦待機する。
【００２５】
起動コアは、起動を完了させる（Ｓ３）。そして、起動コアでは、ＡＭＰのコアとＳＭＰのコアを決定する（Ｓ４）。さらに、起動コアでは、他の３個コアを、決定したＡＭＰとＳＭＰにそれぞれ割り付けて起動する（Ｓ５）。起動完了後、起動コアでは、共有メモリ１４に今回起動コアＮｏ．を書き込む（Ｓ６）。
【００２６】
起動後、マルチコアマイコン１では、毎回異なるＡＭＰのコア群で特定のアプリケーションを動作させるとともに、毎回異なるコア群でその他のアプリケーションを分散して動作させる。
【００２７】
このマルチコアマイコン１によれば、起動する毎にＡＭＰとして動作するコアを順次変えることにより、特定のコアに負荷が偏ることを抑制できる。その結果、全てのコア１０，１１，１２，１３の負荷を平準化でき、システムとしての寿命を延ばすことができる。さらに、マルチコアマイコン１では、前回起動コアＮｏ．を共有メモリ１４に記憶させておき、起動する毎に前回起動コアＮｏ．に応じて起動コアを順次変えるという簡単な手法により、起動コアを基準としてＡＭＰとして動作するコアを順次変えることができる。
【００２８】
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
【００２９】
例えば、本実施の形態では車両に搭載され、車両の各種制御を行うためのマルチコアマイコン（マルチプロセッサシステム）に適用したが、飛行機などの他の移動体、産業機械、電気製品などの様々な分野で使われているマルチプロセッサシステムに適用可能である。
【００３０】
また、本実施の形態では４個のＣＰＵコア（プロセッサ）を備える構成としたが、３個のプロセッサあるいは５個以上のプロセッサを備える構成としてもよい。また、本実施の形態ではＡＭＰに割り付けるコアを２個、ＳＭＰに割り付けるコアを２個としたが、このＡＭＰとＳＭＰに割り付けるコアの数については、ＡＭＰで動作させるアプリケーションの数や負荷状況などによって適宜変えてよい。
【００３１】
また、本実施の形態では前回起動コアＮｏ．を記憶させておき、起動時に前回起動コアＮｏ．に基づいて今回起動コアを決定し、起動コアを基準としてＡＭＰに割り付けるコアとＳＭＰに割り付けるコアを決定する構成としたが、前回のＡＭＰのコアＮｏ．（あるいは、前回のＳＭＰのコアＮｏ．）を記憶させておき、起動時に前回のＡＭＰのコアＮｏ．（あるいは、前回のＳＭＰのコアＮｏ．）に基づいて今回のＡＭＰに割り付けるコアとＳＭＰに割り付けるコアを決定する構成としてもよい。また、前々回のコアＮｏ．など、更に過去のコアＮｏ．を考慮して決定してもよい。
【符号の説明】
【００３２】
１…マルチコアマイコン、１０…第０コア、１１…第１コア、１２…第２コア、１３…第３コア、１４…共有メモリ
【図１】
2011100277.tif 000003
【図２】
2011100277.tif 000004
【図３】
2011100277.tif 000005
【図４】
2011100277.tif 000006