JP2014102734A - 性能検証プログラム、性能検証方法及び性能検証装置 - Google Patents

性能検証プログラム、性能検証方法及び性能検証装置 Download PDF

Info

Publication number
JP2014102734A
JP2014102734A JP2012255141A JP2012255141A JP2014102734A JP 2014102734 A JP2014102734 A JP 2014102734A JP 2012255141 A JP2012255141 A JP 2012255141A JP 2012255141 A JP2012255141 A JP 2012255141A JP 2014102734 A JP2014102734 A JP 2014102734A
Authority
JP
Japan
Prior art keywords
block
task
performance verification
core
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012255141A
Other languages
English (en)
Inventor
Koichi Sato
光一 佐藤
Tomoko Matsui
朋子 松井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2012255141A priority Critical patent/JP2014102734A/ja
Publication of JP2014102734A publication Critical patent/JP2014102734A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】マルチコア用途におけるモデルベース開発において、コード生成前における性能検証の精度を向上させること
【解決手段】一実施形態によれば、性能検証プログラムは、演算部において実行され、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルを記憶部から読み出し、前記制御プログラムの性能検証を行う性能検証プログラムである。性能検証プログラムは、前記モデルファイルから前記タスクブロックを抽出して、前記タスクブロック毎のコードを生成するコード生成処理と、シングルコアプロセッサにおける前記コードの実行時間の実時間を前記タスクブロック毎に算出する実時間算出処理と、前記タスクブロック毎に算出された前記実時間を用いて、前記制御プログラムの実行過程を検証する性能検証処理と、を行う。
【選択図】図1

Description

