(57)【特許請求の範囲】
【請求項１】
各々がデータ処理を実行する、演算精度が異なる複数のエンジンと、
前記複数のエンジンのうちのいずれかのエンジンが実行しているデータ処理である実行データ処理と未実行であるが既にエンジンが割り当てられているデータ処理である割当て済みデータ処理とが存在する状況で新たなデータ処理が発生し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々に優先度が設けられている場合に、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理が各々の完了期限までに完了し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理のうち優先度が高いデータ処理ほど演算精度が高いエンジンで実行されるように、前記複数のエンジンから、前記実行データ処理を実行させる新たなエンジンを選択し、前記割当て済みデータ処理を実行させる新たなエンジンを選択し、前記新たなデータ処理を実行させるエンジンを選択するエンジン選択部と、
前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々を、前記エンジン選択部により選択されたエンジンに実行させる制御部とを有するデータ処理実行装置。
【請求項２】
前記エンジン選択部は、
前記実行データ処理を実行している実行エンジンによる前記実行データ処理の実行を継続していると前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の少なくともいずれかが各々の完了期限までに完了しない場合に、
前記実行データ処理を実行させるエンジンとして前記実行エンジン以外のエンジンを選択し、前記割当て済みデータ処理を実行させるエンジンとして前記割当て済みデータ処理に割当て済みのエンジン以外のエンジンを選択する請求項１に記載のデータ処理実行装置。
【請求項３】
前記エンジン選択部は、
前記実行データ処理と、前記割当て済みデータ処理と、前記実行データ処理以外の実行中のデータ処理である他の実行データ処理が存在している状況で前記新たなデータ処理が発生し、前記実行データ処理、前記割当て済みデータ処理、前記他の実行データ処理及び前記新たなデータ処理の各々に優先度が設けられている場合に、前記実行データ処理、前記割当て済みデータ処理、前記他の実行データ処理及び前記新たなデータ処理が各々の完了期限までに完了し、前記実行データ処理、前記割当て済みデータ処理、前記他の実行データ処理及び前記新たなデータ処理のうち優先度が高いデータ処理ほど演算精度が高いエンジンで実行されるように、前記複数のエンジンから、前記実行データ処理を実行させる新たなエンジンを選択し、前記割当て済みデータ処理を実行させる新たなエンジンを選択し、前記他の実行データ処理を実行させる新たなエンジンを選択し、前記新たなデータ処理を実行させるエンジンを選択し、
前記制御部は、
前記実行データ処理、前記割当て済みデータ処理、前記他の実行データ処理及び前記新たなデータ処理の各々を、前記エンジン選択部により選択されたエンジンに実行させる請求項１に記載のデータ処理実行装置。
【請求項４】
前記制御部は、
前記実行データ処理を実行させる前記新たなエンジンが選択される前は、前記実行データ処理を実行可能なエンジンに共通に設けられている共通プログラムコードを変換して前記新たなエンジンの選択前に前記実行データ処理を実行させる実行エンジン向けの個別のプログラムコードを生成し、生成した前記実行エンジン向けの個別のプログラムコードを用いて前記実行エンジンに前記実行データ処理を実行させ、
前記実行データ処理を実行させる前記新たなエンジンが選択された場合は、前記共通プログラムコードを変換して前記新たなエンジン向けの個別のプログラムコードを生成し、生成した前記新たなエンジン向けの個別のプログラムコードを用いて前記新たなエンジンに前記実行データ処理を引き継がせる請求項１に記載のデータ処理実行装置。
【請求項５】
前記データ処理実行装置は、更に、
前記実行データ処理を実行している実行エンジンと前記新たなエンジンとの間でインタフェース仕様が異なる場合に、前記インタフェース仕様の違いを吸収する変換処理を行う変換処理部を有する請求項１に記載のデータ処理実行装置。
【請求項６】
前記エンジン選択部は、
前記実行エンジンによる前記実行データ処理の実行を継続していると前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の少なくともいずれかが各々の完了期限までに完了しない場合に、
前記変換処理に要する時間を含めて前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理が各々の完了期限までに完了するように、前記実行データ処理を実行させる新たなエンジンを選択し、前記割当て済みデータ処理を実行させる新たなエンジンを選択し、前記新たなデータ処理を実行させるエンジンを選択する請求項５に記載のデータ処理実行装置。
【請求項７】
各々がデータ処理を実行する、演算精度が異なる複数のエンジンを有するコンピュータが、前記複数のエンジンのうちのいずれかのエンジンが実行しているデータ処理である実行データ処理と未実行であるが既にエンジンが割り当てられているデータ処理である割当て済みデータ処理とが存在する状況で新たなデータ処理が発生し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々に優先度が設けられている場合に、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理が各々の完了期限までに完了し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理のうち優先度が高いデータ処理ほど演算精度が高いエンジンで実行されるように、前記複数のエンジンから、前記実行データ処理を実行させる新たなエンジンを選択し、前記割当て済みデータ処理を実行させる新たなエンジンを選択し、前記新たなデータ処理を実行させるエンジンを選択するエンジン選択処理と、
前記コンピュータが、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々を、前記エンジン選択処理により選択されたエンジンに実行させる制御処理とを有するデータ処理実行方法。
【請求項８】
各々がデータ処理を実行する、演算精度が異なる複数のエンジンを有するコンピュータに、
前記複数のエンジンのうちのいずれかのエンジンが実行しているデータ処理である実行データ処理と未実行であるが既にエンジンが割り当てられているデータ処理である割当て済みデータ処理とが存在する状況で新たなデータ処理が発生し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々に優先度が設けられている場合に、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理が各々の完了期限までに完了し、前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理のうち優先度が高いデータ処理ほど演算精度が高いエンジンで実行されるように、前記複数のエンジンから、前記実行データ処理を実行させる新たなエンジンを選択し、前記割当て済みデータ処理を実行させる新たなエンジンを選択し、前記新たなデータ処理を実行させるエンジンを選択するエンジン選択処理と、
前記実行データ処理、前記割当て済みデータ処理及び前記新たなデータ処理の各々を、前記エンジン選択処理により選択されたエンジンに実行させる制御処理とを実行させるデータ処理実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理のスケジューリングに技術に関する。
【背景技術】
【０００２】
データ処理のスケジューリングに関する技術として、特許文献１に記載の技術がある。
特許文献１では、データ処理を実行する複数のエンジンの中から、データ処理をデッドライン内に完了させることができるエンジンを選択する技術が開示されている。例えば、特許文献１の技術では、演算精度は低いが処理時間の短いエンジン又は演算精度は高いが処理時間が長いエンジンが選択される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開ＷＯ２０１８−１９８８２３号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術では、データ処理の開始時に、データ処理をデッドライン内に完了させることができるエンジンが選択される。このため、特許文献１の技術では、あるデータ処理（以下、「データ処理Ａ」という）の実行開始後に、突発イベントにより、データ処理Ａよりも優先度の高い新たなデータ処理（以下、「データ処理Ｂ」という）が発生した場合には、データ処理Ａをデッドライン内に完了させることができないという事態が生じる。
つまり、データ処理Ａの実行開始後に優先度の高いデータ処理Ｂが発生すると、データ処理Ｂを優先して実行するためにデータ処理Ａの実行が中断される。そして、データ処理Ｂの完了後にデータ処理Ａの実行が再開する。特許文献１では、データ処理Ａに適用するエンジンはデータ処理Ａの開始時に固定されており、後から変更することができない。このため、特許文献１の技術では、突発イベントが発生した場合に、データ処理Ａをデッドライン内に完了させることができない。【０００５】
このように、特許文献１の技術では、データ処理を実行するエンジンが固定されるため、データ処理のスケジューリングを状況の変化に応じて柔軟に行うことができないという課題がある。【０００６】
この発明は、このような課題を解決することを主な目的とする。より具体的には、本発明は、データ処理のスケジューリングを状況の変化に応じて柔軟に行えるようにすることを主な目的とする。
【課題を解決するための手段】
【０００７】
本発明に係るデータ処理実行装置は、
各々がデータ処理を実行する複数のエンジンと、
前記複数のエンジンのうちのいずれかのエンジンが実行エンジンとしてデータ処理を実行している際に、前記実行エンジンが実行しているデータ処理である実行データ処理の実行を引き継ぐ引き継ぎエンジンを、前記複数のエンジンから選択するエンジン選択部と、
前記実行エンジンに前記実行データ処理の実行を停止させ、前記引き継ぎエンジンに前記実行データ処理の実行を引き継がせる制御部とを有する。
【発明の効果】
【０００８】
本発明では、実行エンジンが実行データ処理を実行していても、実行データ処理の実行を引き継ぎエンジンに引き継がせることができる。このため、本発明によれば、データ処理のスケジューリングを状況の変化に応じて柔軟に行うことができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係るデータ処理実行装置のハードウェア構成例を示す図。
【図２】実施の形態１に係るデータ処理実行装置の機能構成例を示す図。
【図３】実施の形態１に係るエンジンと演算精度とデータ処理と優先度との関係を示す図。
【図４】実施の形態１に係るエンジンリストの例を示す図。
【図５】実施の形態１に係る実行データ処理リストの例を示す図。
【図６】実施の形態１に係る実行待ちデータ処理リストの例を示す図。
【図７】実施の形態１に係るブロック関数リストとエンジン実装コードの例を示す図。
【図８】実施の形態１に係る演算結果格納メモリの構成例を示す図。
【図９】実施の形態１に係る定常状態でのデータ処理の実行スケジュールの例を示す図。
【図１０】実施の形態１に係る突発イベントが発生した場合のデータ処理の実行スケジュールの例を示す図。
【図１１】実施の形態１に係る突発イベントが発生した場合のデータ処理の実行スケジュールの例を示す図。
【図１２】実施の形態１に係る定常状態でのデータ処理の実行スケジュールの例を示す図。
【図１３】実施の形態１に係る突発イベントが発生した場合のデータ処理の実行スケジュールの例を示す図。
【図１４】実施の形態１に係るデータ処理実行装置の動作の概要を示す図。
【図１５】実施の形態１に係る第１の組合せ抽出処理の範囲を示す図。
【図１６】実施の形態１に係る第２の組合せ抽出処理（１回目）の範囲を示す図。
【図１７】実施の形態１に係る第２の組合せ抽出処理（２回目）の範囲を示す図。
【図１８】実施の形態１に係るエンジン選択部の動作例を示すフローチャート。
【図１９】実施の形態１に係る第１の組合せ抽出処理の詳細を示すフローチャート。
【図２０】実施の形態１に係る第２の組合せ抽出処理の詳細を示すフローチャート。
【図２１】実施の形態１に係るエンジン実行管理部の動作例を示すフローチャート。
【図２２】実施の形態１に係るエンジン実行管理部の動作例を示すフローチャート。
【図２３】実施の形態１に係るエンジン実行管理部の動作例を示すフローチャート。
【図２４】実施の形態１に係るエンジン実行部の動作例を示すフローチャート。
【図２５】実施の形態１に係る時刻＝０での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図２６】実施の形態１に係る時刻＝２５での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図２７】実施の形態１に係る時刻＝１５０での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図２８】実施の形態１に係る時刻＝２００での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図２９】実施の形態１に係る時刻＝３５０での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図３０】実施の形態１に係る時刻＝４２５での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図３１】実施の形態１に係る時刻＝７７５での実行データ処理リスト及び実行待ちデータ処理リストの例を示す図。
【図３２】実施の形態２に係るデータ処理実行装置の機能構成例を示す図。
【図３３】実施の形態２に係る変換処理のタイミング例を示す図。
【図３４】実施の形態２に係る変換処理部の動作の概要を示す図。
【図３５】実施の形態２に係る変換処理時間リストの例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分又は相当する部分を示す。
【００１１】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１は、本実施の形態に係るデータ処理実行装置１００のハードウェア構成例を示す。
本実施の形態に係るデータ処理実行装置１００は、コンピュータである。なお、データ処理実行装置１００の動作手順は、データ処理実行方法に相当する。また、データ処理実行装置１００の動作を実現するプログラムは、データ処理実行プログラムに相当する。
データ処理実行装置１００は、データ処理を実行する。データ処理とは、デジタル信号に算術演算及び論理演算の少なくともいずれかを行ってデジタル信号の解析、加工、分類、変換等を行うデジタル信号処理である。
【００１２】
データ処理実行装置１００は、ハードウェアとして、処理回路９００、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１、ＲＡＭ９０２、ＲＯＭ９０３及びハードウェアアクセラレータ９０４を備える。
ハードウェアアクセラレータ９０４には、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）９０５、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０６、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）９０７及びＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）９０８が含まれる。
【００１３】
処理回路９００は、ＣＰＵ、ＦＰＧＡ、ＧＰＵ、ＤＳＰ及びＡＳＩＣのいずれかで実現される。処理回路９００は、後述するエンジンを実現するＦＰＧＡ９０５、ＧＰＵ９０６、ＤＳＰ９０７及びＡＳＩＣ９０８とは役割が異なるため、これらと区別するために、これらとは別の名称を用いている。処理回路９００は、ＣＰＵ９０１、ＦＰＧＡ９０５、ＧＰＵ９０６、ＤＳＰ９０７及びＡＳＩＣ９０８のいずれかであってもよいし、これらとは異なるＣＰＵ、ＦＰＧＡ、ＧＰＵ、ＤＳＰ及びＡＳＩＣのいずれかであってもよい。処理回路９００は、プロセッシングサーキトリーに該当する。
以下では、処理回路９００がＣＰＵ９０１とは異なるＣＰＵである例を説明する。
【００１４】
処理回路９００は、後述するデータ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５を実行する。
データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５は、プログラムにより実現される。つまり、処理回路９００が、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能を実現するプログラムを実行して、後述するデータ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能が達成される。
データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能を実現するプログラムは、ＲＯＭ９０３で記憶されている。データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能を実現するプログラムはＲＡＭ９０２にロードされて、処理回路９００により実行される。
【００１５】
また、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の処理の結果を示す情報、データ、信号値及び変数値の少なくともいずれかが、ＲＡＭ９０２、ＲＯＭ９０３、処理回路９００内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記録媒体に格納されていてもよい。そして、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の機能を実現するプログラムが格納された可搬記録媒体を流通させてもよい。
【００１６】
また、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４及び通信処理部１０５の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
【００１７】
ＣＰＵ９０１、ＦＰＧＡ９０５、ＧＰＵ９０６、ＤＳＰ９０７、ＡＳＩＣ９０８は、それぞれ、データ処理を実行するエンジンを実現するハードウェアリソース（以下、Ｈ／Ｗリソースとも表記する）である。
エンジンとは、データ処理を実行するためのハードウェアリソースとソフトウェアとが統合された概念である。
例えば、ＣＰＵ９０１がデータ処理のためのアルゴリズムが記述されたプログラムを実行することでエンジンが実現される。
エンジンの一例として、ＣＮＮ（畳み込みニューラルネットワーク）が挙げられる。
図１では、エンジンを実現するハードウェアリソースとして、ＣＰＵ９０１、ＦＰＧＡ９０５、ＧＰＵ９０６、ＤＳＰ９０７、ＡＳＩＣ９０８が示される。しかし、エンジンを実現するハードウェアリソースとして、これらのうちの１つ以上が存在していればよい。つまり、エンジンを実現するハードウェアリソースはＣＰＵ９０１のみであってもよいし、ＣＰＵ９０１とＦＰＧＡ９０５、ＧＰＵ９０６とＤＳＰ９０７のような組合せであってもよい。
データ処理とエンジンとの関係については後述する。
【００１８】
データ処理実行装置１００は、センサ、表示装置、アクチュエータ等の機器とネットワークで接続されていてもよい。また、データ処理実行装置１００は、データ処理実行装置１００と同種のデータ処理実行装置とネットワークで接続されていてもよい。
【００１９】
図２は、本実施の形態に係るデータ処理実行装置１００の機能構成例を示す。
【００２０】
本実施の形態に係るデータ処理実行装置１００は、データ処理登録部１０１、エンジン選択部１０２、エンジン実行管理部１０３、エンジン実行部１０４、通信処理部１０５、エンジン実行管理データ１２０、エンジンソフトウェア１３０及び演算結果格納メモリ１４０で構成される。
エンジン実行部１０４は、更に、ＣＰＵ実行部１０４１、ＦＰＧＡ実行部１０４２で構成される。
エンジン実行管理データ１２０は、更に、実行データ処理リスト１２１と実行待ちデータ処理リスト１２２で構成される。
エンジンソフトウェア１３０は、更に、ブロック関数リスト１３１及びエンジン実装コード１３２で構成される。
【００２１】
図２に示す機能構成の詳細を説明する前に、エンジンと演算精度（以下、単に精度ともいう）とデータ処理と優先度との関係を説明する。
【００２２】
図３は、エンジンと演算精度とデータ処理と優先度との関係を示す。
図３の例では、５種類のデータ処理が存在することを前提としている。各データ処理には、データ処理ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）が設けられている。データ処理ＩＤは、データ処理を一意に識別可能な識別子である。なお、以下では、データ処理ＩＤ：１のデータ処理をデータ処理１ともいう。他のデータ処理も同様に、データ処理２、データ処理３、データ処理４、データ処理５ともいう。
また、５種類のデータ処理には、優先度が設定されている。優先度は数値で示される。数値が大きいほど優先度が高いものとする。
本実施の形態では、図３に示すように、データ処理１のデータ処理の優先度が最も高く、データ処理５のデータ処理の優先度が最も低いものとする。
本実施の形態では、データ処理実行装置１００は、高優先度のデータ処理を低優先度のデータ処理よりも優先して実行する。低優先度のデータ処理の実行中に後発的に高優先度のデータ処理が発生した場合に、低優先度のデータ処理と高優先度のデータ処理データとの間でハードウェアリソースの競合があれば、データ処理実行装置１００は、低優先度のデータ処理の実行を中断して、高優先度のデータ処理を当該ハードウェアリソース上で先に実行する。
【００２３】
図３の１Ａ、１Ｂ、２Ａ・・・５Ｃは、それぞれエンジンを表す。
１Ａ及び１Ｂは、データ処理１を実行するエンジンである。
２Ａ、２Ｂ及び２Ｃは、データ処理２を実行するエンジンである。
３Ａ、３Ｂ及び３Ｃは、データ処理３を実行するエンジンである。
４Ａ及び４Ｂは、データ処理４を実行するエンジンである。
５Ａ、５Ｂ及び５Ｃは、データ処理５を実行するエンジンである。
各エンジンのアルファベット部分が精度に対応する。「Ａ」が最も精度が高いエンジンを表し、「Ｃ」が最も精度が低いエンジンを表す。このように、本実施の形態では、同じデータ処理を実行可能な２以上のエンジンが存在し、同じデータ処理を実行可能な２以上のエンジンは、各々、精度が異なっている。
同じデータ処理を実行する２以上のエンジンが同じハードウェアリソースで実現されるとは限らない。例えば、エンジン１ＡはＦＰＧＡ９０５で実現され、エンジン１ＢはＣＰＵ９０１で実現されることがある。
また、精度と処理時間とはトレードオフの関係にある。つまり、同じデータ処理を実行する場合でも、精度の高いエンジンでは処理時間が長く、精度の低いエンジンでは処理時間が短い。このため、突発イベントにより高優先度のデータ処理が新たに発生した場合に、低優先度のデータ処理のエンジンを精度の低いエンジンに切り替えて、低優先度のデータ処理の処理時間を短縮することがある。
【００２４】
次に、以上を前提に、図２に示すデータ処理実行装置１００の機能構成の詳細を説明する。
【００２５】
データ処理登録部１０１は、データ処理命令を受け付ける。データ処理命令とは、データ処理の実行を指示する命令である。データ処理命令には、データ処理ＩＤ、優先度及びデッドラインが含まれる。
デッドラインはデータ処理の完了期限である。
データ処理登録部１０１は、データ処理命令をエンジン選択部１０２に転送する。
【００２６】
エンジン選択部１０２は、複数のエンジンの中から、データ処理命令で指示されたデータ処理を実行させるエンジンを選択する。エンジン選択部１０２は、エンジンリスト１１０を参照して、エンジンを選択する。エンジンリスト１１０の詳細は後述する。
なお、エンジン選択部１０２により選択され、データ処理を実行しているエンジンを実行エンジンともいう。また、実行エンジンが実行しているデータ処理を実行データ処理ともいう。更に、エンジン選択部１０２によりエンジンが選択され、エンジンが割り当てられているが未実行のデータ処理を割当て済みデータ処理ともいう。
【００２７】
エンジン選択部１０２は、実行エンジンが実行データ処理を実行している際に、新たなデータ処理が発生した場合に、実行データ処理を引き継ぐエンジンを引き継ぎエンジンとして選択する場合がある。
より具体的には、エンジン選択部１０２は、実行エンジンによる実行データ処理の実行では実行データ処理、新たなデータ処理及び割当て済みデータ処理の少なくともいずれかが各々のデッドラインまでに完了しない場合に、実行データ処理、新たなデータ処理及び割当て済みデータ処理を各々のデッドラインまでに完了させることができるエンジンを、引き継ぎエンジンとして選択する。例えば、エンジン選択部１０２は、実行エンジンよりも演算精度が低く、実行データ処理、新たなデータ処理及び割当て済みデータ処理を各々のデッドラインまでに完了させることができるエンジンを、引き継ぎエンジンとして選択する。また、このようなエンジンが２以上ある場合は、エンジン選択部１０２は、最も演算精度が高いエンジンを、引き継ぎエンジンとして選択する。
エンジン選択部１０２は、割当て済みデータ処理に割り当てられているエンジンの他のエンジンへの切替えも検討する。このため、エンジン選択部１０２は、割当て済みデータ処理に割り当てられているエンジンの他のエンジンへの切替えとの組合せにより、実行データ処理、新たなデータ処理及び割当て済みデータ処理を各々の完了期限までに完了させることができるエンジンを、引き継ぎエンジンとして選択する。
【００２８】
また、２以上の実行データ処理がある場合は、エンジン選択部１０２は、２以上の実行データ処理、新たなデータ処理及び割当て済みデータ処理を各々の完了期限までに完了させることができるエンジンを、引き継ぎエンジンとして選択する。
エンジン選択部１０２は、実行データ処理ごとに他のエンジンへの切替えを検討する。このため、エンジン選択部１０２は、他の実行データ処理の他のエンジンへの切替え、割当て済みデータ処理に割り当てられているエンジンの他のエンジンへの切替えとの組合せにより、実行データ処理、新たなデータ処理、割当て済みデータ処理及び他の実行データ処理を各々の完了期限までに完了させることができるエンジンを、引き継ぎエンジンとして選択する。
【００２９】
また、エンジン選択部１０２は、実行データ処理、新たなデータ処理及び割当て済みデータ処理のうち優先度が高いデータ処理ほど演算精度が高いエンジンで実行されるように、引き継ぎエンジンを選択する。
【００３０】
なお、エンジン選択部１０２で行われる処理は、エンジン選択処理に相当する。
【００３１】
エンジン実行管理部１０３は、エンジン選択部１０２により選択されたエンジンを実行するハードウェアリソースに実行要求を出力する。
また、エンジン実行管理部１０３は、実行データ処理の中断が必要な場合は中断指令を該当するハードウェアリソースに出力する。エンジン実行管理部１０３は、中断指令を出力することで、実行エンジンに実行データ処理の実行を停止させる。また、実行データ処理の実行を引き継ぎエンジンに引き継がせる場合は、エンジン実行管理部１０３は、該当するハードウェアリソースに実行要求を出力して、引き継ぎエンジンに実行データ処理の実行を引き継がせる。
更に、中断状態にあるデータ処理の再開が可能になった際に、エンジン実行管理部１０３は再開要求を該当するハードウェアリソースに出力する。
また、エンジン実行管理部１０３は、ハードウェアリソースから、完了通知及びステップ完了通知を受信する。
【００３２】
エンジン実行管理部１０３はエンジン実行部１０４とともに制御部に相当する。また、エンジン実行管理部１０３で行われる処理は制御処理に相当する。
【００３３】
エンジン実行部１０４では、ハードウェアリソースごとに実行部が設けられている。
図２では、簡明化のために、ＣＰＵ実行部１０４１及びＦＰＧＡ実行部１０４２のみを示している。
ＣＰＵ実行部１０４１はＣＰＵ９０１内でエンジンを実行する機能である。
また、ＦＰＧＡ実行部１０４２は、ＦＰＧＡ９０５内でエンジンを実行する機能である。
【００３４】
また、エンジン実行部１０４は、引き継ぎエンジンが選択される前は、実行データ処理を実行可能なエンジンに共通に設けられている共通プログラムコード（後述するエンジン実装コード１３２）を変換して実行エンジン向けの個別のプログラムコードを生成する。そして、エンジン実行部１０４は、生成した実行エンジン向けの個別のプログラムコードを用いて実行エンジンに実行データ処理を実行させる。
一方、引き継ぎエンジンが選択された場合は、エンジン実行部１０４は、共通プログラムコードを変換して引き継ぎエンジン向けの個別のプログラムコードを生成する。そして、エンジン実行部１０４は、生成した引き継ぎエンジン向けの個別のプログラムコードを用いて引き継ぎエンジンに実行データ処理を引き継がせる。
【００３５】
エンジン実行部１０４はエンジン実行管理部１０３とともに制御部に相当する。また、エンジン実行部１０４で行われる処理は制御処理に相当する。
【００３６】
通信処理部１０５は、エンジンによるデータ処理の結果を外部に送信する。
通信処理部１０５は、例えば、アクチュエータ又はデータ処理実行装置１００と同等のデータ処理実行装置にデータ処理の結果を送信する。
【００３７】
エンジン実行管理データ１２０には、実行データ処理リスト１２１と実行待ちデータ処理リスト１２２とが含まれる。
実行データ処理リスト１２１は、実行中のデータ処理が示されるリストである。
実行待ちデータ処理リスト１２２は、実行待ちのデータリストが示されるリストである。
実行データ処理リスト１２１と実行待ちデータ処理リスト１２２の詳細は後述する。
【００３８】
エンジンソフトウェア１３０には、ブロック関数リスト１３１とエンジン実装コード１３２とが含まれる。
エンジン実装コード１３２は、各エンジンを実装するためのコード（プログラム）である。エンジン実装コード１３２は、複数のコードブロック（以下、単にブロックともいう）で構成される。
ブロック関数リスト１３１には、エンジン実装コード１３２のブロックごとに、各ブロックの処理を実現する関数が示される。
ブロック関数リスト１３１及びエンジン実装コード１３２の詳細は後述する。
【００３９】
演算結果格納メモリ１４０は、エンジンによる演算結果を格納する。
演算結果格納メモリ１４０の詳細は後述する。
【００４０】
図４は、エンジンリスト１１０の例を示す。
エンジンリスト１１０では、データ処理ＩＤごとに、選択可能なエンジンのエンジンＩＤが示される。また、エンジンＩＤごとに、精度、実行ハードウェアリソース、各ステップの処理時間が示される。
精度は、０〜１００の数値で表現される。数値が大きいほど精度が高い。
実行ハードウェアリソースは、エンジンの実行に必要なハードウェアリソースである。
処理時間は、各ステップの実行に要する時間である。なお、「−」は該当するステップが存在しないことを意味する。ステップとは、データ処理を構成する部分データ処理である。なお、エンジンに応じてステップの実行数が変化する。例えば、データ処理３は、エンジン３Ａでは、２つのステップが実行されるが、エンジン３Ｂでは、３つのステップが実行される。
【００４１】
図５は、実行データ処理リスト１２１の例を示す。
実行データ処理リスト１２１では、実行データ処理が管理される。つまり、実行データ処理リスト１２１では、エンジンにより実行中のデータ処理が管理される。
【００４２】
図５において、ハードウェアリソースＩＤは、ハードウェアリソースの識別子である。
ハードウェアリソース種別は、ハードウェアリソースの種別である。なお、図５では、図２に対応させて、ＦＰＧＡ９０５とＣＰＵ９０１のみを示している。
データ処理ＩＤは、ハードウェアリソースで現在実行中のデータ処理の識別子である。データ処理ＩＤの値が０であれば、当該ハードウェアリソースではデータ処理が実行されていないことを意味する。
優先度は、現在実行中のデータ処理の優先度である。データ処理が実行されていない場合は、優先度の値は０である。
エンジンＩＤは、データ処理を実行しているエンジンの識別子である。データ処理が実行されていない場合は、エンジンＩＤの値は０である。
ステップ番号は、現在実行中のステップの識別子である。データ処理が実行されていない場合は、ステップ番号の値は０である。
ステップ開始時刻は、現在実行中のステップの実行を開始した時刻である。本実施の形態では、ステップ開始時刻はカウント値（例えば、１μ秒ごとにインクリメントされるカウント値）で示される。
デッドラインは、現在実行中のデータ処理の完了期限の時刻である。デッドラインもカウント値で示される。
切替えフラグは、現在実行中のデータ処理に対するエンジンの切替え要求がある場合にＴＲＵＥになる。切替えフラグがＴＲＵＥになると、現在実行中のステップの完了後にエンジンの切替え処理が行われる。
ステップ完了通知フラグは、ステップ完了通知が発行された場合にＴＲＵＥになる。ステップ完了通知はステップの実行が完了したことをエンジン実行管理部１０３に通知するメッセージである。ステップ完了通知フラグがＴＲＵＥになると、エンジンの切替え処理が行われる。
中断可否フラグは、ハードウェアリソースがステップの実行途中での中断を許容するか否かを示す。ハードウェアリソースがステップの実行途中での中断を許容する場合は中断可否フラグにＴＲＵＥが示される。ＦＰＧＡ９０５ではステップの実行途中での中断は許容されないが、ＣＰＵ９０１ではステップの実行途中での中断は許容される。ステップの実行途中での中断は、リアルタイムＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等のタスクのプリエンプト機能を利用して実現される。
【００４３】
図６は、実行待ちデータ処理リスト１２２の例を示す。
実行待ちデータ処理リスト１２２では、実行待ちのデータ処理が管理される。
【００４４】
図６において、ハードウェアリソースＩＤは、ハードウェアリソースの識別子である。
状態は、「ステップ完了待ち」と「実行可能状態」のいずれかをとる。「ステップ完了待ち」は、他のデータ処理（図６の例ではデータ処理ＩＤ２）のステップの実行完了を待っている状態である。他のデータ処理の完了後に違うエンジンに切り替える場合の状態は「ステップ完了待ち」である。「実行可能状態」は、優先度の高い他のデータ処理の実行完了を待っている状態である。
データ処理ＩＤは、実行待ちのデータ処理の識別子である。
優先度は、実行待ちのデータ処理の優先度である。
エンジンＩＤは、実行待ちのデータ処理を実行する予定のエンジンの識別子である。
ステップ番号は、実行待ちのデータ処理のステップの識別子である。つまり、ステップ番号は、実行待ちのステップの識別子である。
デッドラインは、実行待ちのステップの完了期限の時刻である。デッドラインもカウント値で示される。
ステップ残処理時間は、実行待ちのステップの残りの処理時間である。ステップの実行途中に実行が中断した場合に、実行待ちのステップの残りの処理時間を得るために用いられる。ステップ残処理時間もカウント値で示される。
切替えフラグは、実行待ちのデータ処理に対するエンジンの切替え要求がある場合にＴＲＵＥになる。切替えフラグがＴＲＵＥになると、実行待ちのステップの完了後にエンジンの切替え処理が行われる。
ステップ完了通知フラグは、ステップ完了通知が発行された場合にＴＲＵＥになる。ステップ完了通知フラグがＴＲＵＥになると、エンジンの切替え処理が行われる。
【００４５】
図７は、ブロック関数リスト１３１及びエンジン実装コード１３２の例を示す。
エンジン実装コード１３２は、エンジンを実装するためのコード（プログラム）である。エンジン実装コード１３２は複数のコードブロックで構成される。エンジン実装コード１３２は、同じデータ処理を実行する２以上のエンジン（例えば、エンジン１Ａ及びエンジン１Ｂ）に共通に設けられているプログラムコード（共通プログラムコード）である。エンジン実行管理部１０３は、エンジン実装コード１３２をエンジンごと（例えば、エンジン１Ａごと、エンジン１Ｂごと）の個別のプログラムコードに変換する。
ブロック関数リスト１３１は、エンジン実装コード１３２の各ブロックの処理を実現する関数のリストである。
ブロック関数リスト１３１において、エンジンＩＤは、エンジンの識別子である。
ブロック番号は、エンジン実装コード１３２に含まれるブロックの識別子である。
関数のアドレスは、ブロックに含まれる関数のアドレスである。
【００４６】
図８は、演算結果格納メモリ１４０の例を示す。
演算結果格納メモリ１４０では、データ処理ごとに演算結果を格納するための専用のメモリ領域が確保されている。
データ処理を実行するエンジンが途中で切り替わっても、切替え後のエンジンが該当するデータ処理のメモリ領域にアクセスすることで、切替え前のエンジンの演算結果を利用することができる。
【００４７】
＊＊＊動作の説明＊＊＊
以下にて、本実施の形態に係るデータ処理実行装置１００の動作例を説明する。
【００４８】
先ず、図９〜図１４を参照して、高優先度のデータ処理の発生により低優先度のデータ処理のエンジンを精度の低いエンジンに切り替える処理を説明する。
【００４９】
図９は、データ処理２とデータ処理３の実行スケジュールを示す。
データ処理２はエンジン２Ａで実行されるものとする。また、データ処理３はエンジン３Ａで実行されるものとする。
データ処理２及びデータ処理３は、それぞれのデッドラインまでに完了可能である。
なお、エンジン２Ａ、エンジン３Ａ及び後述のエンジン１Ａ及びエンジン２Ｂは、すべてＣＰＵ９０１により実現されるものとする。つまり、エンジン２Ａ、エンジン３Ａ、エンジン１Ａ及びエンジン２Ｂは並列には処理されない。
【００５０】
図１０は、データ処理２の実行中に突発イベントにより、新たなデータ処理である、高優先度のデータ処理１が発生したことを示す。データ処理１が発生した時点でデータ処理２は実行中であるため、データ処理２は実行データ処理に相当する。また、エンジン２Ａは、実行エンジンに相当する。データ処理３はエンジン３Ａを割り当てられているが未実行なので割当て済みデータ処理に相当する。
データ処理２は実行途中であるが、データ処理１を優先するためにデータ処理２の実行は中断する。データ処理１はエンジン１Ａで実行されるものとする。データ処理１の実行が完了するとデータ処理２の実行が再開する。ここで、データ処理１が実行されたため、データ処理２の残りをエンジン２Ａで実行すると、データ処理２のデッドライン内にデータ処理２が完了しない。また、データ処理３のデッドライン内にデータ処理３も完了しない。
このため、本実施の形態に係るデータ処理実行装置１００は、データ処理２及びデータ処理３の少なくともいずれかのエンジンを低精度のエンジンに切り替えて処理時間を短縮する。
【００５１】
図１１は、データ処理２のエンジンを低精度のエンジン２Ｂに切替え、データ処理３のエンジンを低精度のエンジン３Ｂに切替えた例を示す。エンジン２Ｂは、実行データ処理であるデータ処理２の実行をエンジン２Ａから引き継ぐエンジンであり、引き継ぎエンジンに相当する。
低精度のエンジンへ切替えたため処理時間の短縮が図られ、データ処理２及びデータ処理３はそれぞれデッドライン内に完了することになった。
【００５２】
図１２は、エンジンを実現するハードウェアとしてＣＰＵ９０１とＦＰＧＡ９０５が存在する例を示す。
以下では、エンジン１Ａとエンジン２ＡはＦＰＧＡ９０５で動作するものとする。また、エンジン２Ｂとエンジン２Ｃとエンジン３ＢはＣＰＵ９０１で動作するものとする。
【００５３】
図１２では、データ処理２がＦＰＧＡ９０５上でエンジン２Ａにより実行され、データ処理３がＣＰＵ９０１上でエンジン３Ｂにより実行されている。ここで、突発イベントにより新たにデータ処理１が発生したものとする。図１２の例では、データ処理２及びデータ処理３が、各々、実行データ処理に相当する。データ処理１が新たなデータ処理に相当する。また、エンジン２Ａ及びエンジン３Ｂは、各々、実行エンジンに相当する。
データ処理１及びデータ処理２のデッドラインはともに時刻５００である。また、データ処理３のデッドラインは時刻１０２５である。データ処理１をデッドラインまでに完了するためには、ＦＰＧＡ９０５で動作するエンジン１Ａでデータ処理１を実行することが必要である。このため、ＦＰＧＡ９０５上でデータ処理１とデータ処理２が競合する。データ処理１の方が優先度が高いので、ＦＰＧＡ９０５上でデータ処理２の実行を継続することはできない。ＦＰＧＡ９０５上でデータ処理１の実行が完了した後にＦＰＧＡ９０５でデータ処理２の実行を再開するとデータ処理２はデッドライン内に完了しない。
【００５４】
このため、データ処理実行装置１００は、データ処理１を実行してもデータ処理２とデータ処理３がデッドライン内に完了可能なエンジンの組合せを探索する。
例えば、図１３に示すように、データ処理実行装置１００は、データ処理２をエンジン２Ｃに実行させ、データ処理３をエンジン３Ｂに実行させるとデータ処理２とデータ処理３がデッドライン内に完了するものとする。本例では、エンジン２Ｃが引き継ぎエンジンに相当する。
この場合に、データ処理実行装置１００は、ＦＰＧＡ９０５でのデータ処理２の実行を停止させ、ＦＰＧＡ９０５でエンジン１Ａにデータ処理１を実行させる。ＣＰＵ９０１ではエンジン３Ｂがデータ処理３を実行しているが、データ処理２の方がデータ処理３よりも優先度が高い。このため、データ処理実行装置１００はＣＰＵ９０１でのデータ処理３の実行を停止させ、エンジン２Ｃにデータ処理２の実行を引き継がせる。そして、データ処理実行装置１００は、データ処理２の完了後にエンジン３Ｂにデータ処理３の残りを実行させる。
このようにスケジューリングすることで、図８に示すように、データ処理１、データ処理２及びデータ処理３をそれぞれのデッドライン内に完了させることができる。
【００５５】
図１４は、図１２及び図１３に示すスケジューリング手順をデータ処理実行装置１００の構成要素の動作と関連付けて示している。
【００５６】
時刻＝０においてデータ処理命令が発生し、データ処理２の実行が指示されると、エンジン選択部１０２は、データ処理２を実行させるエンジンを選択する。ここでは、エンジン選択部１０２は、エンジン２Ａを選択する。なお、エンジン選択部１０２のエンジン選択アルゴリズムの詳細は後述する。そして、エンジン選択部１０２は、エンジン実行管理部１０３にエンジン２Ａによるデータ処理２の実行を要求する（実行要求を出力する）。
エンジン２ＡはＦＰＧＡ９０５で動作するため、エンジン実行管理部１０３はＦＰＧＡ実行部１０４２にエンジン２Ａによるデータ処理２の実行を要求する（実行指令を出力する）。ＦＰＧＡ実行部１０４２は、ＦＰＧＡ９０５でエンジンを実行する機能である。
【００５７】
時刻＝２５においてデータ処理命令が発生し、データ処理３の実行が指示されると、エンジン選択部１０２は、データ処理３を実行させるエンジンを選択する。ここでは、エンジン選択部１０２は、エンジン３Ｂを選択する。そして、エンジン選択部１０２は、エンジン実行管理部１０３にエンジン３Ｂによるデータ処理３の実行を要求する（実行要求を出力する）。
エンジン３ＢはＣＰＵ９０１で動作するため、エンジン実行管理部１０３はＣＰＵ実行部１０４１にエンジン３Ｂによるデータ処理３の実行を要求する（実行指令を出力する）。ＣＰＵ実行部１０４１は、ＣＰＵ９０１でエンジンを実行する機能である。
【００５８】
時刻＝１５０においてデータ処理命令が発生し、データ処理１の実行が指示されると、エンジン選択部１０２は、データ処理１を実行させるエンジンを選択する。ここでは、エンジン選択部１０２は、エンジン１Ａを選択する。図１２及び図１３を用いて説明したように、データ処理１をＦＰＧＡ９０５で実行すると、データ処理２がデッドライン内に完了しない。
このため、エンジン選択部１０２は、データ処理１を実行してもデータ処理２とデータ処理３がデッドライン内に完了可能なエンジンの組合せを探索する。
データ処理２に対して選択可能なエンジンはエンジン２Ｂとエンジン２Ｃであり、データ処理３に対して選択可能なエンジンはエンジン３Ｂとエンジン３Ｃである。
【００５９】
先ず、エンジン選択部１０２は、エンジン２Ｂとエンジン３Ｂを用いた場合にデータ処理２とデータ処理３の両方がデッドライン内に完了するか否かを判定する。ここでは、データ処理２はデッドライン内に完了するがデータ処理３は完了しないものとする。
【００６０】
次に、エンジン選択部１０２は、エンジン２Ｂとエンジン３Ｃを用いた場合にデータ処理２とデータ処理３の両方がデッドライン内に完了するか否かを判定する。ここでは、データ処理２はデッドライン内に完了するがデータ処理３は完了しないものとする。
【００６１】
次に、エンジン選択部１０２は、エンジン２Ｃとエンジン３Ｂを用いた場合にデータ処理２とデータ処理３の両方がデッドライン内に完了するか否かを判定する。ここでは、データ処理２とデータ処理３の両方がデッドライン内に完了するものとする。
このため、エンジン選択部１０２は、データ処理２のエンジンをエンジン２Ｃに切替えることを決定する。
【００６２】
エンジン選択部１０２は、エンジン実行管理部１０３にエンジン１Ａによるデータ処理１の実行を要求する（実行要求を出力する）。更に、エンジン選択部１０２は、エンジン実行管理部１０３にデータ処理２のエンジンをエンジン２Ａからエンジン２Ｃに切替えるよう要求する（切替え要求を出力する）。
各データ処理は複数のステップで構成される。時刻＝１５０の時点では、ＦＰＧＡ９０５においてデータ処理２のステップ２を実行中である。ＦＰＧＡ９０５はステップが完了しないとデータ処理を停止させることができない。このため、エンジン１Ａによるデータ処理１の実行はデータ処理２のステップ２の完了を待つ必要がある。
ＦＰＧＡ実行部１０４２は、データ処理２のステップ２の実行が完了した際に、エンジン実行管理部１０３にステップ２の完了を通知する（ステップ完了通知を出力する）。
ステップ２が完了したので、エンジン実行管理部１０３は、ＦＰＧＡ実行部１０４２にエンジン１Ａによるデータ処理１の実行を要求する（実行指令を出力する）。
また、データ処理２をエンジン２Ｃで実行させるために、エンジン実行管理部１０３は、ＣＰＵ実行部１０４１にエンジン３Ｂの実行の中断を要求する（中断指令を出力する）。なお、ＣＰＵ９０１ではステップの完了を待たずにエンジンを停止させることができる。
更に、エンジン実行管理部１０３は、データ処理２をステップ３からエンジン２Ｃで実行するようＣＰＵ実行部１０４１に要求する（実行指令を出力する）。
【００６３】
その後、エンジン２Ｃでのデータ処理２が完了すると、ＣＰＵ実行部１０４１はデータ処理２の完了をエンジン実行管理部１０３に通知する（完了通知を出力する）。
エンジン実行管理部１０３は、データ処理２が完了したので、ＣＰＵ実行部１０４１にデータ処理３をエンジン３Ｂで再開するよう要求する（再開要求を出力する）。
【００６４】
エンジン１Ａでのデータ処理１が完了すると、ＦＰＧＡ実行部１０４２はデータ処理１の完了をエンジン実行管理部１０３に通知する（完了通知を出力する）。
【００６５】
エンジン３Ｂでのデータ処理３が完了すると、ＣＰＵ実行部１０４１はデータ処理３の完了をエンジン実行管理部１０３に通知する（完了通知を出力する）。
【００６６】
また、図１４の（１）〜（７）の各タイミングにおける実行データ処理リストの値と実行待ちデータ処理リストの値を、図２５〜図３１に示す。
なお、図２９の「Ｈ／ＷリソースＩＤ：２」の「ステップ開始時刻」には、疑似のステップ開始時刻が設定されている。つまり、現在時刻から残時間を算出できるように疑似のステップ開始時刻が設定されている（現在時刻（３５０）−ステップ１処理時間（２００）＋ステップ残処理時間（２５）＝１７５）。
【００６７】
次に、図１５〜図１７を参照して、エンジン選択部１０２によるエンジン選択処理の概要を説明する。
エンジン選択部１０２は、以下の選択基準にて、適切なエンジンの組合せを選択する。
１）新たなデータ処理と既存のデータ処理（実行データ処理及び割当て済みデータ処理）が全て、各々のデッドライン内に完了する。
２）高い優先度のデータ処理ほど高い演算精度のエンジンを割り当てる。
【００６８】
図１５は、データ処理１、データ処理２、データ処理４及びデータ処理５にエンジンが割り当てられている状態で、データ処理３が発生したことを示す。
図１５において、二重枠で囲まれているエンジンがデータ処理に割り当てられているエンジンである。すなわち、データ処理１にはエンジン１Ａが割り当てられている。データ処理２はエンジン２Ｂが割り当てられている。データ処理４はエンジン４Ｂが割り当てられている。データ処理５はエンジン５Ａが割り当てられている。
図１５の破線で囲んでいる部分は、後述する第１の組合せ抽出処理の範囲である。なお、データ処理４が発生した際にエンジン４Ａを用いてもデータ処理４がデッドライン内に完了しないことが判明しているので、エンジン４Ａは第１の組合せ抽出処理の範囲に含まれない。
【００６９】
データ処理３が発生すると、エンジン選択部１０２は、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するエンジンの組合せのうち、各々の精度が最も高くなるエンジンの組合せを選択する。
具体的には、エンジン選択部１０２は、エンジン３Ａ、エンジン４Ｂ及びエンジン５Ａの組合せでデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択する。
【００７０】
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、データ処理５のエンジンをエンジン５Ｂに切替えることで、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理５を実行するエンジンをエンジン５Ｂに切り替えることを決定する。
【００７１】
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、データ処理５のエンジンをエンジン５Ｃに切替えることで、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理５を実行するエンジンをエンジン５Ｃに切り替えることを決定する。
【００７２】
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン３Ｂ、エンジン４Ｂ及びエンジン５Ａの組合せでデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ｂを選択する。
【００７３】
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン３Ａの場合と同様の処理を行う。
【００７４】
エンジン３Ｂ、エンジン４Ｂ及びエンジン５Ｃの組合せでもデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン３Ｃ、エンジン４Ｂ及びエンジン５Ａの組合せでデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ｃを選択する。
【００７５】
データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン３Ａ及びエンジン３Ｂの場合と同様の処理を行う。
【００７６】
エンジン３Ｃ、エンジン４Ｂ及びエンジン５Ｃの組合せでもデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、第２の組合せ抽出処理を行う。
【００７７】
図１６は、エンジン選択部１０２による第２の組合せ抽出処理（１回目）の範囲を示す。
【００７８】
エンジン３Ｃ、エンジン４Ｂ及びエンジン５Ｃの組合せでもデータ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、データ処理２のエンジンをエンジン２Ｃに切替えた場合にデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
つまり、エンジン選択部１０２は、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ及びエンジン５Ａの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理２を実行するエンジンをエンジン２Ｃに切替え、データ処理４を実行するエンジンをエンジン４Ａに切り替えることを決定する。
【００７９】
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｂの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理２を実行するエンジンをエンジン２Ｃに切替え、データ処理４を実行するエンジンをエンジン４Ａに切替え、データ処理５を実行するエンジンをエンジン５Ｂに切り替えることを決定する。
【００８０】
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｃの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理２を実行するエンジンをエンジン２Ｃに切替え、データ処理４を実行するエンジンをエンジン４Ａに切替え、データ処理５を実行するエンジンをエンジン５Ｃに切り替えることを決定する。
【００８１】
データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ａの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
以降、エンジン選択部１０２は、順次、以下の組合せを検討する。
エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｂ
エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｃ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ａ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｂ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｃ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ａ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｂ
エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｃ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ａ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｂ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｃ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ａ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｂ
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃ
【００８２】
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、第２の組合せ抽出処理の範囲をデータ処理１のエンジンにまで拡大する。
【００８３】
図１７は、エンジン選択部１０２による第２の組合せ抽出処理（２回目）の範囲を示す。
【００８４】
エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃの組合せでデータ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、データ処理１のエンジンをエンジン１Ｂに切替えた場合にデータ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
つまり、エンジン選択部１０２は、エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ａ及びエンジン５Ａの組合せでデータ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理１を実行するエンジンをエンジン１Ｂに切替え、データ処理４を実行するエンジンをエンジン４Ａに切り替えることを決定する。
【００８５】
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ａ及びエンジン５Ｂの組合せでデータ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理１を実行するエンジンをエンジン１Ｂに切替え、データ処理４を実行するエンジンをエンジン４Ａに切替え、データ処理５を実行するエンジンをエンジン５Ｂに切り替えることを決定する。
【００８６】
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｃの組合せでデータ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了する場合は、エンジン選択部１０２は、データ処理３を実行するエンジンとしてエンジン３Ａを選択し、データ処理１を実行するエンジンをエンジン１Ｂに切替え、データ処理４を実行するエンジンをエンジン４Ａに切替え、データ処理５を実行するエンジンをエンジン５Ｃに切り替えることを決定する。
【００８７】
データ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了しない場合は、エンジン選択部１０２は、エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ａの組合せでデータ処理１、データ処理２、データ処理３、データ処理４及びデータ処理５の各々がデッドライン内に完了するか否かを判定する。
以降、エンジン選択部１０２は、順次、以下の組合せを検討する。
エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ａ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｂ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ａ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｂ、エンジン４Ｂ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ａ、エンジン５Ｃ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ａ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｂ
エンジン１Ｂ、エンジン２Ｃ、エンジン３Ｃ、エンジン４Ｂ、エンジン５Ｃ
【００８８】
以上の手順を経ても適切なエンジンの組合せが得られない場合は、エンジン選択部１０２は既定のエラー処理を行う。
【００８９】
次に、図１８〜図２０を用いて、エンジン選択部１０２の動作例を説明する。
図１８は、エンジン選択部１０２の全体の動作フローを示す。
図１９は、図１８に示す「第１の組合せ抽出処理」（ステップＳ１１）の詳細を示す。
図２０は、図１８に示す「第２の組合せ抽出処理」（ステップＳ１４）の詳細を示す。
【００９０】
新たなデータ処理（例えば、図１５に示すデータ処理３）が発生した際に、図１８の動作フローが開始する。
【００９１】
ステップＳ１１において、エンジン選択部１０２は、第１の組合せ抽出処理を行う。
第１の組合せ処理の詳細は、図１９を参照して後述する。
【００９２】
次に、ステップＳ１２において、エンジン選択部１０２は第１の組合せ抽出処理により組合せが抽出できたか否かを判定する。
組合せが抽出できた場合（ステップＳ１２でＹＥＳ）は、処理がステップＳ１７に進む。
【００９３】
一方、組合せが抽出できていない場合（ステップＳ１２でＮＯ）は、エンジン選択部１０２は、新たなデータ処理の優先度が最も高いか否かを判定する（ステップＳ１３）。つまり、エンジン選択部１０２は、新たなデータ処理の優先度が既にエンジンを割り当てられているデータ処理の優先度よりも高いか否かを判定する。
【００９４】
新たなデータ処理の優先度が最も高い場合（ステップＳ１３でＹＥＳ）は、第２の組合せ抽出処理ができないので、処理がステップＳ１６に進む。
【００９５】
一方、新たなデータ処理の優先度が最も高い優先度ではない場合（ステップＳ１３でＮＯ）は、処理がステップＳ１４に進む。
【００９６】
ステップＳ１４では、エンジン選択部１０２は第２の組合せ抽出処理を行う。
第２の組合せ処理の詳細は、図２０を参照して後述する。
【００９７】
次に、ステップＳ１５において、エンジン選択部１０２は第２の組合せ抽出処理により組合せが抽出できたか否かを判定する。
組合せが抽出できた場合（ステップＳ１５でＹＥＳ）は、処理がステップＳ１７に進む。
一方、組合せを抽出できなかった場合（ステップＳ１５でＮＯ）は、処理がステップＳ１６に進む。
【００９８】
ステップＳ１６では、エンジン選択部１０２は、既定のエラー処理を行う。
例えば、エンジン選択部１０２は、エラー処理として、エラーを報知して、データ処理実行装置１００を安全に停止させる。
【００９９】
ステップＳ１７では、エンジン選択部１０２は、実行要求を出力する。
図１４に示すように、エンジン選択部１０２は、状況によって実行要求のみを出力することもあるし、実行要求と切替え要求とを出力することもある。
【０１００】
次に、図１９を参照して、第１の組合せ抽出処理の詳細を説明する。
【０１０１】
ステップＳ１１０１において、エンジン選択部１０２は、新たなデータ処理に対応するエンジンの中で最も精度が高いエンジンを選択する。
エンジン選択部１０２は、エンジンリスト１１０を参照して、新たなデータ処理に対応する最も精度の高いエンジンを選択する。
なお、ステップＳ１１０１で選択されたエンジンを選択エンジンという。
【０１０２】
次に、ステップＳ１１０２において、エンジン選択部１０２は、選択エンジンを用いて新たなデータ処理を実行した場合に、新たなデータ処理が新たなデータ処理のデッドライン内に完了するか否かを判定する。
【０１０３】
新たなデータ処理が新たなデータ処理のデッドライン内に完了する場合（ステップＳ１１０２でＹＥＳ）は、処理がステップＳ１１０３に進む。
一方、新たなデータ処理が新たなデータ処理のデッドライン内に完了しない場合（ステップＳ１１０２でＮＯ）は、処理がステップＳ１１０７に進む。
【０１０４】
ステップＳ１１０３では、エンジン選択部１０２は、選択エンジンを組合せ抽出結果として、予め定められた記憶領域に記録する。
【０１０５】
ステップＳ１１０４では、エンジン選択部１０２は、既にエンジンが割り当てられているデータ処理の中で新たなデータ処理よりも優先度の低いデータ処理があるか否かを判定する。
【０１０６】
新たなデータ処理より優先度の低いデータ処理があれば（ステップＳ１１０４でＹＥＳ）、エンジン選択部１０２は、ステップＳ１１０６において、次に優先度が低いデータ処理のエンジンを選択エンジンに指定する。
そして、エンジン選択部１０２は、次に優先度が低いデータ処理についてステップＳ１１０２以降の処理を行う。
【０１０７】
一方、新たなデータ処理より優先度の低いデータ処理がない場合（ステップＳ１１０４でＮＯ）は、ステップＳ１１０５において、エンジン選択部１０２は、適切なエンジンの組合せがあると判定する。
この結果、エンジン選択部１０２は、図１８のステップＳ１７において、ステップＳ１１０３で記録した抽出結果に基づき、実行要求（及び切替え要求）を出力する。
【０１０８】
新たなデータ処理が新たなデータ処理のデッドライン内に完了しない場合（ステップＳ１１０２でＮＯ）は、エンジン選択部１０２は、ステップＳ１１０７において、新たなデータ処理に選択エンジンの次に精度が低いエンジンが存在するか否かを判定する。
【０１０９】
次に精度が低いエンジンが存在する場合（ステップＳ１１０７でＹＥＳ）は、エンジン選択部１０２は、ステップＳ１１０８において、次に精度が低いエンジンを新たな選択エンジンに指定する。
その後、エンジン選択部１０２は、新たな選択エンジンを用いてステップＳ１１０２以降の処理を行う。
【０１１０】
次に精度が低いエンジンが存在しない場合（ステップＳ１１０７でＮＯ）は、エンジン選択部１０２は、ステップＳ１１０９において、現在の選択エンジンが新たなデータ処理のエンジンであるか否かを判定する。
【０１１１】
現在の選択エンジンが新たなデータ処理のエンジンであれば（ステップＳ１１０９でＹＥＳ）、エンジン選択部１０２は、ステップＳ１１１０において、適切なエンジンの組み合わせがないと判定する。
【０１１２】
一方、現在の選択エンジンが新たなデータ処理のエンジンでなければ（ステップＳ１１０９でＮＯ）、エンジン選択部１０２は、ステップＳ１１１１において、次に優先度の高いデータ処理の組合せ抽出結果として記録したエンジンを選択エンジンに指定し、ステップＳ１１０７以降の処理を行う。ステップＳ１１０７以降の処理では、エンジン選択部１０２は、次に優先度の高いデータ処理の選択エンジンの精度を下げた状態での、次に優先度の高いデータ処理以下のデータ処理がデッドライン内に完了可能とするエンジンの組合せの抽出を試みる。以上、エンジン選択部１０２は、前記説明したステップをＳＳ１１０９でＹＥＳとなるまで繰り返すことで、高い優先度のデータ処理ほど高い演算精度のエンジンを割り当てつつ、図１５で記した組合せ抽出処理の範囲においてデッドライン内に完了するエンジンの組合せを抽出する。
【０１１３】
次に、図２０を参照して、第２の組合せ抽出処理の詳細を説明する。
【０１１４】
ステップＳ１３０１において、エンジン選択部１０２は、新たなデータ処理の次に優先度が高いデータ処理で実行中のエンジンを選択エンジンに指定する。
【０１１５】
次に、ステップＳ１３０２において、エンジン選択部１０２は、選択エンジンの次に精度が低いエンジンが存在するか否かを判定する。
選択エンジンの次に精度が低いエンジンが存在するのであれば、処理がステップＳ１３０６に進み、選択エンジンの次に精度が低いエンジンが存在しないのであれば、処理がステップＳ１３０３に進む。
【０１１６】
ステップＳ１３０３では、エンジン選択部１０２は、新たなデータ処理の優先度が最も高いか否かを判定する。
新たなデータ処理の優先度が最も高い場合は、処理がステップＳ１３０４に進む。
一方、新たなデータ処理の優先度が最も高い優先度ではない場合は、処理がステップＳ１３０５に進む。
【０１１７】
ステップＳ１３０４では、エンジン選択部１０２は、適切なエンジンの組み合わせがないと判定する。
【０１１８】
ステップＳ１３０５では、エンジン選択部１０２は、次に優先度の高いデータ処理の組合せ抽出結果として記録したエンジンを選択エンジンに指定し、ステップＳ１３０２以降の処理を行う。ステップＳ１３０２以降の処理では、エンジン選択部１０２は、次に優先度の高いデータ処理の選択エンジンの精度を下げた状態での、次に優先度の高いデータ処理以下のデータ処理がデッドライン内に完了可能とするエンジンの組合せの抽出を試みる。
なお、抽出結果の記録がない場合は、エンジン選択部１０２は、現在の選択エンジンを再度、選択エンジンとして指定する。
【０１１９】
ステップＳ１３０６では、エンジン選択部１０２は、次に精度が低いエンジンを新たな選択エンジンに指定する。
その後、エンジン選択部１０２は、新たな選択エンジンを用いてステップＳ１３０７以降の処理を行う。
【０１２０】
ステップＳ１３０７では、エンジン選択部１０２は、現在の選択エンジンで、新たなデータ処理がそのデッドライン内に完了可能か否かを判定する。
新たなデータ処理がそのデッドライン内に完了する場合は、処理がステップＳ１３０８に進む。一方、新たなデータ処理がそのデッドライン内に完了しない場合は、処理がステップＳ１３０２に進む。
【０１２１】
ステップＳ１３０８では、エンジン選択部１０２は、選択エンジンを組合せ抽出結果として、予め定められた記憶領域に記録する。
【０１２２】
次に、ステップＳ１３０９において、エンジン選択部１０２は、新たなデータ処理よりも優先度が低いデータ処理があるか否かを判定する。
新たなデータ処理よりも優先度が低いデータ処理があれば、処理がステップＳ１３１０に進む。一方。新たなデータ処理よりも優先度が低いデータ処理がない場合は、処理がステップＳ１３１１に進む。
【０１２３】
ステップＳ１３１０では、エンジン選択部１０２は、次に優先度が低いデータ処理の最も精度の高いエンジンを選択エンジンに指定する。その後、エンジン選択部１０２は、次に優先度が低いデータ処理と新たな選択エンジンについてステップＳ１３０７以降の処理を行う。
【０１２４】
ステップＳ１３１１では、エンジン選択部１０２は、適切なエンジンの組合せがあると判定する。
【０１２５】
次に、図２１〜図２３を参照して、本実施の形態に係るエンジン実行管理部１０３の動作例を説明する。
【０１２６】
ステップＳ２１において、エンジン実行管理部１０３は、実行要求、切替え要求、ステップ完了通知及び実行完了通知のうちのいずれかの受信を待つ。
【０１２７】
エンジン実行管理部１０３は、実行要求、切替え要求、ステップ完了通知及び実行完了通知のうちのいずれかを受信した場合に、実行要求、切替え要求、ステップ完了通知及び実行完了通知のいずれを受信したかを判定する。
実行要求を受信した場合は、処理がステップＳ２３に進む。ステップ完了通知を受信した場合は、処理が図２２のステップＳ３３に進む。実行完了通知を受信した場合は、処理が図２２のステップＳ３７に進む。切替え要求を受信した場合は、処理が図２３のステップＳ４１に進む。
【０１２８】
ステップＳ２３では、エンジン実行管理部１０３は、実行要求で実行が要求されたエンジンを実現するハードウェアリソースが現在動作中か否かを判定する。
ハードウェアリソースが現在動作中であれば、処理がステップＳ２６に進む。一方、ハードウェアリソースが現在動作中でなければ、処理がステップＳ２４に進む。
【０１２９】
ステップＳ２４では、エンジン実行管理部１０３は、実行要求を実行データ処理リスト１２１に登録する。
【０１３０】
次に、ステップＳ２５において、エンジン実行管理部１０３は、エンジン実行部１０４に実行指令を出力する。
【０１３１】
ステップＳ２６では、実行要求に記載されているデータ処理の優先度が、ステップＳ２３で動作中と判定されたハードウェアリソースで実行中のデータ処理の優先度よりも高いか否かを判定する。
実行要求に記載されているデータ処理の優先度の方が高ければ、処理がステップＳ２７に進む。一方、実行要求に記載されているデータ処理の優先度の方が低ければ、処理がステップＳ３２に進む。
【０１３２】
ステップＳ２７では、エンジン実行管理部１０３は、実行データ処理リスト１２１の該当するハードウェアリソースの中断可否フラグがＴＲＵＥであるか否かを判定する。
中断可否フラグがＴＲＵＥである場合は、処理がステップＳ２８に進む。
一方、中断可否フラグがＦＡＬＳＥである場合は、処理がステップＳ３０に進む。
【０１３３】
ステップＳ２８では、エンジン実行管理部１０３は、エンジン実行部１０４に中断指令を出力する。
【０１３４】
次に、ステップＳ２９において、エンジン実行管理部１０３は、中断したデータ処理、つまり、ステップＳ２８の中断指令の対象のデータ処理を実行待ちデータ処理リスト１２２に登録する。
【０１３５】
ステップＳ３０では、エンジン実行管理部１０３は、実行データ処理リスト１２１の該当するハードウェアリソースのステップ完了通知フラグをＴＲＵＥにする。
【０１３６】
次に、ステップＳ３１で、エンジン実行管理部１０３は、実行要求に記載のデータ処理を、ステップ完了待ちで実行待ちデータ処理リスト１２２に登録する。
【０１３７】
ステップＳ３２では、エンジン実行管理部１０３は、実行要求に記載のデータ処理を、実行可能状態で実行待ちデータ処理リスト１２２に登録する。
【０１３８】
図２１のステップＳ２２の判定の結果、ステップ完了通知を受信したと判明した場合は、エンジン実行管理部１０３は、図２２のステップＳ３３において、ステップが完了したデータ処理について、実行データ処理リスト１２１のステップ完了通知フラグをＦＡＬＳＥにする。
【０１３９】
次に、ステップＳ３４において、エンジン実行管理部１０３は、ステップが完了したデータ処理について実行待ちデータ処理リスト１２２でステップ完了待ち状態のデータ処理を実行可能状態にする。
【０１４０】
次に、ステップのＳ３５において、エンジン実行管理部１０３は、ステップが完了したデータ処理についての実行データ処理リスト１２１の切替えフラグがＴＲＵＥであるか否かを判定する。
切替えフラグがＴＲＵＥである場合は、処理がステップＳ３７に進む。
切替えフラグがＦＡＬＳＥである場合は、処理がステップＳ３６に進む。
【０１４１】
ステップＳ３６では、エンジン実行管理部１０３は、ステップが完了したデータ処理を実行待ちデータ処理リスト１２２に追加する。
【０１４２】
ステップＳ３７では、エンジン実行管理部１０３は、実行待ちデータ処理リスト１２２に実行可能状態のデータ処理があるか否かを判定する。
実行可能状態のデータ処理がある場合は、処理がステップＳ３８に進む。一方、実行可能状態のデータ処理がない場合は、処理がステップＳ３９に進む。
【０１４３】
ステップＳ３８では、エンジン実行管理部１０３は、実行待ちデータ処理リスト１２２の中で最も優先度が高いデータ処理を実行データ処理リスト１２１に登録し、また、当該データ処理を実行待ちデータ処理リスト１２２から削除する。
その後、処理は図２１のステップＳ２５に進む。
【０１４４】
ステップＳ３９では、エンジン実行管理部１０３は、実行データ処理リスト１２１を未動作に設定する。未動作とは当該ハードウェアリソースではデータ処理が実行されていないことを意味する。具体的には、エンジン実行管理部１０３は、段落００４２で定義した通り実行データ処理リスト１２１のデータ処理ＩＤ等を０とする処理を行う。
その後、処理は図２１のステップＳ２１に進む。
【０１４５】
図２１のステップＳ２２の判定の結果、切替え要求を受信したと判明した場合は、エンジン実行管理部１０３は、図２３のステップＳ４１において、切替え要求の対象のデータ処理は実行中であるか否かを判定する。
切替え要求の対象のデータ処理が実行中であれば、処理がステップＳ４２に進む。
一方、切替え要求の対象のデータ処理が実行中でなければ、処理がステップＳ４４に進む。
【０１４６】
ステップＳ４２では、エンジン実行管理部１０３は、実行データ処理リスト１２１において、対象のデータ処理の切替えフラグ及びステップ完了通知フラグをＴＲＵＥにする。
【０１４７】
次に、ステップＳ４３で、エンジン実行管理部１０３は、実行待ちデータ処理リスト１２２において切替え要求に記載されているエンジンを該当するハードウェアリストの行に登録する。
その後、処理は図２１のステップＳ２１に進む。
【０１４８】
ステップＳ４４では、エンジン実行管理部１０３は、切替え要求の対象のデータ処理がステップ実行の途中で中断している状態であるか否かを判定する。
切替え要求の対象のデータ処理がステップ実行の途中で中断している状態である場合は、処理がステップＳ４６に進む。
一方、切替え要求の対象のデータ処理がステップ実行の途中で中断している状態ではない場合は、処理がステップＳ４５に進む。
ステップＳ４６では、エンジン実行管理部１０３は、実行データ処理リスト１２２において、ステップ実行の途中で中断しているデータ処理の切替えフラグ及びステップ完了通知フラグをＴＲＵＥにする。
【０１４９】
ステップＳ４５では、エンジン実行管理部１０３は、実行待ちデータ処理リスト１２２において、切替え要求の対象のデータ処理のエンジンを削除し、切替え要求に記載されているエンジンを登録する。
その後、処理は図２１のステップＳ２１に進む。
【０１５０】
次に、図２４を参照して、エンジン実行部１０４の動作例を説明する。
【０１５１】
ステップＳ５１において、エンジン実行部１０４は、実行対象のステップを実行する。
【０１５２】
次に、ステップＳ５１で実行していたステップが完了したら、エンジン実行部１０４は、ステップＳ５２において、当該ステップがデータ処理内の最終ステップか否かを判定する。
当該ステップが最終ステップであれば、処理がステップＳ５３に進む。
当該ステップが最終ステップでなければ、処理がステップＳ５４に進む。
【０１５３】
ステップＳ５３では、エンジン実行部１０４は、エンジン実行管理部１０３に実行完了通知を出力する。
【０１５４】
ステップＳ５４では、エンジン実行部１０４は、実行データ処理リスト１２１において対象のデータ処理のステップ完了通知フラグがＴＲＵＥであるか否かを判定する。
ステップ完了通知フラグがＴＲＵＥである場合は、処理がステップＳ５５に進む。
一方、ステップ完了通知フラグがＦＡＬＳＥである場合は、処理がステップＳ５６に進む。
【０１５５】
ステップＳ５５では、エンジン実行部１０４は、エンジン実行管理部１０３にステップ完了通知を出力する。
【０１５６】
ステップＳ５６では、エンジン実行部１０４は、実行対象のステップを１つ進め、実行データ処理リスト１２１のステップ番号を更新する。
その後、処理はステップＳ５１に進む。
【０１５７】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態によれば、突発イベントにより新たなデータ処理が発生しても、新たなデータ処理及び既存のデータ処理のそれぞれをデッドライン内に完了することができる。このため、本実施の形態によれば、データ処理のスケジューリングを状況の変化に応じて柔軟に行うことができる。
【０１５８】
実施の形態２．
本実施の形態では、主に実施の形態１との差異を説明する。
なお、以下で説明していない事項は、実施の形態１と同様である。
【０１５９】
図３２は、本実施の形態に係るデータ処理実行装置１００の機能構成例を示す。
図２と比較して、図３２では、変換処理部１０６、変換処理時間リスト１５０及びエンジンインタフェースリスト１６０が追加されている。エンジンインタフェースリスト１６０は、エンジンＩ／Ｆリスト１６０とも表記する。
他の要素は、図２に示したものと同じである。
【０１６０】
変換処理部１０６は、データ処理登録部１０１等と同様にプログラムにより実現される。変換処理部１０６の機能を実現するプログラムは、データ処理登録部１０１等と同様に処理装置９００により実行される。
【０１６１】
変換処理部１０６は、エンジン間でインタフェース仕様が異なる場合に、インタフェース仕様の違いを吸収する変換処理を行う。より具体的には、実行エンジン（例えば、エンジン５Ａ）と引き継ぎエンジン（例えば、エンジン５Ｂ）との間でインタフェース仕様が異なる場合に、変換処理部１０６は、インタフェース仕様の違いを吸収する変換処理を行う。
【０１６２】
図３３は、変換処理部１０６による変換処理のタイミングを示す。
また、図３４は、変換処理部１０６による変換処理の例を示す。
【０１６３】
図３３では、エンジン５Ａ、エンジン５Ｂ及びエンジン５Ｃがデータ処理５に含まれるステップを実行する例を示している。エンジン５Ａがデータ処理５を実行する場合は、ステップ１〜４が実行される。エンジン５Ｂがデータ処理５を実行する場合も、ステップ１〜４が実行される。エンジン５Ｃがデータ処理５を実行する場合は、ステップ１及びステップ２が実行される。
また、図３４に示すように、エンジン５Ａ、エンジン５Ｂ及びエンジン５Ｃでは、演算に用いる変数値の数、変数の型が異なる。このようなエンジンごとの変数値の数及び変数の型は、エンジンインタフェースリスト１６０に定義されている。
データ処理５の全てのステップが同一のエンジンで実行される場合は、変換処理部１０６による変換処理は必要ない。しかし、ステップ１がエンジン５Ａで実行され、ステップ２がエンジン５Ｂで実行されるというような、前後のステップが異なるエンジンで実行される場合は変換処理部１０６による変換処理が必要である。つまり、変換処理部１０６が、先行するステップでの演算結果を後続のステップを実行するエンジンで用いる変数値の数及び変数の型に変換する必要がある。
【０１６４】
例えば、先行するステップがエンジン５Ａで実行され、後続するステップがエンジン５Ｂで実行される場合を想定する。
この場合は、エンジン５Ａの演算結果として、図３４に示すように、演算結果格納メモリ１４０に、浮動小数点型のｖａｌ１の４つの値が格納され、浮動小数点型のｖａｌ２の４つの値が格納される。
エンジンインタフェースリスト１６０に示すように、エンジン５Ｂが用いるｖａｌ１の値は４つであり、ｖａｌ２の値は３つであり、変数の型は３２ビット固定小数点である。
エンジン実行管理部１０３は、エンジン５Ｂが実行するステップの実装関数（エンジンＢ向けの固有のプログラムコード）を呼び出す前に、変換処理部１０６を呼び出す。変換処理部１０６は、演算結果格納メモリ１４０に格納されているエンジン５Ａの演算結果をエンジン５Ｂのインタフェース仕様に合致するように変換する。
具体的には、変換処理部１０６は、図３４に示すように、ｖａｌ１とｖａｌ２の型を３２ビット固定小数点に変換し、また、ｖａｌ２の値を１つ減らす。この結果、エンジン５Ｂは、演算結果格納メモリ１４０に格納されている演算結果を用いることができる。
【０１６５】
また、上記のように、インタフェース仕様が異なるエンジン間での切替えが生じる場合は変換処理部１０６による変換処理が生じるので、エンジン選択部１０２は、変換処理部１０６による変換処理に要する時間を含めて、実行データ処理がデッドライン内に完了可能かを判定する必要がある。
つまり、本実施の形態では、エンジン選択部１０２は、変換処理に要する時間を含めて実行データ処理、新たなデータ処理及び割当て済みデータ処理を各々のデッドラインまでに完了させることができるエンジンを、引き継ぎエンジンとして選択する。
【０１６６】
変換処理部１０６の変換処理に要する時間は、変換処理時間リスト１５０に記載される。
図３５は、変換処理時間リスト１５０の例を示す。各数値は、変換処理に要する時間を示す。また、各数値は、図５のステップ開始時刻と同様にカウント値で表される。
図３５の例では、エンジン５Ａからエンジン５Ｂへの切替えの場合は、変換処理部１０６の変換処理に要する時間は３である。
変換処理部１０６は、変換処理時間リスト１５０を参照することで、変換処理部１０６の変換処理に要する時間を得る。
【０１６７】
このように、本実施の形態では、変換処理に要する時間も含めて新たなデータ処理及び既存のデータ処理のそれぞれがデッドライン内に完了するか否かを判定する。このため、本実施の形態によれば、切替え前のエンジンと切替え後のエンジンのインタフェース仕様が異なっていても、新たなデータ処理及び既存のデータ処理のそれぞれをデッドライン内に完了することができる
【０１６８】
以上、本発明の実施の形態について説明したが、これら２つの実施の形態を組み合わせて実施しても構わない。
あるいは、これら２つの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これら２つの実施の形態を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１６９】
１００  データ処理実行装置、１０１  データ処理登録部、１０２  エンジン選択部、１０３  エンジン実行管理部、１０４  エンジン実行部、１０５  通信処理部、１０６  変換処理部、１１０  エンジンリスト、１２０  エンジン実行管理データ、１２１  実行データ処理リスト、１２２  実行待ちデータ処理リスト、１３０  エンジンソフトウェア、１３１  ブロック関数リスト、１３２  エンジン実装コード、１４０  演算結果格納メモリ、１５０  変換処理時間リスト、１６０  エンジンインタフェースリスト、９００  処理回路、９０１  ＣＰＵ、９０２  ＲＡＭ、９０３  ＲＯＭ、９０４  ハードウェアアクセラレータ、９０５  ＦＰＧＡ、９０６  ＧＰＵ、９０７  ＤＳＰ、９０８  ＡＳＩＣ、１０４１  ＣＰＵ実行部、１０４２  ＦＰＧＡ実行部。
【要約】
複数のエンジンは、各々がデータ処理を実行する。エンジン選択部（１０２）は、複数のエンジンのうちのいずれかのエンジンが実行エンジンとしてデータ処理を実行している際に、実行エンジンが実行しているデータ処理である実行データ処理の実行を引き継ぐ引き継ぎエンジンを、複数のエンジンから選択する。エンジン実行管理部（１０３）は、実行エンジンに実行データ処理の実行を停止させ、引き継ぎエンジンに実行データ処理の実行を引き継がせる。【図１】
0006815563.tif 000002
【図２】
0006815563.tif 000003
【図３】
0006815563.tif 000004
【図４】
0006815563.tif 000005
【図５】
0006815563.tif 000006
【図６】
0006815563.tif 000007
【図７】
0006815563.tif 000008
【図８】
0006815563.tif 000009
【図９】
0006815563.tif 000010
【図１０】
0006815563.tif 000011
【図１１】
0006815563.tif 000012
【図１２】
0006815563.tif 000013
【図１３】
0006815563.tif 000014
【図１４】
0006815563.tif 000015
【図１５】
0006815563.tif 000016
【図１６】
0006815563.tif 000017
【図１７】
0006815563.tif 000018
【図１８】
0006815563.tif 000019
【図１９】
0006815563.tif 000020
【図２０】
0006815563.tif 000021
【図２１】
0006815563.tif 000022
【図２２】
0006815563.tif 000023
【図２３】
0006815563.tif 000024
【図２４】
0006815563.tif 000025
【図２５】
0006815563.tif 000026
【図２６】
0006815563.tif 000027
【図２７】
0006815563.tif 000028
【図２８】
0006815563.tif 000029
【図２９】
0006815563.tif 000030
【図３０】
0006815563.tif 000031
【図３１】
0006815563.tif 000032
【図３２】
0006815563.tif 000033
【図３３】
0006815563.tif 000034
【図３４】
0006815563.tif 000035
【図３５】
0006815563.tif 000036