(57)【要約】【課題】パイプライン処理が全体として効率的に実行できるパイプライン演算装置を実現する。【解決手段】パイプライン演算装置（１１０）は、パイプラインで構成される演算部（１２０）、ノード処理時間を取得するノード監視部（１６１）、蓄積メッセージ量を取得するキュー監視部（１６２）、ノード処理時間と、当該ノードの前段の受信キューの蓄積メッセージ量とに基づいて、当該ノードの優先度変数を算出する優先度変数算出部（１６３）、優先度変数に応じ、各ノードに対して稼動時間を割り当てる時間割当部（１６４）を備える。【選択図】図１
2020154830.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードと、複数の受信キューとを有する演算部であって、前記ノードが前記受信キューを介して複数接続されるパイプラインの少なくとも１つで構成される演算部と、
ノード監視部と、キュー監視部と、優先度変数算出部と、時間割当部とを有する制御部と、を備え、
前記ノード監視部は、前記ノードから、前記ノードにおける１つのメッセージの処理に要する時間であるノード処理時間を取得し、
前記キュー監視部は、前記受信キューから、前記受信キューへの蓄積メッセージ量を取得し、
前記優先度変数算出部は、少なくとも前記ノードの前記ノード処理時間と、当該ノードの前段の受信キューの前記蓄積メッセージ量とに基づいて、当該ノードの優先度変数を算出し、
前記時間割当部は、前記ノード毎の前記優先度変数に応じ、前記各ノードに対して稼動時間を割り当てる、パイプライン演算装置。
【請求項２】
前記蓄積メッセージ量は、前記受信キューへ蓄積されたメッセージ数または蓄積されたメッセージの総サイズである、請求項１に記載のパイプライン演算装置。
【請求項３】
前記優先度変数算出部は、前記ノードの前記ノード処理時間と前記蓄積メッセージ量との積を、当該ノードの優先度変数として算出する、請求項１または２に記載のパイプライン演算装置。
【請求項４】
前記優先度変数算出部は、前記ノード監視部が取得した前記ノードの過去からの複数の前記ノード処理時間に基づいて、当該ノードの前記優先度変数を算出するための前記ノード処理時間を生成する、請求項１から３のいずれか１項に記載のパイプライン演算装置。
【請求項５】
前記演算部は、合流監視部と、補正係数算出部とを更に備え、
前記合流監視部は、前記パイプラインのうち、複数の部分パイプラインが合流するパイプラインについて、前記複数の部分パイプラインの合流点の前記ノードよりも上流の、互いに異なる部分パイプラインに属するノードの前段の受信キューの前記蓄積メッセージ量を、前記キュー監視部から取得して、前記互いに異なる部分パイプラインに属するノードの前段の受信キューの前記蓄積メッセージ量の不均衡の度合いを算出し、
前記補正係数算出部は、前記互いに異なる部分パイプラインのうちの、いずれかの部分パイプラインに属するノードについて、前記不均衡の度合いに応じて補正係数を算出し、
前記時間割当部は、前記ノードについて前記補正係数が算出された場合には、前記優先度変数に前記補正係数を乗じた値に応じて、前記稼動時間を割り当てる、請求項１から４のいずれか１項に記載のパイプライン演算装置。
【請求項６】
前記演算部は、メモリ監視部と、補正係数算出部とを更に備え、
前記メモリ監視部は、前記受信キューの蓄積メッセージを保存するメモリの空き容量が所定値よりも小さくなった場合に前記補正係数算出部に通知し、
前記補正係数算出部は、前記通知を受信した場合に、前記複数のパイプラインのうち、パイプラインでのメッセージの処理が完了するまでの時間がより短い、または、分岐のより少ないパイプラインに属する前記ノードについて、１より大きい補正係数を与え、
前記時間割当部は、前記ノードについて前記補正係数が与えられた場合には、前記優先度変数に前記補正係数を乗じた値に応じて、前記稼動時間を割り当てる、請求項１から４のいずれか１項に記載のパイプライン演算装置。
【請求項７】
請求項１から６のいずれか１項に記載のパイプライン演算装置を備えたプログラマブルロジックコントローラ。
【請求項８】
ノードが受信キューを介して複数接続される少なくとも１つのパイプラインにより、パイプライン処理を実行する方法であって、
前記ノードにおける１つのメッセージの処理に要する時間であるノード処理時間を取得するステップと、
前記受信キューへの蓄積メッセージ量を取得するステップと、
少なくとも前記ノードの前記ノード処理時間と、当該ノードの前段の受信キューの前記蓄積メッセージ量とに基づいて、当該ノードの優先度変数を算出するステップと、
前記ノード毎の前記優先度変数に応じ、前記各ノードに対して稼動時間を割り当てるステップと、を備えたパイプライン処理の実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン演算装置、プログラマブルロジックコントローラ、及び、パイプライン処理の実行方法に関する。
【背景技術】
【０００２】
様々な生産現場におけるファクトリーオートメーション（ＦＡ）において、各種機器の動作情報や流動品の測定データ、その他の生産情報に関するサンプリングデータを収集し、データベース化を行う要請が高まっている。そのため、生産工場において、多様な各種機器へのアクセスが可能で、膨大なデータの取り扱いを行うデータ収集分析系の高性能化が求められている。
【０００３】
一方、情報処理装置において多様なデータを扱えるようにする技術として、パイプライン処理が良く知られている。特許文献１には、このようなパイプライン処理において、各タスクへの実行優先度を調整し、受信バッファ（受信キュー）のオーバーフローを防止して、適切なデータ処理を行う方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−２３７９９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＦＡにおけるデータ収集分析系は、生産工程に応じ、ユーザ（工場管理者）によって、データ収集対象機器、データ処理方法等が自在に定め得るように構成される必要がある。そのためのデータ収集分析機器として、パイプライン演算装置を用いることが考えられている。
【０００６】
パイプライン演算装置では、データ収集対象機器や、所望のデータ処理方法に対応する準備された機能ブロック（ノード）を組み合わせることで、ユーザが要求するデータ処理手順の設定を容易に行えるようにすることができる。
【０００７】
更に、データ収集分析機器としてのパイプライン演算装置を、各種制御対象機器の制御を行うプログラマブルロジックコントローラ（Programmable Logic Controller：ＰＬＣ）に統合することも考えられる。これにより、収集したデータを分析した結果を、各種制御対象機器への制御に反映させることも、容易となる。
【０００８】
このようなＦＡで用いるためのパイプライン演算装置の取り扱うデータは膨大であるため、その高性能化が求められる。
【０００９】
本発明は、一側面では、このような実情を鑑みてなされたものであり、その目的は、受信キューのオーバーフローを防止しつつも、更にパイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算装置を実現することにある。
【課題を解決するための手段】
【００１０】
本発明は、上述した課題を解決するために、以下の構成を採用する。
【００１１】
本発明の一側面に係るパイプライン演算装置は、複数のノードと、複数の受信キューとを有する演算部であって、前記ノードが前記受信キューを介して複数接続されるパイプラインの少なくとも１つで構成される演算部と、ノード監視部と、キュー監視部と、優先度変数算出部と、時間割当部とを有する制御部と、を備え、前記ノード監視部は、前記ノードから、前記ノードにおける１つのメッセージの処理に要する時間であるノード処理時間を取得し、前記キュー監視部は、前記受信キューから、前記受信キューへの蓄積メッセージ量を取得し、前記優先度変数算出部は、少なくとも前記ノードの前記ノード処理時間と、当該ノードの前段の受信キューの前記蓄積メッセージ量とに基づいて、当該ノードの優先度変数を算出し、前記時間割当部は、前記ノード毎の前記優先度変数に応じ、前記各ノードに対して稼動時間を割り当てる構成を備える。
【００１２】
上記構成によれば、受信キューのオーバーフローを防止しつつも、更にパイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算装置が実現される。
【００１３】
上記一側面に係るパイプライン演算装置において、前記蓄積メッセージ量は、前記受信キューへ蓄積されたメッセージ数または蓄積されたメッセージの総サイズであってもよい。
【００１４】
上記構成によれば、パイプライン処理が全体として効率的に実行できるようにするための優先度変数を具体的に算出できる。
【００１５】
上記一側面に係るパイプライン演算装置において、前記優先度変数算出部は、前記ノードの前記ノード処理時間と前記蓄積メッセージ量との積を、当該ノードの優先度変数として算出する構成を有していてもよい。
【００１６】
上記構成によれば、メッセージ入力待ちによるノードの動作のアイドル状態が生じる事態が発生し、パイプライン全体としての動作の効率が悪くなることを抑制しうる。
【００１７】
上記一側面に係るパイプライン演算装置において、前記優先度変数算出部は、前記ノード監視部が取得した前記ノードの過去からの複数の前記ノード処理時間に基づいて、当該ノードの前記優先度変数を算出するための前記ノード処理時間を生成する構成を有していてもよい。
【００１８】
上記構成によれば、突発的な事由による各ノードにおける極端な稼働時間の割り当ての発生を防止し得る。
【００１９】
上記一側面に係るパイプライン演算装置において、前記演算部は、合流監視部と、補正係数算出部とを更に備え、前記合流監視部は、前記パイプラインのうち、複数の部分パイプラインが合流するパイプラインについて、前記複数の部分パイプラインの合流点の前記ノードよりも上流の、互いに異なる部分パイプラインに属するノードの前段の受信キューの前記蓄積メッセージ量を、前記キュー監視部から取得して、前記互いに異なる部分パイプラインに属するノードの前段の受信キューの前記蓄積メッセージ量の不均衡の度合いを算出し、前記補正係数算出部は、前記互いに異なる部分パイプラインのうちの、いずれかの部分パイプラインに属するノードについて、前記不均衡の度合いに応じて補正係数を算出し、前記時間割当部は、前記ノードについて前記補正係数が算出された場合には、前記優先度変数に前記補正係数を乗じた値に応じて、前記稼動時間を割り当てる構成を有していてもよい。
【００２０】
上記構成によれば、合流のあるパイプラインにおいても、確実にパイプライン処理が全体として効率的に実行できるようになる。
【００２１】
上記一側面に係るパイプライン演算装置において、前記演算部は、メモリ監視部と、補正係数算出部とを更に備え、前記メモリ監視部は、前記受信キューの蓄積メッセージを保存するメモリの空き容量が所定値よりも小さくなった場合に前記補正係数算出部に通知し、前記補正係数算出部は、前記通知を受信した場合に、前記複数のパイプラインのうち、パイプラインでのメッセージの処理が完了するまでの時間がより短い、または、分岐のより少ないパイプラインに属する前記ノードについて、１より大きい補正係数を与え、前記時間割当部は、前記ノードについて前記補正係数が与えられた場合には、前記優先度変数に前記補正係数を乗じた値に応じて、前記稼動時間を割り当てる構成を有していてもよい。
【００２２】
上記構成によれば、メモリの空き容量が少なくなった場合に、演算部に滞留しているメッセージを減少させることができ、メモリ資源の不足が生じる事態の発生を抑制することができる。
【００２３】
本発明の一側面に係るプログラマブルロジックコントローラは、上記一側面に係るパイプライン演算装置を備えたプログラマブルロジックコントローラであってもよい。
【００２４】
上記構成によれば、高性能化されたデータ収集機能を有し、各種制御対象機器の制御について、収集したデータを分析した結果を反映させるＦＡシステムをユーザが構築することが容易となる。
【００２５】
本発明の一側面に係るパイプライン処理の実行方法は、ノードが受信キューを介して複数接続される少なくとも１つのパイプラインにより、パイプライン処理を実行する方法であって、前記ノードにおける１つのメッセージの処理に要する時間であるノード処理時間を取得するステップと、前記受信キューへの蓄積メッセージ量を取得するステップと、少なくとも前記ノードの前記ノード処理時間と、当該ノードの前段の受信キューの前記蓄積メッセージ量とに基づいて、当該ノードの優先度変数を算出するステップと、前記ノード毎の前記優先度変数に応じ、前記各ノードに対して稼動時間を割り当てるステップと、を備えている。
【００２６】
上記構成によれば、受信キューのオーバーフローを防止しつつも、更にパイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算処理が実現される。
【発明の効果】
【００２７】
本発明の一側面に係るパイプライン演算装置によれば、受信キューのオーバーフローを防止しつつも、更にパイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算を実現できる。
【００２８】
本発明の一側面に係るプログラマブルロジックコントローラによれば、高性能化されたデータ収集機能を有し、各種制御対象機器の制御について、収集したデータを分析した結果を反映させるＦＡシステムをユーザが構築することが容易となる。
【００２９】
本発明の一側面に係るパイプライン処理の実行方法によれば、受信キューのオーバーフローを防止しつつも、更にパイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算を実現できる。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施形態１に係るパイプライン演算装置を示す概略構成図である。
【図２】本発明の実施形態１に係るパイプライン演算装置の動作を説明するための図である。（ａ）、（ｂ）はそれぞれ異なる時刻の状態を示す。
【図３】本発明の実施形態２に係るプログラマブルロジックコントローラを示す概略構成図である。
【図４】本発明の実施形態３に係るパイプライン演算装置における、パイプラインの構成と動作を説明するための図である。
【図５】本発明の実施形態４に係るパイプライン演算装置における、パイプラインの構成と動作を説明するための図である。
【図６】本発明の実施形態５に係るパイプライン演算装置を示す概略構成図である。
【図７】本発明の実施形態７に係るパイプライン演算装置を示す概略構成図である。
【図８】本発明の実施形態７に係るパイプライン演算装置における、パイプラインの構成と動作を説明するための図である。
【図９】本発明の実施形態８に係るパイプライン演算装置を示す概略構成図である。
【発明を実施するための形態】
【００３１】
〔実施形態１〕
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）が、図面に基づいて説明される。
【００３２】
§１  適用例
図１を参照して、まず、本発明が適用される場面の一例が述べられる。図１は、本実施形態に係るパイプライン演算装置１１０の構成を示す概略図である。
【００３３】
パイプライン演算装置１１０は、演算部１２０と制御部１６０とを備える。
【００３４】
演算部１２０は、機能ブロックである、複数のノード（入力ノード１３０、ロジックノード１４０、出力ノード１５０）と、複数の受信キュー１４１、１５１とを有する。演算部１２０では、前記ノードが受信キューを介して複数接続されるパイプラインが構成されており、演算部１２０には少なくとも１つのパイプラインが設けられている。
【００３５】
制御部１６０は、機能ブロックであるノード監視部１６１と、キュー監視部１６２と、優先度変数算出部１６３と、時間割当部１６４とを有する。
【００３６】
パイプライン演算装置１１０は、その外部からロードした、もしくはそれが備える記録装置（不図示）からロードしたパイプライン処理実行プログラムを実行することで、機能ブロックとしてのこれら各部の機能を実現する。
【００３７】
ノード監視部１６１は、各ノード（入力ノード１３０、ロジックノード１４０、出力ノード１５０）から、ノードでのメッセージの処理に要する時間であるノード処理時間Ｔを取得する。
【００３８】
キュー監視部１６２は、受信キュー１４１、１５１から、それぞれの蓄積メッセージ量を取得する。
【００３９】
優先度変数算出部１６３は、少なくとも前記ノードのノード処理時間と、当該ノードの前段の受信キューの蓄積メッセージ量とに基づいて、当該ノードの優先度変数ＰＲＩを算出する。
【００４０】
時間割当部１６４は、ノード毎の優先度変数ＰＲＩに応じ、各ノードに対して稼動時間を割り当てて、動作させる。
【００４１】
このように、本実施形態のパイプライン演算装置１１０は、少なくともノード処理時間と受信キューの蓄積メッセージ量とに基づいて、優先度変数ＰＲＩを算出し、これに応じて各ノードに対して稼動時間を割り当てる。
【００４２】
よって、受信キューでのオーバーフローを防止しつつも、パイプライン処理が全体として効率的に実行できる、改良されたパイプライン演算装置が実現される。
【００４３】
§２  構成例
続いて、本実施形態のパイプライン演算装置１１０の構成の一例が説明される。
【００４４】
演算部１２０におけるノードとは、入力ノード１３０、ロジックノード１４０、出力ノード１５０のいずれかである。それぞれの機能は次の通りである。
【００４５】
入力ノード１３０は、パイプライン演算装置１１０の外部の機器等から、メッセージを収集する機能ブロックである。入力ノード１３０は外部の機器等の種類や扱うメッセージの種類に応じて、多種多様である。本明細書において、ひとまとまりのデータを、メッセージと称し、メッセージの内容は生産情報、制御情報、環境情報などの情報である。制御情報は、例えばサーボモータから取得できるリアルタイムのトルク等のパラメータといった情報であり得、環境情報は、例えば気温といった情報であり得る。
【００４６】
ロジックノード１４０は、入力されたメッセージに対して処理を行い、後段に出力する機能ブロックである。ロジックノード１４０は実施する処理の内容に応じて、多種多様である。
【００４７】
出力ノード１５０は、入力されたメッセージをパイプライン演算装置１１０の外部の機器等へ出力する機能ブロックである。出力ノード１５０は外部の機器等の種類や扱うメッセージの種類に応じて、多種多様である。
【００４８】
パイプライン演算装置１１０の外部の機器等としては、工作機械や測定機器その他の各種ＦＡ機器、各種生産情報に関するデータを収集し提供するデータベース、各種生産情報に関するデータを保存するデータベース、インターネットやその他のネットワーク上のクラウドサーバ、であり得る。
【００４９】
更に、パイプライン演算装置１１０がＰＬＣに統合されている場合において、パイプライン演算装置１１０の入力ノード１３０または出力ノード１５０の接続先としては、ＰＬＣの備える記憶装置上のデータファイルや、ＰＬＣ上で動作している工作機械のモーション制御プログラム等のアプリケーションでもあり得る。
【００５０】
生産情報とは、工作機械や測定機器その他の各種ＦＡ機器の動作に関する情報、測定データ、その他生産に係わる情報を含む概念である。
【００５１】
図１には、それぞれ入力ノード１３０、出力ノード１５０の接続先の外部の機器の例示としての、データサーバ１１、データベース１２が示されている。
【００５２】
演算部１２０においては、入力ノード１３０と出力ノード１５０との間に、順次必要なロジックノード１４０が接続されて、パイプラインが構成される。
【００５３】
ロジックノード１４０の前段には、ロジックノードの受信キュー１４１が設けられている。同様に、出力ノード１５０の前段には、出力ノードの受信キュー１５１が設けられている。それぞれの受信キュー１４１、１５１は、ロジックノード１４０や出力ノード１５０に入力されるメッセージを、ロジックノード１４０や出力ノード１５０での処理が終了して次のメッセージの受け入れが可能となるまで一時的に蓄積する。
【００５４】
演算部１２０を構成するパイプラインは、通常多数であるが、少なくとも１つあればよい。また、パイプラインは、１つの入力ノード１３０から１つの出力ノード１５０へと、単数もしくは複数のロジックノードが直列に接続されるもののみに限られず、途中で分岐や合流をするものであってもよい。
【００５５】
ノード監視部１６１、キュー監視部１６２、優先度変数算出部１６３、時間割当部１６４を有する制御部１６０の構成の概略は、上記§１適用例に記載の通りである。各部の機能の詳細は、パイプライン演算装置１１０の動作の説明とともに後述される。
【００５６】
なお本実施形態においては、各々の受信キューの蓄積メッセージ量として、メッセージの数である、蓄積メッセージ数Ｑが採用される。
【００５７】
ノード処理時間Ｔは具体的に、以下の開始時刻から終了時刻までの時間であり得る。ノードが受信キューからメッセージを受け取った時刻である受信キューのデキュー時刻を開始時刻とし得る。なお、入力ノード１３０の場合には、入力ノード１３０が実行のスタート（キック）を行った時刻を開始時刻とし得る。
【００５８】
また、ノードが接続先のノードの受信キューにメッセージを送り込む時刻である、接続先のノードの受信キューのエンキュー時刻を終了時刻とし得る。なお、出力ノード１５０の場合には、出力ノード１５０の出力先の外部機器等へのメッセージの出力が完了した時刻とし得る。更に、特にノードが後段にメッセージを出力しない場合等において、ノードが受け取ったメッセージに係る処理を、メッセージを受け取ったノード自身でそれ以上行う必要のなくなった時点（自身での処理が完了した時点）を、完了した時刻としてもよい。
【００５９】
§３  動作例
本実施形態のパイプライン演算装置１１０の動作について、より具体的な例に基づいて説明する。
【００６０】
入力ノード１３０は複数のデータサーバ１１から、順次メッセージを取得する。各々のデータサーバ１１は、ハイパーテキストトランスファープロトコル（Hypertext Transfer Protocol：ｈｔｔｐ）やハイパーテキストトランスファープロトコルセキュア（Hypertext Transfer Protocol Secure：ｈｔｔｐｓ）に基づいてメッセージを提供するウェブサーバ（Web Server）であり得る。
【００６１】
ロジックノード１４０は順次、入力されたメッセージから、例えば、設備の状態の解析に必要なデータの抽出を行い所要の演算を行って出力する。ロジックノード１４０、例えば、ハイパーテキストマークアップラングイッジ（HyperText Markup Language：ｈｔｍｌ）解析スクリプトを用いた処理を行うものであってよい。
【００６２】
出力ノード１５０は、ロジックノード１４０が出力するメッセージを、順次、データベース１２に対して出力する。
【００６３】
図２（ａ）は、各ノードがこのような動作を実行するにあたっての、演算部１２０におけるパイプライン１２１の状態を示す図である。ノード処理時間Ｔ、受信キューの蓄積メッセージ数Ｑ、及び、優先度変数ＰＲＩについての添え字ｉ、ｎ、ｏは、それぞれ、入力ノード１３０、ロジックノード１４０あるいはその受信キュー１４１、出力ノード１５０あるいはその受信キュー１５１を表す。
【００６４】
この例において、各ノードがメッセージを処理するのに要するノード処理時間Ｔについて、Ｔｉ＝２０ｍｓ、Ｔｎ＝１００ｍｓ、Ｔｏ＝５０ｍｓである。
【００６５】
このとき、ノード監視部１６１が、入力ノード１３０、ロジックノード１４０、出力ノード１５０から、それぞれのノード処理時間Ｔｉ＝２０ｍｓ、Ｔｎ＝１００ｍｓ、Ｔｏ＝５０ｍｓを取得する。なお、ここで単位をミリ秒として表したが、ＣＰＵ（Central Processing Unit）のクロック数であってもよい。
【００６６】
また、各々の受信キューに蓄積されたメッセージの数である蓄積メッセージ数Ｑについて、図２（ａ）の状態では、一時的にＱｎ＝３、Ｑｏ＝０となっている。
【００６７】
このとき、キュー監視部１６２が、受信キュー１４１、１５１から、それぞれ蓄積メッセージ数Ｑｎ＝３、Ｑｏ＝０を取得する。
【００６８】
次に、優先度変数算出部１６３が、ノード監視部１６１から各ノードのノード処理時間Ｔを受信し、また、キュー監視部１６２から各ノードの蓄積メッセージ数Ｑを受信する。また、優先度変数算出部１６３は、入力ノード１３０に関して蓄積メッセージ数Ｑｉを１とみなす。
【００６９】
それから優先度変数算出部１６３が、各ノードについての優先度変数ＰＲＩを算出する。ここで、優先度変数ＰＲＩは、少なくともノード処理時間Ｔと蓄積メッセージ数Ｑとから算出される値である。本実施形態における具体的な例示では、優先度変数ＰＲＩはノード処理時間Ｔと蓄積メッセージ数Ｑとの積である。
【００７０】
優先度変数算出部１６３は、各ノードについての優先度変数ＰＲＩを、ＰＲＩｉ１＝１×２０、ＰＲＩｎ＝３×１００、ＰＲＩｏ＝０×５０と算出する。
【００７１】
続いて、時間割当部１６４が、優先度変数算出部１６３が算出した各ノードについての優先度変数ＰＲＩに応じて、演算部１２０に与えられる時間についての情報処理資源、例えば、ＣＰＵ時間を配分する。例示としては、演算部１２０に与えられるＣＰＵ時間を優先度変数ＰＲＩによって按分して、各ノードを稼働させる。
【００７２】
すると、図２（ａ）の状態から所定時間内は、出力ノード１５０にＣＰＵ時間は割り当てられず、ロジックノード１４０には、入力ノード１３０よりも大きなＣＰＵ時間が割り当てられる。
【００７３】
ロジックノード１４０には大きなＣＰＵ時間が割り当てられたため、一定時間経過後に、ロジックノード１４０の受信キュー１４１の蓄積メッセージ数Ｑｎが減少し、例示として図２（ｂ）の状態に遷移した。このように、入力ノード１３０がロジックノード１４０に送ったメッセージの積み上がりが解消された。
【００７４】
ただし時間割当部１６４は、入力ノード１３０に定周期実行の予約がされている場合、例外的に、当該入力ノード１３０には、その動作の定周期実行が行えるＣＰＵ時間を与える。
【００７５】
入力ノード１３０について、定周期実行の予約がされている際の、時間割当部１６４の動作は、次のようなものである。例えば、１ｍｓの定周期で外部機器からメッセージを取得する予約がされ、入力ノード１３０の処理時間が０．０２ｍｓとした場合、少なくとも１ｍｓ以内に０．０２ｍｓのＣＰＵ時間を確保するように、時間割当部１６４は、入力ノード１３０を稼働させる。時間割当部１６４は残余の演算部１２０に与えられるＣＰＵ時間を他のノードで按分して他の各ノードを稼働させる。
【００７６】
なお、入力ノード１３０について、定周期実行の予約がされ、入力ノード１３０に比較的大きな一定のＣＰＵ時間が割り当てられた場合には、入力ノード１３０からのメッセージの出力が高頻度となる。すると、パイプラインの動作の初期に特定のノードの受信キューにメッセージが積み上がろうとするが、この場合においても各ノードの稼働時間が上記同様に調整されて、解消される。
【００７７】
§４  作用、効果
上述のように、本実施形態のパイプライン演算装置１１０は、一時的に特定の受信キューにメッセージが過剰に蓄積されたとしても、各ノードの稼動時間が状況に応じて動的に割り当てられて、過剰な蓄積が解消するように、動作する。従って、パイプライン演算における受信キューのオーバーフローが効果的に抑制される。
【００７８】
また、上述のように、優先度変数ＰＲＩはノード処理時間Ｔと蓄積メッセージ数Ｑとから算出され、各ノードの動作時間が優先度変数ＰＲＩに応じて動的に割り当てられる。つまり、本実施形態のパイプライン演算装置１１０では、ノードにおける動作待ちが生じないような、パイプライン全体としての効率化が実現されている。
【００７９】
（比較１）
比較のため、制御部１６０による上述のような、各ノードの稼動時間の調整が無いケースが説明される。
【００８０】
この場合、例えばロジックノード１４０でのメッセージの処理が時間を要するものである際に、入力ノード１３０から出力されるメッセージが、ロジックノード１４０の受信キュー１４１に積みあがる（Ｑｎが過剰になる）。このような状況が続くと、受信キュー１４１がオーバーフローしてしまう状況に陥る。
【００８１】
そこでオーバーフローを回避するため、入力ノード１３０の動作について、待ち時間を設けることが考えられる。例えば、ロジックノード１４０のノード処理時間がＴｎ＝１００ｍｓである場合に、入力ノード１３０の動作の待ち時間を２００ｍｓに設定し、２００ｍｓ以上の時間間隔でしか、ロジックノード１４０の受信キュー１４１にメッセージが送付されないようにする。このような待ち時間の設計は、パイプライン後段の処理時間を考慮して行う必要がある。
【００８２】
しかしながら、演算部１２０に設定されるパイプラインが多数の場合において、このような調整をユーザが行うことは、非常に煩わしく、また適切に待ち時間を設定することも難しい。
【００８３】
一方、本実施形態のパイプライン演算装置１１０においては、ユーザが入力ノード毎にこのような調整を行わなくとも、動的にメッセージの蓄積が解消される。
【００８４】
よって、ユーザが各ノードの待ち時間等のパラメタを設定する必要が無く、各種機器からのデータ収集分析が可能な、データ収集システムを容易に構築できるようになる。
【００８５】
（比較２）
また比較のため、特許文献１の従来技術を適用したケースが説明される。従来技術を適用したパイプライン演算装置においては、各々のノードに割り当てる稼働時間は、各々のノードの受信キューに蓄積されたデータ量（メッセージによるメモリ使用量）から算出される。
【００８６】
一方、本実施形態のパイプライン演算装置１１０において、各々のノードに割り当てる稼働時間は、各々のノードの受信キューの蓄積メッセージ量である蓄積データ数Ｑと、ノード処理時間Ｔとの積である優先度変数ＰＲＩに応じて按分される。
【００８７】
従って、一時的にあるノードの受信キューにメッセージが過剰に蓄積された場合に、ノード処理時間まで考慮されて、ノードにＣＰＵ時間が割り当てられる。よって、パイプライン演算装置１１０によれば、従来技術を適用するよりも、より早くメッセージの過剰な蓄積の状態が解消され得る。
【００８８】
また、例えばノード処理時間１００ｍｓのノードと、ノード処理時間２００ｍｓのノードとが接続されている場合に一定流量のメッセージがパイプラインを通過するには、後者のノードに２倍のＣＰＵ時間が割り当てられる必要がある。よって、従来技術では、後者のノードの受信キューに前者のノード受信キューの２倍のメッセージが蓄積されると、そのような割り当てが実行される。
【００８９】
一方、本実施形態のパイプライン演算装置１１０では、そのような割り当てを実行するためにこれらのノードで蓄積するメッセージ数は同等である。蓄積メッセージ数Ｑと、ノード処理時間Ｔとの積により、ＣＰＵ時間が割り当てられるからである。このように、本実施形態のパイプライン演算装置１１０によれば、稼動しているパイプライン１２１における各ノードの受信キューに蓄積されるメッセージ数に差異が生じにくい。従って、受信キューを構成するためのメモリリソースが限られた場合であっても、パイプライン演算装置１１０は効率的な運用が可能である。
【００９０】
また、従来技術のように、受信キューに蓄積されるメッセージ量にばらつきがある場合、特定のノードにおいて、処理すべきメッセージが枯渇してしまい、稼働時間の割合が更新される次のタイミングまで、そのノードが受信待ちとなる非効率な状況が生じやすい。しかし、本実施形態のパイプライン演算装置１１０では、このような事態が抑制されるから、パイプライン処理が全体として効率的に実行できるようになる。
【００９１】
以上の実施形態１に関する作用、効果については、以下の実施形態においても、同様に発揮される。
【００９２】
〔実施形態２〕
本発明の他の実施形態が、以下に説明される。なお、説明の便宜上、上記実施形態にて説明した構成要素と同じ機能を有する構成要素については、同じ符号が付記され、その説明は繰り返されない。
【００９３】
図３は、実施形態２に係るプログラマブルロジックコントローラ（ＰＬＣ）２００の構成を示す概略図である。
【００９４】
プログラマブルロジックコントローラ２００は、実施形態１と同様のパイプライン演算装置２１０を備える。パイプライン演算装置２１０には、演算部２２０と制御部２６０とが設けられている。
【００９５】
演算部２２０には、ユーザ（工場管理者）が、データ収集対象機器等、データ出力対象機器等やデータ処理方法に対応するノードを接続したパイプラインを構築することで、ユーザが必要なデータ収集とその処理の設定を容易に行える。
【００９６】
図３において、入力ノードＩｎｐｕｔ、ロジックノードＬｏｇｉｃ、出力ノードＯｕｔｐｕｔにより構成される複数のパイプラインが示されている。なお、図示されないが、上記実施形態同様、各々のロジックノードＬｏｇｉｃと出力ノードＯｕｔｐｕｔの前段には受信キューが接続される。制御部２６０の構成は、上記実施形態と同様である。
【００９７】
プログラマブルロジックコントローラ２００は更に、それが備える記憶装置内のデータファイル２０１、２０２や、その内部で動作する、工作機械のモーション制御プログラム等のアプリケーション２０３、２０４を有している。
【００９８】
パイプライン演算装置２１０の入力ノードＩｎｐｕｔの接続先は、データファイル２０１や、アプリケーション２０３であり得る。更に、入力ノードＩｎｐｕｔの接続先は、プログラマブルロジックコントローラ２００の外部機器である、工作機械や測定機器その他の各種ＦＡ機器、各種生産情報に関するデータを収集し提供するデータサーバ１１、各種生産情報に関するデータを保存するデータベース１２、インターネットやその他のネットワーク上のクラウドサーバ１３であり得る。
【００９９】
パイプライン演算装置２１０の出力ノードＯｕｔｐｕｔの接続先は、データファイル２０２や、アプリケーション２０４であり得る。更に、出力ノードＯｕｔｐｕｔの接続先は、プログラマブルロジックコントローラ２００の外部機器である、工作機械や測定機器その他の各種ＦＡ機器、ＦＡ機器に関するデータを収集し提供するデータサーバ１１、各種生産情報に関するデータを収集し提供するデータベース１２、インターネットやその他のネットワーク上のクラウドサーバ１３であり得る。
【０１００】
入力ノードＩｎｐｕｔの接続先であるアプリケーション２０３と、出力ノードＯｕｔｐｕｔの接続先であるアプリケーション２０４とは、異なるアプリケーションであってもよいし、同一のアプリケーションであってもよい。
【０１０１】
実施形態２によれば、データ収集分析機器としてのパイプライン演算装置２１０が、各種制御対象機器の制御を行うプログラマブルロジックコントローラ２００に統合されている。よって、各種制御対象機器の制御について、収集したデータを分析した結果を反映させるシステムをユーザが構築することが容易となる。
【０１０２】
〔実施形態３〕
実施形態３に係るパイプライン演算装置は、上記各実施形態と同様である。実施形態３では、パイプラインに分岐が設定された場合の演算部の動作が説明される。
【０１０３】
図４は、実施形態３に係るパイプライン演算装置の演算部に属するパイプライン３２１を示す図である。パイプライン３２１は以下の構成を有する。
【０１０４】
入力ノード３３０が、パイプライン演算装置外部の工作機械１４からメッセージを取得し、ロジックノード３４０が必要データを抽出する。ロジックノード３４０の前段には、受信キュー３４１が設けられている。ロジックノード３４０は処理されたメッセージを出力ノード（Ａ）３５０と出力ノード（Ｂ）３５２とに分岐して出力する。
【０１０５】
出力ノード（Ａ）３５０は、パイプライン演算装置外部のデータベース１２に対して処理されたメッセージを出力する。出力ノード（Ｂ）３５２は、パイプライン演算装置外部のクラウドサーバ１３に対してメッセージを出力する。出力ノード（Ｂ）３５２は、例えば、ＭＱＴＴ（Message Queuing Telemetry Transport）プロトコルにより処理を実行する。
【０１０６】
ここで、データベース１２に接続する出力ノード（Ａ）３５０のノード処理時間Ｔｏａが５０ｍｓであり、クラウドサーバ１３に接続する出力ノード（Ｂ）３５２は、より時間を要して、ノード処理時間Ｔｏｂが１５０ｍｓであるケースを想定する。データベース１２が、工場内部のローカルなネットワークに接続されており、インターネット上のクラウドサーバ１３に対するよりも、速やかに出力処理が実行されるようなケースに相当する。
【０１０７】
パイプライン３２１の動作が開始すると、出力ノード（Ａ）３５０の受信キュー３５１と、出力ノード（Ｂ）３５２の受信キュー３５３とには、ロジックノード３４０から、ほぼ同時にメッセージが出力される。そして受信キュー（Ａ）３５１の蓄積メッセージ数Ｑｏａと、受信キュー（Ｂ）３５３の蓄積メッセージ数Ｑｏｂのいずれもが１となる。
【０１０８】
すると、出力ノード（Ａ）３５０の優先度変数ＰＲＩｏａ＝１×５０と、出力ノード（Ｂ）３５２の優先度変数ＰＲＩｏｂ＝１×１５０との比率は１：３となる。この比率に従って、ＣＰＵ時間が割り当てられるから、出力ノード（Ａ）３５０と出力ノード（Ａ）３５０におけるメッセージの処理は、ほぼ同時に終了する。
【０１０９】
このようにメッセージの処理がほぼ同時に終了するから、その後も、蓄積メッセージ数Ｑｏａ、数Ｑｏｂは、ほぼ同数であり、受信キュー（Ａ）３５１と受信キュー（Ｂ）とに与えられるＣＰＵ時間の比は、ノード処理時間に対応する。従って、パイプライン３２１の動作が継続している間、出力ノード３５０、３５２のいずれか一方が、メッセージ入力待ちとなって、動作にアイドル状態が生じる事態になることがなく、極めて効率的に各ノードへのＣＰＵ時間の配分が実行されている。
【０１１０】
一方、特許文献１の従来技術を適用した場合には、例えば、パイプラインの動作が開始し、受信キュー（Ａ）３５１の蓄積メッセージ数Ｑｏａと、受信キュー（Ｂ）３５３の蓄積メッセージ数Ｑｏｂのいずれもが１となった際に、同じＣＰＵ時間が配分される。このように、特許文献１の従来技術を適用した場合には、ノード処理時間がより短い出力ノード（Ａ）３５０において、メッセージ入力待ちによる動作のアイドル状態が生じる事態が発生し、パイプライン全体としての動作の効率が悪くなる。
【０１１１】
以上のように、実施形態３の例においては、ノードにおける動作待ちが生じないような、パイプライン全体としての効率化が図られたパイプライン演算装置が実現する。
【０１１２】
〔実施形態４〕
実施形態４に係るパイプライン演算装置は、上記各実施形態と同様である。実施形態４では、パイプラインに合流が設定された場合の演算部の動作が説明される。
【０１１３】
図５は、実施形態４に係るパイプライン演算装置の演算部に属するパイプライン４２１を示す図である。ノード処理時間Ｔ、受信キューの蓄積メッセージ数Ｑ、及び、優先度変数ＰＲＩについての添え字ｉａ、ｉｂ、ｎａ、ｎｂ、ｎ２は、それぞれ、入力ノード（Ａ）４３０、入力ノード（Ｂ）４３２、ロジックノード（Ａ）４４０あるいはその受信キュー（Ａ）４４１、ロジックノード（Ｂ）４４２あるいはその受信キュー（Ｂ）４４３、ロジックノード（２）４４４あるいはその受信キュー（２）４４５を表す。パイプライン４２１は以下の構成を有する。
【０１１４】
入力ノード（Ａ）４３０が、パイプライン演算装置外部の工作機械１４からメッセージを取得し、ロジックノード（Ａ）４４０が必要データを抽出する。ロジックノード（Ａ）４４０の前段には、受信キュー（Ａ）４４１が設けられている。ロジックノード（Ａ）４４０は処理したメッセージをロジックノード（２）４４４の受信キュー（２）４４５にエンキューする。
【０１１５】
入力ノード（Ｂ）４３２が、パイプライン演算装置外部の工作機械１５からメッセージを取得し、ロジックノード（Ｂ）４４２が必要データを抽出する。ロジックノード（Ｂ）４４２の前段には、受信キュー（Ｂ）４４３が設けられている。ロジックノード（Ｂ）４４２は処理したメッセージをロジックノード（２）４４４の受信キュー４４５にエンキューする。
【０１１６】
このようにパイプラインが合流するロジックノード（２）４４４の受信キュー（２）４４５においては、各ノードからのメッセージを１セットとして蓄積メッセージ数Ｑｎ２をカウントする。
【０１１７】
ロジックノード（２）４４４が、受信キュー４４５から、上記両メッセージをデキューし、両メッセージをマージする等の処理を行って、出力ノード４５０に出力する。出力ノード４５０の前段には、受信キュー４５１が設けられている。出力ノード４５０は、パイプライン演算装置外部のデータベース１２に対してメッセージを出力する。
【０１１８】
ここで、ロジックノード（Ａ）４４０のノード処理時間Ｔｎａが５０ｍｓであり、ロジックノード（Ｂ）４４２のノード処理時間Ｔｎｂが１００ｍｓであるケースを想定する。
【０１１９】
各々の入力ノード４３０、４３２についても、優先度変数ＰＲＩに基づいたＣＰＵ時間の割り当てが実行されていれば、上記実施形態と同様にして、各ノードでのメッセージの処理は、同じ時間で完了し得る。
【０１２０】
よって実施形態４によれば、合流点のロジックノード（２）４４４が、いずれかのメッセージの入力待ちとなって、動作にアイドリング状態が生じることが無いようにでき、極めて効率的に各ノードへのＣＰＵ時間の配分が実行され得る。
【０１２１】
このように、実施形態４の例においては、ノードにおける動作待ちが生じないような、パイプライン全体としての効率化が図られたパイプライン演算装置が実現する。
【０１２２】
なお、図５において、Ｑｉａ＝１、Ｑｉｂ＝１、Ｑｎａ＝１、Ｑｎｂ＝１、Ｑｎ２＝１、Ｔｉａ＝１０ｍｓ、Ｔｉｂ＝２０ｍｓ、Ｔｎ２＝１００ｍｓである。また、ＰＲＩｉａ＝１×１０、ＰＲＩｉｂ＝１×２０、ＰＲＩｎａ＝１×５０、ＰＲＩｎｂ＝１×１００、ＰＲＩｎ２＝１×１００である。
【０１２３】
〔実施形態５〕
実施形態４に係るパイプライン演算装置のパイプライン４２１のように、パイプラインに複数の入力ノードからの合流が設定されている場合に、少なくとも１つの入力ノードに定周期実行の予約がされていると次の事象が発生する。
【０１２４】
合流する部分パイプライン同士でメッセージの処理に要する時間が異なるため合流後のノードの受信キュー（図５では受信キュー４４５）に、一方の部分パイプラインからのメッセージが積み上がりつつも、他方の部分パイプラインからのメッセージが枯渇する状況となる。そうして、合流後のノードがメッセージ待ちとなり、効率的なパイプラインの運用がなされない状況となる。実施形態５に係るパイプライン演算装置は、このような事象を解消し得る構成を有する。
【０１２５】
図６は、実施形態５に係るパイプライン演算装置６１０の構成を示す概略図である。
【０１２６】
パイプライン演算装置６１０は、演算部６２０と制御部６６０とを備える。
【０１２７】
演算部６２０は、上記実施形態のパイプライン演算装置と同様であり、各種のパイプラインを内部に設定し得る。
【０１２８】
制御部６６０は、パイプライン演算装置１１０の制御部１６０の構成に加えて、更に合流監視部６６５と、補正係数算出部６６６とを備える。
【０１２９】
合流監視部６６５は、少なくとも合流直前のノードの受信キュー（図５では、受信キュー４４１、４４３）の蓄積メッセージ数をキュー監視部５６２から受け取り、それらを比較する。そうして、比較の結果、合流する部分パイプライン間の蓄積メッセージ数の不均衡の度合いを判断する。
【０１３０】
補正係数算出部６６６は、合流監視部６６５から、合流する部分パイプライン間の蓄積メッセージ数の不均衡の状態の情報を受け取る。補正係数算出部６６６は、合流する部分パイプライン間の不均衡の度合いに応じて、メッセージの蓄積が生じている部分パイプラインに属するノードについて、補正係数Ｋを算出する。
【０１３１】
例えば、仮に図５のような合流のあるパイプラインにおいて、受信キュー４４１の蓄積メッセージ数Ｑｎａが、受信キュー４４３の蓄積メッセージ数Ｑｎｂの３倍になっていたとする。このようなとき、補正係数算出部６６６は、受信キュー４４１の属する部分パイプラインのノードである、入力ノード（Ａ）４３０とロジックノード（Ａ）４４０とに、補正係数Ｋ＝３を設定する。
【０１３２】
時間割当部６６４は、補正係数算出部６６６が算出した補正係数Ｋと、パイプライン演算装置１１０の優先度変数算出部１６３と同様にして優先度変数算出部６６３が算出した優先度変数ＰＲＩに応じて、各ノードにＣＰＵ時間を割り当てる。より具体的には、補正係数が設定されたノードについては、優先度変数ＰＲＩに補正係数を乗じた値に応じたＣＰＵ時間を割り当てる。
【０１３３】
すると、メッセージの蓄積が生じている部分パイプラインに属するノードによりＣＰＵ時間のリソースが割り当てられ、合流点における不均衡が解消する。
【０１３４】
このように、実施形態５に係るパイプライン演算装置６１０によれば、合流のあるパイプラインにおいても、確実にパイプライン処理が全体として効率的に実行できるようになる。
【０１３５】
〔実施形態６〕
実施形態６に係るパイプライン演算装置は、上記各実施形態と同様であるが、優先度変数ＰＲＩの計算式が異なる一例である。
【０１３６】
上記実施形態での例示において、優先度変数算出部の実行する、優先度変数算出のための計算式は、ＰＲＩ＝Ｔ×Ｑであった。つまり、ノード処理時間Ｔと蓄積メッセージ数Ｑとは、同様の重みを有していた。
【０１３７】
しかし、演算部に与えられたメモリの空き容量が少なくなった場合には、蓄積メッセージ数Ｑにより重みを付けて、暫時蓄積メッセージを減少させる方向に動作することが好ましい場合がある。
【０１３８】
実施形態６に係るパイプライン演算装置では、一例として、優先度変数算出部の実行する、優先度変数算出のための計算式を、ＰＲＩ＝Ｔ×Ｑｒ、（ｒ≧１）とすることができる。ここで、変数ｒは、蓄積メッセージ数Ｑに重みを付けるためのパラメタであり、１より大きい場合、蓄積メッセージ数Ｑに、より重みが付いていることを表す。なお、重み付けを考慮した計算式は上記のものに限られず、他の計算式が用いられてもよい。
【０１３９】
実施形態６に係るパイプライン演算装置では、メモリの空き容量が少なくなった場合に、変数ｒの値を１より大きくして、蓄積メッセージ数Ｑを減少させる方向に動作させることができ、メモリ資源の不足が生じる事態の発生を抑制することができる。
【０１４０】
また、実施形態６に係るパイプライン演算装置では、一例として、優先度変数算出部の実行する、優先度変数算出のための計算式を、演算部に与えられたメモリの使用率ｍを直接考慮して、ＰＲＩ＝Ｔ×Ｑ（Ｑ／Ｑｍａｘ＋ｍ）とすることができる。ここで、Ｑｍａｘは、受信キューに蓄積できるメッセージ数の最大値である。本計算式によっても、メモリ資源の不足が生じる事態の発生を抑制することができる。
【０１４１】
〔実施形態７〕
実施形態７に係るパイプライン演算装置は、上記各実施形態と同様であるが、特定の状況で行う特別な処理を、更に備えている一例である。
【０１４２】
図７は、実施形態７に係るパイプライン演算装置５１０の構成を示す概略図である。
【０１４３】
パイプライン演算装置５１０は、演算部５２０と制御部５６０とを備える。
【０１４４】
演算部５２０は、上記実施形態のパイプライン演算装置と同様であり、各種のパイプラインを内部に設定し得る。設定されるパイプラインの例については後述する。煩雑さを避けるため、図７には一つのパイプラインのみが示されている。
【０１４５】
制御部５６０は、パイプライン演算装置１１０の制御部１６０の構成に加えて、更にメモリ監視部５６７と、補正係数算出部５６６とを備える。
【０１４６】
メモリ監視部５６７は、各ノードの蓄積メッセージ数をキュー監視部５６２から受け取り、それらを合計する。そうして、パイプライン演算装置５１０の受信キューのために確保されているメモリ資源の割り当てと比較して、空き容量が所定値よりも小さくなったか否かを判断する。空き容量が所定値よりも小さくなった場合、メモリ監視部５６７は、その旨を補正係数算出部５６６に通知する。
【０１４７】
補正係数算出部５６６は、メモリ監視部５６７から、当該通知を受け取った場合、特定のパイプラインに属するノードについての補正係数Ｋを設定する。補正係数Ｋは、規定値（例えばＫ＝２）であってもよいし、メモリの使用の割合に応じた値でもよい。
【０１４８】
時間割当部５６４は、補正係数算出部５６６が算出した補正係数Ｋと、パイプライン演算装置１１０の優先度変数算出部１６３と同様にして優先度変数算出部５６３が算出した優先度変数ＰＲＩに応じて、各ノードにＣＰＵ時間を割り当てる。より具体的には、補正係数が設定されたノードについては、優先度変数ＰＲＩに補正係数Ｋを乗じた値に応じたＣＰＵ時間を割り当てる。
【０１４９】
図８は、実施形態７に係るパイプライン演算装置５１０の演算部におけるパイプライン（Ａ）５２１とパイプライン（Ｂ）５２２を示す図である。
【０１５０】
ノード処理時間Ｔ、受信キューの蓄積メッセージ数Ｑ、及び、優先度変数ＰＲＩについての添え字ｉａ、ｎａ、ｏａは、それぞれ入力ノード（Ａ）５３０、ロジックノード（Ａ）５４０あるいはその受信キュー（Ａ）５４１、出力ノード（Ａ）５５０あるいはその受信キュー（Ａ）５５１を表す。
【０１５１】
同様に添え字ｉｂ、ｎｂ、ｏｂは、それぞれ入力ノード（Ｂ）５３２、ロジックノード（Ｂ）５４２あるいはその受信キュー（Ｂ）５４３、出力ノード（Ｂ）５５２あるいはその受信キュー（Ｂ）５５３を表す。
【０１５２】
パイプライン（Ａ）５２１には、入力ノード（Ａ）５３０、受信キュー（Ａ）５４１、ロジックノード（Ａ）５４０、受信キュー（Ａ）５５１、出力ノード（Ａ）５５０が順次接続されている。入力ノード（Ａ）５３０、ロジックノード（Ａ）５４０、出力ノード（Ａ）５５０のノード処理時間は、それぞれＴｉａ＝１０ｍｓ、Ｔｎａ＝５０ｍｓ、Ｔｏａ＝１００ｍｓである。
【０１５３】
パイプライン（Ｂ）５２２には、入力ノード（Ｂ）５３２、受信キュー（Ｂ）５４３、ロジックノード（Ｂ）５４２、受信キュー（Ｂ）５５３、出力ノード（Ｂ）５５２が順次接続されている。入力ノード（Ｂ）５３２、ロジックノード（Ｂ）５４２、出力ノード（Ｂ）５５２のノード処理時間は、それぞれＴｉｂ＝１０ｍｓ、Ｔｎｂ＝２００ｍｓ、Ｔｏａ＝５０ｍｓである。
【０１５４】
上記構成において、与えられたメモリの空き容量が少なくなり、メモリ監視部５６７からの通知がされた場合に、補正係数算出部５６６は、パイプライン５２１に属する各ノードに、補正係数Ｋ（例えばＫ＝２）を与える。
【０１５５】
補正係数を与えるパイプラインは、パイプラインが完了するまでの時間が短いものから選択される。図８の例では、パイプライン５２１の当該時間は、Ｔｉａ＋Ｔｎａ＋Ｔｏａであり、１６０ｍｓである。パイプライン５２２の当該時間は、Ｔｉｂ＋Ｔｎｂ＋Ｔｏｂであり、２６０ｍｓである。よって、図８の例では、パイプライン５２１が選択される。
【０１５６】
なお、補正係数算出部５６６が選択するパイプラインは、パイプライン演算装置５１０を構築するプログラムにより、各パイプラインの処理時間の概算値に基づいてあらかじめ決定していてもよい。あるいは、ノード監視部５６１が取得した、各ノードのノード処理時間Ｔに基づいて、逐次算出されるものであってもよい。
【０１５７】
このようにして、パイプラインが完了するまでの時間が短い所定のパイプライン５２１に優先的にＣＰＵ時間が配分されると、当該パイプライン５２１中のメッセージの処理が急速に進み、メモリの空き容量が増加する。
【０１５８】
なお、図８においては、Ｑｎａ＝３、Ｑｏａ＝３、ＰＲＩｎａ＝３×５０、ＰＲＩｏａ＝３×１００、Ｑｎｂ＝３、Ｑｏｂ＝３、ＰＲＩｎｂ＝３×２００、ＰＲＩｏｂ＝３×５０である。
【０１５９】
このように実施形態７に係るパイプライン演算装置５１０では、演算部に与えられたメモリの空き容量が少なくなった場合に、時間割当部５６４が、パイプラインが完了するまでの時間が短いパイプラインに属するノードの稼働時間の配分を大きくし、速やかに演算部５２０中のメッセージを減少させる。
【０１６０】
実施形態７に係るパイプライン演算装置５１０では、メモリの空き容量が少なくなった場合に、制御部５６０が上記特別な処理を行って、演算部５２０に滞留しているメッセージを減少させることができ、メモリ資源の不足が生じる事態の発生を抑制することができる。
【０１６１】
なお、実施形態７では、分岐の無いパイプラインを複数備える場合の例について説明した。一方、例えば図４に示されたような分岐のあるパイプラインは、分岐によってパイプライン中のメッセージ急激に増大する。したがって、上記と同様の動作により、メモリの空き容量が少なくなった場合に、このような分岐のあるパイプラインの稼働時間の配分を相対的に小さくし、メモリの空き容量の回復を図ることも、有効である。
【０１６２】
〔実施形態８〕
実施形態８に係るパイプライン演算装置７１０は、上記各実施形態と同様であるが、ノード監視部が取得したノードの過去からの複数のノード処理時間Ｔの統計値に基づいて、当該ノードの優先度変数ＰＲＩを算出するためのノード処理時間を生成する一例である。
【０１６３】
図９は、実施形態８に係るパイプライン演算装置７１０の構成を示す概略図である。
【０１６４】
パイプライン演算装置７１０は、演算部７２０、制御部７６０と、記録部７７０とを備える。
【０１６５】
演算部７２０は、上記実施形態のパイプライン演算装置と同様であり、各種のパイプラインを内部に設定し得る。
【０１６６】
制御部７６０は、パイプライン演算装置１１０の制御部１６０の構成に加えて、更に統計値算出部７６８を備える。
【０１６７】
ノード監視部７６１は、演算部７２０の各ノードから取得したノード処理時間Ｔを記録部７７０に記録する。
【０１６８】
統計値算出部７６８は、記録部７７０に記録された過去の各ノードのノード処理時間Ｔ及び、ノード監視部７６１が取得した最新のノード処理時間Ｔとに基づいて、ノード処理時間の統計値を算出する。統計値としては、平均値、中央値、若しくは最頻値が用いられ得る。あるいは、スミルノフ・グラブス検定等の手法を用いて、異常値を採用しないようにした最新のノード処理時間Ｔとしてもよい、
優先度変数算出部７６３は、ノード処理時間については、統計値算出部７６８が算出した前記統計値を用いる他は、パイプライン演算装置１１０の優先度変数算出部１６３と同様にして、優先度変数ＰＲＩを算出する。
【０１６９】
時間割当部７６４の動作は、パイプライン演算装置１１０の時間割当部１６４と同様である。
【０１７０】
実施形態８に係るパイプライン演算装置７１０によれば、優先度変数ＰＲＩを算出のためのノード処理時間として統計値を採用するから、突発的な事由による各ノードにおける極端な稼働時間の割り当ての発生が防止され得る。
【０１７１】
〔付記事項〕
上記実施形態において、受信キューの蓄積メッセージ量として、蓄積されたメッセージの数である、蓄積メッセージ数Ｑが用いられた。
【０１７２】
しかしながら、本発明の適用はこれに限られるもので無く、蓄積メッセージ量として、受信キューに蓄積されたメッセージの総サイズ（メモリの使用量）が用いられてもよい。この場合、優先度変数ＰＲＩは、蓄積されたメッセージの総サイズとノード処理時間Ｔとの積で算出され得る。
【０１７３】
また、上記実施形態において、優先度変数ＰＲＩとして、上述の特定の例について説明された。しかしながら、本発明の適用はこれに限られるもので無く、優先度変数ＰＲＩとして、メッセージごとに、その重要度など、メッセージの処理優先度を算出する上で有用と思われる指標に応じた係数を乗じて、その総和を用いて算出してもよい。
【０１７４】
更に、本発明のパイプライン演算装置は、演算部における全てのノードが、本発明の制御部１６０で制御されるものに限られるものではなく、一部のノードは他の方法によって制御されるものであってもよい。
【０１７５】
〔ソフトウェアによる実現例〕
パイプライン演算装置１１０、２１０、５１０、６１０、７１０の機能ブロック（特に、入力ノード、ロジックノード、出力ノード、受信キュー、ノード監視部、キュー監視部、優先度変数算出部、時間割当部、合流監視部、補正係数算出部、メモリ監視部、統計値算出部）は、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよいし、ソフトウェアによって実現してもよい。
【０１７６】
後者の場合、パイプライン演算装置１１０、２１０、５１０、６１０、７１０は、各機能を実現するソフトウェアであるプログラムの命令を実行するコンピュータを備えている。このコンピュータは、例えば１つ以上のプロセッサを備えていると共に、上記プログラムを記憶したコンピュータ読み取り可能な記録媒体を備えている。そして、上記コンピュータにおいて、上記プロセッサが上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。
【０１７７】
上記プロセッサとしては、例えばＣＰＵ（Central Processing Unit）を用いることができる。上記記録媒体としては、「一時的でない有形の媒体」、例えば、ＲＯＭ（Read Only Memory）等の他、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。
【０１７８】
また、上記プログラムを展開するＲＡＭ（Random Access Memory）などを更に備えていてもよい。
【０１７９】
また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。
【０１８０】
なお、本発明の一態様は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１８１】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１８２】
１１０、２１０、５１０、６１０、７１０  パイプライン演算装置
１２０、２２０、５２０、６２０、７２０  演算部
１２１、３２１、４２１、５２１、５２２  パイプライン
１３０、３３０、４３０、４３２、５３０、５３２、Ｉｎｐｕｔ  入力ノード
１４０、３４０、４４０、４４２、４４４、５４０、５４２、Ｌｏｇｉｃ  ロジックノード
１５０、３５０、３５２、４５０、５５０、５５２、Ｏｕｔｐｕｔ  出力ノード
１４１、１５１、３４１、３５１、３５３、４４１、４４３、４４５、４５１、５４１、５４３、５５１、５５３  受信キュー
１６０、２６０、５６０、６６０、７６０  制御部
１６１、５６１、６６１、７６１  ノード監視部
１６２、５６２、６６２、７６２  キュー監視部
１６３、５６３、６６３、７６３  優先度変数算出部
１６４、５６４、６６４、７６４  時間割当部
６６５  合流監視部
５６６、６６６  補正係数算出部
５６７  メモリ監視部
７６８  統計値算出部
７７０  記録部
２００  プログラマブルロジックコントローラ
２０１、２０２  データファイル
２０３、２０４  アプリケーション
１１  データサーバ
１２  データベース
１３  クラウドサーバ
１４、１５  工作機械
Ｔ、Ｔｉ、Ｔｉａ、Ｔｉｂ、Ｔｎ、Ｔｎａ、Ｔｎｂ、Ｔｎ２、Ｔｏ、Ｔｏａ、Ｔｏｂ  ノード処理時間
Ｑ、Ｑｉ、Ｑｉａ、Ｑｉｂ、Ｑｎ、Ｑｎａ、Ｑｎｂ、Ｑｎ２，Ｑｏ、Ｑｏａ、Ｑｏｂ  蓄積メッセージ数
ＰＲＩ、ＰＲＩｉ、ＰＲＩｉａ、ＰＲＩｉｂ、ＰＲＩｎ、ＰＲＩｎａ、ＰＲＩｎｂ、ＰＲＩｎ２、ＰＲＩｏ、ＰＲＩｏａ、ＰＲＩｏｂ  優先度変数
【図１】
2020154830.tif 000003
【図２】
2020154830.tif 000004
【図３】
2020154830.tif 000005
【図４】
2020154830.tif 000006
【図５】
2020154830.tif 000007
【図６】
2020154830.tif 000008
【図７】
2020154830.tif 000009
【図８】
2020154830.tif 000010
【図９】
2020154830.tif 000011