本発明は性能検証プログラム、性能検証方法及び性能検証装置に関し、例えばマルチコアプロセッサ上で実行される制御プログラムの性能検証プログラム、性能検証方法及び性能検証装置に関する。
MBD(Model Based Design)ツールを使用したPILS(Processor In the Loop Simulation)環境では、シングルコアプロセッサ用のモデルが作成され、それに基づくプログラムのコード生成や動作検証が行われている。
例えば、特許文献1や2には、モデルベース開発手法を用いてプログラムコードを生成する方法や性能予測を行うシステムが記載されている。
特開2003−173256号公報 特開2011−154521号公報
近年、MCU(Micro Control Unit)のスピード向上が限界となっているため、組み込みシステム等においてシングルコアMCUからマルチコアMCUへの移行が検討されている。特許文献1〜2に記載されている従来技術は、シングルコアプロセッサ用途におけるモデルベース開発の技術である。従って、従来技術では、マルチコアプロセッサ用途におけるモデルベース開発において、コード生成前における性能検証の精度を向上させることができないという問題がある。
なお、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施形態にかかる性能検証プログラムは、演算部において実行され、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルを記憶部から読み出し、前記制御プログラムの性能検証を行う性能検証プログラムである。この性能検証プログラムは、シングルコアプロセッサにおけるタスクブロック毎のコードの実行時間の実時間を前記タスクブロック毎に算出する実時間算出処理と、前記タスクブロック毎に算出された前記実時間を用いて、前記制御プログラムの実行過程を検証する性能検証処理と、を特に行う。
前記一実施の形態によれば、マルチコアプロセッサ用途におけるモデルベース開発において、コード生成前における性能検証の精度を向上させることができる。
実施の形態1にかかる性能検証装置の例を示す構成図である。 実施の形態1にかかる性能検証装置の処理の一例を示したフローチャートである。 実施の形態2にかかる性能検証装置の例を示す構成図である。 実施の形態2にかかるマルチコアPILS環境におけるコード生成前の性能検証の一例を示したイメージ図である。 実施の形態2にかかるマルチコアPILS環境におけるコード生成前の性能検証の一例を示したフローチャートである。 実施の形態3にかかる性能検証装置の例を示す構成図である。 実施の形態3にかかるマルチコアPILS環境におけるコード生成前の性能検証の一例を示したイメージ図である。 実施の形態3にかかるマルチコアコード生成にかかる処理の一例を示したイメージ図である。 実施の形態3にかかるマルチコアモデルを対象としたオブジェクトコード生成の全体フローの一例を示したフローチャートである。 実施の形態3にかかるステップS24の詳細な処理の一例について示したフローチャートである。 実施の形態3にかかる機能シミュレーションログの一例を示した図である。 実施の形態3にかかる性能シミュレーションログの一例を示した図である。 実施の形態3にかかるタスク実行時間計算部が計算した計算結果の一例を示したイメージ図である。 実施の形態3にかかる性能シミュレーションログをタスク遷移表示部において表示したときの表示画面の一例である。 実施の形態4にかかるマルチコアコード生成部の例を示した構成図である。 実施の形態4にかかるマルチコアコード生成部の詳細な処理の一例について示したフローチャートである。 実施の形態4にかかるタスクブロックが含まれるモデルの一例を示したイメージ図である。 実施の形態4にかかるタスクブロックに関するターゲットコード及びOIL用情報の一例を示す図である。 実施の形態4にかかるリソースブロックが含まれるモデルの一例を示したイメージ図である。 実施の形態4にかかるリソースブロックに関するターゲットコード及びOIL用情報の一例を示す図である。 実施の形態4にかかるAlarmブロックが含まれるモデルの一例を示したイメージ図である。 実施の形態4にかかるAlarmブロックに関するターゲットコード及びOIL用情報の一例を示す図である。 実施の形態4にかかるISRブロックが含まれるモデルの一例を示したイメージ図である。 実施の形態4にかかるISRブロックに関するターゲットコード及びOIL用情報の一例を示す図である。
以下、図面を参照しつつ、実施の形態について説明する。なお、図面は簡略的なものであるから、この図面の記載を根拠として実施の形態の技術的範囲を狭く解釈してはならない。また、同一の要素には、同一の符号を付し、重複する説明は省略する。
様々な処理を行う機能ブロックとして以下の図面に記載される性能検証装置の各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
実施の形態1
図1は、実施の形態1にかかる性能検証装置の例を示す構成図である。性能検証装置1は、演算部2及び記憶部3を備える。性能検証装置1は、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロック(タスク処理関数部分のブロック)を含むモデルファイル7を記憶部3から読み出す。そして性能検証装置1は、制御プログラムの性能検証を演算部2において実行する。まとめると、性能検証装置1は、モデルベース開発手法を用いて生成された制御プログラムの性能検証(特にマルチコアプロセッサにおいて実行される制御プログラムの性能検証)を行うことができる。
演算部2は、性能検証装置1において演算を実行し、記憶部3は、性能検証装置1においてプログラムやデータ等を記憶する。演算部2は、コード生成部4、実時間算出部5及び性能検証部6を備え、記憶部3はモデルファイル7を備える。
コード生成部4は、モデルファイル7からタスクブロック8、9を抽出して、タスクブロック毎のコードを生成する。演算部2は、例えばモデルシミュレーションプログラムを用いることにより、複数のタスクブロックにより構成されるプログラムのモデルファイルを生成することができる。モデルシミュレーションプログラムは、例えばMATLAB(登録商標)/Simulink(登録商標)といったMBDツールである。
実時間算出部5は、シングルコアプロセッサにおけるタスクブロック8、9毎のコードの実行時間の実時間を、タスクブロック8、9毎に算出する。この実時間の算出は、プログラムやエミュレータ等により実行することができる。
なお、実時間とは、シングルコアプロセッサでタスクブロックを実行した場合を想定して計算した実行時間のことをいい、実測値とも表現する。以下においても同様に表現する。
性能検証部6は、タスクブロック8、9毎に算出された実時間を用いて、制御プログラムの実行過程を検証する。実行過程とは、例えばマルチコアプロセッサにおける各プロセッサコアが、タスクブロック8、9を実行する開始時間及び実行の終了時間のことをいう。
モデルファイル7は、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロック8、9を含む。なおモデルファイル7におけるタスクブロックの数は図1では2個が図示されているが、3個以上であってもよい。
図2は、実施の形態1にかかる性能検証装置の処理の一例を示したフローチャートである。以下、性能検証装置1の実行する処理について説明する。
まず、コード生成部4は、モデルファイル7からタスクブロック8、9を抽出して、タスクブロック8、9毎にコードを生成する(ステップS1)。次に実時間算出部5は、シングルコアプロセッサにおけるコードの実行時間の実時間をタスクブロック8、9毎に算出する(ステップS2)。そして性能検証部6は、タスクブロック8、9毎に算出された実時間を用いて、制御プログラムの実行過程を検証する(ステップS3)。以上のようにして、性能検証装置は性能検証を実行する。
以上の構成より、性能検証装置1は、タスクブロック毎に算出された実時間を考慮した制御プログラムの実行過程の検証をすることができる。この実時間と、制御プログラムを実際に動作させたときのタスクブロックのコードの実行時間との差はほとんどないと考えられるため、性能検証装置1は、コード生成前におけるモデルファイルの性能検証の精度を向上させることができる。換言すれば、モデルファイルから生成したコードをマルチコアにおいて実行したときの正確な性能検証をすることができる。なお、マルチコアプロセッサでは、モデルファイルからプログラムコード(例えばオブジェクトファイル)を生成し、当該プログラムコードをプロセッサに書き込む又は読み込ませることによってモデルファイルにより定義される動作を実行する。以下の説明では、マルチコアプロセッサに与えるコードをマルチコアコードと称し、シングルコアプロセッサに与えるコードをシングルコアコードと称す。
従来、マルチコアコード生成前の段階でマルチコアプロセッサ用のモデルファイルの性能検証を実行する場合には、性能検証に用いるタスクブロック毎のコードの実行時間として、予測値が用いられた。しかしながら、マルチコアプロセッサにおいてプログラムが実行される場合、タスクブロックは複数のプロセッサコアに割り当てられて処理が実行される。そのため、各タスクブロックのコードの実行時間の予測値を用いたマルチコアコード生成前の段階における性能検証の結果と、各タスクブロックのコードの現実の実行時間に基づくマルチコアコード生成後の段階における性能検証の結果とが異なってしまうという課題があった。
実施の形態1にかかる性能検証装置1は、算出したタスクブロック毎のコードの実時間を用いて、マルチコアコード生成前の段階における性能検証を実行することができる。従って、性能検証装置1は従来と比較して、マルチコアコード生成前の段階における性能検証の結果を、マルチコアコード生成後の段階における性能検証の結果により近づけることができる。換言すれば、性能検証装置1は、コード生成前における性能検証の精度を向上させることができる。
なお、性能検証部6は、算出したタスクブロック毎の実時間だけでなく、タスクブロック毎のプロセッサコアの割り当て情報も用いて、制御プログラムの実行過程を検証することもできる。この場合、性能検証装置1は、タスクブロックを複数のプロセッサコアに割り当てた状態を仮定することにより、実際の制御プログラムの動作により近い性能検証をすることができる。そのため、性能検証装置1は、実際の制御プログラムの性能検証をより精度よく実現することができる。特に、性能検証装置1は、プロセッサコア毎の実行性能を検証することができる。
性能検証部6が検証する制御プログラムの実行過程は、例えばマルチコアプロセッサにおける各プロセッサコアが、タスクブロック8、9のコードを実行する開始時間及び実行の終了時間のことをいう。これにより、性能検証部6は、各プロセッサコアにおけるタスクブロックの実行状況を具体的に検証することができるため、制御プログラムについてより具体的な検証ができる。
実施の形態2
実施の形態2においては、実施の形態1において説明した性能検証装置の具体的な構成を説明するとともに、性能検証装置の実行する具体的な処理についても説明する。
図3は、実施の形態2にかかる性能検証装置の例を示す構成図である。性能検証装置10は、演算部11及び記憶部12を備える。性能検証装置10は、性能検証装置1と同様、マルチコアプロセッサにおいて実行される制御プログラムの性能検証装置である。
演算部11は、モデルシミュレーションプログラム21に基づいてマルチコアプロセッサ用のモデルベース化されたモデルファイル(ソースプログラム)を生成し、その性能検証を実行する。演算部11は、例えばCPUを搭載したIC(Integrated Circuit)により構成される。演算部11は、モデル生成部13、タスク単位コード生成部14、モデルシミュレータ部15及び性能検証部17を備える。演算部11は、図1における演算部2に対応する。
記憶部12は、性能検証装置10においてプログラム及び演算部11が生成したファイルを格納する部分であり、例えば性能検証装置10の記憶媒体により構成される。記憶部12は、プログラム格納部18及びデータ格納部19を備える。
モデル生成部13は、モデルシミュレーションプログラム21に基づいて、マルチコアプロセッサ用のモデルファイル22を生成する。モデルファイル22では、性能検証する対象のマルチコアプロセッサ用の制御プログラムがモデル化されたファイルとして(モデルファイルとして)記載されており、まだコード生成はされていない。ここでモデルファイル22には、モデル化に応じて、複数のタスクブロック(タスク処理関数部分のブロック)が含まれている。
タスク単位コード生成部14は、タスク単位コード生成プログラム23に基づいて、モデルファイル22におけるタスクブロック毎のコード(タスク単位コード24)を生成する。タスク単位コード生成プログラム23はタスク単位コードを生成するのに必要なプログラムであり、例えばプログラム格納部18に格納されている。タスク単位コード24は、モデルファイル22におけるタスクブロックの数だけ生成される。タスク単位コード生成部14は、図1におけるコード生成部4に対応する。
モデルシミュレータ部15は、実時間算出部16を有し、モデルファイル22のシミュレーションを実行する。具体的には、実時間算出部16が、実時間計測プログラム25に基づいて、タスク単位コード24のシングルコアプロセッサにおける実時間を算出するシミュレーションを実行する。なお、実時間の定義は実施の形態1に記載の通りである。実時間算出部16は、算出した全てのタスク単位コード24における実時間を、実時間ファイル26に記載して出力する。実時間算出部16は、図1における実時間算出部5に対応する。
性能検証部17は、実時間ファイル26に記載された実時間のデータに基づいて、性能検証対象となるマルチコアプロセッサ用の制御プログラムをマルチコアプロセッサで実行した場合を想定した性能検証を実行する。性能検証部17は、例えばモデルファイル22をマルチコアプロセッサで実行した場合の総実行時間について算出することができる。以上の構成により、性能検証装置10は目的とするマルチコアプロセッサ用の制御プログラムの性能検証を実行することができる。性能検証部17は、図1における性能検証部6に対応する。
プログラム格納部18には、モデルシミュレーションプログラム21、タスク単位コード生成プログラム23及び実時間計測プログラム25が格納されている。モデルシミュレーションプログラム21は、モデル生成部13が生成するマルチコアプロセッサ上で実行される制御プログラムの動作をモデル化したモデルファイルを生成するためのプログラムである。タスク単位コード生成プログラム23は、モデルファイルに含まれるタスクブロック単位のコードをタスク単位コード生成部14で生成するのに必要なプログラムである。実時間計測プログラム25は、実時間算出部16でタスクブロック単位のコードの実行時間の実時間を計測するのに必要なプログラムである。
データ格納部19には、モデルファイル22、タスク単位コード24及び実時間ファイル26が格納されている。モデルファイル22は、モデル生成部13が生成した、マルチコア上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルである。タスク単位コード24は、タスク単位コード生成部14が生成したタスクブロック毎のコードである。実時間ファイル26は、実時間算出部16が算出したタスク単位コード24の実行時間の実時間が記載されたファイルである。モデルファイル22は、図1におけるモデルファイル7に対応する。
図4は、性能検証装置10によって実行される、マルチコアPILS環境におけるコード生成前の性能検証の一例を示したイメージ図である。以下、図4を用いて、性能検証装置10のタスク単位コード生成部14、実時間算出部16及び性能検証部17が実行する処理を詳述する。なお、タスク単位コード生成部14及び実時間算出部16は、図4におけるシングルコアPILS環境100において処理を実行する。
マルチコアOS(Operating System)モデル101は、モデル生成部13によって生成された、タスクブロック101−1、101−2、・・・、101−nといったn個(nは任意の数)のタスクブロックを有するモデルファイルである。マルチコアOSモデル101は、図4のモデルファイル22に対応する。
マルチコアプロセッサの場合、PE(Processer Elements:ここではプロセッサコア)間の排他制御、つまりOSを考慮したコード生成を行う必要がある。そこで、マルチコアOSモデル101の生成においては、OSを考慮したモデリングやコード生成を行うことができるよう、タスクブロックの他に、アラームブロック、ISR(Interrupt Service Routine)ブロック及び排他制御ブロックが用意される。モデル生成部13は、これらのブロックを用いることによりマルチコアOSモデル101を生成する。従ってマルチコアOSモデル101は、タスクブロックの他に、アラームブロック、ISRブロック及び排他制御ブロックがブロックとして含まれる。
タスクブロック、アラームブロック、ISRブロックには、割り当てるPEの情報をパラメータとしてユーザが設定できるように設定されている。コード生成のときには、そのPE情報を元にマルチコアコード生成が実行される。なお、タスクブロック、アラームブロック、ISRブロック及び排他制御ブロックの詳細な説明は後述する。
まずタスク単位コード生成部14は、マルチコアOSモデル101をコピーした後、コピーしたマルチコアOSモデル101においてマルチコアプロセッサ用に設定されているパラメータ設定をシングルコアプロセッサ用のパラメータ設定に変更する。このようにして、タスク単位コード生成部14は、シングルコアモデル102を自動で作成する。
シングルコアモデル102は、マルチコアOSモデル101におけるタスクブロック101−1、101−2、・・・、101−nに対応するタスクブロック102−1、102−2、・・・、102−nといったn個(nは任意の数)のタスクブロックを有する。なおマルチコアOSモデル101と、シングルコアモデル102とは、パラメータ設定のみが異なるだけで、モデルは同一である。そのため、両者のシミュレーション結果は一致する。タスクブロック102−1、102−2、・・・、102−nは、シングルコアモデル102における基本機能が定義されたブロックである。
次にタスク単位コード生成部14は、シングルコアモデル102の各タスクブロックを自動で検出し、各タスクブロックのタスク単位コードを生成する。そして実時間算出部16は、各タスクブロックにおけるそれぞれのタスク処理関数部分をシングルコアPILS環境100に適用することによって、実測値ファイル110をファイルに出力する。この実測値ファイル110は、図4の実時間ファイル26に対応する。
以下、実測値ファイル110をファイルに出力するまでの処理について具体的に説明する。まずタスク単位コード生成部14は、シングルコアモデル102を起動する。次にタスク単位コード生成部14は、シングルコアPILS環境100において、シングルコアモデル102内におけるタスクブロック102−1をタスク単位コード生成部14が有するシングルコアコード生成ツール103に適用する。図4においては、タスクブロック102−1はタスク単位コード生成プログラム23に適用される。シングルコアコード生成ツール103は、図4におけるタスク単位コード生成プログラム23に対応する。これにより、タスク単位コード生成部14は、タスクブロック102−1に関する生成コード104、IDE(Integrated Development Environment:統合開発環境)プロジェクトファイル105及び連携用ブロック106(PILS連携用ブロック)を生成する。
生成コード104は、タスクブロック102−1のシングルコアプロセッサ用のソースコード(シングルコアコード)であり、図4におけるタスク単位コード24に対応する。プロジェクトファイル105は、IDE107の起動において必要なファイルであり、コードがIDEにおいてどのような状態で動いているか(IDEの設定環境)が定義されている。連携用ブロック106は、実時間算出部16において実時間を算出するのに用いられるブロックであり、説明については後述する。
タスク単位コード生成部14が生成コード104等を生成処理後、実時間算出部16は、シングルコアモデル102内におけるタスクブロック102−1を連携用ブロック106に置き換える。換言すれば、シングルコアモデル102は、正確なシミュレーションが実行されるために変更される。
次に実時間算出部16内のIDE107は、プロジェクトファイル105を読み込んで起動する。IDE107は、対象とするタスクブロック102−1(ソースコード)をビルド(コンパイラ)することにより、タスクブロック102−1におけるオブジェクトコードを生成する。次にIDE107は、生成したオブジェクトコードをIDE107が有するシミュレータ108又はエミュレータ109にダウンロードする。シミュレータ108は、例えばCubesuite(登録商標)シミュレータや、その他のマイクロコントローラ(マイコン)用のシミュレータである。シミュレータ108又はエミュレータ109は、図3における実時間計測プログラム25に対応する。
ここでMBDツールにおいてシングルコアモデル102のシミュレーションを開始(シングルコアモデル102を実行)すると、タスクブロック102−1がIDE107中のシミュレータ108及びエミュレータ109と連携する。これにより、タスクブロック102−1をシングルコアプロセッサで動作させたときのシミュレーションが実行される。
このとき、上述のように、MBDツールにおいて動作するシングルコアモデル102において、タスクブロック102−1が連携用ブロック106に置き換えられている。連携用ブロック106に置き換えてMBDツールがシングルコアモデル102を実行することにより、連携用ブロック106はタスクブロック102−1のコードがダウンロードされたシミュレータ108または、エミュレータ109に自身の入力値を入力する。そして、シミュレータ108または、エミュレータ109はその入力値を取り込み、シミュレーションを行う。シングルコアプロセッサで実行したシミュレーションにおける出力結果は、連携用ブロック106から出力結果としてシングルコアモデル102にフィードバックされる。この出力結果は、実際にタスクブロック102−1を実行した場合の出力結果と同じ結果である。MBDツールは、この出力結果に基づいてシングルコアモデル102を実行する。
まとめると、実時間算出部16は、実時間を算出する対象である計算対象タスクブロックを、計算対象タスクブロックの入力値をシミュレータ108およびエミュレータ109に渡してシミュレーションを実行後に結果を出力値としてシングルコアモデル102に返すための連携用ブロック106(シミュレータとの連携用ブロック)に入れ替えて、モデルファイルのシミュレーションを実行する。これにより実時間算出部16は、タスクブロックにおける実時間を算出する。
ここで、モデルファイルのシミュレーションはシングルコアPILS環境中のIDEにおけるシミュレーションであり、連携用ブロック106はIDEと連携することによりシミュレーションを実行する連携用ブロックである。
以上のようにシミュレーションを実行することによって、タスクブロック102−1のコードをシングルコアプロセッサで動作させたときの実測値(実時間)110−1が計測される。実測値110−1は、実測値ファイル110に保存される。IDE107は、シングルコアモデルの実行を一旦終了する。なお実測値ファイル110は、実時間ファイル26に対応する。
ここでシングルコアモデルにおいては、まだ実行していない(実測値が求められていない)タスクブロックが存在している。
次にタスク単位コード生成部14は、シングルコアPILS環境100において、タスクブロック102−2をタスク単位コード生成部14が有するシングルコアコード生成ツール103に適用する。これにより、タスクブロック102−1と同様にして、タスクブロック102−2に関する生成コード、IDEプロジェクトファイル及び連携用ブロックが生成される。このように、連携用ブロック106は、タスクブロックに関するコードが生成される処理において、そのタスクブロック毎のコードに対応して生成される。
次に実時間算出部16は、タスクブロック102−2を連携用ブロック106に置き換える。そしてIDE107は、プロジェクトファイル105を読み込んで起動し、対象とするタスクブロック102−2をビルドすることにより、タスクブロック102−2におけるオブジェクトコードを生成する。
次にIDE107は、生成したオブジェクトコードをIDE107が有するシミュレータ108又はエミュレータ109にダウンロードする。ここでMBDツールがシングルコアモデル102のシミュレーションを開始(シングルコアモデル102を実行)すると、タスクブロック102−2がIDE107中のシミュレータ108及びエミュレータ109と連携することにより、タスクブロック102−2をシングルコアプロセッサで動作させたときのシミュレーションが実行される。
このとき、上述のように、MBDツールにおいて動作するシングルコアモデル102において、タスクブロック102−1は実測値の測定が完了しているため、連携用ブロック106には置き換えてはいない。MBDツールは、タスクブロック102−2を連携用ブロック106に置き換えてシングルコアモデル102を実行する。この実行処理については上述と同様である。
以上のようにシミュレーションを実行することによって、タスクブロック102−2をシングルコアプロセッサで動作させたときの実測値110−2が計測される。実測値110−2は、実測値ファイル110に保存される。
IDE107は、以上の処理をタスクブロック1個ごとにタスクブロック102−1〜102−nまで実行することにより、タスクブロックのシミュレーションがIDE107においてn回実行される。これにより、実測値110−1〜110−nが計測され、実測値ファイル110に保存される。
以上のように、シングルコアPILS環境100で各タスクブロックの処理時間が実測値としてファイルに保存された後、性能検証部17は、マルチコアOSモデル101のシミュレーションを実行する。ここで性能検証部17は、シミュレーション中に性能検証部17の有するタスク実行情報測定部111によりタスク実行情報測定を実行する。
このタスク実行情報測定部111において、性能検証部17は、シングルコアPILS環境100で測定した実測値110−1〜110−nを取り込むとともに、タスクブロック101−1〜101−nがマルチコアプロセッサにおいてどのPEに割り当てられるかの情報(図示せず)を取り込む。性能検証部17は、それらの実測値及びPEに割り当て情報に基づくシミュレーションを実行することにより得られたシミュレーションログ112をファイルに出力する。性能検証部17の有するタスク遷移表示部113は、シミュレーションログ112を読み込み、タスク実行状況をGUI(Graphical User Interface)で表示する。ユーザは、GUIによりタスク遷移を確認し、性能検証を行う。もし性能検証において問題が発生された場合には、ユーザはマルチコアOSモデル101のPE割り当てに関して見直しを行う。この性能検証の詳細については実施の形態3で改めて説明する。性能検証において問題がないとユーザが判定した場合に、マルチコアOSモデル101は初めてオブジェクトコードを生成する。
例えば、性能検証部17は、実測値110−1〜110−nを取り込んでシミュレーションをするモードに切り替わり、シミュレーションログ112を測定用のファイルとして出力する。性能検証部17は、このシミュレーションログ112を変換してツールであるタスク遷移表示ツールに読み込ませることにより、タスクがどのタイミングで起動し、実行されているか(タスク遷移)を見ることができる。
図5は、マルチコアPILS環境におけるコード生成前の性能検証の一例を示したフローチャートである。以下、図5において、演算部11が実行する処理を改めて説明する。
まず、タスク単位コード生成部14は、マルチコアOSモデル101をコピーした後、コピーしたマルチコアOSモデル101においてマルチコアプロセッサ用に設定されているパラメータ設定をシングルコアプロセッサ用のパラメータ設定に変更する。これにより、シングルコア用モデルが生成される(ステップS11)。
以下、タスク単位コード生成部14及び実時間算出部16は、シングルコアモデル102内のタスクブロック数分、ステップS12〜S19の処理を実行する。
タスク単位コード生成部14は、シングルコアモデル102を起動する(ステップS12)。次にタスク単位コード生成部14は、対象とする1つのタスクブロックに対して、シングルコアコード生成ツール103を適用する(ステップS13)。これによりタスク単位コード生成部14は、対象となるタスクブロックに関する生成コード104(シングルコアコード)、IDEプロジェクトファイル105及び連携用ブロック106を生成する(ステップS14)。ステップS14において連携用ブロックは、タスクブロックに関するコードが生成されるときに、そのタスクブロック毎のコードに対応して生成される。
以下、実時間算出部16が処理を実行する。まず実時間算出部16は、対象となるタスクブロックを連携用ブロック106に置き換える(ステップS15)。次に実時間算出部16は、プロジェクトファイル105を読み込ませて、IDE107を起動する(ステップS16)。
MBDツールがステップS16において変更されたシングルコアモデル102を実行し、IDE107と対象となるタスクブロックとの連携によるシミュレーションを実行する(ステップS17)。
ステップS17が実行されるタイミングにおいて、ここで、タスクブロックの実行時間が計測され、シミュレーション終了後に計測された実測値の情報が実測値ファイル110に保存される(ステップS18)。
実時間算出部16におけるIDE107は、シングルコアモデルの実行を一旦終了する(ステップS19)。
演算部11は、シミュレーションが実行されていない(すなわち実測値が計測されていない)タスクブロックがシングルコアモデル102内に残っていればステップS13に戻り、そのタスクブロックに関してステップS12〜S19の処理を実行する。シングルコアモデル102において、全てのタスクブロックのシミュレーションの実行が完了している場合には、演算部11は次のステップに移行する。
性能検証部17は、マルチコアOSモデル101をシミュレーション実行する。これにより、実測値ファイル110が読み込まれることにより、タスク実行情報測定が実行され、シミュレーションログ112が生成される(ステップS20)。以上のようにして、マルチコアOSモデル101のシミュレーション結果であるシミュレーションログ112が生成される。
実施の形態2において、演算部11は、各タスクブロックにシングルコアPILS環境を適用することにより、シングルコアコードを生成し、生成したシングルコアコードを用いたPILS連携シミュレーションを実行することによって実行時間を測定した。これにより、マルチコアOSモデル101の性能検証において、実測値を用いた性能検証を行うことができる。このように性能検証において実測値を用いることにより、性能検証の精度が向上するため、マルチコアOSモデル101のマルチコアコード生成後に、コード生成前の段階に戻って修正を実行する「後戻り」を減少させることができる。これにより、マルチコアコード生成にかかる時間を削減することができる。
MBDツール(例えばMATLAB/Simulink)を使用したPILS環境においては、シングルコアプロセッサ用のモデル(シングルコアモデル)が作成され、その作成されたモデルのコード生成、動作検証が実行されている。近年、MCUのスピード向上が限界となり、組み込みシステムを導入する対象をマルチコアMCUへ移行することが検討されている。そのため、例えばPILS環境においても、マルチコアプロセッサの対応が必要となっている。
特許文献1、2といった従来技術は、シングルコアプロセッサにおけるモデルベース開発の技術であり、マルチコアコードの生成やその検証手法は確立されていなかった。
マルチコアプロセッサの場合、PE間の排他制御、つまりOSを考慮したコード生成を行う必要がある。そこで、OSを考慮したモデリングやコード生成を行うことができるよう、タスクブロック、アラームブロック、ISRブロック、排他制御ブロックが用意される。ユーザは、これらのブロックを使用してマルチコアOSモデルを作成する。ここでタスクブロック、アラームブロック、ISRブロックには、割り当てるPE(プロセッサコア)の情報をパラメータとしてユーザが設定できるようにする必要がある。マルチコアコード生成は、そのPE情報に基づいて実行される。
また、マルチコアプロセッサの場合、どのアルゴリズム(タスクブロック)をどのPEに割り当てるかを決定する手段がない。タスクブロックをどのPEに割り当てるかは、アルゴリズムの実行時間によって決める必要がある。そこで、タスクブロック毎に、そのタスクブロックの実行時間情報が、パラメータとして設定できるようにする必要がある。従来は、この実行時間情報として、ユーザが予測した値が設定されていた。
以上の設定により、タスクブロックには、PE情報と実行時間情報が与えられることになる。シミュレータ等によりマルチコアOSモデルがシミュレーションされると、タスクブロックに与えられたPE情報と実行時間情報とはシミュレーションログに出力される。シミュレーションログがユーザによってタスク遷移表示装置に読み込まれることにより、マルチコアOSモデルにおけるタスク実行状況をユーザがGUIで確認することができる。ユーザはこのタスク実行状況に基づいて、マルチコアOSモデルの性能検証を行う。この性能検証において問題がない場合に、マルチコアOSモデルにおけるマルチコアコードが生成される。
以上のようなマルチコアPILS環境を想定した場合、タスクブロックのパラメータとして与えられる実行時間は、ユーザの予測値であった。この予測値が用いられることによって、マルチコアコード生成前の検証の精度が低くなってしまい、マルチコアコード生成後の検証で後戻りが発生するという課題があった。この後戻りにより、マルチコアコード生成にかかる時間が増加してしまっていた。
マルチコアプロセッサにおいては、デッドライン(制限時間)までに各プロセッサコアの処理が間に合うか否かが問題となる。特にマルチコアプロセッサにおいては、シングルコアプロセッサと異なり、全実行時間は、全タスクの累積時間とみなすことができない。そのため、何のタスクをどのプロセッサコアに割り当てるとともに、設定されたタスクの実行時間が現実とどの程度近いかが性能検証において重要となる。
換言すれば、各プロセッサコアの処理に要する時間の予測の精度は、設定されたタスクの実行時間の予測の良し悪しに大きく左右されることになる。このため、実測値と異なる予測値が用いられることにより、マルチコアコード生成前の検証の精度が低くなってしまっていた。
実施の形態2においては、シングルコアPILS環境を用いて、タスクブロック毎の実測値を測定している。そして、その実測値に基づくマルチコアコード生成前の検証を実行することにより、マルチコアプロセッサ向けPILS環境におけるマルチコアコード生成前の性能検証の精度を向上し、マルチコアコード生成後の性能検証で後戻りの発生が減少する効果が得られる。実際にタスクブロックの処理にかかる時間と同じ又はほぼ同じである実測値が性能検証において用いられるからである。
また、実時間算出部16は、実時間を算出する対象である計算対象タスクブロックを連携用ブロック106に入れ替えて、モデルファイルのシミュレーションを実行する。これにより実時間算出部16は、タスクブロックにおける実時間を算出する。このとき、計算対象タスクブロックはマルチコアプロセッサ上における実際の処理と同じ処理を実行するため、実時間算出部16は、実測値をより正確に計測することができる。
実施の形態2において、連携用ブロック106を用いず、対象とするタスクブロックの出力結果として適当な値をシングルコアモデル102に設定することによってシングルコアモデル102を実行しても、実時間算出部16は同様に実測値を求めることができる。しかし、対象とするタスクブロックの出力結果が本来の値でない場合には、実時間算出部16がその値を用いてシングルコアモデル102のシミュレーションを実行すると、対象とするタスクブロックの実測値として本来とは異なる結果が得られてしまう可能性がある。従って、実測値をより正確に計測するためには、実時間算出部16は、連携用ブロック106を用いてシングルコアモデルのシミュレーションを実行するのが望ましい。
タスク単位コード生成部14は、連携用ブロック106を、タスクブロックに関するコードが生成される処理において、そのタスクブロック毎のコードに対応して生成する。そのように、タスク単位コード生成処理において連携用ブロック106が生成されるため、連携用ブロック106を別の処理で生成する必要がなくなり、実測値(実時間)算出にかかる手間を減らすことができる。
実施の形態2において、モデルファイルのシミュレーションはシングルコアPILS環境中のIDEにおけるシミュレーションであり、連携用ブロック106はIDEと連携することによりシミュレーションを実行する連携用ブロックである。このため、実施の形態2にかかる性能検証方法は、PILS環境、特にMBDツールを使用したPILS環境に適用することができる。
その他、性能検証装置10によって生ずる効果は実施の形態1に記載したものと同様である。
実施の形態3
次に実施の形態3では、マルチコアプロセッサ用のプログラムにおいて、タスクブロックにおいて所定の性能を満たすようにPE(プロセッサコア)をコード生成前に割り当てる方法を説明する。
上述の通り、近年MCUのスピード向上が限界となっているため、組み込みシステム等においてシングルコアMCUからマルチコアMCUへの移行が検討されている。そのためPILS環境においても、マルチコアプロセッサへの対応が必要となっている。また、PILSだけで性能を検証するのではなく、MILS(Model In the Loop Simulation)/SILS(Software In the Loop Simulation)のレベルから、いかにマルチコアプロセッサにおいて良質なソフト配分になっているかを検討できることが必要になっている。従来技術は、シングルコアプロセッサ開発向けのモデルベース環境が開示されており、マルチコアプロセッサ用のモデルベース環境には対応していない。
マルチコアプロセッサのモデルを扱う場合、その複雑さから一般にはOSモデルを使用してモデリングを実行する。ここでOSモデルとは、OSの動作を考慮にいれたモデルであり、シングルコアプロセッサのモデルとしてはあまり利用されないが、マルチコアプロセッサのモデルとしては便利なモデルである。
このOSモデルはタスクブロック、アラームブロック及び排他制御を表現するMATLAB/SimulinkのProtected RT(Rate Transition)ブロックと同等のブロックを備える。Protected RTブロックは、マルチレートのデータの整合性を保持するために利用するブロックで、本実施の形態では排他制御ブロック(リソースブロック)として活用する。
ここで、シングルコアプロセッサを対象にしたモデルベース環境がマルチコアプロセッサを対象としたコード生成において不十分である点(課題)は、大きくいって以下の3点である。
1.性能検証面
シングルコアプロセッサを対象とするモデルの性能評価は、コード生成後のPILS環境において行っていた。しかし、モデルの対象がマルチコアプロセッサとなった場合には、モデル中のどの動作ブロックをどのプロセッサコアに割り当てるかによって、モデルの動作性能が変わる。モデルにおけるプロセッサコアの最適な割り当てを考えるには、割り当て数分のコード生成とPILSシミュレーションとを行う必要があるため、多くの性能検証時間を必要とする。
2.コード生成面
コード生成自体はシングルコアモデルにしか対応していない。つまり、各ブロックをどのプロセッサコアへ割り当てるかについては考慮されていない。そのため、コード生成においては、どの動作ブロックをどのコアに割り当てるのかを認識した後、マルチコアプロセッサとして動作するコードを生成する必要がある。
3.PILSシミュレーション面
シングルコアプロセッサを対象としたコード生成においては、MATLAB/Simulinkとマルチコア仮想環境(シミュレータ)との同期シミュレーションを実現する必要がある。仮想環境上でマルチコアCPUのシミュレーションを実行する場合でも、シングルコアプロセッサと同様に、プラントとの接続(マルチコア仮想環境とMATLAB/Simulinkとの接続)になるI/Fは一箇所(ポート、メモリ)になるのが一般的なため、考え方は変わらない。従って、マルチコアプロセッサを対象としたコード生成においてMATLAB/Simulinkとマルチコア仮想環境との同期シミュレーションを実現する必要がある。しかし、マルチコアCPUのPE毎の複数のデバッガウィンドウとMATLAB/Simulinkの間で、問題が起こらないデバッガ制御が必要となる。
実施の形態3においては、上述の課題のうち、性能検証面の課題を解決する。実施の形態3にかかる性能検証装置は、性能検証時間を削減するため、コード生成前に性能検証を行うように、性能検証処理を実行するステップの前倒しを行う。
具体的には以下を実施する。
1.OSモデルの改造
実施の形態3におけるOSモデルは、シングルコアプロセッサにおけるOSモデルに備えられるタスクブロック、アラームブロック、Protected RTのほか、ISRブロックを備える。シングルコアプロセッサにおけるOSモデルにおいても必要なブロックのほとんどは用意されているが、更なるモデル表現の向上のため、ここではISRブロックなるものを用意している。そして、以降に行うコード生成とPILSのため、各ブロックに以下のパラメータを用意する。
・ブロックに割り当てるPEの情報
・タスクブロックのアルゴリズム実行時間
2.性能シミュレーションの仕組みを用意
PILS前のシミュレーション(MILS/SILS)では、遅延時間(実行時間)の概念が存在しない。そのため、一般にはモデルにおける機能が実現できるかどうかを判定する機能シミュレーションしか実施できない。実施の形態3においては、機能シミュレーション中、ブロックの動作を行う度に、ブロックに割り当てられたPE情報、アルゴリズム実行時間を使って、どのくらい時間が経過したかを機能シミュレーションの実行装置とは別の装置で計算する。こうして、性能シミュレーションを設計の早期段階(コード生成前)で行う。
以下、実施の形態3にかかる性能検証装置及び性能検証方法について具体的に説明する。
図6は、実施の形態3にかかる性能検証装置の例を示す構成図である。図6にかかる性能検証装置27は、図3にかかる性能検証装置10と比較して、新たにマルチコアコード生成部20を備える。性能検証装置27の他の各部が実行する処理は、性能検証装置10が実行する処理と同一である。
マルチコアコード生成部20は、性能検証部17におけるマルチコアプロセッサ用のプログラムの検証結果が問題ない場合に、各ブロックにPE及び動作時間を割り当てたマルチコアOSモデルをコンパイルすることにより、マルチコアコード(オブジェクトコード)を生成する。この処理の詳細については後述する。
図7は、性能検証部17によって実行される、マルチコアPILS環境におけるコード生成前の性能検証の一例を示したイメージ図である。以下、図7を用いて、性能検証部17が実行する処理を詳述する。
図7において性能検証部17は、タスク実行時間計算部171及びタスク遷移表示部172を備える。タスク実行時間計算部171は、性能検証装置27が備えるMBDツール200(例えばMATLAB/Simulink)をツールとして使用することにより、機能シミュレーションログ201、PE情報202、時間情報203及びリソース情報204を用いて、タスク実行時間を計算する。タスク実行時間計算部171は、実施の形態2におけるタスク実行情報測定部111に対応し、タスク遷移表示部172は、タスク遷移表示部113に対応する。
ここで機能シミュレーションログ201は、タスクが処理される順番が定義されたログ(換言すればコード生成前の機能シミュレーション結果)であり、MBDツール200が出力して、タスク実行時間計算部171に入力される。
PE情報202は、モデル内のブロックをどのPE(プロセッサコア)で動かすかを示す情報であり、ユーザによって任意に設定される。時間情報203は、各ブロックがシングルコアプロセッサでの処理においてどれだけの時間がかかるかを示す情報であり、例えば実施の形態2において計測された実測値ファイル110が当てはまる。リソース情報204は、タスクの実行において何のリソースを割り当てるかが示された情報である。タスク実行時間計算部171は、PE情報202及び時間情報203をモデルにおける各ブロックに割り当てて、モデルにおけるタスク実行時間を計算する。
タスク実行時間計算部171は、性能結果である性能シミュレーションログ173を出力し、タスク遷移表示部172に出力する。性能シミュレーションログ173には、モデルにおけるタスクがどのタイミングでどの時間だけ実行されているか(タスク遷移の様子)が示されている。タスク遷移表示部172はその性能シミュレーションログ173に基づいて、タスク遷移の様子を表示する。ユーザは、そのタスク遷移表示部172に表示されたタスク遷移の様子を参照することにより、タスクの実行時間を確認する。すなわち、ユーザは、対象とするモデルの性能が満たされているか否かを検証する。
なお、図7において説明した性能検証の方法は、図4において説明した性能検証の方法に対応する。また、性能シミュレーションログ173は、図4におけるシミュレーションログ112に対応する。
次に、マルチコアコード生成部20の処理について説明する。
図8は、性能検証部17及びマルチコアコード生成部20によって実行される、マルチコアコード生成にかかる処理の一例を示したイメージ図である。
まず性能検証装置27は、マルチコアOSモデル101のタスクブロック101−1〜101−nにおいて、PE情報202及び時間情報203を割り当てる。割り当てたモデルは図8においてマルチコアOSモデル206として表されており、マルチコアOSモデル206内のタスクブロック206−1〜206−nには、PEの情報及び時間情報が割り当てられている。MBDツール200には、こうしてできたマルチコアOSモデル206と制御対象であるプラントモデル205(物理モデル)を有する閉ループモデルが入力される。
性能検証部17は、このマルチコアOSモデル206の性能検証を実行する。この性能検証については図7において説明した通りである。
性能検証において問題がない場合、マルチコアOSモデル206はマルチコアコード生成部20に入力される。マルチコアコード生成部20は、マルチコアOSモデル206をC又はC++のソースコードに変換したマルチコアSW(Software)207を出力する。マルチコアSWはC又はC++のコードで記載されたソースコードであり、タスクブロック207−1〜207−nは、それぞれC又はC++のソースコードに変換されている。
コンパイラ209には、マルチコアSW207及びマルチコアOS208が入力される。コンパイラ209は入力に基づいてコンパイラを実行し、マルチコアobject210(オブジェクトコード)を出力する。これはターゲットとなるマルチコアCPUを対象としたコードとなっている。なおマルチコアOS208は、マルチコアプロセッサで実行されるOSである。
性能検証装置27は、以上により生成されたマルチコアobject210をシミュレータ211に入力するとともに、プラントモデル205をMBDツール212に入力する。性能検証装置27内の連携ブロック213は、シミュレータ211とプラントモデル205をコシミュレーションすることにより、PILSを実行することができる。なおシミュレータ211はマルチコアプロセッサ用のシミュレータである。なおシミュレータ211は、マイコンで代用することもできる。
なお、図8におけるMBDツール200とMBDツール212とは同じ構成要素である。MBDツール200にはデータとして、マルチコアOSモデル101とプラントモデル205が投入され、MBDツール212にはデータとして、プラントモデル205だけが投入される。
図9は、マルチコアPILS環境におけるマルチコアモデルを対象としたオブジェクトコード生成の全体フロー(マルチコアOS作成フロー)の一例を示したフローチャートである。以下、図9において、演算部11が実行する処理を改めて説明する。
まず、ユーザはマルチコアOSモデル101とプラントモデル205からなるモデルを作成し、用意する(ステップS21)。マルチコアOSモデル101は、モデル生成部13により生成することができる。
次に、演算部11はマルチコアOSモデル101にPE情報202及び時間情報203を設定する。換言すれば、演算部11はマルチコアOSモデル101内のタスクブロックに、対応するPE情報及び時間情報を割り当てる(ステップS22)。これにより、マルチコアOSモデル206ができる。
ステップS22において作成されたマルチコアOSモデル206をMBDツール200に入力することにより、MBDツール200でコード生成前の動作検証(機能検証)を実行する(ステップS23)。この動作検証により、機能シミュレーションログ201が生成される。
ステップS23で動作した機能シミュレーションログ201を性能検証部17に入力し、性能検証部17はコード生成前におけるモデルの性能検証を実行する(ステップS24)。この性能検証の結果はタスク遷移表示部172に表示される。
なお、ステップS21〜S24の処理は、実施の形態2にて説明した性能検証の処理に対応する。
ユーザはタスク遷移表示部172に表示された性能検証の結果を確認し、モデルの実行における動作は問題ないか(モデルが正しく実行されているか)、及び性能に問題がないか(全てのタスクが所定時間内に終了しているか)を検証する(ステップS25)。
ステップS25において、モデルの実行における動作又は性能の少なくともいずれかに問題がある場合には(ステップS25のNo)、演算部11はユーザの操作に応じて、ステップS21又はステップS22からの処理をやり直す。例えばモデルの実行における動作に異常がある場合には、マルチコアOSモデル101自体に問題があって正常に動作しないことが考えられる。その場合には、演算部11は正しいマルチコアOSモデル101を再度作成することにより、ステップS21からの処理をやり直す。
性能に異常がある場合、すなわち所定時間内に終了していないタスクがある場合には、PEの割り当てに問題があることが考えられる。又は、ブロック毎に割り当てられた時間が正しくない場合が考えられる。その場合には、ユーザの操作により、演算部11はマルチコアOSモデル101に正しいPE情報202及び時間情報203を設定する。これにより、演算部11はステップS22からの処理をやり直す。
なお、モデルの実行における動作に問題がないか否かの判定については、コード生成前の動作検証を実行した後に(ステップS23とステップS24の間に)実行してもよい。
モデルの実行において動作及び性能のいずれにも問題がない場合には(ステップS25のYes)、演算部11はマルチコアOSモデル206をマルチコアコード生成部20に入力することにより、マルチコアSW207を生成する。そして演算部11はマルチコアSW207とマルチコアOS208をコンパイラ209に入力することにより、マルチコアobject210を生成する(ステップS26)。
演算部11はマルチコアobject210をシミュレータ211に入力させ、プラントモデル205をMBDツール212に入力させる。そして演算部11は、シミュレータ211とMBDツール212とを連携ブロック213で連携させることにより、シミュレーションを実行する。このシミュレーションにより、演算部11は動作検証(機能検証)と性能検証を行う(ステップS27)。
ステップS27において、モデルの実行における動作又は性能の少なくともいずれかに問題がある場合には(ステップS27のNo)、演算部11はユーザの操作に応じて、ステップS21又はステップS22からの処理をやり直す。この詳細についてはステップS25にて上述した通りである。
ステップS27において、モデルの実行における動作及び性能のいずれにも問題がない場合には(ステップS28のYes)、ユーザはモデルにおける適切なオブジェクトコードが完成したことになる。従って演算部11の処理は終了する。
図10は、ステップS24におけるMBDツール200及び性能検証部17の詳細な処理の一例について示したフローチャートである。以下、ステップS24における性能検証フローの詳細について説明する。
ステップS23の後、MBDツール200は、まずMBDシミュレーションを行う。このとき、MBDツール200は、タスクの実行順を示した機能シミュレーションログ201を出力する(ステップS241)。
次に性能検証部17は、機能シミュレーションログ201、PE情報202、時間情報203及びリソース情報204を元に、タスク実行時間を計算する。計算結果は、性能シミュレーションログ173として出力される(ステップS242)。
出力された性能シミュレーションログをユーザがそのまま見るだけでは、要求を満たす性能が出ているか否か(例えばデッドラインを満たすか否か)が一目では分かりにくい。そのため、タスク遷移表示部172が性能シミュレーションログ173を元にしてモデルのタスク遷移表示をする(ステップS243)。このタスク遷移表示を見ることにより、ユーザは、ステップS25において性能に問題がないか否かを検証することが容易にできる。この検証により、ユーザはステップS22の処理をやり直すか(例えばPEの割り当てをもう一度検討しなおすか)、それともステップS25以降の先のフローに進むか否かを決定する。
図11は、以上の処理における機能シミュレーションログ201の一例を示した図である。図11における「OSEK(Offene Systeme und deren Schnittstellen fur die Elektronik im Kraftfahrzeug)」はリアルタイムOSであり、マルチコアプロセッサで動作できるOSの具体例である。
図11におけるaはタスクブロックに関する機能シミュレーションログであり、タスク名、実行時刻、タスクブロックに割り当てられたPE(割り当てPE)及び呼び出し先のブロックが記載されている。呼び出し先のブロックとは、タスクブロック自身が呼び出す相手先のブロックのことをいい、無い場合にはNullが記載される。呼び出し先が関数であり、関数を辿った先にタスクブロック、アラームブロック又はISRブロックのいずれかがあれば、呼び出し先としてそのブロックを記録する。
図11におけるbはアラームブロックに関する機能シミュレーションログであり、タスク名、実行時刻、アラームブロックに割り当てられたPE(割り当てPE)及び呼び出し先のブロックが記載されている。図11におけるcはISRブロックに関する機能シミュレーションログであり、タスク名、実行時刻、ISRブロックに割り当てられたPE(割り当てPE)及び呼び出し先のブロックが記載されている。
図12は、以上の処理における性能シミュレーションログ173の一例を示した図である。
図12におけるaはタスク初期起動を示すシミュレーションログであり、時刻1947661において、タスク3がID1のプロセッサにおいてReady状態になったことを示している。図12におけるbはタスクが実行されることを示すシミュレーションログであり、時刻1949187において、タスク2がID1のプロセッサにおいてRun状態になったことを示している。図12におけるcはタスク終了を示すシミュレーションログであり、時刻71314012において、タスク2がID1のプロセッサにおいてDormant状態になったことを示している。
図12におけるdはタスク起動を示すシミュレーションログであり、時刻1946926において、タスク2がID1のプロセッサにおいてactive task状態になったことを示している。図12におけるeは割り込みが発生したことを示すシミュレーションログであり、時刻2136637においてID1のプロセッサが割り込みハンドラ5に入ったことを示すとともに、時刻2136861においてID1のプロセッサが割り込みハンドラ5を抜けたことを示している。図12におけるfはアラームの設定を示すシミュレーションログであり、時刻989337において、ID1のプロセッサにおいてID1のアラームが設定されたことを示している。
図13は、以上の処理においてタスク実行時間計算部171が計算した計算結果の一例を示したイメージ図である。換言すれば、図12に示したような性能シミュレーションログを分かりやすく図示したのが図13となる。以下、これについて詳細に説明する。
図13の(a)には、タスクブロックが起動する起動時刻、各タスクブロックに割り当てられたプロセッサID、タスクブロック名及び実行時間のデータが記録されている。
各タスクブロックの起動時間は、MBDツール200が実行する機能シミュレーションによって判明する。従って、MBDツール200が出力する機能シミュレーションログ201においては、図13の(a)の「time」に記載された各タスクブロックの起動時刻が記載されている。
各タスクブロックに割り当てられたプロセッサIDは、PE情報202に記録されており、実行時間のデータは時間情報203に記録されている。
なお、図13の(a)において、タスクブロックはtask1_1、task1_2、task2_1、task2_2の4つが定義されている。そして、task1_1はPEID=1において、起動時刻が0において実行時間0.1で実行されることが示されている。同様に、task1_2はPEID=1において、起動時刻が0において実行時間0.2で実行されることが示されている。
task2_1はPEID=2において、起動時刻が0において実行時間0.1で実行されるとともに、起動時刻が1において実行時間0.1で実行されることが示されている。task2_2はPEID=2において、起動時刻が0において実行時間0.3で実行されることが示されている。
タスク実行時間計算部171は以上のデータに基づいて、性能シミュレーションを実行する。タスク実行時間計算部171は、PEID毎に遅延時間を計算する。
図13の(b)は、(a)のデータに基づいて、タスク実行時間計算部171が実行した性能シミュレーションの結果(性能シミュレーションログ173)を示した図である。(b)からは、PEID=1の場合(ID1のプロセッサにおいて)、task1_1が0〜0.1、task1_2が0+0.1(=0.1)〜0+0.1+0.2(=0.3)の時刻に実行される(Run状態になる)ことが分かる。PEID=2の場合(ID2のプロセッサにおいて)、task2_1が0〜0.1、task2_2が0+0.1(=0.1)〜0+0.1+0.3(=0.4)、task2_1が1.0〜1.0+0.1(=1.1)の時刻に実行される(Run状態になる)ことが分かる。
なお、task1_1は時刻0.1以降でDormant状態になり、task1_2は時刻0〜0.1でReady状態、時刻0.3以降でDormant状態になる。また、task2_1は時刻0.1以降でDormant状態になり、task2_2は時刻0〜0.1以降でReady状態、時刻0.4以降でDormant状態になる。
図14は、図13の(b)に記載された性能シミュレーションログ173をタスク遷移表示部172において表示したときの表示画面の一例である。図14の表示画面は、上述のタスク遷移表示遷移ツールによって表示されるタスク遷移表示を単純化して示している。なお、図14において横軸は時間経過を示している。
図14を見ることにより、task1_1〜task2_2がいずれのプロセッサでいつ実行されるかを、ユーザは簡単に確認することができる。図14により、task1_1は0〜0.1の時刻に実行され、task1_2は0.1〜0.3の時刻に実行され、task2_1が0〜0.1と1.0〜1.1、task2_2が0.1〜0.4の時刻に実行されることが分かる。
仮にtask2_2の実行時間が1.1の場合には、task2_2は0+0.1(=0.1)〜0+0.1+1.1(=1.2)の時間に実行される。task2_1は時刻1.0周期で起動する前提の場合、次に時刻1.0から始まるはずのtask2_1の実行と重なってしまう。つまり、この場合には性能を満たした動きができないことが、タスク遷移表示部172への表示によりユーザが判定することができる。
このようにして、性能検証装置27は、性能検証処理において、マルチコアプロセッサの各プロセッサコアにおけるタスクブロックの実行開始時間及び実行終了時間を実行過程として検証している。
従来、機能シミュレーションの段階(MBDのみのシミュレーション)では、モデルの性能検証まではできなかった。そのため、マルチコアSWのような、どのPEでタスクを動かすべきかを決定する処理について、早期段階で実現ができなかった。
しかし、実施の形態3においては、機能シミュレーションの結果(ログ)とタスクのPEへの割り当て情報、タスクの実行時間を考慮して、コード生成前に実行時間を計算(予測)することができる。このため、早期にマルチコアSWのタスクのPE割り当てを検討することができなかった問題を解決することができた。
そして、性能検証装置27は、性能検証処理において、タスクブロック毎に算出された実測値及びタスクブロック毎のプロセッサコアの割り当て情報を用いて、制御プログラムの実行過程を検証している。そのため、性能検証装置27は、実際の制御プログラムの性能検証をより精度よく実現することができる。特に、性能検証装置27は、プロセッサコア毎の実行性能を検証することができる。
性能検証装置27は、性能検証処理において、マルチコアプロセッサの各プロセッサコアにおけるタスクブロックの実行開始時間及び実行終了時間を実行過程として検証している。そのため、性能検証装置27は、各プロセッサコアにおけるタスクブロックの実行状況を具体的に検証することができるため、制御プログラムについてより具体的な検証ができる。
なお実施の形態3にかかる性能検証方法は、実施の形態2と同様に、PILS環境、特にMBDツールを使用したPILS環境に適用することができる。
実施の形態4
次に実施の形態4では、マルチコアプロセッサ用のプログラムにおいて、タスクブロックにおいて所定の性能を満たすようにPEをコード生成前に割り当てる方法を説明する。
実施の形態4では、実施の形態3において記載した「1.性能検証面」、「2.コード生成面」、「3.PILSシミュレーション面」のうち、「2.コード生成面」における課題を解決する。
実施の形態4では、具体的にはOSモデルにおける以下の4ブロックを組み合わせることにより、プログラムのアルゴリズムを表現する。このモデルではマルチコアOS、特にリアルタイムOSであるOSEKをベースにしたコード生成がなされる。
1.タスクブロック
タスクブロックは、タスクの処理を行うブロックである。タスクブロックには入力端子と出力端子が備えられており、入力端子よりコールされたタイミングで、パラメータ・ダイアログで指定された名前のタスクをActivate Taskシステムコールで呼び出すブロックである。ここで、タスクブロックに接続されたFunction−Call Subsystemブロックが、タスクの処理関数とみなされる。なおFunction−Call Subsystemブロックはタスク処理関数ブロックであり、タスクブロックの出力端子とトリガ端子とを接続することによって、タスク処理関数とみなされるブロックである。
タスクブロックには、割り当てるPEの情報が設定される。タスクブロックにより、コード生成のときにPE毎に使用するTaskコール部(コード)が生成され、OIL(OSEK Implementation Language)上にPE毎に使用するTask定義が生成される。また、タスクブロックとつながる関数ブロックと接続するリソースブロックによってリソース取得・解放のコードが生成される。
2.Alarmブロック
Alarmブロックは、アラームの処理を行うブロックである。Alarmブロックには入力端子と出力端子が備えられており、入力端子よりコールされる度に、Alarmブロックは指定した値をカウントし、カウンタが満了する値に達したタイミングで、出力端子に接続したブロックにアラームの満了を通知する。換言すれば、Alarmブロックは、タスクのタイマー機能の役割を有する。なお、出力端子への通知の頻度は、ワンショット・アラームか周期アラームかによって異なる。
Alarmブロックには、割り当てるPEの情報が設定される。Alarmブロックにより、OIL上にPE毎に使用するAlarmが生成される。
3.ISRブロック
ISRブロックは、マルチコアSW内のブロックに対して、ISR(割り込み)の通知を行うブロックである。ISRブロックには入力端子と出力端子が備えられており、入力信号から信号が入力される度に、出力端子に接続されたブロックに対し、指定された割り込み要因コードをパラメータとして関数コールを行うことによって割り込みの発生を通知する。通知を受けたブロックでは、その割り込みに対する処理を行う。なお出力端子に接続できるのは、タスクブロックか、Function−Call Subsystemブロックのいずれかである。
ISRブロックには、割り当てるPEの情報が設定される。ISRブロックにより、コード生成のときにPE毎に使用するISRコール部(コード)が生成され、OIL上にPE毎に使用するISRが生成される。ISRブロックは、実施の形態4にかかるマルチコアプロセッサ用のモデルにおける特徴の1つであり、排他制御の処理において必要なブロックである。
4.リソースブロック(Protected RTブロック)
実施の形態4では、Protected RTブロックを、リソースの制御をするリソースブロックとして使用している。Protected RTブロックは、ある速度で動作しているブロックの出力データを、異なる速度で動作しているブロックの入力に伝達するブロックである。Protected RTブロックのパラメータにより、データの整合性や確定性を保証する転送と、より早い応答やより少ないメモリ要求とを変更するオプション指定ができる。タスク間やPE間で、共通のリソースを扱う場合に、リソースブロックを関係するブロック間にProtected RTブロックを配置することによって、リソースの競合を防ぐことに応用する。このようにして、Protected RTブロックはリソースに類似した機能をする(リソースブロック)。
リソースブロックには、割り当てるPEの情報が設定される。リソースブロックにより、OIL上にPE毎に使用するリソース情報が生成される。
実施の形態4にかかる性能検証装置の例は、実施の形態3における図6にて説明した通りであるため、説明を省略する。また、実施の形態4におけるマルチコアコード生成の例については、実施の形態3における図8にて説明した通りであるため、説明を省略する。
図15は、実施の形態4にかかるマルチコアコード生成部20の例を示した構成図である。以下、図15を用いて、マルチコアコード生成部20の詳細について説明する。
マルチコアコード生成部20はマルチコア用ブロックコード生成部28及びマルチコアOS用コード生成部29を備える。マルチコア用ブロックコード生成部28は、リソース考慮タスクブロックコード生成部30、Alarmブロックコード生成部31及びISRブロックコード生成部32を有する。
マルチコアOSモデル206内にあるTask、Alarm、ISR、リソースといったブロックには、割り当てるPE情報が付属されている。マルチコアコード生成部20は、このようなマルチコアOSモデル206を、マルチコア用ブロックコード生成部28に入力する。
リソース考慮タスクブロックコード生成部30は、マルチコアOSモデル206内にあるタスクブロックとリソースブロック(Rate transitionブロック)とを処理する。タスクブロックはリソース考慮タスクブロックコード生成部30によりTaskのターゲットコード34に変換され、リソースブロックはリソースのOIL用情報35に変換される。なおターゲットコード34はC又はC++で記載されたコードであり、OIL用情報35は、設定情報(例えばリソース等の設定情報)が記載される。
Alarmブロックコード生成部31は、マルチコアOSモデル206内にあるAlarmブロックを処理する。Alarmブロックは、Alarmのターゲットコード34とAlarmのOIL用情報35とに変換される。
ISRブロックコード生成部32は、マルチコアOSモデル206内にあるISRブロックを処理する。ISRブロックは、ISRのターゲットコード34とISRのOIL用情報35とに変換される。
次に、マルチコアコード生成部20は、マルチコア用ブロックコード生成部28が生成したターゲットコード(Task、Alarm、ISR)34とOIL用情報(Alarm、ISR、リソース)35とを、マルチコアOS用コード生成部29に入力する。マルチコアOS用コード生成部29は、ターゲットコード34及びOIL用情報35に基づいて、マルチコアSW207を生成する。マルチコアSW207には、デュアルコアプロセッサの場合は、PE1ターゲットコード214(PE1帰属コード)、PE2ターゲットコード215(PE2帰属コード)、マルチコアOIL216、共通コード/プロジェクト217が含まれる。なお、ここでは、マルチコアコード生成部20は、2つのプロセッサコアがあるマルチプロセッサコア上で動作する制御プログラムのコードを生成する。
PE1ターゲットコード214はPE1におけるC又はC++のコード、PE2ターゲットコード215はPE2におけるC又はC++のコードである。マルチコアOIL216は、PE1ターゲットコード214及びPE2ターゲットコード215に記載されたPE1及びPE2の処理とOSをつなげるための設定ファイルである。
マルチコアコード生成部20は、マルチコアSW207を生成するタイミングにおいて、連携ブロック213(シミュレータとの連携用ブロック)を生成する。連携ブロック213は、シミュレータ211と制御対象モデルを載せたMBDツール212間で連携シミュレーション(PILS)を実行するブロックである。
実施の形態4におけるマルチコアOS作成フローは実施の形態3における図9の通りであり、説明を省略する。
図16は、図9のステップS26におけるマルチコアコード生成部20の詳細な処理の一例について示したフローチャートである。以下、ステップS24におけるマルチコアコード生成フローについて詳述する。
ステップS26においては、まず、リソース考慮タスクブロックコード生成部30は、リソース考慮Taskコード(ターゲットコード34)を生成する(ステップS261)。ここでリソース考慮タスクブロックコード生成部30は、生成したリソース考慮Taskコードに対応するOIL用情報35を生成する。
次に、Alarmブロックコード生成部31は、Alarmコード(ターゲットコード34)を生成する(ステップS262)。ここでAlarmブロックコード生成部31は、生成したAlarmコードに対応するOIL用情報35を生成する。
次に、ISRブロックコード生成部32は、ISRコード(ターゲットコード34)を生成する(ステップS263)。ここでISRブロックコード生成部32は、生成したISRコードに対応するOIL用情報35を生成する。
マルチコアOS用コード生成部29は、以上の処理によって生成されたターゲットコード(Task、Alarm、ISR)34とOIL用情報(Alarm、ISR、リソース)35を使って、PEターゲットコードを生成する(ステップS264)。この処理はPE毎になされる。換言すれば、ステップS264の処理はPE数分だけループする。
次に、マルチコアOS用コード生成部29は、全てのOIL用情報35に基づいて、図15のマルチコアOIL216を生成する(ステップS265)。
マルチコアOS用コード生成部29は、共通コード/プロジェクト217を生成する(ステップS266)。例えば共通コードは、スタートアップファイルであり、プロジェクトファイルは、出力したファイルを元にしたコンパイルを行うファイルである。
マルチコアOS用コード生成部29内のシミュレータ連携ブロック生成部33は、連携ブロック213を生成する(ステップS267)。以上のようにして、マルチコアコード生成部20はステップS26の処理を実行する。
以下、タスクブロック、リソースブロック、Alarmブロック、ISRブロックのそれぞれがモデル中にある場合に生成されるターゲットコード34とOIL用情報35との例について説明する。
図17は、タスクブロックが含まれるモデルの一例を示したイメージ図である。図17におけるタスクブロックは「Task1」の名前が付けられており、ID1のPEが割り当てられている。この割り当て情報は、マルチコアOSモデル206のブロックごとに設定されるPE情報に対応する。
図17のモデルにおいて、「Task1」のタスクブロックはFunction−Call Generatorからの入力端子へのコールの入力により、関数ブロック(Function Call Subsystem)を呼び出す。ここで関数ブロックのトリガ端子にはタスクブロックの出力端子が接続されている。関数ブロックは、関数の計算結果「1」を出力端子Out1から出力する。
図18は、図17のモデルにおけるタスクブロックに関するターゲットコード及びOIL用情報の一例を示す図である。図18(a)は、図17のモデルに関するタスクブロックのターゲットコードを示す。図17においてタスクブロック自体は関数ブロックと接続されているため、タスクブロックに接続された関数が図18(a)においてTaskの付属コードとして生成される。
図18(b)は、図17のモデルに関するタスクブロックのOIL用情報を示す。Task1がどのPEに割り当てられるかは、cpu_PE1の場所に設定される。図18(a)の<1>に記載された通り、Task1はPE1に割り当てられる。
また、図18(b)の<2>に記載された通り、Task1はリソース1(RS1)が割り当てられている。リソース1は、例えば共有メモリ等のハードウェア資源である。
図19は、リソースブロックが含まれるモデルの一例を示したイメージ図である。図19におけるリソースブロック(Protected RT1)には、ID1のPEが割り当てられている。図19における「Task12」のタスクブロックにはID1のPEが割り当てられ、「Task21」のタスクブロックにはID2のPEが割り当てられる。この割り当て情報は、マルチコアOSモデル206のブロックごとに設定されるPE情報に対応する。
図19のモデルにおいて、「Task12」のタスクブロックは入力端子へのコールの入力により、「Task12」の関数ブロックを呼び出す。ここで「Task12」の関数ブロックのトリガ端子には、「Task12」のタスクブロックの出力端子が接続されている。「Task12」の関数ブロックの入力端子In1には、リソースブロックの出力端子が接続されており、「Task12」の関数ブロックはリソースブロックからの出力及び「Task12」のタスクブロックの呼び出しに基づいて、関数の計算結果を出力端子Out1から出力する。
「Task21」のタスクブロックは入力端子へのコールの入力により、「Task21」の関数ブロックを呼び出す。ここで「Task21」の関数ブロックのトリガ端子には、「Task21」のタスクブロックの出力端子が接続されている。「Task21」の関数ブロックの入力端子In2には、From[A]からの入力値が入力され、「Task21」の関数ブロックはFrom[A]からの入力値及び「Task21」のタスクブロックの呼び出しに基づいて、関数の計算結果を出力端子Out2から出力する。
リソースブロックは、「Task21」の関数ブロックの出力を制御することにより、リソースの競合を防ぐ。「Task12」と「Task21」とが同じリソースRS1(例えば共有メモリ)を用いてタスクを実行する場合に、「Task12」と「Task21」とは異なるPEによって実行される。そのため、「Task21」による出力中に、「Task12」が実行されてしまい、「Task12」の所望の結果を取得することができなくなってしまうことが考えられる。シングルコアプロセッサで図19に記載のモデルを実行する場合には、一つのプロセッサコア上で読み出しと書き込みを同時に行えないため、このような事態は発生しない。しかし、マルチコアプロセッサでモデルを実行する場合には、複数のプロセッサコアが独立に同じタイミングで処理を実行することが可能であるため、このような事態が発生しうる。
図20は、図19のモデルにおけるリソースブロックに関するターゲットコード及びOIL用情報の一例を示す図である。図20(a)は、図19のモデルにおけるリソースブロックに関するターゲットコードを示す。図20(a)では、Task12及びTask21のタスクブロックのコードは図8と同様に生成される。
図19に示したモデルでは、2つのTask間でリソースブロックを使うことにより、データ共有を行っている。このような場合、モデルにかかるターゲットコードにおいては、Taskから呼び出される関数内全体を囲むようにリソースの取得及び解放を行うコードを挿入する。図20(a)の<1>の通り、GetResource(RS1)、ReleaseResource(RS1)がRS1の取得及び解放を行うコードとして記載されている。なお、図20(a)におけるfnc21()、fnc12()の関数内では、リソースブロックからのデータのread/writeを行い、処理をするコードが生成される。
図20(b)は、図19のモデルに関するタスクブロックのOIL用情報を示す。Task1、Task2がどのPEに割り当てられるかは、それぞれcpu_PE1、cpu_PE2の場所に設定される。
リソースブロックに関する情報自体は、OIL用情報にも出力される。図19のモデルの場合リソースブロックにPEID=1を設定したため、cpu_PE1内にリソースがRS1である情報が記載される。つまり、RS1の取得及び解放を行う情報がOIL用情報にも記載される。これは図20(b)の<2>の通りである。
以上のように、リソースの取得及び解放を行う情報をターゲットコード及びOIL用情報に記載することにより、モデルの実行に際してのリソースの制御を反映させることができる。
本例では示していないが、複数のリソースを共有する場合には、リソース考慮タスクブロックコード生成部30はターゲットコードにおいて、「GetResource(RS1);GetResource(RS2);・・・ReleaseResource(RS2);ReleaseResource(RS2);」のように入れ子となるコードを生成する。
なお、OIL用情報は図18、図20ではOILファイルそのままを図示しているが、ステップS261の段階ではあくまで内部データ構造として保持している。OILファイル生成(ステップS265)の段階において、マルチコアOS用コード生成部29はOIL情報に基づいてOILファイルを生成する。これは図22、図24にかかるOIL用情報についても同様である。
図21は、Alarmブロックが含まれるモデルの一例を示したイメージ図である。図21におけるAlarmブロックは「Alarm_repeat」の名前が付けられており、ID1のPEが割り当てられている。またタスクブロックは「Task_repeat」の名前が付けられており、ID1のPEが割り当てられている。この割り当て情報は、マルチコアOSモデル206のブロックごとに設定されるPE情報に対応する。
図21のモデルにおいて、AlarmブロックはFunction−Call Generatorからの入力端子へのコールの度に指定した値をカウントし、カウンタが満了する値に達したタイミングで、出力端子に接続したタスクブロックに通知する。タスクブロックは入力端子から入力されたその通知により、関数ブロックを呼び出す。ここで関数ブロックのトリガ端子にはタスクブロックの出力端子が接続されている。関数ブロックは、関数の計算結果を出力端子Out1から出力する。
図22は、図21のモデルにおけるAlarmブロックに関するターゲットコード及びOIL用情報の一例を示す図である。このAlarmブロックに関するターゲットコード及びOIL用情報は、Alarmブロックコード生成部194により図16におけるステップS262において生成される。図22(a)は、図21のモデルにおけるAlarmブロックに関するターゲットコードを示す。
図21においてAlarmブロックにはPEID=1、タスクブロックにはPEID=1が割り当てられている。Alarmブロックコード生成部31はAlarmブロックのコードを生成すると、コードにおけるTask(init)という初期化Task内に「SetRelAlarm(Alarm_repeat・・・);」というコードを出力する。これは図22(a)の<1>の通りである。
図22(b)は、図21のモデルに関するAlarmブロックのOIL用情報を示す。Alarmブロックコード生成部31は、Alarmブロックのコードを生成するのと同じタイミングで、OIL用情報におけるcpu_PE1の箇所に「Alarm_repeat」を登録する。OIL用情報において、この「Alarm_repeat」の後に「Task_repeat」が記載されるため、「Alarm_repeat」から「Task_repeat」が起動することがOIL用情報において示される。これは図22(b)の<2>、<3>の通りである。
図23は、ISRブロックが含まれるモデルの一例を示したイメージ図である。図23におけるISRブロックは「INTP0」の名前が付けられており、ID1のPEが割り当てられている。またタスクブロックは「Task」の名前が付けられており、ID1のPEが割り当てられている。この割り当て情報は、マルチコアOSモデル206のブロックごとに設定されるPE情報に対応する。
なおISRブロックにおいては、INTP0の例外コードとして「0x80」が設定されている。これは、割り込みが発生した場合に、例外処理として「0x80」に飛んで処理を実行するように制御することを意味する。
図23のモデルにおいて、ISRブロックはFunction−Call Generatorからの入力端子へのコールの度に、出力端子に接続したタスクブロックに対し、指定された割り込み要因コードをパラメータとして関数コールを行い、割り込みの発生を通知する。タスクブロックは入力端子から入力されたその通知により、関数ブロックを呼び出す。ここで関数ブロックのトリガ端子にはタスクブロックの出力端子が接続されている。関数ブロックは、関数の計算結果を出力端子Out1から出力する。
図24は、図23のモデルにおけるISRブロックに関するターゲットコード及びOIL用情報の一例を示す図である。このISRブロックに関するターゲットコード及びOIL用情報は、ISRブロックコード生成部32により図17におけるステップS263において生成される。図24(a)は、図22のモデルにおけるISRブロックに関するターゲットコードを示す。
図23においてISRブロックにはPEID=1、タスクブロックにはPEID=1が割り当てられている。図22のモデルではISRブロックとタスクブロックがつながっているため、ISRブロックコード生成部32はISRブロックのコードを生成すると、ISR(INTP0)からTask1をActivateTask(起動)するコードを出力する。これは図24(a)の<1>の通りである。
図24(b)は、図23のモデルに関するISRブロックのOIL用情報を示す。ISRブロックコード生成部32は、ISRブロックのコードを生成するのと同じタイミングで、OIL用情報におけるcpu_PE1の箇所に「INTP0」のISRを登録する。そして、ISRブロックにおいてINTP0の例外コードとして「0x80」が設定されているため、OIL用情報には「0x80」が出力される。これは図24(b)の<2>の通りである。
以上のようにして生成されたターゲットコード34とOIL用情報35に基づいて、図16のステップS264においてマルチコアOS用コード生成部29はPE帰属コードを生成する。この処理はPE毎に実行される。例えば、PE1に対しては、マルチコアOS用コード生成部29は以下の処理を実行する。
・PE1用のC/C++におけるmain関数の出力
・PE1に属するtaskターゲットコードを抽出して、PE1用taskターゲットコードとして出力
・ISRのOIL用情報35からPE1に属するISRコードを抽出して、PE1用ISRターゲットコードとして出力
・出力したPE1用taskターゲットコードにフック関数を追記
・PE1用のメモリ初期化コードを出力
以上によって出力されたコード全てを総称して、図15におけるPE1ターゲットコード214としている。
マルチコアコードの生成を実現するためには、PE数拡張に適合しやすくするため、OSモデルをコード生成のベースにするのが望ましい。そこで、実施の形態4では、OSモデルでマルチコアモデルを実現した。実施の形態4では、具体的には以下の処理を実施している。
1.シングルコアプロセッサで使用していたタスクブロック、AlarmブロックのほかにISRブロックをモデル内のブロックとして用意した。
2.Rate transitionブロックはシングルコアプロセッサのときにもモデル内に存在していたが、実施の形態4においてはリソースを扱うブロックという意味で用いられている。
3.Taskからコールされる関数内からRate transitionブロックを使用する場合、「GetResource(),ReleaseResource()」で関数全体を囲み、その中にデータのread/writeや処理がコードに記述されるようにした。
4.タスクブロック、Alarmブロック、ISRブロック、Rate transitionブロックにPE割り当て情報を設定できるようにした。
以上の処理により、PEを意識しないアルゴリズムモデルに対して、PE情報を設定するだけで、性能検証装置27はマルチコアOSを使用した複雑なコードを短時間かつ正確に作成できる。また、性能検証装置27は、マルチコアコード生成と同時に連携シミュレーションブロックも自動生成することができる。そのため、性能検証装置27は、マルチコアシミュレータとMBDツールの連携シミュレーション環境構築を短時間かつ正確に作成できる。
なお、実施の形態4においてはリアルタイムOSのOSEKをベースにしてマルチコアコードを生成しているが、ベースにするOSはOSEKに限られず、例えばITRON(Industrial TRON)へ拡張することも可能である。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
実施の形態1〜4のそれぞれに示した性能検証装置が実行する処理フローは、性能検証装置において適宜組み合わせて実行することができる。例えば、実施の形態2にかかる性能検証装置は、実施の形態3に示したオブジェクトコード生成の処理を実行することができる。また、実施の形態2にかかる性能検証装置は、実施の形態4に示したマルチコアコード生成の処理を実行することができる。
実施の形態1〜4に示した性能検証装置が実行する処理フローは、制御方法の1つとして、コンピュータに実行させることができる。例えば、処理フローを制御プログラムとしてコンピュータに実行させてもよい。
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
1 性能検証装置
2 演算部
3 記憶部
4 コード生成部
5 実時間算出部
6 性能検証部
7 モデルファイル
8、9 タスクブロック
10、27 性能検証装置
11 演算部
12 記憶部
13 モデル生成部
14 タスク単位コード生成部
15 モデルシミュレータ部
16 実時間算出部
17 性能検証部
18 プログラム格納部
19 データ格納部
20 マルチコアコード生成部
21 モデルシミュレーションプログラム
22 モデルファイル
23 タスク単位コード生成プログラム
24 タスク単位コード
25 実時間計測プログラム
26 実時間ファイル
28 マルチコア用ブロックコード生成部
29 マルチコアOS用コード生成部
30 リソース考慮タスクブロックコード生成部
31 Alarmブロックコード生成部
32 ISRブロックコード生成部
33 連携ブロック生成部
34 ターゲットコード
35 OIL用情報
100 シングルコアPILS環境
101 マルチコアOSモデル
101−1〜101−n タスクブロック
102 シングルコアモデル
102−1〜102−n タスクブロック
103 シングルコアコード生成ツール
104 生成コード
105 プロジェクトファイル
106 連携用ブロック
107 IDE
108 シミュレータ
109 エミュレータ
110 実測値ファイル
110−1〜110−n 実測値
111 タスク実行情報測定部
112 シミュレーションログ
113 タスク遷移表示部
171 タスク実行時間計算部
172 タスク遷移表示部
173 性能シミュレーションログ
200 MBDツール
201 機能シミュレーションログ
202 PE情報
203 時間情報
204 リソース情報
205 プラントモデル
206 マルチコアOSモデル
206−1〜206−n タスクブロック
207 マルチコアSW
207−1〜207−n タスクブロック
208 マルチコアOS
209 コンパイラ
210 マルチコアobject
211 シミュレータ
212 MBDツール
213 連携ブロック
214 PE1ターゲットコード
215 PE2ターゲットコード
216 マルチコアOIL
217 共通コード/プロジェクト

