(57)【特許請求の範囲】
【請求項１】
プログラムを、前記プログラムの一部の処理が２つ以上のブロック候補に併存することを許容して、複数のブロック候補に分割する第１の分割部と、
前記プログラムの一部の処理が前記複数のブロック候補のうちの２つ以上のブロック候補に併存するか否かを判定するブロック候補判定部と、
前記プログラムの一部の処理が２つ以上のブロック候補に併存する場合に、２つ以上のブロック候補に併存する前記プログラムの一部の処理である併存処理を前記２つ以上のブロック候補と同数の２つ以上の計算機に並列に実行させる並列実行方式により前記プログラムを実行する場合の実行時間と、前記併存処理を前記２つ以上の計算機のうちの１つの計算機に実行させて前記１つの計算機の実行結果を前記２つ以上の計算機のうちの他の計
算機に共有させる共有実行方式により前記プログラムを実行する場合の実行時間とを比較し、前記並列実行方式と前記共有実行方式とのうち、実行時間がより短い方式を選択する方式選択部と、
前記複数のブロック候補と前記方式選択部により選択された方式とに基づき、前記プログラムを複数のブロックに分割する第２の分割部とを有する情報処理装置。
【請求項２】
前記第２の分割部は、
前記方式選択部により前記並列実行方式が選択された場合は、前記複数のブロック候補に基づき、前記併存処理が前記２つ以上の計算機で並列に実行されるように前記プログラムを複数のブロックに分割し、
前記方式選択部により前記共有実行方式が選択された場合は、前記複数のブロック候補に基づき、前記併存処理が前記１つの計算機のみで実行されるように前記プログラムを複数のブロックに分割する請求項１に記載の情報処理装置。
【請求項３】
前記ブロック候補判定部は、
条件により実行時間が変動する処理である負荷変動処理が前記プログラムに含まれているか否かを判定し、
前記方式選択部は、
前記プログラムに前記負荷変動処理が含まれている場合に、前記負荷変動処理を複数の計算機のうちの１つの計算機に実行させる単独実行方式と、前記負荷変動処理を前記複数の計算機に分担して実行させる分担実行方式とのうちのいずれかを選択する請求項１に記載の情報処理装置。
【請求項４】
前記方式選択部は、
条件ごとに、前記単独実行方式により前記プログラムを実行する場合の実行時間と、前記分担実行方式により前記プログラムを実行する場合の実行時間とを比較し、
条件ごとに、前記単独実行方式と前記分担実行方式とのうち、実行時間がより短い方式を選択する請求項３に記載の情報処理装置。
【請求項５】
前記第２の分割部は、
前記方式選択部により全ての条件で前記単独実行方式が選択された場合は、前記複数のブロック候補に基づき、前記負荷変動処理が前記１つの計算機のみで実行されるように前記プログラムを複数のブロックに分割し、
前記方式選択部によりいずれかの条件で前記分担実行方式が選択された場合は、前記複数のブロック候補に基づき、前記負荷変動処理が前記複数の計算機で分担して実行されるように前記プログラムを複数のブロックに分割し、前記負荷変動処理が前記複数の計算機で分担して実行されるための条件が実行条件として定義される実行条件情報を生成する請求項４に記載の情報処理装置。
【請求項６】
前記第１の分割部は、
前記プログラムを前記複数のブロック候補に分割するパターンが複数存在する場合に、複数のパターンのうち、前記プログラムの実行時間が最も短いパターンを選択し、選択したパターンで前記プログラムを前記複数のブロック候補に分割する請求項１に記載の情報処理装置。
【請求項７】
コンピュータが、プログラムを、前記プログラムの一部の処理が２つ以上のブロック候補に併存することを許容して、複数のブロック候補に分割し、
前記コンピュータが、前記プログラムの一部の処理が前記複数のブロック候補のうちの２つ以上のブロック候補に併存するか否かを判定し、
前記プログラムの一部の処理が２つ以上のブロック候補に併存する場合に、前記コンピュータが、２つ以上のブロック候補に併存する前記プログラムの一部の処理である併存処理を前記２つ以上のブロック候補と同数の２つ以上の計算機に並列に実行させる並列実行方式により前記プログラムを実行する場合の実行時間と、前記併存処理を前記２つ以上の計算機のうちの１つの計算機に実行させて前記１つの計算機の実行結果を前記２つ以上の計算機のうちの他の計算機に共有させる共有実行方式により前記プログラムを実行する場合の実行時間とを比較し、前記並列実行方式と前記共有実行方式とのうち、実行時間がより短い方式を選択し、
前記コンピュータが、前記複数のブロック候補と選択された方式とに基づき、前記プログラムを複数のブロックに分割する情報処理方法。
【請求項８】
プログラムを、前記プログラムの一部の処理が２つ以上のブロック候補に併存することを許容して、複数のブロック候補に分割する第１の分割処理と、
前記プログラムの一部の処理が前記複数のブロック候補のうちの２つ以上のブロック候補に併存するか否かを判定するブロック候補判定処理と、
前記プログラムの一部の処理が２つ以上のブロック候補に併存する場合に、２つ以上のブロック候補に併存する前記プログラムの一部の処理である併存処理を前記２つ以上のブロック候補と同数の２つ以上の計算機に並列に実行させる並列実行方式により前記プログラムを実行する場合の実行時間と、前記併存処理を前記２つ以上の計算機のうちの１つの計算機に実行させて前記１つの計算機の実行結果を前記２つ以上の計算機のうちの他の計算機に共有させる共有実行方式により前記プログラムを実行する場合の実行時間とを比較し、前記並列実行方式と前記共有実行方式とのうち、実行時間がより短い方式を選択するする方式選択処理と、
前記複数のブロック候補と前記方式選択処理により選択された方式とに基づき、前記プログラムを複数のブロックに分割する第２の分割処理とをコンピュータに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを分割する技術に関する。
【背景技術】
【０００２】
マイクロコントローラ又はＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）を使用した組み込みシステムの開発において、ハードウェアでのクロック周波数の向上による実行速度の改善は限界に近づきつつある。このため、複数の計算機を並列実行することで実行速度を上げるマルチコア方式が用いられるようになってきている。
ファクトリーオートメーションに於いても同様の傾向があり、特許文献１に記載の方法及び特許文献２に記載の方法が考案されている。
特許文献１では、複数の計算機（ＰＬＣ：Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）にシーケンスプログラムを分散させて実行し、各計算機の処理負荷を下げることによりプログラムの実行時間を短縮する方法が記載されている。
また、特許文献２では、複数のＰＬＣを共有メモリ及びバスで相互接続し、制御量に余力があるＰＬＣが、制御量に余裕が無いＰＬＣに代わって制御を行うことで制御システム全体として制御効率を向上させる方法が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１７／１４１３３２号パンフレット
【特許文献２】特開２０１０−０７９３５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の方法及び特許文献２に記載の方法のいずれも、計算機間で協調動作をするために、共有メモリ又はバスを介して、計算機間で情報を共有する必要がある。しかしながら、共有メモリ及びバスは一般には、計算機の外部インタフェースを経由することになるため、アクセス遅延が大きい。
また、各計算機が制御する制御対象も、計算機の入出力などの制約により制限される。
このようなことから、プログラムを複数の計算機で分散させ、複数の計算機に協調してプログラムを実行させても、情報共有のためのアクセス遅延及び入出力の制約により、オーバーヘッドが大きくなる。このようなオーバーヘッドの増大により、プログラムの分散及び複数の計算機での協調実行による高速化、処理負荷の分散及び制御効率の向上が阻害されてしまう。【０００５】
本発明は、上記に鑑みたものであり、オーバーヘッドの少ない効率的なプログラムの分割を実現することを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理装置は、
プログラムを、前記プログラムの一部の処理が２つ以上のブロック候補に併存することを許容して、複数のブロック候補に分割する第１の分割部と、
前記プログラムの一部の処理が前記複数のブロック候補のうちの２つ以上のブロック候補に併存するか否かを判定するブロック候補判定部と、
前記プログラムの一部の処理が２つ以上のブロック候補に併存する場合に、２つ以上のブロック候補に併存する前記プログラムの一部の処理である併存処理を前記２つ以上のブロック候補と同数の２つ以上の計算機に並列に実行させる並列実行方式により前記プログラムを実行する場合の実行時間と、前記併存処理を前記２つ以上の計算機のうちの１つの計算機に実行させて前記１つの計算機の実行結果を前記２つ以上の計算機のうちの他の計算機に共有させる共有実行方式により前記プログラムを実行する場合の実行時間とを比較し、前記並列実行方式と前記共有実行方式とのうち、実行時間がより短い方式を選択する方式選択部と、
前記複数のブロック候補と前記方式選択部により選択された方式とに基づき、前記プログラムを複数のブロックに分割する第２の分割部とを有する。
【発明の効果】
【０００７】
本発明では、並列実行方式と共有実行方式とのうち、実行時間がより短い方式が選択される。このため、本発明によれば、オーバーヘッドの少ない効率的なプログラムの分割を実現することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る制御システム（１台の計算機）の構成例を示す図。
【図２】実施の形態１に係る制御システム（３台の計算機）の構成例を示す図。
【図３】実施の形態１に係る計算機の機能構成例を示す図。
【図４】実施の形態１に係るプログラムコード割り当て装置を示す図。
【図５】実施の形態１に係るプログラムコード割り当て装置のハードウェア構成例を示す図。
【図６】実施の形態１に係るプログラムコード割り当て装置の機能構成例を示す図。
【図７】実施の形態１に係るプログラムコード割り当て装置の動作の概要を示すフローチャート。
【図８】実施の形態１に係るプログラム実行順序情報の例を示す図。
【図９】実施の形態１に係るプログラムコードの分割候補の例を示す図。
【図１０】実施の形態１に係るプログラムコードの分割例を示す図。
【図１１】実施の形態１に係るプログラムコードの分割候補の例を示す図。
【図１２】実施の形態１に係るプログラムコードの分割例を示す図。
【図１３】実施の形態１に係るプログラムコードの固定実行部分及び動的実行部分の例を示す図。
【図１４】実施の形態１に係るプログラムコード割り当て装置の動作例を示すフローチャート。
【図１５】実施の形態１に係るプログラムコード割り当て装置の動作例を示すフローチャート。
【図１６】実施の形態１に係るプログラムコード割り当て装置の動作例を示すフローチャート。
【図１７】実施の形態１に係るプログラムコード割り当て装置の動作例を示すフローチャート。
【図１８】実施の形態１に係る計算機の動作例を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図を用いて説明する。以下の実施の形態の説明及び図面において、同一の符号を付したものは、同一の部分又は相当する部分を示す。
また、以下では、プログラムコードを単にプログラムともいう。
【００１０】
実施の形態１．
＊＊＊前提＊＊＊
先ず、本実施の形態の前提となる制御システムを説明する。
図１は、１台の計算機を用いる制御システムの構成例を示す。
【００１１】
図１において、計算機１００は、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２を制御するためのプログラムコード１０２を実行する。計算機１００はプログラムコード１０２を実行することで制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２を制御する。
計算機１００は、共有バス２００を介して制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２と接続されている。
計算機１００は、プログラムメモリ１０１を有する。プログラムメモリ１０１は、プログラムコード１０２を格納する。
計算機１００は、共有バス２００を介して、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々の動作状態を読み取る。また、計算機１００は、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々の動作状態を用いて、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々への制御信号を生成する。また、計算機１００は、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々への制御信号を共有バス２００を介して制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々に書き込む。これにより、計算機１００は、制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２の各々を制御する。
【００１２】
次に、複数台の計算機を用いる制御システムを説明する。
図２は、３台の計算機を用いる制御システムの構成例を示す。
【００１３】
図２では、３台の計算機（計算機（Ａ）１１０、計算機（Ｂ）１２０及び計算機（Ｃ）１３０）が共有バス２００に接続されている。
図１のプログラムコード１０２は、プログラムコード（Ａ）１１２、プログラムコード（Ｂ）１２２及びプログラムコード（Ｃ）１３２に分割されている。そして、プログラムコード（Ａ）１１２が計算機（Ａ）１１０のプログラムメモリ１１１に配置される。また、プログラムコード（Ｂ）１２２が計算機（Ｂ）１２０のプログラムメモリ１２１に配置される。更に、プログラムコード（Ｃ）１３２が計算機（Ｃ）１３０のプログラムメモリ１３１に配置される。
計算機（Ａ）１１０はプログラムコード（Ａ）１１２を実行して共有バス２００を介して制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２を制御する。計算機（Ｂ）１２０はプログラムコード（Ｂ）１２２を実行して共有バス２００を介して制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２を制御する。計算機（Ｃ）１３０はプログラムコード（Ｃ）１３２を実行して共有バス２００を介して制御対象機器（Ａ）３００、制御対象機器（Ｂ）３０１及び制御対象機器（Ｃ）３０２を制御する。
制御信号を生成するために計算機（Ａ）１１０、計算機（Ｂ）１２０及び計算機（Ｃ）１３０の間でデータを共有する必要がある場合は、共有メモリ２０１を用いて計算機（Ａ）１１０、計算機（Ｂ）１２０及び計算機（Ｃ）１３０の間でデータを共有する。
【００１４】
一般的に、計算機内にはプログラムコードを実行するために必要な中間計算結果などを記憶しておくためのワーク領域（ワークメモリ）がある。当該ワーク領域は、キャッシュメモリ又は高速なＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成され、高速アクセスができるようになっている。
一方、図２で示す共有メモリ２０１は、共有バス２００を介してアクセスされるため、非常にアクセス速度が遅い。従って、共有メモリ２０１を用いた計算機間でのデータ共有は性能的な短所がある。そのため、プログラムコードの分割前よりも性能をよくするためには、分割後のプログラムコードを実行する計算機（Ａ）１１０、計算機（Ｂ）１２０及び計算機（Ｃ）１３０が共有メモリ２０１にアクセスする機会が少なくするよう考慮する必要がある。
また、計算機としてＰＬＣが用いられる制御システムでは、スキャンタイムと呼ばれる周期で、繰り返し同じプログラムコードが実行される。スキャンタイムが短いほど、制御対象機器に対して、きめ細かい制御指示が行える。このため、スキャンタイムが短いほど、制御システムとしては高性能である。
複数の計算機を用いて制御対象機器の制御を行う場合、スキャンタイムは最も計算が遅い計算機の実行時間に拘束される。従って、複数の計算機を用いて制御対象機器の制御を行う場合には、各計算機における分割後のプログラムコードの実行時間が計算機間で同等になるように考慮する必要がある。
【００１５】
＊＊＊構成の説明＊＊＊
図３は、本実施の形態に係る制御システムの構成例を示す。図３では、作図上の理由から、本実施の形態に係る制御システムは、計算機（Ａ）１１０と計算機（Ｂ）１２０の２台の計算機で構成されるものとする。また、プログラムコード１０２は、プログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２に分割されているものとする。また、制御対象機器としては、制御対象機器（Ａ）３００と制御対象機器（Ｂ）３０１が存在するものとする。
なお、図３に示す制御システムは計算機システムの例である。
【００１６】
計算機（Ａ）１１０には、プログラムメモリ１１１とプロセッサ１１５と命令実行制御部１１６と命令実行制御情報１１７が含まれる。
計算機（Ｂ）１２０には、プログラムメモリ１２１とプロセッサ１２５と命令実行制御部１２６と命令実行制御情報１２７が含まれる。
【００１７】
プログラムメモリ１１１は、プログラムコード（Ａ）１１２を記憶する。また、プログラムメモリ１２１は、プログラムコード（Ｂ）１２２を記憶する。
プログラムコード（Ａ）１１２は、固定実行部分１１３と動的実行部分１１４で構成される。
固定実行部分１１３は、計算機（Ａ）１１０で固定的に実行される部分である。つまり、固定実行部分１１３は、計算機（Ａ）１１０のみで実行される。
プログラムコード（Ｂ）１２２も固定実行部分１２３と動的実行部分１２４で構成される。固定実行部分１２３は計算機（Ｂ）１２０で固定的に実行される。つまり、固定実行部分１２３は計算機（Ｂ）１２０のみで実行される。
動的実行部分１１４及び動的実行部分１２４は、同じ処理である。動的実行部分１１４及び動的実行部分１２４は、条件により実行態様が変動する。より具体的には、条件の成否により、（１）動的実行部分１１４のみが計算機（Ａ）１１０で実行される場合、（２）動的実行部分１１４が計算機（Ａ）１１０で実行され、動的実行部分１２４が計算機（Ｂ）１２０で実行される場合、（３）動的実行部分１２４のみが計算機（Ｂ）１２０で実行される場合が生じ得る。命令実行制御部１１６及び命令実行制御情報１１７に従って、動的実行部分１１４及び動的実行部分１２４のいずれが実行されるかが制御される。
【００１８】
命令実行制御情報１１７には、動的実行部分１１４が計算機（Ａ）１１０で実行され、動的実行部分１２４が計算機（Ｂ）１２０で実行されるための条件が実行条件として定義される。また、命令実行制御情報１１７には、実行条件が成立した場合に、動的実行部分１１４のどの部分を計算機（Ａ）１１０が実行するかが示される。
同様に、命令実行制御情報１２７には、実行条件が定義され、実行条件が成立した場合に、動的実行部分１２４のどの部分を計算機（Ｂ）１２０が実行するかが示される。
計算機（Ａ）１１０と計算機（Ｂ）１２０とで分担して実行する処理（動的実行部分１１４と動的実行部分１２４）を分担実行処理ともいう。
実行条件は、例えば、制御対象機器（Ａ）３００の状態又は制御対象機器（Ｂ）３０１の状態に関する条件、ＩＦ文、ＣＡＳＥ文等の条件分岐に関する条件である。
命令実行制御情報１１７及び命令実行制御情報１２７は、実行条件ごとに、各計算機で実行する命令量（処理量）が均等となるように事前にプログラムコード１０２を解析して生成される。
命令実行制御情報１１７及び命令実行制御情報１２７は、各々、実行条件情報に相当する。
【００１９】
命令実行制御部１１６は、プログラムコード（Ａ）１１２を実行する。
より具体的には、命令実行制御部１１６は、計算機（Ａ）１１０に固有に割り当てられた処理である固定実行部分１１３を実行する。また、命令実行制御部１１６は、命令実行制御情報１１７を参照し、実行条件が成立しているか否かを判定する。そして、実行条件が成立している場合に、命令実行制御部１１６は、分担実行処理を計算機（Ｂ）１２０と分担して実行する。命令実行制御部１１６は、条件判定部及び処理実行部に相当する。
命令実行制御部１１６は、具体的には、プロセッサ１１５で実行されるプログラムである。
同様に、命令実行制御部１２６は、プログラムコード（Ｂ）１２２を実行する。
より具体的には、命令実行制御部１２６は、計算機（Ｂ）１２０に固有に割り当てられた処理である固定実行部分１２３を実行する。また、命令実行制御部１２６は、命令実行制御情報１２７を参照し、実行条件が成立しているか否かを判定する。そして、実行条件が成立している場合に、命令実行制御部１２６は、分担実行処理を計算機（Ａ）１１０と分担して実行する。命令実行制御部１２６も、条件判定部及び処理実行部に相当する。
命令実行制御部１２６も、具体的には、プロセッサ１２５で実行されるプログラムである。
【００２０】
次に、プログラムコード割り当て装置５００を説明する。プログラムコード割り当て装置５００は、プログラムコード１０２をプログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２に分割し、また、命令実行制御情報１１７及び命令実行制御情報１２７を生成する。
【００２１】
図４は、プログラムコード割り当て装置５００を示す。プログラムコード割り当て装置５００はコンピュータである。
また、プログラムコード割り当て装置５００は、情報処理装置の例である。更に、プログラムコード割り当て装置５００で行われる動作は、情報処理方法及び情報処理プログラムに相当する。
【００２２】
プログラムコード割り当て装置５００は、プログラムコード１０２、計算機情報４０１及び共有メモリアクセス性能情報４０２を参照して、プログラムコード１０２をプログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２に分割する。また、プログラムコード割り当て装置５００は、命令実行制御情報１１７及び命令実行制御情報１２７を生成する。
【００２３】
計算機情報４０１には、制御システムに含まれる計算機の数が示される。以下では、計算機情報４０１には、図３に示すように制御システムには計算機（Ａ）１１０と計算機（Ｂ）１２０の２台の計算機が含まれる旨が示されているものとする。また、計算機情報４０１には、計算機（Ａ）１１０の性能と計算機（Ｂ）１２０の性能とが示される。
共有メモリアクセス性能情報４０２には、計算機（Ａ）１１０及び計算機（Ｂ）１２０が共有メモリ２０１にアクセスする際のアクセス性能（アクセス遅延）が示される。
【００２４】
図５は、プログラムコード割り当て装置５００のハードウェア構成例を示す。
プログラムコード割り当て装置５００は、ハードウェアとして、プロセッサ９０１、主記憶装置９０２、補助記憶装置９０３及び通信装置９０４を備える。
【００２５】
プロセッサ９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。
プロセッサ９０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等である。
主記憶装置９０２は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
補助記憶装置９０３は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等である。
通信装置９０４は、データの通信処理を実行する電子回路である。
通信装置９０４は、例えば、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。
【００２６】
補助記憶装置９０３には、後述する第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の機能を実現するプログラムが記憶されている。
これらプログラムは、補助記憶装置９０３から主記憶装置９０２にロードされる。そして、プロセッサ９０１がこれらプログラムを実行して、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の動作を行う。
図５では、プロセッサ９０１が第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の機能を実現するプログラムを実行している状態を模式的に表している。
【００２７】
補助記憶装置９０３には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。
そして、ＯＳの少なくとも一部がプロセッサ９０１により実行される。
プロセッサ９０１はＯＳの少なくとも一部を実行しながら、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の機能を実現するプログラムを実行する。
プロセッサ９０１がＯＳを実行することで、タスク管理、メモリ管理、ファイル管理、通信制御等が行われる。
また、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の処理の結果を示す情報、データ、信号値及び変数値の少なくともいずれかが、主記憶装置９０２、補助記憶装置９０３、プロセッサ９０１内のレジスタ及びキャッシュメモリの少なくともいずれかに記憶される。
また、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の機能を実現するプログラムは、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の可搬記録媒体に格納されていてもよい。そして、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の機能を実現するプログラムが格納された可搬記録媒体を商業的に流通させてもよい。
【００２８】
また、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４の「部」を、「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
また、プログラムコード割り当て装置５００は、処理回路により実現されてもよい。処理回路は、例えば、ロジックＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）である。
この場合は、第１の分割部５０１、ブロック候補判定部５０２、方式選択部５０３及び第２の分割部５０４は、それぞれ処理回路の一部として実現される。
なお、本明細書では、プロセッサと処理回路との上位概念を、「プロセッシングサーキットリー」という。
つまり、プロセッサと処理回路とは、それぞれ「プロセッシングサーキットリー」の具体例である。
【００２９】
図６は、プログラムコード割り当て装置５００の機能構成例を示す。
【００３０】
第１の分割部５０１は、プログラムコード１０２の一部の処理が２つ以上のブロック候補に併存することを許容して、プログラムコード１０２を複数のブロック候補に分割する。
なお、第１の分割部５０１により行われる処理は、第１の分割処理に相当する。
【００３１】
ブロック候補判定部５０２は、プログラムコード１０２の一部の処理が複数のブロック候補のうちの２つ以上のブロック候補に併存するか否かを判定する。２つ以上のブロック候補に併存するプログラムコード１０２の一部の処理を併存処理という。
また、ブロック候補判定部５０２は、条件により実行時間が変動する処理である負荷変動処理がプログラムコード１０２に含まれているか否かを判定する。負荷変動処理は、具体的には、動的実行部分１１４に記述される処理（分担実行処理）である。
なお、ブロック候補判定部５０２により行われる処理は、ブロック候補判定処理に相当する。
【００３２】
方式選択部５０３は、プログラムコード１０２の一部の処理が２つ以上のブロック候補に併存する場合に、並列実行方式と共有実行方式のいずれかを選択する。
並列実行方式は、２つ以上のブロック候補に併存するプログラムコード１０２の一部の処理である併存処理を２つ以上のブロック候補と同数の２つ以上の計算機に並列に実行させる方式である。
共有実行方式は、併存処理を２つ以上の計算機のうちの１つの計算機に実行させて１つの計算機の実行結果を２つ以上の計算機のうちの他の計算機に共有させる方式である。
また、方式選択部５０３は、プログラムコード１０２に負荷変動処理が含まれている場合に、単独実行方式と分担実行方式のいずれかを選択する。
単独実行方式は、負荷変動処理を複数の計算機のうちの１つの計算機に実行させる方式である。
分担実行方式は、負荷変動処理を複数の計算機に分担して実行させる方式である。
方式選択部５０３により行われる処理は、方式選択処理に相当する。
【００３３】
第２の分割部５０４は、複数のブロック候補と方式選択部５０３により選択された方式とに基づき、プログラムコード１０２を複数のブロックに分割する。そして、第２の分割部５０４は、分割により得られた各ブロックをプログラムコード（Ａ）１１２及びプログラムコード（Ｂ）１２２として出力する。
また、第２の分割部５０４は、命令実行制御情報１１７及び命令実行制御情報１２７を生成し、生成した命令実行制御情報１１７及び命令実行制御情報１２７を出力する。
【００３４】
＊＊＊動作の説明＊＊＊
図７は、プログラムコード割り当て装置５００の動作の概要を示すフローチャートである。
図７を参照して、プログラムコード割り当て装置５００の動作の概要を説明する。
【００３５】
ステップＳ５１において、第１の分割部５０１がプログラムコード１０２を複数のブロック候補に分割する。
第１の分割部５０１は、計算機情報４０１を参照することで、本実施の形態に係る制御システムには、計算機（Ａ）１１０と計算機（Ｂ）１２０が存在することを認識する。このため、本実施の形態では、第１の分割部５０１は、プログラムコード１０２を２つのブロック候補に分割する。
また、第１の分割部５０１は、プログラムコード１０２を解析し、プログラムコード１０２を構成する複数の処理を特定する。また、第１の分割部５０１は、プログラムコード１０２を構成する処理の実行順序を特定する。そして、第１の分割部５０１は、実行順序に基づき、プログラムコード１０２を２つのブロック候補に分割する。なお、プログラムコード１０２を２つのブロック候補に分割するパターンが複数存在する場合は、第１の分割部５０１は、複数のパターンのうち、プログラムコード１０２の実行時間が最も短いパターンを選択する。そして、第１の分割部５０１は、選択したパターンでプログラムコード１０２を２つのブロック候補に分割する。
なお、第１の分割部５０１は、実際にプログラムコード１０２を２つのブロック候補に分割する必要はなく、プログラムコード１０２を論理的に２つのブロック候補に分割すればよい。
【００３６】
次に、ステップＳ５２において、ブロック候補判定部５０２が、プログラムコード１０２に併存処理が存在するか否かを判定する。また、ブロック候補判定部５０２は、プログラムコード１０２に負荷変動処理が存在するか否かを判定する。
【００３７】
次に、ステップＳ５３において、方式選択部５０３が方式を選択する。
ステップＳ５２においてプログラムコード１０２に併存処理が存在すると判定された場合に、方式選択部５０３は、プログラムコード１０２の分割方式として、並列実行方式及び共有実行方式のうちいずれかを選択する。より具体的には、方式選択部５０３は、並列実行方式によりプログラムコード１０２を実行する場合の実行時間と、共有実行方式によりプログラムコード１０２を実行する場合の実行時間とを比較する。そして、方式選択部５０３は、並列実行方式と共有実行方式とのうち、実行時間がより短い方式を選択する。
また、ステップＳ５２においてプログラムコード１０２に負荷変動処理が存在すると判定された場合に、方式選択部５０３は、プログラムコード１０２の分割方式として、単独実行方式及び分担実行方式のうちのいずれかを選択する。より具体的には、方式選択部５０３は、条件ごとに、単独実行方式によりプログラムコード１０２を実行する場合の実行時間と、分担実行方式によりプログラムコード１０２を実行する場合の実行時間とを比較する。そして、方式選択部５０３は、条件ごとに、単独実行方式と分担実行方式とのうち、実行時間がより短い方式を選択する。
【００３８】
次に、ステップＳ５４において、第２の分割部５０４がプログラムコード１０２を２つのブロックに分割する。
より具体的には、ステップＳ５３において方式選択部５０３により並列実行方式が選択された場合は、第２の分割部５０４は、２つのブロック候補に基づき、併存処理が計算機（Ａ）１１０と計算機（Ｂ）１２０で並列に実行されるようにプログラムコード１０２を２つのブロックに分割する。
ステップＳ５３において方式選択部５０３により共有実行方式が選択された場合は、第２の分割部５０４は、２つのブロック候補に基づき、併存処理が計算機（Ａ）１１０又は計算機（Ｂ）１２０のみで実行されるようにプログラムコード１０２を２つのブロックに分割する。
また、ステップＳ５３において方式選択部５０３により単独実行方式が選択された場合は、第２の分割部５０４は、は、２つのブロック候補に基づき、負荷変動処理が計算機（Ａ）１１０又は計算機（Ｂ）１２０のみで実行されるようにプログラムコード１０２を２つのブロックに分割する。
また、ステップＳ５３において方式選択部５０３により分担実行方式が選択された場合は、第２の分割部５０４は、２つのブロック候補に基づき、負荷変動処理が計算機（Ａ）１１０と計算機（Ｂ）１２０で分担して実行されるようにプログラムコード１０２を２つのブロックに分割する。また、第２の分割部５０４は、命令実行制御情報１１７と命令実行制御情報１２７を生成する。
そして、第２の分割部５０４は、２つのブロックをプログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２として出力し、また、命令実行制御情報１１７と命令実行制御情報１２７を出力する。
【００３９】
図８は、本実施の形態に係るプログラム実行順序情報４０３の例を示す。プログラム実行順序情報４０３では、プログラムコード１０２に含まれる処理と、処理の実行順序がデータフローグラフ（ＤＦＧ）形式で示される。第１の分割部５０１は、プログラムコード１０２を解析することで、図８に示す構成を認識することができる。
第１の分割部５０１は、図８に示す構成を２つの部分に分割することで、プログラムコード１０２を論理的に２つのブロック候補に分割することができる。
【００４０】
図８では、「Ａ」から「Ｒ」は、制御対象機器（Ａ）３００及び制御対象機器（Ｂ）３０１への制御信号を生成するために必要な処理を表している。
第１の分割部５０１は、プログラムコード１０２の各処理の命令量（処理量）を、計算機情報４０１に示される計算機（Ａ）１１０の処理性能及び計算機（Ｂ）１２０の処理性能の各々で除算することで、計算機（Ａ）１１０の各処理の実行時間及び計算機（Ｂ）１２０の各処理の実行時間を得ることができる。なお、ここでは、説明の簡明のために、全ての処理の実行時間は計算機（Ａ）１１０と計算機（Ｂ）１２０で共通し、一律に１Ｔであるものとする。
【００４１】
図８及び図１４を参照して、第１の分割部５０１の動作例を説明する。
図１４は、図４に示すステップＳ５１の詳細を示すフローチャートである。
【００４２】
ステップＳ５１１において、第１の分割部５０１は、プログラムコード１０２を解析し、プログラムコード１０２に含まれる処理を抽出する。また、第１の分割部５０１は、処理の実行順序を特定する。
ステップＳ５１１の結果、図８に例示するプログラム実行順序情報４０３が得られる。
【００４３】
次に、ステップＳ５１２において、第１の分割部５０１は、図８に示す出力０から出力３の生成に必要な処理を特定する。図８の例では、出力０の生成に必要な処理は（Ａ、Ｂ、Ｅ、Ｆ、Ｉ、Ｊ、Ｎ）である。また、出力１の生成に必要な処理は（Ｂ、Ｃ、Ｄ、Ｆ、Ｇ、Ｈ、Ｋ、Ｏ）である。また、出力２の生成に必要な処理は（Ｄ、Ｈ、Ｌ、Ｐ）である。また、出力３の生成に必要な処理は（Ｄ、Ｈ、Ｍ、Ｒ）である。
ステップＳ５１２の結果、出力関係処理情報４０４が得られる。
出力関係処理情報４０４には、出力と、出力の生成に必要な処理との組が示される。
【００４４】
次に、ステップＳ５１３において、第１の分割部５０１は、プログラムコード１０２をブロック候補に分割する。
本実施の形態では、第１の分割部５０１は、プログラムコード１０２を２つのブロック候補に分割する。
つまり、第１の分割部５０１は、出力０の生成に必要な処理を、計算機（Ａ）１１０及び計算機（Ｂ）１２０のどちらかに割り当てる。また、第１の分割部５０１は、出力１の生成に必要な処理を、計算機（Ａ）１１０及び計算機（Ｂ）１２０のどちらかに割り当てる。また、第１の分割部５０１は、出力２の生成に必要な処理を、計算機（Ａ）１１０及び計算機（Ｂ）１２０のどちらかに割り当てる。また、第１の分割部５０１は、出力３の生成に必要な処理を、計算機（Ａ）１１０及び計算機（Ｂ）１２０のどちらかに割り当てる。
【００４５】
また、ステップＳ５１４に示すように、プログラムコード１０２をブロック候補に分割するパターンが複数存在する場合は、第１の分割部５０１は、複数のパターンのうち、プログラムコード１０２の実行時間（スキャンタイム）が最小のパターンを選択する。
第１の分割部５０１は、計算機情報４０１を参照することで、プログラムコード１０２の各処理の実行時間（スキャンタイム）を得ることができる。なお、本実施の形態では、前述のように、説明の簡明化のため、各処理の実行時間は一律に１Ｔと仮定している。
実行時間（スキャンタイム）が最小のパターンが判明した場合に、第１の分割部５０１は、当該パターンでのブロック候補が示されるブロック候補情報４０５を生成する。そして、第１の分割部５０１は、ブロック候補情報４０５をブロック候補判定部５０２に出力する。
なお、第１の分割部５０１は、実行時間（スキャンタイム）が最も短いパターンを選択することに代えて、実行時間（スキャンタイム）が閾値以下になるパターンを選択するようにしてもよい。
【００４６】
図８の例では、出力０から出力３を生成するために必要な処理（４通り）を計算機（Ａ）１１０及び計算機（Ｂ）１２０に割り当てる組み合わせは、２＾４＝１６通りある。
図９は、１６通りのパターンのうち実行時間が最小になるパターンを示す。つまり、図９は、ブロック候補情報４０５の例を示す。
図９の例では、計算機（Ａ）１１０が処理（Ａ、Ｂ、Ｅ、Ｆ、Ｉ、Ｊ、ＮとＤ、Ｈ、Ｍ、Ｒ）を実行する。また、計算機（Ｂ）１２０が、処理（Ｂ、Ｃ、Ｄ、Ｆ、Ｇ、Ｈ、Ｋ、Ｌ、Ｏ、Ｐ）を実行する。
図９の例では、計算機（Ａ）１１０の実行時間は１１Ｔである。一方、計算機（Ｂ）１２０の実行時間は１０Ｔである。スキャンタイムは計算機（Ａ）１１０の実行時間と計算機（Ｂ）１２０の実行時間のうち大きい方に拘束される。このため、図９の例では、プログラムコード１０２の全体の実行時間（＝スキャンタイム）は１１Ｔである。
【００４７】
次に、図１５及び図１６を参照して、ブロック候補判定部５０２及び方式選択部５０３の動作例を説明する。
図１５及び図１６は、図４に示すステップＳ５２及びステップＳ５３の詳細を示すフローチャートである。ステップＳ５２ＸがステップＳ５２の詳細である。ステップＳ５３ＸがステップＳ５３の詳細である。
【００４８】
ブロック候補判定部５０２は、ブロック候補情報４０５を取得すると、ブロック候補情報４０５を解析し、ステップＳ５２１にて、併存処理の有無を確認する。
【００４９】
併存処理が存在する場合（ステップＳ５２２でＹＥＳ）は、処理がステップＳ５３０に進む。なお、この場合は、ブロック候補判定部５０２は方式選択部５０３に併存処理を通知する。
一方、併存処理が存在しない場合（ステップＳ５２２でＮＯ）は、処理が図１６のステップＳ５２３に進む。
【００５０】
ステップＳ５３０では、方式選択部５０３が方式ごとに実行時間を算出する。
つまり、方式選択部５０３は、並列実行方式の実行時間と共有実行方式の実行時間を算出する。
【００５１】
そして、方式選択部５０３は、ステップＳ５３１において、並列実行方式の実行時間が共有実行方式の実行時間よりも大きいか否かを判定する。
【００５２】
並列実行方式の実行時間が共有実行方式の実行時間よりも大きい場合（ステップＳ５３１でＹＥＳ）、すなわち共有実行方式の実行時間が並列実行方式の実行時間以下である場合に、ステップＳ５３２において、方式選択部５０３は共有実行方式を選択する。
一方、並列実行方式の実行時間が共有実行方式の実行時間以下である場合（ステップＳ５３１でＮＯ）は、方式選択部５０３は、ステップＳ５３３において、現在着目している併存処理に確認済みマークをつける。確認済みマークがつけられた併存処理は後のステップＳ５２１の対象にならない。
【００５３】
ステップＳ５３４では、方式選択部５０３は、ブロック候補情報４０５を共有実行方式に合せて更新する。
【００５４】
全ての併存処理についてステップＳ５３０以降の処理が行われるまで、ステップＳ５２１以降の処理が繰り返される。
【００５５】
図９の例では、処理（Ｂ）と処理（Ｆ）と処理（Ｄ）と処理（Ｈ）は、計算機（Ａ）１１０のブロック候補と計算機（Ｂ）１２０のブロック候補に併存しており、併存処理にあたる。
処理（Ｂ）の結果は、処理（Ｆ）と処理（Ｅ）（計算機（Ａ）１１０で実行）で用いられる。
処理（Ｆ）の結果は、処理（Ｊ）（計算機（Ａ）１１０で実行）と処理（Ｋ）（計算機（Ｂ）１２０で実行）で用いられる。
処理（Ｄ）の結果は、処理（Ｈ）で用いられる。
また、処理（Ｈ）の結果は、処理（Ｍ）（計算機（Ａ）１１０で実行）と処理（Ｋ）と処理（Ｌ）（ともに計算機（Ｂ）１２０で実行）で用いられる。
処理（Ｂ）の結果は処理（Ｆ）で用いられるため、処理（Ｂ）と処理（Ｆ）は同じ計算機で実行させることが望ましい。
ここで、共有実行方式として、例えば、処理（Ｂ）と処理（Ｆ）を計算機（Ｂ）１２０のみで実行し、計算機（Ａ）１１０は処理（Ｆ）の結果を共有することを想定する。この場合は、計算機（Ａ）１１０では２Ｔ分の処理を実行しなくてよくなる。このため、計算機（Ａ）１１０の実行時間は１１Ｔよりも短くできる可能性がある。
ただし、前述したように、計算機間での情報の共有は共有メモリ２０１を介する必要がある。共有メモリ２０１を用いる場合は、オーバーヘッドが発生する。従って、処理（Ｂ）と処理（Ｆ）を計算機（Ｂ）１２０に割り当てるか否かについては、このオーバーヘッドを考慮する必要がある。
【００５６】
実施の形態では、このオーバーヘッドは、計算機（Ａ）１１０及び計算機（Ｂ）１２０の共有メモリ２０１へのアクセス時間である。共有メモリ２０１へのアクセス時間は、共有するデータの量に依存する。このオーバーヘッドを処理Ｘのデータ量ｘの関数（Ｏ（ｘ））とする。つまり、処理（Ｆ）の結果を共有メモリ２０１を用いて共有する場合のオーバーヘッドは、Ｏ（ｆ）である。
計算機（Ａ）１１０の処理（Ａ、Ｅ、Ｉ、Ｊ、ＮとＤ、Ｈ、Ｍ、ＲとＯ（ｆ））に要する時間と、計算機（Ｂ）１２０の処理（Ｂ、Ｃ、Ｄ、Ｆ、Ｇ、Ｈ、Ｋ、Ｌ、Ｏ、Ｐ）に要する時間とのうちの大きい方が、共有を考慮しない場合（共有メモリ２０１を用いない場合）のスキャンタイム（１１Ｔ）よりも大きいか否かにより、処理（Ｂ）と処理（Ｆ）を計算機（Ｂ）１２０のみで実行させるか否かを判定することができる。つまり、計算機（Ａ）１１０の処理（Ａ、Ｅ、Ｉ、Ｊ、ＮとＤ、Ｈ、Ｍ、ＲとＯ（ｆ））に要する時間と、計算機（Ｂ）１２０の処理（Ｂ、Ｃ、Ｄ、Ｆ、Ｇ、Ｈ、Ｋ、Ｌ、Ｏ、Ｐ）に要する時間とのうちの大きい方が、共有を考慮しない場合（共有メモリ２０１を用いない場合）のスキャンタイム（１１Ｔ）よりも小さければ、スキャンタイムが短縮できる。従って、この場合は、計算機（Ｂ）１２０のみが処理（Ｂ）と処理（Ｆ）を実行すること（共有実行方式）が望ましい。計算機（Ａ）１１０の処理（Ａ、Ｅ、Ｉ、Ｊ、ＮとＤ、Ｈ、Ｍ、ＲとＯ（ｆ））に要する時間と、計算機（Ｂ）１２０の処理（Ｂ、Ｃ、Ｄ、Ｆ、Ｇ、Ｈ、Ｋ、Ｌ、Ｏ、Ｐ）に要する時間とのうちの大きい方が、共有を考慮しない場合（共有メモリ２０１を用いない場合）のスキャンタイム（１１Ｔ）以上であれば、スキャンタイムが変化しない又はスキャンタイムが増大するため、計算機（Ａ）１１０及び計算機（Ｂ）１２０の各々が処理（Ｂ）と処理（Ｆ）を実行すること（並列実行方式）が望ましい。
【００５７】
説明を簡明化するために、ここでは、Ｏ（ｆ）＝１Ｔとする。
計算機（Ｂ）１２０のみで処理（Ｂ）と処理（Ｆ）を実行し、処理（Ｆ）の実行結果を共有メモリ２０１を用いて共有する場合は、計算機（Ａ）１１０の全ての処理の実行に要する時間は１０Ｔとなる。このため、計算機（Ａ）１１０が処理（Ｂ）と処理（Ｆ）を実行しない場合の計算機（Ａ）１１０の実行時間は、計算機（Ａ）１１０が処理（Ｂ）と処理（Ｆ）を実行する場合のスキャンタイム（１１Ｔ）よりも小さくなる。この場合は、計算機（Ｂ）１２０のみで処理（Ｂ）と処理（Ｆ）を実行する方がよいと判定できる。
【００５８】
同様に、処理（Ｄ）と処理（Ｈ）についても考慮する。
計算機（Ａ）１１０のみが処理（Ｄ）と処理（Ｈ）を実行する場合の計算機（Ａ）１１０の実行時間は１０Ｔであり、計算機（Ｂ）１２０の実行時間は９Ｔである。
計算機（Ｂ）１２０のみが処理（Ｄ）と処理（Ｈ）を実行する場合の計算機（Ａ）１１０の実行時間は９Ｔであり、計算機（Ｂ）１２０の実行時間は１０Ｔである、どちらのケースも大きな実行時間は１０Ｔであるため、スキャンタイムはともに１０Ｔである。このため、計算機（Ａ）１１０のみが処理（Ｄ）と処理（Ｈ）を実行する場合及び計算機（Ｂ）１２０のみが処理（Ｄ）と処理（Ｈ）を実行する場合のどちらを選択してもよい。
図１０は、一例として、処理（Ｂ）と処理（Ｆ）は計算機（Ｂ）１２０のみで実行し、処理（Ｄ）と処理（Ｈ）は計算機（Ａ）１１０のみで実行する場合の、ブロック候補の例を示す。
【００５９】
次に、図１６のステップＳ５２３以降の処理を説明する。
【００６０】
ステップＳ５２３では、ブロック候補判定部５０２は、ブロック候補情報４０５を参照して、負荷変動処理の有無を確認する。
【００６１】
負荷変動処理がある場合（ステップＳ５２４でＹＥＳ）は、処理がステップＳ５３５に進む。なお、この場合は、ブロック候補判定部５０２は方式選択部５０３に負荷変動処理を通知する。
一方、負荷変動処理が存在しない場合（ステップＳ５２４でＮＯ）は、処理が図１７のステップＳ５４１に進む。
【００６２】
ステップＳ５３５では、方式選択部５０３が方式ごとに実行時間を算出する。
つまり、方式選択部５０３は、単独実行方式の実行時間と分担実行方式の実行時間を算出する。
【００６３】
そして、方式選択部５０３は、ステップＳ５３６において、単独実行方式の実行時間が分担実行方式の実行時間よりも大きいか否かを判定する。
【００６４】
単独実行方式の実行時間が分担実行方式の実行時間よりも大きい場合（ステップＳ５３６でＹＥＳ）、すなわち分担実行方式の実行時間が単独実行方式の実行時間以下である場合に、ステップＳ５３７において、方式選択部５０３は分担実行方式を選択する。
一方、単独実行方式の実行時間が分担実行方式の実行時間以下である場合（ステップＳ５３６でＮＯ）は、方式選択部５０３は、ステップＳ５３８において、現在着目している負荷変動処理に確認済みマークをつける。確認済みマークがつけられた負荷変動処理は後のステップＳ５２３の対象にならない。
【００６５】
ステップＳ５３９では、方式選択部５０３は、ブロック候補情報４０５を分担実行方式に合せて更新する。
また、この場合は、方式選択部５０３は第２の分割部５０４に分担実行方式を選択したことと、分担実行方式を選択した負荷変動処理を通知する。
【００６６】
全ての負荷変動処理についてステップＳ５３５以降の処理が行われるまで、ステップＳ５２３以降の処理が繰り返される。
【００６７】
図１１は、負荷変動処理が存在するプログラムコード１０２の例を示す。
図１１では、処理（Ｈ）が負荷変動処理である。
図１１の例では、処理（Ｄ）の結果により処理（Ｈ）の処理量が変化するものとする。具体的には、処理（Ｄ）の結果が基準αに合致する場合、つまり、処理（Ｄ）の結果が基準αに合致するという条件が成立する場合には、処理（Ｈ）の実行時間が２Ｔになるものとする。一方、処理（Ｄ）の結果が基準αに合致しない場合、つまり、処理（Ｄ）の結果が基準αに合致するという条件が成立しない場合には、処理（Ｈ）の実行時間は１Ｔのままであるものとする。
【００６８】
このような場合に、方式選択部５０３は、処理（Ｈ）を計算機（Ａ）１１０と計算機（Ｂ）１２０で分担させるか（分担実行方式を選択するか）、計算機（Ａ）１１０が単独で処理（Ｈ）を実行するか（単独実行方式を選択するか）を判定する。
【００６９】
処理（Ｈ）を計算機（Ａ）１１０のみで実行させる場合（単独実行方式）の計算機（Ａ）１１０の実行時間と計算機（Ｂ）１２０の実行時間は、以下の通りである。
（１）処理（Ｄ）の結果が基準αに合致する場合
計算機（Ａ）１１０の実行時間
＝処理（Ａ、Ｅ、Ｉ、Ｊ、Ｎ、Ｏ（ｆ））＋処理（Ｄ、２＊Ｈ、Ｍ、Ｒ）＝６Ｔ＋５Ｔ
＝１１Ｔ
計算機（Ｂ）１２０の実行時間
＝処理（Ｂ、Ｃ、Ｆ、Ｇ、Ｋ、Ｌ、Ｏ、Ｐ＋Ｏ（ｈ））＝９Ｔ
（２）処理（Ｄ）の結果が基準αに合致しない場合
計算機（Ａ）１１０の実行時間
＝処理（Ａ、Ｅ、Ｉ、Ｊ、Ｎ、Ｏ（ｆ））＋処理（Ｄ、Ｈ、Ｍ、Ｒ）＝６Ｔ＋４Ｔ
＝１０Ｔ
計算機（Ｂ）１２０の実行時間
＝処理（Ｂ、Ｃ、Ｆ、Ｇ、Ｋ、Ｌ、Ｏ、Ｐ＋Ｏ（ｈ））＝９Ｔ
【００７０】
次に、処理（Ｈ）を計算機（Ａ）１１０と計算機（Ｂ）１２０に割り当て、処理（Ｄ）の結果が基準αに合致し、実行時間が増大する場合には計算機（Ａ）１１０と計算機（Ｂ）１２０に処理（Ｈ）を１Ｔずつ分担させる場合（分担実行方式）の計算機（Ａ）１１０の実行時間と計算機（Ｂ）１２０の実行時間は、以下の通りである。
（１）処理（Ｄ）の結果が基準αに合致する場合
計算機（Ａ）１１０の実行時間
＝処理（Ａ、Ｅ、Ｉ、Ｊ、Ｎ、Ｏ（ｆ））＋処理（Ｄ、Ｈ、Ｍ、Ｒ）＝６Ｔ＋４Ｔ
＝１０Ｔ
計算機（Ｂ）１２０の実行時間
＝処理（Ｂ、Ｃ、Ｆ、Ｇ、Ｋ、Ｌ、Ｏ、Ｐ＋Ｈ）＝９Ｔ
（２）処理（Ｄ）の結果が基準αに合致しない場合
計算機（Ａ）１１０の実行時間
＝処理（Ａ、Ｅ、Ｉ、Ｊ、Ｎ、Ｏ（ｆ））＋処理（Ｄ、Ｈ、Ｍ、Ｒ）＝６Ｔ＋４Ｔ
＝１０Ｔ
計算機（Ｂ）１２０の実行時間
＝処理（Ｂ、Ｃ、Ｆ、Ｇ、Ｋ、Ｌ、Ｏ、Ｐ＋Ｈ）＝９Ｔ
【００７１】
以上の例では、処理（Ｄ）の結果が基準αに合致する場合の分担実行方式の計算機（Ａ）１１０の実行時間（１０Ｔ）が、処理（Ｄ）の結果が基準αに合致する場合の単独実行方式の計算機（Ａ）１１０の実行時間（１１Ｔ）よりも短い。このため、以上の例では、分担実行方式を選択すればスキャンタイムを短縮できるため、方式選択部５０３は、分担実行方式を選択する。
分担実行方式を選択した場合のブロック候補情報４０５の例を図１２に示す。
【００７２】
次に、図１７のステップＳ５４１以降の処理を説明する。
図１７は、図４のステップＳ５４の詳細を示す。
【００７３】
ステップＳ５４１において、第２の分割部５０４はブロック候補情報４０５に従って、プログラムコード１０２をブロックに分割する。
【００７４】
次に、ステップＳ５４２において、第２の分割部５０４は方式選択部５０３により分担実行方式が選択されているか否かを判定する。
【００７５】
分担実行方式が選択されていない場合（ステップＳ５４２でＮＯ）は、第２の分割部５０４は、ステップＳ５４３において、分割により得られたプログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２を出力する。
【００７６】
一方、分担実行方式が選択されている場合（ステップＳ５４２でＹＥＳ）は、第２の分割部５０４は、ステップＳ５４４において、命令実行制御情報１１７及び命令実行制御情報１２７を生成する。
図１２に示す例では、第２の分割部５０４は、処理（Ｄ）の結果が基準αに合致するという条件が成立する場合に処理（Ｈ）を計算機（Ａ）１１０と計算機（Ｂ）１２０で分担する旨の命令実行制御情報１１７と命令実行制御情報１２７を生成する。
命令実行制御情報１１７には、例えば、動的実行部分として処理（Ｈ）が記述され、実行条件として、処理（Ｄ）の結果が基準αに合致するという条件が記述される。また、命令実行制御情報１１７には、実行条件が成立した場合の動作として、処理（Ｈ）の前半部分を計算機（Ａ）１１０が実行することが記述され、実行条件が不成立の場合の動作として、処理（Ｈ）の全てを実行することが記述される。
命令実行制御情報１２７には、例えば、動的実行部分として処理（Ｈ）が記述され、実行条件として、処理（Ｄ）の結果が基準αに合致するという条件が記述される。また、命令実行制御情報１２７には、実行条件が成立した場合の動作として、処理（Ｈ）の後半部分を計算機（Ｂ）１２０が実行することが記述され、実行条件が不成立の場合の動作として処理（Ｈ）を実行しないことが記述される。
【００７７】
そして、第２の分割部５０４は、ステップＳ５４５において、プログラムコード（Ａ）１１２とプログラムコード（Ｂ）１２２と、命令実行制御情報１１７と命令実行制御情報１２７とを出力する。
【００７８】
図１３は、図１２のプログラムコードの割り当て結果を、図３の固定実行部分１１３、動的実行部分１１４、固定実行部分１２３及び動的実行部分１２４に記述した例を示す。
つまり、固定実行部分１１３には、処理（Ａ，Ｅ，Ｉ，Ｊ，Ｎ，Ｄ，Ｍ，Ｒ）が記述され、動的実行部分１１４には処理（Ｈ）が記述される。一方、固定実行部分１２３には、処理（Ｂ，Ｃ，Ｆ，Ｇ，Ｋ，Ｌ，Ｏ，Ｐ）が記述され、動的実行部分１２４には処理（Ｈ）が記述される。
【００７９】
次に、図１８を参照して、計算機（Ａ）１１０及び計算機（Ｂ）１２０の動作例を説明する。
以下では、計算機（Ａ）１１０の動作として説明するが、以下の説明は計算機（Ｂ）１２０にも適用される。
【００８０】
先ず、ステップＳ６１において、命令実行制御部１１６が次に実行する処理を特定する。具体的には、命令実行制御部１１６はプログラムカウンタに示される値により次に実行する処理を特定する。
【００８１】
次に、ステップＳ６２において、命令実行制御部１１６は、次に実行する処理が固定実行部分１１３であるかを判定する。
具体的には、命令実行制御部１１６は、次に実行する処理が命令実行制御情報１１７に動的実行部分として記述されている処理と一致するか否かを判定する。次に実行する処理が命令実行制御情報１１７に動的実行部分として記述されている処理と一致しない場合には、命令実行制御部１１６は、次に実行する処理が固定実行部分１１３であると判定する。
【００８２】
次に実行する処理が固定実行部分１１３である場合（ステップＳ６２でＹＥＳ）は、処理がステップＳ６３に進む。
一方、次に実行する処理が固定実行部分１１３でない場合（ステップＳ６２でＮＯ）は、処理がステップＳ６４に進む。
【００８３】
ステップＳ６３では、命令実行制御部１１６は、固定実行部分１１３である次の処理を実行する。
【００８４】
ステップＳ６４では、命令実行制御部１１６は、命令実行制御情報１１７の実行条件を参照する。
【００８５】
そして、ステップＳ６５において、命令実行制御部１１６は、実行条件が成立しているか否かを判定する。
実行条件が成立している場合（ステップＳ６５でＹＥＳ）は、処理がステップＳ６６に進む。
一方、実行条件が成立していない場合（ステップＳ６５でＮＯ）は、処理がステップＳ６７に進む。
【００８６】
ステップＳ６６では、命令実行制御部１１６は、実行条件が成立した場合の動作を行う。前述の例では、命令実行制御部１１６は、処理（Ｈ）の前半部分を実行する。
【００８７】
ステップＳ６７では、命令実行制御部１１６は、実行条件が不成立の場合の動作を行う。前述の例では、命令実行制御部１１６は処理（Ｈ）の全体を実行する。
【００８８】
＊＊＊実施の形態の効果の説明＊＊＊
以上のように、本実施の形態では、併存処理が存在する場合に、並列実行方式と共有実行方式とのうち、実行時間がより短い方式が選択される。また、本実施の形態では、負荷変動処理が存在する場合に、単独実行方式と分担実行方式とのうち、実行時間がより短い方式が選択される。
このため、本実施の形態によれば、オーバーヘッドの少ない効率的なプログラムの分割を実現することができる。
また、本実施の形態では、以上のように分割されたプログラムコードを各計算機が実行する。このため、少ないオーバーヘッドで効率的に制御対象機器を制御することができる。
【符号の説明】
【００８９】
１００  計算機、１０１  プログラムメモリ、１０２  プログラムコード、１１０  計算機（Ａ）、１１１  プログラムメモリ、１１２  プログラムコード（Ａ）、１１３  固定実行部分、１１４  動的実行部分、１１５  プロセッサ、１１６  命令実行制御部、１１７  命令実行制御情報、１２０  計算機（Ｂ）、１２１  プログラムメモリ、１２２  プログラムコード（Ｂ）、１２３  固定実行部分、１２４  動的実行部分、１２５  プロセッサ、１２６  命令実行制御部、１２７  命令実行制御情報、１３０  計算機（Ｃ）、１３１  プログラムメモリ、１３２  プログラムコード（Ｃ）、２００  共有バス、２０１  共有メモリ、３００  制御対象機器（Ａ）、３０１  制御対象機器（Ｂ）、３０２  制御対象機器（Ｃ）、４０１  計算機情報、４０２  共有メモリアクセス性能情報、４０３  プログラム実行順序情報、４０４  出力関係処理情報、４０５  ブロック候補情報、５００  プログラムコード割り当て装置、５０１  第１の分割部、５０２  ブロック候補判定部、５０３  方式選択部、５０４  第２の分割部、９０１  プロセッサ、９０２  主記憶装置、９０３  補助記憶装置、９０４  通信装置。
【図１】
0006929485.tif 000002
【図２】
0006929485.tif 000003
【図３】
0006929485.tif 000004
【図４】
0006929485.tif 000005
【図５】
0006929485.tif 000006
【図６】
0006929485.tif 000007
【図７】
0006929485.tif 000008
【図８】
0006929485.tif 000009
【図９】
0006929485.tif 000010
【図１０】
0006929485.tif 000011
【図１１】
0006929485.tif 000012
【図１２】
0006929485.tif 000013
【図１３】
0006929485.tif 000014
【図１４】
0006929485.tif 000015
【図１５】
0006929485.tif 000016
【図１６】
0006929485.tif 000017
【図１７】
0006929485.tif 000018
【図１８】
0006929485.tif 000019