(57)【要約】【課題】並列化後のプログラムを複数のコアで実行させるときに、複数のコアの処理を、並列化前のプログラム内のある特定のタイミングに対応させて同期させることが可能な技術を提供する。【解決手段】複数のコアを有する車両制御装置用の検証装置は、前記複数のコアの同期させるタイミングを示す同期タイミング情報を取得するタイミング同期部と、前記同期タイミング情報に基づいて、前記複数のコアに対する制御指示情報を作成する制御指示部と、を備える。【選択図】図６
2019016021.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを有する車両制御装置用の検証装置であって、
前記複数のコアの同期させるタイミングを示す同期タイミング情報を取得するタイミング同期部と、
前記同期タイミング情報に基づいて、前記複数のコアに対する制御指示情報を作成する制御指示部と、
を備え、
前記タイミング同期部は、前記複数のコアの実行結果に基づいて、同期させるべきタイミングで各コアが同期されたかを判定する、検証装置。
【請求項２】
請求項１に記載の検証装置において、
前記タイミング同期部は、同期させるべきタイミングで各コアが同期されていた場合、次の同期タイミング情報を取得し、
前記制御指示部は、前記次の同期タイミング情報に基づいて、前記複数のコアに対する制御指示情報を作成することを特徴とする検証装置。
【請求項３】
請求項１に記載の検証装置において、
前記複数のコアのうちの指示対象と、前記指示対象を同期させる指示タイミングとを構成項目として含む同期テーブルを格納する記憶部をさらに備え、
前記タイミング同期部は、前記同期テーブルを用いて前記同期タイミング情報を取得することを特徴とする検証装置。
【請求項４】
請求項１に記載の検証装置において、
前記タイミング同期部は、同期させるべきタイミングで各コアが同期されなかった場合、前記制御指示部に対して、前回と同じ前記制御指示情報を各コアに送信するように指示することを特徴とする検証装置。
【請求項５】
請求項３に記載の検証装置において、
前記同期テーブルが、前記指示タイミングの次に実行される処理内容の情報をさらに含み、
前記制御指示部が、前記次に実行される処理内容を含む前記制御指示情報を作成することを特徴とする検証装置。
【請求項６】
請求項３に記載の検証装置において、
前記同期テーブルが、変数名と、前記変数名の値とを含むことを特徴とする車両制御装置用の検証装置。
【請求項７】
請求項１に記載の検証装置において、
前記検証装置が車両に搭載されていることを特徴とする検証装置。
【請求項８】
請求項１に記載の検証装置によって検証される車両制御装置であって、
前記複数のコアは、
前記制御指示情報に従って処理を実行する処理部と、
前記処理部の処理内容を監視し、前記実行結果を作成するタイミング監視部と、
を備えることを特徴とする車両制御装置。
【請求項９】
請求項８に記載の車両制御装置において、
前記複数のコアのうち少なくとも１つが、各コアから前記実行結果を収集する監視タイミング集約部を備えることを特徴とする車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両制御装置用の検証装置及び車両制御装置に関する。
【背景技術】
【０００２】
従来より、複数のコア（又はノード）を有する並列計算装置が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＷＯ２０１１／００１５１９
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の並列計算装置において、各処理単位（コア）によって実行される処理が、意図したタイミングで動作しているかを把握することは困難である。特に並列化を前提として設計されたプログラムとは異なる、旧来のシングルコアシステム用のプログラムを並列化した場合、並列化前のある処理が、並列化後のどの部分に対応するかを把握することは難しい。したがって、このような場合では、プログラムを並列化した前後で等価性を保証することが難しい。
【０００５】
特許文献１は、複数のノードで処理を同期させるシステムを開示する。特許文献１のシステムは、複数の処理を複数のノードにおいて同期させるために、同時実行する処理を事前に指定する。そして、当該システムは、処理の実行を一時的に保留させる機能を備え、複数のノード間で処理の開始点を同期させる。
【０００６】
しかし、特許文献１のシステムは、処理の開始点を同期させるだけであり、複数の処理を並列に実行するときのテストが十分に行えない。例えば、上述のようにシングルコアシステム用のプログラムを並列化した場合におけるテストを十分に行うことができない。特許文献１のシステムでは、並列化後のプログラムを複数のノードで実行させるときに、処理中の特定のタイミングで同期させて、複数の処理の影響を確認することができない。
【０００７】
そこで、本開示は、上記課題を解決するための技術を提供するものであり、並列化後のプログラムを複数のコアで実行させるときに、複数のコアの処理を、並列化前のプログラム内のある特定のタイミングに対応させて同期させることが可能な技術を提供する。
【課題を解決するための手段】
【０００８】
例えば、上記課題を解決するために、特許請求の範囲に記載の構成を採用する。本願は上記課題を解決する手段を複数含んでいるが、その一例をあげるならば、複数のコアを有する車両制御装置用の検証装置であって、前記複数のコアの同期させるタイミングを示す同期タイミング情報を取得するタイミング同期部と、前記同期タイミング情報に基づいて、前記複数のコアに対する制御指示情報を作成する制御指示部と、を備え、前記タイミング同期部は、前記複数のコアの実行結果に基づいて、同期させるべきタイミングで各コアが同期されたかを判定する、検証装置が提供される。
【発明の効果】
【０００９】
本発明によれば、並列化後のプログラムを複数のコアで実行させるときに、複数のコアの処理を、並列化前のプログラム内のある特定のタイミングに対応させて同期させることができる。本発明に関連する更なる特徴は、本明細書の記述、添付図面から明らかになるものである。また、上記した以外の、課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１における車両のシステムの概略構成図である。
【図２】実施例１における車両制御装置のＨ／Ｗ（Ｈａｒｄｗａｒｅ）構成を示した図である。
【図３】実施例１におけるＥＣＵのＨ／Ｗ構成を示した図である。
【図４】実施例１におけるＥＣＵのコアにおいて実行されるソフトウェアモジュール構成を示した図である。
【図５】実施例１におけるＥＣＵとシミュレータの関連を示した図である。
【図６】実施例１におけるシミュレータのソフトウェアモジュール構成を示した図である。
【図７】実施例１におけるＥＣＵのコアの制御部及び通信監理部のソフトウェアモジュール構成を示した図である。
【図８Ａ】実施例１における制御指示情報の一例を示した図である。
【図８Ｂ】実施例１における制御指示情報の一例を示した図である。
【図９Ａ】実施例１における同期テーブルの一例を示した図である。
【図９Ｂ】実施例１における同期テーブルの一例を示した図である。
【図１０】実施例１におけるログ情報の一例を示した図である。
【図１１】実施例１におけるシミュレータ及びＥＣＵで実行される処理を示すフローチャートである。
【図１２】実施例２におけるＥＣＵのコアにおいて実行されるソフトウェアモジュール構成を示した図である。
【図１３】実施例３におけるＥＣＵにおいて実行されるソフトウェアモジュール構成を示した図である。
【図１４】実施例４における同期テーブルの一例を示した図である。
【図１５】実施例４における制御指示情報の一例を示した図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して本発明の実施例について説明する。添付図面は本発明の原理に則った具体的な実施例を示しているが、これらは本発明の理解のためのものであり、決して本発明を限定的に解釈するために用いられるものではない。
【００１２】
以下では、好適な例として車両における車両制御装置の実施例について説明する。しかし、以下の実施例は、車両制御装置以外への適用を妨げるものではない。
【００１３】
［実施例１］
図１は、実施例１における車両のシステムの概略構成図である。１は、内部に車両制御装置を有する車両（自動車等）である。２は、例えば車載ネットワーク（ＣＡＮ：Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ、ＣＡＮＦＤ：ＣＡＮ  ｗｉｔｈ  Ｆｌｅｘｉｂｌｅ  Ｄａｔａ−ｒａｔｅ、Ｅｔｈｅｒｎｅｔ（登録商標）等）とコントローラ（ＥＣＵ：Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ等）により構成される車両制御装置である。３は、車両１と外部の装置との間の無線通信（例えば携帯電話の通信、無線ＬＡＮ、ＷＡＮ等のプロトコルを使用した通信）を行い、外界（インフラ、他車）の情報あるいは自車に関する情報を取得及び送信する通信装置、又は、診断端子（ＯＢＤ）やＥｔｈｅｒｎｅｔ端子、外部記録媒体（例えばＵＳＢメモリ、ＳＤカード等）端子等を有し、有線接続を行い車両制御装置２と有線通信を実施する通信装置である。４は、例えば２と異なる、又は同一のプロトコルを用いたネットワークにより構成される車両制御装置である。
【００１４】
５は、車両制御装置２の制御に従い、車両運動を制御する機械及び電気装置（例えばエンジン、トランスミッション、ホイール、ブレーキ、操舵装置等）の駆動を行う駆動装置（アクチュエータ等）である。６は、外界から入力される情報を取得し、外界認識情報を生成する、カメラ、レーダ、ＬＩＤＡＲ、超音波センサ等の外界センサ、及び、車両１の状態（運動状態、位置情報等）を認識する力学系センサ（加速度、車輪速度、ＧＰＳ：Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）により構成される認識装置である。
【００１５】
７は、図示省略のネットワークシステムに有線又は無線で接続され、ネットワークシステムから送出されるデータを受信し、メッセージ情報（例えば映像、音）等の必要な情報を表示又は出力する、液晶ディスプレイ、警告灯、及び、スピーカ等の出力装置である。８は、ユーザが車両制御装置２に対して、操作の意図や指示を入力する入力信号を生成するための、例えばステアリング、ペダル、ボタン、レバー、タッチパネル等の入力装置である。９は、車両１が外界に対して車両１の状態等を通知するための、ランプ、ＬＥＤ、スピーカ等の通知装置である。
【００１６】
車両制御装置２は、車両制御装置４、通信装置３、駆動装置５、認識装置６、出力装置７、入力装置８、及び、通知装置９等に接続されており、それぞれと情報の送受信を行う。
【００１７】
図２は、実施例１における車両制御装置２のＨ／Ｗ（Ｈａｒｄｗａｒｅ）構成を示した図である。２０１は、車載のネットワークシステムに接続するネットワークリンクであり、例えばＣＡＮバス等のネットワークリンクである。２０２は、ネットワークリンク２０１、及び、ネットワークリンク２０１以外のネットワークリンク（専用線含む）に接続されているＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：電子制御ユニット）である。ＥＣＵ２０２は、ネットワークを介して駆動装置５及び認識装置６の制御を行い、駆動装置５及び認識装置６と情報の送受信を行う。２０３は、複数のネットワークリンク２０１を接続し、それぞれのネットワークリンクとデータの送受信を行うゲートウェイ（以下ＧＷ）である。
【００１８】
図２のネットワークトポロジは、２つのバスに複数のＥＣＵ２０２が接続されているバス型である。他の例として、ネットワークトポロジは、複数のＥＣＵが直接ＧＷに接続されるスター型、ＥＣＵが一連のリンクにリング状に接続されているリンク型、又は、それぞれの型が混在し複数のネットワークにより構成される混在型等であってもよい。ＥＣＵ２０２及びＧＷ２０３については、図２の例以外に、ＧＷ機能を有するＥＣＵ、又はＥＣＵの機能を有するＧＷ等が採用されてもよい。
【００１９】
ＥＣＵ２０２は、ネットワークを介して受信したデータに基づいて、駆動装置５への制御信号の出力、認識装置６からの情報の取得、ネットワークへの制御信号及び情報の出力、及び、内部状態の変更等の制御処理を行う。
【００２０】
図３は、実施例１におけるＥＣＵ２０２のＨ／Ｗ構成を示した図である。ＥＣＵ２０２は、複数のコアを有し、複数のコアを用いて並列制御を行う。
【００２１】
３０１は、キャッシュ又はレジスタ等の記憶素子を有し、制御を実行するＣＰＵ（プロセッサ）等のコアである。図３の例では、ＥＣＵ２０２は、複数のコア３０１−１〜３０１−Ｎを有する。３０２は、特定のコアだけがアクセス可能な揮発性のデータを保存するＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。図３の例では、コア３０１−１〜３０１−Ｎが、それぞれ、対応するＬｏｃａｌ  ＲＡＭ３０２−１〜３０２−Ｎを備える。３０３は、図示省略のクロック等を使用し、時間及び時刻の管理を行うタイマである。３０４は、プログラム及び不揮発性のデータを保存するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）である。３０５は、不特定のコアがアクセス可能な揮発性のデータを保存するＧｌｏｂａｌ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２２】
３０６は、ネットワークリンク２０１等のネットワークや専用線で接続された駆動装置５及び／又は認識装置６に対してデータの送受信を行うＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）である。３０７は、ＥＣＵ２０２の内部での通信に用いられる内部バスである。３０８は、電源遮断後もデータを保持可能な外部メモリであり、ＥＥＰＲＯＭ、ＳｏｌｉｄＳｔａｔｅＤｒｉｖｅ、又はＨａｒｄＤｉｓｃＤｒｉｖｅ等である。
【００２３】
図４は、実施例１におけるコア３０１−１〜３０１−Ｎにおいて実行されるソフトウェアモジュール構成を示した図である。４０１は、図示省略の通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）から取得したデータの解析、及び、ソフトウェアモジュール全体の制御を行う制御部である。４０２は、通信Ｉ／Ｆの動作及び状態を管理し、内部バス３０７を介して通信Ｉ／Ｆに指示を行う通信管理部である。４０３は、タイマ３０３を管理し、時間に関する情報の取得及び制御を行う時間管理部である。４０４は、一時的にデータを確保するバッファである。
【００２４】
図４では、コア３０１上の動作概念が示されている。実際には、コア３０１は、動作時に必要な情報をＲＯＭ３０４及びＲＡＭ３０５から適宜取得し、又は、ＲＯＭ３０４及びＲＡＭ３０５に適宜書き込む。
【００２５】
図５は、実施例１におけるＥＣＵ２０２とシミュレータ５０１の関連を示した図である。シミュレータ５０１は、車両制御装置２用の検証装置である。この例では、シミュレータ５０１は、車両１のネットワークに接続するコンピュータであり、シミュレータ５０１の機能はコンピュータ上で実行されるプログラムで実装される。なお、シミュレータ５０１は、車両外部のコンピュータに限定されず、車両に搭載されたＥＣＵ２０２において実装されてもよい。
【００２６】
ＥＣＵ２０２とシミュレータ５０１とは、通信経路６０１で接続されている。シミュレータ５０１は、通信部５１１を介して制御指示情報７０１をＥＣＵ２０２へ送信する。ＥＣＵ２０２は、Ｉ／Ｏ３０６を介して制御指示情報７０１を受信し、制御指示情報７０１をコア３０１へ送信する。コア３０１の通信Ｉ／Ｆが制御指示情報７０１を受信すると、コア３０１は、制御指示情報７０１に従って処理を実行し、ログ情報（実行結果）８０１を通信Ｉ／Ｆを介してＩ／Ｏ３０６に送信する。ＥＣＵ２０２は、Ｉ／Ｏ３０６を介してログ情報８０１をシミュレータ５０１へ送信する。シミュレータ５０１は、通信部５１１を介してログ情報８０１を受信する。シミュレータ５０１は、受信したログ情報８０１に基づいて次の制御指示情報７０１を計算する。
【００２７】
通信経路６０１は、ＥＣＵ２０２とシミュレータ５０１とを接続する経路である。通信経路６０１は、ＣＡＮをはじめとする車載用ネットワークや、Ｅｔｈｅｒｎｅｔ、無線ＷｉＦｉのような通信方式のどれか、又は、ＧａｔｅＷａｙや他のＥＣＵやコンピュータを経由して前記通信方式を組み合わせた経路でもよい。なお、ＥＣＵ２０２とシミュレータ５０１との直接通信に制限されず、ＥＣＵ２０２とシミュレータ５０１との間に他の装置が介在してもよい。
【００２８】
図６は、実施例１におけるシミュレータ５０１のソフトウェアモジュール構成を示した図である。上述したように、シミュレータ５０１は、例えば、汎用のコンピュータを用いて実現されてもよい。シミュレータ５０１の各処理部は、コンピュータ上で実行されるプログラムの機能として実現されてもよい。コンピュータは、ＣＰＵ（Central Processing Unit）等のプロセッサと、メモリ等の記憶部と、ハードディスク等の補助記憶装置を備える。シミュレータ５０１の処理は、各処理部に対応するプログラムコードがメモリに格納され、プロセッサが各プログラムコードを実行することによって実現されてもよい。
【００２９】
シミュレータ５０１は、通信部５１１と、タイミング同期部５１２と、制御指示部５１３と、記憶部５１４とを備える。
【００３０】
通信部５１１は、入力部５２１と出力部５２２とを備える。入力部５２１は、ログ情報８０１をＥＣＵ２０２から受け取る。タイミング同期部５１２は、同期テーブル９０１に基づいて後述する処理を実行する。タイミング同期部５１２は、同期テーブル９０１から同期タイミング情報５１５を取得し、同期タイミング情報５１５を制御指示部５１３に出力する。制御指示部５１３は、同期タイミング情報５１５から制御指示情報７０１を計算し、制御指示情報７０１を出力部５２２に出力する。出力部５２２は、制御指示情報７０１をＥＣＵ２０２に送信する。
【００３１】
記憶部５１４は、同期テーブル９０１を格納している。また、記憶部５１４は、ＥＣＵ２０２から受け取ったログ情報８０１を蓄積する。
【００３２】
シミュレータ５０１は、ディスプレイ等の表示部５０２に接続されてよい。表示部５０２は、同期テーブル９０１、制御指示情報７０１、及び、ログ情報８０１を表示する。ユーザは、表示部５０２に表示された同期テーブル９０１及びログ情報８０１から、並列化前のある処理が、並列化後のどの部分に対応するかを確認することができる。また、ユーザは、ログ情報８０１を参照することにより、同期テーブル９０１で指定した同期タイミングで複数のコア３０１が同期されているかを確認することができる。
【００３３】
図７は、実施例１におけるＥＣＵ２０２のコア３０１−１〜３０１−Ｎの制御部４０１及び通信管理部４０２のソフトウェアモジュール構成を示した図である。ここでは、コア３０１−１の構成について説明するが、コア３０１−２〜３０１−Ｎについても同様の構成を備える。
【００３４】
制御部４０１は、処理部４１１とタイミング監視部４１２とを備える。また、通信管理部４０２は、入力部４２１と出力部４２２とを備える。
【００３５】
入力部４２１は、シミュレータ５０１から制御指示情報７０１を受信する。入力部４２１は、受信した制御指示情報７０１を処理部４１１へと受け渡す。処理部４１１は、受け取った制御指示情報７０１に従って、処理部４１１内でＥＣＵ２０２が備えるアプリケーション及び／又は基盤ソフトウェア等を動作させる。タイミング監視部４１２は、処理部４１１の動作を監視し、動作結果情報４３１を取得する。あるいは、処理部４１１は、動作結果情報４３１をタイミング監視部４１２に出力する。
【００３６】
タイミング監視部４１２は、動作結果情報４３１からログ情報８０１を計算し、ログ情報８０１を出力部５２２へと受け渡す。出力部５２２は、受け取ったログ情報８０１をシミュレータ５０１へ送信する。
【００３７】
以降では、本実施例で用いられる各種情報について説明する。図８Ａは、実施例１における制御指示情報７０１の一例を示した図である。制御指示情報７０１は、同期ＩＤ７１１と、指示対象７１２と、指示タイミング７１３とを構成項目として有する。
【００３８】
同期ＩＤ７１１は、数字、アルファベット、記号等で構成される値であり、内容は特に制限されず、プログラムの実行順序の関係が識別可能な値で設定されればよい。
【００３９】
指示対象７１２は、指示対象を一意に識別できる、文字列、数字、記号等で構成される値である。図８Ａの例では、指示対象７１２は、指示対象となるＥＣＵ及びコアの情報を含む。指示対象７１２は、ＥＣＵ、コア、プロセッサ等のソフトウェアを処理する単位で記載されてもよいし、車両、サーバ又はその他の制御装置等の情報が記載されてもよい。また、指示対象７１２として、タスク、プロセス名等のソフトウェア内の処理単位が指定されてもよい。なお、シミュレータ５０１が、指示対象に対して制御指示情報７０１を直接送信する場合、指示対象７１２の列を省略することができる。
【００４０】
指示タイミング７１３は、指示対象を同期させるタイミングの情報である。例えば、指示タイミング７１３には、数字やアルファベット等の順序が識別できる情報（例えば、処理ステップ番号）や、文字列や数字等の処理名が一意にわかる情報で記載される前段／後段処理名等が記載される。図８Ａの例では、指示タイミング７１３は、指示対象となるコアに関する同期タイミングの情報を含む。指示タイミング７１３は、処理ステップ番号の情報を含む。指示対象のコアは、指示タイミング７１３に記載された処理ステップ番号まで実行して処理を停止する。また、指示タイミング７１３は、前段処理名の情報を含んでもよい。指示対象のコアは、指示タイミング７１３に記載された前段処理を実行した後に処理を停止する。指示タイミング７１３は、上述の処理ステップ番号及び前段処理の情報の少なくとも一方を含んでよい。なお、その他の例として、指示タイミング７１３は、現実時間や、指示対象が計算する計算時間といった時間情報であってもよい。
【００４１】
図８Ｂは、実施例１における制御指示情報７０１の一例を示した図である。制御指示情報７０１は、後段処理内容７１４をさらに含んでもよい。後段処理内容７１４は、次の処理及びラベルの情報を含む。後段処理内容７１４には、指示タイミング７１３で同期させた後に実行される次の処理内容の情報が記載される。図８Ｂの例では、後段処理内容７１４は、次の処理名及びラベルの情報を含む。次の処理名には、処理名を一意に識別できる、文字列、数字、記号等で構成される値が記載される。ラベルには、当該次の処理で使用される変数、配列、構造体等の情報が記載される。ラベルの情報として、数字、文字列、ビット列等の値が使用され得る。ラベルには、これらの値の処理実行後の値及び／又は処理実行前の値の情報が含まれてもよい。
【００４２】
なお、制御指示情報７０１は、上記内容以外にもプログラムを動作させる指示及び値を含んでもよい。
【００４３】
図９Ａは、実施例１における同期テーブル９０１の一例を示した図である。図９Ａの同期テーブル９０１の場合、図８Ａの制御指示情報７０１が作成される。同期テーブル９０１は、同期ＩＤ９１１と、比較対象グループ９１２と、比較対象９１３と、比較情報９１４とを構成項目として含む。
【００４４】
同期ＩＤ９１１は、数字、アルファベット、記号等で構成される値であり、内容は特に制限されず、プログラムの実行順序の関係が識別可能な値で設定されればよい。複数の行で同じ同期ＩＤを共有し、同じ同期ＩＤを持つ行は同期すべき処理の組み合わせを表す。
【００４５】
比較対象グループ９１２は、数字、アルファベット、記号等で構成される値であり、比較対象のグループを一意に識別できる値であればよい。比較対象グループ９１２が同じ値に設定されている行は一セットとして扱われる。図９Ａの例では、プログラムの実行結果が「対象１」と「対象２」との間で比較される。「対象１」は、並列化後のプログラムを実行するグループである。「対象２」は、並列化前のプログラムを実行するグループである。
【００４６】
比較対象９１３は、数字、アルファベット、記号等で構成される値であり、比較対象を一意に識別できる値であればよい。比較対象９１３は、ＥＣＵ、コア、プロセッサ等のソフトウェアを処理する単位で記載されてもよいし、車両、サーバ又はその他の制御装置等の情報が記載されてもよい。また、比較対象９１３として、タスク、プロセス名等のソフトウェア内の処理単位が指定されてもよい。図９Ａの例では、ＥＣＵ１のコア１とＥＣＵ１のコア２が、並列化後のプログラムを実行する「対象１」として指定されている。また、ＥＣＵ２のコア１が、並列化前のプログラムを実行する「対象２」として指定されている。
【００４７】
比較情報９１４は、比較対象を同期させるタイミングの情報を含む。例えば、比較情報９１４には、数字やアルファベット等の順序が識別できる情報（例えば、処理ステップ番号）や、文字列や数字等の処理名が一意にわかる情報で記載される前段／後段処理名等が記載される。図９Ａの例では、比較情報９１４は、同期させるタイミングとして、処理ステップ番号の情報を含む。なお、その他の例として、比較情報９１４は、現実時間や指示対象が計算する計算時間といった時間情報であってもよい。
【００４８】
比較情報９１４は、処理内容の情報を含んでもよい。処理内容は、処理名を一意に識別できる、文字列、数字、記号等で構成される値を含んでもよい。また、処理内容は、ラベルの情報を含んでもよい。ラベルには、当該処理で使用される変数、配列、構造体等の情報が含まれる。ラベルの情報として、数字、文字列、ビット列等の値が使用され得る。また、ラベルには、処理実行後の値及び／又は処理実行前の値の情報が含まれてもよい。
【００４９】
なお、同期テーブル９０１の１つの同期ＩＤ９１１に対して、少なくとも２種類以上の比較対象グループ９１２が含まれる必要がある。同期テーブル９０１は、本実施例に記載の構成に限らず、上記情報と同様のものを含めばよい。
【００５０】
図９Ｂは、実施例１における同期テーブル９０１の一例を示した図である。図９Ｂの同期テーブル９０１の場合、図８Ｂの制御指示情報７０１が作成される。同期テーブル９０１は、後段処理内容９１５をさらに含んでもよい。後段処理内容９１５は、図８Ｂの後段処理内容７１４と同様の内容であるため、説明を省略する。
【００５１】
次に、同期テーブル９０１の比較情報９１４に記載される処理の特定方法について説明する。例えば、以下の第１の方法及び第２の方法を用いて、同期テーブル９０１を予め作成することができる。
【００５２】
第１の方法として、比較対象となるプログラム（並列化前のプログラム及び並列化後のプログラム）の各ソースコードから同期すべき処理を探し出す方法がある。比較対象となる複数のソースコードにおいて、プログラミング言語に備えられたライブラリ関数（標準入出力関数等）の使用箇所から、同期すべき箇所の推測が可能となる。そこで、同期テーブル９０１に記載される同期すべき処理と箇所を特定する方法として、ライブラリ関数の使用箇所が用いられてもよい。例えば、比較対象となる複数のソースコードにおいて、同じライブラリ関数を使用している箇所をピックアップし、ピックアップされた箇所を同期すべきタイミングとしてもよい。
【００５３】
第２の方法として、比較対象となるプログラムの各ソースコードに対して同期すべき処理を埋め込む手法である。ツール又はハンドコードで同期ポイントを各ソースコード内に記載しておいてもよい。これにより、同期箇所の特定が可能となる。例えば、ソースコードの並列化前後で同期すべき箇所を特定する場合、ループ処理の開始箇所や関数の開始箇所等、同期するポイントとなり得る箇所をトレースする。そして、ツール又は設計者の手で同期用の処理を当該箇所に埋め込む（例えば、関数やパイプライン処理等を埋め込むことが可能である）。
【００５４】
同期テーブル９０１に記載される内容は、上記処理に限定されるものではなく、設計者が編集してもよい。
【００５５】
図１０は、実施例１におけるログ情報８０１の一例を示した図である。ログ情報８０１は、同期ＩＤ８１１と、比較対象８１２と、タイミング８１３と、処理内容８１４とを構成項目として含む。
【００５６】
同期ＩＤ８１１及び比較対象８１２は、それぞれ、制御指示情報７０１の同期ＩＤ７１１及び指示対象７１２（あるいは、同期テーブル９０１の同期ＩＤ９１１及び比較対象９１３）と同じ内容であるため、説明を省略する。
【００５７】
タイミング８１３は、比較対象８１２が実際にどこまで実行したかを示す情報である。図１０の例では、タイミング８１３は、ソースコード内の処理ステップ番号であり、比較対象８１２が処理ステップ番号まで実行したことを表す。なお、タイミング８１３は、同期テーブル９０１の比較情報９１４として指定されたものと同様の内容であればよい。タイミング８１３は、処理ステップ番号、前段／後段処理名、又は、現実時間や計算時間といった時間情報等であってもよい。
【００５８】
処理内容８１４は、比較対象８１２が実際に実行した処理内容の情報である。処理内容８１４は、同期テーブル９０１の比較情報９１４の処理内容として指定されたものと同様の内容であり、処理名やラベルの情報等を含んでもよい。ラベルには、実際に実行した処理内で使用された変数、配列、構造体等の情報が含まれる。ラベルの情報として、数字、文字列、ビット列等の値が使用され得る。また、ラベルには、処理実行後の値及び／又は処理実行前の値の情報が含まれてもよい。
【００５９】
ログ情報８０１は、同じ同期ＩＤ８１１を持つ２行以上の表で表現される。ログ情報８０１は、本構成に制限されるものではなく、上記記載内容と同等の内容であれば表の形式は問わない。
【００６０】
図１１は、実施例１におけるシミュレータ５０１及びＥＣＵ２０２で実行される処理を示すフローチャートである。シミュレータ５０１及びＥＣＵ２０２は、Ｓ１１０１〜Ｓ１１０８をプログラムの処理が終了するまで繰り返し実行する。
【００６１】
（Ｓ１１０１）
初回動作時、タイミング同期部５１２は、同期テーブル９０１の１行目を読み込み、以下の同期タイミング情報生成処理を実行する。タイミング同期部５１２は、同期テーブル９０１において、読み込んだ１行目と同じ同期ＩＤ９１１の行を選択する。タイミング同期部５１２は、同じ同期ＩＤ９１１の全ての行を選択し終えた後、これら選択した全ての行を同期タイミング情報５１５として制御指示部５１３に出力する。
２回目以降の動作時、タイミング同期部５１２は、ログ情報８０１に基づいて、同期させるべき次の処理を決定する。例えば、タイミング同期部５１２は、ＥＣＵ２０２から受信したログ情報８０１と同期テーブル９０１とを比較し、同期させるべきタイミングで各コアが同期されたかを判定する。同期させるべきタイミングで各コアが同期されていた場合、タイミング同期部５１２は、同期させるべき次の処理を決定する。すわなち、タイミング同期部５１２は、同期テーブル９０１から次の同期ＩＤ９１１の行を選択する。タイミング同期部５１２は、前回選択した同期ＩＤ９１１の次の同期ＩＤ９１１の１行目を選択する。次に、タイミング同期部５１２は、同期テーブル９０１において、読み込んだ１行目と同じ同期ＩＤ９１１の行を選択する。タイミング同期部５１２は、同じ同期ＩＤ９１１の全ての行を選択し終えた後、これら選択した全ての行を同期タイミング情報５１５として制御指示部５１３に出力する。このような構成によれば、並列化後のプログラムを複数のコアで実行させるときに、複数のコアの処理を、並列化前のプログラム内のある特定のタイミングで同期させ、その同期結果を逐次確認しながら、複数のコアでの処理の影響を確認することができる。
なお、２回目以降の動作時、同期させるべきタイミングで各コアが同期されていなかった場合、タイミング同期部５１２は、制御指示部５１３に対して、前回と同じ制御指示情報７０１を再送信するよう指示してもよい。この場合、タイミング同期部５１２は、表示部５０２にログ情報８０１及び同期テーブル９０１の情報を表示し、ユーザに通知してもよい。
変形例として、タイミング同期部５１２は、複数のセット（異なる同期ＩＤのセット）を同期タイミング情報５１５として制御指示部５１３に出力してもよい。この場合、後段のＳ１１０２において、制御指示部５１３が、同期させる複数のタイミングを含む制御指示情報７０１を作成する。
また、２回目以降の動作時、タイミング同期部５１２は、ログ情報８０１に基づいて、今回受信したログ情報８０１の同期ＩＤ８１１の値に１加えた同期ＩＤを選択するようにしてもよい。本ステップでは、同じ同期ＩＤ９１１の行が選択されればよく、上述した処理に限定されない。
【００６２】
（Ｓ１１０２）
制御指示部５１３は、受け取った同期タイミング情報５１５に基づいて、制御指示情報７０１を作成する。例えば、制御指示部５１３は、比較対象９１３の内容を制御指示情報７０１の指示対象７１２に格納し、比較情報９１４の内容を制御指示情報７０１の指示タイミング７１３に格納する。同期テーブル９０１が図９Ａの例の場合、制御指示部５１３は、図８Ａの制御指示情報７０１を作成する。同期テーブル９０１が図９Ｂの例の場合、制御指示部５１３は、図８Ｂの制御指示情報７０１を作成する。制御指示部５１３は、作成した制御指示情報７０１を出力部５２２へ出力する。
なお、指示対象に指示情報を直接送信する場合には、制御指示部５１３は、制御指示情報７０１の各行ごとに指示情報を作成してもよい。
また、制御指示部５１３は、指示対象の動作を停止させる又は再開させる等の動作指示の行を制御指示情報７０１に追加してもよい。制御指示部５１３は、同期させるべき指示対象に同期のタイミングを指示できればよく、制御指示情報７０１は適宜変更されてもよい。
【００６３】
（Ｓ１１０３）
出力部５２２は、受け取った制御指示情報７０１をＥＣＵ２０２に送信する。
【００６４】
（Ｓ１１０４）
ＥＣＵ２０２のコアの入力部４２１は、制御指示情報７０１を受信する。以下では、ＥＣＵ１のコア１（３０１−１）が図８Ａの制御指示情報７０１を受信した例で説明する。入力部４２１は、処理部４１１に制御指示情報７０１へと受け渡す。
【００６５】
（Ｓ１１０５）
処理部４１１は、制御指示情報７０１に従って、指示タイミング７１３に指定されたタイミングまでプログラムを実行する。処理部４１１は、制御指示情報７０１の指示対象７１２に自身が指定されている行（ＥＣＵ１のコア１の行）を選択する。処理部４１１は、当該選択した行の指示タイミング７１３（処理ステップ番号：１０００２）までプログラムを実行する。例えば、処理部４１１は、処理を開始又は中断している処理を再開し、処理ステップ番号（１０００２）を経過した後、処理を停止する。
指示タイミング７１３に前段処理が指定されている場合、処理部４１１は、処理を開始又は中断している処理を再開し、指定された前段処理を終了した後に処理を停止する。
なお、指示タイミング７１３に複数のタイミングが指定されていた場合、処理部４１１は、最初に到達した指示タイミングで停止する。そして、一旦ログ情報８０１が作成された後、処理部４１１は、次の指示タイミングで停止する。
図８Ｂの制御指示情報７０１の場合、処理部４１１は、後段処理内容７１４の情報を用いて指示タイミング７１３まで実行したかを判定することができる。後段処理内容７１４は、上述したように、指示タイミング７１３で停止した際の次の処理内容を示す。したがって、処理部４１１は、処理を停止した後、次に実行する処理と後段処理内容７１４とを比較し、一致するかを判定する。一致しない場合、処理部４１１は、処理を再開し、再度指示タイミング７１３を参照して処理を停止させる。処理部４１１は、次に実行する処理と後段処理内容７１４とが一致するまで処理を実行し続ける。また、処理部４１１は、処理の開始と停止を規定回数試行した後に処理を停止する。なお、後段処理内容７１４にラベルの情報が指定されている場合、処理部４１１は、処理を停止した時点で実行中のラベル（変数等）と、後段処理内容７１４のラベルとを比較し、これらが一致するまで処理を実行してもよい。
【００６６】
（Ｓ１１０６）
タイミング監視部４１２は、処理部４１１の処理内容を監視し、ログ情報８０１を作成する。タイミング監視部４１２は、処理部４１１が動作を停止した際に、制御指示情報７０１及び動作結果情報５３１から、同期ＩＤ８１１、比較対象８１２、タイミング８１３及び処理内容８１４の情報を取得し、ログ情報８０１を作成する。タイミング監視部４１２は、作成したログ情報８０１を出力部４２２に出力する。
タイミング監視部４１２は、同期ＩＤ８１１ごとに個別にログ情報８０１を出力してもいし、複数の同期ＩＤ８１１に関するログ情報８０１を蓄積しておき、蓄積したログ情報８０１をまとめて出力してもよい。
なお、別の例として、タイミング監視部４１２は、一定周期ごとにログ情報８０１を作成してもよい。
【００６７】
（Ｓ１１０７）
出力部４２２は、受け取ったログ情報８０１をシミュレータ５０１に送信する。
【００６８】
（Ｓ１１０８）
シミュレータ５０１の入力部５２１は、ログ情報８０１を受信し、記憶部５１４にログ情報８０１を格納する。このとき、タイミング同期部５１２は、受信したログ情報８０１と同期テーブル９０１とを表示部５０２上に表示してもよい。
【００６９】
本実施例では、シミュレータ５０１が、同期させるべき次の処理を決めるタイミング同期部５１２と、タイミング同期部５１２からの情報をもとに、制御指示情報７０１を生成する制御指示部５１３を備える。また、コア３０１−１〜３０１−Ｎが、処理部４１１の動作タイミングを監視するタイミング監視部４１２を備える。シミュレータ５０１側に、タイミング監視部４１２で作成されたログ情報８０１がフィードバックされるため、シミュレータ５０１が、実行結果であるログ情報８０１をもとに同期させるべき次の処理を決定する。この構成によれば、複数のコア３０１−１〜３０１−Ｎをいくつかの特定のタイミングで同期させながらプログラムを徐々に実行して、複数の処理の影響を確認することができる。
【００７０】
本実施例によれば、複数のＥＣＵや複数のコア間で処理を同期させながら処理を監視することが可能となる。特に、リアルタイム性の強い制御においては、ある処理の実行中の特定のタイミングで動作する別の処理の影響を確認する必要があるが、本実施例では、並列化された処理を特定のタイミングで同期させることで、複数の処理の影響を確認することができる。
【００７１】
また、本実施例によれば、ユーザは、表示部５０２に表示された同期テーブル９０１及びログ情報８０１から、並列化前のある処理が、並列化後のどの部分に対応するかを確認することができる。また、ユーザは、ログ情報８０１を参照することにより、同期テーブル９０１で指定した同期タイミングで複数のコアが同期されているかを確認することができる。
【００７２】
［実施例２］
図１２は、実施例２におけるＥＣＵ２０２のコア３０１−１〜３０１−Ｎにおいて実行されるソフトウェアモジュール構成を示した図である。本実施例では、ＥＣＵ２０２が、１つ又は２つ以上のタイミング監視部専用のコアを有する。タイミング監視部専用コアが、ログ情報８０１を保存する処理を担うため、各コアがローカルのＲＡＭ３０２にログ情報８０１を保存する必要がなく、各コアの処理部４１１は、制御処理のみを実施することが可能となる。この構成によれば、車両制御に負荷をかけずに同期ログ情報を取得することができる。
【００７３】
図１２の例では、コア３０１−Ｎが、タイミング監視部専用のコアである。コア３０１−Ｎが、監視タイミング集約部４５０を備える。本実施例では、各コアのタイミング監視部４１２が、ログ情報８０１を監視タイミング集約部４５０へ送信する。
【００７４】
監視タイミング集約部４５０の動作を説明する。監視タイミング集約部４５０は、複数のコアからのログ情報８０１を収集し、集約する。監視タイミング集約部４５０は、同期ＩＤごとにログ情報８０１を整理する。監視タイミング集約部４５０は、一定周期ごと、又は、イグニション（ＩＧＮ）  ＯＦＦ処理中、又は、ＩＧＮ  ＯＮ中、又は、処理部４１１からの指示によって、ログ情報８０１を外部メモリ３０８へと保存する。
【００７５】
また、監視タイミング集約部４５０は、一定周期ごと、又は、ＩＧＮ  ＯＦＦ処理中、又は、ＩＧＮ  ＯＮ中、又は、処理部４１１からの指示によって、外部メモリ３０８のログ情報８０１をシミュレータ５０１へ送信する。
【００７６】
車両制御装置２では、限られたた通信帯域や処理性能の中で大量のログデータを計算し保存することは大きな問題となる。そこで、本実施例の構成を用いることで、特定のコアがログ情報８０１の整理及び保存の処理を担当することで、制御処理に負荷をかけずにログ情報８０１の収集が可能となる。すなわち、各コア３０１−１〜３０１−Ｎに対する割り当ての最適化を、実行負荷増大を防止しながら実現することができる。
【００７７】
［実施例３］
図１３は、実施例３におけるＥＣＵ２０２において実行されるソフトウェアモジュール構成を示した図である。シミュレータ５０１の機能は、車両１に搭載されてもよい。この構成によれば、他のコンピュータを車両１のネットワークに接続することなく、並列化されたプログラムの検証が可能となる。図１３の例では、シミュレータ５０１の各処理部が、複数のＥＣＵ２０２のうちの１つ（ＥＣＵ  Ｎ）に実装されている。別の例として、シミュレータ５０１の各処理部が、ＥＣＵ２０２内の複数のコアのうちの特定のコアに実装されてもよい。
【００７８】
［実施例４］
図１４は、実施例４における同期テーブル９０１の一例を示した図である。本実施例では、同期テーブル９０１は、ラベル名（変数名）とその値の順序の情報を含む。同期テーブル９０１は、Ｎｏ９２１と、ラベル名９２２と、値９２３とを構成項目として含む。
【００７９】
Ｎｏ９２１は、数字、アルファベット等の値であり、各行の順序関係を把握できる値である。ラベル名９２２は、文字列、数字、記号等で構成される、変数名を一意に識別できる値である。値９２３は、同期させるタイミングでのラベル名９２２の具体的な値である。図１４のＮｏ＝１の行は、変数名ＩＮＴ＿Ａが「１０００」になった時点で各コアの処理を停止させて同期させることを示す。本構成によれば、変数の値の変化で各コアを同期させることができる。各コアに対して同期したい処理を特定することなく、コア間のログ情報８０１を得ることが可能となる。
【００８０】
図１５は、実施例４における制御指示情報７０１の一例を示した図である。制御指示部５１３は、同期テーブル９０１の情報をもとに制御指示情報７０１を作成する。制御指示部５１３は、指示対象７１２に、全てのＥＣＵ及びコアを記載する。また、制御指示部５１３は、指示タイミング７１３に、ラベル名９２２及び値９２３の情報を記載する。
【００８１】
各コアの処理部４１１は、制御指示情報７０１をもとに処理を実行する。処理部４１１は、ラベル名が指定された値になるまで処理を実行する。なお、指定されたラベル名に関する処理を実行しないコアにおいて、処理部４１１は、プログラムを実行しない。
【００８２】
図１４の同期テーブル９０１を用いた場合、各コアの処理部４１１は、ラベル名（ＩＮＴ＿Ａ）が「１０００」になった時点で処理を一時停止する。このタイミングが同期ＩＤ＝１の指示タイミングであり、タイミング監視部４１２は、この時点までのログ情報８０１を作成する。次に、各コアの処理部４１１は、ラベル名（ＩＮＴ＿Ａ）が「２０００」になった時点で処理を一時停止する。このタイミングが同期ＩＤ＝２の指示タイミングであり、タイミング監視部４１２は、この時点までのログ情報８０１を作成する。ログ情報８０１では、タイミング８１３に処理ステップ番号が記載され、処理内容８１４にラベル名とその値が記載される。
【００８３】
複数の企業で作成された複数のプログラムを統合する場合では、同期しなければならない処理が特定できないことがある。この場合、実施例１のような同期テーブルの生成は困難である。本実施例の同期テーブル９０１では、プログラムの内の少なくとも１つの処理が判明していれば良く、値の変更履歴で各コアを同期させることができる。
【００８４】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。上記実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることもできる。また、ある実施例の構成に他の実施例の構成を加えることもできる。また、各実施例の構成の一部について、他の構成を追加・削除・置換することもできる。
【００８５】
上記機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。また、上記の機能等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。
【００８６】
上述の実施例において、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【００８７】
１          …車両
２          …車両制御装置
３          …通信装置
４          …車両制御装置
５          …駆動装置
６          …認識装置
７          …出力装置
８          …入力装置
９          …通知装置
２０１      …ネットワークリンク
２０２      …ＥＣＵ
２０２      …ＧＷ
３０１      …コア
３０２      …ＲＡＭ
３０３      …タイマ
３０４      …ＲＯＭ
３０５      …ＧｌｏｂａｌＲＡＭ
３０６      …Ｉ／Ｏ
３０７      …内部バス
３０８      …外部メモリ
４０１      …制御部
４０２      …通信管理部
４１１      …処理部
４１２      …タイミング監視部
４２１      …入力部
４２２      …出力部
４５０      …監視タイミング集約部
５０１      …シミュレータ
５０２      …表示部
５１１      …通信部
５１２      …タイミング同期部
５１３      …制御指示部
５１４      …記憶部
５２１      …入力部
５２２      …出力部
６０１      …通信経路
７０１      …制御指示情報
８０１      …ログ情報（実行結果）
９０１      …同期テーブル
【図１】
2019016021.tif 000003
【図２】
2019016021.tif 000004
【図３】
2019016021.tif 000005
【図４】
2019016021.tif 000006
【図５】
2019016021.tif 000007
【図６】
2019016021.tif 000008
【図７】
2019016021.tif 000009
【図８Ａ】
2019016021.tif 000010
【図８Ｂ】
2019016021.tif 000011
【図９Ａ】
2019016021.tif 000012
【図９Ｂ】
2019016021.tif 000013
【図１０】
2019016021.tif 000014
【図１１】
2019016021.tif 000015
【図１２】
2019016021.tif 000016
【図１３】
2019016021.tif 000017
【図１４】
2019016021.tif 000018
【図１５】
2019016021.tif 000019