Claims (18)

  1. 演算部において実行され、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルを記憶部から読み出し、前記制御プログラムの性能検証を行う性能検証プログラムであって、
    前記モデルファイルから前記タスクブロックを抽出して、前記タスクブロック毎のコードを生成するコード生成処理と、
    シングルコアプロセッサにおける前記コードの実行時間の実時間を前記タスクブロック毎に算出する実時間算出処理と、
    前記タスクブロック毎に算出された前記実時間を用いて、前記制御プログラムの実行過程を検証する性能検証処理と、
    を行う性能検証プログラム。
  2. 前記性能検証プログラムは、前記性能検証処理において、前記タスクブロック毎に算出された前記実時間及び前記タスクブロック毎のプロセッサコアの割り当て情報を用いて、前記制御プログラムの実行過程を検証する、
    請求項1に記載の性能検証プログラム。
  3. 前記性能検証プログラムは、前記性能検証処理において、マルチコアプロセッサの各プロセッサコアにおける前記タスクブロックの実行開始時間及び実行終了時間を前記実行過程として検証する、
    請求項2に記載の性能検証プログラム。
  4. 前記性能検証プログラムは、前記実時間算出処理において、実時間を算出する対象である計算対象タスクブロックを、シミュレータとの連携用ブロックに入れ替えて前記モデルファイルのシミュレーションを実行することにより、前記タスクブロックにおける実時間を算出する、
    請求項1に記載の性能検証プログラム。
  5. 前記シミュレータとの連携用ブロックは、前記コード生成処理において前記タスクブロック毎のコードに対応して生成される、
    請求項4に記載の性能検証プログラム。
  6. 前記モデルファイルのシミュレーションはシングルコアPILS環境中の統合開発環境におけるシミュレーションであり、前記シミュレータとの連携用ブロックは前記統合開発環境と連携することによりシミュレーションを実行する連携用ブロックである、
    請求項4に記載の性能検証プログラム。
  7. 演算部において実行され、マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルを記憶部から読み出し、前記制御プログラムの性能検証を行う性能検証方法であって、
    前記モデルファイルから前記タスクブロックを抽出して、前記タスクブロック毎のコードを生成するコード生成処理と、
    シングルコアプロセッサにおける前記コードの実行時間の実時間を前記タスクブロック毎に算出する実時間算出処理と、
    前記タスクブロック毎に算出された前記実時間を用いて、前記制御プログラムの実行過程を検証する性能検証処理と、
    を備える性能検証方法。
  8. 前記性能検証方法は、前記性能検証処理において、前記タスクブロック毎に算出された前記実時間及び前記タスクブロック毎のプロセッサコアの割り当て情報を用いて、前記制御プログラムの実行過程を検証する、
    請求項7に記載の性能検証方法。
  9. 前記性能検証方法は、前記性能検証処理において、マルチコアプロセッサの各プロセッサコアにおける前記タスクブロックの実行開始時間及び実行終了時間を前記実行過程として検証する、
    請求項8に記載の性能検証方法。
  10. 前記性能検証方法は、前記実時間算出処理において、実時間を算出する対象である計算対象タスクブロックを、シミュレータとの連携用ブロックに入れ替えて前記モデルファイルのシミュレーションを実行することにより、前記タスクブロックにおける実時間を算出する、
    請求項7に記載の性能検証方法。
  11. 前記シミュレータとの連携用ブロックは、前記コード生成処理において前記タスクブロック毎のコードに対応して生成される、
    請求項10に記載の性能検証方法。
  12. 前記モデルファイルのシミュレーションはシングルコアPILS環境中の統合開発環境におけるシミュレーションであり、前記シミュレータとの連携用ブロックは前記統合開発環境と連携することによりシミュレーションを実行する連携用ブロックである、
    請求項10に記載の性能検証方法。
  13. マルチコアプロセッサ上で実行される制御プログラムの動作をモデル化した複数のタスクブロックを含むモデルファイルを記憶部から読み出し、前記制御プログラムの性能検証を演算部で行う性能検証装置であって、
    前記モデルファイルから前記タスクブロックを抽出して、前記タスクブロック毎のコードを生成するコード生成部と、
    シングルコアプロセッサにおける前記コードの実行時間の実時間を前記タスクブロック毎に算出する実時間算出部と、
    前記タスクブロック毎に算出された前記実時間を用いて、前記制御プログラムの実行過程を検証する性能検証部と、
    を備える性能検証装置。
  14. 前記性能検証部は、前記タスクブロック毎に算出された前記実時間及び前記タスクブロック毎のプロセッサコアの割り当て情報を用いて、前記制御プログラムの実行過程を検証する、
    請求項13に記載の性能検証装置。
  15. 前記性能検証部は、マルチコアプロセッサの各プロセッサコアにおける前記タスクブロックの実行開始時間及び実行終了時間を前記実行過程として検証する、
    請求項14に記載の性能検証装置。
  16. 前記実時間算出部は、実時間を算出する対象である計算対象タスクブロックを、シミュレータとの連携用ブロックに入れ替えて前記モデルファイルのシミュレーションを実行することにより、前記タスクブロックにおける実時間を算出する、
    請求項13に記載の性能検証装置。
  17. 前記コード生成部は、前記シミュレータとの連携用ブロックを前記タスクブロック毎のコードに対応して生成する、
    請求項16に記載の性能検証装置。
  18. 前記モデルファイルのシミュレーションはシングルコアPILS環境中の統合開発環境におけるシミュレーションであり、前記シミュレータとの連携用ブロックは前記統合開発環境と連携することによりシミュレーションを実行する連携用ブロックである、
    請求項16に記載の性能検証装置。
