(57)【要約】      （修正有）【課題】複数の演算要素から構成され、演算順序を有する演算論理の演算を複数のプロセッサを用いて実行する演算論理の並列処理方法を提供する。【解決手段】演算論理を複数のブランチに分割し、各ブランチの実行優先度をルールに基づいて決定し、各ブランチの演算を実行する１つのプロセッサをルールに基づいてブランチ毎に決定し、並列ブランチの演算を実行する複数のプロセッサの内の少なくとも一つのプロセッサは、並列ブランチにより生成される出力信号を入力信号とする複入力演算要素の演算を実行する他のプロセッサに実行進捗の通知を送信するように設定し、複入力演算要素の演算を実行するプロセッサに対して、所定の実行進捗の通知を受け取るまで複入力演算要素の演算の実行を待機するように設定し、プロセッサ毎に決定されたブランチに含まれる全ての演算要素の演算を演算順序に従って逐次実行するように、プロセッサ毎の命令を生成する。【選択図】図４
2017059084.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算要素から構成され、所定の演算順序を有する演算論理の演算を複数のプロセッサを用いて実行する演算論理の並列処理方法において、
前記演算要素は、それぞれ、
１つの入力信号に基づいて出力信号を生成する単入力演算要素、
複数の入力信号に基づいて出力信号を生成する複入力演算要素、
前記演算論理の外部から入力される外部入力信号に基づいて出力信号を生成する外部入力演算要素、及び
前記単入力演算要素で生成される前記出力信号、前記複入力演算要素で生成される前記出力信号、及び前記外部入力演算要素で生成される前記出力信号、の内の少なくとも一つの前記出力信号を入力信号として、該入力信号に基づいて前記演算論理の外部に出力される外部出力信号を生成する外部出力演算要素、
のうちのいずれか１つであり、
前記演算論理は、
前記演算要素の前記出力信号が他の前記演算要素の前記入力信号となるように段階的に組み合せられて構成されており、
前演算論理の並列処理方法は、
前記演算論理を、
前記演算論理の一部であって、前記複入力演算要素の前記複数の入力信号をそれぞれ出力するための並列ブランチであって、少なくとも１つの前記演算要素で構成されるブランチの複数からなる並列ブランチ、及び
前記演算論理の一部であって、前記外部出力演算要素の前記外部出力信号を出力するための、少なくとも１つの前記演算要素で構成される外部出力ブランチ、
を含む複数のブランチに分割するブランチ分割ステップと、
前記複数のブランチの各々の実行優先度を所定の実行優先度ルールに基づいて決定するブランチ優先度決定ステップと、
前記複数のブランチの各々の演算を実行する１つの前記プロセッサを所定の分担ルールに基づいて前記ブランチ毎に決定する担当プロセッサ決定ステップと、
前記並列ブランチの演算が前記複数のプロセッサによって実行される場合には、前記並列ブランチの演算を実行する前記複数のプロセッサの内の少なくとも一つの前記プロセッサは、前記並列ブランチにより生成される前記出力信号を前記入力信号とする前記複入力演算要素の演算を実行する他の前記プロセッサに実行進捗の通知を送信するように設定する通知送出設定ステップと、
前記複入力演算要素の演算を実行する前記プロセッサに対して、所定の前記実行進捗の通知を受信するまで前記複入力演算要素の演算の実行を待機するように設定する実行待機設定ステップと、
前記プロセッサの各々が、前記実行進捗の通知および前記複入力演算要素の演算の実行の待機を含めて、前記担当プロセッサ決定ステップによって前記プロセッサ毎に決定された前記ブランチに含まれる全ての前記演算要素の演算を前記演算順序に従って逐次実行するように、前記プロセッサ毎の命令を生成する命令生成ステップと、を備えることを特徴とする演算論理の並列処理方法。
【請求項２】
前記ブランチ分割ステップは、前記ブランチのそれぞれが、前記外部入力演算要素あるいは前記複入力演算要素のいずれか一方を１つ含むよう前記演算論理を分割することを特徴とする請求項１に記載の演算論理の並列処理方法。
【請求項３】
前記演算論理は、
前記外部入力演算要素を含む前記ブランチである外部入力ブランチと、
前記外部出力ブランチと、
前記外部入力ブランチと前記外部出力ブランチとの間に位置する中間ブランチと、で構成されており、
前記実行優先度ルールは第１実行優先度ルールを含み、
前記第１実行優先度ルールは、前記外部入力ブランチの実行優先度は前記中間ブランチおよび前記外部出力ブランチよりも高く、前記外部出力ブランチの実行優先度は前記中間ブランチおよび前記外部入力ブランチよりも低く決定すると共に、前記中間ブランチの実行優先度は、前記中間ブランチに含まれる前記演算要素の前記演算順序に基づいて前記実行優先度を決定することを定めたルールであることを特徴とする請求項１または２に記載の演算論理の並列処理方法。
【請求項４】
前記実行優先度ルールは第２実行優先度ルールを、さらに含み、
前記第２実行優先度ルールは、前記外部入力ブランチの実行優先度を、前記外部入力ブランチの演算処理の推定演算時間に基づいて決定することを定めたルールであることを特徴とする請求項３に記載の演算論理の並列処理方法。
【請求項５】
前記実行優先度ルールは第３実行優先度ルールを、さらに含み、
前記第３実行優先度ルールは、
前記推定演算時間が同じとなる複数の前記外部入力ブランチの実行優先度を、前記外部入力ブランチの各々に含まれる前記演算要素の前記演算順序に基づいて決定することを定めたルールであることを特徴とする請求項４に記載の演算論理の並列処理方法。
【請求項６】
前記プロセッサの各々には割り当て優先度が設定されており、
前記分担ルールは第１分担ルールを含み、
前記第１分担ルールは、前記割り当て優先度の順にサイクリックに選択される前記複数のプロセッサの各々を、前記実行優先度の順に選択される前記ブランチの各々に割り当てることを定めたルールであることを特徴とする請求項１〜５のいずれか１項に記載の演算論理の並列処理方法。
【請求項７】
前記分担ルールは第２分担ルールを、さらに含み、
前記第２分担ルールは、前記複数のプロセッサの数よりも前記外部入力ブランチの数が多い場合において、前記複数のプロセッサの各々に複数の前記外部入力ブランチを割り当てる時には、前記複数のプロセッサの各々に既に割り当てられた前記外部入力ブランチの推定演算時間の合計が短い前記プロセッサから優先して前記外部入力ブランチを割り当てることを定めたルールであることを特徴とする請求項６に記載の演算論理の並列処理方法。
【請求項８】
前記分担ルールは第３分担ルールを、さらに含み、
前記第３分担ルールは、前記並列ブランチの演算を実行する前記プロセッサのうちから前記割り当て優先度に従って選択される特定プロセッサを、該並列ブランチの出力信号を入力信号とする前記複入力演算要素を含む前記ブランチに割り当てることを定めたルールであることを特徴とする請求項６または７に記載の演算論理の並列処理方法。
【請求項９】
前記プロセッサが有する前記割り当て優先度は、前記複数のプロセッサの各々による演算処理の性能に基づいて設定されることを特徴とする請求項６〜８のいずれか１項に記載の演算論理の並列処理方法。
【請求項１０】
前記複数のプロセッサの各々が、前記プロセッサ毎に生成された前記命令を逐次実行する実行ステップを、さらに有することを特徴とする請求項１〜９のいずれか１項に記載の演算論理の並列処理方法。
【請求項１１】
請求項１〜１０のいずれか１項に記載の演算論理の並列処理方法により生成された前記命令を実行する演算論理の並列処理実行装置であって、
複数の前記プロセッサを備えることを特徴とする演算論理の並列処理実行装置。
【請求項１２】
前記プロセッサは、直接アクセスすることが可能な内部メモリを、さらに備え、
前記内部メモリには前記命令の少なくとも一部が格納されることを特徴とする請求項１１に記載の演算論理の並列処理実行装置。
【請求項１３】
前記命令を格納する命令用キャッシュメモリまたは前記命令に対応するデータを格納するデータ用キャッシュメモリの少なくとも一方を前記プロセッサの少なくとも一部が有することを特徴とする請求項１１または１２に記載の演算論理の並列処理実行装置。
【請求項１４】
請求項１〜１０のいずれか１項に記載の演算論理の並列処理方法により生成された前記命令を実行する演算論理の並列処理実行装置であって、
前記並列処理実行装置は複数のプロセッサを備え、
前記プロセッサはＦＰＧＡに設けられた制御回路を含み、
前記制御回路は、少なくとも１つの前記ブランチ毎に、前記ブランチに含まれる前記演算要素の各々の演算に対応する演算回路を、前記ＦＰＧＡのパーシャルコンフィグレーションにより前記ＦＰＧＡに再合成し、前記ＦＰＧＡのパーシャルコンフィグレーションにより再合成された前記演算回路を用いて前記ブランチの演算を実行することを特徴とする演算論理の並列処理実行装置。
【請求項１５】
前記ＦＰＧＡのパーシャルコンフィグレーションは、前記実行進捗の通知の受信を待っている間に実行されることを特徴とする請求項１４に記載の演算論理の並列処理実行装置。
【請求項１６】
前記複数のプロセッサの各々は、前記演算要素の演算をそれぞれ実行する２つの演算ユニットを含み、
前記演算論理の並列処理実行装置は、
前記２つの演算ユニットのそれぞれの出力を比較する比較ユニットと、
前記比較ユニットによる比較の結果を監視すると共に、前記比較の結果が不一致と判断される場合に前記演算論理の演算処理を中止する機能安全実行ユニットと、をさらに備え、
前記比較ユニットと、前記監視ユニットとは、前記複数のプロセッサの各々に設けられることを特徴とする請求項１１〜１５のいずれか１項に記載の演算論理の並列処理実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御ロジックなどの演算論理の並列処理に関する。
【背景技術】
【０００２】
従来から、基本的な演算の実行単位である演算要素を組み合わせることで、制御対象を制御するための演算論理（演算ロジック）を生成する手法が知られている。例えば、特許文献１には、プラント制御装置の演算ロジックの中のまとまった一部のロジック群を、夫々標準ロジックとして所定アドレスに格納しておき、該標準ロジック使用時に、前記アドレス指定により読み出された対応する標準ロジック間の受け渡し用信号及びロジックパラメーターを入力することによって制御装置の演算ロジック全体を完成させるプラント制御装置用保守ツールが開示されている。
【０００３】
また、特許文献２には、ロボットなどの制御対象の制御プログラムを構成する複数のプログラム要素（演算論理）を演算要素化して表示する表示手段を有し、表示手段上で複数の演算要素を組み合わせることで制御プログラムを作成することが開示されている。具体的には、マウスなどのポインティングデバイスをユーザが操作することで、表示手段に表示された複数の演算要素から所定の演算要素を抽出し、この抽出した各演算要素を所定の順序に配置し、各演算要素同士をそれぞれつなげることによって、制御プログラムに対応する演算要素ダイアグラムを作成することが開示されている。このプログラム要素は、加算器や、減算器、乗算器、積分器などの基本命令の単位で要素化されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−４９２０７号公報
【特許文献２】特開２００２−２３６５０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に、ロジック演算の演算処理を高速に実行することが望ましい。例えば、発電所の制御装置によって実行されるタービンやボイラの自動制御などの制御論理は、特に高速な演算処理が要求される演算論理である。ところが、このような制御装置による演算処理の高速化は、ロジック演算を実行するＣＰＵなどのプロセッサの性能の向上により行われているのが現状である。このため、プロセッサの性能向上に依存することなく、論理演算を高速に演算処理することが可能な技術の開発が望まれている。
【０００６】
上述の事情に鑑みて、本発明の少なくとも一実施形態は、複数のプロセッサを用いて演算論理の演算処理を実行する演算論理の並列処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
（１）本発明の少なくとも一実施形態に係る演算論理の並列処理方法は、
複数の演算要素から構成され、所定の演算順序を有する演算論理の演算を複数のプロセッサを用いて実行する演算論理の並列処理方法において、
前記演算要素は、それぞれ、
１つの入力信号に基づいて出力信号を生成する単入力演算要素、
複数の入力信号に基づいて出力信号を生成する複入力演算要素、
前記演算論理の外部から入力される外部入力信号に基づいて出力信号を生成する外部入力演算要素、及び
前記単入力演算要素で生成される前記出力信号、前記複入力演算要素で生成される前記出力信号、及び前記外部入力演算要素で生成される前記出力信号、の内の少なくとも一つの前記出力信号を入力信号として、該入力信号に基づいて前記演算論理の外部に出力される外部出力信号を生成する外部出力演算要素、
のうちのいずれか１つであり、
前記演算論理は、
前記演算要素の前記出力信号が他の前記演算要素の前記入力信号となるように段階的に組み合せられて構成されており、
前演算論理の並列処理方法は、
前記演算論理を、
前記演算論理の一部であって、前記複入力演算要素の前記複数の入力信号をそれぞれ出力するための並列ブランチであって、少なくとも１つの前記演算要素で構成されるブランチの複数からなる並列ブランチ、及び
前記演算論理の一部であって、前記外部出力演算要素の前記外部出力信号を出力するための、少なくとも１つの前記演算要素で構成される外部出力ブランチ、
を含む複数のブランチに分割するブランチ分割ステップと、
前記複数のブランチの各々の実行優先度を所定の実行優先度ルールに基づいて決定するブランチ優先度決定ステップと、
前記複数のブランチの各々の演算を実行する１つの前記プロセッサを所定の分担ルールに基づいて前記ブランチ毎に決定する担当プロセッサ決定ステップと、
前記並列ブランチの演算が前記複数のプロセッサによって実行される場合には、前記並列ブランチの演算を実行する前記複数のプロセッサの内の少なくとも一つの前記プロセッサは、前記並列ブランチにより生成される前記出力信号を前記入力信号とする前記複入力演算要素の演算を実行する他の前記プロセッサに実行進捗の通知を送信するように設定する通知送出設定ステップと、
前記複入力演算要素の演算を実行する前記プロセッサに対して、所定の前記実行進捗の通知を受信するまで前記複入力演算要素の演算の実行を待機するように設定する実行待機設定ステップと、
前記プロセッサの各々が、前記実行進捗の通知および前記複入力演算要素の演算の実行の待機を含めて、前記担当プロセッサ決定ステップによって前記プロセッサ毎に決定された前記ブランチに含まれる全ての前記演算要素の演算を前記演算順序に従って逐次実行するように、前記プロセッサ毎の命令を生成する命令生成ステップと、を備える。
【０００８】
上記（１）の構成によれば、演算論理を構成する各演算要素（単入力演算要素、複入力演算要素、外部入力演算要素）の演算処理は、独立して連続に処理することが可能な単位であるブランチの単位で複数のプロセッサに分担される（割り当てられる）。また、各複入力演算要素の演算処理は、実行進捗の通知送出設定および実行待機設定による待機処理によって、その複数の入力信号が全て入力されたことを条件に開始されるよう構成される。すなわち、演算論理は、各演算要素で定義される演算処理が演算順序の通りに演算論理の入力信号に対して実行されることで、意図された通りの演算処理が実行された適正な演算結果を得ることが可能であるところ、上記の構成によれば、各複入力演算要素の処理において演算順序が遵守されることで、演算論理全体の処理順序は意図されたものと同じとなる。このため、複数のプロセッサが、割り当てられた演算論理の一部に相当する演算要素（ブランチ）の演算処理を逐次実行することで、演算論理の全体の演算処理を完了することができるようになり、このような演算論理の演算処理の並列処理化によって、演算論理の演算処理を高速化することができる。
【０００９】
（２）幾つかの実施形態では、上記（１）の構成において、
前記ブランチ分割ステップは、前記ブランチのそれぞれが、前記外部入力演算要素あるいは前記複入力演算要素のいずれか一方を１つ含むよう前記演算論理を分割する。
上記（２）の構成によれば、各ブランチにおける先頭の演算要素と末尾の演算要素との間に複入力演算要素となる演算要素がないように、各ブランチが構成される。このため、複入力演算要素の複数の入力信号を出力する各ブランチ（並列ブランチの各ブランチ）の演算処理に対して別々のプロセッサを割り当てることが可能となる。つまり、各ブランチを並列処理が可能な最小の単位とすることができ、演算論理の並列処理化をさらに図ることができる。
【００１０】
（３）幾つかの実施形態では、上記（１）〜（２）の構成において、
前記演算論理は、
前記外部入力演算要素を含む前記ブランチである外部入力ブランチと、
前記外部出力ブランチと、
前記外部入力ブランチと前記外部出力ブランチとの間に位置する中間ブランチと、で構成されており、
前記実行優先度ルールは第１実行優先度ルールを含み、
前記第１実行優先度ルールは、前記外部入力ブランチの実行優先度は前記中間ブランチおよび前記外部出力ブランチよりも高く、前記外部出力ブランチの実行優先度は前記中間ブランチおよび前記外部入力ブランチよりも低く決定すると共に、前記中間ブランチの実行優先度は、前記中間ブランチに含まれる前記演算要素の前記演算順序に基づいて前記実行優先度を決定することを定めたルールである。
上記（３）の構成によれば、演算論理によって意図された通りの適正な演算処理が演算論理の入力に対して行われるために必要となるブランチ単位の処理順序を、ブランチの実行優先度に基づいて決定することができる。
【００１１】
（４）幾つかの実施形態では、上記（３）の構成において、
前記実行優先度ルールは第２実行優先度ルールを、さらに含み、
前記第２実行優先度ルールは、前記外部入力ブランチの実行優先度を、前記外部入力ブランチの演算処理の推定演算時間に基づいて決定することを定めたルールである。
上記（４）の構成によれば、推定演算時間に基づいて、複数の外部入力ブランチの間における各々の外部入力ブランチの実行優先度を決定することができ、担当プロセッサ決定ステップと共に、演算論理の複数のブランチの各々の演算処理を担当するプロセッサを決定することができる。
【００１２】
（５）幾つかの実施形態では、上記（４）の構成において、
前記実行優先度ルールは第３実行優先度ルールを、さらに含み、
前記第３実行優先度ルールは、
前記推定演算時間が同じとなる複数の前記外部入力ブランチの実行優先度を、前記外部入力ブランチの各々に含まれる前記演算要素の前記演算順序に基づいて決定することを定めたルールである。
上記（５）の構成によれば、第２実行優先度ルールを適用するにあたって、外部入力ブランチにおいて推定演算時間が同じとなる外部入力ブランチが存在する場合であっても、例えば、各ブランチに含まれる最小の演算順序が小さいほどブランチの実行優先度を高くするなど、ブランチ７の実行優先度を決定することができる。また、担当プロセッサ決定ステップと共に、演算論理の複数のブランチの各々の演算処理を担当するプロセッサを決定することができる。
【００１３】
（６）幾つかの実施形態では、上記（１）〜（５）の構成において、
前記プロセッサの各々には割り当て優先度が設定されており、
前記分担ルールは第１分担ルールを含み、
前記第１分担ルールは、前記割り当て優先度の順にサイクリックに選択される前記複数のプロセッサの各々を、前記実行優先度の順に選択される前記ブランチの各々に割り当てることを定めたルールである。
上記（６）の構成によれば、例えば、推定演算時間の長いブランチの実行優先度を高くし、実行優先度の高いブランチに処理速度が相対的に速いプロセッサを割り当てるなどすることが可能となり、推定演算時間が長いブランチに処理能力の高いプロセッサを割り当てるなどにより、演算論理の処理の高速化を図ることができる。
【００１４】
（７）幾つかの実施形態では、上記（６）の構成において、
前記分担ルールは第２分担ルールを、さらに含み、
前記第２分担ルールは、前記複数のプロセッサの数よりも前記外部入力ブランチの数が多い場合において、前記複数のプロセッサの各々に複数の前記外部入力ブランチを割り当てる時には、前記複数のプロセッサの各々に既に割り当てられた前記外部入力ブランチの推定演算時間の合計が短い前記プロセッサから優先して前記外部入力ブランチを割り当てることを定めたルールである。
上記（７）の構成によれば、プロセッサの待ち時間を短くし、演算論理の演算処理の高速化を図ることができる。
【００１５】
（８）幾つかの実施形態では、上記（６）〜（７）の構成において、
前記分担ルールは第３分担ルールを、さらに含み、
前記第３分担ルールは、前記並列ブランチの演算を実行する前記プロセッサのうちから前記割り当て優先度に従って選択される特定プロセッサを、該並列ブランチの出力信号を入力信号とする前記複入力演算要素を含む前記ブランチに割り当てることを定めたルールである。
上記（８）の構成によれば、各複入力演算要素では、並列ブランチを実行したプロセッサのうちの１つがそのまま複入力演算要素の演算処理を実行するので、待機処理の設定を少なくすることができる。また、複入力演算要素を演算処理するプロセッサを割り当て優先度に従って選択することで、並列化されて同時期に実行可能な複数のブランチに同一のプロセッサが割り当てられる可能性を低減し、処理の高速化を図ることができる。
【００１６】
（９）幾つかの実施形態では、上記（６）〜（８）の構成において、
前記プロセッサが有する前記割り当て優先度は、前記複数のプロセッサの各々による演算処理の性能に基づいて設定される。
上記（９）の構成によれば、演算論理の処理のさらなる高速化を図ることができる。例えば、上述の第３分担ルールが適用されている場合において、前記プロセッサの処理速度が速いほど割り当て優先度が高いように決められた場合には、複入力演算要素を実行するプロセッサがブランチの処理を終えた時点では、他の並列ブランチの処理が完了していることが考えられるため、複入力演算要素の処理を担当するプロセッサは連続的にその実行を開始することができる。
【００１７】
（１０）幾つかの実施形態では、上記（１）〜（９）の構成において、
前記複数のプロセッサの各々が、前記プロセッサ毎に生成された前記命令を逐次実行する実行ステップを、さらに有する。
上記（１０）の構成によれば、複数のプロセッサが、割り当てられた演算論理の一部に相当する演算要素（ブランチ）の演算処理を逐次実行することで、演算論理の全体の演算処理を完了することができ、演算論理の演算処理を高速化することができる。
【００１８】
（１１）本発明の少なくとも一実施形態に係る演算論理の並列処理実行装置は、
上記（１）〜（１０）のいずれか１項に記載の演算論理の並列処理方法により生成された前記命令を実行する演算論理の並列処理実行装置であって、
複数の前記プロセッサを備える。
上記（１１）の構成によれば、マルチコア、マルチプロセッサ、ソフトプロセッサなどの複数のプロセッサにより演算論理を実行することで、演算論理の高速化を図ることができる。
【００１９】
（１２）幾つかの実施形態では、上記（１１）の構成において、
前記プロセッサは、直接アクセスすることが可能な内部メモリを、さらに備え、
前記内部メモリには前記命令の少なくとも一部が格納される。
上記（１２）の構成によれば、内部バスなどを介することなくプロセッサが直接アクセス可能な内部メモリに命令が格納されている。このため、プロセッサは命令コードを内部メモリか取得することが可能であり、プロセッサによる演算要素の演算の処理速度を向上することができる。
【００２０】
（１３）幾つかの実施形態では、上記（１１）〜（１２）の構成において、
前記命令を格納する命令用キャッシュメモリまたは前記命令に対応するデータを格納するデータ用キャッシュメモリの少なくとも一方を前記プロセッサの少なくとも一部が有する。
上記（１３）の構成によれば、プロッセサが命令やデータをキャッシュメモリから取得することで、キャッシュメモリを有するプロセッサによる演算要素の処理速度を向上することができる。
【００２１】
（１４）本発明の少なくとも一実施形態に係る演算論理の並列処理実行装置は、
上記（１）〜（１０）のいずれか１項に記載の演算論理の並列処理方法により生成された前記命令を実行する演算論理の並列処理実行装置であって、
前記並列処理実行装置は複数のプロセッサを備え、
前記プロセッサはＦＰＧＡに設けられた制御回路を含み、
前記制御回路は、少なくとも１つの前記ブランチ毎に、前記ブランチに含まれる前記演算要素の各々の演算に対応する演算回路を、前記ＦＰＧＡのパーシャルコンフィグレーションにより前記ＦＰＧＡに再合成し、前記ＦＰＧＡのパーシャルコンフィグレーションにより再合成された前記演算回路を用いて前記ブランチの演算を実行する。
上記（１４）の構成によれば、パーシャルコンフィグレーションにより、それぞれの演算要素をハードウェア（回路）で実行することで、ソフトウェアによる処理よりも演算論理の高速化を図ることができる。また、演算論理の規模が大きく、全回路を一度に回路化できないような場合であって、パーシャルコンフィグレーションによって演算論理の演算を実行することができる。
【００２２】
（１５）幾つかの実施形態では、上記（１４）の構成において、
前記ＦＰＧＡのパーシャルコンフィグレーションは、前記実行進捗の通知の受信を待っている間に実行される。
上記（１５）の構成によれば、演算要素の演算処理の実行を待機するための待ち時間をパーシャルコンフィグレーションの実行に充てることにより、待ち時間を有効に活用し、演算論理の高速化をさらに図ることができる。
【００２３】
（１６）幾つかの実施形態では、上記（１１）〜（１５）の構成において、
前記複数のプロセッサの各々は、前記演算要素の演算をそれぞれ実行する２つの演算ユニットを含み、
前記演算論理の並列処理実行装置は、
前記２つの演算ユニットのそれぞれの出力を比較する比較ユニットと、
前記比較ユニットによる比較の結果を監視すると共に、前記比較の結果が不一致と判断される場合に前記演算論理の演算処理を中止する機能安全実行ユニットと、をさらに備え、
前記比較ユニットと、前記監視ユニットとは、前記複数のプロセッサの各々に設けられる。
上記（１６）の構成によれば、プラントの制御装置などの制御対象の安全性を確保することができ、ＩＥＣ６１５０８などの機能安全に対応することができる。
【発明の効果】
【００２４】
本発明の少なくとも一実施形態によれば、複数のプロセッサを用いて演算論理の演算処理を実行する演算論理の並列処理方法が提供される。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施形態に係る演算論理の並列処理方法を実行するシステムの構成を示す図である。
【図２】本発明の一実施形態に係る制御装置の概略を示す図である。
【図３】本発明の一実施形態に係る演算論理の並列処理方法を説明するために用いる演算論理を説明するための図である。
【図４】本発明の一実施形態に係る演算論理の並列処理方法のフローを示す図である。
【図５】本発明の一実施形態に係る演算論理の並列処理方法によって決定されたブランチとプロセッサとの対応を説明するための図であり、図３と同一の演算論理を示す図である。
【図６】本発明の一実施形態に係る演算論理が複数のプロセッサにより実行される際のタイムチャートを示す図である。
【図７】本発明の一実施形態に係る制御装置のハードウェア構成を示す図である。
【図８】本発明の一実施形態に係る制御装置のハードウェア構成を示す図である。
【図９】本発明の一実施形態に係る制御装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００２６】
以下、添付図面を参照して本発明の幾つかの実施形態について説明する。ただし、一の構成要素を「備える」、「具える」、「具備する」、「含む」、又は、「有する」という表現は、他の構成要素の存在を除外する排他的な表現ではない。
【００２７】
図１は、本発明の一実施形態に係る演算論理５の並列処理方法を実行するシステムを示す図である。図１には、火力発電所などの発電所の制御ネットワーク９が例示されている。この制御ネットワーク９はイーサネット（登録商標）で構築されたローカルエリアネットワーク（ＬＡＮ）であり、様々な装置が接続される。例えば、図１に例示されるように、制御ネットワーク９には、プラントの制御等を行うコントローラとなるプロセスステーション（ＭＰＳ）、現場の製造機器の制御を行う装置との入出力や各種演算処理を行うためのローカルコントローラであるコンパクトプロセスステーション（ＣＰＳ）などの制御装置２や、これらの制御装置２などで演算される演算論理５（制御ロジックや処理ロジック）の変更・作成（後述）などを含めたシステム全体の保守や登録を行う保守ツール１（ＥＭＳ：Ｅｎｇｉｎｅｅｒｉｎｇ  ＆  Ｍａｉｎｔｅｎａｎｃｅ  Ｓｔａｔｉｏｎ）などが接続される。そして、本発明の一実施形態に係る演算論理５の並列処理方法（以下、適宜、並列処理方法）は、以下に説明するように、上記の保守ツール１および制御装置２によって実行されている。
【００２８】
図１の保守ツール１（ＥＭＳ）は一般的なコンピュータで構成されており、ＣＰＵと、主記憶装置、補助記憶装置、マウス、キーボード、表示装置（ディスプレイ）などの入出力装置、ネットワークインタフェースといった周知な構成を有している。また、保守ツール１（ＥＭＳ）はロジックデータ作成機能（制御および処理ロジック記述ソフトウェア）を有している。これによって、ユーザは、プログラミングをすることなく、ディスプレイ画面に制御ロジック図などの演算論理図を描くだけで自働的に実行プログラム３（ロジック演算プログラムコード）を生成することが可能となっている。具体的には、ロジックデータ作成機能では、入力信号Ｓｉに対して実行する複数種類の演算処理がそれぞれ標準ロジック要素（演算要素６）として予め用意されている。そして、ユーザは、マウスなどの入力装置を操作することでドラック＆ドロップ作業により、必要な標準ロジック要素に対応するシンボルマーク（ブロック）を、各々の標準ロジック要素の出力信号Ｓｏが他の標準ロジック要素の入力信号Ｓｉとなるようにディスプレイ上で配置・接続し、所望の制御ロジックなどを生成することが可能となっている。この標準ロジック要素（演算要素６）の各々は、例えば、関数、オブジェクト、モジュール、演算回路などとして演算処理単位（機能単位）で実現されるものである。
【００２９】
また、作成された演算論理５が保守ツール１などでコンパイルされることで、実行プログラム３が生成される。図１に示される実施形態では、実行プログラム３は、制御ネットワーク９を介して保守ツール１から制御装置２にダウンロードされるよう構成されている。
【００３０】
一方、制御装置２（演算論理５の並列処理実行装置）は、保守ツール１で生成された上述の実行プログラム３を実行する装置であり、実行プログラム３に従って、制御装置２が取り込む信号などに対して演算論理５で定義される演算処理を実行する装置となる。図２は、本発明の一実施形態に係る制御装置２の概略を示す図である。図２に示されるように、制御装置２は複数のプロセッサ２１と主メモリ２２とを有しており、両者は内部バス２３を介して相互に接続される（後述する図７〜図９も同様）。また、図２に示されるように、制御装置２の主メモリ２２上には実行プログラム３および構造体４（後述）が展開されることで、複数のプロセッサ２１は、構造体４を使用しながら実行プログラム３による命令に従って演算論理５の演算処理を実行する。
【００３１】
ここで、実行プログラム３について説明すると、図２に示されるように、実行プログラム３は、複数のプロセッサ２１毎に専用のプログラムコード３２を有しており、各々のプログラムコード３２は割り当てられた各プロセッサ２１の各々によって実行されるように生成される。また、実行プログラム３（プログラムコード３２）には演算論理５の動作を保証するための待機処理の設定（後述する通知送出設定Ｔと実行待機設定Ｗ）が組み込まれている。すなわち、一般に、制御ロジックなどの演算論理５は、演算論理５に入力される信号（情報）に対して意図した処理順序で演算処理を順次実行することにより、意図した演算処理を入力された信号に対して実行することができ、演算論理５の動作を保証することができる。ところが、本並列処理方法では、複数のプロセッサ２１が、各々のプログラムコード３２に従って演算論理５の一部の演算処理を分担して実行することで全体の演算論理５の演算処理を完了する。このため、各プロセッサ２１は他のプロセッサ２１による演算処理の進捗状況を確認する必要がある。そこで、この待機処理によって、各プロセッサ２１は他のプロセッサ２１と演算処理の実行進捗を通知し合うと共に、他のプロセッサ２１からの必要な実行進捗の通知（以下、適宜、実行進捗通知Ｎ）を受信するまで演算処理の実行を途中で待機し、所望の実行進捗通知Ｎが受信されたのを確認して演算処理を継続（再開）する。
【００３２】
より詳細には、複数種類の演算要素６のうち、複数の入力信号に対して演算処理を実行する演算要素６（後述する複入力演算要素６２）は、演算処理の実行開始の前に、その複数の入力信号Ｓｉが全て入力されている必要がある。つまり、この複入力演算要素６２（後述）の演算処理を実行するプロセッサ２１は、複数の入力信号Ｓｉのうちの１つでも他のプロセッサ２１の演算処理により生成されるものがある場合には、他のプロセッサ２１による演算処理によって生成されることになるこれらの入力信号Ｓｉの全てが確実に入力されるのを待って、その複入力演算要素６２の演算処理を開始する必要がある。このため、各々のプロセッサ２１は、複入力演算要素６２への入力信号Ｓｉの入力を待機処理によって待ちながら、割り当てられた演算要素６を順次実行する。
【００３３】
一方、構造体４は、演算論理５を構成する演算要素６の各々に対して設けられており、演算要素６の各々の演算処理に必要な管理情報を格納するための情報セットである。図２に示される実施形態では、構造体４は、少なくとも１つの入力信号フィールド４１（図２のＩｎｐｕｔ）と、出力信号フィールド４２（図２のＯｕｔｐｕｔ）と、待機処理設定フィールド４３（図２のｗａｉｔ）と、ポインタフィールド４４（図２のＰｏｉｎｔｅｒ）とを有している。上記の入力信号フィールド４１は演算要素６の入力信号Ｓｉに関連する情報を格納するフィールドである。入力信号フィールド４１は、その演算要素６の１以上の入力信号Ｓｉの各々に対して個別にフィールドが設けられており、例えば、各々の演算要素６の入力信号Ｓｉの各々を生成する他の演算要素６の構造体４の出力信号フィールド４２のポインタや、他の演算要素６の出力信号Ｓｏが格納される。また、出力信号フィールド４２は入力信号Ｓｉを演算処理することによって生成される出力信号Ｓｏに関連する情報を格納するフィールドであり、例えば、演算要素６が生成した出力信号Ｓｏが格納される。待機処理設定フィールド４３は上述の待機処理に関連する情報を格納するフィールドであり、後述する通知送出設定フィールド４３ａや実行待機設定フィールド４３ｂとなる。また、上記のポインタフィールド４４は演算論理５の演算順序Ｆに関連する情報を格納するフィールドである。例えば、各演算要素６の次の演算順序Ｆとなる他の演算要素６の構造体４のメモリ上のアドレスが格納される。そして、このポインタフィールド４４によって、演算論理５を構成する各々の演算要素６の構造体４がつながることで、複数の構造体４によってリスト構造が形成される。
【００３４】
図２に示される実施形態では、制御装置２はＣＰＵ−Ａ、ＣＰＵ−Ｂ、ＣＰＵ−Ｃの３つのプロセッサ２１を有しており、各々のプロセッサ２１によって実行されるためのプログラムコード３２であるＰＧ−Ａ、ＰＧ−Ｂ、ＰＧ−Ｃを含む実行プログラム３が主メモリ２２（例えば、ＳＤＲＡＭ）に展開されている。また、各プロセッサ２１は、他の全てのプロセッサ２１から実行進捗通知Ｎをそれぞれ受信することが可能なように構成されており、プロセッサ２１同士が相互にフルメッシュのトポロジーで接続されている。なお、図２ではプロセッサ２１は３つであるが、２以上であればプロセッサ２１の数は任意である。
【００３５】
以上の通り、本発明の並列処理方法では、演算論理５は、複数のプロセッサ２１のそれぞれによって演算論理５の全体が部分的に演算処理されることで、演算論理５の全体の演算処理が完了するように演算論理５の並列化処理を行う。図１〜図２に示される実施形態では、保守ツール１がこの並列化処理を担当している。また、この並列化処理によって生成された実行プログラム３は、複数のプロセッサ２１のそれぞれが割り当てられた演算論理５の演算処理を個別に実行するためのプログラムコード３２（実行プログラム３）から構成されている。このため、制御装置２が実行プログラム３の実行を開始すると、制御装置２の有する各々のプロセッサ２１はそれぞれのプログラムコード３２を実行することになり、演算論理５の演算処理が並列化されて実行される。なお、他の幾つかの実施形態では、１つの装置において演算論理５の並列化処理および演算実行がなされても良く、例えば、保守ツール１あるいは制御装置２のみで本並列処理方法が実行されても良い。
【００３６】
次に、演算論理５について図３を用いて説明する。図３は、本発明の一実施形態に係る演算論理５の並列処理方法を説明するために用いる演算論理５を示す図である。図３に示されるように、演算論理５は複数の演算要素６で構成される。また、演算論理５は、複数の演算要素６が、各演算要素６の出力信号Ｓｏが他の演算要素６の入力信号Ｓｉとなるように演算要素６の複数が処理順序に従って段階的に組み合わされて構成される。この複数の演算要素６の並びによって決められる処理順序に従って、演算論理５は、複数の演算要素６の各々で定義される演算処理を外部から入力される外部入力信号Ｅに対して順次実行し、演算論理５の演算結果となる外部出力信号Ｒを出力する。
【００３７】
また、演算論理５において、各演算要素６は演算順序Ｆを有している（図３参照）。この演算順序Ｆは演算要素６の処理順序を決めるために利用され、例えば、演算順序Ｆの順番で演算論理５を構成する全ての演算要素６を順次実行すると、意図された演算処理が実行されるといった性質を有するものである。この演算順序Ｆは、例えば、構造体４に演算順序を示す情報を格納するためのフィールドを設けることで、各々の演算要素６演算順序Ｆが示されても良い。あるいは、演算順序Ｆは、リスト構造を有する上述の構造体４の並び順によって示されても良い。
【００３８】
ここで、演算要素６について説明すると、演算要素６は、演算処理する入力信号Ｓｉの態様に応じて大きく２種類に分類される。すなわち、１つの入力信号Ｓｉに基づいて出力信号Ｓｏを生成する単入力演算要素６１と、複数の入力信号Ｓｉに基づいて出力信号Ｓｏを生成する複入力演算要素６２である。また、演算論理５を構成するこれらの演算要素６の幾つかは、その役割によって、演算論理５の外部から入力される外部入力信号Ｅに基づいて出力信号Ｓｏを生成する外部入力演算要素６３となる。また、演算論理５を構成する演算要素６の幾つかは、単入力演算要素６１で生成される出力信号Ｓｏ、複入力演算要素６２で生成される出力信号Ｓｏ、及び外部入力演算要素６３で生成される出力信号Ｓｏ、の内の少なくとも一つの出力信号Ｓｏを入力信号Ｓｉとして、該入力信号Ｓｉに基づいて演算論理５の外部に出力される外部出力信号Ｒを生成する外部出力演算要素６５となる。
【００３９】
図３に例示される演算論理５を説明すると、演算論理５は１７個の演算要素６により構成されており、演算要素６の各々の演算順序Ｆは１〜１７となる。なお、以下では、各演算要素６の演算順序番号を、適宜、ｎ番（ｎ＝１、・・・、１７）として示す。また、演算論理５は、４つの外部入力信号Ｅ（Ｅａ、Ｅｂ、Ｅｃ、Ｅｄ）から１つの外部出力信号Ｒ（演算結果）を出力している。具体的には、演算順序番号が１番、４番、８番、１１番の外部入力演算要素６３（図３では単入力演算要素６１）から入力された４つの外部入力信号Ｅの各々が、１７個の複数の演算要素６によって処理順序で演算処理され、最終的に、１７番の外部出力演算要素６５（図３では単入力演算要素６１）から外部出力信号Ｒ（演算結果）が出力されている。例えば、外部入力信号Ｅは、制御対象となるタービンやボイラなどの計装点に設置された各種センサによるタービンの回転速度、温度、圧力などの検出値であっても良く、これらの外部入力信号Ｅが演算論理５によって演算処理されることで、タービンガバナ制御、ボイラ自動制御、プラント自動起動停止制御に関する制御信号が外部出力信号Ｒとして出力されても良い。なお、図３に例示されてはいないが、１つの演算要素６の出力信号Ｓｏが複数の演算要素６に入力信号Ｓｉとして入力されるような演算要素６が存在しても良い。
【００４０】
言い換えると、図３の演算論理５は、外部出力信号Ｒを直接出力する１７番の外部出力演算要素６５をルートとし、外部入力信号Ｅが入力される１番、４番、８番、１１番の外部入力演算要素６３をリーフとしたツリー構造をしている。また、ルートおよびリーフ以外の両者の間をつなぐ演算要素６が中間ノード（２番、３番、５番、６番、７番、９番、１０番、１２番〜１７番）となっている。
【００４１】
具体的には、リーフである１番の外部入力演算要素６３を先頭に、１番、２番、３番の処理順序で単入力演算要素６１が連続して分岐なく並ぶ部分（後述のブランチ７）によって生成される出力信号Ｓｏと、リーフである４番の外部入力演算要素６３を先頭に、４番、５番、６番の処理順序で単入力演算要素６１が連続して分岐なく並ぶ部分（後述のブランチ７）によって生成される出力信号Ｓｏとの両方（後述の並列ブランチ７２）が、７番の複入力演算要素６２の２つの入力信号Ｓｉとなるように、複数の演算要素６（１番〜７番）が接続されている。他方、リーフである８番の外部入力演算要素６３を先頭に、８番、９番、１０番の処理順序で単入力演算要素６１が連続して分岐なく並ぶ部分によって生成される出力信号Ｓｏと、リーフである１１番の外部入力演算要素６３を先頭に、１１番、１２番、１３番、１４番の処理順序で単入力演算要素６１が連続して分岐なく並ぶ部分によって生成される出力信号Ｓｏとの両方が、１５番の複入力演算要素６２の２つの入力信号Ｓｉとなるように複数の演算要素６（８番〜１５番）が接続されている。また、前述の７番および１５番の各複入力演算要素６２の出力信号Ｓｏの両方が１６番の複入力演算要素６２の２つの入力信号Ｓｉとなるように、複数の演算要素６（７番、１５番、１６番）が接続されている。最後に、１６番の複入力演算要素６２の出力信号Ｓｏがルートである１７番の外部出力演算要素６５の入力信号Ｓｉとなるように、複数の演算要素６（１６番〜１７番）が接続されている。そして、ルートとなる１７番の外部出力演算要素６５から演算論理５の演算結果となる外部出力信号Ｒが出力されている。
【００４２】
なお、図３の１番〜１７番の各演算要素６には、演算要素６の処理概要を表す記号である。簡単に説明すると、記号ＡＩが記された１番、４番、８番、１１番の外部入力演算要素６３はアナログの外部入力信号Ｅに対してデジタル処理を実行することを示す。記号ＬＭＴが記された２番、５番、９番、１２番の演算要素６は入力信号Ｓｉに対して信号上下制限処理を実行することを示す。記号ＬＡＧが記された３番、６番、１０番、１３番の演算要素６は入力信号Ｓｉに対して一次遅れフィルター処理を実行することを示す。記号ＡＢＳが記された１４番の演算要素６は入力信号Ｓｉに対してその絶対値を演算する処理を実行することを示す。記号＋が記された７番の演算要素６は２つの入力信号Ｓｉの加算処理を実行することを示す。記号−が記された１５番〜１６番の演算要素６は２つの入力信号Ｓｉの減算処理を示す。そして、記号ＡＯが記された１７番の外部出力演算要素６５は入力信号Ｓｉに対してアナログ処理を実行することを示す。なお、演算要素６の演算処理は上述した処理に限定されないことは当然であり、これら以外にも様々な演算処理が演算要素６（標準ロジック要素）として用意されても良い。
【００４３】
次に、上述したような構造を有する演算論理５の並列処理方法について図４〜図６を用いて説明する。図４は、本発明の一実施形態に係る演算論理５の並列処理方法のフローを示す図である。図５は、本発明の一実施形態に係る演算論理５の並列処理方法によって決定されたブランチ７とプロセッサ２１との対応を説明するための図であり、演算論理５は図３と同一である。また、図６は、本発明の一実施形態に係る演算論理５が複数のプロセッサ２１により実行される際のタイムチャートを示す図である。そして、図４に示されるように、演算論理５の並列処理方法は、ブランチ分割ステップ（Ｓ４１）と、ブランチ優先度決定ステップ（Ｓ４２）と、担当プロセッサ決定ステップ（Ｓ４３）と、通知送出設定ステップ（Ｓ４４）と、実行待機設定ステップ（Ｓ４５）と、命令生成ステップ（Ｓ４６）と、を備える。これらの各ステップ（Ｓ４１〜Ｓ４６）は、各々のステップを実行するためのソフトウェアなどで実現される機能部（ブランチ分割部、ブランチ優先度決定部、担当プロセッサ決定部、通知送出設定部、実行待機設定部、命令生成部）を上述の保守ツール１が備えることによって実行される。図４に示される実施形態では、並列処理方法は、ブランチ分割ステップ（Ｓ４１）の前に対象となる演算論理５を取得するステップ（Ｓ４０）を備え、命令生成ステップ（Ｓ４６）の後に、制御装置２などの複数のプロセッサにより命令（実行プログラム３）を実行する実行ステップ（Ｓ４７）を備えている。
以下、図４の各ステップを順に説明する。
【００４４】
まず、図４のステップＳ４０において、所望の演算論理５に対して並列処理方法を開始するために、処理対象となる演算論理５（図５）が取得される。具体的には、保守ツール１上でユーザが演算論理５を作成、修正したり、保守ツール１の補助記憶装置やネットワーク（制御ネットワーク９など）に接続される記憶装置に格納されている演算論理５を指定するなどによって演算論理５が準備されても良い。そして、ユーザが実行開始を実行ボタンのクリックなどで指示することで、処理対象となる演算論理５が取得されても良い。こうして取得された演算論理５に対して、以下に説明する各ステップが順番に実行される。
【００４５】
図４のステップＳ４１では、ブランチ分割ステップ（Ｓ４１）が実行される。ブランチ分割ステップ（Ｓ４１）は、演算論理５の一部であって、複入力演算要素６２の複数の入力信号Ｓｉをそれぞれ出力するための並列ブランチ７２であって、少なくとも１つの演算要素６で構成されるブランチ７の複数からなる並列ブランチ７２、及び、演算論理５の一部であって、外部出力演算要素６５の外部出力信号Ｒを出力するための、少なくとも１つの演算要素６で構成される外部出力ブランチ７５、を含む複数のブランチ７に分割するステップである。つまり、ブランチ７は、ブランチ７の先頭の演算要素６の入力信号Ｓｉに対して、各プロセッサ２１が、ブランチ７を構成する演算要素６を演算順序Ｆに従って連続的に独立して演算処理をすることが可能な演算要素６のグループである。このため、各プロセッサ２１は、上述した待機処理なしに各ブランチ７の演算処理を進めることが可能となる。なお、待機処理は、ブランチ７を実行した後に次のブランチ７を実行する際に要求され得ることになる。
【００４６】
図４〜図６に例示される実施形態では、図示されるように、ブランチ分割ステップ（Ｓ４１）によって、ブランチ７のそれぞれが、外部入力演算要素６３あるいは複入力演算要素６２のいずれか一方を１つ含むよう演算論理５が分割されている。具体的には、演算順序Ｆが１番、４番、８番、１１番の外部入力演算要素６３の各々から、演算順序Ｆに従って（１７番の外部出力演算要素６５の方向に向かって）演算論理５を辿ったときに、最初に見つかる複入力演算要素６２である７番、１５番の前までの演算要素６がそれぞれ１つのブランチ７となっている。つまり、１番〜３番の演算要素６と、４番〜６番の演算要素６と、８番〜１０番の演算要素６と、１１番〜１４番の演算要素６とによって、４つのブランチ７が構成されている。同時に、１番〜３番の演算要素６で構成されるブランチ７および４番〜６番の演算要素６で構成されるブランチ７の出力信号Ｓｏは、同一の複入力演算要素６２（７番）の入力信号Ｓｉとなっており、並列ブランチ７２を構成している。
【００４７】
同様に、上述の７番、１５番の複入力演算要素６２からそれぞれ演算順序Ｆに従って演算論理５を辿ったときに、最初に見つかる１６番の複入力演算要素６２の前までの演算要素６が、それぞれ１つのブランチ７となっている。つまり、１６番と７番の演算要素６の間、１６番と１５番の演算要素６の間には他の演算要素６がなく、７番と１５番の各々の演算要素６によって２つのブランチ７が構成されている。同時に、７番の演算要素６で構成されるブランチ７および１５番の演算要素６で構成されるブランチ７の出力信号Ｓｏは、同一の複入力演算要素６２（１６番）の入力信号Ｓｉとなっており、並列ブランチ７２を構成している。
【００４８】
同様に、上述の１６番の複入力演算要素６２から演算順序Ｆに従って演算論理５を辿ったときには複入力演算要素６２はなく、１７番の外部出力演算要素６５が見つかるため、１６番〜１７番の演算要素６によって１つのブランチ７が構成されている。こうして、図５の演算論理５は、７つのブランチ７に分けられている。
【００４９】
すなわち、図４〜図６に示される実施形態では、各ブランチ７における先頭の演算要素６と末尾の演算要素６との間に複入力演算要素６２となる演算要素６がないように、各ブランチ７が構成される。このため、複入力演算要素６２の複数の入力信号Ｓｉを出力する各ブランチ７の演算処理に対して別々のプロセッサ２１を割り当てることが可能となる。つまり、各ブランチ７を並列処理が可能な最小の単位とすることができ、図４〜図６に示される実施形態によって、下記に説明する他の幾つかの実施形態よりも、演算論理５の並列処理化をさらに図ることができる。
【００５０】
他の幾つかの実施形態では、演算論理５には、各ブランチ７において、先頭の演算要素６と末尾の演算要素６との間に複入力演算要素６２があるようなブランチ７が含まれても良い。例えば、図５において、１つのブランチ７が１番〜７番の演算要素６によって構成されても良いし、１つのブランチ７が８番〜１５番の演算要素６によって構成されても良い。この場合であっても、演算論理５は複数のプロセッサ２１で並列に処理が可能にブランチ分けされており、演算順序Ｆに従って演算要素６の演算処理を順番に実行する場合よりも、演算処理の高速化を図ることができる。
【００５１】
図４の次のステップＳ４２では、ブランチ優先度決定ステップが実行される。ブランチ優先度決定ステップ（Ｓ４２）は、複数のブランチ７の各々の実行優先度Ｐｂを所定の実行優先度ルールＲｂに基づいて決定するステップである。なお、このブランチ７の実行優先度Ｐｂは、後述するように、演算論理５に含まれる複数のブランチ７の各々の演算処理の実行順序を決定する際に考慮されるものであると共に、各々のブランチ７の演算処理の実行を担当するプロセッサ２１の割り当てにおいて考慮されるものである。
【００５２】
上記の実行優先度ルールＲｂについて詳述すると、図４〜図６に示される実施形態では、演算論理５は、外部入力演算要素６３を含むブランチ７である外部入力ブランチ７３と、外部出力演算要素６５を含むブランチ７である外部出力ブランチ７５と、外部入力ブランチ７３と外部出力ブランチ７５との間に位置するブランチ７である中間ブランチ７４と、で構成されており、実行優先度ルールＲｂは第１実行優先度ルールＲｂ１を含んでいる。そして、この第１実行優先度ルールＲｂ１は、外部入力ブランチ７３の実行優先度Ｐｂは中間ブランチ７４および外部出力ブランチ７５よりも高く、外部出力ブランチ７５の実行優先度Ｐｂは中間ブランチ７４および外部入力ブランチ７３よりも低く決定するものであると共に、中間ブランチ７４の実行優先度Ｐｂは、中間ブランチ７４に含まれる演算要素６の演算順序Ｆに基づいて実行優先度Ｐｂを決定することを定めたルールである。
【００５３】
すなわち、外部入力ブランチ７３の各々は、外部入力演算要素６３となる先頭から末尾まで独立に演算処理を実行することが可能となっている。一方、中間ブランチや外部出力ブランチ７５の演算処理の実行は、外部入力ブランチ７３の演算処理の完了後でなければ開始することはできない。このため、外部入力ブランチ７３の実行優先度Ｐｂは最も高い。また、外部出力ブランチ７５の演算処理の実行は、外部出力ブランチ７５につながる全てのブランチ７の演算処理が完了しなければ開始することができず、実行優先度Ｐｂは最も低い。図５の演算論理５は７つのブランチ７を有し、外部入力ブランチ７３の数は４、中間ブランチ７４の数は２、外部出力ブランチ７５の数は１である。また、ブランチ７の実行優先度Ｐｂはブランチ７の数に応じて、優先度の高い方から低い方へ１〜７段階となる。このため、外部入力ブランチ７３には実行優先度Ｐｂ１〜Ｐｂ４が割り当てられ、中間ブランチ７４には実行優先度Ｐｂ５〜Ｐｂ６が割り当てられ、外部出力ブランチ７５には実行優先度Ｐｂ７が割り当てられている。
【００５４】
また、中間ブランチ７４は、それぞれの外部入力ブランチ７３の側から外部出力ブランチ７５までの配置された順番で演算処理が行われる必要がある。ところが、異なる外部入力ブランチ７３の後段に配置される中間ブランチ７４同士では、の実行優先度Ｐｂは、その後段において、同一の複入力演算要素６２の入力信号Ｓｉとならない限り任意である。しかし、中間ブランチ７４において複入力演算要素６２の演算処理を実行するにはその全ての入力信号Ｓｉが入力されている必要があり、このようなブランチ７同士は歩調を合わせて演算処理を進める必要がある。そこで、図４〜図６に示される実施形態では、ブランチ７に含まれる演算要素６のうちの最小の演算順序Ｆなどを基準（基準番号）とし、この基準番号の大小に基づいてブランチ７の実行優先度Ｐｂを決定している。図５の例示では、中間ブランチ７４は、演算順序Ｆが７番の演算要素６を含むブランチ７と、演算順序Ｆの１５番の演算要素６を含むブランチ７であり、基準番号はそれぞれ７番と１５番となる。このため、７番の演算要素６を含むブランチ７には実行優先度Ｐｂ５が割り当てられ、１５番の演算要素６を含むブランチ７には実行優先度Ｐｂ６が割り当てられている。なお、演算論理５が意図された演算処理となるように基準番号を決められれば良く、ブランチ７に含まれる演算要素６のうちの最大の演算順序Ｆを基準番号としたり、ブランチ７に含まれる演算要素６の演算順序を算術して基準番号を決めても良い。これによって、演算論理５によって意図された通りの適正な演算処理が演算論理５の入力に対して行われるために必要なブランチ７単位の処理順序を、ブランチ７の実行優先度Ｐｂに基づいて決定することができる。
【００５５】
また、複数の外部入力ブランチ７３の間における実行優先度Ｐｂは任意であるが、実行優先度ルールＲｂは、上記の第１実行優先度ルールＲｂ１に加えて、さらに、外部入力ブランチ７３同士の実行優先度Ｐｂを決定するためのルールを有しても良い。すなわち、図４〜図６に示される実施形態では、実行優先度ルールＲｂは第２実行優先度ルールＲｂ２をさらに含み、第２実行優先度ルールＲｂ２は、外部入力ブランチ７３の実行優先度Ｐｂを、外部入力ブランチ７３の演算処理の推定演算時間に基づいて決定することを定めたルールとなっている。図４〜図６に示される実施形態では、第２実行優先度ルールＲｂ２によって、外部入力ブランチ７３の推定演算時間が長いほど、外部入力ブランチ７３の各々の間におけるブランチ７の実行優先度Ｐｂが高くなるように設定している。この推定演算時間は、幾つかの実施形態では、ブランチ７に含まれる演算要素６の数に応じて決めても良く、ブランチ７に含まれる演算要素６の数多いほど推定演算時間が長いと判断しても良い。また、通常は、演算要素６の演算処理の種類（内容）によって演算時間は異なる。このため、他の幾つかの実施形態では、演算要素６の演算処理の種類（内容）および数に基づいて実行時間を推定しても良い。例えば、演算要素６の演算処理の種類（内容）によって、標準的（平均的）な演算時間に重み付けをするなどすることで演算要素６の種類毎に演算時間を用意しても良い。この場合には、ブランチ７に含まれる演算要素６の種類に対応する演算時間を全て合計することで、ブランチ７の推定演算時間を見積もることが可能となる。
【００５６】
図５の例示では、外部入力ブランチ７３の数は４であり、１番、４番、８番の演算要素６を含むブランチ７の演算要素数は全て同じ３であり、演算要素６の種類も同じである。一方、１１番の演算要素６を含むブランチ７の演算要素数は４であると共に、他の外部入力ブランチ７３と同じ種類の演算要素６に加えて、記号ＡＢＳの演算処理（１４番の演算要素６）を含んでいる。このため、推定演算時間は、演算要素６の数の観点あるいは演算要素６の種類の観点からみても、１１番の演算要素６を含むブランチ７が最も長い。このため、第２実行優先度ルールＲｂ２を適用することで、１１番の演算要素６を含むブランチ７が最も高い実行優先度Ｐｂを有する第１ブランチ７ａとなる。これによって、推定演算時間に基づいて、外部入力ブランチ７３の間における各々の外部入力ブランチ７３の実行優先度Ｐｂを決定することができ、後述する担当プロセッサ決定ステップ（Ｓ４３）と共に、演算論理５の複数のブランチ７の各々の演算処理を担当するプロセッサ２１を決定することができる。
【００５７】
また、実行優先度ルールＲｂは、第２実行優先度ルールＲｂ２を適用した時に、推定演算時間が同じとなるブランチ７の実行優先度Ｐｂを決定するための第３実行優先度ルールＲｂ３をさらに含んでも良い。この第３実行優先度ルールＲｂ３は推定演算時間が同じとなる複数の外部入力ブランチ７３の実行優先度Ｐｂを、外部入力ブランチ７３の各々に含まれる演算要素６の演算順序Ｆに基づいて決定することを定めたルールとなっている。図４〜図６に示される実施形態では、第３実行優先度ルールＲｂ３は、外部入力ブランチ７３の前述した基準番号が小さいほど外部入力ブランチ７３の実行優先度Ｐｂを高くすることを定めている。そして、１番、４番、８番の演算要素６を含む外部入力ブランチ７３の推定演算時間は同じとなっており、基準番号はそれぞれ１番、４番、８番である。このため、第３実行優先度ルールを適用することで、１番の演算要素６を含むブランチ７が第２ブランチ７ｂ、４番の演算要素６を含むブランチ７が第３ブランチ７ｃ、８番の演算要素６を含むブランチ７が第４ブランチ７ｄとなっている。なお、ブランチ７の実行優先度Ｐｂは、第１から昇順に低くなるものとする。
【００５８】
これによって、第２実行優先度ルールＲｂ２を適用するにあたって、外部入力ブランチ７３において推定演算時間が同じとなる外部入力ブランチ７３が存在する場合であっても、外部入力ブランチ７３の実行優先度Ｐｂを決定することができる。また、後述する担当プロセッサ決定ステップ（Ｓ４３）と共に、演算論理５の複数のブランチ７の各々の演算処理を担当するプロセッサ２１を決定することができる。
【００５９】
図４の次のステップＳ４３では、担当プロセッサ決定ステップが実行される。担当プロセッサ決定ステップ（Ｓ４３）は、制御装置２が有する複数のプロセッサ２１のうちから、複数のブランチ７の各々の演算を実行する１つのプロセッサ２１を所定の分担ルールＲｃに基づいてブランチ７毎に決定するステップである。すなわち、演算論理５に含まれるブランチ７の演算処理のそれぞれは、制御装置２の有するプロセッサ２１のうちから選択されたいずれか１つによって実行されるところ、分担ルールＲｃは、各ブランチ７の演算処理を実行するプロセッサ２１を決定することができれば任意のルールで良い。
【００６０】
図４〜図５に示される実施形態での分担ルールＲｃを説明すると、分担ルールＲｃを実行するために、プロセッサ２１の各々には割り当て優先度Ｐｃが設定されている。そして、第１分担ルールＲｃ１は、割り当て優先度Ｐｃの順にサイクリックに選択される複数のプロセッサ２１の各々を、実行優先度Ｐｂの順に選択されるブランチ７の各々に割り当てることを定めたルールとなっている。
【００６１】
上記のプロセッサ２１の割り当て優先度Ｐｃは、制御装置２が備える複数のプロセッサ２１に対して任意に設定しても良い。図４〜図６に示される実施形態では、複数のプロセッサ２１の各々は、内部メモリ２４などの周辺も含めて同じ構成を有しており、プロセッサ２１による演算処理の処理速度などの性能は同じとなっている。このため、割り当て優先度Ｐｃは便宜的に決定されており、優先度が高い方からＣＰＵ−Ｃ、ＣＰＵ−Ｂ、ＣＰＵ−Ａとされている（ＣＰＵ−Ｃ＞ＣＰＵ−Ｂ＞ＣＰＵ−Ａ）。他の幾つかの実施形態では、割り当て優先度Ｐｃは、複数のプロセッサ２１の各々による演算処理の性能に基づいて決定されており、この性能が高いプロセッサ２１ほど割り当て優先度Ｐｃを高くしたり、この性能が低いプロセッサ２１ほど割り当て優先度Ｐｃを高くするように決定されても良い。
【００６２】
このため、図４〜図６に示される実施形態では、ＣＰＵ−Ｃ、ＣＰＵ−Ｂ、ＣＰＵ−Ａの順番でサイクリックに選択されるプロセッサ２１の各々に、実行優先度Ｐｂの高い方から順にブランチが割り当てられる。具体的には、上述したようにブランチ７の実行優先度Ｐｂは第１ブランチ７ａが最も高く、ブランチ７の番号が大きくなるに従って順次低くなっている。このため、第１分担ルールＲｃ１が適用されることで、第１ブランチ７ａ、第２ブランチ７ｂ、第３ブランチ７ｃを実行するプロセッサ２１は、それぞれＣＰＵ−Ｃ、ＣＰＵ−Ｂ、ＣＰＵ−Ａとなっている。
【００６３】
また、第４番目の割り当て優先度Ｐｃを有する第４ブランチ７ｄは、図４〜図６に示される実施形態では、ＣＰＵ−Ｂとなっている。これは、下記に説明する第２分担ルールＲｃ２が適用されたことによる。すなわち、図４〜図６に示される実施形態では、分担ルールＲｃは第２分担ルールＲｃ２をさらに含んでいる。また、第２分担ルールＲｃ２は、複数のプロセッサ２１の数よりも外部入力ブランチ７３の数が多い場合において、複数のプロセッサ２１の各々に複数の外部入力ブランチ７３を割り当てる時には、複数のプロセッサ２１の各々に既に割り当てられた外部入力ブランチ７３の推定演算時間の合計が短いプロセッサ２１から優先して外部入力ブランチ７３を割り当てることを定めたルールとなっている。
【００６４】
具体的に説明すると、図５の演算論理５は、プロセッサ２１の数は３であり、外部入力ブランチ７３の数は４であるため、第４ブランチ７ｄにプロセッサ２１を割り当てるときには、第２分担ルールＲｃ２が適用される。この際、ＣＰＵ−Ｃに既に割り当てられた第１ブランチ７ａの推定演算時間は、上述したようにＣＰＵ−ＡやＣＰＵ−Ｂのそれよりも長い。また、ＣＰＵ−Ａに割り当てられた第３ブランチ７ｃとＣＰＵ−Ｂに既に割り当てられた第２ブランチ７ｂの推定演算時間は等しい。このため、第１分担ルールＲｃ１および第２分担ルールＲｃ２が適用されることで、割り当て優先度ＰｃがＣＰＵ−Ｃの次に高いＣＰＵ−Ｂが第４ブランチ７ｄに割り当てられている。また、この第２分担ルールＲｃ２によって、プロセッサ２１の待ち時間を短くし、演算論理５の演算処理の高速化を図っている。
【００６５】
詳述すると、各々の演算要素６の演算処理の実行時間を全て同じ１と仮定した場合、第１分担ルールＲｃ１および第２分担ルールＲｃ２を適用することで、図５の演算論理５の演算処理の実行時間は９となる。一方、第２分担ルールＲｃ２が適用されていない実施形態を考えると、図５において、第４ブランチ７ｄの実行は第１分担ルールＲｃ１によりＣＰＵ−Ｃとなる。ところが、第１ブランチ７ａの推定演算時間は他の外部入力ブランチ７３よりも１つの演算要素６の演算処理分だけ長い。このため、第１ブランチ７ａの演算処理をＣＰＵ−Ｃが完了する前に、ＣＰＵ−ＡおよびＣＰＵ−Ｂの各々による第３ブランチ７ｃのおよび第２ブランチ７ｂの演算処理は１演算要素分だけ早く完了することになる。このような場合には、第１分担ルールＲｃ１によって第４ブランチ７ｄの演算処理をＣＰＵ−Ｃに割り当てると、ＣＰＵ−ＡおよびＣＰＵ−Ｂは演算要素６の演算処理をすることなくＣＰＵ−Ｃによる演算処理の完了を待つ時間が増える可能性が生じる。具体的には、ＣＰＵ−ＡおよびＣＰＵ−Ｂの各々によって第３ブランチ７ｃおよび第２ブランチ７ｂの演算処理を完了後、後述するように第５ブランチ７ｅの演算処理はＣＰＵ−Ａが担当するため継続した演算処理が可能となる。ところが、第７ブランチ７ｇのＣＰＵ−Ａによる演算処理の開始は、第１ブランチ７ａおよび第４ブランチ７ｄ、第６ブランチ７ｆの全ての演算処理の完了後でなければ実施できない。このため、第４ブランチ７ｄの演算処理をＣＰＵ−Ｃが担当する場合の演算論理５の演算処理の実行時間は１０となり、第１分担ルールＲｃ１および第２分担ルールＲｃ２が適用された実施形態の方が、実行時間が短縮されている。
【００６６】
また、第５〜第６番目の割り当て優先度Ｐｃを有する第５ブランチ７ｅおよび第６ブランチ７ｆについては、図４〜図６に示される実施形態では、第５ブランチ７ｅの演算処理をＣＰＵ−Ａが担当し、第６ブランチ７ｆの演算処理はＣＰＵ−Ｂが担当するようにプロセッサ２１の割り当てがなされている。これは、下記に説明する第３分担ルールＲｃ３が適用されたことによる。すなわち、分担ルールＲｃは第３分担ルールＲｃ３をさらに含んでいる。また、第３分担ルールＲｃ３は、並列ブランチ７２の演算を実行するプロセッサ２１のうちから割り当て優先度Ｐｃに従って選択される特定プロセッサ２１ｓを、該並列ブランチ７２の出力信号Ｓｏを入力信号Ｓｉとする複入力演算要素６２を含むブランチ７に割り当てることを定めたルールとなっている。この第３分担ルールＲｃ３が適用されることによって、図４〜図６の実施形態では、第５ブランチ７ｅの演算処理はＣＰＵ−ＡまたはＣＰＵ−Ｂが担当し、第６ブランチ７ｆの演算処理はＣＰＵ−ＢまたはＣＰＵ−Ｃが担当することになる。同様に、第７ブランチ７ｇの演算処理は、第５ブランチ７ｅまたは第６ブランチ７ｆの演算処理を担当するプロセッサ２１のどちらかとなる。
【００６７】
そこで、図４〜図６に示される実施形態では、割り当て優先度Ｐｃに従った特定プロセッサ２１ｓの選択として、各々の複入力演算要素６２の並列ブランチ７２の演算処理に対して複数のプロセッサ２１が割り当てられている場合には、複数のプロセッサ２１のうちの割り当て優先度Ｐｃが小さい方を選択するようになっている。このため、７番の複入力演算要素６２を含む第５ブランチ７ｅの演算処理はＣＰＵ−Ａが担当し、１５番の複入力演算要素６２を含む第６ブランチ７ｆの演算処理はＣＰＵ−Ｂが担当するように決定されている。また、１６番の複入力演算要素６２を含む第７ブランチ７ｇの演算処理はＣＰＵ−Ａが担当するように決定されている。なお、他の幾つかの実施形態では、割り当て優先度Ｐｃの高い方を選ぶようにしても良く、この場合には、第５ブランチ７ｅの演算処理はＣＰＵ−Ｂが担当し、第６ブランチ７ｆの演算処理はＣＰＵ−Ｃが担当し、第７ブランチ７ｇの演算処理はＣＰＵ−Ｃが担当することになる。
【００６８】
これによって、各複入力演算要素６２では、並列ブランチ７２を実行したプロセッサ２１のうちの１つがそのまま複入力演算要素６２の演算処理を実行するので、待機処理の設定を少なくすることができる。また、複入力演算要素６２を演算処理するプロセッサを割り当て優先度Ｐｃに従って選択することで、並列化されて同時期に実行可能な複数のブランチに同一のプロセッサが割り当てられる可能性を低減し、処理の高速化を図ることができる。例えば、図５の第５ブランチ７ｅおよび第６ブランチ７ｆの各々の演算処理を実行するプロセッサ２１を、候補となる複数のプロセッサ２１のうちの割り当て優先度Ｐｃの低い方というように、割り当て優先度Ｐｃに従って選択することで、第５ブランチ７ｅおよび第６ブランチ７ｆに同一のＣＰＵ−Ｂが割り当てられることが回避されている。
【００６９】
図４の次のステップＳ４４では通知送出設定ステップが実行され、引き続くステップＳ４５では実行待機設定ステップ（Ｓ４５）が実行される。これらのステップによって、演算論理５の入力信号Ｓｉに対して意図された通りの演算処理が実行されるために必要となる上述の待機処理が設定される。すなわち、通知送出設定ステップ（Ｓ４４）は、並列ブランチ７２の演算が複数のプロセッサ２１によって実行される場合には、並列ブランチ７２の演算を実行する複数のプロセッサ２１の内の少なくとも一つのプロセッサ２１は、並列ブランチ７２により生成される出力信号Ｓｏを入力信号Ｓｉとする複入力演算要素６２の演算を実行する他のプロセッサ２１に実行進捗の通知（実行進捗通知Ｎ）を送信するように設定するステップである。また、実行待機設定ステップ（Ｓ４５）は、複入力演算要素６２を実行するプロセッサ２１に対して、所定の実行進捗の通知を受け取るまで複入力演算要素６２の演算の実行を待機するように設定するステップである。
【００７０】
図４〜図６に示される実施形態では、７番の複入力演算要素６２の入力信号Ｓｉは、第２ブランチ７ｂおよび第３ブランチ７ｃによって生成されており、第２ブランチ７ｂおよび第３ブランチ７ｃによって１つの並列ブランチ７２が構成されている。また、この並列ブランチ７２の演算処理はＣＰＵ−ＡとＣＰＵ−Ｂとによって実行されると共に、７番の複入力演算要素６２の演算処理はＣＰＵ−Ａによって実行される。このため、ＣＰＵ−Ｂは、第２ブランチ７ｂの演算処理の完了をＣＰＵ−Ａに通知する必要があり、ＣＰＵ−ＢはＣＰＵ−Ａに対して、実行進捗通知Ｎを送信するように通知送出設定ステップ（Ｓ４４）によって設定（通知送出設定Ｔ）される（図６のＮ１参照）。具体的には、第２ブランチ７ｂの末尾となる３番の演算要素６の演算処理の完了が実行進捗通知Ｎ１によって通知される。
【００７１】
同様に、演算順序Ｆが１５番の複入力演算要素６２の並列ブランチ７２は第１ブランチ７ａと第４ブランチ７ｄである。そして、この並列ブランチ７２の演算処理はＣＰＵ−ＢとＣＰＵ−Ｃによって実行されると共に、１５番の複入力演算要素６２の演算処理はＣＰＵ−Ｂによって実行される。このため、ＣＰＵ−Ｃは、第１ブランチ７ａの演算処理の完了をＣＰＵ−Ｂに通知する必要があり、ＣＰＵ−ＣはＣＰＵ−Ｂに対して実行進捗通知Ｎを送信するように通知送出設定Ｔがなされる（図６のＮ２参照）。具体的には、第１ブランチ７ａの末尾となる１４番の演算要素６の演算処理の完了が実行進捗通知Ｎ２によって通知される。
【００７２】
同様に、演算順序Ｆが１６番の複入力演算要素６２の並列ブランチ７２は第５ブランチ７ｅと第６ブランチ７ｆである。そして、この並列ブランチ７２の演算処理はＣＰＵ−ＡとＣＰＵ−Ｂとによって実行されると共に、１６番の複入力演算要素６２の演算処理はＣＰＵ−Ａによって実行される。このため、ＣＰＵ−Ｂは、第６ブランチ７ｆの演算処理の完了をＣＰＵ−Ａに通知する必要があり、ＣＰＵ−ＢはＣＰＵ−Ａに対して実行進捗通知Ｎを送信するように通知送出設定Ｔがなされる（図６のＮ３参照）。具体的には、第６ブランチ７ｆの末尾となる１５番の演算要素６の演算処理の完了が実行進捗通知Ｎ３によって通知される。
【００７３】
その一方で、ＣＰＵ−Ａには、演算順序が７番の複入力演算要素６２の演算処理の開始を３番の演算要素６の演算処理の完了を通知する実行進捗通知Ｎ１を受信するまで待機すること（図６のＷ＝３参照）、および、演算順序が１６番の複入力演算要素６２の演算処理の開始を１５番の演算要素６の演算処理の完了を通知する実行進捗通知Ｎ３を受信するまで待機することが設定（実行待機設定Ｗ）される（図６のＷ＝１５参照）。同様に、ＣＰＵ−Ｂには、演算順序が１５番の複入力演算要素６２の演算処理の開始を、１４番の演算要素６の演算処理の完了を通知する実行進捗通知Ｎ２を受信するまで待機するように実行待機設定Ｗがなされる（図６のＷ＝１４参照）。ＣＰＵ−Ｃには、実行待機設定Ｗ（Ｓ４５）はなされていない。
【００７４】
上述した図４〜図６に示される実施形態では、待機処理（通知送出設定Ｔおよび実行待機設定Ｗ）は必要となるところのみに限定して設定されている。他の幾つかの実施形態では、通知送出設定ステップ（Ｓ４４）による通知送出設定Ｔがなされたプロセッサ２１は、割り当てられた各々の演算要素６の演算処理の完了の度に、最新の実行進捗通知Ｎを送信するように設定されても良い。この場合には、先に送信した実行進捗通知Ｎを上書きする形で、最新の実行進捗通知Ｎを受信側のプロセッサ２１は保持する。他方、実行待機設定Ｗがなされたプロセッサ２１は、実行待機すべき演算要素６の演算処理を開始する前に所望の実行進捗通知Ｎが受信されているか否かを確認し、受信している場合には実行待機設定Ｗのなされた演算要素６の演算処理を開始する。
その他の幾つかの実施形態では、複数のプロセッサの各々は、割り当てられた演算要素６の各々の演算処理の完了のたびに、全ての他のプロセッサに実行進捗通知Ｎを通知しても良い。この場合には、複数のプロセッサの各々は、割り当てられた演算要素６の各々の演算処理の開始前に、実行待機設定Ｗの有無を確認し、実行待機設定Ｗがある場合には対応する実行進捗通知Ｎの受信を待機し、実行待機設定Ｗのない演算要素６については、実行待機をすることなく演算処理を開始する。
【００７５】
また、図４〜図６に示される実施形態では、これらの通知送出設定Ｔ（Ｓ４４）と実行待機設定Ｗ（Ｓ４５）は、上述した構造体４の待機処理設定フィールド４３として設けられた、通知送出設定フィールド４３ａおよび実行待機設定フィールド４３ｂを用いることで行われている。具体的には、図６に示されるように、通知送出設定Ｔについては、３番と１４番と１５番の演算要素６の演算処理が完了すると、これらの演算要素６の演算処理を担当する各々のプロセッサ２１は、実行進捗通知Ｎにより、他のプロセッサ２１にその演算処理の完了を通知する必要がある。このため、３番と１４番と１５番の演算要素６の各々の構造体４の通知送出設定フィールド４３ａには、実行進捗通知Ｎを送出する必要があることを示す情報が格納される。例えば、実行進捗通知Ｎの送信先となるプロセッサ２１の識別子などが格納されることで、実行進捗通知Ｎの送信の必要性および送信先が示されても良い。この場合には、逆に、実行進捗通知Ｎの送信が不要な場合には、例えば、０やＮＵＬＬなどのデフォルト値が通知送出設定フィールド４３ａに格納される。あるいは、複数のプロセッサの各々が演算要素６の各々の演算処理の完了のたびに、全ての他のプロセッサに実行進捗通知Ｎを通知する実施形態では、通知先のプロセッサ２１がどれであるかを示す必要がないため、実行進捗通知Ｎの送信の必要の有無はフラグにより示されても良い。
【００７６】
一方、実行待機設定Ｗについては、７番と１５番と１６番の演算要素６に対して、それぞれ３番と１４番と１５番の演算要素６の演算処理の完了を待つよう設定される必要がある。このため、７番と１５番と１６番の演算要素６の各々の構造体４の実行待機設定フィールド４３ｂには、それぞれ３番と１４番と１５番などの完了を待つ必要がある演算要素６を識別するための情報が格納される。逆に、実行待機をする必要がない演算要素６の構造体４には、例えば、０やＮＵＬＬなどのデフォルト値が実行待機設定フィールド４３ｂに格納されることで、実行待機が不要であることが設定されても良い。
【００７７】
なお、複数のプロセッサの各々が演算要素６の各々の演算処理の完了のたびに、全ての他のプロセッサに実行進捗通知Ｎを通知する実施形態では、構造体４には、待機処理設定フィールド４３として、少なくとも実行待機設定フィールド４３ｂが設けられている。そして、待機処理設定フィールド４３には演算処理の完了が待つ必要のある演算要素６を識別するための情報が格納される。また、上述した実施形態のいずれにおいても、上述の実行進捗通知Ｎの通知送出設定Ｔや実行待機設定Ｗを含む待機設定は、実行プログラム３（プログラムコード３２）においてなされる。
【００７８】
図４の次のステップＳ４６では、命令生成ステップが実行される。命令生成ステップ（Ｓ４６）は、プロセッサ２１の各々が、実行進捗の通知および複入力演算要素６２の演算の実行の待機を含めて、担当プロセッサ決定ステップ（Ｓ４３）によってプロセッサ２１毎に決定されたブランチ７に含まれる全ての演算要素６の演算を演算順序Ｆに従って逐次実行するように、プロセッサ２１毎の命令を生成するステップである。このステップＳ４６によって、複数のプロセッサ２１の各々によって実行される実行プログラム３が生成される。
【００７９】
図４の最後のステップＳ４７で実行ステップが実行される。実行ステップ（Ｓ４７）は、複数のプロセッサ２１の各々が、プロセッサ２１毎に生成された前記命令を逐次実行するステップである。具体的には、図６に示されるように、４番〜７番および１６番〜１７番の演算要素６（第３ブランチ７ｃ、第５ブランチ７ｅ、第７ブランチ７ｇ）の演算処理はＣＰＵ−Ａによって逐次実行され、１番〜３番、８番〜１０番および１５番の演算要素６（第２ブランチ７ｂ、第４ブランチ７ｄ、第６ブランチ７ｆ）はＣＰＵ−Ｂによって逐次実行され、１１番〜１４番の演算要素６（第１ブランチ７ａ）はＣＰＵ−Ｃによって逐次実行されるように、実行プログラム３が生成されている。また、図６に示されるように、各プロセッサ２１は、割り当てられた全ての演算要素６（ブランチ７）の演算処理および待機処理が完了すると処理を終える。
【００８０】
図６について具体的に説明する。なお、図６では、説明を簡単にするために各演算要素６の演算処理に要する演算時間は、演算要素６の種類によらずに全て同一となっている。また、図４〜図６の実施形態ではプロセッサ２１の数は３であり、各プロセッサ２１によって同一時刻に実行されている演算要素６を表すのに（ＣＰＵ−Ａが実行する演算要素６の演算順序Ｆ、ＣＰＵ−Ｂが実行する演算要素６の演算順序Ｆ、ＣＰＵ−Ｃが実行する演算要素６の演算順序Ｆ）で表すものとする。例えば、図６の時刻ｔ０において、ＣＰＵ−Ａ、ＣＰＵ−Ｂ、ＣＰＵ−Ｃは、それぞれ、４番、１番、１１番の演算要素６の演算処理を開始しており、これを（４番、１番、１１番）と表すものとする。
【００８１】
図６の時刻ｔ０において、各プロセッサ２１は実行プログラム３の実行を開始しており、各プロセッサ２１によって演算処理が実行されている演算要素６は（４番、１番、１１番）となっている。
【００８２】
時刻ｔ１では、時刻ｔ０に開始された演算処理が完了しており、各プロセッサ２１によって（５番、２番、１２番）の演算処理が実行されている。同様に、時刻ｔ２では（６番、３番、１３番）の演算処理が実行されている。ここで、ＣＰＵ−Ｂは、３番の演算要素６（第２ブランチ７ｂ）の演算処理が完了すると、その旨を通知する実行進捗通知Ｎ１をＣＰＵ−Ａに対して送信するよう通知送出設定Ｔがなされている。このため、ＣＰＵ−Ｂは、時刻ｔ２〜時刻ｔ３の間に、３番の演算要素６の演算処理の完了を通知するため実行進捗通知Ｎ１をＣＰＵ−Ａに対して送信し、ＣＰＵ−Ａは実行進捗通知Ｎ１を受信している。また、ＣＰＵ−Ａにおいては、既に演算処理が完了した６番の演算要素６の次に実行されるべき７番の演算要素６の演算処理の開始は、３番の演算要素６（第２ブランチ７ｂ）の演算処理の完了を待って行うことが条件として実行待機設定Ｗがなされているところ、この実行進捗通知Ｎ１は既に受信されている。このため、時刻ｔ３において、各プロセッサ２１によって（７番、８番、１４番）の演算処理が実行待機なしに開始されている。
【００８３】
同様に、ＣＰＵ−Ｃは、１４番の演算要素６（第１ブランチ７ａ）の演算処理が完了すると、その旨を通知する実行進捗通知Ｎ２をＣＰＵ−Ｂに対して送信するよう通知送出設定Ｔがなされている。このため、ＣＰＵ−Ｃは、時刻ｔ３〜時刻ｔ４の間に、１４番の演算要素６（第１ブランチ７ａ）の演算処理の完了を通知するための実行進捗通知Ｎ２をＣＰＵ−Ｂに対して送信し、ＣＰＵ−Ｂは実行進捗通知Ｎ２を受信している。なお、ＣＰＵ−Ｃは、この実行進捗通知Ｎ２の送信により、割り当てられた全ての演算要素６（ブランチ７）の演算処理および待機処理に対応する命令の実行を完了するので、その後、処理を完了している。
【００８４】
次の時刻ｔ４において、各プロセッサ２１は、（１６番、９番、（終了））の演算処理を開始しようとする。ところが、ＣＰＵ−Ａは、１６番の演算要素６の演算処理の開始はＣＰＵ−Ｂからの１５番の演算要素６（第６ブランチ７ｆ）の演算処理の完了を待って行うことが条件として実行待機設定Ｗがなされているため、その演算処理の開始することができない。他方、ＣＰＵ−Ｂは、９番および１０番の演算要素６の演算処理に対しては、実行待機設定Ｗはなされていない。また、ＣＰＵ−Ｃは既に処理を完了している。このため、各プロセッサ２１による演算処理は、時刻ｔ４において（（１６番を待機）、９番、（終了））となっている。同様に、時刻ｔ５において（（１６番を待機）、１０番、（終了））となる。
【００８５】
また、ＣＰＵ−Ｂにおいては、１５番の演算要素６（第６ブランチ７ｆ）の演算処理の開始は、１４番の演算要素６（第１ブランチ７ａ）の演算処理の完了を待って行うことが条件として実行待機設定Ｗがなされているところ、この旨を通知する実行進捗通知Ｎ１は時刻ｔ３〜時刻ｔ４の間でＣＰＵ−Ｃから既に受信されている。このため、時刻ｔ６において、各プロセッサ２１によって（（１６番を待機）、１５番、（終了））の演算処理が開始されており、ＣＰＵ−Ｂは実行待機なしに１５番の演算要素６の演算処理を開始している。
【００８６】
さらに、ＣＰＵ−Ｂは、１５番の演算要素６（第６ブランチ７ｆ）の演算処理が完了すると、その旨を通知する実行進捗通知Ｎ３をＣＰＵ−Ａに対して送信するよう通知送出設定Ｔがなされている。このため、ＣＰＵ−Ｂは、時刻ｔ６〜時刻ｔ７の間に、１５番の演算要素６（第６ブランチ７ｆ）の演算処理の完了を通知するための実行進捗通知Ｎ３をＣＰＵ−Ａに対して送信し、ＣＰＵ−Ａは実行進捗通知Ｎ３を受信している。なお、ＣＰＵ−Ｂは、この実行進捗通知Ｎ３の送信により、割り当てられた全ての演算要素６（ブランチ７）の演算処理および待機処理に対応する命令の実行を完了するので、その後、処理を完了している。
【００８７】
この１５番の演算要素６（第６ブランチ７ｆ）の演算処理の完了を通知するための実行進捗通知Ｎ３を受信することで、ＣＰＵ−Ａは、時刻ｔ４から待機していた１６番の演算要素（第７ブランチ７ｇ）の演算処理の実行を開始することができるようになる。このため、時刻ｔ７において、各プロセッサ２１によって（（１６番）、（終了）、（終了））の演算処理が実行され、時刻ｔ８において、（（１７番）、（終了）、（終了））の演算処理が実行される。時刻ｔ８の演算処理の完了後、ＣＰＵ−Ａは、割り当てられた全ての演算要素６（ブランチ７）の演算処理および待機処理に対応する命令の実行を完了するので、その後、処理を完了している。
【００８８】
上述のように、図６の例示では、演算論理５の演算処理はブランチ７の単位で３つのプロセッサ２１に分担されており、演算論理５の並列処理化が図られている。単純に、各演算要素６の演算処理の演算時間を全て同じ１と仮定した場合、本発明の一実施形態では図５の演算論理５の演算時間は９となる。仮に、図５の演算論理５を演算順序Ｆに従って逐次実行した場合の演算時間は１７であるので、演算論理５の演算時間を大幅に短縮することができている。
【００８９】
上記の構成によれば、演算論理５を構成する各演算要素６（単入力演算要素６１、複入力演算要素６２、外部入力演算要素６３）の演算処理は、独立して連続に処理することが可能な単位であるブランチ７の単位で複数のプロセッサ２１に分担される。また、各複入力演算要素６２の演算処理は、実行進捗の通知送出設定Ｔ（図４のＳ４４）および実行待機設定Ｗ（図４のＳ４５）による待機処理によって、その複数の入力信号Ｓｉが全て入力されたことを条件に開始されるよう構成される。すなわち、演算論理５は、各演算要素６で定義される演算処理が演算順序Ｆの通りに演算論理５の入力信号Ｓｉに対して実行されることで、意図された通りの演算処理が実行された適正な演算結果を得ることが可能であるところ、上記の構成によれば、各複入力演算要素６２の処理において演算順序Ｆが遵守されることで、演算論理５全体の処理順序は意図されたものと同じとなる。このため、複数のプロセッサ２１が、割り当てられた演算論理５の一部に相当する演算要素６（ブランチ７）の演算処理を逐次実行することで、演算論理５の全体の演算処理を完了することができるようになり、このような演算論理５の演算処理の並列処理化によって、演算論理５の演算処理を高速化することができる。
【００９０】
また、各プロセッサ２１がそれぞれ割り当て有られた演算処理を実行することで、演算論理５によって意図された演算処理がなされた適正な演算結果を得ることができる。
【００９１】
以下、本発明の一実施形態に係る制御装置２のハードウェア構成の幾つかの実施形態について図７〜図９を用いて説明する。制御装置２は、上述した演算論理５の並列処理方法により生成された命令（実行プログラム３）を実行する並列処理実行装置であり、複数のプロセッサ２１を備える。なお、説明を簡単にするために、図７〜図９の例示では、制御装置２（並列処理実行装置）は２つのプロセッサ２１（プロセッサＡとプロセッサＢ）を備えるものとする。
【００９２】
図７〜図９に示されるように、制御装置２の複数のプロセッサ２１の各々は演算器２６（ＡＬＵ）や演算回路２９（後述）を有する。幾つかの実施形態では、図７〜図８に示されるように、制御装置２の複数のプロセッサ２１は、ＣＰＵパッケージ２１ｐの備える複数のコア２１ｃとして構成されている。他の幾つかの実施形態では、制御装置２の複数のプロセッサ２１は、ＦＰＧＡ２１ｆに内蔵されたソフトプロセッサ２１ｆの備える複数のコア２１ｃとして構成されている。図７〜図８の例示では、ＣＰＵパッケージ２１ｐあるいはソフトプロセッサ２１ｆは、プロセッサＡとプロセッサＢの２つのコア２１ｃを有している。なお、複数のＣＰＵパッケージ２１ｐによって複数のプロセッサ２１が構成されても良い。
【００９３】
また、複数のプロセッサ２１の各々は、他のプロセッサ２１からの実行進捗通知Ｎの各々を個別に受信するためのメモリ（通知レジスタ２５）を有している。図７〜図９の例示では、プロセッサ２１Ａからの実行進捗通知Ｎは、プロセッサ２１Ｂの通知レジスタ２５Ｂに格納され、プロセッサ２１Ｂからの実行進捗通知Ｎはプロセッサ２１Ａの通知レジスタ２５Ａに格納される。なお、制御装置２が３つのプロセッサ２１を有する場合には、各々のプロセッサ２１は、他のプロセッサ２１から実行進捗通知Ｎを受信するための通知レジスタ２５を２つ有する。つまり、制御装置２が３以上のプロセッサ２１を有する場合には、複数のプロセッサ２１の各々は、他の全てのプロセッサ２１からの実行進捗通知Ｎをそれぞれ個別に受信するための複数の通知レジスタ２５を、プロセッサ２１の数−１の数だけ有することになり、複数のプロセッサ２１の各々は、通知レジスタ２５を介してフルメッシュのトポロジーで接続される。
【００９４】
図７〜図９に示される実施形態のように、フルメッシュのトポロジーによって複数のプロセッサ２１を相互に接続すると、プロセッサ２１の数に応じて回路規模が大きくなる。このため、他の幾つかの実施形態では、複数のプロセッサ２１の全てと接続される管理用のプロセッサ２１（不図示）を１つ設け、管理用のプロセッサ２１が全プロセッサの実行進捗通知Ｎの内容（演算処理が完了した演算要素６の番号など）を管理するよう構成している。また、演算論理５の演算処理を実行する複数のプロセッサ２１の各々は、実行進捗を知りたい他のプロセッサ２１の識別子（番号など）を管理用のプロセッサ２１に対して送信することなどによって、問い合わせた他のプロセッサ２１の実行進捗（演算処理の完了した演算要素６の演算順序Ｆなど）を知ることができるように構成されている。このように、複数のプロセッサ２１の各々と管理用のプロセッサ２１とはスター型のトポロジーによって、内部バス２３を介することなく直接接続されることで、回路規模を小さくすることができると共に、内部バス２３でのバス調停が生じないので、処理を高速化することができる。なお、他のプロセッサ２１への実行進捗の問い合わせは、実行待機によって待たれる演算要素６の演算順序Ｆなどでも良く、完了しているか否かが返答されても良い。さらに、複数のプロセッサ２１の全てが共有する共有メモリ（不図示）によってスター型のトポロジーを構成し、回路規模の低減を図っても良い。
【００９５】
また、幾つかの実施形態では、図７〜図８に示されるように、各々のプロセッサ２１（２１ｃ）は、演算要素６の演算要素コードが格納された内部メモリ２４（例えば、ＲＡＭ）に接続されている。この内部メモリ２４には、各演算要素６の演算処理に用いられるアクセス頻度の高いプログラム（サブルーチン）が格納されている。これによって、演算コードへの高速なアクセスが可能であり、演算論理５（演算要素６）の演算処理の高速化が図られている。なお、他の幾つかの実施形態では、プロセッサ２１が内部メモリ２４を有していなくても良い。
【００９６】
また、幾つかの実施形態では、図８に示されるように、複数のプロセッサ２１の各々は、キャッシュ部２４ｃを備えている。このキャッシュ部２４ｃは、演算命令用のキャッシュメモリ（演算命令キャッシュ２４ｃｉ）とデータ用のキャッシュメモリ（データキャッシュ２４ｃｄ）を備えている。これによって、内部バス２３を介することで発生し得るバス調停などによる主メモリ２２（外部メモリ）からのデータ転送の遅延も防止することができ、演算論理５の全体の処理速度の向上を図ることができる。特に、上述した並列処理化方法によって生成された実行プログラム３では、複数のプロセッサ２１の各々が実行する演算要素６の処理順序は確定している。このため、これから使用される演算命令やデータを的確に予測することができるので、キャッシュのミスヒットが生じることなく、事前にキャッシュに格納することができる。図８に例示される実施形態では、内部バス２３を介して、複数のプロセッサ２１の各々に演算命令キャッシュ２４ｃｉおよびデータキャッシュ２４ｃｄが接続されている。
【００９７】
また、図８に示される実施形態では、複数のプロセッサ２１の各々のキャッシュ部２４ｃは、演算命令用プログラマブルＤＭＡ２４ｄｉ（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）およびデータ用プログラマブルＤＭＡ２４ｄｄを有している。そして、演算命令用プログラマブルＤＭＡ２４ｄｉは演算命令キャッシュ２４ｃｉに接続され、データ用プログラマブルＤＭＡ２４ｄｄはデータキャッシュ２４ｃｄに接続されている。これらのＤＭＡ（２４ｄｉ、２４ｄｄ）による主メモリ２２へのダイレクトアクセスにより、事前に必要とされる演算命令およびデータを、プロセッサ２１を用いずにそれぞれのキャッシュ（２４ｃｉ、２４ｃｄ）に格納することが可能となっている。このため、プロセッサ２１を演算論理５の演算処理に集中させることで、演算論理５の演算処理の高速化をさらに図ることができる。
【００９８】
演算命令キャッシュ２４ｃｉについて詳述すると、複数のプロセッサ２１の各々に割り当てられた演算要素６の処理順序が演算順序Ｆによって決まると、演算要素６の種類に１対１で対応する演算処理（演算コード）の実行順序が決まる。つまり、演算コードの並びが事前に分かるので、各プロセッサ２１は、演算要素６の識別子（演算順序番号など）と演算コードの読み込みアドレスとの対応を演算命令用プログラマブルＤＭＡ２４ｄｉに登録する。これによって、演算命令用プログラマブルＤＭＡ２４ｄｉは、プロセッサ２１毎に設けられた演算命令キャッシュ２４ｃｉ上に演算コードを実行順序に従って連続に配置することができる。この際、各プロセッサ２１が各々の演算要素６の演算が完了するたびに、演算処理が完了した演算要素６の識別子を通知レジスタ２５に順次上書きしていく実施形態の場合には、演算命令用プログラマブルＤＭＡ２４ｄｉは通知レジスタ２５を参照することで、演算命令キャッシュ２４ｃｉに先読みすべき演算コードが分かり、自動で主メモリ２２や内部メモリ２４から命令コードを演算命令キャッシュ２４ｃｉに読み込むことができる。なお、演算要素６の種類とその種類に対応する演算コードの読み込みアドレスとの対応は表もしくは式で実装しても良い。また、先読みする命令の数などは内部バス２３の速度と演算命令キャッシュ２４ｃｉのキャッシュサイズによって決めても良い。
【００９９】
一方、データキャッシュ２４ｃｄについては、同様に、複数のプロセッサ２１の各々に割り当てられた演算要素６の処理順序が演算順序Ｆによって決まると、演算要素６の演算処理に必要な入力信号Ｓｉの対応は一意に決まるので、主メモリ２２や内部メモリ２４などのメモリから読み込むデータのアドレスも、自プロセッサ２１や他プロセッサ２１の通知レジスタ２５を参照することで決定できる。このため、上記と同様に、データ用プログラマブルＤＭＡ２４ｄｄは、データキャッシュ２４ｃｄに入力信号Ｓｉを先読みすることができる。なお、読み込みアドレスの対応は表もしくは式で実装しても良い。また、データは直前の演算の演算結果を使うことが多いので、直前もしくは数個前の演算結果まではデータキャッシュ２４ｃｄに残しておき利用しても良い。
【０１００】
上述の通り、図７〜図８に示される実施形態では、複数のプロセッサ２１が、演算器２６（ＡＬＵ）を用いて演算論理５の演算処理を実行している。他の幾つかの実施形態では、図９に示されるように、プロセッサ２１はＦＰＧＡ２１ｆに設けられた制御回路２１ｒ（部分的再合成および入出力制御回路）を含み、制御回路２１ｒは、少なくとも１つのブランチ７毎に、ブランチ７に含まれる演算要素６の各々の演算処理に対応する演算回路２９を、ＦＰＧＡ２１ｆのパーシャルコンフィグレーションによりＦＰＧＡ２１ｆに部分再合成し、パーシャルコンフィグレーションにより再合成された演算回路２９を用いて前記ブランチの演算を実行する。つまり、制御回路２１ｒは、実行プログラム３に従って、１つのブランチ７もしくは複数のブランチ７をまとめてパーシャルコンフィグレーション（ＦＰＧＡ２１ｆの部分的な再論理合成）を行いつつ、演算処理を実行することを繰り返すことで、演算論理５の演算処理を行う。このように演算要素６に対応する演算処理を回路（ハードウェア）で行うこと、ブランチ７（演算要素６）の演算処理の高速化を図ることができる。
【０１０１】
上記の構成によれば、パーシャルコンフィグレーションにより、それぞれの演算要素６をハードウェア（回路）で実行することで、ソフトウェアによる処理よりも演算論理５の演算の高速化を図ることができる。また、演算論理５の規模が大きく、演算論理５の全てを一度に回路化できないような場合であって、パーシャルコンフィグレーションによって演算論理５の演算をハードウェアで実行することができる。
【０１０２】
さらに、幾つかの実施形態では、上記のＦＰＧＡ２１ｆのパーシャルコンフィグレーションは、実行進捗の受信を待っている間に実行される。これによって、演算要素６の演算処理の実行を待機するための待ち時間をパーシャルコンフィグレーションの実行に充てることにより、待ち時間を有効に活用し、演算論理５の高速化をさらに図ることができる。
【０１０３】
また、幾つかの実施形態では、図７、図９に示されるように、制御装置２（並列処理実行装置）は、演算要素６の演算をそれぞれ実行する２つの演算ユニット（図７の演算器２６、図９の演算回路２９）を含む。また、制御装置２は、２つの演算ユニットのそれぞれの出力を比較する比較ユニット２７と、比較ユニット２７による比較の結果を監視すると共に、比較の結果が不一致と判断される場合に演算論理５の演算処理を中止する機能安全実行ユニット２８と、をさらに備え、比較ユニット２７と、機能安全実行ユニット２８とは、複数のプロセッサ２１の各々に設けられる。つまり、各々のプロセッサ２１が有する２つの演算ユニットによる各々の演算処理の結果は、両方とも比較ユニット２７に入力されることで比較される。また、比較ユニット２７による比較結果は機能安全実行ユニット２８に入力される。そして、機能安全実行ユニット２８は比較結果が不一致の場合には、実行プログラム３を終了させたり、システムを停止するなど、演算論理５の演算処理のシャットダウンを行う。なお、シャットダウンの前にエラー表示を出力しても良い。
【０１０４】
また、図７、図９に示される実施形態では、２つの演算ユニット（２つの演算器２６や、２つの演算回路２９）は同一の機能を有するが、それぞれ異なる手法を用いて実現されている。例えば、図７の演算器２６では、一方の演算器２６を、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を使用して構成し、もう一方の演算器２６を、ＤＳＰを使用しないで構成しても良い。また、図９の演算回路２９では、一方の演算回路２９を再論理合成により自動合成した回路で構成し、もう一方の演算回路２９を、ＲＴＬを用いて手動で作成するなど自動合成とは異なるアルゴリズムによって再論理合成された演算回路２９としても良い。
【０１０５】
上記の構成によれば、プラントの制御装置２などの制御対象の安全性を確保することができ、ＩＥＣ６１５０８などの機能安全に対応することができる。
【０１０６】
本発明は上述した実施形態に限定されることはなく、上述した実施形態に変形を加えた形態や、これらの形態を適宜組み合わせた形態も含む。
例えば、図３、図５に示される実施形態では演算論理５の外部出力信号Ｒは１つであるが、他の幾つかの実施形態では演算論理５の外部出力信号Ｒは複数であっても良い。この場合は、例えば、１つの演算要素６からの出力信号Ｓｏが複数の演算要素６の入力信号Ｓｉとなる場合に生じ得る。この場合には、外部出力信号Ｒが１つとなるように、取得された演算論理５を分離し、分離された各演算論理５に対してそれぞれ上述した並列処理方法を実行しても良い。あるいは、複数の演算要素６に対して入力信号Ｓｉを入力する演算要素６までの演算処理は同じであるため、この演算要素６の出力信号Ｓｏが外部出力信号Ｒとなるように演算論理５を分離すると共に、この外部出力信号Ｒが、複数の演算要素６に対して入力信号Ｓｉを入力する上記の演算要素６の後段に位置していた分離後の演算論理５の部分に対する外部入力信号Ｅとなるように、演算論理５を分離しても良い。
【０１０７】
また、図１に示される実施形態では、保守ツール１で実行プログラム３が生成され、制御装置２で実行プログラム３の実行が行われるが、この実施形態には限定されず、他の幾つかの実施形態では、実行プログラム３の生成と実行が同一の装置で行われても良い。
【符号の説明】
【０１０８】
１        保守ツール
２        制御装置
２１      プロセッサ
２１ｃ    コア
２１ｆ    ソフトプロセッサ
２１ｐ    ＣＰＵパッケージ
２１ｒ    制御回路
２１ｓ    特定プロセッサ
２２      主メモリ
２３      内部バス
２４      内部メモリ
２４ｃ    キャッシュ部
２４ｃｉ  演算命令キャッシュ
２４ｃｄ  データキャッシュ
２４ｄｉ  演算命令用プログラマブルＤＭＡ
２４ｄｄ  データ用プログラマブルＤＭＡ
２５      通知レジスタ
２５Ａ    通知レジスタ（プロセッサＡ）
２５Ｂ    通知レジスタ（プロセッサＢ）
２６      演算器
２７      比較ユニット
２８      機能安全実行ユニット
２９      演算回路
３        実行プログラム
３２      プログラムコード
４        構造体
４１      入力信号フィールド
４２      出力信号フィールド
４３      待機処理設定フィールド
４３ａ    通知送出設定フィールド
４３ｂ    実行待機設定フィールド
４４      ポインタフィールド
５        演算論理
６        演算要素
６１      単入力演算要素
６２      複入力演算要素
６３      外部入力演算要素（リーフ）
６５      外部出力演算要素（ルート）
７        ブランチ
７２      並列ブランチ
７３      外部入力ブランチ（リーフ）
７４      中間ブランチ
７５      外部出力ブランチ（ルート）
９        制御ネットワーク
Ｓｉ      入力信号
Ｓｏ      出力信号
Ｅ        外部入力信号
Ｆ        演算順序
Ｒ        外部出力信号（演算論理の演算結果）
Ｎ        実行進捗通知
Ｒｂ      ブランチの実行優先度ルール
Ｒｂ１    第１実行優先度ルール
Ｒｂ２    第２実行優先度ルール
Ｒｂ３    第３実行優先度ルール
Ｒｃ      演算要素（ブランチ）の分担ルール
Ｒｃ１    第１分担ルール
Ｒｃ２    第２分担ルール
Ｒｃ３    第３分担ルール
Ｒｃ４    第４分担ルール
Ｐｂ      ブランチの実行優先度
Ｐｃ      プロセッサの割り当て優先度
ｔ        時刻
Ｔ        通知送出設定
Ｗ        実行待機設定
【図１】
2017059084.tif 000003
【図２】
2017059084.tif 000004
【図３】
2017059084.tif 000005
【図４】
2017059084.tif 000006
【図５】
2017059084.tif 000007
【図６】
2017059084.tif 000008
【図７】
2017059084.tif 000009
【図８】
2017059084.tif 000010
【図９】
2017059084.tif 000011