(57)【要約】【課題】複数のプロセッサが連携して処理を行うマルチプロセッサシステムにおいて、それぞれのプロセッサの負荷を適正に分散することができる負荷分散制御装置を提供する。【解決手段】要求する演算処理の内容と演算処理を行う対象の入力データとを含むパケットを順次格納するパケットキューイング部と、入力されたパケットに応じた演算処理を実行する複数の演算処理部とを備え、演算処理部のそれぞれは、入力されたパケットに応じた演算処理が完了した後、次に演算処理を実行するパケットの出力要求をパケットキューイング部に出力し、パケットキューイング部は、入力された出力要求に応じて、格納されているパケットを、パケットが格納された順番で、出力要求を出力したいずれか１つの演算処理部に出力し、パケットキューイング部からパケットが入力された演算処理部は、出力要求に応じて入力されたパケットに応じた演算処理を実行する。【選択図】図１
2015075778.tif 000002
【特許請求の範囲】
【請求項１】
要求する演算処理の内容と、該演算処理を行う対象の入力データとを含むパケットを順次格納するパケットキューイング部と、
入力された前記パケットに応じた演算処理を実行する複数の演算処理部と、
を備え、
前記演算処理部のそれぞれは、
入力された前記パケットに応じた演算処理が完了した後、次に演算処理を実行する前記パケットの出力要求を、前記パケットキューイング部に出力し、
前記パケットキューイング部は、
入力された前記出力要求に応じて、該パケットキューイング部に格納されている前記パケットを、前記パケットが格納された順番で、該出力要求を出力したいずれか１つの前記演算処理部に出力し、
前記パケットキューイング部から前記パケットが入力された前記演算処理部は、
前記出力要求に応じて入力された前記パケットに応じた演算処理を実行する、
ことを特徴とする負荷分散制御装置。
【請求項２】
前記演算処理部は、
入力された前記パケットに含まれる入力データに対して、該パケットに含まれる前記演算処理の内容に応じた演算を実行する演算部と、
前記演算部が演算を実行中であるか否かを判定し、該演算部が演算を実行中でない場合に前記出力要求を出力し、該出力要求に応じて入力された前記パケットを、前記演算部に出力するキュー読み出し部と、
を備えることを特徴とする請求項１に記載の負荷分散制御装置。
【請求項３】
前記パケットは、
要求する前記演算処理の内容が複数の処理内容に分割されて含まれており、
前記演算部は、
前記パケットに含まれる前記処理内容の数と同じ数の演算ユニットが直列に接続されたパイプラインが構成され、
前記パイプラインを構成する前記演算ユニットのそれぞれは、
前記パケットに含まれる異なる前記処理内容のそれぞれに対応し、対応する前記処理内容に応じた演算を順次実行し、
前記キュー読み出し部は、
前記パイプラインの先頭に配置された前記演算ユニットが演算を実行中であるか否かを判定し、該演算ユニットが演算を実行中でない場合に、前記出力要求を出力する、
ことを特徴とする請求項２に記載の負荷分散制御装置。
【請求項４】
前記演算処理部は、さらに、
前記キュー読み出し部によって加算され、前記演算部によって減算されるカウント値を出力するカウンタ部、
を備えることを特徴とする請求項２に記載の負荷分散制御装置。
【請求項５】
前記パケットは、
要求するフィードバック処理における一連の前記演算処理の内容が複数の処理内容に分割されて含まれており、
前記演算部は、
前記パケットに含まれる前記処理内容の数と同じ数の演算ユニットが直列に接続されたパイプラインが構成され、
前記パイプラインを構成する前記演算ユニットのそれぞれは、
前記パケットに含まれる異なる前記処理内容のそれぞれに対応し、対応する前記処理内容に応じた演算を順次実行し、
前記カウンタ部は、
初期値から前記パイプラインを構成する前記演算ユニットの数までの間でカウントした前記カウント値を出力し、
前記キュー読み出し部は、
前記パイプラインの先頭に配置された前記演算ユニットに、対応する前記処理内容を出力したときに前記カウント値を加算させ、
前記演算部は、
前記パイプラインの最終段に配置された前記演算ユニットが、対応する前記処理内容に応じた演算を完了し、該完了した演算の結果が、予め定めた前記フィードバック処理の打ち切り条件を満足する場合に前記カウント値を減算させ、該完了した演算の結果が前記打ち切り条件を満足さない場合に、該完了した演算の結果を前記入力データとして前記フィードバック処理を継続するための前記パケットを出力する、
ことを特徴とする請求項４に記載の負荷分散制御装置。
【請求項６】
前記キュー読み出し部は、
前記カウント値が、前記パイプラインを構成する前記演算ユニットの数未満である場合に前記出力要求を出力し、該出力要求に応じて入力された前記パケットに含まれる、前記パイプラインの先頭に配置された前記演算ユニットに対応する前記処理内容を、該パイプラインの先頭に配置された前記演算ユニットに出力し、
前記カウント値が、前記パイプラインを構成する前記演算ユニットの数と同じ値である場合に、前記フィードバック処理を継続するための前記パケットに含まれる、前記パイプラインの先頭に配置された前記演算ユニットに対応する前記処理内容を、該パイプラインの先頭に配置された前記演算ユニットに出力する、
ことを特徴とする請求項５に記載の負荷分散制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷分散制御装置に関する。
【背景技術】
【０００２】
従来から、複数のプロセッサで構成されるマルチプロセッサシステムがある。このようなマルチプロセッサシステムにおいては、各プロセッサの稼働率を向上することが望まれる。このため、例えば、特許文献１のように、マスタプロセッサと複数のスレーブプロセッサとを備えたマルチプロセッサシステムにおいて、マスタプロセッサが、それぞれのスレーブプロセッサが実行したジョブの数やジョブを実行していないアイドリング状態となった回数を監視することによって、それぞれのスレーブプロセッサにおける処理の負荷を分散する負荷分散制御装置の技術が開示されている。
【０００３】
特許文献１に開示された負荷分散制御装置では、それぞれのスレーブプロセッサ内に、実行したジョブの数をカウントするジョブ数カウンタと、処理がアイドリング状態となった回数をカウントする負荷カウンタとを設け、負荷の分散制御を行うマスタプロセッサが、内部に備えたインターバルタイマに基づいた一定時間毎に、それぞれのスレーブプロセッサからジョブ数カウンタのカウント値と負荷カウンタのカウント値とを取得する。そして、マスタプロセッサは、取得したジョブ数カウンタのカウント値が最小であるスレーブプロセッサを、負荷が少ないスレーブプロセッサであると判定する。このとき、ジョブ数カウンタのカウント値が最小であるスレーブプロセッサが複数ある場合には、マスタプロセッサは、これらのスレーブプロセッサの中で負荷カウンタのカウント値が大きい、すなわち、アイドリング状態となった回数が多いスレーブプロセッサを、負荷が少ないスレーブプロセッサであると判定する。その後、マスタプロセッサは、負荷が少ないと判定したスレーブプロセッサに、次のジョブを投入する。
【０００４】
このように、特許文献１に開示された負荷分散制御装置では、実行したジョブの数が少ないスレーブプロセッサに次のジョブを投入することによって、それぞれのスレーブプロセッサが実行する処理の負荷を分散している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特公平５−０１９７４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示された従来の負荷分散制御装置では、マスタプロセッサにおける処理の効率が一定時間毎に低下してしまうことがあると考えられる。これは、マスタプロセッサが一定時間毎に負荷が少ないスレーブプロセッサの判定を行っているため、例えば、この判定の処理をソフトウェアで実現した場合には、判定処理のルーチンが一定時間毎に読み出されることになり、マスタプロセッサがこれまでに実行していた処理中断して負荷分散の制御を行う必要があるからである。
【０００７】
また、特許文献１に開示された従来の負荷分散制御装置では、スレーブプロセッサに投入されるジョブを処理する際の負荷のばらつきが考慮されていないため、全てのジョブの負荷が同じである場合には、適正な負荷分散の制御を行うことができると考えられるが、処理を実行する際の負荷がジョブ毎に異なる場合には、本来の目的である負荷分散の制御を正しく行えないことがあると考えられる。これは、特許文献１に開示された従来の負荷分散制御装置による負荷が少ないスレーブプロセッサの判定では、最初に、ジョブ数カウンタのカウント値を用いて判定が行われ、それぞれのスレーブプロセッサにおける負荷のバランスは、ジョブ数カウンタのカウント値が最小であるスレーブプロセッサが複数ある場合にのみ、アイドリング状態となった回数が考慮されるからである。
【０００８】
例えば、負荷の軽いジョブが数多く投入されているスレーブプロセッサと、負荷の重いジョブが少ない数だけ投入されているスレーブプロセッサとがあった場合を考える。この場合にそれぞれのスレーブプロセッサの負荷を判定すると、ジョブ数カウンタのカウント値が小さい値である、負荷の重いジョブが少ない数だけ投入されているスレーブプロセッサの方が、負荷が少ないスレーブプロセッサであると判定されてしまい、負荷を適正に分散させることができない。
【０００９】
このように、従来の負荷分散制御装置では、実際に負荷が少ないスレーブプロセッサを正しく判定することができず、適正な負荷分散制御によって、それぞれのスレーブプロセッサの稼働率を向上させることができるとは必ずしもいえない、という問題がある。
【００１０】
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサが連携して処理を行うマルチプロセッサシステムにおいて、それぞれのプロセッサの負荷を適正に分散することができる負荷分散制御装置を提供することを目的としている。
【課題を解決するための手段】
【００１１】
上記の課題を解決するため、本発明の負荷分散制御装置は、要求する演算処理の内容と、該演算処理を行う対象の入力データとを含むパケットを順次格納するパケットキューイング部と、入力された前記パケットに応じた演算処理を実行する複数の演算処理部と、を備え、前記演算処理部のそれぞれは、入力された前記パケットに応じた演算処理が完了した後、次に演算処理を実行する前記パケットの出力要求を、前記パケットキューイング部に出力し、前記パケットキューイング部は、入力された前記出力要求に応じて、該パケットキューイング部に格納されている前記パケットを、前記パケットが格納された順番で、該出力要求を出力したいずれか１つの前記演算処理部に出力し、前記パケットキューイング部から前記パケットが入力された前記演算処理部は、前記出力要求に応じて入力された前記パケットに応じた演算処理を実行する、ことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、複数のプロセッサが連携して処理を行うマルチプロセッサシステムにおいて、それぞれのプロセッサの負荷を適正に分散することができるという効果が得られる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。
【図２】本第１の実施形態の負荷分散制御装置における動作のタイミングの一例を模式的に示した図である。
【図３】本発明の第２の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。
【図４】本第２の実施形態の負荷分散制御装置における動作のタイミングの一例を模式的に示した図である。
【図５】本第２の実施形態の負荷分散制御装置における動作のタイミングと第１の実施形態の負荷分散制御装置における動作のタイミングとを比較して説明する図である。
【図６】本発明の第３の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。
【図７】本第３の実施形態の負荷分散制御装置における動作のタイミングの一例を模式的に示した図である。
【発明を実施するための形態】
【００１４】
＜第１の実施形態＞
以下、本発明の第１の実施形態について、図面を参照して説明する。図１は、本第１の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図１に示した負荷分散制御装置１０は、１つのホストプロセッサ１１と、３つのプロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃと、パケットキューイング部１３と、調停部１４と、を備えている。負荷分散制御装置１０は、当該負荷分散制御装置１０の外部から要求された演算処理を、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。なお、以下の説明においては、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれを区別せずに表す場合には、「プロセッサエレメント部１２」という。
【００１５】
ホストプロセッサ１１は、負荷分散制御装置１０における主のプロセッサである。ホストプロセッサ１１は、負荷分散制御装置１０の外部からの演算処理の要求を受け付け、演算処理の結果を負荷分散制御装置１０の外部に出力する。ホストプロセッサ１１は、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部１３に書き込む。
【００１６】
なお、ホストプロセッサ１１には、負荷分散制御装置１０の外部からそれぞれのパケットが直接入力される構成であっても、負荷分散制御装置１０の外部から入力された演算要求に応じたパケット生成する構成であってもよい。図１においては、ホストプロセッサ１１が、パケットＰ１をパケットキューイング部１３に出力している状態を示している。なお、本第１の実施形態においては、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
【００１７】
パケットキューイング部１３は、例えば、パケットを格納する記憶領域を複数備えたＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ，Ｆｉｒｓｔ  Ｏｕｔ）メモリで構成される待ち行列のメモリである。パケットキューイング部１３には、ホストプロセッサ１１によって書き込まれたパケットが、書き込まれた順番で順次格納される。また、パケットキューイング部１３に格納されたそれぞれのパケットは、調停部１４によって、格納された順番で順次読み出される。
【００１８】
調停部１４は、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれから入力された、次のパケットの出力を要求する出力要求信号ＲＥＱに応じて、パケットキューイング部１３に格納されているパケットを読み出し、読み出したパケットを、出力要求信号ＲＥＱを入力してきたプロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのいずれかに出力する。
【００１９】
調停部１４は、同時に複数のプロセッサエレメント部１２から出力要求信号ＲＥＱが入力された場合には、出力要求信号ＲＥＱを受け付けるプロセッサエレメント部１２を調停し、いずれか１つのプロセッサエレメント部１２から入力された出力要求信号ＲＥＱを受け付ける。そして、出力要求信号ＲＥＱを受け付けたいずれか１つのプロセッサエレメント部１２に、読み出したパケットを出力する。
【００２０】
なお、調停部１４による出力要求信号ＲＥＱを受け付けるプロセッサエレメント部１２の調停方法としては、例えば、それぞれのプロセッサエレメント部１２に付与された識別番号が小さい順（図１においては、プロセッサエレメント部１２ａが最も識別番号が小さく、プロセッサエレメント部１２ｃが最も識別番号が大きい）に出力要求信号ＲＥＱを受け付けるなどの方法や、が考えられる。また、調停部１４による調停方法としては、それぞれのプロセッサエレメント部１２に付与された優先順位に基づいて調停するなど、様々な方法が考えられる。本第１の実施形態においては、調停部１４による調停方法に関しては、何ら限定しない。
【００２１】
プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれは、同じ処理機能を持ったプロセッサ（演算処理部）である。プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれは、調停部１４を介して入力された、パケットキューイング部１３に格納されたパケットに応じた演算処理の演算（タスク）を実行する。
【００２２】
また、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれは、入力されたパケットに応じて実行しているタスクがなくなり、すなわち、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットの出力を要求する出力要求信号ＲＥＱを、調停部１４に出力する。そして、調停部１４から次に実行するパケットが入力されると、入力されたパケットに応じた演算処理の実行を開始する。このように、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれは、実行中の演算処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。
【００２３】
プロセッサエレメント部１２ａは、キュー読み出し部１２１ａと演算部１２２ａとを備えている。また、プロセッサエレメント部１２ｂは、キュー読み出し部１２１ｂと演算部１２２ｂとを備えている。また、プロセッサエレメント部１２ｃは、キュー読み出し部１２１ｃと演算部１２２ｃとを備えている。プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれに備えたキュー読み出し部１２１ａ〜キュー読み出し部１２１ｃのそれぞれは、同じ機能を持った構成要素である。また、プロセッサエレメント部１２ａ〜プロセッサエレメント部１２ｃのそれぞれに備えた演算部１２２ａ〜演算部１２２ｃのそれぞれは、同じ機能を持った構成要素である。
【００２４】
以下の説明においては、キュー読み出し部１２１ａ〜キュー読み出し部１２１ｃのそれぞれを区別せずに表す場合には、「キュー読み出し部１２１」という。また、演算部１２２ａ〜演算部１２２ｃのそれぞれを区別せずに表す場合には、「演算部１２２」という。また、以下の説明においては、プロセッサエレメント部１２を代表して、プロセッサエレメント部１２ａに備えた構成要素について説明する。なお、プロセッサエレメント部１２ｂに備えた構成要素や、プロセッサエレメント部１２ｃに備えた構成要素も、以下に説明するプロセッサエレメント部１２ａに備えた構成要素と同様の動作である。
【００２５】
キュー読み出し部１２１ａは、調停部１４から入力されたパケットを、演算部１２２ａに出力する。また、キュー読み出し部１２１ａは、演算部１２２ａが実行しているタスクがない場合、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力し、出力した出力要求信号ＲＥＱに応じて入力された次のパケットを、演算部１２２ａに出力する。
【００２６】
なお、キュー読み出し部１２１ａが、演算部１２２ａが実行しているタスクがあるか否かを判定する方法としては、例えば、演算部１２２ａが出力する演算完了信号を検出する方法や、演算部１２２ａから入力される読み出し指示信号に応じて判定する方法などが考えられる。本第１の実施形態においては、キュー読み出し部１２１ａによる演算部１２２ａが実行しているタスクがあるか否かの判定方法に関しては、何ら限定しない。
【００２７】
演算部１２２ａは、キュー読み出し部１２１ａから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容に応じた演算（タスク）を実行する。演算部１２２ａは、タスクの実行が完了すると、例えば、タスクの実行が完了したことを表す演算完了信号を出力する。また、演算部１２２ａは、タスクの実行が完了すると、次のパケットに応じたタスクを実行するため、例えば、次のパケットの読み出しを指示する読み出し指示信号を、キュー読み出し部１２１ａに出力する。
【００２８】
このような構成によって、負荷分散制御装置１０では、要求された演算処理を複数のプロセッサエレメント部１２のそれぞれで分担して行う際に、それぞれのプロセッサエレメント部１２が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部１２のみに負荷が集中してしまうことを回避することができる。
【００２９】
なお、図１に示した負荷分散制御装置１０の構成では、調停部１４が、プロセッサエレメント部１２のそれぞれから入力された出力要求信号ＲＥＱの受付を調停する構成を示したが、負荷分散制御装置１０の構成は、図１に示した構成のみに限定されるものではない。例えば、負荷分散制御装置１０に備えたそれぞれのプロセッサエレメント部１２を順番に指定し、実行しているタスクがないプロセッサエレメント部１２が、指定されたタイミングでのみ出力要求信号ＲＥＱを出力する構成であれば、負荷分散制御装置１０に備えた全てのプロセッサエレメント部１２で、出力要求信号ＲＥＱを出力するタイミングが重複することがなくなる。このため、負荷分散制御装置１０に調停部１４を備えない構成にすることもできる。
【００３０】
より具体的には、予め定めたタイミング毎に“０”から負荷分散制御装置１０に備えたプロセッサエレメント部１２の数までカウントするカウンタを備える。そして、このカウンタのカウント値とそれぞれのプロセッサエレメント部１２に付与された識別番号とがあっているときに、このプロセッサエレメント部１２が出力要求信号ＲＥＱを出力することを許可する構成にする。この構成によって、複数のプロセッサエレメント部１２から同時に出力要求信号ＲＥＱが出力されることはなくなる。なお、このような構成の場合、それぞれのプロセッサエレメント部１２（キュー読み出し部１２１）は、パケットキューイング部１３に直接アクセスして、パケットキューイング部１３に格納されているパケットを読み出す構成になる。
【００３１】
次に、負荷分散制御装置１０の動作について説明する。図２は、本第１の実施形態の負荷分散制御装置１０における動作のタイミングの一例を模式的に示した図である。なお、図２においては、図２（ａ）に、従来の負荷分散制御装置の動作のタイミングの一例を示し、図２（ｂ）に、本第１の実施形態の負荷分散制御装置１０の動作のタイミングの一例を示している。
【００３２】
まず、図２（ａ）を用いて、従来の負荷分散制御装置における動作を説明する。図２（ａ）には、本第１の実施形態の負荷分散制御装置１０と同様に、３つのスレーブプロセッサａ〜スレーブプロセッサｃを備えている構成の従来の負荷分散制御装置におけるそれぞれのスレーブプロセッサのジョブ数カウンタのカウント値と、それぞれのスレーブプロセッサがジョブを実行している期間とを示している。
【００３３】
従来の負荷分散制御装置では、マスタプロセッサが、一定時間毎に取得したそれぞれのスレーブプロセッサのジョブ数カウンタのカウント値に基づいて、次のジョブを投入するスレーブプロセッサを判定する。このため、図２（ａ）に示したようなタイミングで、それぞれのスレーブプロセッサのジョブ数カウンタのカウント値に基づいた、負荷が少ないスレーブプロセッサの判定が行われる。
【００３４】
図２（ａ）に示したタイミングでは、スレーブプロセッサａのジョブ数カウンタのカウント値が“３”、スレーブプロセッサｂのジョブ数カウンタのカウント値が“２”、スレーブプロセッサｃのジョブ数カウンタのカウント値が“１”である。このため、従来の負荷分散制御装置に備えたマスタプロセッサは、ジョブ数カウンタのカウント値が最小であるスレーブプロセッサｃを、負荷が少ないスレーブプロセッサであると判定し、スレーブプロセッサｃに、次のジョブを投入することになる。
【００３５】
しかし、図２（ａ）を見てわかるように、スレーブプロセッサａとスレーブプロセッサｂとは、ジョブ数カウンタのカウント値は最小ではないが、それぞれが実行するジョブの負荷がかるいため、スレーブプロセッサｃよりも早く実行しているジョブが完了し、ジョブを実行していないアイドリング状態となる。しかし、マスタプロセッサは、次のジョブをスレーブプロセッサｃに投入しているため、スレーブプロセッサａとスレーブプロセッサｂとは、アイドリング状態が解消されることなく、次のジョブがスレーブプロセッサｃによって実行されることになる。
【００３６】
このように、従来の負荷分散制御装置における負荷分散の制御では、アイドリング状態となるスレーブプロセッサ（図２（ａ）においては、スレーブプロセッサａ）に正しくジョブが投入されない、すなわち、適正な負荷分散の制御を行うことができない。
【００３７】
これに対して、本第１の実施形態の負荷分散制御装置１０では、適正な負荷分散の制御を行うことができる。次に、図２（ｂ）を用いて、本第１の実施形態の負荷分散制御装置１０における動作を説明する。図２（ｂ）には、図１に示した３つのプロセッサエレメント部１２それぞれが、入力されたパケットに応じたタスクを実行している期間を示している。
【００３８】
負荷分散制御装置１０では、それぞれのプロセッサエレメント部１２が自発的に調停部１４に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。このため、図２（ｂ）に示したように、プロセッサエレメント部１２ｂは、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットを取得し、次のパケットに応じた演算処理のタスクを実行する。
【００３９】
このように、負荷分散制御装置１０における負荷分散の制御では、実行しているタスクの処理が完了した、すなわち、演算処理が空いているプロセッサエレメント部１２が自発的に次のパケットを取得することにより、この空いているプロセッサエレメント部１２にパケットが入力され、適正な負荷分散の制御を行うことができる。
【００４０】
また、図２（ａ）と図２（ｂ）とにおける全ての処理が完了するタイミングを比較してわかるように、負荷分散制御装置１０では、適正な負荷分散の制御を行うことによって、従来の負荷分散制御装置よりも早く全ての処理を完了することができる。
【００４１】
このように、負荷分散制御装置１０では、演算処理が空いているそれぞれのプロセッサエレメント部１２が、自発的に次のパケットを取得して演算処理を実行する。これにより、負荷分散制御装置１０では、それぞれのパケット毎に処理を実行する際の負荷のばらつきがある場合でも、確実に空いているプロセッサエレメント部１２にパケットが入力されるように、負荷分散の制御を行うことができる。このように、負荷分散制御装置１０では、動的な負荷分散の制御を行うことによって、それぞれのプロセッサエレメント部１２の稼働率を向上させ、結果的に全ての演算処理に要する時間、すなわち、負荷分散制御装置１０が実行する演算処理のスループットを短縮することができる。
【００４２】
また、負荷分散制御装置１０では、演算処理が空いているそれぞれのプロセッサエレメント部１２が、自発的に次のパケットを取得するため、従来の負荷分散制御装置に備えたマスタプロセッサのように、次のパケットの投入先を判定するための構成は不要になる。これにより、負荷分散制御装置１０では、ホストプロセッサ１１は、実行している処理を中断して他の処理を実行することにより、処理効率が低下してしまうことがなくなる。
【００４３】
なお、本第１の実施形態の負荷分散制御装置１０では、それぞれのプロセッサエレメント部１２が、入力されたパケットに応じた演算処理のタスクを１つずつ実行する構成について説明した。しかし、それぞれのプロセッサエレメント部１２が、複数の演算処理のタスクを同時に実行する構成にすることもでき、このような構成であっても、本第１の実施形態の負荷分散制御装置１０と同様に、本発明における負荷分散制御の考え方を適用することができる。
【００４４】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。本第２の実施形態の負荷分散制御装置は、負荷分散制御装置に備えたそれぞれのプロセッサエレメント部が、複数の演算処理のタスクを同時に実行する構成の負荷分散制御装置である。図３は、本第２の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図３に示した負荷分散制御装置２０は、１つのホストプロセッサ１１と、３つのプロセッサエレメント部２２ａ〜プロセッサエレメント部２２ｃと、パケットキューイング部１３と、調停部１４と、を備えている。なお、以下の説明においては、プロセッサエレメント部２２ａ〜プロセッサエレメント部２２ｃのそれぞれを区別せずに表す場合には、「プロセッサエレメント部２２」という。
【００４５】
負荷分散制御装置２０は、第１の実施形態の負荷分散制御装置１０と同様に、当該負荷分散制御装置２０の外部から要求された演算処理を、プロセッサエレメント部２２ａ〜プロセッサエレメント部２２ｃのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。ただし、負荷分散制御装置２０は、それぞれのプロセッサエレメント部２２内で、複数の演算処理のタスクを同時に実行することが、第１の実施形態の負荷分散制御装置１０と異なる。つまり、負荷分散制御装置２０では、それぞれのプロセッサエレメント部２２内で複数の演算処理のタスクを同時に実行するための機能が、ホストプロセッサ１１およびそれぞれのプロセッサエレメント部２２に加わること以外は、負荷分散制御装置２０の構成要素や動作は、第１の実施形態の負荷分散制御装置１０と同様である。従って、図３においては、図１に示した第１の実施形態の負荷分散制御装置１０の構成要素と同様の構成要素には、同一の符号を付加している。以下の説明においては、第１の実施形態の負荷分散制御装置１０と同様の構成要素や動作に関する説明は省略し、第１の実施形態の負荷分散制御装置１０と異なる構成要素や動作について説明する。
【００４６】
ホストプロセッサ１１は、負荷分散制御装置２０の外部からの演算処理の要求を受け付け、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部１３に書き込む。ただし、負荷分散制御装置２０では、それぞれのプロセッサエレメント部２２内で複数の演算処理のタスクを同時に実行するため、ホストプロセッサ１１は、要求された複数の演算処理の演算内容と、演算処理を行う対象の入力データ（それぞれの演算処理に対応した複数の入力データであってもよい）とを含むパケットを、パケットキューイング部１３に書き込む。
【００４７】
なお、図３においては、ホストプロセッサ１１が、パイプライン的に処理を実行する演算内容が分割され、３つの演算処理の演算内容（処理１〜３）として含まれたパケットＰ２をパケットキューイング部１３に出力している状態を示している。しかし、本第２の実施形態の負荷分散制御装置２０においては、第１の実施形態の負荷分散制御装置１０と同様に、演算処理が外部から要求される際の形式や、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
【００４８】
プロセッサエレメント部２２ａ〜プロセッサエレメント部２２ｃのそれぞれは、同じ処理機能を持ったプロセッサ（演算処理部）である。プロセッサエレメント部２２ａ〜プロセッサエレメント部２２ｃのそれぞれは、調停部１４を介して入力された、パケットキューイング部１３に格納されたパケットに応じた複数の演算処理の演算（タスク）を、同時に実行する。以下の説明においては、プロセッサエレメント部２２を代表して、プロセッサエレメント部２２ａについて説明する。
【００４９】
プロセッサエレメント部２２ａは、入力されたパケットに含まれる先頭（最初）の演算内容（処理１）に応じて実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットの出力を要求する出力要求信号ＲＥＱを、調停部１４に出力する。そして、調停部１４から次に実行するパケットが入力されると、入力されたパケットに含まれる最初の演算内容（処理１）に応じた演算処理から、順次演算（タスク）の実行を開始する。このように、プロセッサエレメント部２２ａは、入力されたパケットに含まれる全ての演算内容（処理２および処理３）が完了していない状態であっても、実行中の演算内容（処理１）が完了した後、自発的に次パケットを要求して、次のパケットに応じた演算処理のタスクを実行する。
【００５０】
プロセッサエレメント部２２ａは、キュー読み出し部１２１ａと演算部２２２ａとを備えている。なお、プロセッサエレメント部２２ｂや、プロセッサエレメント部２２ｃも、プロセッサエレメント部２２ａと同様に、キュー読み出し部１２１と演算部２２２とを備えており、プロセッサエレメント部２２ｂに備えた構成要素や、プロセッサエレメント部２２ｃに備えた構成要素も、以下に説明するプロセッサエレメント部２２ａに備えた構成要素と同様の動作である。
【００５１】
キュー読み出し部１２１ａは、調停部１４から入力されたパケットを、演算部２２２ａに出力する。また、キュー読み出し部１２１ａは、演算部２２２ａから次のパケットの読み出しを指示する読み出し指示信号が入力されると、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力し、出力した出力要求信号ＲＥＱに応じて入力された次のパケットを、演算部２２２ａに出力する。
【００５２】
演算部２２２ａは、キュー読み出し部１２１ａから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容（処理１〜３）に応じたそれぞれの演算（タスク）を順次実行する。演算部２２２ａ内では、パケットに含まれる３つの演算内容のそれぞれに対応する３つの演算ユニット２２２１ａ〜演算ユニット２２２３ａを直列に接続した、演算ユニットのパイプラインが構成されている。
【００５３】
演算ユニット２２２１ａ〜演算ユニット２２２３ａのそれぞれは、入力されたパケットに含まれるそれぞれの演算内容（処理１〜３）に対応し、対応する演算内容に応じた演算（タスク）を順次実行する。つまり、パイプラインの先頭に配置された演算ユニット２２２１ａが演算内容（処理１）に応じたタスクを実行し、このタスクの処理が完了すると、パイプラインの２番目に配置された演算ユニット２２２２ａが演算内容（処理２）に応じたタスクを実行する。そして、演算ユニット２２２２ａが演算内容（処理２）に応じたタスクの処理が完了すると、パイプラインの最終段に配置された演算ユニット２２２３ａが演算内容（処理３）に応じたタスクを実行する。そして、演算ユニット２２２３ａが演算内容（処理３）に応じたタスクの処理が完了すると、演算内容（処理３）の演算処理の結果を、プロセッサエレメント部２２ａ（演算部２２２ａ）の演算結果として出力する。
【００５４】
演算ユニット２２２１ａは、対応する演算内容（処理１）に応じたタスクの実行が完了し、次のタスクを実行する準備が整ったときに、次のパケットの読み出しを指示する読み出し指示信号を、キュー読み出し部１２１ａに出力する。この読み出し指示信号に応じてキュー読み出し部１２１ａは、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力し、調停部１４を介して入力された次のパケットを、演算部２２２ａに出力する。これにより、演算ユニット２２２１ａは、次のパケットの対応する演算内容（処理１）に応じたタスクの実行を開始する。
【００５５】
演算ユニット２２２２ａおよび演算ユニット２２２３ａのそれぞれは、対応する演算内容（処理２および処理３）に応じたタスクが完了した場合でも、読み出し指示信号を出力しない。この点以外の動作は、演算ユニット２２２１ａの動作と同様であるため、詳細な説明は省略する。
【００５６】
このように、負荷分散制御装置２０では、それぞれのプロセッサエレメント部２２に備えた演算部２２２内に複数の演算ユニットを備え、この複数の演算ユニットでパイプラインを構成する。このような構成によって、負荷分散制御装置２０では、入力されたパケットに含まれる複数の演算処理のタスクを、パイプラインを構成するそれぞれの演算ユニットで同時に実行することができる。
【００５７】
また、負荷分散制御装置２０では、要求された演算処理を複数のプロセッサエレメント部２２のそれぞれで分担して行う際に、第１の実施形態の負荷分散制御装置１０と同様に、それぞれのプロセッサエレメント部２２が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部２２のみに負荷が集中してしまうことを回避することができる。
【００５８】
なお、図３に示した負荷分散制御装置２０の構成でも、調停部１４が、プロセッサエレメント部２２のそれぞれから入力された出力要求信号ＲＥＱの受付を調停する構成を示したが、負荷分散制御装置２０の構成は、第１の実施形態の負荷分散制御装置１０と同様に、図３に示した構成のみに限定されるものではない。
【００５９】
次に、負荷分散制御装置２０の動作について説明する。図４は、本第２の実施形態の負荷分散制御装置２０における動作のタイミングの一例を模式的に示した図である。以下の説明においては、説明を容易にするため、１つのプロセッサエレメント部２２ａの動作に着目して説明を行う。
【００６０】
なお、図３に示した負荷分散制御装置２０では、プロセッサエレメント部２２ａ（キュー読み出し部１２１ａ）が、演算ユニット２２２１ａから出力された読み出し指示信号に応じて調停部１４に出力要求信号ＲＥＱを出力する。そして、調停部１４が、プロセッサエレメント部２２ａ（キュー読み出し部１２１ａ）から出力された出力要求信号ＲＥＱに応じてパケットキューイング部１３に格納されているパケットを読み出し、読み出したパケットをプロセッサエレメント部２２ａ（キュー読み出し部１２１ａ）に出力する。このような動作によって、プロセッサエレメント部２２ａ（キュー読み出し部１２１ａ）に、調停部１４がパケットキューイング部１３から読み出したパケットがプロセッサエレメント部２２ａ（キュー読み出し部１２１ａ）に入力される。しかし、以下の説明においては、説明を容易にするため、キュー読み出し部１２１ａがパケットキューイング部１３に直接アクセスして、パケットキューイング部１３に格納されているパケットを読み出す構成であるものとして説明する。
【００６１】
図４には、図３に示したプロセッサエレメント部２２ａ内のキュー読み出し部１２１ａが（調停部１４を介して）読み出すパケットと、プロセッサエレメント部２２ａ内の演算部２２２ａに備えた３つの演算ユニット２２２１ａ〜演算ユニット２２２３ａのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行している期間とを示している。
【００６２】
演算ユニット２２２１ａが出力した読み出し指示信号に応じてキュー読み出し部１２１ａが読み出したパケットＰ２１が演算部２２２ａに入力されると、演算部２２２ａに備えた演算ユニット２２２１ａは、入力されたパケットＰ２１に含まれる最初の演算内容（処理１）に応じたタスクを実行する。
【００６３】
そして、演算ユニット２２２１ａがパケットＰ２１の演算内容（処理１）に応じたタスクの処理が完了すると、演算ユニット２２２２ａは、入力されたパケットＰ２１に含まれる２番目の演算内容（処理２）に応じたタスクの実行を開始する。その後、演算ユニット２２２２ａがパケットＰ２１の演算内容（処理２）に応じたタスクの処理が完了すると、演算ユニット２２２３ａは、入力されたパケットＰ２１に含まれる最後の演算内容（処理３）に応じたタスクの実行を開始する。そして、演算ユニット２２２３ａは、パケットＰ２１の演算内容（処理３）に応じたタスクの処理が完了すると、パケットＰ２１の演算内容（処理３）の演算処理の結果を出力する。
【００６４】
また、演算ユニット２２２１ａは、パケットＰ２１の演算内容（処理１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、次のタスクを実行する準備が整ったときに、読み出し指示信号をキュー読み出し部１２１ａに出力する。キュー読み出し部１２１ａは、演算ユニット２２２１ａから入力された読み出し指示信号に応じて、パケットＰ２２を読み出し、読み出したパケットＰ２２を、演算ユニット２２２１ａに出力する。演算ユニット２２２１ａは、キュー読み出し部１２１ａからパケットＰ２２が入力されると、入力されたパケットＰ２２に含まれる最初の演算内容（処理１）に応じたタスクを実行する。
【００６５】
そして、演算ユニット２２２１ａがパケットＰ２２の演算内容（処理１）に応じたタスクの処理が完了すると、演算ユニット２２２２ａは、入力されたパケットＰ２２に含まれる２番目の演算内容（処理２）に応じたタスクの実行を開始する。その後、演算ユニット２２２２ａがパケットＰ２２の演算内容（処理２）に応じたタスクの処理が完了すると、演算ユニット２２２３ａは、入力されたパケットＰ２２に含まれる最後の演算内容（処理３）に応じたタスクの実行を開始する。そして、演算ユニット２２２３ａは、パケットＰ２２の演算内容（処理３）に応じたタスクの処理が完了すると、パケットＰ２２の演算内容（処理３）の演算処理の結果を出力する。
【００６６】
また、演算ユニット２２２１ａは、パケットＰ２２の演算内容（処理１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、次のタスクを実行する準備が整ったときに、読み出し指示信号をキュー読み出し部１２１ａに出力する。キュー読み出し部１２１ａは、演算ユニット２２２１ａから入力された読み出し指示信号に応じて、パケットＰ２３を読み出し、読み出したパケットＰ２３を、演算ユニット２２２１ａに出力する。演算ユニット２２２１ａは、キュー読み出し部１２１ａからパケットＰ２３が入力されると、入力されたパケットＰ２３に含まれる最初の演算内容（処理１）に応じたタスクを実行する。
【００６７】
以降、同様に、演算ユニット２２２２ａが、演算ユニット２２２１ａが最初の演算内容（処理１）のタスクの処理を完了したパケットの２番目の演算内容（処理２）に応じたタスクの実行、および演算ユニット２２２３ａが、同じパケットの最後の演算内容（処理３）に応じたタスクの実行を繰り返す。
【００６８】
また、演算ユニット２２２１ａは、最初の演算内容（処理１）のタスクの処理を完了したパケットの次のパケットの読み出し指示信号のキュー読み出し部１２１ａへの出力、およびキュー読み出し部１２１ａから入力された次のパケットに含まれる最初の演算内容（処理１）に応じたタスクの実行を繰り返す。
【００６９】
このように、負荷分散制御装置２０では、演算処理が空いているそれぞれのプロセッサエレメント部２２が、自発的に次のパケットを取得するため、第１の実施形態の負荷分散制御装置１０と同様に、それぞれのプロセッサエレメント部２２が実行する演算処理の負荷を分散し、いずれかのプロセッサエレメント部２２のみに負荷が集中してしまうことを回避することができる。
【００７０】
また、負荷分散制御装置２０では、演算処理が空いているそれぞれのプロセッサエレメント部２２が、自発的に次のパケットを取得し、それぞれのプロセッサエレメント部２２に備えた演算部内でパイプラインを構成する複数の演算ユニットのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行する。これにより、負荷分散制御装置２０では、パイプラインを構成するそれぞれの演算ユニットが同時に、対応するタスクを並列に実行することができる。このことにより、負荷分散制御装置２０では、第１の実施形態の負荷分散制御装置１０よりもさらに、実行する演算処理のスループットを短縮することができる。
【００７１】
ここで、負荷分散制御装置２０におけるスループットと、第１の実施形態の負荷分散制御装置１０におけるスループットについて説明する。図５は、本第２の実施形態の負荷分散制御装置２０における動作のタイミングと第１の実施形態の負荷分散制御装置１０における動作のタイミングとを比較して説明する図である。なお、以下の説明においては、説明を容易にするため、１つのプロセッサエレメント部１２ａまたはプロセッサエレメント部２２ａが、３つの演算処理の演算内容（処理１〜３）を実行するものとして説明を行う。
【００７２】
図５においては、図５（ａ）に、第１の実施形態の負荷分散制御装置１０において、３つの演算処理の演算内容（処理１〜３）を１つのパケットで実行するように構成した場合の動作のタイミングの一例を示し、図５（ｂ）に、第１の実施形態の負荷分散制御装置１０において、３つの演算処理の演算内容（処理１〜３）を３つのパケットで実行するように構成した場合の動作のタイミングの一例を示している。また、図５（ｃ）に、本第２の実施形態の負荷分散制御装置２０の動作のタイミングの一例を示している。なお、図５（ｃ）に示した負荷分散制御装置２０の動作のタイミングの一例は、図４に示した負荷分散制御装置２０の動作のタイミングの一例と同じである。
【００７３】
まず、図５（ａ）を用いて、第１の実施形態の負荷分散制御装置１０において、３つの演算処理の演算内容（処理１〜３）を１つのパケットで実行する場合の動作を説明する。図５（ａ）には、第１の実施形態の負荷分散制御装置１０に備えたプロセッサエレメント部１２ａ内のキュー読み出し部１２１ａが（調停部１４を介して）読み出すパケットと、プロセッサエレメント部１２ａ内の演算部１２２ａが、入力されたパケットに含まれる３つの演算処理の演算内容（処理１〜３）を１つにまとめた演算内容に応じたタスクを実行している期間とを示している。
【００７４】
第１の実施形態の負荷分散制御装置１０では、演算部１２２ａが実行中のタスクの処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。このため、１つのパケットに３つの演算処理の演算内容（処理１〜３）が含まれている場合には、演算部１２２ａがタスクを実行している期間が長くなる。
【００７５】
より具体的には、図５（ａ）に示したように、パケットＰ２１に含まれる３つの演算処理の演算内容（処理１〜３）に応じたタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットＰ２２を取得し、次のパケットＰ２２に含まれる３つの演算処理の演算内容（処理１〜３）に応じたタスクを実行する。
【００７６】
次に、図５（ｂ）を用いて、第１の実施形態の負荷分散制御装置１０において、３つの演算処理の演算内容（処理１〜３）を３つのパケットで実行する場合の動作を説明する。図５（ｂ）には、第１の実施形態の負荷分散制御装置１０に備えたプロセッサエレメント部１２ａ内のキュー読み出し部１２１ａが（調停部１４を介して）読み出すパケットと、プロセッサエレメント部１２ａ内の演算部１２２ａが、入力されたパケットに含まれる３つの演算処理の演算内容（処理１〜３）のいずれか１つの演算内容に応じたタスクを実行している期間とを示している。
【００７７】
第１の実施形態の負荷分散制御装置１０では、演算部１２２ａが実行中のタスクの処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行するため、３つの演算処理の演算内容（処理１〜３）のいずれか１つの演算内容に応じたタスクを、順次パケットを読み出して実行する。このため、キュー読み出し部１２１ａが（調停部１４を介して）パケットを読み出す間隔が短く、そして、パケットを読み出す回数が多くなる。
【００７８】
より具体的には、図５（ｂ）に示したように、パケットＰ２１−１に含まれる１つの演算処理の演算内容（処理１）に応じたタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットＰ２１−２を取得し、次のパケットＰ２１−２に含まれる１つの演算処理の演算内容（処理２）に応じたタスクを実行する。その後、パケットＰ２１−２に含まれる１つの演算処理の演算内容（処理２）に応じたタスクの処理が完了した後に、次のパケットＰ２１−３を取得して、このパケットＰ２１−３に含まれる１つの演算処理の演算内容（処理３）に応じたタスクを実行する。このようにして、第１の実施形態の負荷分散制御装置１０では、それぞれのパケットに含まれる１つの演算処理の演算内容に応じたタスクを、順次実行する。
【００７９】
ここで、図５（ａ）と図５（ｂ）とを比べてわかるように、３つの演算処理の演算内容（処理１〜３）を３つのパケットで実行する場合（図５（ｂ））には、３つの演算処理の演算内容（処理１〜３）を１つのパケットで実行する場合（図５（ａ））に比べて、演算処理のスループットが長くなってしまう。より具体的には、図５（ａ）においてパケットＰ２２に含まれる３つの演算処理の演算内容（処理１〜３）に応じたタスクの処理が完了したタイミングでは、図５（ｂ）に示したように、パケットＰ２２−２に含まれる１つの演算処理の演算内容（処理２）に応じたタスクまでしか処理が完了していない。
【００８０】
このため、１つのパケットに含まれる演算処理の演算内容が多いことが望ましいと考えられるが、このようなパケットは、演算部１２２ａに対する負荷が重いため、タスクを実行している期間が長くなり、負荷分散の制御が難しくなってしまう可能性がある。
【００８１】
これに対して、本第２の実施形態の負荷分散制御装置２０では、図５（ｃ）に示したように、３つの演算処理の演算内容（処理１〜３）のそれぞれに対応した、プロセッサエレメント部２２ａ内の演算部２２２ａに備えた演算ユニット２２２１ａ〜演算ユニット２２２３ａのそれぞれが同時に、対応するタスクを並列に実行することができる。また、１つのパケットに含まれるそれぞれの演算内容（処理１〜３）を、演算ユニット２２２１ａ〜演算ユニット２２２３ａのそれぞれに対する負荷が軽い演算内容にすることができる。
【００８２】
このため、プロセッサエレメント部２２ａは、入力されたパケットに含まれる全ての演算内容（パケットＰ２１に含まれる処理２および処理３）に応じたタスクが完了していない状態であっても、実行中の演算内容（処理１）に応じたタスクが完了した段階で、次パケットを要求することができる。図５（ｃ）に示したタイミングでは、１つのパケットの１／３の処理が完了した段階で、次パケットを要求することができる。
【００８３】
これにより、負荷分散制御装置２０では、第１の実施形態の負荷分散制御装置１０よりもさらに、それぞれのプロセッサエレメント部２２が実行する演算処理の負荷を分散しやすくなり、負荷分散制御装置２０が実行する演算処理のスループットの短縮を容易にすることができる。より具体的には、図５（ａ）および図５（ｂ）と、図５（ｃ）とを比べてわかるように、第１の実施形態の負荷分散制御装置１０がパケットＰ２２またはパケットＰ２２−１に含まれる演算処理の演算内容に応じたタスクの処理を実行しているときに、負荷分散制御装置２０では、パケットＰ２２に含まれる最後の演算内容（処理３）に応じたタスクの処理が完了する。また、第１の実施形態の負荷分散制御装置１０がパケットＰ２２に含まれる３つの演算処理の演算内容（処理１〜３）またはパケットＰ２２−２に含まれる１つの演算処理の演算内容（処理２）に応じたタスクの処理が完了したタイミングでは、図５（ｃ）に示したように、パケットＰ２４に含まれる２番目の演算処理の演算内容（処理２）に応じたタスクまで処理を完了することができる。
【００８４】
なお、第１の実施形態の負荷分散制御装置１０において、本第２の実施形態の負荷分散制御装置２０に備えた全ての演算ユニットと同じ数のプロセッサエレメント部１２を備えることによって、第１の実施形態の負荷分散制御装置１０でも、本第２の実施形態の負荷分散制御装置２０と同様のスループットを得る構成を実現することができるとも考えられる。例えば、図３に示した負荷分散制御装置２０では、３つのプロセッサエレメント部２２内の演算部に３つの演算ユニットを備えているため、図１に示した第１の実施形態の負荷分散制御装置１０の構成において９つのプロセッサエレメント部１２を備える構成であっても、負荷分散制御装置２０と同様のスループットを得る構成を実現することができるとも考えられる。しかし、負荷分散制御装置１０に備えるプロセッサエレメント部１２の数が多くなるに従って、調停部１４が出力要求信号ＲＥＱを受け付けるプロセッサエレメント部１２を調停する際の処理が複雑になることによる回路規模の増大、調停部１４とそれぞれのプロセッサエレメント部１２との接続（インターフェース）部分の個数や回路規模の増大など、負荷分散制御装置１０のコストの増大に繋がるような様々な問題が出てくると考えられる。このため、本第２の実施形態の負荷分散制御装置２０の構成の方が、有利であると考えられる。
【００８５】
また、第１の実施形態の負荷分散制御装置１０および本第２の実施形態の負荷分散制御装置２０では、入力されたそれぞれのパケットに応じた１つの演算処理のタスクまたは複数の演算処理のタスクで、演算処理が完結する場合について説明した。しかし、演算処理の中には、例えば、固有値問題におけるヤコビ法のように、演算結果が予め定めた条件を満足するまで、つまり、演算結果が収束するまで、同様の演算処理を反復するフィードバック処理を行うものもある。このようなフィードバック処理を第１の実施形態の負荷分散制御装置１０および本第２の実施形態の負荷分散制御装置２０で実行する場合、第１の実施形態の負荷分散制御装置１０および本第２の実施形態の負荷分散制御装置２０では特に規定していないが、例えば、プロセッサエレメント部１２またはプロセッサエレメント部２２が演算処理の結果を出力した後に、同様の処理内容のパケットを別のパケットとして再び入力することにより、フィードバック処理の演算処理を実行することになる。つまり、フィードバック処理における１回の演算処理の処理内容を含む同様のパケットの処理を、複数回繰り返すことになる。しかし、負荷分散制御装置を、それぞれのプロセッサエレメント部が、フィードバック処理における演算結果が収束するまで、同様の演算処理のタスクを複数回繰り返して実行する構成にすることもでき、このような構成であっても、第１の実施形態の負荷分散制御装置１０および本第２の実施形態の負荷分散制御装置２０と同様に、本発明における負荷分散制御の考え方を適用することができる。
【００８６】
＜第３の実施形態＞
次に、本発明の第３の実施形態について説明する。本第３の実施形態の負荷分散制御装置は、フィードバック処理を行う際に、１回の演算処理の演算処理の結果を一旦出力することなく、プロセッサエレメント部内で同様の演算処理のタスクを複数回繰り返して実行する構成の負荷分散制御装置である。図６は、本第３の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図６に示した負荷分散制御装置３０は、１つのホストプロセッサ１１と、３つのプロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃと、パケットキューイング部１３と、調停部１４と、を備えている。なお、以下の説明においては、プロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃのそれぞれを区別せずに表す場合には、「プロセッサエレメント部３２」という。
【００８７】
負荷分散制御装置３０は、第１の実施形態の負荷分散制御装置１０および第２の実施形態の負荷分散制御装置２０と同様に、当該負荷分散制御装置３０の外部から要求された演算処理を、プロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。ただし、負荷分散制御装置３０は、第２の実施形態の負荷分散制御装置２０と同様に、それぞれのプロセッサエレメント部３２内で、複数の演算処理のタスクを同時に実行することができる。さらに、負荷分散制御装置３０は、それぞれのプロセッサエレメント部３２内で、同様の演算処理のタスクを複数回繰り返して実行するフィードバック処理を実行することが可能であることが、第２の実施形態の負荷分散制御装置２０と異なる。つまり、負荷分散制御装置３０では、それぞれのプロセッサエレメント部３２内でフィードバック処理を実行するための機能が、それぞれのプロセッサエレメント部３２に加わること以外は、負荷分散制御装置３０の構成要素や動作は、第２の実施形態の負荷分散制御装置２０と同様である。従って、図６においては、図３に示した第２の実施形態の負荷分散制御装置２０の構成要素と同様の構成要素には、同一の符号を付加している。以下の説明においては、第２の実施形態の負荷分散制御装置２０と同様の構成要素や動作に関する説明は省略し、第２の実施形態の負荷分散制御装置２０と異なる構成要素や動作について説明する。
【００８８】
ホストプロセッサ１１は、負荷分散制御装置３０の外部からの演算処理の要求を受け付け、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部１３に書き込む。ただし、負荷分散制御装置３０では、それぞれのプロセッサエレメント部３２内でフィードバック処理における一連の演算処理のタスクを実行するため、ホストプロセッサ１１は、要求されたフィードバック処理の一連の演算内容と、フィードバック処理を行う対象の入力データ（それぞれの演算処理に対応した複数の入力データであってもよい）とを含むパケットを、パケットキューイング部１３に書き込む。
【００８９】
なお、図６においては、ホストプロセッサ１１が、一連のフィードバック処理においてパイプライン的に処理を実行する演算内容が分割され、３つの演算処理の演算内容（処理Ｆ１〜Ｆ３）として含まれたパケットＰ３をパケットキューイング部１３に出力している状態を示している。しかし、本第３の実施形態の負荷分散制御装置３０においては、第１の実施形態の負荷分散制御装置１０および第２の実施形態の負荷分散制御装置２０と同様に、演算処理が外部から要求される際の形式や、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
【００９０】
プロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃのそれぞれは、同じ処理機能を持ったプロセッサ（演算処理部）である。プロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃのそれぞれは、調停部１４を介して入力された、パケットキューイング部１３に格納されたパケットに応じた複数の演算処理の演算（タスク）を、同時に実行する。また、プロセッサエレメント部３２ａ〜プロセッサエレメント部３２ｃのそれぞれは、入力されたパケットに含まれる複数の演算処理の演算内容が、フィードバック処理の一連の演算内容である場合には、フィードバック処理における演算処理の反復を終了する状態になるまで、当該フィードバック処理における一連の演算処理を繰り返す。つまり、フィードバック処理を打ち切って抜け出すための予め定めた打ち切り条件を満足するまで、フィードバック処理を継続する。以下の説明においては、プロセッサエレメント部３２を代表して、プロセッサエレメント部３２ａについて説明する。
【００９１】
プロセッサエレメント部３２ａは、入力されたパケットに含まれる先頭（最初）の演算内容（処理Ｆ１）に応じた演算処理から、順次演算（タスク）を実行する。そして、プロセッサエレメント部３２ａは、同じパケットの最後の演算内容（処理Ｆ３）に応じたタスクの処理が完了したときに、処理が完了した演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定し、演算内容（処理Ｆ１〜Ｆ３）に応じた演算処理を反復するか否か、すなわち、フィードバック処理を行うか否かを決定する。
【００９２】
プロセッサエレメント部３２ａは、判定の結果、演算処理を反復する（フィードバック処理を行う）場合には、入力データを演算内容（処理Ｆ３）の演算処理の結果に置き換えて（アップデートして）、演算内容（処理Ｆ１）に応じた演算処理から順次、同じタスクの処理を繰り返す。
【００９３】
また、プロセッサエレメント部３２ａは、判定の結果、演算処理を反復しない（フィードバック処理を行わない）場合には、第２の実施形態の負荷分散制御装置２０に備えたプロセッサエレメント部２２ａと同様に、演算内容（処理Ｆ３）の演算処理の結果を、プロセッサエレメント部３２ａの演算結果として出力し、次のパケットの出力を要求する出力要求信号ＲＥＱを、調停部１４に出力する。そして、調停部１４から次に実行するパケットが入力されると、入力されたパケットに含まれる最初の演算内容（処理Ｆ１）に応じた演算処理から、順次演算（タスク）の実行を開始する。
【００９４】
このように、プロセッサエレメント部３２ａは、フィードバック処理を行わない場合には、自発的に次パケットを要求して、次のパケットに応じた演算処理のタスクを実行し、フィードバック処理を行う場合には、同じタスクのフィードバック処理を繰り返す。
【００９５】
プロセッサエレメント部３２ａは、キュー読み出し部３２１ａと、演算部３２２ａと、セレクタ部３２３ａと、カウンタ部３２４ａと、を備えている。なお、プロセッサエレメント部３２ｂや、プロセッサエレメント部３２ｃも、プロセッサエレメント部３２ａと同様に、キュー読み出し部３２１と、演算部３２２と、セレクタ部３２３と、カウンタ部３２４と、を備えており、プロセッサエレメント部３２ｂに備えた構成要素や、プロセッサエレメント部３２ｃに備えた構成要素も、以下に説明するプロセッサエレメント部３２ａに備えた構成要素と同様の動作である。
【００９６】
キュー読み出し部３２１ａは、調停部１４から入力されたパケットを、セレクタ部３２３ａに出力する。また、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力し、出力した出力要求信号ＲＥＱに応じて入力された次のパケットを、セレクタ部３２３ａに出力する。また、キュー読み出し部３２１ａは、調停部１４から入力されたパケットのセレクタ部３２３ａへの出力が完了すると、カウンタ部３２４ａのカウント値を加算（インクリメント）するためのインクリメント信号を、カウンタ部３２４ａに出力する。
【００９７】
演算部３２２ａは、セレクタ部３２３ａから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容（処理Ｆ１〜Ｆ３）に応じたそれぞれの演算（タスク）を順次実行する。演算部３２２ａ内では、パケットに含まれる３つの演算内容のそれぞれに対応する３つの演算ユニット３２２１ａ〜演算ユニット３２２３ａを直列に接続した、演算ユニットのパイプラインが構成されている。
【００９８】
演算ユニット３２２１ａ〜演算ユニット３２２３ａのそれぞれは、入力されたパケットに含まれるそれぞれの演算内容（処理Ｆ１〜Ｆ３）に対応し、対応する演算内容に応じた演算（タスク）を順次実行する。つまり、パイプラインの先頭に配置された演算ユニット３２２１ａが演算内容（処理Ｆ１）に応じたタスクを実行し、このタスクの処理が完了すると、パイプラインの２番目に配置された演算ユニット３２２２ａが演算内容（処理Ｆ２）に応じたタスクを実行する。そして、演算ユニット３２２２ａが演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、パイプラインの最終段に配置された演算ユニット３２２３ａが演算内容（処理Ｆ３）に応じたタスクを実行する。そして、演算ユニット３２２３ａが演算内容（処理Ｆ３）に応じたタスクの処理が完了すると、演算内容（処理Ｆ３）の演算処理の結果を、プロセッサエレメント部３２ａ（演算部３２２ａ）の演算結果として出力する。
【００９９】
演算ユニット３２２１ａは、対応する演算内容（処理Ｆ１）に応じたタスクが完了した場合でも、読み出し指示信号を出力しない点以外の動作は、第２の実施形態の負荷分散制御装置２０に備えたプロセッサエレメント部２２ａ内の演算部２２２ａに備えた演算ユニット２２２１ａの動作と同様であるため、詳細な説明は省略する。また、演算ユニット３２２２ａも、第２の実施形態の負荷分散制御装置２０に備えたプロセッサエレメント部２２ａ内の演算部２２２ａに備えた演算ユニット２２２２ａの動作と同様であるため、詳細な説明は省略する。
【０１００】
演算ユニット３２２３ａは、対応する演算内容（処理Ｆ３）に応じたタスクの処理が完了したときに、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。この判定の結果、演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足しない場合、すなわち、演算処理の反復を打ち切らずにフィードバック処理を行う場合には、入力データを演算内容（処理Ｆ３）の演算処理の結果に置き換えた（アップデートした）パケットを、フィードバック処理を行う次のパケットとしてセレクタ部３２３ａに出力する。
【０１０１】
また、演算ユニット３２２３ａは、判定の結果、演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足する場合、すなわち、演算処理の反復を打ち切ってフィードバック処理を終了する場合には、演算内容（処理Ｆ３）の演算処理の結果を、演算部３２２ａの演算結果として出力する。このとき、演算ユニット３２２３ａは、カウンタ部３２４ａのカウント値を減算（デクリメント）するためのデクリメント信号を、カウンタ部３２４ａに出力する。
【０１０２】
セレクタ部３２３ａは、キュー読み出し部３２１ａから入力されたパケット、または演算部３２２ａ内の演算ユニット３２２３ａから入力されたパケットのいずれか一方のパケットを、演算部３２２ａ内の演算ユニット３２２１ａに出力する。
【０１０３】
なお、セレクタ部３２３ａは、キュー読み出し部３２１ａから入力されたパケット、および演算ユニット３２２３ａから入力されたパケットのそれぞれが同時期に入力された場合に対応し、それぞれのパケットを入力された順番で一時的に記憶する機能を備えている。そして、セレクタ部３２３ａは、演算ユニット３２２１ａが実行しているタスクがない場合、一時的に記憶されたそれぞれのパケットを、記憶された順番で順次演算ユニット３２２１ａに出力する。
【０１０４】
なお、セレクタ部３２３ａが、演算ユニット３２２１ａが実行しているタスクがあるか否かを判定する方法としては、例えば、演算ユニット３２２１ａが出力する演算完了信号を検出する方法や、演算ユニット３２２１ａに読み出し指示信号を出力させて判定する方法などが考えられる。本第３の実施形態においては、セレクタ部３２３ａによる演算ユニット３２２１ａが実行しているタスクがあるか否かの判定方法に関しては、何ら限定しない。
【０１０５】
カウンタ部３２４ａは、初期値が“０”で、この初期値＝“０”から演算部３２２ａに備えた演算ユニットの数までの間でカウントするカウンタである。カウンタ部３２４ａは、キュー読み出し部３２１ａから入力されたインクリメント信号に応じて、当該カウンタ部３２４ａのカウント値を加算（インクリメント）し、演算部３２２ａ内の演算ユニット３２２３ａから入力されたデクリメント信号に応じて、当該カウンタ部３２４ａのカウント値を減算（デクリメント）する。そして、カウンタ部３２４ａは、当該カウンタ部３２４ａのカウント値を、キュー読み出し部３２１ａに出力する。
【０１０６】
上述したように、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力する。ここで、キュー読み出し部３２１ａによる出力要求信号ＲＥＱの出力制御の方法について説明する。
【０１０７】
キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値が、演算部３２２ａに備えた演算ユニットの数未満の値である、すなわち、本第３の実施形態の負荷分散制御装置３０では、カウンタ部３２４ａのカウント値が“０”〜“２”の間であるときには、次のパケットの出力を要求する出力要求信号ＲＥＱを調停部１４に出力し、出力した出力要求信号ＲＥＱに応じて入力された次のパケットを、セレクタ部３２３ａに出力する。
【０１０８】
また、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値が、演算部３２２ａに備えた演算ユニットの数と同じ値である、すなわち、本第３の実施形態の負荷分散制御装置３０では、カウンタ部３２４ａのカウント値が“３”であるときには、調停部１４に次のパケットの出力を要求しない。
【０１０９】
このように、負荷分散制御装置３０では、第２の実施形態の負荷分散制御装置２０と同様に、それぞれのプロセッサエレメント部３２に備えた演算部３２２内に複数の演算ユニットを備え、この複数の演算ユニットでパイプラインを構成する。このような構成によって、負荷分散制御装置３０では、第２の実施形態の負荷分散制御装置２０と同様に、入力されたパケットに含まれる複数の演算処理のタスクを、パイプラインを構成するそれぞれの演算ユニットで同時に実行することができる。
【０１１０】
また、負荷分散制御装置３０では、それぞれのプロセッサエレメント部３２に備えた演算部３２２で反復（フィードバック）処理を行うか否かを判定し、判定した結果をカウンタ部３２４ａのカウント値に反映する。そして、それぞれのプロセッサエレメント部３２に備えたキュー読み出し部３２１ａが、カウンタ部３２４ａのカウント値に基づいて、調停部１４に次のパケットの出力を要求するか否かを決定する。このような動作によって、負荷分散制御装置３０では、それぞれのプロセッサエレメント部３２内でフィードバック処理を実行する。
【０１１１】
また、負荷分散制御装置３０では、要求された演算処理を複数のプロセッサエレメント部３２のそれぞれで分担して行う際に、第１の実施形態の負荷分散制御装置１０および第２の実施形態の負荷分散制御装置２０と同様に、それぞれのプロセッサエレメント部３２が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部３２のみに負荷が集中してしまうことを回避することができる。
【０１１２】
なお、図６に示した負荷分散制御装置３０の構成でも、調停部１４が、プロセッサエレメント部３２のそれぞれから入力された出力要求信号ＲＥＱの受付を調停する構成を示したが、負荷分散制御装置３０の構成は、第１の実施形態の負荷分散制御装置１０および第２の実施形態の負荷分散制御装置２０と同様に、図６に示した構成のみに限定されるものではない。
【０１１３】
また、図６に示した負荷分散制御装置２０の構成では、キュー読み出し部３２１ａから入力されたパケットと、演算ユニット３２２３ａから入力されたパケットとのそれぞれが同時期に入力された場合に対応するため、セレクタ部３２３ａが、それぞれのパケットを入力された順番で一時的に記憶する機能を備えている構成を示した。しかし、それぞれのパケットを演算ユニット３２２１ａに出力するタイミングを調整する構成は、図６に示した構成のみに限定されるものではない。例えば、上述したように、カウンタ部３２４ａのカウント値が、演算部３２２ａに備えた演算ユニットの数と同じ値である場合には、キュー読み出し部３２１ａは、次のパケットを調停部１４に要求せず、次のパケットを読み出さない。このため、演算ユニット３２２１ａによる演算内容に応じたタスクの実行が待たされる可能性があるパケットは、演算ユニット３２２３ａが出力するフィードバック処理のパケットのみである。従って、演算ユニット３２２３ａが出力するフィードバック処理のパケットのみを一時的に記憶する構成とし、セレクタ部３２３ａに、それぞれのパケットを一時的に記憶する機能を備えない構成にすることもできる。
【０１１４】
より具体的には、演算ユニット３２２３ａの後段に、演算ユニット３２２３ａが出力するフィードバック処理のパケットを一時的に記憶する、例えば、バッファを設ける。そして、キュー読み出し部３２１ａが、カウンタ部３２４ａのカウント値に基づいて、調停部１４を介してパケットキューイング部１３から次のパケットを読み出すか、バッファからフィードバック処理のパケット読み出すかを切り替え、読み出したいずれかのパケットを、演算ユニット３２２１ａに直接出力する構成にすることもできる。この場合のキュー読み出し部３２１ａの動作も、上述したキュー読み出し部３２１ａの動作と同様に、カウンタ部３２４ａのカウント値が演算部３２２ａに備えた演算ユニットの数未満の値である場合に、パケットキューイング部１３から次のパケットを読み出し、カウンタ部３２４ａのカウント値が演算部３２２ａに備えた演算ユニットの数と同じ値である場合に、バッファからフィードバック処理のパケット読み出す動作となる。
【０１１５】
次に、負荷分散制御装置３０の動作について説明する。図７は、本第３の実施形態の負荷分散制御装置３０における動作のタイミングの一例を模式的に示した図である。以下の説明においては、説明を容易にするため、１つのプロセッサエレメント部３２ａの動作に着目して説明を行う。
【０１１６】
なお、図６に示した負荷分散制御装置３０では、プロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）が、カウンタ部３２４ａのカウント値に基づいて、調停部１４に出力要求信号ＲＥＱを出力するか否かを決定する。そして、プロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）が調停部１４に出力要求信号ＲＥＱを出力した場合、調停部１４が、プロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）から出力された出力要求信号ＲＥＱに応じてパケットキューイング部１３に格納されているパケットを読み出し、読み出したパケットをプロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）に出力する。このような動作によって、プロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）に、調停部１４がパケットキューイング部１３から読み出したパケットがプロセッサエレメント部３２ａ（キュー読み出し部３２１ａ）に入力される。しかし、以下の説明においては、説明を容易にするため、キュー読み出し部３２１ａが、カウンタ部３２４ａのカウント値に基づいて調停部１４に出力要求信号ＲＥＱを出力すると判定したとき、すなわち、次のパケットを読み出すと判定したときは、キュー読み出し部３２１ａがパケットキューイング部１３に直接アクセスして、パケットキューイング部１３に格納されているパケットを読み出す構成であるものとして説明する。
【０１１７】
図７には、図６に示したプロセッサエレメント部３２ａ内のキュー読み出し部３２１ａが（調停部１４を介して）読み出すパケットと、プロセッサエレメント部３２ａ内でフィードバック処理を行うために演算部３２２ａから出力されるパケットと、キュー読み出し部３２１ａが（調停部１４を介して）パケットを読み出すか否かを判定するためのカウンタ部３２４ａのカウント値とを示している。また、図７には、図６に示したプロセッサエレメント部３２ａ内の演算部３２２ａに備えた３つの演算ユニット３２２１ａ〜演算ユニット３２２３ａのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行している期間を示している。
【０１１８】
まず、キュー読み出し部３２１ａが、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“０”（初期値）であるため、キュー読み出し部３２１ａは、次のパケットを読み出すと判定し、パケットＰ３１を読み出す。そして、キュー読み出し部３２１ａは、読み出したパケットＰ３１が演算部３２２ａに入力されると、インクリメント信号をカウンタ部３２４ａに出力して、カウンタ部３２４ａのカウント値を加算（インクリメント）する。これにより、カウンタ部３２４ａのカウント値は“１”になる。また、演算部３２２ａに備えた演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたパケットＰ３１に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１１９】
以降、演算ユニット３２２１ａがパケットＰ３１の演算内容（処理Ｆ１）に応じたタスクの処理が完了すると、演算ユニット３２２２ａは、入力されたパケットＰ３１に含まれる２番目の演算内容（処理Ｆ２）に応じたタスクの実行を開始する。その後、演算ユニット３２２２ａがパケットＰ３１の演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、演算ユニット３２２３ａは、入力されたパケットＰ３１に含まれる最後の演算内容（処理Ｆ３）に応じたタスクの実行を開始する。
【０１２０】
また、演算ユニット３２２１ａがパケットＰ３１の演算内容（処理Ｆ１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“１”であるため、キュー読み出し部３２１ａは、次のパケットを読み出すと判定し、次のパケットＰ３２を読み出す。そして、キュー読み出し部３２１ａは、読み出したパケットＰ３２が演算部３２２ａに入力されると、インクリメント信号をカウンタ部３２４ａに出力して、カウンタ部３２４ａのカウント値をさらに加算（インクリメント）する。これにより、カウンタ部３２４ａのカウント値は“２”になる。また、演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたパケットＰ３２に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１２１】
以降、演算ユニット３２２１ａがパケットＰ３２の演算内容（処理Ｆ１）に応じたタスクの処理が完了すると、演算ユニット３２２２ａは、入力されたパケットＰ３２に含まれる２番目の演算内容（処理Ｆ２）に応じたタスクの実行を開始する。その後、演算ユニット３２２２ａがパケットＰ３１の演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、演算ユニット３２２３ａは、入力されたパケットＰ３２に含まれる最後の演算内容（処理Ｆ３）に応じたタスクの実行を開始する。
【０１２２】
また、演算ユニット３２２１ａがパケットＰ３２の演算内容（処理Ｆ１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“２”であるため、キュー読み出し部３２１ａは、次のパケットを読み出すと判定し、次のパケットＰ３３を読み出す。そして、キュー読み出し部３２１ａは、読み出したパケットＰ３３が演算部３２２ａに入力されると、インクリメント信号をカウンタ部３２４ａに出力して、カウンタ部３２４ａのカウント値をさらに加算（インクリメント）する。これにより、カウンタ部３２４ａのカウント値は“３”になる。また、演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたパケットＰ３３に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１２３】
以降、演算ユニット３２２１ａがパケットＰ３３の演算内容（処理Ｆ１）に応じたタスクの処理が完了すると、演算ユニット３２２２ａは、入力されたパケットＰ３３に含まれる２番目の演算内容（処理Ｆ２）に応じたタスクの実行を開始する。その後、演算ユニット３２２２ａがパケットＰ３３の演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、演算ユニット３２２３ａは、入力されたパケットＰ３３に含まれる最後の演算内容（処理Ｆ３）に応じたタスクの実行を開始する。
【０１２４】
その後、演算ユニット３２２３ａは、最初に入力されたパケットＰ３１の演算内容（処理Ｆ３）に応じたタスクの処理が完了すると、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットＰ３１がフィードバック処理を行うパケットであるものとする。このため、演算ユニット３２２３ａは、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が打ち切り条件を満足しない、すなわち、フィードバック処理を行う（＝反復あり）と判定する。この判定結果に応じて、演算ユニット３２２３ａは、パケットＰ３１の入力データを演算内容（処理Ｆ３）の演算処理の結果に置き換えた（アップデートした）、フィードバック処理のパケットＰＦ３１を、セレクタ部３２３ａに出力する（図７の経路ＦＢ１参照）。
【０１２５】
また、演算ユニット３２２１ａがパケットＰ３３の演算内容（処理Ｆ１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“３”であるため、キュー読み出し部３２１ａは、次のパケットを読み出さないと判定し、次のパケットＰ３４の読み出しを行わない。これにより、演算ユニット３２２１ａには、フィードバック処理のパケットＰＦ３１がセレクタ部３２３ａを介して入力される（図７の経路ＦＢ２参照）。このとき、キュー読み出し部３２１ａは、フィードバック処理のパケットＰＦ３１の演算部３２２ａへの入力であるため、インクリメント信号をカウンタ部３２４ａに出力せず、カウンタ部３２４ａの現在のカウント値を保持させる。これにより、カウンタ部３２４ａのカウント値は“３”が保持される。そして、演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたフィードバック処理のパケットＰＦ３１に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１２６】
その後、演算ユニット３２２３ａは、２番目に入力されたパケットＰ３２の演算内容（処理Ｆ３）に応じたタスクの処理が完了すると、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットＰ３２がフィードバック処理を行わないパケットであるものとする。このため、演算ユニット３２２３ａは、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が打ち切り条件を満足する、すなわち、フィードバック処理を行う（＝反復なし）と判定する。この判定結果に応じて、演算ユニット３２２３ａは、パケットＰ３２の入力データを演算内容（処理Ｆ３）の演算処理の結果を、演算部３２２ａの演算結果として出力する。そして、演算ユニット３２２３ａは、演算部３２２ａの演算結果が出力されると、デクリメント信号をカウンタ部３２４ａに出力して、カウンタ部３２４ａのカウント値を減算（デクリメント）する。これにより、カウンタ部３２４ａのカウント値は“２”になる。
【０１２７】
その後、演算ユニット３２２１ａがパケットＰＦ３１の演算内容（処理Ｆ１）に応じたタスクの処理が完了すると、演算ユニット３２２２ａは、フィードバック処理のパケットＰＦ３１に含まれる２番目の演算内容（処理Ｆ２）に応じたタスクの実行を開始する。そして、演算ユニット３２２２ａがパケットＰＦ３１の演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、演算ユニット３２２３ａは、フィードバック処理のパケットＰＦ３１に含まれる最後の演算内容（処理Ｆ３）に応じたタスクの実行を開始する。
【０１２８】
また、演算ユニット３２２１ａがフィードバック処理のパケットＰＦ３１の演算内容（処理Ｆ１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“２”であるため、キュー読み出し部３２１ａは、次のパケットを読み出すと判定し、次のパケットＰ３４を読み出す。そして、キュー読み出し部３２１ａは、読み出したパケットＰ３４が演算部３２２ａに入力されると、インクリメント信号をカウンタ部３２４ａに出力して、カウンタ部３２４ａのカウント値を加算（インクリメント）する。これにより、カウンタ部３２４ａのカウント値は“３”になる。また、演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたパケットＰ３４に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１２９】
以降、演算ユニット３２２１ａがパケットＰ３４の演算内容（処理Ｆ１）に応じたタスクの処理が完了すると、演算ユニット３２２２ａは、入力されたパケットＰ３４に含まれる２番目の演算内容（処理Ｆ２）に応じたタスクの実行を開始する。その後、演算ユニット３２２２ａがパケットＰ３４の演算内容（処理Ｆ２）に応じたタスクの処理が完了すると、演算ユニット３２２３ａは、入力されたパケットＰ３４に含まれる最後の演算内容（処理Ｆ３）に応じたタスクの実行を開始する。
【０１３０】
また、演算ユニット３２２１ａがパケットＰ３４の演算内容（処理Ｆ１）に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部３２１ａは、カウンタ部３２４ａのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部３２４ａのカウント値＝“３”であるため、キュー読み出し部３２１ａは、次のパケットを読み出さないと判定し、次のパケットＰ３５（不図示）の読み出しを行わないで待機する。
【０１３１】
その後、演算ユニット３２２３ａは、３番目に入力されたパケットＰ３３の演算内容（処理Ｆ３）に応じたタスクの処理が完了すると、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットＰ３３がフィードバック処理を行うパケットであるものとする。このため、演算ユニット３２２３ａは、実行した演算内容（処理Ｆ３）に応じたタスクの処理の結果が打ち切り条件を満足しない、すなわち、フィードバック処理を行う（＝反復あり）と判定する。この判定結果に応じて、演算ユニット３２２３ａは、パケットＰ３３の入力データを演算内容（処理Ｆ３）の演算処理の結果に置き換えた（アップデートした）、フィードバック処理のパケットＰＦ３３を、セレクタ部３２３ａに出力する（図７の経路ＦＢ３参照）。
【０１３２】
また、演算ユニット３２２１ａは、パケットＰ３４の演算内容（処理Ｆ１）に応じたタスクの処理がすでに完了している状態であるため、演算ユニット３２２１ａには、フィードバック処理のパケットＰＦ３３がセレクタ部３２３ａを介して入力される（図７の経路ＦＢ４参照）。このとき、キュー読み出し部３２１ａは、フィードバック処理のパケットＰＦ３３の演算部３２２ａへの入力であるため、インクリメント信号をカウンタ部３２４ａに出力せず、カウンタ部３２４ａの現在のカウント値を保持させる。これにより、カウンタ部３２４ａのカウント値は“３”が保持される。そして、演算ユニット３２２１ａは、セレクタ部３２３ａを介して入力されたフィードバック処理のパケットＰＦ３３に含まれる最初の演算内容（処理Ｆ１）に応じたタスクを実行する。
【０１３３】
このように、負荷分散制御装置３０では、それぞれのプロセッサエレメント部３２に備えた演算部３２２で反復（フィードバック）処理を行うか否かを判定し、それぞれのプロセッサエレメント部３２に備えたキュー読み出し部３２１ａが、カウンタ部３２４ａのカウント値に基づいて、次のパケットを読み出すか否かを判定することによって、負荷分散制御装置３０に備えたそれぞれのプロセッサエレメント部３２内でフィードバック処理を実行する。
【０１３４】
また、負荷分散制御装置３０では、演算処理が空いているそれぞれのプロセッサエレメント部３２が、自発的に次のパケットを取得し、それぞれのプロセッサエレメント部３２に備えた演算部内でパイプラインを構成する複数の演算ユニットのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行する。これにより、負荷分散制御装置３０では、第２の実施形態の負荷分散制御装置２０と同様に、パイプラインを構成するそれぞれの演算ユニットが同時に、対応するタスクを並列に実行することができる。このことにより、負荷分散制御装置３０では、フィードバック処理においても、第２の実施形態の負荷分散制御装置２０と同様に、実行する演算処理のスループットを短縮することができる。
【０１３５】
また、負荷分散制御装置３０では、フィードバック処理を行わない場合に、演算処理が空いているそれぞれのプロセッサエレメント部３２が、自発的に次のパケットを取得する。これにより、負荷分散制御装置３０では、フィードバック処理においても、第１の実施形態の負荷分散制御装置１０および第２の実施形態の負荷分散制御装置２０と同様に、それぞれのプロセッサエレメント部３２が実行する演算処理の負荷を分散し、いずれかのプロセッサエレメント部３２のみに負荷が集中してしまうことを回避することができる。
【０１３６】
上記に述べたとおり、本発明を実施するための形態によれば、複数のプロセッサ（演算処理部）が連携して処理を行うマルチプロセッサシステムの演算装置において、演算処理が空いているそれぞれのプロセッサが、自発的に次のパケットを取得して演算処理を実行する。これにより、本発明を実施するための形態では、それぞれのパケット毎に処理を実行する際の負荷のばらつきがある場合でも、確実に空いているプロセッサにパケットが入力されるように負荷分散の制御を行うことができ、いずれかのプロセッサのみに負荷が集中してしまうことを回避することができる。このことにより、本発明を実施するための形態では、動的な負荷分散の制御を行うことによって、それぞれのプロセッサの稼働率を向上させ、結果的に全ての演算処理のスループットを短縮することができる。
【０１３７】
また、本発明を実施するための形態では、演算処理が空いているそれぞれのプロセッサが、自発的に次のパケットを取得するため、従来の負荷分散制御装置に備えたマスタプロセッサのように、次のパケットの投入先を判定するための構成は不要であり、マスタプロセッサが実行している処理を中断して他の処理を実行することによる処理効率の低下などが起こらない。
【０１３８】
また、本発明を実施するための形態によれば、それぞれのプロセッサ内の構成を、パイプラインを構成する複数の演算ユニットで構成し、入力されたパケットに含まれるそれぞれの演算内容を、対応する演算ユニットが実行する。これにより、本発明を実施するための形態では、パイプラインを構成するそれぞれの演算ユニットが同時に、対応する演算内容のタスクを並列に実行することができ、それぞれのプロセッサが実行する演算処理のスループットを短縮することができる。
【０１３９】
また、本発明を実施するための形態によれば、それぞれのプロセッサで反復（フィードバック）処理を行うか否かを判定し、次のパケットを読み出すか否かを判定することにより、フィードバック処理を行うパケットを一旦プロセッサの外部に出力せずに、フィードバック処理を実行することができる。
【０１４０】
これらにより、本発明を実施するための形態では、負荷分散制御装置を備えたシステムにおける処理時間の短縮を図ることができ、負荷分散制御装置を備えたシステムの性能を向上させることができる。
【０１４１】
なお、本実施形態においては、負荷分散制御装置に３つのプロセッサエレメント部を備えている構成について説明したが、負荷分散制御装置に備えるプロセッサエレメント部の数は、本発明を実施するための形態で示した構成のみに限定されるものではない。また、本実施形態においては、３つの演算処理の演算内容（処理１〜３）が含まれたパケットＰ２、および一連のフィードバック処理における３つの演算処理の演算内容（処理Ｆ１〜Ｆ３）が含まれたパケットＰ３の例を示したが、それぞれのパケットに含まれる演算処理の演算内容の数は、負荷分散制御装置に備えるプロセッサエレメント部に対応していることが望ましい。
【０１４２】
なお、本実施形態においては、負荷分散制御装置に備えたホストプロセッサ１１は、負荷分散制御装置の外部からの演算処理の要求を受け付け、演算処理の結果を負荷分散制御装置の外部に出力する処理を実行しており、外部から入力された演算要求に応じたパケット生成してパケットキューイング部１３に書き込む処理を実行しない場合には、負荷分散の制御に直接関わっていない。従って、ホストプロセッサ１１が外部から入力された演算要求に応じたパケット生成する処理を実行しない構成である場合には、例えば、負荷分散制御装置にホストプロセッサ１１を設けず、外部からの演算処理の要求に応じたそれぞれのパケットを、直接パケットキューイング部１３に格納する構成にすることもできる。また、例えば、ホストプロセッサ１１も、プロセッサエレメント部と同様に、パケットに含まれる演算処理の演算内容に応じたタスクを実行する構成にすることもできる。
【０１４３】
また、本実施形態においては、それぞれのプロセッサエレメント部の処理機能に関して説明していないが、例えば、負荷分散制御装置を、撮像装置などの撮像システム内に備えている場合には、それぞれのプロセッサエレメント部は、撮像システムにおける画像処理の演算を実行するものと考えることができる。ここで、画像処理の演算は、例えば、画像のヒストグラムを生成する演算などが考えられる。
【０１４４】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０１４５】
１０，２０，３０・・・負荷分散制御装置
１１・・・ホストプロセッサ
１２ａ，１２ｂ，１２ｃ・・・プロセッサエレメント部（演算処理部）
１２１ａ，１２１ｂ，１２１ｃ・・・キュー読み出し部（演算処理部，キュー読み出し部）
１２２ａ，１２２ｂ，１２２ｃ・・・演算部（演算処理部，演算部）
１３・・・パケットキューイング部
１４・・・調停部（パケットキューイング部）
２２ａ，２２ｂ，２２ｃ・・・プロセッサエレメント部（演算処理部）
２２２ａ・・・演算部（演算処理部，演算部）
２２２１ａ，２２２２ａ，２２２３ａ・・・演算ユニット（演算処理部，演算部，演算ユニット）
３２ａ，３２ｂ，３２ｃ・・・プロセッサエレメント部（演算処理部）
３２１ａ・・・キュー読み出し部（演算処理部，キュー読み出し部）
３２２ａ・・・演算部（演算処理部，演算部）
３２２１ａ，３２２２ａ，３２２３ａ・・・演算ユニット（演算処理部，演算部，演算ユニット）
３２３ａ・・・セレクタ部（演算処理部，キュー読み出し部）
３２４ａ・・・カウンタ部（演算処理部，カウンタ部）
【図１】
2015075778.tif 000003
【図２】
2015075778.tif 000004
【図３】
2015075778.tif 000005
【図４】
2015075778.tif 000006
【図５】
2015075778.tif 000007
【図６】
2015075778.tif 000008
【図７】
2015075778.tif 000009