JP2012255141A 2012-11-21 2012-11-21 性能検証プログラム、性能検証方法及び性能検証装置 Pending JP2014102734A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012255141A JP2014102734A (ja) 2012-11-21 2012-11-21 性能検証プログラム、性能検証方法及び性能検証装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012255141A JP2014102734A (ja) 2012-11-21 2012-11-21 性能検証プログラム、性能検証方法及び性能検証装置

Publications (1)

Publication Number Publication Date
JP2014102734A true JP2014102734A (ja) 2014-06-05

Family

ID=51025178

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012255141A Pending JP2014102734A (ja) 2012-11-21 2012-11-21 性能検証プログラム、性能検証方法及び性能検証装置

Country Status (1)

Country Link
JP (1) JP2014102734A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160084560A (ko) * 2015-01-05 2016-07-14 삼성에스디에스 주식회사 프로그램의 성능 측정 시스템 및 방법
CN106095654A (zh) * 2015-04-28 2016-11-09 瑞萨电子株式会社 性能验证装置、具有性能验证装置的系统以及方法
JP2017091467A (ja) * 2015-11-17 2017-05-25 株式会社東芝 仮想試験システム、仮想試験方法およびプログラム
WO2018198783A1 (ja) * 2017-04-27 2018-11-01 日立オートモティブシステムズ株式会社 車両制御システム検証手法および検証装置および制御装置
US10430311B2 (en) 2015-01-21 2019-10-01 International Business Machines Corporation Measuring execution time of benchmark programs in a simulated environment
CN111752692A (zh) * 2020-06-23 2020-10-09 北京经纬恒润科技有限公司 仿真环境下的多核任务处理方法及装置
JPWO2024127523A1 (ja) * 2022-12-13 2024-06-20
WO2026004089A1 (ja) * 2024-06-28 2026-01-02 Ntt株式会社 コード生成装置及びコード生成方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101674787B1 (ko) * 2015-01-05 2016-11-10 삼성에스디에스 주식회사 프로그램의 성능 측정 시스템 및 방법
KR20160084560A (ko) * 2015-01-05 2016-07-14 삼성에스디에스 주식회사 프로그램의 성능 측정 시스템 및 방법
US10430311B2 (en) 2015-01-21 2019-10-01 International Business Machines Corporation Measuring execution time of benchmark programs in a simulated environment
US10437699B2 (en) 2015-01-21 2019-10-08 International Business Machines Corporation Measuring execution time of benchmark programs in a simulated environment
CN106095654A (zh) * 2015-04-28 2016-11-09 瑞萨电子株式会社 性能验证装置、具有性能验证装置的系统以及方法
JP2016207166A (ja) * 2015-04-28 2016-12-08 ルネサスエレクトロニクス株式会社 性能検証装置、システム、方法、およびコンピュータに当該方法を実行させるためのプログラム
CN106095654B (zh) * 2015-04-28 2021-04-02 瑞萨电子株式会社 性能验证装置、性能验证系统以及性能验证方法
US10372422B2 (en) 2015-04-28 2019-08-06 Rensas Electronics Corporation Performance verification device for verifying performance of program, method, and recording medium having program recorded thereon for causing computer to perform the method
JP2017091467A (ja) * 2015-11-17 2017-05-25 株式会社東芝 仮想試験システム、仮想試験方法およびプログラム
JP2018185244A (ja) * 2017-04-27 2018-11-22 日立オートモティブシステムズ株式会社 車両制御システム検証手法および検証装置および制御装置
WO2018198783A1 (ja) * 2017-04-27 2018-11-01 日立オートモティブシステムズ株式会社 車両制御システム検証手法および検証装置および制御装置
US11372442B2 (en) 2017-04-27 2022-06-28 Hitachi Astemo, Ltd. Vehicle control system validation technique and validation device, and control device
CN111752692A (zh) * 2020-06-23 2020-10-09 北京经纬恒润科技有限公司 仿真环境下的多核任务处理方法及装置
CN111752692B (zh) * 2020-06-23 2024-04-12 北京经纬恒润科技股份有限公司 仿真环境下的多核任务处理方法及装置
JPWO2024127523A1 (ja) * 2022-12-13 2024-06-20
WO2024127523A1 (ja) * 2022-12-13 2024-06-20 日立Astemo株式会社 処理負荷推定システム、及び処理負荷推定方法
JP7799862B2 (ja) 2022-12-13 2026-01-15 Astemo株式会社 処理負荷推定システム、及び処理負荷推定方法
WO2026004089A1 (ja) * 2024-06-28 2026-01-02 Ntt株式会社 コード生成装置及びコード生成方法

