<第1の実施形態>
以下、本発明の第1の実施形態について、図面を参照して説明する。図1は、本第1の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図1に示した負荷分散制御装置10は、1つのホストプロセッサ11と、3つのプロセッサエレメント部12a〜プロセッサエレメント部12cと、パケットキューイング部13と、調停部14と、を備えている。負荷分散制御装置10は、当該負荷分散制御装置10の外部から要求された演算処理を、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。なお、以下の説明においては、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれを区別せずに表す場合には、「プロセッサエレメント部12」という。
ホストプロセッサ11は、負荷分散制御装置10における主のプロセッサである。ホストプロセッサ11は、負荷分散制御装置10の外部からの演算処理の要求を受け付け、演算処理の結果を負荷分散制御装置10の外部に出力する。ホストプロセッサ11は、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部13に書き込む。
なお、ホストプロセッサ11には、負荷分散制御装置10の外部からそれぞれのパケットが直接入力される構成であっても、負荷分散制御装置10の外部から入力された演算要求に応じたパケット生成する構成であってもよい。図1においては、ホストプロセッサ11が、パケットP1をパケットキューイング部13に出力している状態を示している。なお、本第1の実施形態においては、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
パケットキューイング部13は、例えば、パケットを格納する記憶領域を複数備えたFIFO(First In,First Out)メモリで構成される待ち行列のメモリである。パケットキューイング部13には、ホストプロセッサ11によって書き込まれたパケットが、書き込まれた順番で順次格納される。また、パケットキューイング部13に格納されたそれぞれのパケットは、調停部14によって、格納された順番で順次読み出される。
調停部14は、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれから入力された、次のパケットの出力を要求する出力要求信号REQに応じて、パケットキューイング部13に格納されているパケットを読み出し、読み出したパケットを、出力要求信号REQを入力してきたプロセッサエレメント部12a〜プロセッサエレメント部12cのいずれかに出力する。
調停部14は、同時に複数のプロセッサエレメント部12から出力要求信号REQが入力された場合には、出力要求信号REQを受け付けるプロセッサエレメント部12を調停し、いずれか1つのプロセッサエレメント部12から入力された出力要求信号REQを受け付ける。そして、出力要求信号REQを受け付けたいずれか1つのプロセッサエレメント部12に、読み出したパケットを出力する。
なお、調停部14による出力要求信号REQを受け付けるプロセッサエレメント部12の調停方法としては、例えば、それぞれのプロセッサエレメント部12に付与された識別番号が小さい順(図1においては、プロセッサエレメント部12aが最も識別番号が小さく、プロセッサエレメント部12cが最も識別番号が大きい)に出力要求信号REQを受け付けるなどの方法や、が考えられる。また、調停部14による調停方法としては、それぞれのプロセッサエレメント部12に付与された優先順位に基づいて調停するなど、様々な方法が考えられる。本第1の実施形態においては、調停部14による調停方法に関しては、何ら限定しない。
プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれは、同じ処理機能を持ったプロセッサ(演算処理部)である。プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれは、調停部14を介して入力された、パケットキューイング部13に格納されたパケットに応じた演算処理の演算(タスク)を実行する。
また、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれは、入力されたパケットに応じて実行しているタスクがなくなり、すなわち、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットの出力を要求する出力要求信号REQを、調停部14に出力する。そして、調停部14から次に実行するパケットが入力されると、入力されたパケットに応じた演算処理の実行を開始する。このように、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれは、実行中の演算処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。
プロセッサエレメント部12aは、キュー読み出し部121aと演算部122aとを備えている。また、プロセッサエレメント部12bは、キュー読み出し部121bと演算部122bとを備えている。また、プロセッサエレメント部12cは、キュー読み出し部121cと演算部122cとを備えている。プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれに備えたキュー読み出し部121a〜キュー読み出し部121cのそれぞれは、同じ機能を持った構成要素である。また、プロセッサエレメント部12a〜プロセッサエレメント部12cのそれぞれに備えた演算部122a〜演算部122cのそれぞれは、同じ機能を持った構成要素である。
以下の説明においては、キュー読み出し部121a〜キュー読み出し部121cのそれぞれを区別せずに表す場合には、「キュー読み出し部121」という。また、演算部122a〜演算部122cのそれぞれを区別せずに表す場合には、「演算部122」という。また、以下の説明においては、プロセッサエレメント部12を代表して、プロセッサエレメント部12aに備えた構成要素について説明する。なお、プロセッサエレメント部12bに備えた構成要素や、プロセッサエレメント部12cに備えた構成要素も、以下に説明するプロセッサエレメント部12aに備えた構成要素と同様の動作である。
キュー読み出し部121aは、調停部14から入力されたパケットを、演算部122aに出力する。また、キュー読み出し部121aは、演算部122aが実行しているタスクがない場合、次のパケットの出力を要求する出力要求信号REQを調停部14に出力し、出力した出力要求信号REQに応じて入力された次のパケットを、演算部122aに出力する。
なお、キュー読み出し部121aが、演算部122aが実行しているタスクがあるか否かを判定する方法としては、例えば、演算部122aが出力する演算完了信号を検出する方法や、演算部122aから入力される読み出し指示信号に応じて判定する方法などが考えられる。本第1の実施形態においては、キュー読み出し部121aによる演算部122aが実行しているタスクがあるか否かの判定方法に関しては、何ら限定しない。
演算部122aは、キュー読み出し部121aから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容に応じた演算(タスク)を実行する。演算部122aは、タスクの実行が完了すると、例えば、タスクの実行が完了したことを表す演算完了信号を出力する。また、演算部122aは、タスクの実行が完了すると、次のパケットに応じたタスクを実行するため、例えば、次のパケットの読み出しを指示する読み出し指示信号を、キュー読み出し部121aに出力する。
このような構成によって、負荷分散制御装置10では、要求された演算処理を複数のプロセッサエレメント部12のそれぞれで分担して行う際に、それぞれのプロセッサエレメント部12が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部12のみに負荷が集中してしまうことを回避することができる。
なお、図1に示した負荷分散制御装置10の構成では、調停部14が、プロセッサエレメント部12のそれぞれから入力された出力要求信号REQの受付を調停する構成を示したが、負荷分散制御装置10の構成は、図1に示した構成のみに限定されるものではない。例えば、負荷分散制御装置10に備えたそれぞれのプロセッサエレメント部12を順番に指定し、実行しているタスクがないプロセッサエレメント部12が、指定されたタイミングでのみ出力要求信号REQを出力する構成であれば、負荷分散制御装置10に備えた全てのプロセッサエレメント部12で、出力要求信号REQを出力するタイミングが重複することがなくなる。このため、負荷分散制御装置10に調停部14を備えない構成にすることもできる。
より具体的には、予め定めたタイミング毎に“0”から負荷分散制御装置10に備えたプロセッサエレメント部12の数までカウントするカウンタを備える。そして、このカウンタのカウント値とそれぞれのプロセッサエレメント部12に付与された識別番号とがあっているときに、このプロセッサエレメント部12が出力要求信号REQを出力することを許可する構成にする。この構成によって、複数のプロセッサエレメント部12から同時に出力要求信号REQが出力されることはなくなる。なお、このような構成の場合、それぞれのプロセッサエレメント部12(キュー読み出し部121)は、パケットキューイング部13に直接アクセスして、パケットキューイング部13に格納されているパケットを読み出す構成になる。
次に、負荷分散制御装置10の動作について説明する。図2は、本第1の実施形態の負荷分散制御装置10における動作のタイミングの一例を模式的に示した図である。なお、図2においては、図2(a)に、従来の負荷分散制御装置の動作のタイミングの一例を示し、図2(b)に、本第1の実施形態の負荷分散制御装置10の動作のタイミングの一例を示している。
まず、図2(a)を用いて、従来の負荷分散制御装置における動作を説明する。図2(a)には、本第1の実施形態の負荷分散制御装置10と同様に、3つのスレーブプロセッサa〜スレーブプロセッサcを備えている構成の従来の負荷分散制御装置におけるそれぞれのスレーブプロセッサのジョブ数カウンタのカウント値と、それぞれのスレーブプロセッサがジョブを実行している期間とを示している。
従来の負荷分散制御装置では、マスタプロセッサが、一定時間毎に取得したそれぞれのスレーブプロセッサのジョブ数カウンタのカウント値に基づいて、次のジョブを投入するスレーブプロセッサを判定する。このため、図2(a)に示したようなタイミングで、それぞれのスレーブプロセッサのジョブ数カウンタのカウント値に基づいた、負荷が少ないスレーブプロセッサの判定が行われる。
図2(a)に示したタイミングでは、スレーブプロセッサaのジョブ数カウンタのカウント値が“3”、スレーブプロセッサbのジョブ数カウンタのカウント値が“2”、スレーブプロセッサcのジョブ数カウンタのカウント値が“1”である。このため、従来の負荷分散制御装置に備えたマスタプロセッサは、ジョブ数カウンタのカウント値が最小であるスレーブプロセッサcを、負荷が少ないスレーブプロセッサであると判定し、スレーブプロセッサcに、次のジョブを投入することになる。
しかし、図2(a)を見てわかるように、スレーブプロセッサaとスレーブプロセッサbとは、ジョブ数カウンタのカウント値は最小ではないが、それぞれが実行するジョブの負荷がかるいため、スレーブプロセッサcよりも早く実行しているジョブが完了し、ジョブを実行していないアイドリング状態となる。しかし、マスタプロセッサは、次のジョブをスレーブプロセッサcに投入しているため、スレーブプロセッサaとスレーブプロセッサbとは、アイドリング状態が解消されることなく、次のジョブがスレーブプロセッサcによって実行されることになる。
このように、従来の負荷分散制御装置における負荷分散の制御では、アイドリング状態となるスレーブプロセッサ(図2(a)においては、スレーブプロセッサa)に正しくジョブが投入されない、すなわち、適正な負荷分散の制御を行うことができない。
これに対して、本第1の実施形態の負荷分散制御装置10では、適正な負荷分散の制御を行うことができる。次に、図2(b)を用いて、本第1の実施形態の負荷分散制御装置10における動作を説明する。図2(b)には、図1に示した3つのプロセッサエレメント部12それぞれが、入力されたパケットに応じたタスクを実行している期間を示している。
負荷分散制御装置10では、それぞれのプロセッサエレメント部12が自発的に調停部14に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。このため、図2(b)に示したように、プロセッサエレメント部12bは、今回実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットを取得し、次のパケットに応じた演算処理のタスクを実行する。
このように、負荷分散制御装置10における負荷分散の制御では、実行しているタスクの処理が完了した、すなわち、演算処理が空いているプロセッサエレメント部12が自発的に次のパケットを取得することにより、この空いているプロセッサエレメント部12にパケットが入力され、適正な負荷分散の制御を行うことができる。
また、図2(a)と図2(b)とにおける全ての処理が完了するタイミングを比較してわかるように、負荷分散制御装置10では、適正な負荷分散の制御を行うことによって、従来の負荷分散制御装置よりも早く全ての処理を完了することができる。
このように、負荷分散制御装置10では、演算処理が空いているそれぞれのプロセッサエレメント部12が、自発的に次のパケットを取得して演算処理を実行する。これにより、負荷分散制御装置10では、それぞれのパケット毎に処理を実行する際の負荷のばらつきがある場合でも、確実に空いているプロセッサエレメント部12にパケットが入力されるように、負荷分散の制御を行うことができる。このように、負荷分散制御装置10では、動的な負荷分散の制御を行うことによって、それぞれのプロセッサエレメント部12の稼働率を向上させ、結果的に全ての演算処理に要する時間、すなわち、負荷分散制御装置10が実行する演算処理のスループットを短縮することができる。
また、負荷分散制御装置10では、演算処理が空いているそれぞれのプロセッサエレメント部12が、自発的に次のパケットを取得するため、従来の負荷分散制御装置に備えたマスタプロセッサのように、次のパケットの投入先を判定するための構成は不要になる。これにより、負荷分散制御装置10では、ホストプロセッサ11は、実行している処理を中断して他の処理を実行することにより、処理効率が低下してしまうことがなくなる。
なお、本第1の実施形態の負荷分散制御装置10では、それぞれのプロセッサエレメント部12が、入力されたパケットに応じた演算処理のタスクを1つずつ実行する構成について説明した。しかし、それぞれのプロセッサエレメント部12が、複数の演算処理のタスクを同時に実行する構成にすることもでき、このような構成であっても、本第1の実施形態の負荷分散制御装置10と同様に、本発明における負荷分散制御の考え方を適用することができる。
<第2の実施形態>
次に、本発明の第2の実施形態について説明する。本第2の実施形態の負荷分散制御装置は、負荷分散制御装置に備えたそれぞれのプロセッサエレメント部が、複数の演算処理のタスクを同時に実行する構成の負荷分散制御装置である。図3は、本第2の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図3に示した負荷分散制御装置20は、1つのホストプロセッサ11と、3つのプロセッサエレメント部22a〜プロセッサエレメント部22cと、パケットキューイング部13と、調停部14と、を備えている。なお、以下の説明においては、プロセッサエレメント部22a〜プロセッサエレメント部22cのそれぞれを区別せずに表す場合には、「プロセッサエレメント部22」という。
負荷分散制御装置20は、第1の実施形態の負荷分散制御装置10と同様に、当該負荷分散制御装置20の外部から要求された演算処理を、プロセッサエレメント部22a〜プロセッサエレメント部22cのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。ただし、負荷分散制御装置20は、それぞれのプロセッサエレメント部22内で、複数の演算処理のタスクを同時に実行することが、第1の実施形態の負荷分散制御装置10と異なる。つまり、負荷分散制御装置20では、それぞれのプロセッサエレメント部22内で複数の演算処理のタスクを同時に実行するための機能が、ホストプロセッサ11およびそれぞれのプロセッサエレメント部22に加わること以外は、負荷分散制御装置20の構成要素や動作は、第1の実施形態の負荷分散制御装置10と同様である。従って、図3においては、図1に示した第1の実施形態の負荷分散制御装置10の構成要素と同様の構成要素には、同一の符号を付加している。以下の説明においては、第1の実施形態の負荷分散制御装置10と同様の構成要素や動作に関する説明は省略し、第1の実施形態の負荷分散制御装置10と異なる構成要素や動作について説明する。
ホストプロセッサ11は、負荷分散制御装置20の外部からの演算処理の要求を受け付け、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部13に書き込む。ただし、負荷分散制御装置20では、それぞれのプロセッサエレメント部22内で複数の演算処理のタスクを同時に実行するため、ホストプロセッサ11は、要求された複数の演算処理の演算内容と、演算処理を行う対象の入力データ(それぞれの演算処理に対応した複数の入力データであってもよい)とを含むパケットを、パケットキューイング部13に書き込む。
なお、図3においては、ホストプロセッサ11が、パイプライン的に処理を実行する演算内容が分割され、3つの演算処理の演算内容(処理1〜3)として含まれたパケットP2をパケットキューイング部13に出力している状態を示している。しかし、本第2の実施形態の負荷分散制御装置20においては、第1の実施形態の負荷分散制御装置10と同様に、演算処理が外部から要求される際の形式や、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
プロセッサエレメント部22a〜プロセッサエレメント部22cのそれぞれは、同じ処理機能を持ったプロセッサ(演算処理部)である。プロセッサエレメント部22a〜プロセッサエレメント部22cのそれぞれは、調停部14を介して入力された、パケットキューイング部13に格納されたパケットに応じた複数の演算処理の演算(タスク)を、同時に実行する。以下の説明においては、プロセッサエレメント部22を代表して、プロセッサエレメント部22aについて説明する。
プロセッサエレメント部22aは、入力されたパケットに含まれる先頭(最初)の演算内容(処理1)に応じて実行しているタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットの出力を要求する出力要求信号REQを、調停部14に出力する。そして、調停部14から次に実行するパケットが入力されると、入力されたパケットに含まれる最初の演算内容(処理1)に応じた演算処理から、順次演算(タスク)の実行を開始する。このように、プロセッサエレメント部22aは、入力されたパケットに含まれる全ての演算内容(処理2および処理3)が完了していない状態であっても、実行中の演算内容(処理1)が完了した後、自発的に次パケットを要求して、次のパケットに応じた演算処理のタスクを実行する。
プロセッサエレメント部22aは、キュー読み出し部121aと演算部222aとを備えている。なお、プロセッサエレメント部22bや、プロセッサエレメント部22cも、プロセッサエレメント部22aと同様に、キュー読み出し部121と演算部222とを備えており、プロセッサエレメント部22bに備えた構成要素や、プロセッサエレメント部22cに備えた構成要素も、以下に説明するプロセッサエレメント部22aに備えた構成要素と同様の動作である。
キュー読み出し部121aは、調停部14から入力されたパケットを、演算部222aに出力する。また、キュー読み出し部121aは、演算部222aから次のパケットの読み出しを指示する読み出し指示信号が入力されると、次のパケットの出力を要求する出力要求信号REQを調停部14に出力し、出力した出力要求信号REQに応じて入力された次のパケットを、演算部222aに出力する。
演算部222aは、キュー読み出し部121aから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容(処理1〜3)に応じたそれぞれの演算(タスク)を順次実行する。演算部222a内では、パケットに含まれる3つの演算内容のそれぞれに対応する3つの演算ユニット2221a〜演算ユニット2223aを直列に接続した、演算ユニットのパイプラインが構成されている。
演算ユニット2221a〜演算ユニット2223aのそれぞれは、入力されたパケットに含まれるそれぞれの演算内容(処理1〜3)に対応し、対応する演算内容に応じた演算(タスク)を順次実行する。つまり、パイプラインの先頭に配置された演算ユニット2221aが演算内容(処理1)に応じたタスクを実行し、このタスクの処理が完了すると、パイプラインの2番目に配置された演算ユニット2222aが演算内容(処理2)に応じたタスクを実行する。そして、演算ユニット2222aが演算内容(処理2)に応じたタスクの処理が完了すると、パイプラインの最終段に配置された演算ユニット2223aが演算内容(処理3)に応じたタスクを実行する。そして、演算ユニット2223aが演算内容(処理3)に応じたタスクの処理が完了すると、演算内容(処理3)の演算処理の結果を、プロセッサエレメント部22a(演算部222a)の演算結果として出力する。
演算ユニット2221aは、対応する演算内容(処理1)に応じたタスクの実行が完了し、次のタスクを実行する準備が整ったときに、次のパケットの読み出しを指示する読み出し指示信号を、キュー読み出し部121aに出力する。この読み出し指示信号に応じてキュー読み出し部121aは、次のパケットの出力を要求する出力要求信号REQを調停部14に出力し、調停部14を介して入力された次のパケットを、演算部222aに出力する。これにより、演算ユニット2221aは、次のパケットの対応する演算内容(処理1)に応じたタスクの実行を開始する。
演算ユニット2222aおよび演算ユニット2223aのそれぞれは、対応する演算内容(処理2および処理3)に応じたタスクが完了した場合でも、読み出し指示信号を出力しない。この点以外の動作は、演算ユニット2221aの動作と同様であるため、詳細な説明は省略する。
このように、負荷分散制御装置20では、それぞれのプロセッサエレメント部22に備えた演算部222内に複数の演算ユニットを備え、この複数の演算ユニットでパイプラインを構成する。このような構成によって、負荷分散制御装置20では、入力されたパケットに含まれる複数の演算処理のタスクを、パイプラインを構成するそれぞれの演算ユニットで同時に実行することができる。
また、負荷分散制御装置20では、要求された演算処理を複数のプロセッサエレメント部22のそれぞれで分担して行う際に、第1の実施形態の負荷分散制御装置10と同様に、それぞれのプロセッサエレメント部22が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部22のみに負荷が集中してしまうことを回避することができる。
なお、図3に示した負荷分散制御装置20の構成でも、調停部14が、プロセッサエレメント部22のそれぞれから入力された出力要求信号REQの受付を調停する構成を示したが、負荷分散制御装置20の構成は、第1の実施形態の負荷分散制御装置10と同様に、図3に示した構成のみに限定されるものではない。
次に、負荷分散制御装置20の動作について説明する。図4は、本第2の実施形態の負荷分散制御装置20における動作のタイミングの一例を模式的に示した図である。以下の説明においては、説明を容易にするため、1つのプロセッサエレメント部22aの動作に着目して説明を行う。
なお、図3に示した負荷分散制御装置20では、プロセッサエレメント部22a(キュー読み出し部121a)が、演算ユニット2221aから出力された読み出し指示信号に応じて調停部14に出力要求信号REQを出力する。そして、調停部14が、プロセッサエレメント部22a(キュー読み出し部121a)から出力された出力要求信号REQに応じてパケットキューイング部13に格納されているパケットを読み出し、読み出したパケットをプロセッサエレメント部22a(キュー読み出し部121a)に出力する。このような動作によって、プロセッサエレメント部22a(キュー読み出し部121a)に、調停部14がパケットキューイング部13から読み出したパケットがプロセッサエレメント部22a(キュー読み出し部121a)に入力される。しかし、以下の説明においては、説明を容易にするため、キュー読み出し部121aがパケットキューイング部13に直接アクセスして、パケットキューイング部13に格納されているパケットを読み出す構成であるものとして説明する。
図4には、図3に示したプロセッサエレメント部22a内のキュー読み出し部121aが(調停部14を介して)読み出すパケットと、プロセッサエレメント部22a内の演算部222aに備えた3つの演算ユニット2221a〜演算ユニット2223aのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行している期間とを示している。
演算ユニット2221aが出力した読み出し指示信号に応じてキュー読み出し部121aが読み出したパケットP21が演算部222aに入力されると、演算部222aに備えた演算ユニット2221aは、入力されたパケットP21に含まれる最初の演算内容(処理1)に応じたタスクを実行する。
そして、演算ユニット2221aがパケットP21の演算内容(処理1)に応じたタスクの処理が完了すると、演算ユニット2222aは、入力されたパケットP21に含まれる2番目の演算内容(処理2)に応じたタスクの実行を開始する。その後、演算ユニット2222aがパケットP21の演算内容(処理2)に応じたタスクの処理が完了すると、演算ユニット2223aは、入力されたパケットP21に含まれる最後の演算内容(処理3)に応じたタスクの実行を開始する。そして、演算ユニット2223aは、パケットP21の演算内容(処理3)に応じたタスクの処理が完了すると、パケットP21の演算内容(処理3)の演算処理の結果を出力する。
また、演算ユニット2221aは、パケットP21の演算内容(処理1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、次のタスクを実行する準備が整ったときに、読み出し指示信号をキュー読み出し部121aに出力する。キュー読み出し部121aは、演算ユニット2221aから入力された読み出し指示信号に応じて、パケットP22を読み出し、読み出したパケットP22を、演算ユニット2221aに出力する。演算ユニット2221aは、キュー読み出し部121aからパケットP22が入力されると、入力されたパケットP22に含まれる最初の演算内容(処理1)に応じたタスクを実行する。
そして、演算ユニット2221aがパケットP22の演算内容(処理1)に応じたタスクの処理が完了すると、演算ユニット2222aは、入力されたパケットP22に含まれる2番目の演算内容(処理2)に応じたタスクの実行を開始する。その後、演算ユニット2222aがパケットP22の演算内容(処理2)に応じたタスクの処理が完了すると、演算ユニット2223aは、入力されたパケットP22に含まれる最後の演算内容(処理3)に応じたタスクの実行を開始する。そして、演算ユニット2223aは、パケットP22の演算内容(処理3)に応じたタスクの処理が完了すると、パケットP22の演算内容(処理3)の演算処理の結果を出力する。
また、演算ユニット2221aは、パケットP22の演算内容(処理1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、次のタスクを実行する準備が整ったときに、読み出し指示信号をキュー読み出し部121aに出力する。キュー読み出し部121aは、演算ユニット2221aから入力された読み出し指示信号に応じて、パケットP23を読み出し、読み出したパケットP23を、演算ユニット2221aに出力する。演算ユニット2221aは、キュー読み出し部121aからパケットP23が入力されると、入力されたパケットP23に含まれる最初の演算内容(処理1)に応じたタスクを実行する。
以降、同様に、演算ユニット2222aが、演算ユニット2221aが最初の演算内容(処理1)のタスクの処理を完了したパケットの2番目の演算内容(処理2)に応じたタスクの実行、および演算ユニット2223aが、同じパケットの最後の演算内容(処理3)に応じたタスクの実行を繰り返す。
また、演算ユニット2221aは、最初の演算内容(処理1)のタスクの処理を完了したパケットの次のパケットの読み出し指示信号のキュー読み出し部121aへの出力、およびキュー読み出し部121aから入力された次のパケットに含まれる最初の演算内容(処理1)に応じたタスクの実行を繰り返す。
このように、負荷分散制御装置20では、演算処理が空いているそれぞれのプロセッサエレメント部22が、自発的に次のパケットを取得するため、第1の実施形態の負荷分散制御装置10と同様に、それぞれのプロセッサエレメント部22が実行する演算処理の負荷を分散し、いずれかのプロセッサエレメント部22のみに負荷が集中してしまうことを回避することができる。
また、負荷分散制御装置20では、演算処理が空いているそれぞれのプロセッサエレメント部22が、自発的に次のパケットを取得し、それぞれのプロセッサエレメント部22に備えた演算部内でパイプラインを構成する複数の演算ユニットのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行する。これにより、負荷分散制御装置20では、パイプラインを構成するそれぞれの演算ユニットが同時に、対応するタスクを並列に実行することができる。このことにより、負荷分散制御装置20では、第1の実施形態の負荷分散制御装置10よりもさらに、実行する演算処理のスループットを短縮することができる。
ここで、負荷分散制御装置20におけるスループットと、第1の実施形態の負荷分散制御装置10におけるスループットについて説明する。図5は、本第2の実施形態の負荷分散制御装置20における動作のタイミングと第1の実施形態の負荷分散制御装置10における動作のタイミングとを比較して説明する図である。なお、以下の説明においては、説明を容易にするため、1つのプロセッサエレメント部12aまたはプロセッサエレメント部22aが、3つの演算処理の演算内容(処理1〜3)を実行するものとして説明を行う。
図5においては、図5(a)に、第1の実施形態の負荷分散制御装置10において、3つの演算処理の演算内容(処理1〜3)を1つのパケットで実行するように構成した場合の動作のタイミングの一例を示し、図5(b)に、第1の実施形態の負荷分散制御装置10において、3つの演算処理の演算内容(処理1〜3)を3つのパケットで実行するように構成した場合の動作のタイミングの一例を示している。また、図5(c)に、本第2の実施形態の負荷分散制御装置20の動作のタイミングの一例を示している。なお、図5(c)に示した負荷分散制御装置20の動作のタイミングの一例は、図4に示した負荷分散制御装置20の動作のタイミングの一例と同じである。
まず、図5(a)を用いて、第1の実施形態の負荷分散制御装置10において、3つの演算処理の演算内容(処理1〜3)を1つのパケットで実行する場合の動作を説明する。図5(a)には、第1の実施形態の負荷分散制御装置10に備えたプロセッサエレメント部12a内のキュー読み出し部121aが(調停部14を介して)読み出すパケットと、プロセッサエレメント部12a内の演算部122aが、入力されたパケットに含まれる3つの演算処理の演算内容(処理1〜3)を1つにまとめた演算内容に応じたタスクを実行している期間とを示している。
第1の実施形態の負荷分散制御装置10では、演算部122aが実行中のタスクの処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行する。このため、1つのパケットに3つの演算処理の演算内容(処理1〜3)が含まれている場合には、演算部122aがタスクを実行している期間が長くなる。
より具体的には、図5(a)に示したように、パケットP21に含まれる3つの演算処理の演算内容(処理1〜3)に応じたタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットP22を取得し、次のパケットP22に含まれる3つの演算処理の演算内容(処理1〜3)に応じたタスクを実行する。
次に、図5(b)を用いて、第1の実施形態の負荷分散制御装置10において、3つの演算処理の演算内容(処理1〜3)を3つのパケットで実行する場合の動作を説明する。図5(b)には、第1の実施形態の負荷分散制御装置10に備えたプロセッサエレメント部12a内のキュー読み出し部121aが(調停部14を介して)読み出すパケットと、プロセッサエレメント部12a内の演算部122aが、入力されたパケットに含まれる3つの演算処理の演算内容(処理1〜3)のいずれか1つの演算内容に応じたタスクを実行している期間とを示している。
第1の実施形態の負荷分散制御装置10では、演算部122aが実行中のタスクの処理が完了した後、自発的に次のパケットを要求して、次のパケットに応じた演算処理のタスクを実行するため、3つの演算処理の演算内容(処理1〜3)のいずれか1つの演算内容に応じたタスクを、順次パケットを読み出して実行する。このため、キュー読み出し部121aが(調停部14を介して)パケットを読み出す間隔が短く、そして、パケットを読み出す回数が多くなる。
より具体的には、図5(b)に示したように、パケットP21−1に含まれる1つの演算処理の演算内容(処理1)に応じたタスクの処理が完了し、次のタスクを実行する準備が整ったときに、次のパケットP21−2を取得し、次のパケットP21−2に含まれる1つの演算処理の演算内容(処理2)に応じたタスクを実行する。その後、パケットP21−2に含まれる1つの演算処理の演算内容(処理2)に応じたタスクの処理が完了した後に、次のパケットP21−3を取得して、このパケットP21−3に含まれる1つの演算処理の演算内容(処理3)に応じたタスクを実行する。このようにして、第1の実施形態の負荷分散制御装置10では、それぞれのパケットに含まれる1つの演算処理の演算内容に応じたタスクを、順次実行する。
ここで、図5(a)と図5(b)とを比べてわかるように、3つの演算処理の演算内容(処理1〜3)を3つのパケットで実行する場合(図5(b))には、3つの演算処理の演算内容(処理1〜3)を1つのパケットで実行する場合(図5(a))に比べて、演算処理のスループットが長くなってしまう。より具体的には、図5(a)においてパケットP22に含まれる3つの演算処理の演算内容(処理1〜3)に応じたタスクの処理が完了したタイミングでは、図5(b)に示したように、パケットP22−2に含まれる1つの演算処理の演算内容(処理2)に応じたタスクまでしか処理が完了していない。
このため、1つのパケットに含まれる演算処理の演算内容が多いことが望ましいと考えられるが、このようなパケットは、演算部122aに対する負荷が重いため、タスクを実行している期間が長くなり、負荷分散の制御が難しくなってしまう可能性がある。
これに対して、本第2の実施形態の負荷分散制御装置20では、図5(c)に示したように、3つの演算処理の演算内容(処理1〜3)のそれぞれに対応した、プロセッサエレメント部22a内の演算部222aに備えた演算ユニット2221a〜演算ユニット2223aのそれぞれが同時に、対応するタスクを並列に実行することができる。また、1つのパケットに含まれるそれぞれの演算内容(処理1〜3)を、演算ユニット2221a〜演算ユニット2223aのそれぞれに対する負荷が軽い演算内容にすることができる。
このため、プロセッサエレメント部22aは、入力されたパケットに含まれる全ての演算内容(パケットP21に含まれる処理2および処理3)に応じたタスクが完了していない状態であっても、実行中の演算内容(処理1)に応じたタスクが完了した段階で、次パケットを要求することができる。図5(c)に示したタイミングでは、1つのパケットの1/3の処理が完了した段階で、次パケットを要求することができる。
これにより、負荷分散制御装置20では、第1の実施形態の負荷分散制御装置10よりもさらに、それぞれのプロセッサエレメント部22が実行する演算処理の負荷を分散しやすくなり、負荷分散制御装置20が実行する演算処理のスループットの短縮を容易にすることができる。より具体的には、図5(a)および図5(b)と、図5(c)とを比べてわかるように、第1の実施形態の負荷分散制御装置10がパケットP22またはパケットP22−1に含まれる演算処理の演算内容に応じたタスクの処理を実行しているときに、負荷分散制御装置20では、パケットP22に含まれる最後の演算内容(処理3)に応じたタスクの処理が完了する。また、第1の実施形態の負荷分散制御装置10がパケットP22に含まれる3つの演算処理の演算内容(処理1〜3)またはパケットP22−2に含まれる1つの演算処理の演算内容(処理2)に応じたタスクの処理が完了したタイミングでは、図5(c)に示したように、パケットP24に含まれる2番目の演算処理の演算内容(処理2)に応じたタスクまで処理を完了することができる。
なお、第1の実施形態の負荷分散制御装置10において、本第2の実施形態の負荷分散制御装置20に備えた全ての演算ユニットと同じ数のプロセッサエレメント部12を備えることによって、第1の実施形態の負荷分散制御装置10でも、本第2の実施形態の負荷分散制御装置20と同様のスループットを得る構成を実現することができるとも考えられる。例えば、図3に示した負荷分散制御装置20では、3つのプロセッサエレメント部22内の演算部に3つの演算ユニットを備えているため、図1に示した第1の実施形態の負荷分散制御装置10の構成において9つのプロセッサエレメント部12を備える構成であっても、負荷分散制御装置20と同様のスループットを得る構成を実現することができるとも考えられる。しかし、負荷分散制御装置10に備えるプロセッサエレメント部12の数が多くなるに従って、調停部14が出力要求信号REQを受け付けるプロセッサエレメント部12を調停する際の処理が複雑になることによる回路規模の増大、調停部14とそれぞれのプロセッサエレメント部12との接続(インターフェース)部分の個数や回路規模の増大など、負荷分散制御装置10のコストの増大に繋がるような様々な問題が出てくると考えられる。このため、本第2の実施形態の負荷分散制御装置20の構成の方が、有利であると考えられる。
また、第1の実施形態の負荷分散制御装置10および本第2の実施形態の負荷分散制御装置20では、入力されたそれぞれのパケットに応じた1つの演算処理のタスクまたは複数の演算処理のタスクで、演算処理が完結する場合について説明した。しかし、演算処理の中には、例えば、固有値問題におけるヤコビ法のように、演算結果が予め定めた条件を満足するまで、つまり、演算結果が収束するまで、同様の演算処理を反復するフィードバック処理を行うものもある。このようなフィードバック処理を第1の実施形態の負荷分散制御装置10および本第2の実施形態の負荷分散制御装置20で実行する場合、第1の実施形態の負荷分散制御装置10および本第2の実施形態の負荷分散制御装置20では特に規定していないが、例えば、プロセッサエレメント部12またはプロセッサエレメント部22が演算処理の結果を出力した後に、同様の処理内容のパケットを別のパケットとして再び入力することにより、フィードバック処理の演算処理を実行することになる。つまり、フィードバック処理における1回の演算処理の処理内容を含む同様のパケットの処理を、複数回繰り返すことになる。しかし、負荷分散制御装置を、それぞれのプロセッサエレメント部が、フィードバック処理における演算結果が収束するまで、同様の演算処理のタスクを複数回繰り返して実行する構成にすることもでき、このような構成であっても、第1の実施形態の負荷分散制御装置10および本第2の実施形態の負荷分散制御装置20と同様に、本発明における負荷分散制御の考え方を適用することができる。
<第3の実施形態>
次に、本発明の第3の実施形態について説明する。本第3の実施形態の負荷分散制御装置は、フィードバック処理を行う際に、1回の演算処理の演算処理の結果を一旦出力することなく、プロセッサエレメント部内で同様の演算処理のタスクを複数回繰り返して実行する構成の負荷分散制御装置である。図6は、本第3の実施形態における負荷分散制御装置の概略構成の一例を示したブロック図である。図6に示した負荷分散制御装置30は、1つのホストプロセッサ11と、3つのプロセッサエレメント部32a〜プロセッサエレメント部32cと、パケットキューイング部13と、調停部14と、を備えている。なお、以下の説明においては、プロセッサエレメント部32a〜プロセッサエレメント部32cのそれぞれを区別せずに表す場合には、「プロセッサエレメント部32」という。
負荷分散制御装置30は、第1の実施形態の負荷分散制御装置10および第2の実施形態の負荷分散制御装置20と同様に、当該負荷分散制御装置30の外部から要求された演算処理を、プロセッサエレメント部32a〜プロセッサエレメント部32cのそれぞれで分担して行う、マルチプロセッサシステムの演算装置である。ただし、負荷分散制御装置30は、第2の実施形態の負荷分散制御装置20と同様に、それぞれのプロセッサエレメント部32内で、複数の演算処理のタスクを同時に実行することができる。さらに、負荷分散制御装置30は、それぞれのプロセッサエレメント部32内で、同様の演算処理のタスクを複数回繰り返して実行するフィードバック処理を実行することが可能であることが、第2の実施形態の負荷分散制御装置20と異なる。つまり、負荷分散制御装置30では、それぞれのプロセッサエレメント部32内でフィードバック処理を実行するための機能が、それぞれのプロセッサエレメント部32に加わること以外は、負荷分散制御装置30の構成要素や動作は、第2の実施形態の負荷分散制御装置20と同様である。従って、図6においては、図3に示した第2の実施形態の負荷分散制御装置20の構成要素と同様の構成要素には、同一の符号を付加している。以下の説明においては、第2の実施形態の負荷分散制御装置20と同様の構成要素や動作に関する説明は省略し、第2の実施形態の負荷分散制御装置20と異なる構成要素や動作について説明する。
ホストプロセッサ11は、負荷分散制御装置30の外部からの演算処理の要求を受け付け、要求された演算処理の演算内容と、演算処理を行う対象の入力データとを含むパケットを、パケットキューイング部13に書き込む。ただし、負荷分散制御装置30では、それぞれのプロセッサエレメント部32内でフィードバック処理における一連の演算処理のタスクを実行するため、ホストプロセッサ11は、要求されたフィードバック処理の一連の演算内容と、フィードバック処理を行う対象の入力データ(それぞれの演算処理に対応した複数の入力データであってもよい)とを含むパケットを、パケットキューイング部13に書き込む。
なお、図6においては、ホストプロセッサ11が、一連のフィードバック処理においてパイプライン的に処理を実行する演算内容が分割され、3つの演算処理の演算内容(処理F1〜F3)として含まれたパケットP3をパケットキューイング部13に出力している状態を示している。しかし、本第3の実施形態の負荷分散制御装置30においては、第1の実施形態の負荷分散制御装置10および第2の実施形態の負荷分散制御装置20と同様に、演算処理が外部から要求される際の形式や、パケットの構成や、パケットに基づいて行う演算処理の内容および入力データの形式に関しては、何ら限定しない。
プロセッサエレメント部32a〜プロセッサエレメント部32cのそれぞれは、同じ処理機能を持ったプロセッサ(演算処理部)である。プロセッサエレメント部32a〜プロセッサエレメント部32cのそれぞれは、調停部14を介して入力された、パケットキューイング部13に格納されたパケットに応じた複数の演算処理の演算(タスク)を、同時に実行する。また、プロセッサエレメント部32a〜プロセッサエレメント部32cのそれぞれは、入力されたパケットに含まれる複数の演算処理の演算内容が、フィードバック処理の一連の演算内容である場合には、フィードバック処理における演算処理の反復を終了する状態になるまで、当該フィードバック処理における一連の演算処理を繰り返す。つまり、フィードバック処理を打ち切って抜け出すための予め定めた打ち切り条件を満足するまで、フィードバック処理を継続する。以下の説明においては、プロセッサエレメント部32を代表して、プロセッサエレメント部32aについて説明する。
プロセッサエレメント部32aは、入力されたパケットに含まれる先頭(最初)の演算内容(処理F1)に応じた演算処理から、順次演算(タスク)を実行する。そして、プロセッサエレメント部32aは、同じパケットの最後の演算内容(処理F3)に応じたタスクの処理が完了したときに、処理が完了した演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定し、演算内容(処理F1〜F3)に応じた演算処理を反復するか否か、すなわち、フィードバック処理を行うか否かを決定する。
プロセッサエレメント部32aは、判定の結果、演算処理を反復する(フィードバック処理を行う)場合には、入力データを演算内容(処理F3)の演算処理の結果に置き換えて(アップデートして)、演算内容(処理F1)に応じた演算処理から順次、同じタスクの処理を繰り返す。
また、プロセッサエレメント部32aは、判定の結果、演算処理を反復しない(フィードバック処理を行わない)場合には、第2の実施形態の負荷分散制御装置20に備えたプロセッサエレメント部22aと同様に、演算内容(処理F3)の演算処理の結果を、プロセッサエレメント部32aの演算結果として出力し、次のパケットの出力を要求する出力要求信号REQを、調停部14に出力する。そして、調停部14から次に実行するパケットが入力されると、入力されたパケットに含まれる最初の演算内容(処理F1)に応じた演算処理から、順次演算(タスク)の実行を開始する。
このように、プロセッサエレメント部32aは、フィードバック処理を行わない場合には、自発的に次パケットを要求して、次のパケットに応じた演算処理のタスクを実行し、フィードバック処理を行う場合には、同じタスクのフィードバック処理を繰り返す。
プロセッサエレメント部32aは、キュー読み出し部321aと、演算部322aと、セレクタ部323aと、カウンタ部324aと、を備えている。なお、プロセッサエレメント部32bや、プロセッサエレメント部32cも、プロセッサエレメント部32aと同様に、キュー読み出し部321と、演算部322と、セレクタ部323と、カウンタ部324と、を備えており、プロセッサエレメント部32bに備えた構成要素や、プロセッサエレメント部32cに備えた構成要素も、以下に説明するプロセッサエレメント部32aに備えた構成要素と同様の動作である。
キュー読み出し部321aは、調停部14から入力されたパケットを、セレクタ部323aに出力する。また、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて、次のパケットの出力を要求する出力要求信号REQを調停部14に出力し、出力した出力要求信号REQに応じて入力された次のパケットを、セレクタ部323aに出力する。また、キュー読み出し部321aは、調停部14から入力されたパケットのセレクタ部323aへの出力が完了すると、カウンタ部324aのカウント値を加算(インクリメント)するためのインクリメント信号を、カウンタ部324aに出力する。
演算部322aは、セレクタ部323aから入力されたパケットに含まれる入力データに対して、このパケットに含まれる演算内容(処理F1〜F3)に応じたそれぞれの演算(タスク)を順次実行する。演算部322a内では、パケットに含まれる3つの演算内容のそれぞれに対応する3つの演算ユニット3221a〜演算ユニット3223aを直列に接続した、演算ユニットのパイプラインが構成されている。
演算ユニット3221a〜演算ユニット3223aのそれぞれは、入力されたパケットに含まれるそれぞれの演算内容(処理F1〜F3)に対応し、対応する演算内容に応じた演算(タスク)を順次実行する。つまり、パイプラインの先頭に配置された演算ユニット3221aが演算内容(処理F1)に応じたタスクを実行し、このタスクの処理が完了すると、パイプラインの2番目に配置された演算ユニット3222aが演算内容(処理F2)に応じたタスクを実行する。そして、演算ユニット3222aが演算内容(処理F2)に応じたタスクの処理が完了すると、パイプラインの最終段に配置された演算ユニット3223aが演算内容(処理F3)に応じたタスクを実行する。そして、演算ユニット3223aが演算内容(処理F3)に応じたタスクの処理が完了すると、演算内容(処理F3)の演算処理の結果を、プロセッサエレメント部32a(演算部322a)の演算結果として出力する。
演算ユニット3221aは、対応する演算内容(処理F1)に応じたタスクが完了した場合でも、読み出し指示信号を出力しない点以外の動作は、第2の実施形態の負荷分散制御装置20に備えたプロセッサエレメント部22a内の演算部222aに備えた演算ユニット2221aの動作と同様であるため、詳細な説明は省略する。また、演算ユニット3222aも、第2の実施形態の負荷分散制御装置20に備えたプロセッサエレメント部22a内の演算部222aに備えた演算ユニット2222aの動作と同様であるため、詳細な説明は省略する。
演算ユニット3223aは、対応する演算内容(処理F3)に応じたタスクの処理が完了したときに、実行した演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。この判定の結果、演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足しない場合、すなわち、演算処理の反復を打ち切らずにフィードバック処理を行う場合には、入力データを演算内容(処理F3)の演算処理の結果に置き換えた(アップデートした)パケットを、フィードバック処理を行う次のパケットとしてセレクタ部323aに出力する。
また、演算ユニット3223aは、判定の結果、演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足する場合、すなわち、演算処理の反復を打ち切ってフィードバック処理を終了する場合には、演算内容(処理F3)の演算処理の結果を、演算部322aの演算結果として出力する。このとき、演算ユニット3223aは、カウンタ部324aのカウント値を減算(デクリメント)するためのデクリメント信号を、カウンタ部324aに出力する。
セレクタ部323aは、キュー読み出し部321aから入力されたパケット、または演算部322a内の演算ユニット3223aから入力されたパケットのいずれか一方のパケットを、演算部322a内の演算ユニット3221aに出力する。
なお、セレクタ部323aは、キュー読み出し部321aから入力されたパケット、および演算ユニット3223aから入力されたパケットのそれぞれが同時期に入力された場合に対応し、それぞれのパケットを入力された順番で一時的に記憶する機能を備えている。そして、セレクタ部323aは、演算ユニット3221aが実行しているタスクがない場合、一時的に記憶されたそれぞれのパケットを、記憶された順番で順次演算ユニット3221aに出力する。
なお、セレクタ部323aが、演算ユニット3221aが実行しているタスクがあるか否かを判定する方法としては、例えば、演算ユニット3221aが出力する演算完了信号を検出する方法や、演算ユニット3221aに読み出し指示信号を出力させて判定する方法などが考えられる。本第3の実施形態においては、セレクタ部323aによる演算ユニット3221aが実行しているタスクがあるか否かの判定方法に関しては、何ら限定しない。
カウンタ部324aは、初期値が“0”で、この初期値=“0”から演算部322aに備えた演算ユニットの数までの間でカウントするカウンタである。カウンタ部324aは、キュー読み出し部321aから入力されたインクリメント信号に応じて、当該カウンタ部324aのカウント値を加算(インクリメント)し、演算部322a内の演算ユニット3223aから入力されたデクリメント信号に応じて、当該カウンタ部324aのカウント値を減算(デクリメント)する。そして、カウンタ部324aは、当該カウンタ部324aのカウント値を、キュー読み出し部321aに出力する。
上述したように、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて、次のパケットの出力を要求する出力要求信号REQを調停部14に出力する。ここで、キュー読み出し部321aによる出力要求信号REQの出力制御の方法について説明する。
キュー読み出し部321aは、カウンタ部324aのカウント値が、演算部322aに備えた演算ユニットの数未満の値である、すなわち、本第3の実施形態の負荷分散制御装置30では、カウンタ部324aのカウント値が“0”〜“2”の間であるときには、次のパケットの出力を要求する出力要求信号REQを調停部14に出力し、出力した出力要求信号REQに応じて入力された次のパケットを、セレクタ部323aに出力する。
また、キュー読み出し部321aは、カウンタ部324aのカウント値が、演算部322aに備えた演算ユニットの数と同じ値である、すなわち、本第3の実施形態の負荷分散制御装置30では、カウンタ部324aのカウント値が“3”であるときには、調停部14に次のパケットの出力を要求しない。
このように、負荷分散制御装置30では、第2の実施形態の負荷分散制御装置20と同様に、それぞれのプロセッサエレメント部32に備えた演算部322内に複数の演算ユニットを備え、この複数の演算ユニットでパイプラインを構成する。このような構成によって、負荷分散制御装置30では、第2の実施形態の負荷分散制御装置20と同様に、入力されたパケットに含まれる複数の演算処理のタスクを、パイプラインを構成するそれぞれの演算ユニットで同時に実行することができる。
また、負荷分散制御装置30では、それぞれのプロセッサエレメント部32に備えた演算部322で反復(フィードバック)処理を行うか否かを判定し、判定した結果をカウンタ部324aのカウント値に反映する。そして、それぞれのプロセッサエレメント部32に備えたキュー読み出し部321aが、カウンタ部324aのカウント値に基づいて、調停部14に次のパケットの出力を要求するか否かを決定する。このような動作によって、負荷分散制御装置30では、それぞれのプロセッサエレメント部32内でフィードバック処理を実行する。
また、負荷分散制御装置30では、要求された演算処理を複数のプロセッサエレメント部32のそれぞれで分担して行う際に、第1の実施形態の負荷分散制御装置10および第2の実施形態の負荷分散制御装置20と同様に、それぞれのプロセッサエレメント部32が実行する演算処理の負荷を分散することによって、いずれかのプロセッサエレメント部32のみに負荷が集中してしまうことを回避することができる。
なお、図6に示した負荷分散制御装置30の構成でも、調停部14が、プロセッサエレメント部32のそれぞれから入力された出力要求信号REQの受付を調停する構成を示したが、負荷分散制御装置30の構成は、第1の実施形態の負荷分散制御装置10および第2の実施形態の負荷分散制御装置20と同様に、図6に示した構成のみに限定されるものではない。
また、図6に示した負荷分散制御装置20の構成では、キュー読み出し部321aから入力されたパケットと、演算ユニット3223aから入力されたパケットとのそれぞれが同時期に入力された場合に対応するため、セレクタ部323aが、それぞれのパケットを入力された順番で一時的に記憶する機能を備えている構成を示した。しかし、それぞれのパケットを演算ユニット3221aに出力するタイミングを調整する構成は、図6に示した構成のみに限定されるものではない。例えば、上述したように、カウンタ部324aのカウント値が、演算部322aに備えた演算ユニットの数と同じ値である場合には、キュー読み出し部321aは、次のパケットを調停部14に要求せず、次のパケットを読み出さない。このため、演算ユニット3221aによる演算内容に応じたタスクの実行が待たされる可能性があるパケットは、演算ユニット3223aが出力するフィードバック処理のパケットのみである。従って、演算ユニット3223aが出力するフィードバック処理のパケットのみを一時的に記憶する構成とし、セレクタ部323aに、それぞれのパケットを一時的に記憶する機能を備えない構成にすることもできる。
より具体的には、演算ユニット3223aの後段に、演算ユニット3223aが出力するフィードバック処理のパケットを一時的に記憶する、例えば、バッファを設ける。そして、キュー読み出し部321aが、カウンタ部324aのカウント値に基づいて、調停部14を介してパケットキューイング部13から次のパケットを読み出すか、バッファからフィードバック処理のパケット読み出すかを切り替え、読み出したいずれかのパケットを、演算ユニット3221aに直接出力する構成にすることもできる。この場合のキュー読み出し部321aの動作も、上述したキュー読み出し部321aの動作と同様に、カウンタ部324aのカウント値が演算部322aに備えた演算ユニットの数未満の値である場合に、パケットキューイング部13から次のパケットを読み出し、カウンタ部324aのカウント値が演算部322aに備えた演算ユニットの数と同じ値である場合に、バッファからフィードバック処理のパケット読み出す動作となる。
次に、負荷分散制御装置30の動作について説明する。図7は、本第3の実施形態の負荷分散制御装置30における動作のタイミングの一例を模式的に示した図である。以下の説明においては、説明を容易にするため、1つのプロセッサエレメント部32aの動作に着目して説明を行う。
なお、図6に示した負荷分散制御装置30では、プロセッサエレメント部32a(キュー読み出し部321a)が、カウンタ部324aのカウント値に基づいて、調停部14に出力要求信号REQを出力するか否かを決定する。そして、プロセッサエレメント部32a(キュー読み出し部321a)が調停部14に出力要求信号REQを出力した場合、調停部14が、プロセッサエレメント部32a(キュー読み出し部321a)から出力された出力要求信号REQに応じてパケットキューイング部13に格納されているパケットを読み出し、読み出したパケットをプロセッサエレメント部32a(キュー読み出し部321a)に出力する。このような動作によって、プロセッサエレメント部32a(キュー読み出し部321a)に、調停部14がパケットキューイング部13から読み出したパケットがプロセッサエレメント部32a(キュー読み出し部321a)に入力される。しかし、以下の説明においては、説明を容易にするため、キュー読み出し部321aが、カウンタ部324aのカウント値に基づいて調停部14に出力要求信号REQを出力すると判定したとき、すなわち、次のパケットを読み出すと判定したときは、キュー読み出し部321aがパケットキューイング部13に直接アクセスして、パケットキューイング部13に格納されているパケットを読み出す構成であるものとして説明する。
図7には、図6に示したプロセッサエレメント部32a内のキュー読み出し部321aが(調停部14を介して)読み出すパケットと、プロセッサエレメント部32a内でフィードバック処理を行うために演算部322aから出力されるパケットと、キュー読み出し部321aが(調停部14を介して)パケットを読み出すか否かを判定するためのカウンタ部324aのカウント値とを示している。また、図7には、図6に示したプロセッサエレメント部32a内の演算部322aに備えた3つの演算ユニット3221a〜演算ユニット3223aのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行している期間を示している。
まず、キュー読み出し部321aが、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“0”(初期値)であるため、キュー読み出し部321aは、次のパケットを読み出すと判定し、パケットP31を読み出す。そして、キュー読み出し部321aは、読み出したパケットP31が演算部322aに入力されると、インクリメント信号をカウンタ部324aに出力して、カウンタ部324aのカウント値を加算(インクリメント)する。これにより、カウンタ部324aのカウント値は“1”になる。また、演算部322aに備えた演算ユニット3221aは、セレクタ部323aを介して入力されたパケットP31に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
以降、演算ユニット3221aがパケットP31の演算内容(処理F1)に応じたタスクの処理が完了すると、演算ユニット3222aは、入力されたパケットP31に含まれる2番目の演算内容(処理F2)に応じたタスクの実行を開始する。その後、演算ユニット3222aがパケットP31の演算内容(処理F2)に応じたタスクの処理が完了すると、演算ユニット3223aは、入力されたパケットP31に含まれる最後の演算内容(処理F3)に応じたタスクの実行を開始する。
また、演算ユニット3221aがパケットP31の演算内容(処理F1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“1”であるため、キュー読み出し部321aは、次のパケットを読み出すと判定し、次のパケットP32を読み出す。そして、キュー読み出し部321aは、読み出したパケットP32が演算部322aに入力されると、インクリメント信号をカウンタ部324aに出力して、カウンタ部324aのカウント値をさらに加算(インクリメント)する。これにより、カウンタ部324aのカウント値は“2”になる。また、演算ユニット3221aは、セレクタ部323aを介して入力されたパケットP32に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
以降、演算ユニット3221aがパケットP32の演算内容(処理F1)に応じたタスクの処理が完了すると、演算ユニット3222aは、入力されたパケットP32に含まれる2番目の演算内容(処理F2)に応じたタスクの実行を開始する。その後、演算ユニット3222aがパケットP31の演算内容(処理F2)に応じたタスクの処理が完了すると、演算ユニット3223aは、入力されたパケットP32に含まれる最後の演算内容(処理F3)に応じたタスクの実行を開始する。
また、演算ユニット3221aがパケットP32の演算内容(処理F1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“2”であるため、キュー読み出し部321aは、次のパケットを読み出すと判定し、次のパケットP33を読み出す。そして、キュー読み出し部321aは、読み出したパケットP33が演算部322aに入力されると、インクリメント信号をカウンタ部324aに出力して、カウンタ部324aのカウント値をさらに加算(インクリメント)する。これにより、カウンタ部324aのカウント値は“3”になる。また、演算ユニット3221aは、セレクタ部323aを介して入力されたパケットP33に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
以降、演算ユニット3221aがパケットP33の演算内容(処理F1)に応じたタスクの処理が完了すると、演算ユニット3222aは、入力されたパケットP33に含まれる2番目の演算内容(処理F2)に応じたタスクの実行を開始する。その後、演算ユニット3222aがパケットP33の演算内容(処理F2)に応じたタスクの処理が完了すると、演算ユニット3223aは、入力されたパケットP33に含まれる最後の演算内容(処理F3)に応じたタスクの実行を開始する。
その後、演算ユニット3223aは、最初に入力されたパケットP31の演算内容(処理F3)に応じたタスクの処理が完了すると、実行した演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットP31がフィードバック処理を行うパケットであるものとする。このため、演算ユニット3223aは、実行した演算内容(処理F3)に応じたタスクの処理の結果が打ち切り条件を満足しない、すなわち、フィードバック処理を行う(=反復あり)と判定する。この判定結果に応じて、演算ユニット3223aは、パケットP31の入力データを演算内容(処理F3)の演算処理の結果に置き換えた(アップデートした)、フィードバック処理のパケットPF31を、セレクタ部323aに出力する(図7の経路FB1参照)。
また、演算ユニット3221aがパケットP33の演算内容(処理F1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“3”であるため、キュー読み出し部321aは、次のパケットを読み出さないと判定し、次のパケットP34の読み出しを行わない。これにより、演算ユニット3221aには、フィードバック処理のパケットPF31がセレクタ部323aを介して入力される(図7の経路FB2参照)。このとき、キュー読み出し部321aは、フィードバック処理のパケットPF31の演算部322aへの入力であるため、インクリメント信号をカウンタ部324aに出力せず、カウンタ部324aの現在のカウント値を保持させる。これにより、カウンタ部324aのカウント値は“3”が保持される。そして、演算ユニット3221aは、セレクタ部323aを介して入力されたフィードバック処理のパケットPF31に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
その後、演算ユニット3223aは、2番目に入力されたパケットP32の演算内容(処理F3)に応じたタスクの処理が完了すると、実行した演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットP32がフィードバック処理を行わないパケットであるものとする。このため、演算ユニット3223aは、実行した演算内容(処理F3)に応じたタスクの処理の結果が打ち切り条件を満足する、すなわち、フィードバック処理を行う(=反復なし)と判定する。この判定結果に応じて、演算ユニット3223aは、パケットP32の入力データを演算内容(処理F3)の演算処理の結果を、演算部322aの演算結果として出力する。そして、演算ユニット3223aは、演算部322aの演算結果が出力されると、デクリメント信号をカウンタ部324aに出力して、カウンタ部324aのカウント値を減算(デクリメント)する。これにより、カウンタ部324aのカウント値は“2”になる。
その後、演算ユニット3221aがパケットPF31の演算内容(処理F1)に応じたタスクの処理が完了すると、演算ユニット3222aは、フィードバック処理のパケットPF31に含まれる2番目の演算内容(処理F2)に応じたタスクの実行を開始する。そして、演算ユニット3222aがパケットPF31の演算内容(処理F2)に応じたタスクの処理が完了すると、演算ユニット3223aは、フィードバック処理のパケットPF31に含まれる最後の演算内容(処理F3)に応じたタスクの実行を開始する。
また、演算ユニット3221aがフィードバック処理のパケットPF31の演算内容(処理F1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“2”であるため、キュー読み出し部321aは、次のパケットを読み出すと判定し、次のパケットP34を読み出す。そして、キュー読み出し部321aは、読み出したパケットP34が演算部322aに入力されると、インクリメント信号をカウンタ部324aに出力して、カウンタ部324aのカウント値を加算(インクリメント)する。これにより、カウンタ部324aのカウント値は“3”になる。また、演算ユニット3221aは、セレクタ部323aを介して入力されたパケットP34に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
以降、演算ユニット3221aがパケットP34の演算内容(処理F1)に応じたタスクの処理が完了すると、演算ユニット3222aは、入力されたパケットP34に含まれる2番目の演算内容(処理F2)に応じたタスクの実行を開始する。その後、演算ユニット3222aがパケットP34の演算内容(処理F2)に応じたタスクの処理が完了すると、演算ユニット3223aは、入力されたパケットP34に含まれる最後の演算内容(処理F3)に応じたタスクの実行を開始する。
また、演算ユニット3221aがパケットP34の演算内容(処理F1)に応じたタスクの処理が完了したことにより、実行しているタスクがなくなったため、キュー読み出し部321aは、カウンタ部324aのカウント値に基づいて次のパケットを読み出すか否かを判定する。ここでは、カウンタ部324aのカウント値=“3”であるため、キュー読み出し部321aは、次のパケットを読み出さないと判定し、次のパケットP35(不図示)の読み出しを行わないで待機する。
その後、演算ユニット3223aは、3番目に入力されたパケットP33の演算内容(処理F3)に応じたタスクの処理が完了すると、実行した演算内容(処理F3)に応じたタスクの処理の結果が、打ち切り条件を満足するか否かを判定する。ここでは、パケットP33がフィードバック処理を行うパケットであるものとする。このため、演算ユニット3223aは、実行した演算内容(処理F3)に応じたタスクの処理の結果が打ち切り条件を満足しない、すなわち、フィードバック処理を行う(=反復あり)と判定する。この判定結果に応じて、演算ユニット3223aは、パケットP33の入力データを演算内容(処理F3)の演算処理の結果に置き換えた(アップデートした)、フィードバック処理のパケットPF33を、セレクタ部323aに出力する(図7の経路FB3参照)。
また、演算ユニット3221aは、パケットP34の演算内容(処理F1)に応じたタスクの処理がすでに完了している状態であるため、演算ユニット3221aには、フィードバック処理のパケットPF33がセレクタ部323aを介して入力される(図7の経路FB4参照)。このとき、キュー読み出し部321aは、フィードバック処理のパケットPF33の演算部322aへの入力であるため、インクリメント信号をカウンタ部324aに出力せず、カウンタ部324aの現在のカウント値を保持させる。これにより、カウンタ部324aのカウント値は“3”が保持される。そして、演算ユニット3221aは、セレクタ部323aを介して入力されたフィードバック処理のパケットPF33に含まれる最初の演算内容(処理F1)に応じたタスクを実行する。
このように、負荷分散制御装置30では、それぞれのプロセッサエレメント部32に備えた演算部322で反復(フィードバック)処理を行うか否かを判定し、それぞれのプロセッサエレメント部32に備えたキュー読み出し部321aが、カウンタ部324aのカウント値に基づいて、次のパケットを読み出すか否かを判定することによって、負荷分散制御装置30に備えたそれぞれのプロセッサエレメント部32内でフィードバック処理を実行する。
また、負荷分散制御装置30では、演算処理が空いているそれぞれのプロセッサエレメント部32が、自発的に次のパケットを取得し、それぞれのプロセッサエレメント部32に備えた演算部内でパイプラインを構成する複数の演算ユニットのそれぞれが、入力されたパケットに含まれる、対応する演算内容に応じたタスクを実行する。これにより、負荷分散制御装置30では、第2の実施形態の負荷分散制御装置20と同様に、パイプラインを構成するそれぞれの演算ユニットが同時に、対応するタスクを並列に実行することができる。このことにより、負荷分散制御装置30では、フィードバック処理においても、第2の実施形態の負荷分散制御装置20と同様に、実行する演算処理のスループットを短縮することができる。
また、負荷分散制御装置30では、フィードバック処理を行わない場合に、演算処理が空いているそれぞれのプロセッサエレメント部32が、自発的に次のパケットを取得する。これにより、負荷分散制御装置30では、フィードバック処理においても、第1の実施形態の負荷分散制御装置10および第2の実施形態の負荷分散制御装置20と同様に、それぞれのプロセッサエレメント部32が実行する演算処理の負荷を分散し、いずれかのプロセッサエレメント部32のみに負荷が集中してしまうことを回避することができる。
上記に述べたとおり、本発明を実施するための形態によれば、複数のプロセッサ(演算処理部)が連携して処理を行うマルチプロセッサシステムの演算装置において、演算処理が空いているそれぞれのプロセッサが、自発的に次のパケットを取得して演算処理を実行する。これにより、本発明を実施するための形態では、それぞれのパケット毎に処理を実行する際の負荷のばらつきがある場合でも、確実に空いているプロセッサにパケットが入力されるように負荷分散の制御を行うことができ、いずれかのプロセッサのみに負荷が集中してしまうことを回避することができる。このことにより、本発明を実施するための形態では、動的な負荷分散の制御を行うことによって、それぞれのプロセッサの稼働率を向上させ、結果的に全ての演算処理のスループットを短縮することができる。
また、本発明を実施するための形態では、演算処理が空いているそれぞれのプロセッサが、自発的に次のパケットを取得するため、従来の負荷分散制御装置に備えたマスタプロセッサのように、次のパケットの投入先を判定するための構成は不要であり、マスタプロセッサが実行している処理を中断して他の処理を実行することによる処理効率の低下などが起こらない。
また、本発明を実施するための形態によれば、それぞれのプロセッサ内の構成を、パイプラインを構成する複数の演算ユニットで構成し、入力されたパケットに含まれるそれぞれの演算内容を、対応する演算ユニットが実行する。これにより、本発明を実施するための形態では、パイプラインを構成するそれぞれの演算ユニットが同時に、対応する演算内容のタスクを並列に実行することができ、それぞれのプロセッサが実行する演算処理のスループットを短縮することができる。
また、本発明を実施するための形態によれば、それぞれのプロセッサで反復(フィードバック)処理を行うか否かを判定し、次のパケットを読み出すか否かを判定することにより、フィードバック処理を行うパケットを一旦プロセッサの外部に出力せずに、フィードバック処理を実行することができる。
これらにより、本発明を実施するための形態では、負荷分散制御装置を備えたシステムにおける処理時間の短縮を図ることができ、負荷分散制御装置を備えたシステムの性能を向上させることができる。
なお、本実施形態においては、負荷分散制御装置に3つのプロセッサエレメント部を備えている構成について説明したが、負荷分散制御装置に備えるプロセッサエレメント部の数は、本発明を実施するための形態で示した構成のみに限定されるものではない。また、本実施形態においては、3つの演算処理の演算内容(処理1〜3)が含まれたパケットP2、および一連のフィードバック処理における3つの演算処理の演算内容(処理F1〜F3)が含まれたパケットP3の例を示したが、それぞれのパケットに含まれる演算処理の演算内容の数は、負荷分散制御装置に備えるプロセッサエレメント部に対応していることが望ましい。
なお、本実施形態においては、負荷分散制御装置に備えたホストプロセッサ11は、負荷分散制御装置の外部からの演算処理の要求を受け付け、演算処理の結果を負荷分散制御装置の外部に出力する処理を実行しており、外部から入力された演算要求に応じたパケット生成してパケットキューイング部13に書き込む処理を実行しない場合には、負荷分散の制御に直接関わっていない。従って、ホストプロセッサ11が外部から入力された演算要求に応じたパケット生成する処理を実行しない構成である場合には、例えば、負荷分散制御装置にホストプロセッサ11を設けず、外部からの演算処理の要求に応じたそれぞれのパケットを、直接パケットキューイング部13に格納する構成にすることもできる。また、例えば、ホストプロセッサ11も、プロセッサエレメント部と同様に、パケットに含まれる演算処理の演算内容に応じたタスクを実行する構成にすることもできる。
また、本実施形態においては、それぞれのプロセッサエレメント部の処理機能に関して説明していないが、例えば、負荷分散制御装置を、撮像装置などの撮像システム内に備えている場合には、それぞれのプロセッサエレメント部は、撮像システムにおける画像処理の演算を実行するものと考えることができる。ここで、画像処理の演算は、例えば、画像のヒストグラムを生成する演算などが考えられる。
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。