(57)【要約】【課題】複数のプロセッサで複数のメモリを共有する演算装置において、複数のプロセッサからの同じメモリに対するアクセスの競合が発生することなくメモリを共有することができる演算装置を提供する。【解決手段】演算処理の内容の情報が含まれた複数のパケットが入力され、パケットに対する演算処理を実行する演算装置であって、演算処理の内容に応じた演算処理を行う複数の処理演算部と、演算処理の対象の演算対象データまたは結果のデータを格納する、それぞれの処理演算部で共有して使用される複数のデータ記憶部と、パケットキューを具備し、格納されたそれぞれのパケットに対してデータ記憶部の使用権を付与して、いずれか１つの処理演算部に出力するパケット管理部と、データ記憶部の使用権の情報に基づいてパケットに対する演算処理を実行する処理演算部と演算処理を実行する際に使用するデータ記憶部との接続を切り替える接続切り替え部とを備える。【選択図】図１
2015028710.tif 000002
【特許請求の範囲】
【請求項１】
要求する演算処理の内容を表す情報が含まれた複数のパケットが入力され、該入力されたパケットに対する演算処理を実行する演算装置であって、
前記パケットにおいて要求された演算処理の内容に応じた演算処理を行う処理機能を有し、次に実行する演算処理の内容を表す情報を含む演算処理後のパケットを出力する複数の処理演算部と、
前記処理演算部が前記パケットに対する演算処理を実行する対象の演算対象データ、または前記パケットに対する演算処理を実行した結果のデータを格納する、それぞれの前記処理演算部で共有して使用される複数のデータ記憶部と、
前記パケットを順次格納するパケットキューを具備し、該パケットキューに格納されたそれぞれの前記パケットに対して前記データ記憶部の使用権を付与して、いずれか１つの前記処理演算部に出力するパケット管理部と、
前記パケットに付与された前記データ記憶部の使用権の情報に基づいて、該パケットに対する演算処理を実行する前記処理演算部と、該パケットに対する演算処理を実行する際に使用する前記データ記憶部との接続を切り替える接続切り替え部と、
を備えることを特徴とする演算装置。
【請求項２】
前記パケット管理部は、
それぞれの前記処理演算部の使用状況、およびそれぞれの前記データ記憶部の使用状況に基づいて、前記パケットに対して１つ以上の前記データ記憶部の使用権を付与し、該データ記憶部の使用権を付与した前記パケットを、前記パケットキューから、該パケットに対する演算処理を実行するいずれか１つの前記処理演算部に出力させるキュー制御部と、
前記処理演算部のそれぞれから出力された前記演算処理後のパケット内の情報に基づいて、該演算処理後のパケットの出力先を判定する再エントリ判定部と、
を備え、
前記接続切り替え部は、
前記パケットに使用権が付与された前記データ記憶部と、該パケットに対する演算処理を実行する前記処理演算部とが１対１に接続されるように該データ記憶部と該処理演算部とを接続するクロスバスイッチと、
前記パケットに付与された前記データ記憶部の使用権の情報に基づいて、前記クロスバスイッチによる前記データ記憶部と前記処理演算部との接続の切り替えを制御すると共に、前記パケットに対する演算処理の実行において、前記処理演算部が前記データ記憶部にアクセスする際の論理アドレスを、使用権が付与された前記データ記憶部の物理アドレスに変換するアドレス変換部と、
を備えることを特徴とする請求項１に記載の演算装置。
【請求項３】
前記キュー制御部は、
前記データ記憶部の使用権が付与されていない同一の前記処理演算部が演算処理を実行する前記パケットに対して、前記パケットキューに格納された順番が早い前記パケットから順に、前記データ記憶部の使用権を付与し、
前記データ記憶部の使用権が付与された同一の前記処理演算部が演算処理を実行する前記パケットを、前記パケットキューに格納された順番が早い前記パケットから順に、対応する前記処理演算部に出力し、
前記再エントリ判定部は、
前記演算処理後のパケット内の情報に基づいて、該演算処理後のパケットが、当該演算装置から出力するパケットであるか、次の演算処理を要求するパケットであるかを判定し、
該演算処理後のパケットが当該演算装置から出力するパケットである場合には、該演算処理後のパケットに付与された前記データ記憶部の使用権を開放して出力し、
該演算処理後のパケットが次の演算処理を要求するパケットである場合には、該演算処理後のパケットを前記パケットキューに再度格納する、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記キュー制御部は、
前記データ記憶部の使用権を付与する前記パケット内の情報に基づいて、該パケットに対して複数の前記データ記憶部の使用権を付与し、
前記アドレス変換部は、
複数の前記データ記憶部の使用権が付与された前記パケットに対する演算処理を実行する前記処理演算部が、使用権が付与されたぞれぞれの前記データ記憶部に連続してアクセスすることができるように、アドレスを変換する、
ことを特徴とする請求項３に記載の演算装置。
【請求項５】
前記キュー制御部は、
前記データ記憶部の使用権が付与された同一の前記処理演算部が演算処理を実行する前記パケットの数が、予め定めたパケット数の閾値以上、前記パケットキュー内に存在しないように、前記データ記憶部の使用権が付与されていない同一の前記処理演算部が演算処理を実行する前記パケットに対する前記データ記憶部の使用権の付与を制御し、
前記再エントリ判定部は、
前記演算処理後のパケットを前記パケットキューに再度格納する際に、該演算処理後のパケットに対して演算処理を実行する前記処理演算部と同一の前記処理演算部が演算処理を実行する、前記データ記憶部の使用権が付与された前記パケットの数が、前記パケット数の閾値以上、前記パケットキュー内に存在しないように、前記パケットキューに再度格納する前記演算処理後のパケットに付与された前記データ記憶部の使用権の開放を制御する、
ことを特徴とする請求項３または請求項４に記載の演算装置。
【請求項６】
前記キュー制御部は、
前記データ記憶部の使用権が付与されていない同一の前記処理演算部が演算処理を実行する前記パケットに対して、演算処理を実行する際の優先度が高く、前記パケットキューに格納された順番が早い前記パケットから順に、前記データ記憶部の使用権を付与し、
前記データ記憶部の使用権が付与された同一の前記処理演算部が演算処理を実行する前記パケットを、演算処理を実行する際の優先度が高く、前記パケットキューに格納された順番が早い前記パケットから順に、対応する前記処理演算部に出力し、
前記再エントリ判定部は、
前記演算処理後のパケットを前記パケットキューに再度格納する際に、該演算処理後のパケットに対して演算処理を実行する前記処理演算部と同一の前記処理演算部が演算処理を実行する前記データ記憶部の使用権が付与された前記パケットと、該演算処理後のパケットとにおいて、演算処理を実行する際の優先度が高く、前記パケットキューに格納された順番が早い前記パケットから順に、前記データ記憶部の使用権を有するように、前記パケットキューに格納された前記パケット、または該パケットキューに再度格納する前記演算処理後のパケットに付与された前記データ記憶部の使用権の開放を制御する、
ことを特徴とする請求項３から請求項５のいずれか１の項に記載の演算装置。
【請求項７】
前記演算対象データは、
それぞれの前記パケットに含まれ、
前記処理演算部は、
前記クロスバスイッチによって、演算処理を実行する前記パケットに使用権が付与された前記データ記憶部と接続された後に、演算処理を実行する前記パケットに含まれる前記演算対象データを該データ記憶部に転送し、該転送した前記演算対象データに対して演算処理を実行する、
ことを特徴とする請求項３から請求項６のいずれか１の項に記載の演算装置。
【請求項８】
前記演算対象データは、
当該演算装置の外部に配置された外部メモリに記憶され、
当該演算装置は、
前記外部メモリと前記データ記憶部との間での前記演算対象データの転送を制御する転送制御部、
をさらに備え、
前記キュー制御部は、
前記データ記憶部の使用権を付与した前記パケットを対応する前記処理演算部に出力する前に、該パケットに対応する前記演算対象データの前記外部メモリから使用権を付与した該データ記憶部への転送を、前記転送制御部に指示し、
前記転送制御部の制御によって該演算対象データの該データ記憶部への転送が完了した後に、該データ記憶部の使用権を付与した前記パケットを対応する前記処理演算部に出力し、
前記再エントリ判定部は、
前記パケットまたは前記演算処理後のパケットに付与された前記データ記憶部の使用権を開放する前に、該パケットに対応する前記演算対象データの該データ記憶部から前記外部メモリへの転送を、前記転送制御部に指示し、
前記転送制御部の制御によって該演算対象データの該外部メモリへの転送が完了した後に、前記パケットに付与された該データ記憶部の使用権を開放する、
ことを特徴とする請求項３から請求項６のいずれか１の項に記載の演算装置。
【請求項９】
前記キュー制御部は、
前記パケットに付与した前記データ記憶部の使用権の情報を、前記アドレス変換部に出力し、
前記クロスバスイッチによって、該パケットに対する演算処理を実行する前記処理演算部と、対応する前記データ記憶部とが接続された後に、該パケットを該処理演算部に出力する、
ことを特徴とする請求項３から請求項８のいずれか１の項に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。
【背景技術】
【０００２】
従来から、プログラムに応じた演算処理を実行する複数のプロセッサを備えた、いわゆる、マルチプロセッサといわれる構成の演算装置がある。このような従来の演算装置では、それぞれのプロセッサが、外部ブロックから入力された演算対象のデータを含むパケットに応じたそれぞれの演算処理を、複数のプロセッサで共有されるメモリにそれぞれアクセスしながら、すなわち、演算処理で使用するデータをメモリから読み出したり、メモリに書き込んだりしながら実行する。
【０００３】
このような従来の演算装置において、プロセッサとメモリとを対応付けるための構成が、特許文献１に開示されている。特許文献１には、プロセッサとメモリとの物理的な接続を切り替えるクロスバスイッチを用いて、それぞれのプロセッサに対応するメモリを変更する技術が開示されている。この特許文献１に開示された技術によって、全てのメモリを全てのプロセッサで共有する構成を実現している。
【０００４】
そして、特許文献１に開示された技術を適用した演算装置では、それぞれのプロセッサが演算処理を実行する際に使用することができるメモリの構成を表した構成情報を事前に設定しておく、つまり、それぞれのプロセッサに対して、いくつかのメモリへのアクセスを事前に許可しておく。言い換えれば、それぞれのプロセッサ毎に、アクセスすることができるメモリを、構成情報によって予め定めたいくつかのメモリに事前に限定しておく。これにより、従来の演算装置では、それぞれの演算処理において、異なるプロセッサが同じメモリにアクセスしてしまう、すなわち、同じメモリに対するアクセスが競合してしまうことを回避している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４２８８４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示された技術を適用した場合であっても、特定のメモリへのアクセスが許可されたプロセッサの数が増加すると、同じメモリにアクセスしてしまう頻度、つまり、同じメモリに対するアクセスが競合してしまう頻度が高くなってしまう。このため、例えば、それぞれのプロセッサに対してアクセスを許可するメモリの数を少なくするなど、複数のプロセッサから同じメモリに対するアクセスが競合しないような対応が必要となるが、１つのメモリに対するアクセスが複数のプロセッサに許可されている限りは、同じメモリに対するアクセスの競合が少なからず発生してしまう。つまり、プロセッサとメモリとが１対１で対応した構成でない限りは、複数のプロセッサからの同じメモリに対するアクセスの競合が少なからず発生してしまう。
【０００７】
また、特許文献１に開示された技術では、例えば、演算装置内に備えたプロセッサの数に応じて構成情報の書き換えを行うなど、アクセスを許可するメモリの設定を事前に変更しておく必要もある。また、例えば、それぞれのプロセッサにアクセスを許可するメモリを変更する際にも、構成情報の書き換えが必要となる。
【０００８】
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサで複数のメモリを共有する演算装置において、複数のプロセッサからの同じメモリに対するアクセスの競合が発生することなく、それぞれのプロセッサ間で容易にメモリを共有することができる演算装置を提供することを目的としている。
【課題を解決するための手段】
【０００９】
上記の課題を解決するため、本発明の演算装置は、要求する演算処理の内容を表す情報が含まれた複数のパケットが入力され、該入力されたパケットに対する演算処理を実行する演算装置であって、前記パケットにおいて要求された演算処理の内容に応じた演算処理を行う処理機能を有し、次に実行する演算処理の内容を表す情報を含む演算処理後のパケットを出力する複数の処理演算部と、前記処理演算部が前記パケットに対する演算処理を実行する対象の演算対象データ、または前記パケットに対する演算処理を実行した結果のデータを格納する、それぞれの前記処理演算部で共有して使用される複数のデータ記憶部と、前記パケットを順次格納するパケットキューを具備し、該パケットキューに格納されたそれぞれの前記パケットに対して前記データ記憶部の使用権を付与して、いずれか１つの前記処理演算部に出力するパケット管理部と、前記パケットに付与された前記データ記憶部の使用権の情報に基づいて、該パケットに対する演算処理を実行する前記処理演算部と、該パケットに対する演算処理を実行する際に使用する前記データ記憶部との接続を切り替える接続切り替え部と、を備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、複数のプロセッサで複数のメモリを共有する演算装置において、複数のプロセッサからの同じメモリに対するアクセスの競合が発生することなく、それぞれのプロセッサ間で容易にメモリを共有することができる演算装置を提供することができるという効果が得られる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図２】本第１の実施形態の演算装置における演算処理の処理手順を示したフローチャートである。
【図３】本第１の実施形態の演算装置に備えたキュー制御部がパケットを格納する処理手順を示したフローチャートである。
【図４】本第１の実施形態の演算装置に備えたキュー制御部がワークメモリの使用権を付与する処理手順を示したフローチャートである。
【図５】本第１の実施形態の演算装置に備えたキュー制御部がキューに格納されているパケットの出力を管理する処理手順を示したフローチャートである。
【図６】本第１の実施形態の演算装置に備えたプロセッサが演算処理を実行する処理手順を示したフローチャートである。
【図７】本第１の実施形態の演算装置に備えた再エントリ判定部がパケットを再度格納する処理手順を示したフローチャートである。
【図８】本第１の実施形態の演算装置の動作におけるそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【図９】本発明の第２の実施形態の演算装置の動作におけるそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【図１０】本発明の第３の実施形態の演算装置の動作におけるそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【図１１】本発明の第４の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図１２】本発明の第５の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図１３】本第５の実施形態の演算装置に備えたキュー制御部がワークメモリの使用権を付与する処理手順を示したフローチャートである。
【図１４】本第５の実施形態の演算装置に備えたキュー制御部がキューに格納されているパケットの出力を管理する処理手順を示したフローチャートである。
【図１５】本第５の実施形態の演算装置に備えたプロセッサが演算処理を実行する処理手順を示したフローチャートである。
【図１６】本第５の実施形態の演算装置に備えた再エントリ判定部がパケットを再度格納する処理手順を示したフローチャートである。
【図１７】本第５の実施形態の演算装置の動作におけるそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【図１８】本発明の第６の実施形態の演算装置の動作におけるそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【図１９】本第６の実施形態の演算装置の動作において優先度が異なる場合のそれぞれの処理段階でのキューおよびワークメモリ内のパケットの状態の一例を示した図である。
【発明を実施するための形態】
【００１２】
＜第１の実施形態＞
以下、本発明の第１の実施形態について、図面を参照して説明する。図１は、本第１の実施形態における演算装置の概略構成の一例を示したブロック図である。図１に示した演算装置１０は、パケット管理部２０と、３つのプロセッサ３１〜プロセッサ３３と、３つのローカルメモリ３１１〜ローカルメモリ３３１と、接続切り替え部４０と、ワークメモリ５０と、を備えている。なお、図１には、演算装置１０に接続される外部ブロック１００も併せて示している。
【００１３】
なお、以下の説明においては、３つのプロセッサ３１〜プロセッサ３３のそれぞれを区別せずに表す場合には、「プロセッサ３０」という。また、以下の説明においては、３つのローカルメモリ３１１〜ローカルメモリ３３１のそれぞれを区別せずに表す場合には、「ローカルメモリ３００」という。
【００１４】
外部ブロック１００は、演算装置１０に対して要求する演算処理の内容を表すパケットを、演算装置１０に出力する。なお、外部ブロック１００が演算装置１０に出力するパケットは、プロセッサ３０による演算処理の対象となる「演算対象データ」、パケットに対する演算処理を実行させるプロセッサ３０を定める「プロセッサ番号」、プロセッサ３０によるそれぞれの演算処理において使用するワークメモリ５０内の記憶領域（以下、「ワーク領域」という）を定める「ワークメモリ番号」、およびそれぞれの演算処理における振る舞いとローカルメモリ３００内に保持された処理コードとを１対１に対応付ける「処理番号」を含む情報である。また、パケットには、演算装置１０内でのパケットに対する演算処理の状態を表すために使用される「パケット状態情報」を含んでいる。このパケット状態情報は、プロセッサ３０によって演算処理が１度も実行されていないパケットであることを示す「未処理」、次のプロセッサ３０に演算処理を引き継ぐパケットであることを示す「処理継続」、またはプロセッサ３０によってパケットに対する演算処理が完了したことを示す、すなわち、演算装置１０による一連の演算処理が完了したパケットであることを示す「処理完了」のいずれかの状態を示す情報である。また、処理コードには、演算対象データに対する演算内容、パケット状態情報およびプロセッサ番号の更新内容が記述されており、演算装置１０に備えたそれぞれのプロセッサ３０は、処理コードに従って、演算対象データに対する演算や、パケット状態情報およびプロセッサ番号の更新を行う。
【００１５】
演算装置１０は、外部ブロック１００から出力された複数のパケットの演算処理を、３つのプロセッサ３１〜プロセッサ３３のそれぞれで分担して実行する、分散並列処理型の演算装置である。
【００１６】
パケット管理部２０は、外部ブロック１００から入力された複数のパケットのそれぞれを一旦格納し、格納したそれぞれのパケットを、プロセッサ３０のいずれか１つに割り当てる。これにより、演算装置１０は、外部ブロック１００から要求された複数の演算処理を並列に実行することができる。パケット管理部２０は、格納したそれぞれのパケットに含まれるプロセッサ番号に基づいて、プロセッサ番号で定められたプロセッサ３０に、それぞれのパケットを割り当てる。このとき、パケット管理部２０は、格納したそれぞれのパケットをいずれか１つのプロセッサ３０に割り当てる際、それぞれのパケットに含まれるワークメモリ番号で定められたワーク領域が使用できるか否かの状況と、そのパケットに含まれるプロセッサ番号で定められたプロセッサ３０が別の演算処理を実行中であるか否かの状況とを確認する。つまり、パケット管理部２０は、ワークメモリ５０内のそれぞれのワーク領域の使用状況と、プロセッサ３０の使用状況とを確認する。そして、パケット管理部２０は、プロセッサ３０がワーク領域を使用することができる状況であり、プロセッサ３０がパケットを受け付けることができる状況であるパケットにワーク領域の使用権を付与して、対応するプロセッサ３０に出力する。
【００１７】
プロセッサ３１〜プロセッサ３３のそれぞれは、パケット管理部２０によって割り当てられた、つまり、パケット管理部２０から入力されたパケットに含まれる演算対象データに対する演算処理を、対応するローカルメモリ３００に保持された処理コードに基づいて実行する処理演算部である。なお、それぞれのプロセッサ３０がパケットに対する演算処理を実行する際には、まず、入力されたパケットに含まれるワークメモリ番号で定められたワークメモリ５０内のワーク領域、すなわち、使用権が付与されたワーク領域と自身との接続の切り替えを、接続切り替え部４０に行わせる。そして、自身と使用権が付与されたワーク領域とが接続された後に、ワーク領域を使用して、演算対象データに対する演算処理を実行する。
【００１８】
そして、プロセッサ３０のそれぞれは、今回入力されたパケットの演算対象データに対する演算処理が完了したパケットを、パケット管理部２０に出力する。このとき、プロセッサ３０のそれぞれは、演算装置１０による一連の演算処理が完了したパケットをパケット管理部２０に出力する際には、パケット状態情報に「処理完了」を示す情報を設定したパケットを、パケット管理部２０に出力する。
【００１９】
また、プロセッサ３０のそれぞれは、自身が演算処理を実行した後に引き続き別のプロセッサ３０または自身に次の演算処理を実行させるパケットをパケット管理部２０に出力する際には、パケット状態情報に「処理継続」を示す情報を設定したパケットを、次のパケットとしてパケット管理部２０に出力する。このとき、プロセッサ３０のそれぞれがパケット管理部２０に出力する次のパケットには、外部ブロック１００が演算装置１０に出力するパケットと同様に、「演算対象データ」、「プロセッサ番号」、「ワークメモリ番号」、および「処理番号」が含まれている。なお、以下の説明においては、プロセッサ３０のそれぞれがパケット管理部２０に出力する次のパケットも、パケットという。
【００２０】
また、プロセッサ３０のそれぞれは、パケット管理部２０から入力された、別のプロセッサ３０または自身が前回演算処理を実行したパケットに対する次の演算処理を実行した後に、さらに別のプロセッサ３０または自身に引き続き次の演算処理を実行させるパケットをパケット管理部２０に出力する際には、パケット状態情報に「処理継続」を示す情報を設定したパケットを、次のパケットとして再度、パケット管理部２０に出力する。
【００２１】
それぞれのプロセッサ３０におけるパケットに対する演算処理は、パケット状態情報に「処理完了」または「処理継続」が含まれているパケットを、パケット管理部２０に出力することによって完了する。つまり、パケット管理部にパケットを出力したプロセッサ３０は、次のパケットを受け付けられる状態となる。
【００２２】
ローカルメモリ３１１〜ローカルメモリ３３１のそれぞれは、対応するプロセッサ３０の振る舞いを定める処理コードを保持している。ローカルメモリ３００は、対応するプロセッサ３０がパケットに含まれる演算対象データに対する演算処理を実行する際のそれぞれの処理毎に、パケットに含まれる処理番号に対応した処理コードが読み出される。図１に示した演算装置１０の構成では、ローカルメモリ３１１がプロセッサ３１に、ローカルメモリ３２１がプロセッサ３２に、ローカルメモリ３３１がプロセッサ３３に、それぞれ対応している。
【００２３】
接続切り替え部４０は、それぞれのプロセッサ３０と、プロセッサ３０のそれぞれが演算対象データに対する演算処理を実行する際に使用するワークメモリ５０内のワーク領域とが１対１で対応するように、プロセッサ３０とワーク領域との接続を切り替える。また、接続切り替え部４０は、プロセッサ３０がアクセスするワーク領域のアドレスと、実際にアクセスされるアドレスとの切り替えを行う。これにより、それぞれのプロセッサ３０は、いずれのワーク領域を使用して演算対象データに対する演算処理を実行する場合でも、ワーク領域のアドレスを考慮せずに（意識せずに）、演算処理を実行することができる。
【００２４】
ワークメモリ５０は、それぞれのパケットに含まれる演算対象データや、プロセッサ３０のそれぞれが演算対象データに対する演算処理を実行している途中で生成したデータなどを一時的に記憶する複数のワーク領域を備えた、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリ、いわゆる、キャッシュメモリである。図１に示した演算装置１０の構成では、５つのワーク領域（ワーク領域５０１〜ワーク領域５０５）を備えたワークメモリ５０を示している。なお、以下の説明においては、５つのワーク領域５０１〜ワーク領域５０５のそれぞれを区別せずに表す場合には、「ワーク領域５００」という。
【００２５】
このような構成によって、演算装置１０は、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して実行する。ここで、演算装置１０の構成、特に、パケット管理部２０および接続切り替え部４０について、さらに詳細に説明する。
【００２６】
まず、パケット管理部２０について、さらに詳細に説明する。パケット管理部２０は、上述したように、外部ブロック１００から入力された複数のパケットのそれぞれを一旦格納し、格納したそれぞれのパケットを、いずれか１つのプロセッサ３０に割り当てる。パケット管理部２０は、パケットキュー２１０と、キュー制御部２２０と、再エントリ判定部２３０と、ワークメモリ使用状況管理レジスタ２４０と、プロセッサ使用状況管理レジスタ２５０と、を備えている。
【００２７】
パケットキュー２１０は、キュー制御部２２０からの制御に応じて、外部ブロック１００から入力された複数のパケット、および再エントリ判定部２３０から入力された、引き続き演算処理を実行するパケットを順次格納する、パケットの待ち行列のメモリである。パケットキュー２１０には、外部ブロック１００および再エントリ判定部２３０から入力されたそれぞれのパケットが、入力された順番で順次格納される。また、パケットキュー２１０は、キュー制御部２２０からの制御に応じて、格納しているパケットをプロセッサ３０のいずれか１つに出力する。なお、パケットキュー２１０に格納されたそれぞれのパケットは、基本的に、格納された順番で出力されるが、演算装置１０では、キュー制御部２２０が、パケットキュー２１０に格納されたパケットの出力順番を制御する。
【００２８】
図１には、パケットを格納する５つの格納領域（格納領域２１１〜格納領域２１５）を備えたパケットキュー２１０の構成を示している。なお、図１において、パケットキュー２１０内のそれぞれの格納領域内に示した“＃（シャープ）”に続く数字は、パケットがパケットキュー２１０に格納される順番を表している。そして、図１においては、パケットキュー２１０に最初に入力されたパケット＃１、つまり、先頭のパケットは格納領域２１１に格納され、パケットキュー２１０にパケットが入力される毎に、格納領域２１２、格納領域２１３、格納領域２１４に順次格納され、パケットキュー２１０に最後に入力されたパケット＃５、つまり、最後尾のパケットが格納領域２１５に格納された状態を示している。
【００２９】
キュー制御部２２０は、外部ブロック１００からの演算処理の要求を受け付け、受け付けた演算処理の要求に対応するパケットのパケットキュー２１０への格納（エントリ）を制御する。キュー制御部２２０は、外部ブロック１００からパケットの出力許可要求が入力されると、すなわち、外部ブロック１００から演算処理を要求する信号が入力されると、パケットキュー２１０に備えた５つの格納領域の空き状況を確認し、パケットキュー２１０内の格納領域に空きがある場合に、パケットの出力を許可することを通知する許可信号を外部ブロック１００に出力する。また、キュー制御部２２０は、パケットキュー２１０内の格納領域に空きがない場合には、パケットの出力を許可することができないことを通知する不許可信号を外部ブロック１００に出力する。これにより、外部ブロック１００は、許可された演算処理の要求に対応するパケットを、パケットキュー２１０に出力する。
【００３０】
また、キュー制御部２２０は、プロセッサ３０とワークメモリ５０とのそれぞれの使用状況に応じて、パケットキュー２１０に格納されたパケットのプロセッサ３０への出力を制御する。このとき、キュー制御部２２０は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるワークメモリ番号を順次確認し、ワークメモリ５０内のそれぞれのワーク領域５００の使用状況に応じて、それぞれのパケットにワーク領域５００の使用権を付与する。また、キュー制御部２２０は、ワーク領域５００の使用権を付与したそれぞれのパケットに含まれるプロセッサ番号を順次確認し、パケットに対する演算処理を実行するプロセッサ３０の使用状況に応じて、プロセッサ３０に出力するパケットを選択する。そして、キュー制御部２２０は、プロセッサ３０に出力するパケットとして選択したパケットを、パケットキュー２１０から対応するプロセッサ３０に出力させる。
【００３１】
より具体的には、まず、キュー制御部２２０は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるワークメモリ番号で定められたワークメモリ５０内のワーク領域５００の使用状況を、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報から確認する。このワークメモリ管理レジスタの情報を確認した結果、ワークメモリ番号で定められたワーク領域５００を使用することができる状況である場合、つまり、ワークメモリ管理レジスタの情報が「未使用」である場合、キュー制御部２２０は、ワーク領域５００の使用権を付与する。そして、キュー制御部２２０は、ワーク領域５００の使用権を付与したパケットに含まれるワークメモリ番号に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を「使用中」に変更する。
【００３２】
なお、キュー制御部２２０がパケットに対してワーク領域５００の使用権を付与する際には、パケットキュー２１０に格納されたワーク領域５００の使用権が付与されていないパケットの内、先頭に近いパケット（図１においては、例えば、パケット＃１）から順にワークメモリ番号を確認して、ワーク領域５００の使用権を付与する。
【００３３】
続いて、キュー制御部２２０は、ワーク領域５００の使用権が付与されたそれぞれのパケットに含まれるプロセッサ番号で定められたプロセッサ３０の使用状況を、プロセッサ使用状況管理レジスタ２５０内の対応するプロセッサ管理レジスタの情報から確認する。このプロセッサ管理レジスタの情報を確認した結果、プロセッサ番号で定められたプロセッサ３０がパケットを受け付けることができる状況である場合、つまり、プロセッサ管理レジスタの情報が「未使用」である場合、キュー制御部２２０は、このパケットはプロセッサ３０に出力することができるパケットであると判断し、このパケットを次にプロセッサ３０に出力するパケットとして選択する。そして、キュー制御部２２０は、選択したパケットに含まれるプロセッサ番号で定められたプロセッサ３０に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報「使用中」に変更する。
【００３４】
なお、キュー制御部２２０が次にプロセッサ３０に出力するパケットを選択する際には、パケットキュー２１０に格納されたワーク領域５００の使用権が付与されているパケットの内、先頭に近いパケット（図１においては、例えば、パケット＃１）から順にプロセッサ番号を確認して、対応するプロセッサ３０が他のパケットに対する演算処理を実行中ではないパケットを選択する。
【００３５】
その後、キュー制御部２２０は、選択したパケットに含まれるプロセッサ番号で定められたプロセッサ３０へのパケットの出力を、パケットキュー２１０に指示する。これにより、パケットキュー２１０が、指示されたパケットを対応するプロセッサ３０に出力し、プロセッサ３０は、入力されたパケットの演算対象データに対する演算処理を実行する。
【００３６】
再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットの出力先を制御する。このとき、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報に基づいて、演算処理後のパケットの出力先を切り替える。そして、再エントリ判定部２３０は、演算処理後のパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報と、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報とを変更する。
【００３７】
より具体的には、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理完了」を示している場合には、演算処理後のパケットを外部ブロック１００に出力する。そして、再エントリ判定部２３０は、外部ブロック１００に出力した演算処理後のパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を「未使用」に変更し、さらに、このパケットに対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を「未使用」に変更する。これにより、キュー制御部２２０は、パケットキュー２１０に格納された次のパケットのプロセッサ３０への割り当てを行う、つまり、パケットの分配を行うことができる。
【００３８】
また、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」を示している場合には、演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）する。そして、再エントリ判定部２３０は、パケットキュー２１０に再度格納（エントリ）した演算処理後のパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を「未使用」に変更する。これにより、キュー制御部２２０が、パケットキュー２１０に格納された演算処理後のパケットのプロセッサ３０への割り当てを再度行い、演算処理後のパケットに対する演算処理を継続することができる。
【００３９】
ワークメモリ使用状況管理レジスタ２４０は、演算装置１０に備えたワークメモリ５０内のワーク領域５０１〜ワーク領域５０５のそれぞれに対応し、対応するワーク領域５００の使用状況を表す情報を保持している。図１に示した演算装置１０の構成では、５つのワーク領域（ワーク領域５０１〜ワーク領域５０５）に対応した５つのワークメモリ管理レジスタ（ワークメモリ管理レジスタ２４１〜ワークメモリ管理レジスタ２４５）を備えたワークメモリ使用状況管理レジスタ２４０を示している。
【００４０】
より具体的には、ワークメモリ管理レジスタ２４１がワーク領域５０１の使用状況を表す情報を保持する。また、ワークメモリ管理レジスタ２４２がワーク領域５０２の使用状況を表す情報を保持し、ワークメモリ管理レジスタ２４３がワーク領域５０３の使用状況を表す情報を保持し、ワークメモリ管理レジスタ２４４がワーク領域５０４の使用状況を表す情報を保持し、ワークメモリ管理レジスタ２４５がワーク領域５０５の使用状況を表す情報を保持する。そして、それぞれのワークメモリ管理レジスタは、対応するワーク領域５００がいずれのプロセッサ３０にも使用されていない場合に「未使用」であることを表す情報を保持し、対応するワーク領域５００がいずれかのプロセッサ３０に使用されている場合に「使用中」であることを表す情報を保持する。
【００４１】
キュー制御部２２０および再エントリ判定部２３０は、ワークメモリ使用状況管理レジスタ２４０内のそれぞれのワークメモリ管理レジスタを常時確認することによって、演算装置１０に備えたワークメモリ５０内のそれぞれのワーク領域５００の使用状況を常時監視する。ワークメモリ使用状況管理レジスタ２４０内のそれぞれのワークメモリ管理レジスタは、キュー制御部２２０および再エントリ判定部２３０によって読み書きすることができる。より具体的には、キュー制御部２２０は、パケットキュー２１０に格納されたそれぞれのパケットに対してワーク領域５００の使用権を付与する際に、パケットに使用権を付与するワーク領域５００に対応するワークメモリ管理レジスタの情報を「使用中」に変更する。また、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットに付与されたワーク領域５００の使用権を開放する際に、パケットの使用権を開放するワーク領域５００に対応するワークメモリ管理レジスタの情報を「未使用」に変更する。
【００４２】
なお、それぞれのワークメモリ管理レジスタには、パケットに対して演算処理を実行するプロセッサ３０を表す値を書き込むことによって、「使用中」であることを表す。例えば、プロセッサ３２が演算処理を実行するパケットに、ワーク領域５０４の使用権を付与する場合、ワーク領域５０４に対応するワークメモリ管理レジスタ２４４に、プロセッサ３２を表す値を書き込む。これにより、ワークメモリ管理レジスタ２４４は、ワーク領域５０４がプロセッサ３２によって「使用中」であることを表すことができる。また、それぞれのワークメモリ管理レジスタに、いずれのプロセッサ３０を表さない値（例えば、「０」）を書き込むことによって、「未使用」であることを表す。
【００４３】
プロセッサ使用状況管理レジスタ２５０は、演算装置１０に備えたプロセッサ３０のそれぞれに対応し、対応するプロセッサ３０の使用状況を表す情報を保持している。図１に示した演算装置１０の構成では、３つのプロセッサ３０（プロセッサ３１〜プロセッサ３３）に対応した３つのプロセッサ管理レジスタ（プロセッサ管理レジスタ２５１〜プロセッサ管理レジスタ２５３）を備えたプロセッサ使用状況管理レジスタ２５０を示している。
【００４４】
より具体的には、プロセッサ管理レジスタ２５１がプロセッサ３１の使用状況を表す情報を保持する。また、プロセッサ管理レジスタ２５２がプロセッサ３２の使用状況を表す情報を保持し、プロセッサ管理レジスタ２５３がプロセッサ３３の使用状況を表す情報を保持する。そして、それぞれのプロセッサ管理レジスタは、対応するプロセッサ３０がいずれのパケットに対する演算処理を実行していない場合に「未使用」であることを表す情報を保持し、対応するプロセッサ３０がいずれかのパケットに対する演算処理を実行している場合に「使用中」であることを表す情報を保持する。
【００４５】
キュー制御部２２０および再エントリ判定部２３０は、プロセッサ使用状況管理レジスタ２５０内のそれぞれのプロセッサ管理レジスタを常時確認することによって、演算装置１０に備えたそれぞれのプロセッサ３０の使用状況を常時監視する。プロセッサ使用状況管理レジスタ２５０内のそれぞれのプロセッサ管理レジスタは、キュー制御部２２０および再エントリ判定部２３０によって読み書きすることができる。より具体的には、キュー制御部２２０は、選択したパケットのプロセッサ３０への出力をパケットキュー２１０に指示する際に、出力するパケットに含まれるプロセッサ番号で定められたプロセッサ３０に対応するプロセッサ管理レジスタの情報「使用中」に変更する。また、再エントリ判定部２３０は、プロセッサ３０から演算処理後のパケットが入力された際に、パケットに対する演算処理を実行したプロセッサ３０に対応するプロセッサ管理レジスタの情報を「未使用」に変更する。
【００４６】
なお、プロセッサ管理レジスタに、プロセッサ３０が演算処理を実行する際に使用するワーク領域５００を表す情報を含ませることもできる。例えば、プロセッサ３２が演算処理を実行する際にワーク領域５０４を使用する場合、プロセッサ３２に対応するプロセッサ管理レジスタ２５２に、ワーク領域５０４を表す値を書き込む。これにより、プロセッサ管理レジスタ２５２は、プロセッサ３２がワーク領域５０４を使用した演算処理の実行するために「使用中」であることを表すことができる。
【００４７】
このような構成によって、パケット管理部２０は、外部ブロック１００から入力された複数のパケット、およびプロセッサ３０から入力された演算処理後のパケットのプロセッサ３０への出力、または外部ブロック１００への出力を、全てのプロセッサ３０および全てのワークメモリ５０の「使用中」または「未使用」の２つの状態に応じて管理する。
【００４８】
次に、接続切り替え部４０について、さらに詳細に説明する。接続切り替え部４０は、上述したように、それぞれのプロセッサ３０と、プロセッサ３０のそれぞれが演算対象データに対する演算処理を実行する際に使用するワークメモリ５０内のワーク領域５００とが１対１で対応するように、プロセッサ３０とワーク領域５００との接続を切り替える。接続切り替え部４０は、アドレス変換部４０１〜アドレス変換部４０３と、クロスバスイッチ４５０と、を備えている。
【００４９】
アドレス変換部４０１〜アドレス変換部４０３のそれぞれは、演算装置１０に備えた３つのプロセッサ３１〜プロセッサ３３のそれぞれに対応し、対応するプロセッサ３０がパケットに含まれる演算対象データに対する演算処理を実行する際に使用するワーク領域５００を指定するアドレスと、実際に使用されるワークメモリ５０内のワーク領域５００のアドレスとを１対１に対応付ける。なお、以下の説明においては、３つのアドレス変換部４０１〜アドレス変換部４０３のそれぞれを区別せずに表す場合には、「アドレス変換部４００」という。
【００５０】
より具体的には、それぞれのアドレス変換部４００は、ワークメモリ番号とワークメモリ５０内のワーク領域５００とを１対１に対応させたテーブルを備えている。そして、それぞれのアドレス変換部４００は、対応するプロセッサ３０が演算処理を実行するパケットに含まれるワークメモリ番号に対応するテーブルを参照して、対応するプロセッサ３０が使用するワーク領域５００を特定する。さらに、それぞれのアドレス変換部４００は、特定したワーク領域５００の情報に基づいて、対応するプロセッサ３０がワーク領域５００にアクセスする際の論理アドレスを、実際にワークメモリ５０内のワーク領域５００をアクセスする際の物理アドレスに変換する。これにより、それぞれのプロセッサ３０は、パケットに対する演算処理を実行する際に使用するワーク領域５００の物理アドレスを考慮することなく（意識することなく）、いずれのワーク領域５００を使用する場合でも、同様に演算処理を実行することができる。つまり、それぞれのプロセッサ３０は、いずれのワーク領域５００を使用する場合でも、同一の論理アドレスでアクセスすることができる。
【００５１】
例えば、図１に示した演算装置１０の構成において、ワークメモリ５０内のワーク領域５０１に物理アドレス０ｘ１０００〜０ｘ１ＦＦＦが、ワーク領域５０２に物理アドレス０ｘ２０００〜０ｘ２ＦＦＦが、ワーク領域５０３に物理アドレス０ｘ３０００〜０ｘ３ＦＦＦが、ワーク領域５０４に物理アドレス０ｘ４０００〜０ｘ４ＦＦＦが、ワーク領域５０５に物理アドレス０ｘ５０００〜０ｘ５ＦＦＦが、それぞれ割り当てられている場合を考える。このとき、例えば、アドレス変換部４０１が、プロセッサ３１がワーク領域５００にアクセスする際の論理アドレス０ｘ００００〜０ｘ０ＦＦＦを、ワーク領域５０２の物理アドレス０ｘ２０００〜０ｘ２ＦＦＦに変換することによって、プロセッサ３１は、ワークメモリ５０内のワーク領域５０２に実際にアクセスすることができる。
【００５２】
このように、それぞれのアドレス変換部４００が、対応するプロセッサ３０がワーク領域５００にアクセスする際の論理アドレスを、実際のワーク領域５００の物理アドレスに変換することによって、それぞれのプロセッサ３０は、いずれのワーク領域５００に対してアクセスする場合でも、同一の論理アドレス０ｘ００００〜０ｘ０ＦＦＦでアクセスすることができる。
【００５３】
また、それぞれのアドレス変換部４００は、対応するプロセッサ３０とワークメモリ５０内のワーク領域５００とを１対１に接続させるクロスバスイッチ４５０の制御値をまとめたテーブルを備えている。そして、それぞれのアドレス変換部４００は、対応するプロセッサ３０が演算処理を実行するパケットに含まれるワークメモリ番号に基づいて、制御値をまとめたテーブルを参照してクロスバスイッチ４５０の制御値を決定し、決定した制御値をクロスバスイッチ４５０に出力する。
【００５４】
クロスバスイッチ４５０は、演算装置１０に備えた３つのプロセッサ３１〜プロセッサ３３のそれぞれがワーク領域５００にアクセスする際の信号線と、プロセッサ３１〜プロセッサ３３のそれぞれがパケットに対する演算処理を実行する際に使用するワークメモリ５０内の５つのワーク領域５０１〜ワーク領域５０５のそれぞれの信号線とを１対１に接続するスイッチである。クロスバスイッチ４５０は、アドレス変換部４００のそれぞれから入力された制御値に応じて、それぞれのプロセッサ３０の信号線とそれぞれのワーク領域５００の信号線との接続を切り替える。
【００５５】
このような構成によって、接続切り替え部４０は、それぞれのプロセッサ３０と、プロセッサ３０のそれぞれが演算対象データに対する演算処理を実行する際に使用するワークメモリ５０内のワーク領域５００とを１対１で対応させる。
【００５６】
次に、演算装置１０による演算処理の処理手順について説明する。図２は、本第１の実施形態の演算装置１０における演算処理の処理手順を示したフローチャートである。図２には、演算装置１０の全体の処理手順を示している。図２の説明においては、演算装置１０が実行する演算処理の全体の処理の流れを説明し、それぞれの詳細な処理手順は、後述する。
【００５７】
演算装置１０は、外部ブロック１００からパケットの出力許可要求が入力されると、すなわち、外部ブロック１００から演算処理の要求が入力されると、入力された演算処理の要求に対応するパケットに対する演算処理を開始する。まず、ステップＳ１において、パケット管理部２０内のキュー制御部２２０は、外部ブロック１００からの演算処理の要求を受け付け、演算処理の要求に対応するパケットを一旦パケットキュー２１０に格納（エントリ）するための初エントリ処理を行う。
【００５８】
続いて、ステップＳ２において、キュー制御部２２０は、パケットキュー２１０に格納したパケットに対してワークメモリ５０内のワーク領域５００の使用権を付与するための使用権付与処理を行う。続いて、ステップＳ３において、キュー制御部２２０は、パケットキュー２１０に格納されているワーク領域５００の使用権が付与されたパケットを対応するプロセッサ３０に出力するためのキュー管理処理を行う。
【００５９】
続いて、ステップＳ４において、パケット管理部２０からパケットが入力されたプロセッサ３０は、入力されたパケットに対する演算処理を実行する。続いて、ステップＳ５において、パケット管理部２０内の再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報に応じて出力先を判定する再エントリ判定処理を行う。
【００６０】
続いて、ステップＳ６において、キュー制御部２２０は、外部ブロック１００から入力された全てのパケットに対する演算処理が完了したか否かを確認する。このステップＳ６の確認によって、全てのパケットに対する演算処理が完了していない場合（ステップＳ６の“ＮＯ”）には、ステップＳ２に戻って、他のパケットに対する処理を継続する。また、ステップＳ６の確認によって、全てのパケットに対する演算処理が完了した場合（ステップＳ６の“ＹＥＳ”）には、演算装置１０における処理を完了する。
【００６１】
なお、図２に示した演算装置１０における全体の処理の流れのフローチャートでは、それぞれの処理が順次行われるように示されているが、演算装置１０に備えたそれぞれの構成要素は、それぞれの処理を常に行っている。すなわち、図２のフローチャートに示した演算装置１０におけるそれぞれの処理は、平行して行われる処理である。
【００６２】
次に、演算装置１０に備えたパケット管理部２０内のキュー制御部２２０による初エントリ処理（図２に示したステップＳ１）の処理手順について説明する。図３は、本第１の実施形態の演算装置１０に備えたキュー制御部２２０がパケットを格納する初エントリ処理の処理手順を示したフローチャートである。
【００６３】
キュー制御部２２０は、初エントリ処理を開始すると、まず、ステップＳ１１において、外部ブロック１００からパケットの出力許可要求があるか否か、すなわち、外部ブロック１００からの演算処理の要求があるか否かを確認する。ステップＳ１１において、外部ブロック１００からパケットの出力許可要求がない場合（ステップＳ１１の“ＮＯ”）には、キュー制御部２２０は、初エントリ処理を完了する。
【００６４】
また、ステップＳ１１において、外部ブロック１００からパケットの出力許可要求がある場合（ステップＳ１１の“ＹＥＳ”）には、ステップＳ１２において、キュー制御部２２０は、すでにパケットキュー２１０に格納済みのパケットの数（以下、「エントリ済みパケット数」という）が、パケットキュー２１０に格納することができる予め定めた最大のパケットの数（以下、「最大エントリ数」という）よりも少ないか否かを確認する。なお、最大エントリ数は、演算装置１０に備えたパケットキュー２１０内の格納領域の数と、演算装置１０に備えたプロセッサ３０の数とに基づいて、予め定められる値である。
【００６５】
ステップＳ１２において、エントリ済みパケット数が最大エントリ数以上（エントリ済みパケット数≧最大エントリ数）である場合（ステップＳ１２の“ＮＯ”）には、ステップＳ１３において、キュー制御部２２０は、パケットの出力を許可することができないことを通知する不許可信号を外部ブロック１００に出力し、初エントリ処理を完了する。
【００６６】
また、ステップＳ１２において、エントリ済みパケット数が最大エントリ数よりも少ない（エントリ済みパケット数＜最大エントリ数）場合（ステップＳ１２の“ＹＥＳ”）には、ステップＳ１４において、キュー制御部２２０は、パケットの出力を許可することを通知する許可信号を外部ブロック１００に出力し、外部ブロック１００からのパケットを受け付ける。そして、キュー制御部２２０は、外部ブロック１００から今回入力されたパケットのパケット状態情報に「未処理」を示す情報を設定する。
【００６７】
続いて、ステップＳ１５において、キュー制御部２２０は、パケット状態情報に「未処理」を示す情報を設定した、外部ブロック１００から今回入力されたパケットを、パケットキュー２１０内ですでにパケットが格納されている格納領域の次の格納領域、すなわち、現在の最後尾の格納領域に格納（エントリ）し、初エントリ処理を完了する。
【００６８】
このような処理によって、キュー制御部２２０は、外部ブロック１００から入力された複数のパケットのそれぞれを、一旦パケットキュー２１０に格納（エントリ）する。なお、キュー制御部２２０は、初エントリ処理を常時行っている。すなわち、キュー制御部２２０は、演算装置１０が動作している間、常に外部ブロック１００から出力されるパケットの出力許可要求を監視して、初エントリ処理を行う。このため、キュー制御部２２０は、例えば、ステップＳ１２において、エントリ済みパケット数＜最大エントリ数である場合（ステップＳ１２の“ＹＥＳ”）に、パケットの出力を許可することを通知する許可信号を、外部ブロック１００に出力している構成にすることもできる。
【００６９】
次に、演算装置１０に備えたパケット管理部２０内のキュー制御部２２０によるワークメモリ５０内のワーク領域５００の使用権付与処理（図２に示したステップＳ２）の処理手順について説明する。図４は、本第１の実施形態の演算装置１０に備えたキュー制御部２２０がワークメモリ５０内のワーク領域５００の使用権を付与する使用権付与処理の処理手順を示したフローチャートである。
【００７０】
キュー制御部２２０は、使用権付与処理を開始すると、まず、ステップＳ２１において、ワークメモリ５０内のそれぞれのワーク領域５００の内、パケットの演算処理に使用することができるワーク領域５００、すなわち、未使用のワーク領域５００があるか否かを確認する。より具体的には、キュー制御部２２０は、ワークメモリ使用状況管理レジスタ２４０内のそれぞれのワークメモリ管理レジスタの情報を確認し、ワークメモリ管理レジスタの情報が「未使用」であるワーク領域５００を検索する。ステップＳ２１において、未使用のワーク領域５００がない場合（ステップＳ２１の“ＮＯ”）には、キュー制御部２２０は、使用権付与処理を完了する。
【００７１】
また、ステップＳ２１において、未使用のワーク領域５００がある場合（ステップＳ２１の“ＹＥＳ”）には、ステップＳ２２において、キュー制御部２２０は、パケットキュー２１０に格納済みのパケットにおいてワーク領域５００の使用権が付与されていないパケットがあるか否かを確認する。ステップＳ２２において、ワーク領域５００の使用権が付与されていないパケットがない場合（ステップＳ２２の“ＮＯ”）には、キュー制御部２２０は、使用権付与処理を完了する。
【００７２】
また、ステップＳ２２において、ワーク領域５００の使用権が付与されていないパケットがある場合（ステップＳ２２の“ＹＥＳ”）には、ステップＳ２３において、キュー制御部２２０は、ステップＳ２２において確認したワーク領域５００の使用権が付与されていないパケットの内、最もパケットキュー２１０の先頭に近いパケットにワーク領域５００の使用権を付与する。また、キュー制御部２２０は、パケットに使用権を付与したワーク領域５００に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を、「使用中」を示す情報に更新し、使用権付与処理を完了する。
【００７３】
このような処理によって、キュー制御部２２０は、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報から未使用のワーク領域５００を確認し、ワーク領域５００の使用権が付与されていないパケットに、ワーク領域５００の使用権を付与する。なお、キュー制御部２２０は、使用権付与処理を常時行っている。すなわち、キュー制御部２２０は、パケットキュー２１０内にパケットが格納されている間、常に未使用のワーク領域５００を検索して、使用権付与処理を行う。これにより、キュー制御部２２０は、ワークメモリ５０内のいずれかのワーク領域５００が使用することができる状況になった後の早いタイミングで、他のパケットにワーク領域５００の使用権を付与することができる。
【００７４】
次に、演算装置１０に備えたパケット管理部２０内のキュー制御部２２０によるキュー管理処理（図２に示したステップＳ３）の処理手順について説明する。図５は、本第１の実施形態の演算装置１０に備えたキュー制御部２２０がパケットキュー２１０に格納されているパケットのプロセッサ３０への出力を管理するキュー管理処理の処理手順を示したフローチャートである。
【００７５】
キュー制御部２２０は、キュー管理処理を開始すると、まず、ステップＳ３１において、演算装置１０に備えたそれぞれのプロセッサ３０の内、パケットの演算処理を実行することができるプロセッサ３０、すなわち、未使用のプロセッサ３０があるか否かを確認する。より具体的には、キュー制御部２２０は、プロセッサ使用状況管理レジスタ２５０内のそれぞれのプロセッサ管理レジスタの情報を確認し、プロセッサ管理レジスタの情報が「未使用」であるプロセッサ３０を検索する。ステップＳ３１において、未使用のプロセッサ３０がない場合（ステップＳ３１の“ＮＯ”）には、キュー制御部２２０は、キュー管理処理を完了する。
【００７６】
また、ステップＳ３１において、未使用のプロセッサ３０がある場合（ステップＳ３１の“ＹＥＳ”）には、ステップＳ３２において、キュー制御部２２０は、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、ステップＳ３１において検索した未使用のプロセッサ３０を、演算処理を実行させるプロセッサ３０として定めているパケットがあるか否かを確認する。より具体的には、キュー制御部２２０は、ワーク領域５００の使用権が付与されているパケットに含まれるプロセッサ番号を確認することによって、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットを検索する。ステップＳ３２において、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットがない場合（ステップＳ３２の“ＮＯ”）には、キュー制御部２２０は、キュー管理処理を完了する。
【００７７】
また、ステップＳ３２において、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットがある場合（ステップＳ３２の“ＹＥＳ”）には、ステップＳ３３において、キュー制御部２２０は、ステップＳ３２において確認した未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットの内、最もパケットキュー２１０の先頭に近いパケットを、対応するプロセッサ３０に出力する。また、キュー制御部２２０は、プロセッサ３０に出力したパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を、「使用中」を示す情報に更新し、キュー管理処理を完了する。
【００７８】
このような処理によって、キュー制御部２２０は、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報から未使用のプロセッサ３０を確認し、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットを、対応するプロセッサ３０に出力する。なお、キュー制御部２２０は、キュー管理処理を常時行っている。すなわち、キュー制御部２２０は、パケットキュー２１０内にパケットが格納されている間、常に未使用のプロセッサ３０を検索して、キュー管理処理を行う。これにより、キュー制御部２２０は、演算装置１０に備えたいずれかのプロセッサ３０がパケットを受け付けることができる状況になった後の早いタイミングで、対応するパケットを出力することができる。
【００７９】
次に、演算装置１０に備えたプロセッサ３０による演算処理（図２に示したステップＳ４）の処理手順について説明する。図６は、本第１の実施形態の演算装置１０に備えたプロセッサ３０が演算処理を実行する処理手順を示したフローチャートである。
【００８０】
プロセッサ３０は、パケット管理部２０内のパケットキュー２１０から対応するパケットが入力されると、演算処理を開始する。まず、ステップＳ４１において、プロセッサ３０は、入力されたパケットに含まれるワークメモリ番号を取得する。すなわち、入力されたパケットに対する演算処理を実行する際に使用するワーク領域５００の情報を取得する。
【００８１】
続いて、ステップＳ４２において、プロセッサ３０は、取得したワークメモリ番号を、接続切り替え部４０内の対応するアドレス変換部４００に出力する。これにより、対応するアドレス変換部４００は、プロセッサ３０から入力されたワークメモリ番号に対応する、ワークメモリ番号とワーク領域５００とを１対１に対応させたテーブルを参照して、プロセッサ３０が使用するワーク領域５００を特定する。また、対応するアドレス変換部４００は、プロセッサ３０とワークメモリ５０内のワーク領域５００とを１対１に接続させるクロスバスイッチ４５０の制御値をまとめたテーブルを参照してクロスバスイッチ４５０の制御値を決定し、決定した制御値をクロスバスイッチ４５０に出力する。これにより、クロスバスイッチ４５０は、アドレス変換部４００から入力された制御値に応じて、プロセッサ３０の信号線とワーク領域５００の信号線との接続を切り替え、プロセッサ３０とワーク領域５００とを１対１に接続させる。なお、アドレス変換部４００は、クロスバスイッチ４５０によるプロセッサ３０とワーク領域５００との接続の切り替えが完了した後、ワーク領域５００の接続が完了したことを表す通知を、対応するプロセッサ３０に通知する。
【００８２】
続いて、ステップＳ４３において、プロセッサ３０は、入力されたパケット全体を、対応するアドレス変換部４００およびクロスバスイッチ４５０を介して、対応するワーク領域５００に転送する。
【００８３】
続いて、ステップＳ４４において、プロセッサ３０は、ワーク領域５００に転送したパケットに含まれる処理番号に対応した処理コードを、プロセッサ３０に接続されたローカルメモリから読み出して、演算対象データに対する演算処理を実行する。
【００８４】
そして、演算対象データに対する演算処理を完了した後、ステップＳ４５において、プロセッサ３０は、演算処理後のパケットのパケット状態情報およびプロセッサ番号を更新する。より具体的には、演算処理後のパケットが、演算処理を引き継ぐパケットである場合には、演算処理後のパケットのパケット状態情報を「処理継続」に更新し、さらに、プロセッサ番号を、引き続き演算処理を実行させる次のプロセッサ３０（別のプロセッサ３０または自身）のプロセッサ番号に更新する。また、演算処理後のパケットが、演算処理が完了したことにより外部ブロック１００に出力するパケットである場合には、演算処理後のパケットのパケット状態情報を「処理完了」に更新する。
【００８５】
なお、処理コードは、演算対象データに対する演算内容や、パケット状態情報およびプロセッサ番号の更新内容が論理アドレスで記述されているが、アドレス変換部４００が、プロセッサ３０がワーク領域５００にアクセスする際の論理アドレスを対応するワーク領域５００をアクセスする際の物理アドレスに変換する。これにより、プロセッサ３０は、ステップＳ４４の演算対象データに対する演算処理や、ステップＳ４５のパケット状態情報およびプロセッサ番号の更新を実現することができる。
【００８６】
続いて、演算対象データに対する演算処理（ステップＳ４４）と、パケット状態情報およびプロセッサ番号の更新（ステップＳ４５）とが完了すると、ステップＳ４６において、プロセッサ３０は、出力する演算処理後のパケットがあることを、パケット管理部２０内の再エントリ判定部２３０に通知する。再エントリ判定部２３０は、演算処理後のパケットの取得ができる状態である場合、パケットを受け付けることを表す通知を、プロセッサ３０に出力する。
【００８７】
そして、プロセッサ３０は、再エントリ判定部２３０から演算処理後のパケットを受け付けることを表す通知を受け取ると、ステップＳ４７において、再エントリ判定部２３０に出力する演算処理後のパケットのパケット状態情報が「処理継続」であるか否かを確認する。
【００８８】
ステップＳ４７において、再エントリ判定部２３０に出力する演算処理後のパケットのパケット状態情報が「処理継続」でない場合（ステップＳ４７の“ＮＯ”）、すなわち、パケット状態情報が「処理完了」であり、外部ブロック１００に出力するパケットである場合には、ステップＳ４８において、プロセッサ３０は、演算処理後のパケット全体を、クロスバスイッチ４５０および対応するアドレス変換部４００を介して再エントリ判定部２３０に出力し、演算処理を完了する。
【００８９】
また、ステップＳ４７において、再エントリ判定部２３０に出力する演算処理後のパケットのパケット状態情報が「処理継続」である場合（ステップＳ４７の“ＹＥＳ”）、すなわち、演算処理後のパケットが演算処理を引き継ぐパケットである場合には、ステップＳ４９において、プロセッサ３０は、ワーク領域５００に最終的に記憶されている次の演算対象データ以外のパケットを、クロスバスイッチ４５０および対応するアドレス変換部４００を介して再エントリ判定部２３０に出力し、演算処理を完了する。
【００９０】
このような処理によって、プロセッサ３０は、入力されたパケットに対応するワーク領域５００を使用して、演算対象データに対する演算処理を実行する。そして、プロセッサ３０は、演算処理後のパケットのパケット状態情報を更新し、再エントリ判定部２３０に出力する。このとき、プロセッサ３０は、演算処理後のパケットのパケット状態情報に応じて、再エントリ判定部２３０に出力するパケットの構成を変える。より具体的には、演算処理後のパケットのパケット状態情報が「処理完了」である場合には、演算処理後のパケット全体を再エントリ判定部２３０に出力し、演算処理後のパケットのパケット状態情報が「処理継続」である場合には、演算対象データ以外の演算処理後のパケットを再エントリ判定部２３０に出力する。これにより、演算処理後のパケットが演算処理を引き継ぐパケットである場合には、次に演算処理を行う演算対象データがワーク領域５００に記憶されている（残っている）状態になり、この演算対象データに対して次に演算処理を実行するプロセッサ３０は、ステップＳ４３におけるパケット全体のワーク領域５００への転送に要する時間を削減することができる。
【００９１】
次に、演算装置１０に備えたパケット管理部２０内の再エントリ判定部２３０による再エントリ判定処理（図２に示したステップＳ５）の処理手順について説明する。図７は、本第１の実施形態の演算装置１０に備えた再エントリ判定部２３０がパケットを再度格納する再エントリ判定処理の処理手順を示したフローチャートである。
【００９２】
再エントリ判定部２３０は、再エントリ判定処理を開始すると、まず、ステップＳ５１において、プロセッサ３０から演算処理後のパケットがあることを表す通知があるか否か、すなわち、プロセッサ３０からの演算処理後のパケットの出力許可要求があるか否かを確認する。ステップＳ５１において、プロセッサ３０からの演算処理後のパケットの出力許可要求がない場合（ステップＳ５１の“ＮＯ”）には、再エントリ判定部２３０は、再エントリ判定処理を完了する。
【００９３】
また、ステップＳ５１において、プロセッサ３０からの演算処理後のパケットの出力許可要求がある場合（ステップＳ５１の“ＹＥＳ”）には、再エントリ判定部２３０は、プロセッサ３０から演算処理後のパケットを取得し、取得した演算処理後のパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を、「未使用」を示す情報に更新する。そして、ステップＳ５２において、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」であるか否かを確認する。
【００９４】
ステップＳ５２において、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」である場合（ステップＳ５２の“ＹＥＳ”）、すなわち、演算処理後のパケットが演算処理を引き継ぐパケットである場合には、ステップＳ５３において、再エントリ判定部２３０は、プロセッサ３０から今回入力された演算処理後のパケットを、パケットキュー２１０内ですでにパケットが格納されている格納領域の次の格納領域、すなわち、現在の最後尾の格納領域に格納（エントリ）し、再エントリ判定処理を完了する。つまり、再エントリ判定部２３０は、今回入力された演算処理後のパケットにワーク領域５００の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する。
【００９５】
また、ステップＳ５２において、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」でない場合（ステップＳ５２の“ＮＯ”）、すなわち、パケット状態情報が「処理完了」であり、外部ブロック１００に出力するパケットである場合には、ステップＳ５４において、再エントリ判定部２３０は、入力された演算処理後のパケットに付与されたワーク領域５００の使用権を開放する。より具体的には、ワークメモリ使用状況管理レジスタ２４０内の演算処理後のパケットに対応するワークメモリ管理レジスタの情報を、「未使用」を示す情報に更新することによって、ワーク領域５００の使用権を開放する。
【００９６】
続いて、ステップＳ５５において、再エントリ判定部２３０は、ワーク領域５００の使用権を開放した演算処理後のパケット全体を、外部ブロック１００に出力し、再エントリ判定処理を完了する。
【００９７】
このような処理によって、再エントリ判定部２３０は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報に応じて、演算処理後のパケットの出力先を切り替える。なお、再エントリ判定部２３０は、再エントリ判定処理を常時行っている。すなわち、再エントリ判定部２３０は、演算装置１０が動作している間、常にプロセッサ３０から出力される演算処理後のパケットの出力許可要求を監視して、再エントリ判定処理を行う。そして、再エントリ判定処理では、パケット状態情報が「処理継続」である演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）する。このため、再エントリ判定部２３０は、例えば、キュー制御部２２０が実行する初エントリ処理におけるステップＳ１２と同様に、エントリ済みパケット数と最大エントリ数との比較を行い、比較した結果に応じてプロセッサ３０からの演算処理後のパケットを受け付ける（取得する）構成にすることもできる。また、演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）する際に、外部ブロック１００と同様に、演算処理後のパケットの出力許可要求をキュー制御部２２０に出力し、キュー制御部２２０からパケットの出力を許可することを通知する許可信号が入力された後に、取得した演算処理後のパケットをパケットキュー２１０に格納（エントリ）する構成にすることもできる。
【００９８】
このように、演算装置１０では、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、パケットキュー２１０に格納されたそれぞれのパケットに対して常時行うことによって、外部ブロック１００から要求された複数の演算処理を並列に実行することができる。
【００９９】
＜第１の動作＞
ここで、演算装置１０における動作の一例について説明する。演算装置１０の動作については、パケットキュー２１０およびワークメモリ５０内のパケットに着目して説明する。図８は、本第１の実施形態の演算装置１０の動作におけるそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例を示した図である。
【０１００】
図８には、ワークメモリ５０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」および「プロセッサ番号」を示している。また、図８には、パケットキュー２１０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」、「プロセッサ番号」、「ワークメモリ番号」、および「パケット状態情報」を示している。なお、図８に示したそれぞれのパケットの状態において、「プロセッサ番号」には、パケットに含まれる「演算対象データ」に対して演算処理を実行するプロセッサ３０を、それぞれのプロセッサ３０の符号の下１桁の数字で示している。また、「ワークメモリ番号」には、それぞれのプロセッサ３０がパケットに含まれる「演算対象データ」に対して演算処理を実行する際に使用するワーク領域５００を、それぞれのワーク領域５００の符号の下１桁の数字で示している。
【０１０１】
なお、図８に示したパケットキュー２１０およびワークメモリ５０内のパケットのそれぞれの状態では、説明を容易にするため、パケットがパケットキュー２１０に格納された順番を、「パケット番号」の項目内に示している。このパケット番号は、パケットがパケットキュー２１０に格納された順に付与され、演算処理が完了して外部ブロック１００に出力されるまで変わらない番号とする。また、ワークメモリ５０内のパケットの状態では、それぞれのワーク領域５００に格納されたパケットに対して演算処理を実行しているプロセッサ３０を、「処理中プロセッサ」の項目内に示している。
【０１０２】
まず、演算装置１０の動作においては、図８（ａ）に示したように、ワークメモリ５０内に３つのパケットが記憶され、パケットキュー２１０内に３つのパケットが格納され、パケットキュー２１０内に格納されたパケットの内、先頭に近い２つのパケットに、キュー制御部２２０によってすでにワーク領域５００の使用権が付与されている状態を、演算装置１０の初期の状態として、以降の動作を説明する。
【０１０３】
より具体的には、ワークメモリ５０の初期状態は、ワーク領域５０１に、パケットキュー２１０に最初に入力された、演算対象データＡに対してプロセッサ３１が演算処理を実行するパケット＃１が記憶されている状態である。また、ワーク領域５０２に、パケットキュー２１０に２番目に入力された、演算対象データＢに対してプロセッサ３２が演算処理を実行するパケット＃２が記憶され、ワーク領域５０３に、パケットキュー２１０に３番目に入力された、演算対象データＣに対してプロセッサ３３が演算処理を実行するパケット＃３が記憶されている状態である。
【０１０４】
また、パケットキュー２１０の初期状態は、格納領域２１１に、パケットキュー２１０に４番目に入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行する、ワーク領域５０４の使用権が付与されたパケット＃４が格納されている状態である。また、格納領域２１２に、パケットキュー２１０に５番目に入力された、演算対象データＥに対してプロセッサ３１が演算処理を実行する、ワーク領域５０５の使用権が付与されたパケット＃５が格納され、格納領域２１３に、パケットキュー２１０に６番目に入力された、演算対象データＦに対してプロセッサ３１が演算処理を実行する、ワーク領域５００の使用権が付与されていないパケット＃６が格納されている状態である。
【０１０５】
この初期状態から、プロセッサ３１が、パケット＃１に含まれる演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３２に引き継ぐためにプロセッサ番号を「２」とし、パケット状態情報を「処理継続」に更新した演算処理後のパケット＃１を、再エントリ判定部２３０に出力する場合を考える。なお、演算処理後のパケット＃１のパケット状態情報は「処理継続」であるため、上述したように、プロセッサ３１は、ワーク領域５０１に最終的に記憶されている次の演算対象データ（以下、「演算対象データＡ２」という）以外のパケット＃１を、再エントリ判定部２３０に出力する（図６のステップＳ４９参照）。
【０１０６】
演算処理後のパケット＃１を取得した再エントリ判定部２３０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃１を、パケットキュー２１０内の最後尾の格納領域に再度格納（エントリ）する（図７のステップＳ５３参照）。なお、演算処理後のパケット＃１のパケット状態情報は「処理継続」であるため、上述したように、再エントリ判定部２３０は、演算処理後のパケット＃１に付与したワーク領域５０１の使用権を開放せず、つまり、演算処理後のパケット＃１にワーク領域５０１の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する。
【０１０７】
また、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３１に対応するプロセッサ管理レジスタ２５１の情報が「未使用」になった、すなわち、プロセッサ３１がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃４を、プロセッサ３１に出力させる。また、キュー制御部２２０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１０８】
その後、プロセッサ３１は、入力されたパケット＃４に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３１とワーク領域５０４とが１対１に接続された後（図６のステップＳ４２参照）、パケット＃４に含まれる演算対象データＤをワーク領域５０４に転送（図６のステップＳ４３参照）し、演算対象データＤに対する演算処理を実行する（図６のステップＳ４４参照）。
【０１０９】
図８（ｂ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、ワーク領域５０１に、プロセッサ３１がパケット＃１の演算対象データＡに対する演算処理を実行した結果の演算対象データＡ２が記憶され（残っており）、ワーク領域５０４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶されている状態となっている。なお、ワークメモリ５０内のワーク領域５０２およびワーク領域５０３は、プロセッサ３２によるパケット＃２に含まれる演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に含まれる演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。
【０１１０】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはパケット＃５が格納され、同様に、格納領域２１２にはパケット＃６が格納され、パケットキュー２１０内の最後尾の格納領域２１３には再エントリ判定部２３０によって再度格納（エントリ）された演算処理後のパケット＃１が格納されている状態になる。なお、上述したように、格納領域２１３に格納される演算処理後のパケット＃１は、パケット状態情報が「処理継続」のパケットであるため、すなわち、演算対象データＡ２がワーク領域５０１に記憶されている（残っている）パケットであるため、演算対象データＡ２は含まれておらず、ワーク領域５０１の使用権が付与されたままの状態である。
【０１１１】
この状態から、プロセッサ３２が、パケット＃２に含まれる演算対象データＢに対する演算処理を完了し、次の演算処理をプロセッサ３３に引き継ぐためにプロセッサ番号を「３」とし、パケット状態情報を「処理継続」に更新した演算処理後のパケット＃２を、再エントリ判定部２３０に出力する場合を考える。なお、プロセッサ３２は、プロセッサ３１と同様に、ワーク領域５０２に最終的に記憶されている次の演算対象データ（以下、「演算対象データＢ２」という）以外のパケット＃２を、再エントリ判定部２３０に出力する（図６のステップＳ４９参照）。
【０１１２】
演算処理後のパケット＃２を取得した再エントリ判定部２３０は、プロセッサ３２に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５２の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃２を、パケットキュー２１０内の最後尾の格納領域に再度格納（エントリ）する（図７のステップＳ５３参照）。なお、再エントリ判定部２３０は、演算処理後のパケット＃１をパケットキュー２１０に再度格納（エントリ）するときと同様に、演算処理後のパケット＃２にワーク領域５０２の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する。
【０１１３】
また、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３２に対応するプロセッサ管理レジスタ２５２の情報が「未使用」になり、プロセッサ３２がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝２で、最もパケットキュー２１０の先頭に近い演算処理後のパケット＃１、つまり、パケットキュー２１０に再度格納され、プロセッサ３２に演算処理が引き継がれた演算処理後のパケット＃１を、プロセッサ３２に出力させる。また、キュー制御部２２０は、プロセッサ３２に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５２の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１１４】
その後、プロセッサ３２は、入力された演算処理後のパケット＃１に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３２と演算対象データＡ２が記憶されている（残っている）ワーク領域５０１とが１対１に接続された後（図６のステップＳ４２参照）、演算対象データをワーク領域５０１に転送せずに、演算対象データＡ２に対する演算処理を実行する（図６のステップＳ４４参照）。
【０１１５】
図８（ｃ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、ワーク領域５０２に、プロセッサ３２がパケット＃２の演算対象データＢに対する演算処理を実行した結果の演算対象データＢ２が記憶されている（残っている）状態となっている。なお、ワークメモリ５０内のワーク領域５０１には、プロセッサ３１がパケット＃１の演算対象データＡに対する演算処理を実行した結果の演算対象データＡ２が記憶され（残っており）、プロセッサ３２が、プロセッサ３１から引き継がれた演算対象データＡ２に対する演算処理を実行している。また、ワークメモリ５０内のワーク領域５０３およびワーク領域５０４は、プロセッサ３３によるパケット＃３に含まれる演算対象データＣに対する演算処理、およびプロセッサ３１によるパケット＃４に含まれる演算対象データＤに対する演算処理を完了していないため、図８（ｂ）に示した状態と同様である。
【０１１６】
また、パケットキュー２１０の状態は、パケットキュー２１０内の最後尾の格納領域２１３には、前回格納領域２１３に格納されていた演算処理後のパケット＃１がプロセッサ３２に出力されたことにより、再エントリ判定部２３０によって再度格納（エントリ）された演算処理後のパケット＃２が格納されている状態になっている。なお、上述したように、格納領域２１３に格納される演算処理後のパケット＃２は、パケット状態情報が「処理継続」のパケットであり、演算対象データＢ２がワーク領域５０２に記憶されている（残っている）パケットであるため、演算対象データＢ２は含まれておらず、ワーク領域５０２の使用権が付与されたままの状態である。また、パケットキュー２１０内の格納領域２１１および格納領域２１２は、それぞれのパケットがプロセッサ３０に出力されていないため、図８（ｂ）に示した状態と同様である。
【０１１７】
この状態から、プロセッサ３３が、パケット＃３に含まれる演算対象データＣに対する演算処理を完了したことにより、演算装置１０による一連の演算処理が完了し、パケット状態情報を「処理完了」に更新した演算処理後のパケット＃３を、再エントリ判定部２３０に出力する場合を考える。なお、演算処理後のパケット＃３のパケット状態情報は「処理完了」であるため、上述したように、プロセッサ３３は、ワーク領域５０３に最終的に記憶されている演算対象データＣを含めた演算処理後のパケット＃３全体を、再エントリ判定部２３０に出力する（図６のステップＳ４８参照）。
【０１１８】
演算処理後のパケット＃３を取得した再エントリ判定部２３０は、プロセッサ３３に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５３の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。また、再エントリ判定部２３０は、演算処理後のパケット＃３のパケット状態情報が「処理完了」であるため、上述したように、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４３の情報を、「未使用」を示す情報に更新することによって、演算処理後のパケット＃３に付与されたワーク領域５０３の使用権を開放する（図７のステップＳ５４参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃３全体を、外部ブロック１００に出力する（図７のステップＳ５５参照）。
【０１１９】
また、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３３に対応するプロセッサ管理レジスタ２５３の情報が「未使用」になり、プロセッサ３３がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝３で、最もパケットキュー２１０の先頭に近い演算処理後のパケット＃２、つまり、パケットキュー２１０に再度格納され、プロセッサ３３に演算処理が引き継がれた演算処理後のパケット＃２を、プロセッサ３３に出力させる。また、キュー制御部２２０は、プロセッサ３３に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５３の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１２０】
その後、プロセッサ３３は、入力された演算処理後のパケット＃２に含まれるワークメモリ番号を対応するアドレス変換部４０２に出力し、プロセッサ３３と演算対象データＢ２が記憶されている（残っている）ワーク領域５０２とが１対１に接続された後（図６のステップＳ４２参照）、演算対象データをワーク領域５０２に転送せずに、演算対象データＢ２に対する演算処理を実行する（図６のステップＳ４４参照）。
【０１２１】
また、キュー制御部２２０は、再エントリ判定部２３０によってワーク領域５０３に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４３の情報が「未使用」になり、ワーク領域５０３の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されていないパケットの内、最もパケットキュー２１０の先頭に近い演算処理後のパケット＃６に、ワーク領域５０３の使用権を付与する（図４のステップＳ２３参照）。
【０１２２】
図８（ｄ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、ワーク領域５０３にパケットが記憶されていない状態となっている。なお、ワークメモリ５０内のワーク領域５０２には、プロセッサ３２がパケット＃２の演算対象データＢに対する演算処理を実行した結果の演算対象データＢ２が記憶され（残っており）、プロセッサ３３が、プロセッサ３２から引き継がれた演算対象データＢ２に対する演算処理を実行している。また、ワークメモリ５０内のワーク領域５０１およびワーク領域５０４は、プロセッサ３２による演算処理後のパケット＃１の演算対象データＡ２に対する演算処理、およびプロセッサ３１によるパケット＃４に含まれる演算対象データＤに対する演算処理を完了していないため、図８（ｃ）に示した状態と同様である。
【０１２３】
また、パケットキュー２１０の状態は、格納領域２１３に格納されたパケット＃６に対してワーク領域５０３の使用権が付与された状態となっている。また、パケットキュー２１０内の格納領域２１１は、パケット＃５がプロセッサ３１に出力されていないため、図８（ｃ）に示した状態と同様である。なお、このとき、例えば、予め定めた最大エントリ数を、最大エントリ数＝３としていた場合、キュー制御部２２０は、エントリ済みパケット数＜最大エントリ数であることが確認できる（図３のステップＳ１２参照）ため、パケットの出力を許可することを通知する許可信号を、外部ブロック１００に出力することもできる。
【０１２４】
このように、演算装置１０は、演算装置１０に備えたワークメモリ５０内のそれぞれのワーク領域５００の使用状況と、演算装置１０に備えたそれぞれのプロセッサ３０の使用状況を常時監視し、監視した状況に応じて、それぞれのパケットを対応するプロセッサ３０に割り当てる。このとき、プロセッサ３０とワーク領域５００とは１対１で対応するため、それぞれのプロセッサ３０が割り当てられたパケットに対する演算処理を実行する際に、それぞれのプロセッサ３０でワーク領域５００の競合が発生することなくワーク領域５００を共有し、演算装置１０は、外部ブロック１００から要求された複数の演算処理を並列に実行することができる。
【０１２５】
また、演算装置１０では、別のプロセッサ３０に演算処理を引き継ぐ場合には、ワーク領域５００に演算対象データを記憶したまま（残したまま）、演算処理を引き継ぐパケットを再エントリ判定部２３０に出力する。このため、演算装置１０では、それぞれのプロセッサ３０間で演算対象データを共有することができる。
【０１２６】
なお、図８に示した演算装置１０の動作の一例では、それぞれのプロセッサ３０がワークメモリ５０内の１つのワーク領域５００を使用して、パケットに含まれる演算対象データに対する演算処理を実行する場合について説明した。しかし、それぞれのプロセッサ３０が演算処理を実行する際に使用するワーク領域５００は、必ずしも１つであるとは限らない。例えば、２つのワーク領域５００を使用して演算処理を実行するパケットが、プロセッサ３０に割り当てられる場合もある。
【０１２７】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。本第２の実施形態の演算装置は、演算装置に備えたそれぞれのプロセッサが複数のワーク領域を使用して演算処理を実行する場合の考え方を適用した演算装置である。このため、本第２の実施形態の演算装置には、第１の実施形態の演算装置１０において説明した「演算対象データ」、「プロセッサ番号」、「ワークメモリ番号」、「処理番号」、および「パケット状態情報」に加えて、パケットに対する演算処理を実行する際に使用するワークメモリ内のワーク領域の数を定める「使用メモリ数」の情報が含まれているパケットが、外部ブロックから入力される。
【０１２８】
本第２の実施形態の演算装置では、複数のワーク領域を使用して演算処理を実行するための機能が、キュー制御部およびアドレス変換部に加わること以外は、演算装置の構成や処理手順は、第１の実施形態の演算装置１０と同様である。従って、以下の説明においては、本第２の実施形態の演算装置を演算装置１０とし、演算装置１０に備えたそれぞれの構成要素に加わった機能のみを説明する。
【０１２９】
キュー制御部２２０には、パケットキュー２１０に格納されたそれぞれのパケットに含まれる使用メモリ数を確認し、使用メモリ数で定められた数のワーク領域５００の使用権を、パケットに付与する機能が加わる。
【０１３０】
より具体的には、まず、キュー制御部２２０は、パケットキュー２１０に格納されたそれぞれのパケットに含まれる使用メモリ数で定められたワークメモリ５０内のワーク領域５００を使用する数を確認する。そして、キュー制御部２２０は、ワーク領域５００の使用数を確認したパケットに含まれるワークメモリ番号で定められたワークメモリ５０内のワーク領域５００の使用状況を、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報から確認する。このワーク領域５００の使用数とワークメモリ管理レジスタの情報を確認した結果、使用メモリ数で定められ、ワークメモリ番号で定められたワーク領域５００を使用することができる状況である場合、つまり、ワークメモリ管理レジスタの情報が、使用メモリ数で定められた数だけ「未使用」である場合、キュー制御部２２０は、複数のワーク領域５００の使用権を付与する。そして、キュー制御部２２０は、ワーク領域５００の使用権を付与したパケットに含まれるワークメモリ番号に対応するワークメモリ使用状況管理レジスタ２４０内の、使用メモリ数に対応する数のワークメモリ管理レジスタの情報を「使用中」に変更する。
【０１３１】
アドレス変換部４０１〜アドレス変換部４０３のそれぞれには、対応するプロセッサ３０がパケットに含まれる演算対象データに対する演算処理を実行する際に使用するワーク領域５００を指定するアドレスと、実際に使用されるワークメモリ５０内の複数のワーク領域５００のアドレスとを連続して１対１に対応付ける機能が加わる。すなわち、アドレス変換部４００は、対応するプロセッサ３０が複数のワーク領域５００にアクセスする際の論理アドレスを、実際にワークメモリ５０内の複数のワーク領域５００をアクセスする際の連続した物理アドレスに変換する。これにより、それぞれのプロセッサ３０は、パケットに対する演算処理を実行する際に使用するワーク領域５００の区切り（物理的に分離された構造）を考慮することなく（意識することなく）、いずれのワーク領域５００を使用する場合でも、同様に演算処理を実行することができる。つまり、それぞれのプロセッサ３０は、いずれのワーク領域５００を使用する場合でも、記憶領域の大きさが大きい１つのワーク領域５００としてアクセスすることができる。
【０１３２】
例えば、第２の実施形態の演算装置１０の構成（図１参照）において、ワークメモリ５０内のワーク領域５０１に物理アドレス０ｘ１０００〜０ｘ１ＦＦＦが、ワーク領域５０２に物理アドレス０ｘ２０００〜０ｘ２ＦＦＦが、ワーク領域５０３に物理アドレス０ｘ３０００〜０ｘ３ＦＦＦが、ワーク領域５０４に物理アドレス０ｘ４０００〜０ｘ４ＦＦＦが、ワーク領域５０５に物理アドレス０ｘ５０００〜０ｘ５ＦＦＦが、それぞれ割り当てられている場合を考える。このとき、例えば、アドレス変換部４０１が、プロセッサ３１がワーク領域５００にアクセスする際の論理アドレス０ｘ００００〜０ｘ１ＦＦＦを、ワーク領域５０１の物理アドレス０ｘ１０００〜０ｘ１ＦＦＦと、ワーク領域５０２の物理アドレス０ｘ２０００〜０ｘ２ＦＦＦとが連続するように変換する。これにより、プロセッサ３１は、ワークメモリ５０内のワーク領域５０１とワーク領域５０２との２つのワーク領域５００に連続してアクセスすることができる。また、例えば、アドレス変換部４０１が、プロセッサ３１がワーク領域５００にアクセスする際の論理アドレス０ｘ００００〜０ｘ１ＦＦＦを、ワーク領域５０２の物理アドレス０ｘ２０００〜０ｘ２ＦＦＦと、ワーク領域５０５の物理アドレス０ｘ５０００〜０ｘ５ＦＦＦとが連続するように変換する。これにより、プロセッサ３１は、ワークメモリ５０内のワーク領域５０２とワーク領域５０５との２つのワーク領域５００に連続してアクセスすることができる。また、例えば、アドレス変換部４０１が、プロセッサ３１がワーク領域５００にアクセスする際の論理アドレス０ｘ００００〜０ｘ１ＦＦＦを、ワーク領域５０１の物理アドレス０ｘ１０００〜０ｘ１ＦＦＦと、ワーク領域５０４の物理アドレス０ｘ４０００〜０ｘ４ＦＦＦとが連続するように変換する。これにより、プロセッサ３１は、ワークメモリ５０内のワーク領域５０１とワーク領域５０４との２つのワーク領域５００に連続してアクセスすることができる。
【０１３３】
＜第２の動作＞
ここで、第２の実施形態の演算装置１０において、プロセッサ３０が複数のワーク領域５００を使用して演算処理を実行する場合の動作の一例について説明する。本第２の動作の説明でも、パケットキュー２１０およびワークメモリ５０内のパケットに着目して、演算装置１０の動作を説明する。図９は、本第２の実施形態の演算装置１０の動作におけるそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例を示した図である。本第２の動作は、パケットキュー２１０に格納されたパケット内に、２つのワーク領域５００を使用して演算処理を実行するパケットが含まれている場合の演算装置１０の動作である。
【０１３４】
図９には、図８に示した第１の実施形態の演算装置１０の動作におけるワークメモリ５０内のパケットの状態の一例と同様に、ワークメモリ５０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」および「プロセッサ番号」を示している。図９には、図８に示した第１の実施形態の演算装置１０の動作におけるパケットキュー２１０内のパケットの状態の一例と同様に、パケットキュー２１０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」、「プロセッサ番号」、「ワークメモリ番号」、および「パケット状態情報」を示している。また、パケットキュー２１０内のパケットの状態には、さらに、「使用メモリ数」も示している。
【０１３５】
なお、図９に示したそれぞれのパケットの状態における「プロセッサ番号」および「ワークメモリ番号」には、図８に示した第１の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、それぞれのプロセッサ３０の符号の下１桁の数字およびそれぞれのワーク領域５００の符号の下１桁の数字で示している。また、図９に示したそれぞれのパケットの状態においても、説明を容易にするため、図８に示した第１の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、「パケット番号」の項目と「処理中プロセッサ」の項目とを示している。
【０１３６】
まず、第２の実施形態の演算装置１０の動作においては、図９（ａ）に示したように、ワークメモリ５０内に３つのパケットが記憶され、パケットキュー２１０内に３つのパケットが格納され、パケットキュー２１０内に格納されたパケットの内、先頭に近い１つのパケットに、キュー制御部２２０によってすでにワーク領域５００の使用権が付与されている状態を、第２の実施形態の演算装置１０の初期の状態として、以降の動作を説明する。ここで、先頭から２番目のパケットが、２つのワーク領域５００を使用するパケットであるものとする。
【０１３７】
より具体的には、ワークメモリ５０の初期状態は、ワーク領域５０１に、パケットキュー２１０に最初に入力された、演算対象データＡに対してプロセッサ３１が演算処理を実行するパケット＃１が記憶されている状態である。また、ワーク領域５０２に、パケットキュー２１０に２番目に入力された、演算対象データＢに対してプロセッサ３２が演算処理を実行するパケット＃２が記憶され、ワーク領域５０３に、パケットキュー２１０に３番目に入力された、演算対象データＣに対してプロセッサ３３が演算処理を実行するパケット＃３が記憶されている状態である。
【０１３８】
また、パケットキュー２１０の初期状態は、格納領域２１１に、パケットキュー２１０に４番目に入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行する、ワーク領域５０４の使用権が付与されたパケット＃４が格納されている状態である。また、格納領域２１２に、パケットキュー２１０に５番目に入力された、演算対象データＥに対してプロセッサ３２が演算処理を実行する、２つのワーク領域５００を使用し、ワーク領域５００の使用権が付与されていないパケット＃５が格納され、格納領域２１３に、パケットキュー２１０に６番目に入力された、演算対象データＦに対してプロセッサ３１が演算処理を実行する、ワーク領域５００の使用権が付与されていないパケット＃６が格納されている状態である。
【０１３９】
なお、図９（ａ）を見て分かるように、ワークメモリ５０内には、２つのワーク領域５００（ワーク領域５０４およびワーク領域５０５）が、「未使用」の状態である。しかしながら、２つのワーク領域５００を使用して演算処理を行うパケット＃５には、ワーク領域５００の使用権が付与されていない。これは、パケット＃５は、パケットキュー２１０の２番目の格納領域２１２に格納されており、パケットキュー２１０の先頭の格納領域２１１に格納されているパケット＃４にすでにワーク領域５０４の使用権が付与されていることにより、「未使用」の状態であるワーク領域５００が、ワーク領域５０５のみであるためである。つまり、ワークメモリ５０の初期状態では「未使用」の状態であるワーク領域５００がワーク領域５０５の１つのみであり、パケット＃５の演算処理に必要な数のワーク領域５００を確保できないためである。
【０１４０】
この初期状態から、プロセッサ３１が、パケット＃１に含まれる演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３２に引き継ぐためにプロセッサ番号を「２」とし、パケット状態情報を「処理継続」に更新した演算処理後のパケット＃１を、再エントリ判定部２３０に出力する場合を考える。このとき、プロセッサ３１は、ワーク領域５０１に最終的に記憶されている次の演算対象データＡ２以外のパケット＃１を、再エントリ判定部２３０に出力する（図６のステップＳ４９参照）。
【０１４１】
演算処理後のパケット＃１を取得した再エントリ判定部２３０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃１を、パケットキュー２１０内の最後尾の格納領域に再度格納（エントリ）する（図７のステップＳ５３参照）。なお、再エントリ判定部２３０は、演算処理後のパケット＃１に付与したワーク領域５０１の使用権を開放せずに、パケットキュー２１０に再度格納（エントリ）する。
【０１４２】
また、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３１に対応するプロセッサ管理レジスタ２５１の情報が「未使用」になり、プロセッサ３１がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃４を、プロセッサ３１に出力させる。また、キュー制御部２２０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１４３】
その後、プロセッサ３１は、入力されたパケット＃４に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３１とワーク領域５０４とが１対１に接続された後（図６のステップＳ４２参照）、パケット＃４に含まれる演算対象データＤをワーク領域５０４に転送（図６のステップＳ４３参照）し、演算対象データＤに対する演算処理を実行する（図６のステップＳ４４参照）。
【０１４４】
図９（ｂ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、ワーク領域５０１に、プロセッサ３１がパケット＃１の演算対象データＡに対する演算処理を実行した結果の演算対象データＡ２が記憶され（残っており）、ワーク領域５０４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶されている状態となっている。なお、ワークメモリ５０内のワーク領域５０２およびワーク領域５０３は、プロセッサ３２によるパケット＃２に含まれる演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に含まれる演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。
【０１４５】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはパケット＃５が格納され、同様に、格納領域２１２にはパケット＃６が格納され、パケットキュー２１０内の最後尾の格納領域２１３には再エントリ判定部２３０によって再度格納（エントリ）された演算処理後のパケット＃１が格納されている状態になる。なお、上述したように、格納領域２１３に格納される演算処理後のパケット＃１は、パケット状態情報が「処理継続」のパケットであるため、演算対象データＡ２は含まれておらず、ワーク領域５０１の使用権が付与されたままの状態である。
【０１４６】
なお、図９（ｂ）を見て分かるように、２つのワーク領域５００を使用して演算処理を行うパケット＃５には、ワーク領域５００の使用権が付与されていない。これは、パケット＃５がパケットキュー２１０の先頭の格納領域２１１に格納された状態でも、「未使用」の状態であるワーク領域５００がワーク領域５０５のみであり、パケット＃５の演算処理に必要な数のワーク領域５００を確保できないためである。
【０１４７】
この状態から、プロセッサ３２が、パケット＃２に含まれる演算対象データＢに対する演算処理を完了したことにより、演算装置１０による一連の演算処理が完了し、パケット状態情報を「処理完了」に更新した演算処理後のパケット＃２を、再エントリ判定部２３０に出力する場合を考える。なお、プロセッサ３２は、ワーク領域５０２に最終的に記憶されている演算対象データＢを含めた演算処理後のパケット＃２全体を、再エントリ判定部２３０に出力する（図６のステップＳ４８参照）。
【０１４８】
演算処理後のパケット＃２を取得した再エントリ判定部２３０は、プロセッサ３２に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５２の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。また、再エントリ判定部２３０は、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４２の情報を、「未使用」を示す情報に更新することによって、演算処理後のパケット＃２に付与されたワーク領域５０２の使用権を開放する（図７のステップＳ５４参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃２全体を、外部ブロック１００に出力する（図７のステップＳ５５参照）。
【０１４９】
また、キュー制御部２２０は、再エントリ判定部２３０によってワーク領域５０２に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４２の情報が「未使用」になり、ワーク領域５０２の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されていないパケットの内、最もパケットキュー２１０の先頭に近い、２つのワーク領域５００を使用して演算処理を行うパケット＃５の演算処理に必要な数のワーク領域５００を確保できたことを確認する（図４のステップＳ２１参照）。これにより、キュー制御部２２０は、パケット＃５に、ワーク領域５０２とワーク領域５０５の使用権を付与する（図４のステップＳ２３参照）。
【０１５０】
そして、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３２に対応するプロセッサ管理レジスタ２５２の情報が「未使用」になり、プロセッサ３２がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝２で、最もパケットキュー２１０の先頭に近い演算処理後のパケット＃５を、プロセッサ３２に出力させる。また、キュー制御部２２０は、プロセッサ３２に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５２の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１５１】
その後、プロセッサ３２は、入力されたパケット＃５に含まれるワークメモリ番号を対応するアドレス変換部４０２に出力する。そして、アドレス変換部４０２は、ワーク領域５０２とワーク領域５０５とが連続した１つのワーク領域となるように論理アドレスを構成する。より具体的には、ワーク領域５０２の物理アドレスに割り振ったプロセッサ３２がワーク領域にアクセスする際の論理アドレスをオフセットとして、ワーク領域５０５の論理アドレスに加えることによって、連続した１つのワーク領域を構成する。これにより、例えば、ワーク領域５０２に半分の演算対象データＥを、ワーク領域５０５にもう半分の演算対象データＥを、それぞれ記憶することができる。
【０１５２】
そして、プロセッサ３２は、プロセッサ３２と、ワーク領域５０２およびワーク領域５０５で構成されたワーク領域とが１対１に接続された後（図６のステップＳ４２参照）、パケット＃５に含まれる演算対象データＥを、連続した１つのワーク領域（ワーク領域５０２およびワーク領域５０５）に転送（図６のステップＳ４３参照）し、演算対象データＥに対する演算処理を実行する（図６のステップＳ４４参照）。このとき、プロセッサ３２は、ワーク領域５００の物理的な区切りを考慮することなく（意識することなく）、演算対象データＥに対する演算処理を実行することができる。
【０１５３】
図９（ｃ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、ワーク領域５０２およびワーク領域５０５に、パケットキュー２１０から入力された、演算対象データＥに対してプロセッサ３２が演算処理を実行するパケット＃５が記憶されている状態となっている。ここで、図９（ｃ）には、ワーク領域５０２に演算対象データＥの上位側の半分のデータが、ワーク領域５０５に演算対象データＥの下位側の半分のデータが、それぞれ分割して記憶されている状態を示している。なお、ワークメモリ５０内のワーク領域５０１には、プロセッサ３１がパケット＃１の演算対象データＡに対する演算処理を実行した結果の演算対象データＡ２が記憶され（残っており）、ワーク領域５０３およびワーク領域５０４は、プロセッサ３３によるパケット＃３に含まれる演算対象データＣに対する演算処理、およびプロセッサ３１によるパケット＃４に含まれる演算対象データＤに対する演算処理を完了していないため、図９（ｂ）に示した状態と同様である。
【０１５４】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃５がプロセッサ３２に出力されたことにより、格納領域２１１にはパケット＃６が格納され、同様に、パケットキュー２１０内の最後尾の格納領域２１２には再エントリ判定部２３０によって再度格納（エントリ）された演算処理後のパケット＃１が格納されている状態になる。
【０１５５】
なお、図９（ｃ）を見て分かるように、パケット＃６には、ワーク領域５００の使用権が付与されていない。これは、ワークメモリ５０内の全てのワーク領域５００が使用中である、すなわち、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報が全て「使用中」であるため、パケット＃６の演算処理に必要な数のワーク領域５００を確保できないためである。
【０１５６】
このように、第２の実施形態の演算装置１０でも、第１の実施形態の演算装置１０と同様に、演算装置１０に備えたワークメモリ５０内のそれぞれのワーク領域５００の使用状況を常時監視し、監視したワーク領域５００の使用状況に応じて、パケットに対する演算処理を実行する際に必要な数のワーク領域５００の使用権を付与する。これにより、第２の実施形態の演算装置１０でも、第１の実施形態の演算装置１０と同様に、それぞれのプロセッサ３０でワーク領域５００の競合が発生することなく、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して並列に実行することができる。
【０１５７】
また、第２の実施形態の演算装置１０では、それぞれのプロセッサ３０がパケットに対する演算処理を実行する際に必要な数の複数のワーク領域５００で構成された１つのワーク領域５００とプロセッサ３０とを１対１で対応させる。つまり、第２の実施形態の演算装置１０では、それぞれのプロセッサ３０が演算処理を実行する際に必要な記憶領域の大きさのワーク領域５００を対応させる。これにより、第２の実施形態の演算装置１０では、パケットに対する演算処理を実行する際に記憶領域の大きさが大きいワーク領域を使用する場合でも、それぞれのプロセッサ３０がパケットに対する演算処理を実行する際のワーク領域５００の競合が発生することなく、演算装置１０は、外部ブロック１００から要求された複数の演算処理を並列に実行することができる。
【０１５８】
なお、図８および図９に示した演算装置１０の動作の一例では、次のプロセッサ３０に演算処理を引き継ぐパケット以外は、パケットがパケットキュー２１０に格納された順番でワークメモリ５０内のワーク領域５００の使用権を付与する場合について説明した。しかし、パケットキュー２１０には、それぞれのプロセッサ３０が演算処理を実行するパケットが分散して格納されるとは限らず、同じプロセッサ３０（例えば、プロセッサ３１）が演算処理を実行するパケットが連続してパケットキュー２１０内に格納される場合もある。
【０１５９】
＜第３の実施形態＞
次に、本発明の第３の実施形態について説明する。本第３の実施形態の演算装置は、キュー内に、ワーク領域の使用権が付与された同一のプロセッサが処理するパケットの数が予め定めた閾値以上とならないように、ワーク領域の使用権を付与する順番を制御するという考え方を適用した演算装置である。つまり、本第３の実施形態の演算装置は、パケットに対して演算処理を実行するプロセッサに付与するワーク領域の使用権が偏らないように制御することによって、特定のプロセッサがワーク領域の使用権を占有してしまうことを防止する構成の演算装置である。
【０１６０】
本第３の実施形態の演算装置では、ワークメモリ５０の使用権を付与する順番を制御するための機能が、キュー制御部および再エントリ判定部に加わること以外は、演算装置の構成や処理手順は、第１または第２の実施形態の演算装置１０と同様である。従って、以下の説明においては、本第３の実施形態の演算装置を演算装置１０とし、演算装置１０に備えたそれぞれの構成要素に加わった機能のみを説明する。
【０１６１】
キュー制御部２２０には、パケットキュー２１０内に、ワーク領域５００の使用権が付与された同一のプロセッサ３０が処理するパケットの数が予め定めた閾値（以下、「有使用権パケット数」という）以上とならないように、それぞれのパケットに対して付与するワーク領域５００の使用権を制御する機能が加わる。なお、有使用権パケット数は、それぞれのプロセッサ３０毎に設定することができる。
【０１６２】
より具体的には、まず、キュー制御部２２０は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号を確認する。そして、キュー制御部２２０は、すでにワーク領域５００の使用権が付与されているパケットに含まれるプロセッサ番号と、ワーク領域５００の使用権が付与されていないパケットに含まれるプロセッサ番号とが同じであるか否かを確認する。この確認の結果、すでにワーク領域５００の使用権が付与されている同じプロセッサ番号が含まれるパケットが、パケットキュー２１０内に予め定めた閾値以上ある場合には、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタに「未使用」の情報がある場合でも、同じプロセッサ番号が含まれるワーク領域５００の使用権を付与していないパケットに対しては、ワーク領域５００の使用権を付与しない。
【０１６３】
再エントリ判定部２３０には、パケットキュー２１０内に、ワーク領域５００の使用権が付与された同一のプロセッサ３０が処理するパケットの数が有使用権パケット数以上とならないように、それぞれのパケットに付与されているワーク領域５００の使用権の開放を制御する機能が加わる。
【０１６４】
より具体的には、まず、再エントリ判定部２３０は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号を確認する。そして、再エントリ判定部２３０は、すでにワーク領域５００の使用権が付与されているパケットに含まれるプロセッサ番号と、パケットキュー２１０に再度格納（エントリ）するパケットに含まれるプロセッサ番号とが同じであるか否かを確認する。この確認の結果、すでにワーク領域５００の使用権が付与されている同じプロセッサ番号が含まれるパケットが、パケットキュー２１０内に有使用権パケット数以上ある場合には、パケットキュー２１０に再度格納（エントリ）するパケットのパケット状態情報が「処理継続」である場合でも、パケットキュー２１０に再度格納（エントリ）するパケットに付与されたワーク領域５００の使用権を開放する。
【０１６５】
なお、パケットキュー２１０に再度格納（エントリ）するパケットに付与されたワーク領域５００の使用権を開放すると、ワーク領域５００に記憶されている（残している）演算対象データが書き換えられてしまうことになる。このため、再エントリ判定部２３０は、パケット状態情報が「処理継続」であるが、ワーク領域５００の使用権を開放する演算処理後のパケットを出力するプロセッサ３０に、演算処理を実行した結果の演算対象データ、すなわち、次のプロセッサ３０に引き継ぐ演算対象データを含めた演算処理後のパケット全体を出力するように指示する。
【０１６６】
＜第３の動作＞
ここで、第３の実施形態の演算装置１０において、ワーク領域５００の使用権が付与された同一のプロセッサ３０が処理するパケットキュー２１０内のパケットの数が有使用権パケット数以上とならないように、ワーク領域５００の使用権の付与を制御する場合の動作の一例について説明する。本第３の動作の説明でも、パケットキュー２１０およびワークメモリ５０内のパケットに着目して、演算装置１０の動作を説明する。なお、本第３の動作では、有使用権パケット数が全てのプロセッサ番号に対して同じ値が適用される、すなわち、演算装置１０内の全てのプロセッサ３０に対して同じ有使用権パケット数が適用されるものとする。また、有使用権パケット数は、有使用権パケット数＝１であるものとする。つまり、パケットキュー２１０内には、同じプロセッサ３０が演算処理を実行するワーク領域５００の使用権が付与されたパケットが、１つずつしか存在しないものとする。図１０は、本第３の実施形態の演算装置１０の動作におけるそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例を示した図である。
【０１６７】
図１０には、図８に示した第１の実施形態の演算装置１０の動作におけるワークメモリ５０内のパケットの状態の一例と同様に、ワークメモリ５０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」および「プロセッサ番号」を示している。また、図１０には、図８に示した第１の実施形態の演算装置１０の動作におけるパケットキュー２１０内のパケットの状態の一例と同様に、パケットキュー２１０内のパケットの状態として、それぞれのパケットに含まれる「演算対象データ」、「プロセッサ番号」、「ワークメモリ番号」、および「パケット状態情報」を示している。また、パケットキュー２１０内のパケットの状態には、図９に示した第２の実施形態の演算装置１０の動作におけるパケットキュー２１０内のパケットの状態の一例と同様に、さらに、「使用メモリ数」も示している。ただし、使用メモリ数は、使用メモリ数＝１のみであるものとする。
【０１６８】
なお、図１０に示したそれぞれのパケットの状態における「プロセッサ番号」および「ワークメモリ番号」には、図８および図９に示した第１の実施形態および第２の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、それぞれのプロセッサ３０の符号の下１桁の数字およびそれぞれのワーク領域５００の符号の下１桁の数字で示している。また、図１０に示したそれぞれのパケットの状態においても、説明を容易にするため、図８および図９に示した第１の実施形態および第２の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、「パケット番号」の項目と「処理中プロセッサ」の項目とを示している。
【０１６９】
まず、第３の実施形態の演算装置１０の動作においては、図１０（ａ）に示したように、ワークメモリ５０内に３つのパケットが記憶され、パケットキュー２１０内に３つのパケットが格納され、パケットキュー２１０内に格納されたパケットの内、先頭のパケットと３番目のパケットとに、キュー制御部２２０によってすでにワーク領域５００の使用権が付与されている状態を、第３の実施形態の演算装置１０の初期の状態として、以降の動作を説明する。  
【０１７０】
より具体的には、ワークメモリ５０の初期状態は、ワーク領域５０１に、パケットキュー２１０に最初に入力された、演算対象データＡに対してプロセッサ３１が演算処理を実行するパケット＃１が記憶されている状態である。また、ワーク領域５０２に、パケットキュー２１０に２番目に入力された、演算対象データＢに対してプロセッサ３２が演算処理を実行するパケット＃２が記憶され、ワーク領域５０３に、パケットキュー２１０に３番目に入力された、演算対象データＣに対してプロセッサ３３が演算処理を実行するパケット＃３が記憶されている状態である。
【０１７１】
また、パケットキュー２１０の初期状態は、格納領域２１１に、パケットキュー２１０に４番目に入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行する、ワーク領域５０４の使用権が付与されたパケット＃４が格納されている状態である。また、格納領域２１２に、パケットキュー２１０に５番目に入力された、演算対象データＥに対してプロセッサ３１が演算処理を実行する、ワーク領域５００の使用権が付与されていないパケット＃５が格納され、格納領域２１３に、パケットキュー２１０に６番目に入力された、演算対象データＦに対してプロセッサ３２が演算処理を実行する、ワーク領域５０５の使用権が付与されたパケット＃６が格納されている状態である。
【０１７２】
なお、図１０（ａ）を見て分かるように、パケットキュー２１０の２番目の格納領域２１２に格納されたパケット＃５は、パケットキュー２１０の３番目の格納領域２１３に格納されたパケット＃６よりも先頭に近いパケットであるにも関わらず、ワーク領域５００の使用権が付与されていない。このパケット＃５には、パケット＃６にワーク領域５００の使用権を付与する前の段階でワークメモリ５０内にワーク領域５０５が「未使用」の状態であったため、ワーク領域５０５の使用権が付与されてもよいはずである。しかし、現段階でワーク領域５０５の使用権が付与されていないのは、同じプロセッサ番号＝１が含まれ、すでにワーク領域５００の使用権が付与されているパケットが１つ以上（有使用権パケット数以上）存在するためである。より具体的には、本第３の動作では、有使用権パケット数＝１であるため、同じプロセッサ３１が演算処理を実行する、すでにワーク領域５０４の使用権が付与されたパケット＃４が先頭の格納領域２１１に格納されているため、パケット＃４と同じプロセッサ３１が演算処理を実行するパケット＃５には、ワーク領域５０５の使用権が付与されないのである。そして、プロセッサ番号＝２で、すでにワーク領域５００の使用権が付与された同じプロセッサ３２が演算処理を実行するパケットがパケットキュー２１０内に存在しないパケット＃６に、ワーク領域５０５の使用権が付与されたのである。
【０１７３】
この初期状態から、プロセッサ３１が、パケット＃１に含まれる演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３２に引き継ぐためにプロセッサ番号を「２」とし、パケット状態情報を「処理継続」に更新した演算処理後のパケット＃１を、再エントリ判定部２３０に出力する場合を考える。このとき、プロセッサ３１は、ワーク領域５０１に最終的に記憶されている次の演算対象データＡ２以外のパケット＃１、つまり、プロセッサ番号とパケット状態情報とのみを含んだ演算処理後のパケット＃１を、再エントリ判定部２３０に出力する（図６のステップＳ４９参照）。
【０１７４】
プロセッサ番号とパケット状態情報とのみを含んだ演算処理後のパケット＃１をプロセッサ３１から取得した再エントリ判定部２３０は、まず、パケットキュー２１０に格納されている、取得した演算処理後のパケット＃１に含まれるプロセッサ番号と同じプロセッサ番号で、すでにワーク領域５００の使用権が付与されたパケットの数を確認する。より具体的には、再エントリ判定部２３０は、演算処理後のパケット＃１に含まれるプロセッサ番号と同じプロセッサ番号＝２が書き込まれている、ワークメモリ使用状況管理レジスタ２４０内のそれぞれのワークメモリ管理レジスタの数を確認する。本第３の動作では、ワークメモリ管理レジスタ２４５に、プロセッサ３２を表す値が書き込まれているため、再エントリ判定部２３０は、すでにワーク領域５００の使用権が付与されているパケット（図１０（ａ）に示したパケット＃６が該当）が、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在すると判断する。
【０１７５】
なお、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタに、対応するプロセッサ３０が演算処理を実行する際に使用するワーク領域５００を表す情報が含まれている場合には、再エントリ判定部２３０は、それぞれのプロセッサ管理レジスタを確認することによっても、同様の確認をすることができる。
【０１７６】
有使用権パケット数以上のパケットがパケットキュー２１０内に存在することを確認した再エントリ判定部２３０は、演算対象データＡ２を含めた演算処理後のパケット＃１全体を出力するように、プロセッサ３１に指示する。これは、演算処理後のパケット＃１に含まれるパケット状態情報は「処理継続」であるが、プロセッサ３２に引き継ぐ演算対象データＡ２が、他のプロセッサ３０によって書き換えられてしまう可能性があるため、引き継ぐ演算対象データＡ２を退避するためである。
【０１７７】
再エントリ判定部２３０から演算処理後のパケット＃１全体を出力するように指示を受けたプロセッサ３１は、ワーク領域５０１に最終的に記憶されている次の演算対象データＡ２を含んだ演算処理後のパケット＃１全体を再度、再エントリ判定部２３０に出力する（図６のステップＳ４８参照）。
【０１７８】
演算処理後のパケット＃１全体をプロセッサ３１から取得した再エントリ判定部２３０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「未使用」を示す情報に更新する（図７のステップＳ５１参照）。そして、再エントリ判定部２３０は、取得した演算処理後のパケット＃１に含まれるパケット状態情報は「処理継続」であるが、今回取得した演算処理後のパケット＃１全体を、パケットキュー２１０内の最後尾の格納領域に再度格納（エントリ）する（図７のステップＳ５３参照）。また、再エントリ判定部２３０は、取得した演算処理後のパケット＃１に含まれるパケット状態情報は「処理継続」であるが、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４１の情報を、「未使用」を示す情報に更新することによって、演算処理後のパケット＃１に付与されたワーク領域５０１の使用権を開放する（図７のステップＳ５４参照）。
【０１７９】
また、キュー制御部２２０は、再エントリ判定部２３０によってプロセッサ３１に対応するプロセッサ管理レジスタ２５１の情報が「未使用」になり、プロセッサ３１がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されているパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃４を、プロセッサ３１に出力させる。また、キュー制御部２２０は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「使用中」を示す情報に更新する（図５のステップＳ３３参照）。
【０１８０】
その後、プロセッサ３１は、入力されたパケット＃４に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３１とワーク領域５０４とが１対１に接続された後（図６のステップＳ４２参照）、パケット＃４に含まれる演算対象データＤをワーク領域５０４に転送（図６のステップＳ４３参照）し、演算対象データＤに対する演算処理を実行する（図６のステップＳ４４参照）。
【０１８１】
また、キュー制御部２２０は、再エントリ判定部２３０によってワーク領域５０１に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４１の情報が「未使用」になり、ワーク領域５０１の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５００の使用権が付与されていないパケットの内、最もパケットキュー２１０の先頭に近いパケット＃５に、ワーク領域５０１の使用権を付与する（図４のステップＳ２３参照）。これは、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、同じプロセッサ番号＝１が含まれ、すでにワーク領域５００の使用権が付与されているパケットが、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在しなくなった、つまり、「０」になったためである。
【０１８２】
図１０（ｂ）は、このときのパケットキュー２１０およびワークメモリ５０内のパケットの状態を示している。より具体的には、ワークメモリ５０の状態は、プロセッサ３１によって処理後のパケット＃１全体が出力されたことにより、ワーク領域５０１にパケットが記憶されていない状態となっている。また、ワーク領域５０４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶されている状態となっている。なお、ワークメモリ５０内のワーク領域５０２およびワーク領域５０３は、プロセッサ３２によるパケット＃２に含まれる演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に含まれる演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。
【０１８３】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはワーク領域５０１の使用権が付与されたパケット＃５が格納され、同様に、格納領域２１２にはすでにワーク領域５０５の使用権が付与されたパケット＃６が格納され、パケットキュー２１０内の最後尾の格納領域２１３には再エントリ判定部２３０によって再度格納（エントリ）された演算処理後のパケット＃１が格納されている状態になる。
【０１８４】
なお、上述したように、格納領域２１３に格納される演算処理後のパケット＃１は、パケット状態情報が「処理継続」のパケットであるが、再エントリ判定部２３０の指示に応じて、プロセッサ３１が演算処理後のパケット＃１全体を出力しているため、演算対象データＡ２が格納されている状態である。また、格納領域２１３に格納される演算処理後のパケット＃１は、パケット状態情報が「処理継続」のパケットであるが、再エントリ判定部２３０によって演算処理後のパケット＃１に付与されたワーク領域５０１の使用権が開放されているため、ワーク領域５００の使用権は付与されていない状態である。これは、すでにワーク領域５０５の使用権が付与されたパケット＃６が、演算処理後のパケット＃１が格納されている格納領域２１３よりも前の格納領域２１２に格納されているため、パケット＃６と同じプロセッサ３２が演算処理を実行する演算処理後のパケット＃１には、ワーク領域５００の使用権が付与されないためである。
【０１８５】
このように、第３の実施形態の演算装置１０でも、第１の実施形態および第２の実施形態の演算装置１０と同様に、演算装置１０に備えたワークメモリ５０内のそれぞれのワーク領域５００の使用状況を常時監視し、監視したワーク領域５００の使用状況に応じて、パケットに対する演算処理を実行する際に必要な数のワーク領域５００の使用権を付与する。これにより、第２の実施形態の演算装置１０でも、第１の実施形態および第２の実施形態の演算装置１０と同様に、それぞれのプロセッサ３０でワーク領域５００の競合が発生することなく、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して並列に実行することができる。
【０１８６】
また、第３の実施形態の演算装置１０では、演算装置１０に備えたワークメモリ５０内のそれぞれのワーク領域５００の使用状況から、パケットキュー２１０に格納されている、ワーク領域５００の使用権が付与されたパケットの数を確認する。そして、第３の実施形態の演算装置１０では、ワーク領域５００の使用権が付与された同一のプロセッサ３０が処理するパケットの数が予め定めた有使用権パケット数以上とならないように、ワーク領域５００の使用権の付与を制御する。これにより、第３の実施形態の演算装置１０では、特定のプロセッサ３０が演算処理を実行するパケットが、ワークメモリ５０内のワーク領域５００の使用権を占有してしまうことを防止することができる。このことにより、第３の実施形態の演算装置１０では、それぞれのプロセッサ３０によるワーク領域５００の競合が発生することなく、それぞれのプロセッサ３０の稼働率を向上させることができる。なお、本第３の実施形態におけるワーク領域５００の使用権が付与された同一のプロセッサ３０が処理するパケットの数が予め定めた有使用権パケット数以上とならないようにワーク領域５００の使用権の付与を制御するという考え方は、第１および第２の実施形態のいずれの演算装置１０にも適用することができる。
【０１８７】
なお、図８〜図１０に示した演算装置１０の動作の一例では、それぞれのプロセッサ３０が、入力された演算処理を実行するパケットに含まれるワークメモリ番号を、接続切り替え部４０内の対応するアドレス変換部４００に出力し、対応するアドレス変換部４００がプロセッサ３０とワーク領域５００とを１対１に接続した後に、演算対象データをワーク領域５００に転送して、演算対象データに対する演算処理を実行する場合について説明した。しかし、プロセッサ３０とワーク領域５００とを１対１に接続させるためのワークメモリ番号のアドレス変換部４００への出力は、それぞれのプロセッサ３０が行うのではなく、パケット管理部２０が行う構成にすることもできる。
【０１８８】
＜第４の実施形態＞
次に、本発明の第４の実施形態について説明する。本第４の実施形態の演算装置は、パケット管理部がプロセッサ３０とワーク領域との接続切り替えを制御するという考え方を適用した演算装置である。図１１は、本第４の実施形態における演算装置の概略構成の一例を示したブロック図である。図１１に示した演算装置１１は、パケット管理部２１と、３つのプロセッサ３１〜プロセッサ３３と、３つのローカルメモリ３１１〜ローカルメモリ３３１と、接続切り替え部４１と、ワークメモリ５０と、を備えている。なお、図１１には、演算装置１１に接続される外部ブロック１００も併せて示している。
【０１８９】
なお、本第４の実施形態の演算装置１１は、図１に示した第１〜第３の実施形態の演算装置１０のパケット管理部２０と接続切り替え部４０とのそれぞれが、パケット管理部２１と接続切り替え部４１とのそれぞれに代わった構成であり、その他の構成要素は、第１〜第３の実施形態の演算装置１０の構成要素と同様である。以下の説明においては、第１〜第３の実施形態の演算装置１０と異なる構成要素の動作のみを説明し、第１〜第３の実施形態の演算装置１０と同様の構成要素には、同一の符号を付与して、詳細な説明は省略する。
【０１９０】
パケット管理部２１は、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０と同様に、外部ブロック１００から入力された複数のパケットのそれぞれを一旦格納し、格納したそれぞれのパケットを、いずれか１つのプロセッサ３０に割り当てる。パケット管理部２１は、パケットキュー２６０と、キュー制御部２２１と、再エントリ判定部２３０と、ワークメモリ使用状況管理レジスタ２４０と、プロセッサ使用状況管理レジスタ２５０と、を備えている。
【０１９１】
なお、パケット管理部２１は、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０内のパケットキュー２１０とキュー制御部２２０とのそれぞれが、パケットキュー２６０とキュー制御部２２１とのそれぞれに代わった構成であり、その他の構成要素は、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０の構成要素と同様である。以下の説明においては、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０と異なる構成要素の動作のみを説明し、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０と同様の構成要素には、同一の符号を付与して、詳細な説明は省略する。
【０１９２】
キュー制御部２２１は、第１〜第３の実施形態の演算装置１０に備えたキュー制御部２２０と同様に、外部ブロック１００から入力されたそれぞれのパケットのパケットキュー２６０への格納（エントリ）と、プロセッサ３０とワークメモリ５０とのそれぞれの使用状況に応じた、パケットキュー２６０に格納されたパケットのプロセッサ３０への出力とを制御する。
【０１９３】
ただし、キュー制御部２２１は、第１〜第３の実施形態の演算装置１０に備えたキュー制御部２２０と異なり、プロセッサ３０に出力するパケットを選択した後、まず、パケットキュー２６０に、選択したパケットに含まれるワークメモリ番号を、選択したパケットに含まれるプロセッサ番号に対応するアドレス変換部に出力させる。その後、対応するアドレス変換部から、プロセッサ３０とワーク領域５００との接続の切り替えが完了したことを表す通知を受け取った後に、プロセッサ３０に出力するパケットとして選択したパケットに含まれる演算対象データを、パケットキュー２６０から対応するプロセッサ３０に出力させる。
【０１９４】
パケットキュー２６０は、第１〜第３の実施形態の演算装置１０に備えたパケットキュー２１０と同様に、外部ブロック１００から入力された複数のパケット、および再エントリ判定部２３０から入力された、引き続き演算処理を実行するパケットを順次格納する。ただし、パケットキュー２６０は、第１〜第３の実施形態の演算装置１０に備えたパケットキュー２１０とは異なり、格納しているパケットに含まれるワークメモリ番号を、プロセッサ番号に対応するいずれか１つのアドレス変換部に、格納しているパケットに含まれる演算対象データを、プロセッサ番号に対応するいずれか１つのプロセッサ３０に出力する。なお、パケットキュー２６０に格納されたそれぞれのパケットの情報を出力する順番は、第１〜第３の実施形態の演算装置１０に備えたキュー制御部２２０と同様に動作するキュー制御部２２１によって制御される。
【０１９５】
図１１には、パケットを格納する５つの格納領域（格納領域２６１〜格納領域２６５）を備えたパケットキュー２６０の構成を示している。なお、図１１において、パケットキュー２６０内のそれぞれの格納領域内に示した“＃（シャープ）”に続く数字は、第１〜第３の実施形態の演算装置１０に備えたパケットキュー２１０と同様に、パケットがパケットキュー２６０に格納される順番を表している。
【０１９６】
接続切り替え部４１は、第１〜第３の実施形態の演算装置１０に備えた接続切り替え部４０と同様に、それぞれのプロセッサ３０とワークメモリ５０内のそれぞれのワーク領域５００とが１対１で対応するように、プロセッサ３０とワーク領域との接続およびアドレスを切り替える。接続切り替え部４１は、アドレス変換部４１１〜アドレス変換部４１３と、クロスバスイッチ４５０と、を備えている。
【０１９７】
なお、接続切り替え部４１は、第１〜第３の実施形態の演算装置１０に備えた接続切り替え部４０内のアドレス変換部４０１〜アドレス変換部４０３のそれぞれが、アドレス変換部４１１〜アドレス変換部４１３のそれぞれに代わった構成であり、クロスバスイッチ４５０は、第１〜第３の実施形態の演算装置１０に備えた接続切り替え部４０と同様である。以下の説明においては、第１〜第３の実施形態の演算装置１０に備えた接続切り替え部４０と異なるアドレス変換部４１１〜アドレス変換部４１３の動作のみを説明し、第１〜第３の実施形態の演算装置１０に備えた接続切り替え部４０と同様のクロスバスイッチ４５０には、同一の符号を付与して、詳細な説明は省略する。
【０１９８】
アドレス変換部４１１〜アドレス変換部４１３のそれぞれは、第１〜第３の実施形態の演算装置１０に備えたアドレス変換部４０１〜アドレス変換部４０３のそれぞれと同様に、演算装置１１に備えた３つのプロセッサ３１〜プロセッサ３３のそれぞれに対応し、対応するプロセッサ３０と、対応するプロセッサ３０が演算処理を実行する際に使用するワークメモリ５０内のワーク領域５００とを１対１に対応付ける。なお、以下の説明においては、３つのアドレス変換部４１１〜アドレス変換部４１３のそれぞれを区別せずに表す場合には、「アドレス変換部４１０」という。
【０１９９】
また、それぞれのアドレス変換部４１０は、クロスバスイッチ４５０を制御して、対応するプロセッサ３０とワーク領域５００との接続の切り替えが完了した後、ワーク領域５００の接続が完了したことを表す通知を、パケット管理部２１内のキュー制御部２２１に通知する。
【０２００】
＜第４の動作＞
演算装置１１における動作は、それぞれのプロセッサ３０とそれぞれのワーク領域５００とが１対１で対応するように、プロセッサ３０とワーク領域との接続およびアドレスを切り替えるためのワークメモリ番号の出力元が、それぞれのプロセッサ３０からパケット管理部２１に代わったのみであり、第１〜第３の実施形態の演算装置１０における動作と同様に考えることができる。従って、演算装置１１の動作に関する詳細な説明は省略する。
【０２０１】
このように、第４の実施形態の演算装置１１でも、第１〜第３の実施形態の演算装置１０と同様に、プロセッサ３０とワーク領域５００とは１対１で対応させる。これにより、第４の実施形態の演算装置１１でも、第１〜第３の実施形態の演算装置１０と同様に、それぞれのプロセッサ３０でワーク領域５００の競合が発生することなく、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して並列に実行することができる。
【０２０２】
また、第４の実施形態の演算装置１１では、プロセッサ３０とワーク領域５００との接続の切り替えを、パケットに対して演算処理を行うプロセッサ３０と異なるパケット管理部２１が行う。これにより、第４の実施形態の演算装置１１では、プロセッサ３０がプロセッサ３０とワーク領域５００との接続の切り替えを行うための処理の負荷を軽減すると共に、プロセッサ３０とワーク領域５００との接続の切り替えが完了から、演算対象データのワーク領域５００への転送を開始するまでの時間、つまり、プロセッサ３０におけるオーバーヘッド時間を削減することができる。なお、本第４の実施形態におけるパケット管理部がプロセッサ３０とワーク領域との接続切り替えを制御するという考え方は、第１〜第３の実施形態のいずれの演算装置１０にも適用することができる。
【０２０３】
なお、第１〜第３の実施形態の演算装置１０および第４の実施形態の演算装置１１では、それぞれのパケットに、演算処理の対象となる演算対象データが含まれ、対応するプロセッサ３０が、演算処理を実行する演算対象データを対応するワーク領域５００に転送する構成ついて説明した。しかし、演算装置は、演算対象データが含まれるパケットに対して演算処理を実行する構成に限られるものではない。例えば、外部ブロック１００が、演算処理の対象となる演算対象データを外部もメモリに記憶し、外部メモリに記憶されている演算対象データに対して演算処理を実行する構成の演算装置も考えられる。
【０２０４】
＜第５の実施形態＞
次に、本発明の第５の実施形態について説明する。本第５の実施形態の演算装置は、演算対象データをパケットと異なる他の構成要素から取得し、取得した演算対象データに対して要求された演算処理を実行する構成の演算装置である。図１２は、本第５の実施形態における演算装置の概略構成の一例を示したブロック図である。図１２に示した演算装置１２は、パケット管理部２２と、３つのプロセッサ３１〜プロセッサ３３と、３つのローカルメモリ３１１〜ローカルメモリ３３１と、接続切り替え部４０と、ワークメモリ５２と、を備えている。なお、図１２には、本第５の実施形態の演算装置１２を備えたシステムの構成として、演算装置１２に接続される外部ブロック１００およびＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）制御部６０と、演算装置１２が接続されるバス７００に接続されたＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２００とも併せて示している。
【０２０５】
ＤＲＡＭ２００は、演算装置１２が演算処理を実行する対象の演算対象データが記憶されている演算装置１２の外部に配置された外部メモリである。ＤＭＡ制御部６０は、演算装置１２からの制御に応じて、バス７００を介したＤＲＡＭ２００と演算装置１２に備えたワークメモリ５２との間でＤＭＡ転送を行う演算対象データの転送制御部である。
【０２０６】
なお、本第５の実施形態における考え方、すなわち、演算対象データをパケットと異なる他の構成要素（図１２においては、ＤＲＡＭ２００）から取得して要求された演算処理を実行する構成は、図１に示した第１〜第３の実施形態の演算装置１０および図１１に示した第４の実施形態の演算装置１１のいずれの構成にも適用することができる。図１２に示した演算装置１２の構成は、図１に示した第１〜第３の実施形態の演算装置１０に適用した構成を示している。
【０２０７】
図１２に示した本第５の実施形態の演算装置１２を備えたシステムでは、演算対象データを、ＤＭＡ制御部６０によるＤＭＡ転送によって、ＤＲＡＭ２００とワークメモリ５２との間で転送する。このため、本第５の実施形態の演算装置１２には、第１の実施形態の演算装置１０において説明した「演算対象データ」の代わりに、パケットにおける演算処理の対象となる演算対象データが記憶されているＤＲＡＭ２００内の記憶領域の先頭アドレスを定める「先頭アドレス」と、演算対象データの大きさを定める「データサイズ」との情報が含まれているパケットが、外部ブロックから入力される。
【０２０８】
本第５の実施形態の演算装置１１は、図１に示した演算装置１０のパケット管理部２０とワークメモリ５０とのそれぞれが、パケット管理部２２とワークメモリ５２とのそれぞれに代わった構成であり、その他の構成要素は、図１に示した演算装置１０の構成要素と同様である。以下の説明においては、演算装置１０と異なる構成要素の動作のみを説明し、演算装置１０と同様の構成要素には、同一の符号を付与して、詳細な説明は省略する。
【０２０９】
ワークメモリ５２は、それぞれのパケットにおける演算対象データや、プロセッサ３０のそれぞれが演算対象データに対する演算処理を実行している途中で生成したデータなどを一時的に記憶する、図１に示した演算装置１０に備えたワークメモリ５０と同様の構成のメモリである。ただし、ワークメモリ５２は、演算対象データを、バス７００を介してＤＭＡ転送させる機能が加わる。図１２に示した演算装置１２の構成では、６つのワーク領域（ワーク領域５２１〜ワーク領域５２６）を備えたワークメモリ５２を示している。なお、以下の説明においては、６つのワーク領域５２１〜ワーク領域５２６のそれぞれを区別せずに表す場合には、「ワーク領域５２０」という。
【０２１０】
なお、図１２では、６つのワーク領域５２１〜ワーク領域５２６のそれぞれに対応して、ワークメモリ使用状況管理レジスタ２４０のワークメモリ管理レジスタも６つのワークメモリ管理レジスタ（ワークメモリ管理レジスタ２４１〜ワークメモリ管理レジスタ２４６）となっている。
【０２１１】
パケット管理部２２は、図１に示した演算装置１０に備えたパケット管理部２０と同様に、外部ブロック１００から入力された複数のパケットのそれぞれを一旦格納し、格納したそれぞれのパケットを、いずれか１つのプロセッサ３０に割り当てる。また、パケット管理部２２は、ＤＭＡ制御部６０によるＤＲＡＭ２００とワークメモリ５２との間での演算対象データのＤＭＡ転送を制御する。パケット管理部２２は、パケットキュー２１０と、キュー制御部２２２と、再エントリ判定部２３２と、ワークメモリ使用状況管理レジスタ２４０と、プロセッサ使用状況管理レジスタ２５０と、を備えている。
【０２１２】
なお、パケット管理部２２は、演算装置１０に備えたパケット管理部２０内のキュー制御部２２０と、再エントリ判定部２３０とのそれぞれが、キュー制御部２２２と再エントリ判定部２３２とのそれぞれに代わった構成であり、その他の構成要素は、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０の構成要素と同様である。以下の説明においては、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０と異なる構成要素の動作のみを説明し、第１〜第３の実施形態の演算装置１０に備えたパケット管理部２０と同様の構成要素には、同一の符号を付与して、詳細な説明は省略する。
【０２１３】
キュー制御部２２２は、第１〜第３の実施形態の演算装置１０に備えたキュー制御部２２０と同様に、外部ブロック１００から入力されたそれぞれのパケットのパケットキュー２１０への格納（エントリ）と、プロセッサ３０とワークメモリ５２とのそれぞれの使用状況に応じた、パケットキュー２１０に格納されたパケットのプロセッサ３０への出力とを制御する。
【０２１４】
また、キュー制御部２２２には、第１〜第３の実施形態の演算装置１０に備えたキュー制御部２２０の機能に、パケットに含まれる先頭アドレスおよびデータサイズの情報に基づいてＤＭＡ制御部６０を制御し、演算対象データをＤＲＡＭ２００からワークメモリ５２にＤＭＡ転送させる機能が加わる。
【０２１５】
より具体的には、まず、キュー制御部２２２は、パケットキュー２１０に格納されたそれぞれのパケットに含まれる先頭アドレスおよびデータサイズで定められたＤＲＡＭ２００内の記憶領域を確認する。そして、キュー制御部２２２は、ＤＲＡＭ２００内の記憶領域を確認したパケットに含まれるワークメモリ番号で定められたワークメモリ５２内のワーク領域５２０の使用状況を、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報から確認する。このＤＲＡＭ２００内の記憶領域とワークメモリ管理レジスタの情報を確認した結果、対応するワーク領域５２０を使用することができる状況である場合、つまり、ワークメモリ管理レジスタの情報が、データサイズ定められた大きさの演算対象データを記憶する分だけ「未使用」である場合、キュー制御部２２２は、ワーク領域の使用権を付与する。そして、キュー制御部２２２は、先頭アドレスからデータサイズ分の演算対象データの、対応するワーク領域５２０へのＤＭＡ転送を、ＤＭＡ制御部６０に対して指示する。
【０２１６】
キュー制御部２２２からＤＭＡ転送の指示が入力されたＤＭＡ制御部６０は、キュー制御部２２２から指定された先頭アドレスからデータサイズ分の演算対象データを、同じく指定されたワーク領域５２０にＤＭＡ転送する。
【０２１７】
また、キュー制御部２２２は、ワーク領域の使用権を付与したパケットに含まれるワークメモリ番号に対応するワークメモリ使用状況管理レジスタ２４０内の、対応するワーク領域５２０のワークメモリ管理レジスタの情報を「使用中」に変更する。その後、キュー制御部２２２は、ＤＭＡ制御部６０によるＤＲＡＭ２００からワーク領域５２０への演算対象データのＤＭＡ転送が完了した後、ＤＭＡ転送が完了した演算対象データに対して演算処理を実行するパケットを、パケットキュー２１０から対応するプロセッサ３０に出力させる。
【０２１８】
パケットキュー２１０からパケットが入力されたプロセッサ３０は、入力されたパケットに含まれるワークメモリ番号を取得して対応するアドレス変換部４００に出力し、対応するワーク領域５２０と１対１に接続された後、対応するワーク領域５２０にＤＲＡＭ２００から転送された演算対象データに対する演算処理を実行する。
【０２１９】
再エントリ判定部２３２は、第１〜第３の実施形態の演算装置１０に備えた再エントリ判定部２３０と同様に、それぞれのプロセッサ３０から入力されたそれぞれのパケットの外部ブロック１００への出力またはパケットキュー２１０への再度の格納（エントリ）と、それぞれのパケットに付与されているワーク領域５２０の使用権の開放とを制御する。
【０２２０】
また、再エントリ判定部２３２には、第１〜第３の実施形態の演算装置１０に備えた再エントリ判定部２３０の機能に、パケットに含まれる先頭アドレスおよびデータサイズの情報に基づいてＤＭＡ制御部６０を制御し、ワーク領域５２０の使用権の開放する前に、演算対象データをワークメモリ５２からＤＲＡＭ２００にＤＭＡ転送させる機能が加わる。
【０２２１】
より具体的には、まず、再エントリ判定部２３２は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理完了」を示している場合には、演算処理後のパケットを外部ブロック１００に出力すると判定し、外部ブロック１００に出力する演算処理後のパケットに含まれる先頭アドレスおよびデータサイズで定められたＤＲＡＭ２００内の記憶領域を確認する。そして、再エントリ判定部２３２は、演算処理後のパケットに含まれるワークメモリ番号を確認し、対応するワーク領域５２０に記憶されている演算処理後の演算対象データの、ＤＲＡＭ２００の先頭アドレスからデータサイズ分だけのＤＭＡ転送を、ＤＭＡ制御部６０に対して指示する。
【０２２２】
続いて、再エントリ判定部２３２は、ＤＭＡ制御部６０によるワーク領域５２０からＤＲＡＭ２００への演算処理後の演算対象データのＤＭＡ転送が完了した後、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を「未使用」に変更し、さらに、この演算処理後のパケットに対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を「未使用」に変更して、演算処理後のパケットに付与されているワーク領域５２０の使用権を開放する。そして、再エントリ判定部２３２は、演算処理後のパケットを外部ブロック１００に出力する。
【０２２３】
また、再エントリ判定部２３２は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」を示している場合には、演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）すると判定し、演算処理後のパケットに付与されているワーク領域５２０の使用権の開放が必要であるか否かを確認する。この確認の結果、ワーク領域５２０の使用権の開放が必要である場合には、再度パケットキュー２１０に格納（エントリ）する演算処理後のパケットに含まれる先頭アドレスおよびデータサイズで定められたＤＲＡＭ２００内の記憶領域を確認する。また、再エントリ判定部２３２は、再度パケットキュー２１０に格納（エントリ）する演算処理後のパケットに含まれるワークメモリ番号を確認し、対応するワーク領域５２０に記憶されている演算処理後の演算対象データの、ＤＲＡＭ２００の先頭アドレスからデータサイズ分だけのＤＭＡ転送を、ＤＭＡ制御部６０に対して指示する。
【０２２４】
再エントリ判定部２３２からＤＭＡ転送の指示が入力されたＤＭＡ制御部６０は、再エントリ判定部２３２から指定されたワーク領域５２０に記憶されている演算処理後の演算対象データを、同じく指定された先頭アドレスからデータサイズ分だけＤＲＡＭ２００にＤＭＡ転送する。
【０２２５】
続いて、再エントリ判定部２３２は、ＤＭＡ制御部６０によるワーク領域５２０からＤＲＡＭ２００への演算処理後の演算対象データのＤＭＡ転送が完了した後、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を「未使用」に変更し、さらに、この演算処理後のパケットに対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を「未使用」に変更して、演算処理後のパケットに付与されているワーク領域５２０の使用権を開放する。そして、再エントリ判定部２３２は、演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）する。
【０２２６】
このような構成によって、パケット管理部２２は、外部ブロック１００から入力された複数のパケット、およびプロセッサ３０から入力された演算処理後のパケットのプロセッサ３０への出力、または外部ブロック１００への出力をする際に、ＤＭＡ制御部６０によるＤＲＡＭ２００とワークメモリ５２との間での演算対象データのＤＭＡ転送を制御する。
【０２２７】
なお、図１２に示した演算装置１２では、ＤＭＡ制御部６０を演算装置１２の外部に備えた構成を示したが、ＤＭＡ制御部６０を備える位置は、本第５の実施形態の演算装置１２に示した位置に限定されるものではない。例えば、ＤＭＡ制御部６０を、演算装置１２の内部に備えた構成にする、すなわち、ＤＭＡ制御部６０が演算装置１２の構成要素の一つである構成にすることもできる。
【０２２８】
次に、演算装置１２による演算処理の処理手順について説明する。なお、演算装置１２が実行する演算処理の全体の処理の流れは、図２に示した第１〜第３の実施形態の演算装置１０における演算処理の全体の処理の流れと同様であるため、詳細な説明は省略する。そして、以下の説明においては、演算装置１２のそれぞれの処理において演算装置１０のそれぞれの処理と異なる処理の処理手順について説明する。
【０２２９】
まず、演算装置１２に備えたパケット管理部２２内のキュー制御部２２２によるワークメモリ５２内のワーク領域５２０の使用権付与処理（図２に示したステップＳ２）の処理手順について説明する。図１３は、本第５の実施形態の演算装置１２に備えたキュー制御部２２２がワークメモリ５２内のワーク領域５２０の使用権を付与する使用権付与処理の処理手順を示したフローチャートである。
【０２３０】
キュー制御部２２２は、使用権付与処理を開始すると、まず、ステップＳ２２１において、ワークメモリ５２内のそれぞれのワーク領域５２０の内、パケットの演算処理に使用することができるワーク領域５２０、すなわち、未使用のワーク領域５２０があるか否かを確認する。より具体的には、キュー制御部２２２は、ワークメモリ使用状況管理レジスタ２４０内のそれぞれのワークメモリ管理レジスタの情報を確認し、ワークメモリ管理レジスタの情報が「未使用」であるワーク領域５２０を検索する。ステップＳ２２１において、未使用のワーク領域５２０がない場合（ステップＳ２２１の“ＮＯ”）には、キュー制御部２２２は、使用権付与処理を完了する。
【０２３１】
また、ステップＳ２２１において、未使用のワーク領域５２０がある場合（ステップＳ２２１の“ＹＥＳ”）には、ステップＳ２２２において、キュー制御部２２２は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号を確認し、すでにワーク領域５２０の使用権が付与されている同一のプロセッサ３０が処理するパケットの数が、有使用権パケット数以上あるか否かを確認する。ステップＳ２２２において、すでにワーク領域５２０の使用権が付与されている同一のプロセッサ３０が処理するパケットの数が有使用権パケット数以上ある場合（ステップＳ２２２の“ＹＥＳ”）には、キュー制御部２２２は、使用権付与処理を完了する。
【０２３２】
また、ステップＳ２２２において、すでにワーク領域５２０の使用権が付与されている同一のプロセッサ３０が処理するパケットの数が有使用権パケット数以上ない場合（ステップＳ２２２の“ＮＯ”）には、ステップＳ２２３において、キュー制御部２２２は、パケットキュー２１０に格納済みのパケットにおいてワーク領域５２０の使用権が付与されていないパケットがあるか否かを確認する。ステップＳ２２３において、ワーク領域５２０の使用権が付与されていないパケットがない場合（ステップＳ２２３の“ＮＯ”）には、キュー制御部２２２は、使用権付与処理を完了する。
【０２３３】
また、ステップＳ２２３において、ワーク領域５２０の使用権が付与されていないパケットがある場合（ステップＳ２２３の“ＹＥＳ”）には、ステップＳ２２４において、キュー制御部２２２は、ステップＳ２２３において確認したワーク領域５２０の使用権が付与されていないパケットの内、最もパケットキュー２１０の先頭に近いパケットにワーク領域５２０の使用権を付与する。また、キュー制御部２２２は、パケットに使用権を付与したワーク領域５２０に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報を、「使用中」を示す情報に更新する。
【０２３４】
続いて、ステップＳ２２５において、キュー制御部２２２は、ワーク領域５２０の使用権を付与した、最もパケットキュー２１０の先頭に近いパケットに含まれる先頭アドレスおよびデータサイズを確認し、確認した先頭アドレスからデータサイズ分の演算対象データの、ＤＲＡＭ２００から対応するワーク領域５２０へのＤＭＡ転送を、ＤＭＡ制御部６０に指示し、使用権付与処理を完了する。
【０２３５】
このような処理によって、キュー制御部２２２は、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの情報から未使用のワーク領域５２０を確認し、ワーク領域５２０の使用権が付与されていないパケットに、ワーク領域５２０の使用権を付与する。そして、ＤＭＡ制御部６０に、ワーク領域５２０の使用権が付与されていないパケットに対応する演算対象データの、ＤＭＡ転送を指示する。なお、キュー制御部２２２は、使用権付与処理を常時行っている。すなわち、キュー制御部２２２は、パケットキュー２１０内にパケットが格納されている間、常に未使用のワーク領域５２０を検索して、使用権付与処理を行う。これにより、キュー制御部２２２は、ワークメモリ５２内のいずれかのワーク領域５２０が使用することができる状況になった後の早いタイミングで、他のパケットに対する演算処理を実行する際に使用する演算対象データを対応するワーク領域５２０に準備すると共に、このパケットにワーク領域５２０の使用権を付与することができる。
【０２３６】
次に、演算装置１２に備えたパケット管理部２２内のキュー制御部２２２によるキュー管理処理（図２に示したステップＳ３）の処理手順について説明する。図１４は、本第５の実施形態の演算装置１２に備えたキュー制御部２２２がパケットキュー２１０に格納されているパケットのプロセッサ３０への出力を管理するキュー管理処理の処理手順を示したフローチャートである。
【０２３７】
キュー制御部２２２は、キュー管理処理を開始すると、まず、ステップＳ３２１において、演算装置１２に備えたそれぞれのプロセッサ３０の内、パケットの演算処理を実行することができるプロセッサ３０、すなわち、未使用のプロセッサ３０があるか否かを確認する。より具体的には、キュー制御部２２２は、プロセッサ使用状況管理レジスタ２５０内のそれぞれのプロセッサ管理レジスタの情報を確認し、プロセッサ管理レジスタの情報が「未使用」であるプロセッサ３０を検索する。ステップＳ３２１において、未使用のプロセッサ３０がない場合（ステップＳ３２１の“ＮＯ”）には、キュー制御部２２２は、キュー管理処理を完了する。
【０２３８】
また、ステップＳ３２１において、未使用のプロセッサ３０がある場合（ステップＳ３２１の“ＹＥＳ”）には、ステップＳ３２２において、キュー制御部２２２は、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されているパケットの内、ステップＳ３２１において検索した未使用のプロセッサ３０を、演算処理を実行させるプロセッサ３０として定めているパケットがあるか否かを確認する。より具体的には、キュー制御部２２２は、ワーク領域５２０の使用権が付与されているパケットに含まれるプロセッサ番号を確認することによって、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットを検索する。ステップＳ３２２において、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットがない場合（ステップＳ３２２の“ＮＯ”）には、キュー制御部２２２は、キュー管理処理を完了する。
【０２３９】
また、ステップＳ３２２において、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットがある場合（ステップＳ３２２の“ＹＥＳ”）には、ステップＳ３２３において、キュー制御部２２２は、ＤＭＡ制御部６０に指示した、最もパケットキュー２１０の先頭に近いパケットに対応する演算対象データの、ＤＲＡＭ２００から対応するワーク領域５２０へのＤＭＡ転送が完了しているか否かを確認する。ステップＳ３２３の確認の結果、ＤＲＡＭ２００から対応するワーク領域５２０への演算対象データのＤＭＡ転送が完了していない場合（ステップＳ３２３の“ＮＯ”）には、ステップＳ３２２を繰り返して、演算対象データのＤＭＡ転送が完了するのを待つ。
【０２４０】
また、ステップＳ３２３の確認の結果、ＤＲＡＭ２００から対応するワーク領域５２０への演算対象データのＤＭＡ転送が完了している場合（ステップＳ３２３の“ＹＥＳ”）には、ステップＳ３２４において、キュー制御部２２２は、ステップＳ３２２において演算対象データのＤＭＡ転送が完了したワーク領域５２０に対応するパケットに対して演算処理を実行するプロセッサ３０に出力する。また、キュー制御部２２２は、プロセッサ３０に出力したパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を、「使用中」を示す情報に更新し、キュー管理処理を完了する。
【０２４１】
このような処理によって、キュー制御部２２２は、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報から未使用のプロセッサ３０を確認し、未使用のプロセッサ３０が演算処理を実行させるプロセッサ３０として定められているパケットの演算対象データのＤＭＡ転送が完了した後に、このパケットを対応するプロセッサ３０に出力する。なお、キュー制御部２２２は、キュー管理処理を常時行っている。すなわち、キュー制御部２２２は、パケットキュー２１０内にパケットが格納されている間、常に未使用のプロセッサ３０を検索して、キュー管理処理を行う。これにより、キュー制御部２２２は、演算装置１２に備えたいずれかのプロセッサ３０がパケットを受け付けることができる状況になった後に演算対象データのＤＭＡ転送が完了した早いタイミングで、対応するパケットを出力することができる。
【０２４２】
次に、演算装置１２に備えたプロセッサ３０による演算処理（図２に示したステップＳ４）の処理手順について説明する。図１５は、本第５の実施形態の演算装置１２に備えたプロセッサ３０が演算処理を実行する処理手順を示したフローチャートである。
【０２４３】
プロセッサ３０は、パケット管理部２２内のパケットキュー２１０から対応するパケットが入力されると、演算処理を開始する。まず、ステップＳ４２１において、プロセッサ３０は、入力されたパケットに含まれるワークメモリ番号を取得する。すなわち、入力されたパケットに対する演算処理を実行する際に使用するワーク領域５２０の情報を取得する。
【０２４４】
続いて、ステップＳ４２２において、プロセッサ３０は、取得したワークメモリ番号を、接続切り替え部４０内の対応するアドレス変換部４００に出力する。これにより、対応するアドレス変換部４００は、プロセッサ３０から入力されたワークメモリ番号に対応する、ワークメモリ番号とワーク領域５２０とを１対１に対応させたテーブルを参照して、プロセッサ３０が使用するワーク領域５２０を特定する。また、対応するアドレス変換部４００は、プロセッサ３０とワークメモリ５２内のワーク領域５２０とを１対１に接続させるクロスバスイッチ４５０の制御値をまとめたテーブルを参照してクロスバスイッチ４５０の制御値を決定し、決定した制御値をクロスバスイッチ４５０に出力する。これにより、クロスバスイッチ４５０は、アドレス変換部４００から入力された制御値に応じて、プロセッサ３０の信号線とワーク領域５２０の信号線との接続を切り替え、プロセッサ３０とワーク領域５２０とを１対１に接続させる。なお、アドレス変換部４００は、クロスバスイッチ４５０によるプロセッサ３０とワーク領域５２０との接続の切り替えが完了した後、ワーク領域５２０の接続が完了したことを表す通知を、対応するプロセッサ３０に通知する。
【０２４５】
続いて、ステップＳ４２３において、プロセッサ３０は、入力されたパケットに含まれる処理番号を、対応するアドレス変換部４００およびクロスバスイッチ４５０を介して、対応するワーク領域５２０に転送する。
【０２４６】
続いて、ステップＳ４２４において、プロセッサ３０は、ワーク領域５２０に転送したパケットに含まれる処理番号に対応した処理コードを、プロセッサ３０に接続されたローカルメモリから読み出して、演算対象データに対する演算処理を実行する。
【０２４７】
そして、演算対象データに対する演算処理を完了した後、ステップＳ４２５において、プロセッサ３０は、演算処理後のパケットのパケット状態情報およびプロセッサ番号を更新する。より具体的には、演算処理後のパケットが、演算処理を引き継ぐパケットである場合には、演算処理後のパケットのパケット状態情報を「処理継続」に更新し、さらに、プロセッサ番号を、引き続き演算処理を実行させる次のプロセッサ３０（別のプロセッサ３０または自身）のプロセッサ番号に更新する。また、演算処理後のパケットが、演算処理が完了したことにより外部ブロック１００に出力するパケットである場合には、演算処理後のパケットのパケット状態情報を「処理完了」に更新する。
【０２４８】
続いて、演算対象データに対する演算処理（ステップＳ４２４）と、パケット状態情報およびプロセッサ番号の更新（ステップＳ４２５）とが完了すると、ステップＳ４２６において、プロセッサ３０は、出力する演算処理後のパケットがあることを、パケット管理部２２内の再エントリ判定部２３２に通知する。再エントリ判定部２３２は、演算処理後のパケットの取得ができる状態である場合、パケットを受け付けることを表す通知を、プロセッサ３０に出力する。
【０２４９】
そして、プロセッサ３０は、再エントリ判定部２３２から演算処理後のパケットを受け付けることを表す通知を受け取ると、ステップＳ４２７において、プロセッサ３０は、演算処理後のパケットを、クロスバスイッチ４５０および対応するアドレス変換部４００を介して再エントリ判定部２３２に出力し、演算処理を完了する。なお、ここで再エントリ判定部２３２に出力する演算処理後のパケットは、パケット状態情報が「処理継続」であるか否かに関わらず、すなわち、パケット状態情報が「処理継続」であっても、パケット状態情報が「処理完了」であっても、ワーク領域５２０に最終的に記憶されている演算対象データ以外のパケットである。
【０２５０】
このような処理によって、プロセッサ３０は、入力されたパケットに対応し、すでに演算対象データが記憶されているワーク領域５２０を使用して、演算対象データに対する演算処理を実行する。そして、プロセッサ３０は、演算処理後のパケットのパケット状態情報を更新し、再エントリ判定部２３２に出力する。このとき、プロセッサ３０は、演算処理後のパケットのパケット状態情報に関わらず、演算対象データ以外の演算処理後のパケットを再エントリ判定部２３２に出力する。これにより、再エントリ判定部２３２は、ワーク領域５２０に記憶されている演算対象データのＤＲＡＭ２００へのＤＭＡ転送を行うか否かを判定し、その判定結果に応じて、ＤＭＡ制御部６０にＤＭＡ転送を指示することができ、不要なＤＭＡ転送を避けることができる。つまり、引き続き演算処理に使用する演算対象データは、ＤＲＡＭ２００へのＤＭＡ転送を行わず、ワーク領域５２０に記憶されている（残っている）状態にすることができ、ＤＭＡ転送を効率的に行うことができる。
【０２５１】
次に、演算装置１２に備えたパケット管理部２２内の再エントリ判定部２３２による再エントリ判定処理（図２に示したステップＳ５）の処理手順について説明する。図１６は、本第５の実施形態の演算装置１２に備えた再エントリ判定部２３２がパケットを再度格納する再エントリ判定処理の処理手順を示したフローチャートである。
【０２５２】
再エントリ判定部２３２は、再エントリ判定処理を開始すると、まず、ステップＳ５２１において、プロセッサ３０から演算処理後のパケットがあることを表す通知があるか否か、すなわち、プロセッサ３０からの演算処理後のパケットの出力許可要求があるか否かを確認する。ステップＳ５２１において、プロセッサ３０からの演算処理後のパケットの出力許可要求がない場合（ステップＳ５２１の“ＮＯ”）には、再エントリ判定部２３２は、再エントリ判定処理を完了する。
【０２５３】
また、ステップＳ５２１において、プロセッサ３０からの演算処理後のパケットの出力許可要求がある場合（ステップＳ５２１の“ＹＥＳ”）には、再エントリ判定部２３２は、プロセッサ３０から演算処理後のパケットを取得し、取得した演算処理後のパケットに対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタの情報を、「未使用」を示す情報に更新する。そして、ステップＳ５２２において、再エントリ判定部２３２は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」であるか否かを確認する。
【０２５４】
ステップＳ５２２において、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」である場合（ステップＳ５２２の“ＹＥＳ”）、すなわち、演算処理後のパケットが演算処理を引き継ぐパケットである場合には、ステップＳ５２３において、再エントリ判定部２３２は、プロセッサ３０から今回入力された演算処理後のパケットを、パケットキュー２１０内ですでにパケットが格納されている格納領域の次の格納領域、すなわち、現在の最後尾の格納領域に格納（エントリ）し、再エントリ判定処理を完了する。つまり、再エントリ判定部２３２は、今回入力された演算処理後のパケットにワーク領域５２０の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する。
【０２５５】
また、ステップＳ５２２において、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報が「処理継続」でない場合（ステップＳ５２２の“ＮＯ”）、すなわち、パケット状態情報が「処理完了」であり、外部ブロック１００に出力するパケットである場合には、ステップＳ５２４において、再エントリ判定部２３２は、取得した演算処理後のパケットに含まれる先頭アドレスおよびデータサイズを確認し、対応するワーク領域５２０に記憶されている演算処理後の演算対象データの、ＤＲＡＭ２００の確認した先頭アドレスからデータサイズ分のＤＭＡ転送を、ＤＭＡ制御部６０に対して指示する。
【０２５６】
続いて、ステップＳ５２５において、再エントリ判定部２３２は、ＤＭＡ制御部６０に指示した、演算処理後の演算対象データのワーク領域５２０からＤＲＡＭ２００へのＤＭＡ転送が完了しているか否かを確認する。ステップＳ５２５の確認の結果、ワーク領域５２０からＤＲＡＭ２００への演算対象データのＤＭＡ転送が完了していない場合（ステップＳ５２５の“ＮＯ”）には、ステップＳ５２５を繰り返して、演算対象データのＤＭＡ転送が完了するのを待つ。
【０２５７】
また、ステップＳ５２５の確認の結果、ワーク領域５２０からＤＲＡＭ２００への演算対象データのＤＭＡ転送が完了している場合（ステップＳ５２５の“ＹＥＳ”）には、ステップＳ５２６において、再エントリ判定部２３２は、入力された演算処理後のパケットに付与されたワーク領域５２０の使用権を開放する。より具体的には、ワークメモリ使用状況管理レジスタ２４０内の演算処理後のパケットに対応するワークメモリ管理レジスタの情報を、「未使用」を示す情報に更新することによって、ワーク領域５２０の使用権を開放する。
【０２５８】
続いて、ステップＳ５２７において、再エントリ判定部２３２は、ワーク領域５２０の使用権を開放した演算処理後のパケットを、外部ブロック１００に出力し、再エントリ判定処理を完了する。なお、ここで外部ブロック１００に出力する演算処理後のパケットは、パケット状態情報が「処理完了」であるが、ワーク領域５２０に最終的に記憶されている演算対象データ以外のパケットである。
【０２５９】
このような処理によって、再エントリ判定部２３２は、プロセッサ３０から入力された演算処理後のパケットのパケット状態情報に応じて、演算処理後のパケットの出力先を切り替える。なお、再エントリ判定部２３２は、再エントリ判定処理を常時行っている。すなわち、再エントリ判定部２３２は、演算装置１２が動作している間、常にプロセッサ３０から出力される演算処理後のパケットの出力許可要求を監視して、再エントリ判定処理を行う。そして、再エントリ判定処理では、パケット状態情報が「処理継続」である演算処理後のパケットを再度パケットキュー２１０に格納（エントリ）し、パケット状態情報が「処理完了」である演算処理後のパケットを外部ブロック１００に出力する。このとき、再エントリ判定部２３２が外部ブロック１００に出力する演算処理後のパケットは、パケット状態情報が「処理完了」であっても、演算対象データ以外の演算処理後のパケットを外部ブロック１００に出力する。このため、外部ブロック１００は、パケット状態情報が「処理完了」である演算処理後のパケットが入力されると、必要に応じてＤＲＡＭ２００から演算処理後の演算対象データを取得することができる。
【０２６０】
このように、演算装置１２では、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、パケットキュー２１０に格納されたそれぞれのパケットに対して常時行うことによって、外部ブロック１００から要求された複数の演算処理を並列に実行することができる。このとき、演算装置１２には、演算対象データ以外の情報を含むパケットが、外部ブロック１００から入力される。そして、演算装置１２では、演算処理の実行に合わせて、ＤＲＡＭ２００に記憶されている演算対象データを、ＤＭＡ転送でワークメモリ５２に転送し、演算処理後の演算対象データを、ＤＭＡ転送でＤＲＡＭ２００に転送する。これにより、演算装置１２に入力するパケットの大きさを小さくすることができると共に、それぞれのプロセッサ３０が演算対象データをワークメモリ５２に転送する必要がないため、プロセッサ３０におけるパケットのワークメモリ５２への転送に要する時間を削減することができる。また、演算対象データは、ＤＭＡ転送によって事前にワークメモリ５２に記憶させておくことができるため、プロセッサ３０とワーク領域５００との接続の切り替えが完了から、演算対象データに対する演算処理の実行を開始するまでの時間、つまり、プロセッサ３０が演算処理を実行するまでに待たされるオーバーヘッド時間を削減することができる。
【０２６１】
＜第５の動作＞
ここで、演算装置１２における動作の一例について説明する。演算装置１２の動作についても、第１〜第３の実施形態の演算装置１０における動作の説明と同様に、パケットキュー２１０およびワークメモリ５２内のパケットに着目して説明する。図１７は、本第５の実施形態の演算装置１２の動作におけるそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例を示した図である。
【０２６２】
図１７には、ＤＲＡＭ２００のアドレスとＤＲＡＭ２００内に記憶された演算対象データとの対応、すなわち、それぞれの演算対象データのＤＲＡＭ２００内の配置を示している。また、図１７には、ワークメモリ５２内のパケットの状態として、それぞれのパケットに対応する「演算対象データ」および「プロセッサ番号」を示している。また、図１７には、パケットキュー２１０内のパケットの状態として、それぞれのパケットに対応する演算対象データが記憶されているＤＲＡＭ２００の記憶領域を表す「先頭アドレス」、「プロセッサ番号」、「ワークメモリ番号」、および「パケット状態情報」を示している。また、パケットキュー２１０内のパケットの状態には、「使用メモリ数」も示している。この使用メモリ数は、ＤＲＡＭ２００に記憶されている演算対象データの大きさを定める「データサイズ」に対応する。例えば、使用メモリ数＝１である場合には、ＤＲＡＭ２００内に１つ分のワーク領域５２０に対応する演算対象データが記憶されていることを表す。以下の説明において使用メモリ数は、使用メモリ数＝１のみであるものとする。
【０２６３】
なお、図１７に示したそれぞれのパケットの状態における「プロセッサ番号」および「ワークメモリ番号」には、図８〜図１０に示した第１〜第３の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、それぞれのプロセッサ３０の符号の下１桁の数字およびそれぞれのワーク領域５２０の符号の下１桁の数字で示している。また、図１７に示したそれぞれのパケットの状態においても、説明を容易にするため、図８〜図１０に示した第１〜第３の実施形態の演算装置１０の動作におけるパケットキュー２１０およびワークメモリ５０内のパケットの状態の一例と同様に、「パケット番号」の項目と「処理中プロセッサ」の項目とを示している。また、図１７に示したパケットキュー２１０内のパケットの状態においては、説明を容易にするため、「先頭アドレス」の項目内の先頭アドレスに続く“（）：括弧”内に、対応する演算対象データを示している。
【０２６４】
まず、図１７（ａ）に示したＤＲＡＭ２００内に記憶された演算対象データについて説明する。それぞれのパケットにおける演算処理の対象となる演算対象データは、ＤＲＡＭ２００のそれぞれの先頭アドレスから１つ分のワーク領域５２０に対応するデータサイズ分記憶されている。より具体的には、例えば、図１２に示した演算装置１２の構成において、ワークメモリ５２内のそれぞれのワーク領域５２０の大きさ（サイズ）が０ｘ１０００である場合を考える。この場合、図１７（ａ）に示した状態では、演算対象データＡがＤＲＡＭ２００の物理アドレス０ｘ１０００〜０ｘ１ＦＦＦに記憶されていることを表している。同様に、図１７（ａ）に示した状態では、演算対象データＢはＤＲＡＭ２００の物理アドレス０ｘ２０００〜０ｘ２ＦＦＦに、演算対象データＣはＤＲＡＭ２００の物理アドレス０ｘ３０００〜０ｘ３ＦＦＦに、それぞれ記憶されていることを表している。また、同様に、図１７（ａ）に示した状態では、演算対象データＤはＤＲＡＭ２００の物理アドレス０ｘ４０００〜０ｘ４ＦＦＦに、演算対象データＥはＤＲＡＭ２００の物理アドレス０ｘ５０００〜０ｘ５ＦＦＦに、演算対象データＦはＤＲＡＭ２００の物理アドレス０ｘ６０００〜０ｘ６ＦＦＦに、演算対象データＧはＤＲＡＭ２００の物理アドレス０ｘ７０００〜０ｘ７ＦＦＦに、それぞれ記憶されていることを表している。
【０２６５】
続いて、演算装置１２の動作について説明する。なお、本第５の動作における有使用権パケット数は、有使用権パケット数＝１であるものとする。まず、演算装置１２の動作においては、図１７（ｂ）に示したように、ワークメモリ５２内に３つのパケットが記憶され、パケットキュー２１０内に４つのパケットが格納され、パケットキュー２１０内に格納されたパケットの内、先頭に近い２つのパケットと最後尾のパケットとに、キュー制御部２２２によってすでにワーク領域５２０の使用権が付与されている。キュー制御部２２２は、それぞれのパケットにワーク領域５２０の使用権を付与すると、ＤＭＡ制御部６０に、使用権を付与したパケットに含まれるＤＲＡＭ２００の先頭アドレスからデータサイズ分の演算対象データの、対応するワーク領域５２０へのＤＭＡ転送を指示する。これにより、ワークメモリ５２には、ＤＭＡ制御部６０によって、すでにワーク領域５２０の使用権が付与されたパケットに対応する演算対象データのＤＭＡ転送が完了している。このパケットキュー２１０およびワークメモリ５２内のパケットの状態を、演算装置１２の初期の状態として、以降の動作を説明する。
【０２６６】
より具体的には、ワークメモリ５２の初期状態は、ワーク領域５２１に、パケットキュー２１０に最初に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ１０００に記憶された演算対象データＡに対してプロセッサ３１が演算処理を実行するパケット＃１が記憶されている状態である。また、ワーク領域５２２に、パケットキュー２１０に２番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ２０００に記憶された演算対象データＢに対してプロセッサ３２が演算処理を実行するパケット＃２が記憶され、ワーク領域５２３に、パケットキュー２１０に３番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ３０００に記憶された演算対象データＣに対してプロセッサ３３が演算処理を実行するパケット＃３が記憶されている状態である。
【０２６７】
また、パケットキュー２１０の初期状態は、格納領域２１１に、パケットキュー２１０に４番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ４０００に記憶された演算対象データＤに対してプロセッサ３１が演算処理を実行する、ワーク領域５２４の使用権が付与されたパケット＃４が格納されている状態である。また、格納領域２１２に、パケットキュー２１０に５番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ５０００に記憶された演算対象データＥに対してプロセッサ３２が演算処理を実行する、ワーク領域５２５の使用権が付与されたパケット＃５が格納されている状態である。また、格納領域２１３に、パケットキュー２１０に６番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ６０００に記憶された演算対象データＦに対してプロセッサ３１が演算処理を実行する、ワーク領域５２０の使用権が付与されていないパケット＃６が格納されている状態である。なお、パケット＃６にワーク領域５２０の使用権が付与されていないのは、有使用権パケット数＝１であるため、すでに、同じプロセッサ３１が演算処理を実行するパケット＃４にワーク領域５２１の使用権が付与されているためである。また、格納領域２１４に、パケットキュー２１０に７番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ７０００に記憶された演算対象データＧに対してプロセッサ３３が演算処理を実行する、ワーク領域５２６の使用権が付与されたパケット＃７が格納されている状態である。
【０２６８】
また、ワークメモリ５２の初期状態は、ワーク領域５２４に、すでにワーク領域５２４の使用権が付与されたパケット＃４に対応する演算対象データＤが、ワーク領域５２５に、すでにワーク領域５２５の使用権が付与されたパケット＃５に対応する演算対象データＥが、ワーク領域５２６に、すでにワーク領域５２６の使用権が付与されたパケット＃７に対応する演算対象データＧが、それぞれ記憶されている状態である。
【０２６９】
この初期状態から、プロセッサ３１が、パケット＃１に対応する演算対象データＡに対する演算処理を完了したことにより、演算装置１２による一連の演算処理が完了し、パケット状態情報を「処理完了」に更新した演算処理後のパケット＃１を、再エントリ判定部２３２に出力する場合を考える。なお、演算処理後のパケット＃１のパケット状態情報は「処理完了」であるが、上述したように、プロセッサ３１は、ワーク領域５２１に最終的に記憶されている演算対象データＡ以外の演算処理後のパケット＃１を、再エントリ判定部２３２に出力する（図１５のステップＳ４２７参照）。
【０２７０】
演算処理後のパケット＃１を取得した再エントリ判定部２３２は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「未使用」を示す情報に更新する（図１６のステップＳ５２１参照）。そして、再エントリ判定部２３２は、演算処理後のパケット＃１に含まれる先頭アドレス（＝０ｘ４０００）および使用メモリ数（データサイズ）を確認し、対応するワーク領域５２１に記憶されている演算処理後の演算対象データＡ（以下、「演算対象データＡ２」という）のＤＭＡ転送を、ＤＭＡ制御部６０に指示する（図１６のステップＳ５２４参照）。
【０２７１】
続いて、再エントリ判定部２３２は、ＤＭＡ制御部６０に指示した、演算処理後の演算対象データＡ２のＤＲＡＭ２００の先頭アドレス（＝０ｘ４０００）からデータサイズ分のＤＭＡ転送が完了しているか否かを確認し（図１６のステップＳ５２５参照）、ＤＭＡ転送が完了した後に、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４１の情報を、「未使用」を示す情報に更新する。そして、再エントリ判定部２３２は、演算処理後のパケット＃１に付与されていたワーク領域５２１の使用権を開放する（図１６のステップＳ５２６参照）。そして、再エントリ判定部２３２は、取得した演算処理後のパケット＃１を、外部ブロック１００に出力する（図１６のステップＳ５２７参照）。
【０２７２】
また、キュー制御部２２２は、再エントリ判定部２３２によってプロセッサ３１に対応するプロセッサ管理レジスタ２５１の情報が「未使用」になった、すなわち、プロセッサ３１がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されているパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃４に対応した演算対象データＤの、ＤＲＡＭ２００からワーク領域５２４へのＤＭＡ転送が完了しているか否かを確認する（図１４のステップＳ３２３参照）。そして、キュー制御部２２２は、ワーク領域５２４への演算対象データＤのＤＭＡ転送が完了した後、パケットキュー２１０に、パケット＃４をプロセッサ３１に出力させる。また、キュー制御部２２２は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「使用中」を示す情報に更新する（図１４のステップＳ３２４参照）。
【０２７３】
その後、プロセッサ３１は、入力されたパケット＃４に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３１とワーク領域５２４とが１対１に接続された後（図１５のステップＳ４２２参照）、パケット＃４に対応した演算対象データＤに対する演算処理を実行する（図１５のステップＳ４２４参照）。
【０２７４】
また、キュー制御部２２２は、再エントリ判定部２３２によってワーク領域５２１に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４１の情報が「未使用」になり、ワーク領域５２１の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されていないパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃６に、ワーク領域５２１の使用権を付与する（図１３のステップＳ２２４参照）。これは、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、同じプロセッサ番号＝１が含まれ、すでにワーク領域５２０の使用権が付与されているパケットが、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在しなくなった、つまり、「０」になったためである。
【０２７５】
続いて、キュー制御部２２２は、ワーク領域５２１の使用権を付与したパケット＃６に含まれる先頭アドレスおよびデータサイズを確認し、確認した先頭アドレスからデータサイズ分の演算対象データＦの、ＤＲＡＭ２００から対応するワーク領域５２１へのＤＭＡ転送を、ＤＭＡ制御部６０に指示する（図１３のステップＳ２２５参照）。
【０２７６】
図１７（ｃ）は、このときのパケットキュー２１０およびワークメモリ５２内のパケットの状態を示している。より具体的には、ワークメモリ５２の状態は、ワーク領域５２１に、ＤＭＡ制御部６０によってＤＭＡ転送されたパケット＃６に対応する演算対象データＦが記憶され、ワーク領域５２４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶されている状態となっている。なお、ワークメモリ５２内のワーク領域５２２およびワーク領域５２３は、プロセッサ３２によるパケット＃２に対応した演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に対応した演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。また、ワークメモリ５２内のワーク領域５２５およびワーク領域５２６も、プロセッサ３２およびプロセッサ３３による演算処理の実行に使用されていないため、初期状態と同様である。
【０２７７】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはパケット＃５が格納され、同様に、格納領域２１２にはワーク領域５２１の使用権が付与されたパケット＃６が格納され、格納領域２１３にはパケット＃７が格納されている状態になる。
【０２７８】
このように、演算装置１２は、演算装置１２に備えたワークメモリ５２内のそれぞれのワーク領域５２０の使用状況と、演算装置１２に備えたそれぞれのプロセッサ３０の使用状況を常時監視し、監視した状況に応じて、それぞれのパケットに対応する演算対象データを、ＤＲＡＭ２００とワークメモリ５２との間でＤＭＡ転送する。そして、演算装置１２は、第１〜第３の実施形態の演算装置１０と同様に、それぞれのパケットを対応するプロセッサ３０に割り当て、演算処理を実行させる。このとき、プロセッサ３０とワーク領域５２０とは１対１で対応するため、第１〜第３の実施形態の演算装置１０と同様に、それぞれのプロセッサ３０でワーク領域５２０の競合が発生することなく、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して並列に実行することができる。
【０２７９】
また、演算装置１２では、それぞれのパケットの演算処理の対象である演算対象データを、ＤＭＡ制御部６０がＤＭＡ転送する。これにより、演算装置１２では、外部ブロック１００から入力されるパケットの大きさが小さくなると共に、プロセッサ３０による演算対象データのワークメモリ５２への転送に要する時間を削減することができる。
【０２８０】
また、演算装置１２では、ＤＭＡ制御部６０によって演算対象データをワークメモリ５２内の対応するワーク領域５２０に事前に記憶させておく。これにより、プロセッサ３０は、対応するパケットが入力されてから、より早いタイミングで演算処理の実行を開始することができ、それぞれのプロセッサ３０が演算対象データを転送することによって発生するオーバーヘッド時間を削減することができる。
【０２８１】
なお、演算装置が演算処理を実行するそれぞれのパケットには、演算処理を実行する際の優先順位がある場合がある。このため、キュー制御部は、それぞれのパケットの優先度に応じて、ワークメモリ内のワーク領域の使用権を付与し、キューに格納されたパケットのプロセッサへの出力を制御する必要がある。
【０２８２】
＜第６の実施形態＞
次に、本発明の第６の実施形態について説明する。本第６の実施形態の演算装置は、入力されたそれぞれのパケットの優先度に基づいて、ワーク領域の使用権を付与する順番を制御する構成である。なお、本第６の実施形態における考え方は、図１に示した第１〜第３の実施形態の演算装置１０、図１１に示した第４の実施形態の演算装置１１、および図１２に示した第５の実施形態の演算装置１２のいずれの構成にも適用することができる。以下の説明においては、図１２に示した第５の実施形態の演算装置１２に、本第６の実施形態における考え方を適用した場合について説明する。
【０２８３】
本第６の実施形態では、上述したように、入力されたそれぞれのパケットの優先度に基づいてワーク領域の使用権を付与する順番を制御する。このため、本第６の実施形態の演算装置１２に入力されるパケットには、当該パケットに対する演算処理を実行する際の優先度を定める「優先度」の情報が追加されている。なお、優先度は、外部ブロック１００またはそれぞれのプロセッサ３０によって、パケット毎に設定される。
【０２８４】
本第６の実施形態の演算装置１２では、優先度に応じてワークメモリ５２の使用権を付与する順番を制御するための機能が、キュー制御部２２２および再エントリ判定部２３２に加わること以外は、本第６の実施形態の演算装置１２の構成や処理手順は、第５の実施形態の演算装置１２と同様である。従って、以下の説明においては、本第６の実施形態の演算装置を演算装置１２とし、演算装置１２に備えたそれぞれの構成要素に加わった機能のみを説明する。
【０２８５】
キュー制御部２２２には、パケットキュー２１０に格納されたそれぞれのパケットの優先度に応じて、それぞれのパケットに対して付与するワーク領域５２０の使用権を制御する機能が加わる。キュー制御部２２２は、同一のプロセッサ３０が処理するパケットにおいて、優先度が高いパケットから順にワーク領域５２０の使用権を付与し、対応するプロセッサ３０に出力する。なお、パケットキュー２１０に、同一のプロセッサ３０が処理する優先度が同じパケットが複数格納されている場合には、より先頭に近いパケットから順にワーク領域５２０の使用権を付与し、対応するプロセッサ３０に出力する。
【０２８６】
より具体的には、まず、キュー制御部２２２は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号を確認する。そして、キュー制御部２２２は、同じプロセッサ番号が含まれるパケット同士で、それぞれのパケットに含まれる優先度を確認する。そして、キュー制御部２２２は、確認した優先度に応じて、ワーク領域５２０の使用権を付与する。なお、パケットキュー２１０に格納されているパケットの状態が変わったことにより、ワーク領域５２０の使用権を付与し直すこともある。
【０２８７】
例えば、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号と優先度とを確認した結果、すでにワーク領域５２０の使用権が付与されている同じプロセッサ番号が含まれるパケットの優先度が、後からパケットキュー２１０に格納されたワーク領域５２０の使用権が付与されていないパケットよりも高い場合には、すでに付与したワーク領域５２０の使用権を付与したまま、後からパケットキュー２１０に格納された優先度の低いパケットよりも先に、対応するプロセッサ３０に出力する。また、例えば、すでにワーク領域５２０の使用権が付与されている同じプロセッサ番号が含まれるパケットの優先度が、後からパケットキュー２１０に格納されたワーク領域５２０の使用権が付与されていないパケットよりも低い場合には、すでに付与したワーク領域５２０の使用権を開放し、後からパケットキュー２１０に格納された優先度の高いパケットに、ワーク領域５２０の使用権を付与し直す。そして、今回ワーク領域５２０の使用権を付与し直した、後からパケットキュー２１０に格納されたパケットを、先に対応するプロセッサ３０に出力する。また、例えば、すでにワーク領域５２０の使用権が付与されている同じプロセッサ番号が含まれるパケットの優先度と、後からパケットキュー２１０に格納されたワーク領域５２０の使用権が付与されていないパケットの優先度とが同じである場合には、パケットキュー２１０に格納された順番で、対応するプロセッサ３０に出力する。
【０２８８】
再エントリ判定部２３２には、それぞれのプロセッサ３０から、パケット状態情報が「処理継続」であるパケットを取得した場合に、パケットキュー２１０に格納されたそれぞれのパケットの優先度に応じて、それぞれのパケットに付与されているワーク領域５２０の使用権の開放を制御する機能が加わる。再エントリ判定部２３２は、パケット状態情報が「処理継続」である場合でも、同一のプロセッサ３０が処理するパケットにおいて、優先度が低いパケットのワーク領域５２０の使用権を開放してから、パケットキュー２１０に再度格納（エントリ）する。なお、パケットキュー２１０に、同一のプロセッサ３０が処理する優先度が同じパケットが複数格納されている場合にも、ワーク領域５２０の使用権を開放してから、パケットキュー２１０に再度格納（エントリ）する。
【０２８９】
より具体的には、まず、再エントリ判定部２３２は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号を確認する。そして、再エントリ判定部２３２は、同じプロセッサ番号が含まれるパケットのそれぞれと、パケットキュー２１０に再度格納（エントリ）するパケット状態情報が「処理継続」であるパケットとの、それぞれのパケットに含まれる優先度を確認する。そして、再エントリ判定部２３２は、確認した優先度に応じて、ワーク領域５２０の使用権を開放する。なお、ワーク領域５２０の使用権を開放は、パケットキュー２１０に再度格納（エントリ）するパケットに対応する、引き継ぎを行う演算対象データをＤＲＡＭ２００に退避してから、つまり、ＤＭＡ制御部６０によって引き継ぎを行う演算対象データのＤＲＡＭ２００へのＤＭＡ転送が完了した後に行う。また、再エントリ判定部２３２は、ワーク領域５２０の使用権が付与された同一のプロセッサ３０が処理する有使用権パケット数が設定されている場合には、ワーク領域５２０の使用権が付与された同一のプロセッサ３０が処理するパケットの数が有使用権パケット数以上とならないように、有使用権パケット数と優先度に応じて、それぞれのパケットに付与されているワーク領域５２０の使用権の開放を制御する。
【０２９０】
例えば、プロセッサ３０からパケット状態情報が「処理継続」であるパケットを取得すると、まず、再エントリ判定部２３２は、パケットキュー２１０に格納されたそれぞれのパケットに含まれるプロセッサ番号と優先度とを確認する。そして、再エントリ判定部２３２は、すでにワーク領域５２０の使用権が付与されているパケットに含まれるプロセッサ番号と、パケットキュー２１０に再度格納（エントリ）するパケットに含まれるプロセッサ番号とが同じであるパケットが、有使用権パケット数以上パケットキュー２１０内に存在するか否かを確認する。この確認の結果、すでにワーク領域５２０の使用権が付与されている同じプロセッサ番号が含まれるパケットが、パケットキュー２１０内に有使用権パケット数以上ある場合には、これらのパケットにおいて最も優先度が低く、最もパケットキュー２１０内の最後尾に近いパケットと、パケットキュー２１０に再度格納（エントリ）するパケット状態情報が「処理継続」であるパケットとの優先度を比較する。
【０２９１】
この比較の結果、パケットキュー２１０に再度格納（エントリ）するパケット状態情報が「処理継続」であるパケットの優先度の方が低い場合には、パケット状態情報が「処理継続」である場合でも、再度格納（エントリ）するパケットに対応する演算対象データをＤＲＡＭ２００に退避し、このパケットに付与されたワーク領域５２０の使用権を開放した後に、パケットキュー２１０に格納（エントリ）する。また、比較の結果、パケットキュー２１０に再度格納（エントリ）するパケット状態情報が「処理継続」であるパケットの優先度の方が高い場合には、同じプロセッサ番号が含まれ、最も優先度が低く、最もパケットキュー２１０内の最後尾に近いパケットに対応する演算対象データをＤＲＡＭ２００に退避し、このパケットに付与されたワーク領域５２０の使用権を開放する。なお、ワーク領域５２０の使用権を開放する、同じプロセッサ番号が含まれ、最も優先度が低く、最もパケットキュー２１０内の最後尾に近いパケットのパケット状態情報が「処理継続」である場合には、そのパケットにおいて継続して演算処理をする際に使用する演算対象データをＤＲＡＭ２００に退避してから、ワーク領域５２０の使用権を開放する。
【０２９２】
＜第６の動作＞
ここで、第６の実施形態の演算装置１２において、パケットの優先度に基づいてワーク領域の使用権を付与する順番を制御する場合の動作の一例について説明する。本第６の動作の説明でも、パケットキュー２１０およびワークメモリ５０内のパケットに着目して、演算装置１０の動作を説明する。なお、本第６の動作でも、有使用権パケット数は、有使用権パケット数＝１であるものとする。図１８は、本第６の実施形態の演算装置１２の動作におけるそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例を示した図である。
【０２９３】
図１８には、図１７に示した第５の実施形態の演算装置１２の動作におけるそれぞれの演算対象データのＤＲＡＭ２００内の配置の一例と同様に、ＤＲＡＭ２００のアドレスとＤＲＡＭ２００内に記憶された演算対象データとの対応を示している。また、図１８には、図１７に示した第５の実施形態の演算装置１２の動作におけるワークメモリ５２内のパケットの状態の一例と同様に、ワークメモリ５２内のパケットの状態として、それぞれのパケットに対応する「演算対象データ」および「プロセッサ番号」を示している。また、図１８には、図１７に示した第５の実施形態の演算装置１２の動作におけるパケットキュー２１０内のパケットの状態の一例と同様に、パケットキュー２１０内のパケットの状態として、それぞれのパケットに含まれる「使用メモリ数」、「先頭アドレス」、「プロセッサ番号」、「ワークメモリ番号」、および「パケット状態情報」を示している。また、パケットキュー２１０内のパケットの状態には、「優先度」も示している。ここで、優先度は、優先度＝１が最も優先度が高く、優先度＝３が最も優先度が低いものとする。
【０２９４】
なお、図１８に示したそれぞれのパケットの状態における「プロセッサ番号」および「ワークメモリ番号」には、図７に示した第５の実施形態の演算装置１２の動作におけるパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例と同様に、それぞれのプロセッサ３０の符号の下１桁の数字およびそれぞれのワーク領域５２０の符号の下１桁の数字で示している。また、図１８に示したそれぞれのパケットの状態においても、説明を容易にするため、図１７に示した第５の実施形態の演算装置１２の動作におけるパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例と同様に、「パケット番号」の項目と「処理中プロセッサ」の項目とを示している。また、図１８に示したパケットキュー２１０内のパケットの状態においても、説明を容易にするため、図１７に示した第５の実施形態の演算装置１２の動作におけるパケットキュー２１０内のパケットの状態の一例と同様に、「先頭アドレス」の項目内の先頭アドレスに続く“（）：括弧”内に、対応する演算対象データを示している。なお、第６の実施形態の演算装置１２は、パケットキュー２１０内に８つの格納領域（格納領域２１１〜格納領域２１８）を備えているものとして説明する。
【０２９５】
まず、図１８（ａ）に示したＤＲＡＭ２００内に記憶された演算対象データについて説明する。それぞれのパケットにおける演算処理の対象となる演算対象データは、ＤＲＡＭ２００のそれぞれの先頭アドレスから１つ分のワーク領域５２０に対応するデータサイズ分記憶されている。より具体的には、例えば、ワークメモリ５２内のそれぞれのワーク領域５２０の大きさ（サイズ）が０ｘ１０００である場合を考えると、図１８（ａ）に示した状態では、演算対象データＡがＤＲＡＭ２００の物理アドレス０ｘ１０００〜０ｘ１ＦＦＦに記憶されていることを表している。同様に、図１８（ａ）に示した状態では、演算対象データＢはＤＲＡＭ２００の物理アドレス０ｘ２０００〜０ｘ２ＦＦＦに、演算対象データＣはＤＲＡＭ２００の物理アドレス０ｘ３０００〜０ｘ３ＦＦＦに、それぞれ記憶されていることを表している。また、同様に、図１８（ａ）に示した状態では、演算対象データＤはＤＲＡＭ２００の物理アドレス０ｘ４０００〜０ｘ４ＦＦＦに、演算対象データＥはＤＲＡＭ２００の物理アドレス０ｘ５０００〜０ｘ５ＦＦＦに、演算対象データＦはＤＲＡＭ２００の物理アドレス０ｘ６０００〜０ｘ６ＦＦＦに、演算対象データＧはＤＲＡＭ２００の物理アドレス０ｘ７０００〜０ｘ７ＦＦＦに、それぞれ記憶されていることを表している。また、同様に、図１８（ａ）に示した状態では、演算対象データＨはＤＲＡＭ２００の物理アドレス０ｘ８０００〜０ｘ８ＦＦＦに、演算対象データＩはＤＲＡＭ２００の物理アドレス０ｘ９０００〜０ｘ９ＦＦＦに、それぞれ記憶されていることを表している。
【０２９６】
続いて、演算装置１２の動作について説明する。なお、本第６の動作における有使用権パケット数は、有使用権パケット数＝１であるものとする。まず、演算装置１２の動作においては、図１８（ｂ）に示したように、ワークメモリ５２内に３つのパケットが記憶され、パケットキュー２１０内に６つのパケットが格納され、パケットキュー２１０内に格納されたパケットの内、先頭に近い２つのパケットと４番目のパケットとに、キュー制御部２２２によってすでにワーク領域５２０の使用権が付与されている。これにより、ワークメモリ５２には、キュー制御部２２２からＤＭＡ転送が指示されたＤＭＡ制御部６０によって、すでにワーク領域５２０の使用権が付与されたパケットに対応する演算対象データのＤＭＡ転送が完了している。このパケットキュー２１０およびワークメモリ５２内のパケットの状態を、演算装置１２の初期の状態として、以降の動作を説明する。
【０２９７】
より具体的には、ワークメモリ５２の初期状態は、ワーク領域５２１に、パケットキュー２１０に最初に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ１０００に記憶された演算対象データＡに対してプロセッサ３１が演算処理を実行するパケット＃１が記憶されている状態である。また、ワーク領域５２２に、パケットキュー２１０に２番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ２０００に記憶された演算対象データＢに対してプロセッサ３２が演算処理を実行するパケット＃２が記憶され、ワーク領域５２３に、パケットキュー２１０に３番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ３０００に記憶された演算対象データＣに対してプロセッサ３３が演算処理を実行するパケット＃３が記憶されている状態である。
【０２９８】
また、パケットキュー２１０の初期状態は、格納領域２１１に、パケットキュー２１０に４番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ４０００に記憶された演算対象データＤに対してプロセッサ３１が演算処理を実行する、ワーク領域５２４の使用権が付与されたパケット＃４が格納されている状態である。また、格納領域２１２に、パケットキュー２１０に５番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ５０００に記憶された演算対象データＥに対してプロセッサ３２が演算処理を実行する、ワーク領域５２５の使用権が付与されたパケット＃５が格納されている状態である。また、格納領域２１３に、パケットキュー２１０に６番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ６０００に記憶された演算対象データＦに対してプロセッサ３３が演算処理を実行する、ワーク領域５２０の使用権が付与されていないパケット＃６が格納されている状態である。また、格納領域２１４に、パケットキュー２１０に７番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ７０００に記憶された演算対象データＧに対してプロセッサ３３が演算処理を実行する、ワーク領域５２６の使用権が付与されたパケット＃７が格納されている状態である。なお、パケット＃６にワーク領域５２０の使用権が付与されていないのは、有使用権パケット数＝１であるため、すでに、同じプロセッサ３３が演算処理を実行する優先度の高いパケット＃７にワーク領域５２６の使用権が付与されているためである。また、格納領域２１５に、パケットキュー２１０に８番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ８０００に記憶された演算対象データＨに対してプロセッサ３２が演算処理を実行する、ワーク領域５２０の使用権が付与されていないパケット＃８が格納されている状態である。また、格納領域２１６に、パケットキュー２１０に９番目に入力された、ＤＲＡＭ２００の先頭アドレス０ｘ９０００に記憶された演算対象データＩに対してプロセッサ３１が演算処理を実行する、ワーク領域５２０の使用権が付与されていないパケット＃９が格納されている状態である。
【０２９９】
また、ワークメモリ５２の初期状態は、ワーク領域５２４に、すでにワーク領域５２４の使用権が付与されたパケット＃４に対応する演算対象データＤが、ワーク領域５２５に、すでにワーク領域５２５の使用権が付与されたパケット＃５に対応する演算対象データＥが、ワーク領域５２６に、すでにワーク領域５２６の使用権が付与されたパケット＃７に対応する演算対象データＧが、それぞれ記憶されている状態である。
【０３００】
この初期状態から、プロセッサ３１が、パケット＃１に対応する演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３３に引き継ぐためにプロセッサ番号を「３」とし、パケット状態情報を「処理継続」に更新した優先度が「１」の演算処理後のパケット＃１を、再エントリ判定部２３２に出力する場合を考える。なお、演算処理後のパケット＃１のパケット状態情報は「処理継続」であるため、上述したように、プロセッサ３１は、ワーク領域５２１に最終的に記憶されている次の演算対象データ（以下、「演算対象データＡ２」という）以外の演算処理後のパケット＃１を、再エントリ判定部２３２に出力する（図１５のステップＳ４２７参照）。
【０３０１】
演算処理後のパケット＃１を取得した再エントリ判定部２３２は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「未使用」を示す情報に更新する（図１６のステップＳ５２１参照）。そして、再エントリ判定部２３２は、パケットキュー２１０に格納されている、演算処理後のパケット＃１に含まれるプロセッサ番号と同じプロセッサ番号＝３で、すでにワーク領域５２０の使用権が付与されたパケットの数を確認する。本第６の動作では、格納領域２１４に格納されたパケット＃７が確認され、再エントリ判定部２３２は、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在すると判断する。そして、再エントリ判定部２３２は、パケットキュー２１０内のパケットにおいて最も優先度が低く、最もパケットキュー２１０内の最後尾に近いパケット＃７に含まれる優先度と、演算処理後のパケット＃１に含まれる優先度とを比較する。本第６の動作では、格納領域２１４に格納されたパケット＃７の優先度の方が、演算処理後のパケット＃１の優先度よりも低いため、再エントリ判定部２３２は、パケット＃７に付与されたワーク領域５２６の使用権を開放し、演算処理後のパケット＃１にワーク領域５２１の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する（図１６のステップＳ５２３参照）。なお、格納領域２１４に格納されたパケット＃７は、一度ワーク領域５２６の使用権が付与された後、ワーク領域５２６の使用権が開放されたことになるが、パケット＃７のパケット状態情報は「未処理」であるため、再エントリ判定部２３２は、ＤＭＡ制御部６０に対して、ワーク領域５２６の使用権が開放に伴う演算対象データＧのＤＭＡ転送、すなわち、演算対象データＧの退避を指示しない。
【０３０２】
また、キュー制御部２２２は、再エントリ判定部２３２によってプロセッサ３１に対応するプロセッサ管理レジスタ２５１の情報が「未使用」になった、すなわち、プロセッサ３１がパケットの演算処理を実行することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されているパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃４に対応した演算対象データＤの、ＤＲＡＭ２００からワーク領域５２４へのＤＭＡ転送が完了しているか否かを確認する（図１４のステップＳ３２３参照）。そして、キュー制御部２２２は、ワーク領域５２４への演算対象データＤのＤＭＡ転送が完了した後、パケットキュー２１０に、パケット＃４をプロセッサ３１に出力させる。また、キュー制御部２２２は、プロセッサ３１に対応するプロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタ２５１の情報を、「使用中」を示す情報に更新する（図１４のステップＳ３２４参照）。
【０３０３】
その後、プロセッサ３１は、入力されたパケット＃４に含まれるワークメモリ番号を対応するアドレス変換部４０１に出力し、プロセッサ３１とワーク領域５２４とが１対１に接続された後（図１５のステップＳ４２２参照）、パケット＃４に対応した演算対象データＤに対する演算処理を実行する（図１５のステップＳ４２４参照）。
【０３０４】
また、キュー制御部２２２は、再エントリ判定部２３２によってワーク領域５２６に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４６の情報が「未使用」になり、ワーク領域５２６の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されていないパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃９に、ワーク領域５２６の使用権を付与する（図１３のステップＳ２２４参照）。これは、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、同じプロセッサ番号＝１が含まれ、すでにワーク領域５２０の使用権が付与されているパケットが、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在しなくなった、つまり、「０」になったためである。
【０３０５】
続いて、キュー制御部２２２は、ワーク領域５２６の使用権を付与したパケット＃９に含まれる先頭アドレスおよびデータサイズを確認し、確認した先頭アドレスからデータサイズ分の演算対象データＩの、ＤＲＡＭ２００から対応するワーク領域５２６へのＤＭＡ転送を、ＤＭＡ制御部６０に指示する（図１３のステップＳ２２５参照）。
【０３０６】
図１８（ｃ）は、このときのパケットキュー２１０およびワークメモリ５２内のパケットの状態を示している。より具体的には、ワークメモリ５２の状態は、ワーク領域５２１に、プロセッサ３１がパケット＃１の演算対象データＡに対する演算処理を実行した結果の演算対象データＡ２が記憶され（残っており）、ワーク領域５２４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶され、ワーク領域５２６に、ＤＭＡ制御部６０によってＤＭＡ転送されたパケット＃９に対応する演算対象データＩが記憶されている状態となっている。なお、ワークメモリ５２内のワーク領域５２２およびワーク領域５２３は、プロセッサ３２によるパケット＃２に対応した演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に対応した演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。また、ワークメモリ５２内のワーク領域５２５も、プロセッサ３２による演算処理の実行に使用されていないため、初期状態と同様である。
【０３０７】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはパケット＃５が格納され、同様に、格納領域２１２にはパケット＃６が格納され、格納領域２１３にはワーク領域５２６の使用権が開放されたパケット＃７が格納されている状態になる。また、格納領域２１４にはパケット＃８が格納され、格納領域２１５にはワーク領域５２６の使用権が付与されたパケット＃９が格納され、パケットキュー２１０内の最後尾の格納領域２１６には、再エントリ判定部２３２によって再度格納（エントリ）された演算処理後のパケット＃１が格納されている状態になる。
【０３０８】
ここで、図１８（ｂ）に示した初期状態から、プロセッサ３１が、パケット＃１に対応する演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３３に引き継ぐためにプロセッサ番号を「３」とし、パケット状態情報を「処理継続」に更新した演算処理後のパケット＃１を再エントリ判定部２３２に出力する場合において、演算処理後のパケット＃１の優先度が異なる場合の一例について説明する。図１９は、本第６の実施形態の演算装置１２の動作において優先度が異なる場合のそれぞれの処理段階でのパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例を示した図である。図１９（ａ）には、優先度が「２」である場合、図１９（ｂ）には、優先度が「３」である場合における、図１８（ｃ）に対応したそれぞれのパケットキュー２１０およびワークメモリ５２内のパケットの状態の一例を示している。
【０３０９】
まず、図１８（ｂ）に示した初期状態から、プロセッサ３１が、パケット＃１に対応する演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３３に引き継ぐためにプロセッサ番号を「３」とし、パケット状態情報を「処理継続」に更新した優先度が「２」の演算処理後のパケット＃１を、再エントリ判定部２３２に出力する場合について説明する。
【０３１０】
優先度＝２の演算処理後のパケット＃１を取得した再エントリ判定部２３２は、優先度＝１の演算処理後のパケット＃１を取得した場合と同様に、格納領域２１４に格納されたパケット＃７を、優先度とを比較するパケットとして確認する。そして、再エントリ判定部２３２は、パケット＃７に含まれる優先度と、優先度＝２の演算処理後のパケット＃１に含まれる優先度とを比較した結果、それぞれのパケットの優先度が同じであるため、パケット＃７に付与されたワーク領域５２６の使用権を開放せず、優先度＝２の演算処理後のパケット＃１に対応する演算処理後の演算対象データＡ２のＤＭＡ転送、すなわち、演算対象データＡ２のＤＲＡＭ２００への退避を指示する。これは、優先度＝２の演算処理後のパケット＃１にワーク領域５２１の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）すると、パケットキュー２１０に格納されているプロセッサ番号＝３で、すでにワーク領域５２０の使用権が付与されたパケットの数が１つ以上（有使用権パケット数以上）存在してしまうことになるためである。その後、再エントリ判定部２３２は、ワーク領域５２１に記憶された演算対象データＡ２のＤＲＡＭ２００へのＤＭＡ転送が完了した後に、優先度＝２の演算処理後のパケット＃１に付与されたワーク領域５２１の使用権を開放する。
【０３１１】
また、キュー制御部２２２は、再エントリ判定部２３２によってワーク領域５２１に対応するワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタ２４１の情報が「未使用」になり、ワーク領域５２１の使用権を付与することができる状態になったことに応じて、パケットキュー２１０に格納済みのワーク領域５２０の使用権が付与されていないパケットの内、プロセッサ番号＝１で、最もパケットキュー２１０の先頭に近いパケット＃９に、ワーク領域５２１の使用権を付与する（図１３のステップＳ２２４参照）。これは、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、同じプロセッサ番号＝１が含まれ、すでにワーク領域５２０の使用権が付与されているパケットが、パケットキュー２１０内に１つ以上（有使用権パケット数以上）存在しなくなった、つまり、「０」になったためである。
【０３１２】
続いて、キュー制御部２２２は、ワーク領域５２１の使用権を付与したパケット＃９に含まれる先頭アドレスおよびデータサイズを確認し、確認した先頭アドレスからデータサイズ分の演算対象データＩの、ＤＲＡＭ２００から対応するワーク領域５２１へのＤＭＡ転送を、ＤＭＡ制御部６０に指示する（図１３のステップＳ２２５参照）。
【０３１３】
これにより、パケットキュー２１０およびワークメモリ５２内のパケットの状態は、図１９（ａ）に示した状態になる。より具体的には、ワークメモリ５２の状態は、ワーク領域５２１に、ＤＭＡ制御部６０によってＤＭＡ転送されたパケット＃９に対応する演算対象データＩが記憶され、ワーク領域５２４に、パケットキュー２１０から入力された、演算対象データＤに対してプロセッサ３１が演算処理を実行するパケット＃４が記憶されている状態となっている。なお、ワークメモリ５２内のワーク領域５２２およびワーク領域５２３は、プロセッサ３２によるパケット＃２に対応した演算対象データＢに対する演算処理、およびプロセッサ３３によるパケット＃３に対応した演算対象データＣに対する演算処理を完了していないため、初期状態と同様である。また、ワークメモリ５２内のワーク領域５２５およびワーク領域５２６も、プロセッサ３２およびプロセッサ３３による演算処理の実行に使用されていないため、初期状態と同様である。
【０３１４】
また、パケットキュー２１０の状態は、格納領域２１１に格納されていたパケット＃４がプロセッサ３１に出力されたことにより、格納領域２１１にはパケット＃５が格納され、同様に、格納領域２１２にはパケット＃６が格納され、格納領域２１３にはワーク領域５２６の使用権が付与されたままのパケット＃７が格納されている状態になる。また、格納領域２１４にはパケット＃８が格納され、格納領域２１５にはワーク領域５２１の使用権が付与されたパケット＃９が格納され、パケットキュー２１０内の最後尾の格納領域２１６には、再エントリ判定部２３２によって再度格納（エントリ）された、ワーク領域５２１の使用権が開放された演算処理後のパケット＃１が格納されている状態になる。
【０３１５】
なお、上記の説明では、再エントリ判定部２３２が、優先度が同じパケット＃７を確認したときに、ワーク領域５２１の使用権を開放する場合について説明したが、開放したワーク領域５２１の使用権を付与するパケット＃９が格納された格納領域２１５よりも前のワーク領域５２０に格納されているそれぞれのパケットの演算処理が完了したときにも、ワーク領域５２０が開放されると考えられる。このため、再エントリ判定部２３２は、ワーク領域５２１の使用権を開放する演算処理後のパケット＃１のパケット状態情報が「処理継続」であることを考慮し、すぐにワーク領域５２１の使用権を開放せず、例えば、パケット＃９をプロセッサ３０に出力する順番など、予め定めた条件に基づいて、演算処理後のパケット＃１にワーク領域５２１の使用権を付与したまま、パケットキュー２１０に再度格納（エントリ）する構成であってもよい。
【０３１６】
次に、図１８（ｂ）に示した初期状態から、プロセッサ３１が、パケット＃１に対応する演算対象データＡに対する演算処理を完了し、次の演算処理をプロセッサ３３に引き継ぐためにプロセッサ番号を「３」とし、パケット状態情報を「処理継続」に更新した優先度が「３」の演算処理後のパケット＃１を、再エントリ判定部２３２に出力する場合について説明する。
【０３１７】
優先度＝３の演算処理後のパケット＃１を取得した再エントリ判定部２３２は、優先度＝１の演算処理後のパケット＃１を取得した場合と同様に、格納領域２１４に格納されたパケット＃７を、優先度とを比較するパケットとして確認する。そして、再エントリ判定部２３２は、パケット＃７に含まれる優先度と、優先度＝３の演算処理後のパケット＃１に含まれる優先度とを比較した結果、演算処理後のパケット＃１の優先度の方が、パケット＃７の優先度よりも低いため、パケット＃７に付与されたワーク領域５２６の使用権を開放せず、優先度＝３の演算処理後のパケット＃１に対応する演算処理後の演算対象データＡ２のＤＲＡＭ２００への退避を指示する。その後、再エントリ判定部２３２は、ワーク領域５２１に記憶された演算対象データＡ２のＤＲＡＭ２００へのＤＭＡ転送が完了した後に、優先度＝３の演算処理後のパケット＃１に付与されたワーク領域５２１の使用権を開放する。
【０３１８】
また、キュー制御部２２２は、ワーク領域５２１の使用権を付与することができる状態になったことに応じて、優先度＝２の演算処理後のパケット＃１を取得した場合と同様に、パケット＃９にワーク領域５２１の使用権を付与する（図１３のステップＳ２２４参照）。続いて、キュー制御部２２２は、優先度＝２の演算処理後のパケット＃１を取得した場合と同様に、演算対象データＩの、ＤＲＡＭ２００から対応するワーク領域５２１へのＤＭＡ転送を、ＤＭＡ制御部６０に指示する（図１３のステップＳ２２５参照）。
【０３１９】
これにより、パケットキュー２１０およびワークメモリ５２内のパケットの状態は、図１９（ｂ）に示した状態になる。なお、図１９（ｂ）に示したパケットキュー２１０およびワークメモリ５２内のパケットの状態は、演算処理後のパケットの優先度以外は、図１９（ａ）に示した優先度＝２であるときのパケットキュー２１０およびワークメモリ５２内のパケットの状態と同様であるため、詳細な説明は省略する。
【０３２０】
なお、以降の動作においては、同じプロセッサ３３が演算処理を実行するパケットにおいて、優先度が同じでパケットキュー２１０の先頭に近いパケット＃６に、演算処理後のパケット＃１よりも先にワーク領域５２０の使用権が付与される。
【０３２１】
このように、第６の実施形態の演算装置１２でも、第５の実施形態の演算装置１２と同様に、演算装置１２に備えたワークメモリ５２内のそれぞれのワーク領域５２０の使用状況と、演算装置１２に備えたそれぞれのプロセッサ３０の使用状況を常時監視し、監視した状況に応じて、それぞれのパケットに対応する演算対象データを、ＤＲＡＭ２００とワークメモリ５２との間でＤＭＡ転送する。そして、演算装置１２は、第５の実施形態の演算装置１２と同様に、それぞれのパケットを対応するプロセッサ３０に割り当て、演算処理を実行させる。このとき、プロセッサ３０とワーク領域５２０とは１対１で対応するため、第５の実施形態の演算装置１２と同様に、それぞれのプロセッサ３０でワーク領域５２０の競合が発生することなく、外部ブロック１００から入力された複数のパケットに対する一連の演算処理を、それぞれのプロセッサ３０で分担して並列に実行することができる。
【０３２２】
また、演算装置１２では、それぞれのパケットの優先度に基づいて、それぞれのパケットに対して付与するワーク領域の使用権を制御する。そして、パケットキュー２１０に格納された順番が遅いパケットであっても、優先度が高いパケットには早いタイミングでワーク領域５２０の使用権を付与する。つまり、パケットキュー２１０に格納された順番よりもパケットの優先度に重点をおいて（パケットの優先度＞パケットキュー２１０に格納された順番）、ワーク領域５２０の使用権を付与する順番を制御する。これにより、第６の実施形態の演算装置１２では、優先度が高いパケット対応するワーク領域５２０の使用権を優先的に付与し、演算対象データを退避させる頻度を少なくし、演算対象データを転送することによって発生するオーバーヘッド時間を削減することができる。このことにより、第６の実施形態の演算装置１２では、優先度が高いパケットに対する一連の演算処理を早いタイミングで完了させることができる。なお、本第６の実施形態におけるパケットの優先度に基づいてワーク領域の使用権を付与する順番を制御するという考え方は、第１〜第３の実施形態のいずれの演算装置１０にも、第４の実施形態の演算装置１１にも適用することができる。
【０３２３】
上記に述べたとおり、本発明を実施するための形態によれば、複数の処理演算部（プロセッサ）で複数のデータ記憶部（ワーク領域）を共有する演算装置において、要求された演算処理の内容を表す複数のパケットに対する演算処理を並列に実行する際に、それぞれのデータ記憶部の使用状況とそれぞれの処理演算部の使用状況を常時監視し、監視した状況に応じて、それぞれのパケットに対する演算処理をそれぞれの処理演算部に割り当てる。このとき、本発明を実施するための形態では、処理演算部と、演算処理を実行する際に使用するデータ記憶部とが１対１に対応するように、それぞれのパケットに付与するデータ記憶部の使用権を動的に変更する。これにより、本発明を実施するための形態では、それぞれの処理演算部が、対応するパケットに対する演算処理を実行する際に、処理演算部同士での同じデータ記憶部に対するアクセスが競合することなく、要求された複数の演算処理を並列に実行することができる。つまり、それぞれの処理演算部は、使用権が付与されたデータ記憶部を独占して使用することができる。
【０３２４】
また、本発明を実施するための形態によれば、同じ処理演算部が演算処理を行う予め定めた閾値以上の複数のパケットに、データ記憶部の使用権を付与しない。すなわち、本発明を実施するための形態では、データ記憶部の使用権が付与された同一の処理演算部が処理するパケットの数が予め定めた閾値以上とならないように、データ記憶部の使用権の付与を制御する。このとき、本発明を実施するための形態では、それぞれのパケットにおける演算処理の優先度も考慮する。これにより、本発明を実施するための形態では、特定の処理演算部が演算処理を実行するパケットが、データ記憶部の使用権を占有してしまうことを防止することができる。このことにより、本発明を実施するための形態では、それぞれの処理演算部によるデータ記憶部の競合が発生することなく、それぞれの処理演算部の稼働率を向上させることができる。
【０３２５】
また、本発明を実施するための形態によれば、処理演算部がデータ記憶部をアクセスする際のアドレスを、データ記憶部のアドレスに変換する。これにより、本発明を実施するための形態では、それぞれの処理演算部は、パケットに対する演算処理を実行する際に使用するデータ記憶部のアドレスを考慮することなく（意識することなく）、いずれのデータ記憶部を使用する場合でも、同様に演算処理を実行することができる。
【０３２６】
なお、本実施形態においては、例えば、キュー制御部２２０がパケットキュー２１０に格納されたそれぞれのパケットを、対応するプロセッサ３０に出力させる構成について説明したが、パケットをプロセッサ３０に出力する際の動作は、本発明を実施するための形態の動作に限定されるものではない。例えば、キュー制御部２２０が、出力することができるパケットがパケットキュー２１０内に存在することを対応するプロセッサ３０に通知し、この通知を受け取ったプロセッサ３０が、パケットキュー２１０からパケットを取得する、すなわち、パケットを読み出す構成であってもよい。
【０３２７】
また、本実施形態においては、例えば、プロセッサ３０が再エントリ判定部２３０に出力した演算処理後のパケットをパケットキュー２１０に再度格納（エントリ）した後に、キュー制御部２２０がパケットキュー２１０に格納されたパケットを対応するプロセッサ３０に出力するという順番で説明した。しかし、上述したように、演算装置１０に備えたそれぞれの構成要素は、それぞれの処理を常時平行して行っている。従って、パケットをパケットキュー２１０に再度格納（エントリ）するタイミングと、パケットキュー２１０からパケットをプロセッサ３０に出力するタイミングとは、本発明を実施するための形態の動作に限定されるものではない。例えば、キュー制御部２２０がパケットキュー２１０に格納されたパケットを対応するプロセッサ３０に出力した後に、プロセッサ３０が再エントリ判定部２３０に出力した演算処理後のパケットをパケットキュー２１０に再度格納（エントリ）するという順番であってもよい。
【０３２８】
なお、本実施形態においては、ワークメモリを演算装置内に備えた構成について説明したが、ワークメモリを備える位置は、本発明を実施するための形態の動作に限定されるものではなく、ワークメモリを演算装置の外部に備える構成にすることもできる。また、ワークメモリ内のワーク領域の数も、本発明を実施するための形態の動作に限定されるものではない。この場合、ワークメモリ使用状況管理レジスタ２４０内のワークメモリ管理レジスタの数は、ワークメモリ内のワーク領域の数に応じて適宜変更される。また同様に、キュー内の格納領域の数も、本発明を実施するための形態の動作に限定されるものではない。
【０３２９】
また、本実施形態においては、３つのプロセッサ３１〜プロセッサ３３を備えた演算装置の一例について説明したが、演算装置に備えるプロセッサの数は、本発明を実施するための形態の動作に限定されるものではなく、演算装置内に、２つまたは３つよりもさらに多くのプロセッサを搭載した構成であっても同様に、本発明の考え方を適用することができる。この場合、プロセッサ使用状況管理レジスタ２５０内のプロセッサ管理レジスタや、ローカルメモリ３００、アドレス変換部４００またはアドレス変換部４１０などの数は、演算装置に備えたプロセッサの数に応じて適宜変更される。
【０３３０】
また、本実施形態においては、それぞれのプロセッサ３０の処理機能に関して説明していないが、例えば、演算装置１０を、撮像装置などの撮像システム内に備えている場合には、それぞれのプロセッサ３０は、撮像システムにおける画像処理を行う処理機能を持っていると考えることができる。
【０３３１】
また、本実施形態においては、演算装置１０に備えたそれぞれのプロセッサ３０が持っている処理機能について説明していない。しかし、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置である場合には、それぞれのプロセッサ３０の処理機能は、ＹＣ変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、撮像システムにおける様々な画像処理を行うことができる処理機能であると考えられる。また、例えば、演算装置１０が、撮像装置などの撮像システムに備えた画像処理装置内の画像認識部など、撮像システムにおける画像処理の一部の処理部である場合には、それぞれのプロセッサ３０の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための処理機能であると考えられる。
【０３３２】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０３３３】
１０，１１，１２・・・演算装置
２０，２１，２２・・・パケット管理部
２１０，２６０・・・パケットキュー
２１１，２１２，２１３，２１４，２１５，２６１，２６２，２６３，２６４，２６５・・・格納領域（パケットキュー）
２２０，２２１，２２２・・・キュー制御部（パケット管理部，キュー制御部）
２３０，２３２・・・再エントリ制御部（パケット管理部，再エントリ判定部）
２４０・・・ワークメモリ使用状況管理レジスタ（パケット管理部）
２４１，２４２，２４３，２４４，２４５，２４６・・・ワークメモリ管理レジスタ（パケット管理部）
２５０・・・プロセッサ使用状況管理レジスタ（パケット管理部）
２５１，２５２，２５３・・・プロセッサ管理レジスタ（パケット管理部）
３０，３１，３２，３３・・・プロセッサ（処理演算部）
３００，３１１，３２１，３３１・・・ローカルメモリ（処理演算部）
４０，４１・・・接続切り替え部
４００，４０１，４０２，４０３，４１０，４１１，４１２，４１３・・・アドレス変換部（接続切り替え部，）
４５０・・・クロスバスイッチ（接続切り替え部，）
５０，５２・・・ワークメモリ（データ記憶部）
５００，５０１，５０２，５０３，５０４，５０５，５２０，５２１，５２２，５２３，５２４，５２５，５２６・・・ワーク領域（データ記憶部）
６０・・・ＤＭＡ制御部（転送制御部）
１００・・・外部ブロック
２００・・・ＤＲＡＭ（外部メモリ）
７００・・・バス
【図１】
2015028710.tif 000003
【図２】
2015028710.tif 000004
【図３】
2015028710.tif 000005
【図４】
2015028710.tif 000006
【図５】
2015028710.tif 000007
【図６】
2015028710.tif 000008
【図７】
2015028710.tif 000009
【図８】
2015028710.tif 000010
【図９】
2015028710.tif 000011
【図１０】
2015028710.tif 000012
【図１１】
2015028710.tif 000013
【図１２】
2015028710.tif 000014
【図１３】
2015028710.tif 000015
【図１４】
2015028710.tif 000016
【図１５】
2015028710.tif 000017
【図１６】
2015028710.tif 000018
【図１７】
2015028710.tif 000019
【図１８】
2015028710.tif 000020
【図１９】
2015028710.tif 000021