Similar Documents

Publication Publication Date Title
JP2014102734A (ja) 性能検証プログラム、性能検証方法及び性能検証装置
JP5651251B2 (ja) シミュレーション実行方法、プログラム及びシステム
Van Werkhoven et al. Performance models for CPU-GPU data transfers
CN106095654B (zh) 性能验证装置、性能验证系统以及性能验证方法
Urunuela et al. Storm a simulation tool for real-time multiprocessor scheduling evaluation
JP4975544B2 (ja) シミュレーション装置及びプログラム
JP2010134614A (ja) 並列化処理方法、システム、及びプログラム
JP2011070256A (ja) デバッガおよびプログラム
EP2672388B1 (en) Multi-processor parallel simulation method, system and scheduler
Meloni et al. System adaptivity and fault-tolerance in NoC-based MPSoCs: the MADNESS project approach
US20140089889A1 (en) Behavior invariant optimization of maximum execution times for model simulation
KR20140054948A (ko) 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
CN115004189B (zh) 用于促进多个机器人任务的并发模拟的方法和系统
WO2012099643A2 (en) Integrated environment for execution monitoring and profiling of applications running on multi-processor system-on-chip
CN102279766A (zh) 并行模拟多个处理器的方法及系统、调度器
Johnsen et al. Modeling resource-aware virtualized applications for the cloud in Real-Time ABS
CN113391903A (zh) 可调度性模型的建立方法、装置、电子设备及存储介质
CN115080155B (zh) 一种多线程控制方法、装置、设备和存储介质
US20110087922A1 (en) Test method and tool for master-slave systems on multicore processors
JP6104671B2 (ja) マルチプロセッサシステム、装置、及び方法
Knezevic et al. Interactive computing framework for engineering applications
JP4997144B2 (ja) マルチタスク処理装置およびその方法
WO2018103045A1 (zh) 测试点的创建方法,装置和系统
KR102792243B1 (ko) 차량용 소프트웨어 플랫폼의 시뮬레이션을 위한 os 가상화 장치 및 방법
JP5226848B2 (ja) シミュレーション装置及びプログラム