(57)【要約】【課題】複数のプロセッサを備えたマルチプロセッサ構成の演算装置において、ＯＳの機能を使用せずに、プロセッサ間の通信とタスクの分割との両方した演算装置および演算方法を提供する。【解決手段】処理演算部のそれぞれは、入力されたパケットのタスクの処理を自身の持つ関数によって開始する開始関数と終了を判定する終了関数とに分離し、他の処理演算部が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割した第１の送信パケットを他の処理演算部に送信し、タスクの処理結果が含まれるパケットを第１の受信パケットとして他の処理演算部から受信した後に、自身が送信した第１の送信パケットのタスクの処理が終了して戻ってきたパケットであるか否かを判定し、タスクの処理が終了して戻ってきたパケットである場合に、入力されたパケットのタスクの処理が終了したと判定して処理結果を含めたパケットをパケットキューに送信する。【選択図】図４
2015095163.tif 000002
【特許請求の範囲】
【請求項１】
パケットを互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部と、
前記演算処理の処理内容を表す複数の関数で構成されたタスクを含む前記パケットを格納するパケットキューと、
を備え、
前記処理演算部のそれぞれは、
入力された前記パケットに含まれる前記タスクの処理において、該タスクの処理を自身の持つ関数によって開始する開始関数と、該タスクの処理の終了を自身の持つ関数によって判定する終了関数とに分離し、
前記開始関数によって開始した該タスクの処理において、他の前記処理演算部が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割し、
該分割したタスクの処理において呼び出す前記第１の遠隔関数の情報と、該分割したタスクが含まれている元の前記パケットを識別するための情報とが少なくとも含まれるパケットを生成して、第１の送信パケットとして前記パケットキューを介して他の前記処理演算部に送信し、
タスクの処理結果が含まれるパケットを、第１の受信パケットとして前記パケットキューを介して他の前記処理演算部から受信した後に、前記終了関数による該タスクの処理において、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、該第１の受信パケットに含まれる前記パケットを識別するための情報に基づいて判定し、
該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力された前記パケットに含まれる該タスクの処理が終了したと判定し、該タスクの処理結果を含めたパケットを生成して前記パケットキューに送信する、
ことを特徴とする演算装置。
【請求項２】
前記第１の送信パケットは、
該第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、
前記処理演算部のそれぞれは、
自身が送信した前記第２の送信パケットの数と、自身が送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了したと判定する、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記処理演算部のそれぞれは、
入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ異なる複数の関数を、それぞれの前記第２の遠隔関数として呼び出して実行する複数のタスクを分割し、
該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成して送信する、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記処理演算部のそれぞれは、
入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、複数の他の前記処理演算部のそれぞれが持つ関数を、それぞれの前記第２の遠隔関数として呼び出して実行する複数のタスクを分割し、
該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成して送信する、
ことを特徴とする請求項２または請求項３に記載の演算装置。
【請求項５】
前記処理演算部のそれぞれは、
入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、複数の他の前記処理演算部のそれぞれが持つ関数を、それぞれの前記第２の遠隔関数として順次呼び出して実行する複数のタスクを分割し、
該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成し、最初に送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了したと判定した後、生成したそれぞれの前記第２の送信パケットを、送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了したと判定する毎に順次送信する、
ことを特徴とする請求項２から請求項４のいずれか１の項に記載の演算装置。
【請求項６】
前記処理演算部のそれぞれは、
入力された前記パケットに対して同じ演算処理を行う処理機能を有する、
ことを特徴とする請求項１から請求項５のいずれか１の項に記載の演算装置。
【請求項７】
前記処理演算部のそれぞれは、
入力された前記パケットに対して異なる専門的な演算処理を行う処理機能を有する、
ことを特徴とする請求項１から請求項５のいずれか１の項に記載の演算装置。
【請求項８】
パケットを互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部と、前記演算処理の処理内容を表す複数の関数で構成されたタスクを含む前記パケットを格納するパケットキューと、を備えた演算装置における演算方法であって、
前記処理演算部のそれぞれが、
入力された前記パケットに含まれる前記タスクの処理において、該タスクの処理を自身の持つ関数によって開始する開始関数と、該タスクの処理の終了を自身の持つ関数によって判定する終了関数とに分離する手順と、
前記開始関数によって開始した該タスクの処理において、他の前記処理演算部が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割する手順と、
該分割したタスクの処理において呼び出す前記第１の遠隔関数の情報と、該分割したタスクが含まれている元の前記パケットを識別するための情報とが少なくとも含まれるパケットを生成して、第１の送信パケットとして前記パケットキューを介して他の前記処理演算部に送信する手順と、
タスクの処理結果が含まれるパケットを、第１の受信パケットとして前記パケットキューを介して他の前記処理演算部から受信した後に、前記終了関数による該タスクの処理において、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、該第１の受信パケットに含まれる前記パケットを識別するための情報に基づいて判定する手順と、
該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力された前記パケットに含まれる該タスクの処理が終了したと判定し、該タスクの処理結果を含めたパケットを生成して前記パケットキューに送信する手順と、
を含むことを特徴とする演算方法。
【請求項９】
前記第１の送信パケットは、
該第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、
前記処理演算部のそれぞれが、
自身が送信した前記第２の送信パケットの数と、自身が送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了したと判定する手順、
を含むことを特徴とする請求項８に記載の演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置および演算方法に関する。
【背景技術】
【０００２】
近年、演算装置の演算性能を向上する方法として、複数のプロセッサを備えた構成、いわゆる、マルチプロセッサを構成する例が多く見受けられるようになった。マルチプロセッサ構成の演算装置では、いくつかのタスクの処理を、複数のプロセッサで分担し、それぞれのプロセッサが並列に処理を行うことによって、演算性能を向上させる。
【０００３】
しかしながら、処理を行う元々のタスクが１つである場合には、複数備えたプロセッサの内、いずれか１つのプロセッサにのみタスクが渡され、他のプロセッサには処理を行うタスクが行き渡らない。この場合には、タスクが渡された１つのプロセッサのみが渡されたタスクの処理を実行し、その他の複数のプロセッサはタスクの処理を実行していない、つまり、休止している状態となり、演算装置におけるマルチプロセッサの構成を有効に活用することができない。すなわち、演算装置をマルチプロセッサ構成にしたことによる効果を得ることができない。従って、演算装置におけるマルチプロセッサの構成を有効に活用するためには、タスクを分割して、演算装置に備えた全てのプロセッサに、処理を行うタスクを行き渡らせることによって、それぞれのプロセッサの稼働率を向上させることが望ましい。
【０００４】
このため、タスクを管理するための一般的な方法として、オペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：以下、「ＯＳ」という）が用いられている。ＯＳには、以下のような２つの大きな役割がある。１つは、プログラムの記載に応じて、１つのタスクを複数のタスクに分割する役割である。もう１つは、それぞれのプロセッサとの間で通信を行ない、分割したそれぞれのタスクを各プロセッサに割り振る役割である。ＯＳを用いた演算装置のシステムでは、上述したようなＯＳの役割の組み合わせ、つまり、タスクの分割とプロセッサ間通信との組み合わせによって、マルチプロセッサ構成における演算性能の向上を図っている。
【０００５】
ところで、ＯＳもプロセッサによって実行されるプログラムである。このため、上述したタスクの分割とプロセッサ間通信との役割をＯＳが実行する際にも、プロセッサの演算性能（処理能力）を必要とする。これにより、演算装置内でＯＳがその役割を実行すること自体で、少なからずプロセッサの処理能力が低下してしまうことになる。つまり、マルチプロセッサ構成の演算装置では、ＯＳの実行によるプロセッサの処理能力の低下が問題となる。
【０００６】
そこで、例えば、特許文献１のように、ＯＳの機能を使わずに、処理モジュール間で通信を行なう技術が開示されている。特許文献１で開示された技術には、ＯＳの管理下にある１つの処理（プロセス）内でパケットを使用することによって、処理モジュールが処理を実行する際に用いる関数を、異なる処理モジュールから呼び出す方法が示されている。特許文献１で開示された方法では、同一のプロセス内のそれぞれの処理モジュールが関数の呼び出しを行うため、少ない資源（リソース）で関数の通信を実現することができ、処理中のメモリの消費やプロセッサへの負荷を抑えた上で、性能を向上させることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−２６７９６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１で開示された技術では、ＯＳの機能を使わずに通信を行うことができる範囲が、同一のプロセス内の関数のみに限られる。このため、特許文献１で開示された関数を通信するための技術を、異なるプロセス間、あるいは異なるプロセッサ間で関数の通信を行う方法として適用することはできない。従って、異なるプロセス間、あるいは異なるプロセッサ間で関数の通信を行う場合には、依然としてＯＳの機能が必要である。
【０００９】
また、特許文献１で開示された技術は、ＯＳの機能を使わずに関数の通信を行う方法であるが、タスクを分割するという、ＯＳの機能によって実現している役割に代わる技術が開示されていない。このため、特許文献１で開示された技術では、ＯＳの機能によって実現している役割を全てなくすことができない。
【００１０】
つまり、特許文献１で開示された技術を適用した場合においても、マルチプロセッサ構成の演算装置では、ＯＳの機能は欠かすことのできない機能であり、ＯＳを実行することによるプロセッサの処理能力の低下という問題が、依然として残ってしまう。
【００１１】
本発明は、上記の課題認識に基づいてなされたものであり、複数のプロセッサを備えたマルチプロセッサ構成の演算装置において、ＯＳの機能を使用せずに、プロセッサ間の通信とタスクの分割との両方を実現した演算装置および演算方法を提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記の課題を解決するため、本発明の演算装置は、パケットを互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部と、前記演算処理の処理内容を表す複数の関数で構成されたタスクを含む前記パケットを格納するパケットキューと、を備え、前記処理演算部のそれぞれは、入力された前記パケットに含まれる前記タスクの処理において、該タスクの処理を自身の持つ関数によって開始する開始関数と、該タスクの処理の終了を自身の持つ関数によって判定する終了関数とに分離し、前記開始関数によって開始した該タスクの処理において、他の前記処理演算部が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割し、該分割したタスクの処理において呼び出す前記第１の遠隔関数の情報と、該分割したタスクが含まれている元の前記パケットを識別するための情報とが少なくとも含まれるパケットを生成して、第１の送信パケットとして前記パケットキューを介して他の前記処理演算部に送信し、タスクの処理結果が含まれるパケットを、第１の受信パケットとして前記パケットキューを介して他の前記処理演算部から受信した後に、前記終了関数による該タスクの処理において、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、該第１の受信パケットに含まれる前記パケットを識別するための情報に基づいて判定し、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力された前記パケットに含まれる該タスクの処理が終了したと判定し、該タスクの処理結果を含めたパケットを生成して前記パケットキューに送信する、ことを特徴とする。
【００１３】
また、本発明の演算装置において、前記第１の送信パケットは、該第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、前記処理演算部のそれぞれは、自身が送信した前記第２の送信パケットの数と、自身が送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了したと判定する、ことを特徴とする。
【００１４】
また、本発明の演算装置において、前記処理演算部のそれぞれは、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ異なる複数の関数を、それぞれの前記第２の遠隔関数として呼び出して実行する複数のタスクを分割し、該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成して送信する、ことを特徴とする。
【００１５】
また、本発明の演算装置において、前記処理演算部のそれぞれは、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、複数の他の前記処理演算部のそれぞれが持つ関数を、それぞれの前記第２の遠隔関数として呼び出して実行する複数のタスクを分割し、該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成して送信する、ことを特徴とする。
【００１６】
また、本発明の演算装置において、前記処理演算部のそれぞれは、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、複数の他の前記処理演算部のそれぞれが持つ関数を、それぞれの前記第２の遠隔関数として順次呼び出して実行する複数のタスクを分割し、該分割した複数のタスクのそれぞれ毎に、前記第２の送信パケットを複数生成し、最初に送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了したと判定した後、生成したそれぞれの前記第２の送信パケットを、送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了したと判定する毎に順次送信する、ことを特徴とする。
【００１７】
また、本発明の演算装置において、前記処理演算部のそれぞれは、入力された前記パケットに対して同じ演算処理を行う処理機能を有する、ことを特徴とする。
【００１８】
また、本発明の演算装置において、前記処理演算部のそれぞれは、入力された前記パケットに対して異なる専門的な演算処理を行う処理機能を有する、ことを特徴とする。
【００１９】
また、本発明の演算方法は、パケットを互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部と、前記演算処理の処理内容を表す複数の関数で構成されたタスクを含む前記パケットを格納するパケットキューと、を備えた演算装置における演算方法であって、前記処理演算部のそれぞれが、入力された前記パケットに含まれる前記タスクの処理において、該タスクの処理を自身の持つ関数によって開始する開始関数と、該タスクの処理の終了を自身の持つ関数によって判定する終了関数とに分離する手順と、前記開始関数によって開始した該タスクの処理において、他の前記処理演算部が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割する手順と、該分割したタスクの処理において呼び出す前記第１の遠隔関数の情報と、該分割したタスクが含まれている元の前記パケットを識別するための情報とが少なくとも含まれるパケットを生成して、第１の送信パケットとして前記パケットキューを介して他の前記処理演算部に送信する手順と、タスクの処理結果が含まれるパケットを、第１の受信パケットとして前記パケットキューを介して他の前記処理演算部から受信した後に、前記終了関数による該タスクの処理において、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、該第１の受信パケットに含まれる前記パケットを識別するための情報に基づいて判定する手順と、該受信した前記第１の受信パケットが、自身が送信した前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力された前記パケットに含まれる該タスクの処理が終了したと判定し、該タスクの処理結果を含めたパケットを生成して前記パケットキューに送信する手順と、を含むことを特徴とする。
【００２０】
また、本発明の演算方法において、前記第１の送信パケットは、該第１の送信パケットに含まれる前記第１の遠隔関数によるタスクからさらに、他の前記処理演算部が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、前記処理演算部のそれぞれが、自身が送信した前記第２の送信パケットの数と、自身が送信した前記第２の送信パケットに含まれる前記第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された前記第１の送信パケットに含まれる前記第１の遠隔関数によるタスクの処理が終了したと判定する手順、を含むことを特徴とする。
【発明の効果】
【００２１】
本発明によれば、複数のプロセッサを備えたマルチプロセッサ構成の演算装置において、ＯＳの機能を使用せずに、プロセッサ間の通信とタスクの分割との両方を実現した演算装置および演算方法を提供するという効果が得られる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図２】本実施形態の演算装置に備えた処理演算部が他の処理演算部の関数を呼び出してタスクの処理を実行する動作の一例を模式的に示した図である。
【図３】本実施形態の演算装置に備えた処理演算部が他の処理演算部の関数を呼び出す際に生成するパケットの構成を説明する図である。
【図４】本実施形態の演算装置に備えた処理演算部が他の処理演算部の関数を呼び出してタスクの処理を実行する動作の別の一例を模式的に示した図である。
【図５】本実施形態の演算装置に備えた処理演算部が他の処理演算部の関数を複数呼び出す際に生成するパケットの構成を説明する図である。
【図６】本実施形態の演算装置に備えた処理演算部が複数の他の処理演算部の関数を呼び出してタスクの処理を実行する動作の一例を模式的に示した図である。
【図７】本実施形態の演算装置に備えた処理演算部が複数の他の処理演算部の関数を呼び出してタスクの処理を実行する動作の別の一例を模式的に示した図である。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態について、図面を参照して説明する。図１は、本実施形態における演算装置の概略構成の一例を示したブロック図である。図１に示した演算装置１は、６つの処理演算部１１〜処理演算部１６と、メモリ部２０と、パケットキュー３０と、を備えている。演算装置１は、要求された演算処理の処理内容を表す複数の関数で構成されたタスクの処理を、処理演算部１１〜処理演算部１６のそれぞれで分担して行う構成のマルチプロセッサである。処理演算部１１〜処理演算部１６のそれぞれとメモリ部２０とは、バス４０を介して接続されている。
【００２４】
メモリ部２０は、処理演算部１１〜処理演算部１６のそれぞれで共有される、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリである。メモリ部２０には、処理演算部１１〜処理演算部１６のそれぞれが起動するためのプログラムや、処理演算部１１〜処理演算部１６のそれぞれがタスクの処理を実行するために用いるデータが格納されている。また、メモリ部２０には、処理演算部１１〜処理演算部１６のそれぞれがタスクの処理の途中で生成したデータなどが、一時的に格納される。
【００２５】
パケットキュー３０は、処理演算部１１〜処理演算部１６のそれぞれからパケット出力信号線５０に出力されたそれぞれのパケットを受信して格納する待ち行列のメモリである。パケットキュー３０には、処理演算部１１〜処理演算部１６のそれぞれから出力されたそれぞれのパケットが、順次格納される。そして、パケットキュー３０は、格納されたそれぞれのパケットをパケット入力信号線６０に出力することによって、処理演算部１１〜処理演算部１６のいずれか１つに送出する。つまり、パケットキュー３０は、処理演算部１１〜処理演算部１６のそれぞれにタスクを分配する。
【００２６】
なお、パケットキュー３０に格納されたそれぞれのパケットは、基本的に、格納された順番で出力されるが、演算装置１では、格納されたそれぞれのパケットをパケットキュー３０から出力する順番に関しては、何ら限定しない。ただし、いずれかの処理演算部によって呼び出された関数によって他の処理演算部がタスクの処理を実行した処理結果が含まれるパケットは、この関数を呼び出す元となったタスクの処理を行っている元の処理演算部に戻される。
【００２７】
処理演算部１１〜処理演算部１６のそれぞれは、パケットキュー３０から入力されたパケットに含まれるタスクの処理を実行するプロセッサである。処理演算部１１〜処理演算部１６のそれぞれは、例えば、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によって、バス４０を介して接続されたメモリ部２０へのデータの書き込みや、メモリ部２０からのデータの読み出しを行いながら、入力されたタスクの処理を分担して実行する。
【００２８】
なお、処理演算部１１〜処理演算部１６のそれぞれは、全て同じ処理機能を持っているプロセッサであってもよい。これにより、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに対して同じ演算処理を行う処理機能を有する演算装置が構成される。なお、処理演算部１１〜処理演算部１６のそれぞれは、全て異なる専門的な処理機能（以下、「専門機能」）を持っているプロセッサであってもよい。これにより、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに対して異なる専門的な演算処理を行う処理機能を有する演算装置が構成される。また、処理演算部１１〜処理演算部１６のそれぞれは、専門機能以外に、処理演算部１１〜処理演算部１６のいずれか複数または全てで共通の処理機能（以下、「共通機能」）を持っているプロセッサであってもよい。
【００２９】
処理演算部１１〜処理演算部１６のそれぞれは、パケットキュー３０からパケット入力信号線６０を介して入力されたパケットに含まれるタスクの処理の実行に際して、自身の持つ関数以外に、他の処理演算部が持つ関数（以下、「遠隔関数」という）を呼び出して入力されたタスクの処理を実行する場合には、遠隔関数によって処理を実行するタスクを含んだパケットを生成する。そして、処理演算部１１〜処理演算部１６のそれぞれは、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に出力する。
【００３０】
また、処理演算部１１〜処理演算部１６のそれぞれは、生成したパケットによって呼び出した遠隔関数によるタスクの処理が終了した処理結果が含まれるパケットが、パケットキュー３０からパケット入力信号線６０を介して入力されると、入力されたタスクの処理を完了する。なお、処理演算部１１〜処理演算部１６のそれぞれは、呼び出した遠隔関数によるタスクの処理が終了した処理結果に基づいて、自身の持つ関数によって引き続きタスクの処理を実行した後に、入力されたタスクの処理を完了することもある。
【００３１】
また、処理演算部１１〜処理演算部１６のそれぞれは、パケットキュー３０からパケット入力信号線６０を介して入力されたパケットに含まれるタスクによって、自身の持つ関数が遠隔関数として呼び出された場合、呼び出された遠隔関数によるタスクの処理を実行する。そして、処理演算部１１〜処理演算部１６のそれぞれは、呼び出された遠隔関数によるタスクの処理が終了した後に、呼び出された遠隔関数によってタスクの処理が終了したことを表すタスクが含まれるパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に出力する。
【００３２】
なお、処理演算部１１〜処理演算部１６のそれぞれは、パケットキュー３０からパケット入力信号線６０を介して入力されたパケットに含まれるタスクによって、自身の持つ関数が遠隔関数として呼び出され、呼び出された遠隔関数によるタスクの処理を実行する際に、さらに他の処理演算部が持つ遠隔関数を呼び出して、入力されたパケットに含まれるタスクの処理を行うこともある。この場合、処理演算部１１〜処理演算部１６のそれぞれは、さらに他の処理演算部が持つ遠隔関数を呼び出すためのタスクを含んだパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に出力する。このため、自身の持つ関数がさらなる遠隔関数として呼び出された処理演算部は、さらに呼び出された遠隔関数によるタスクの処理を実行し、さらに呼び出された遠隔関数によるタスクの処理が終了した後に、さらに呼び出された遠隔関数によってタスクの処理が終了したことを表すタスクが含まれるパケットを生成して、パケット出力信号線５０を介してパケットキュー３０に出力する。そして、さらに遠隔関数を呼び出した処理演算部は、生成したパケットによってさらに呼び出した遠隔関数によるタスクの処理が終了した処理結果が含まれるパケットが、パケットキュー３０からパケット入力信号線６０を介して入力されると、遠隔関数として呼び出された、自身の持つ関数によるタスクの処理が終了した後に、呼び出された遠隔関数によってタスクの処理が終了したことを表すタスクが含まれるパケットを生成して、パケット出力信号線５０を介してパケットキュー３０に出力する。
【００３３】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが生成したパケットが、パケットキュー３０を経由して、それぞれの処理演算部の間でやり取りされる。
【００３４】
なお、それぞれの処理演算部１１〜処理演算部１６の間でパケットキュー３０を介してやり取りするパケットには、呼び出す（呼び出された）遠隔関数を表す情報と、遠隔関数を呼び出す元となったパケットを識別するための情報とが、少なくとも含まれている。処理演算部１１〜処理演算部１６のそれぞれは、やり取りするパケットに含まれる、遠隔関数を呼び出す元となったパケットを識別するための情報によって、自身に入力されたパケットと、自身が生成して出力したパケットとを関連付ける。これにより、それぞれの処理演算部１１〜処理演算部１６は、パケットキュー３０からパケットが入力された際に、この遠隔関数を呼び出す元となったパケットを識別するための識別情報を参照することによって、今回入力されたパケットが、自身が遠隔関数を呼び出すために生成して出力したパケットに含まれるタスクの処理が終了して戻ってきたパケットであるか否かを判定することができる。つまり、自身が呼び出した遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを判定することができる。そして、この判定の結果、今回入力されたパケットが、自身が呼び出した遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合には、処理演算部１１〜処理演算部１６のそれぞれは、遠隔関数を呼び出す元となった以前のタスクの処理に戻って、前回入力されたパケットに含まれるタスクの処理を、自身の持つ関数によって引き続き実行することができる。
【００３５】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが、入力されたタスクの処理を実行する際に、他の処理演算部が持つ遠隔関数を呼び出すことによって、それぞれの処理演算部内で１つのタスクを複数のタスクに分割する。そして、処理演算部１１〜処理演算部１６のそれぞれは、自身が分割したタスクの処理が、それぞれの処理演算部によって全て終了したときに、入力されたタスクの処理を完了する。なお、処理演算部１１〜処理演算部１６のそれぞれによって、入力された１つのタスクを分割する方法や、タスクが含まれるパケットの構成に関しては、後述する。
【００３６】
次に、本実施形態の演算装置１において、１つのタスクが複数のタスクに分割して、複数の処理演算部によって実行する動作について説明する。図２は、本実施形態の演算装置１に備えた処理演算部が他の処理演算部の関数（遠隔関数）を呼び出してタスクの処理を実行する動作の一例を模式的に示した図である。図２には、最初にパケットが入力された処理演算部１１がパケットに含まれるタスクの処理を分割して生成したパケットを次の処理演算部１２に出力し、分割されたタスクが含まれるパケットが入力された処理演算部１２がさらにタスクの処理を分割して生成したパケットを次の処理演算部１４に出力することによって、処理演算部１１に入力されたパケットに含まれるタスクの処理を実行する動作を示している。
【００３７】
なお、以下の説明においては、最初にパケットが入力された処理演算部１１、つまり、入力されたパケットに含まれるタスクを最初に分割し、分割したタスクが含まれるパケット（以下、「第１のパケット」という）を、パケットキュー３０を介してやり取りする処理演算部１１を、「依頼元処理演算部１１」という。また、依頼元処理演算部１１から出力されたパケットが入力された処理演算部１２、つまり、最初に分割されたタスクを含んだ第１のパケットが入力され、第１のパケットに含まれるタスクをさらに分割し、分割したタスクが含まれるパケット（以下、「第２のパケット」という）を、パケットキュー３０を介してやり取りする処理演算部１２を、「第１の請負側処理演算部１２」という。また、第１の請負側処理演算部１２から出力されたパケットが入力された処理演算部１４、つまり、２回目に分割されたタスクを含んだ第２のパケットが入力され、第２のパケットに含まれるタスクの処理を実行する処理演算部１４を、「第２の請負側処理演算部１４」という。
【００３８】
また、以下の説明においては、それぞれの処理演算部の間でやり取りするパケットの入出力の方向を明確にするため、前段の処理演算部から後段の処理演算部に送信するパケットを「送信パケット」といい、後段の処理演算部から前段の処理演算部に送信するパケット、つまり、前段の処理演算部に戻ってくるパケットを「受信パケット」という。例えば、依頼元処理演算部１１から第１の請負側処理演算部１２に送信する第１のパケットを「第１の送信パケット」といい、第１の請負側処理演算部１２から依頼元処理演算部１１に送信する第１のパケットを「第１の受信パケット」という。
【００３９】
まず、最初のパケットが入力された依頼元処理演算部１１は、入力されたパケット（以下、「依頼元パケット」という）に含まれるタスクの処理を実行する。このとき、依頼元処理演算部１１は、入力された依頼元パケットに含まれるタスクの処理において、このタスクの処理を開始する開始関数（以下、「依頼元開始関数」という）と、このタスクの処理の終了を判定する終了関数（以下、「依頼元終了関数」という）との２つに分離する。そして、依頼元処理演算部１１は、分離した依頼元開始関数による処理を実行する。ここで、依頼元開始関数には、タスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）も含まれている。このため、依頼元処理演算部１１は、依頼元開始関数による処理において、遠隔関数（以下、「第１の遠隔関数」という）を呼び出して処理を実行するタスクを含んだ第１の送信パケットＰ１１Ｔを生成し、生成した第１の送信パケットＰ１１Ｔを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ１０１参照）。
【００４０】
この第１の送信パケットＰ１１Ｔには、呼び出す第１の遠隔関数を表す情報と、第１の遠隔関数を呼び出す元となった依頼元パケットを識別するための情報とが、少なくとも含まれる。また、第１の送信パケットＰ１１Ｔには、呼び出した第１の遠隔関数によってタスクの処理を実行する際に必要なパラメータやタスクの処理を実行する対象のデータ、なども含まれる。
【００４１】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第１の送信パケットＰ１１Ｔが入力される（Ｃ１０２参照）。第１の送信パケットＰ１１Ｔが入力された第１の請負側処理演算部１２は、入力された第１の送信パケットＰ１１Ｔに含まれるタスクの処理を実行する。このとき、第１の請負側処理演算部１２は、入力された第１の送信パケットＰ１１Ｔに含まれるタスクの処理において、このタスクの処理を開始する第１の遠隔開始関数と、このタスクの処理の終了を判定する第１の遠隔終了関数との２つに分離する。そして、第１の請負側処理演算部１２は、分離した第１の遠隔開始関数による処理を実行する。ここで、第１の遠隔開始関数には、タスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）も含まれている。このため、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、さらに遠隔関数（以下、「第２の遠隔関数」という）を呼び出して処理を実行するタスクを含んだ第２の送信パケットＰ１２Ｔを生成し、生成した第２の送信パケットＰ１２Ｔを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ１０３参照）。
【００４２】
この第２の送信パケットＰ１２Ｔには、呼び出す第２の遠隔関数を表す情報と、第２の遠隔関数を呼び出す元となった第１の送信パケットＰ１１Ｔを識別するための情報とが、少なくとも含まれる。また、第２の送信パケットＰ１２Ｔには、呼び出した第２の遠隔関数によってタスクの処理を実行する際に必要なパラメータやタスクの処理を実行する対象のデータ、なども含まれる。
【００４３】
その後、第２の請負側処理演算部１４に、パケットキュー３０からパケット入力信号線６０を介して第２の送信パケットＰ１２Ｔが入力される（Ｃ１０４参照）。第２の送信パケットＰ１２Ｔが入力された第２の請負側処理演算部１４は、呼び出された第２の遠隔関数によって、入力された第２の送信パケットＰ１２Ｔに含まれるタスクの処理を実行する。そして、呼び出された第２の遠隔関数によるタスクの処理が終了した後に、呼び出された第２の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２の受信パケットＰ１２Ｒを生成し、生成した第２の受信パケットＰ１２Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ１０５参照）。
【００４４】
この第２の受信パケットＰ１２Ｒには、呼び出された第２の遠隔関数を表す情報と、第２の遠隔関数を呼び出す元となった第１の送信パケットＰ１１Ｔを識別するための情報とが、少なくとも含まれる。また、第２の受信パケットＰ１２Ｒには、呼び出された第２の遠隔関数によるタスクの処理を実行した処理結果、呼び出した第２の遠隔関数に引き続いて第１の遠隔関数によるタスクの処理を実行する際に必要なパラメータ、なども含まれる。
【００４５】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第２の受信パケットＰ１２Ｒが入力される（Ｃ１０６参照）。第２の受信パケットＰ１２Ｒが入力された第１の請負側処理演算部１２は、分離した第１の遠隔終了関数によって、第１の遠隔関数によるタスクの処理の終了を判定する処理を実行する。この判定の処理では、第２の受信パケットＰ１２Ｒに含まれる、第２の遠隔関数を呼び出す元となった第１の送信パケットＰ１１Ｔを識別するための情報、つまり、第１の請負側処理演算部１２自身が第２の送信パケットＰ１２Ｔに含めた情報に基づいて実行される。そして、第１の遠隔関数によるタスクの処理の終了を判定した結果、呼び出された第１の遠隔関数によるタスクの処理が終了した場合には、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ１１Ｒを生成し、生成した第１の受信パケットＰ１１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ１０７参照）。
【００４６】
また、第１の遠隔関数によるタスクの処理の終了を判定した結果、引き続き第１の遠隔関数によるタスクの処理を行う場合には、入力された第２の受信パケットＰ１２Ｒに含まれる、第２の遠隔関数によるタスクの処理を実行した処理結果に基づいて、呼び出された第１の遠隔関数によるタスクの処理を引き続き実行する。そして、引き続き実行した第１の遠隔関数によるタスクの処理が終了した後に、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ１１Ｒを生成し、生成した第１の受信パケットＰ１１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ１０７参照）。
【００４７】
この第１の受信パケットＰ１１Ｒには、呼び出された第１の遠隔関数を表す情報と、第１の遠隔関数を呼び出す元となった依頼元パケットを識別するための情報とが、少なくとも含まれる。また、第１の受信パケットＰ１１Ｒには、呼び出された第１の遠隔関数によるタスクの処理を実行した処理結果、呼び出した第１の遠隔関数に引き続いて依頼元パケットに含まれるタスクの処理を実行する際に必要なパラメータ、なども含まれる。
【００４８】
その後、依頼元処理演算部１１に、パケットキュー３０からパケット入力信号線６０を介して第１の受信パケットＰ１１Ｒが入力される（Ｃ１０８参照）。第１の受信パケットＰ１１Ｒが入力された依頼元処理演算部１１は、分離した依頼元終了関数によって、入力された依頼元パケットに含まれるタスクの処理の終了を判定する処理を実行する。この判定の処理では、第１の受信パケットＰ１１Ｒに含まれる、第１の遠隔関数を呼び出す元となった依頼元パケットを識別するための情報、つまり、依頼元処理演算部１１自身が第１の送信パケットＰ１１Ｔに含めた情報に基づいて実行される。そして、入力された依頼元パケットに含まれるタスクの処理の終了を判定した結果、依頼元パケットに含まれるタスクの処理が終了した場合には、入力された依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に送信する。
【００４９】
また、入力された依頼元パケットに含まれるタスクの処理の終了を判定した結果、引き続き依頼元パケットに含まれるタスクの処理を行う場合には、入力された第１の受信パケットＰ１１Ｒに含まれる、第１の遠隔関数によるタスクの処理を実行した処理結果に基づいて、依頼元パケットに含まれるタスクの処理を引き続き実行する。そして、引き続き実行した依頼元パケットに含まれるタスクの処理が終了した後に、入力された依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に送信する。
【００５０】
次に、本実施形態の演算装置１において、処理演算部のそれぞれが生成するパケットについて説明する。図３は、本実施形態の演算装置１に備えた処理演算部が他の処理演算部の関数（遠隔関数）を呼び出す際に生成するパケットの構成を説明する図である。処理演算部１１〜処理演算部１６のそれぞれが生成するパケットの構成は、パケットに含まれる情報が異なるのみで、図３に示したパケットの構成と同様の構成である。図３では、それぞれの処理演算部１１〜処理演算部１６が出力するパケットの構成の一例として、図２に示した依頼元処理演算部１１が出力する第１の送信パケットＰ１１Ｔの構成の一例を図３（ａ）に、第２の請負側処理演算部１４が出力する第２の受信パケットＰ１２Ｒの構成の一例を図３（ｂ）に、それぞれ示している。
【００５１】
それぞれの処理演算部１１〜処理演算部１６の間でやり取りするパケットには、上述したように、呼び出す（呼び出された）遠隔関数を表す情報と、遠隔関数を呼び出す元となったパケットを識別するための情報とが、少なくとも含まれている。また、それぞれの処理演算部１１〜処理演算部１６が遠隔関数を呼び出すために生成するパケットには、上述したように、呼び出す遠隔関数によってタスクの処理を実行する際に必要なパラメータやタスクの処理を実行する対象のデータ、などが含まれる。さらに、それぞれの処理演算部１１〜処理演算部１６が遠隔関数を呼び出すために生成するパケットには、呼び出した遠隔関数に引き続き実行する関数を表す情報、なども含まれる。
【００５２】
より具体的には、図３（ａ）に示したように、第１の送信パケットＰ１１Ｔには、呼び出す第１の遠隔関数を表す情報である「第１の遠隔開始関数アドレス」（Ｔ１１参照）と、第１の遠隔関数を呼び出す元となった依頼元パケットを識別するための情報である「依頼元パケット識別子」（Ｔ１２参照）とが、それぞれ含まれている。また、図３（ａ）に示したように、第１の送信パケットＰ１１Ｔには、呼び出す遠隔関数によってタスクの処理を実行する際に必要なパラメータである「処理パラメータ，データ」（Ｔ１３参照）と、タスクの処理を実行する対象のデータである「処理対象データ」（Ｔ１４参照）と、呼び出した遠隔関数に引き続き実行する関数を表す情報である「依頼元終了関数アドレス」（Ｔ１５参照）とが、それぞれ含まれている。
【００５３】
また、それぞれの処理演算部１１〜処理演算部１６が呼び出された遠隔関数によってタスクの処理が終了した後に生成するパケットには、上述したように、呼び出された遠隔関数によるタスクの処理を実行した処理結果、呼び出した遠隔関数に引き続いてタスクの処理を実行する際に必要なパラメータ、などが含まれる。さらに、それぞれの処理演算部１１〜処理演算部１６が呼び出された遠隔関数によってタスクの処理が終了した後に生成するパケットには、呼び出した遠隔関数に引き続き実行する関数を表す情報、なども含まれる。
【００５４】
より具体的には、図３（ｂ）に示したように、第２の受信パケットＰ１２Ｒには、呼び出された第２の遠隔関数を表す情報である「第２の遠隔関数アドレス」（Ｒ１１参照）と、第２の遠隔関数を呼び出す元となった第１のパケットを識別するための情報である「第１のパケット識別子」（Ｒ１２参照）とが、それぞれ含まれている。また、図３（ｂ）に示したように、第２の受信パケットＰ１２Ｒには、呼び出された第２の遠隔関数によるタスクの処理を実行した処理結果である「処理結果データ」（Ｒ１３参照）と、呼び出した第２の遠隔関数に引き続いてタスクの処理を実行する際に必要なパラメータである「処理パラメータ」（Ｒ１４参照）と、呼び出した遠隔関数に引き続き実行する関数を表す情報である「第１の遠隔終了関数アドレス」（Ｒ１５参照）とが、それぞれ含まれている。
【００５５】
ここで、例えば、第１の遠隔開始関数アドレスは、呼び出す第１の遠隔関数が格納されている、メモリ部２０の記憶領域を表すアドレスである。従って、第１の遠隔関数が呼び出された処理演算部（図２においては、第１の請負側処理演算部１２）は、第１の遠隔開始関数アドレスで示されたメモリ部２０の記憶領域に格納された第１の遠隔関数を、バス４０を介して読み出して、第１の遠隔関数によるタスクの処理を実行する。
【００５６】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに含まれる１つのタスクの処理を、他の処理演算部が持つ遠隔関数によって処理を実行する複数のタスクに分割する。なお、図２に示した動作の一例では、依頼元処理演算部１１と第１の請負側処理演算部１２とのそれぞれが、入力されたパケットに含まれるタスクの処理を分割し、遠隔関数によって処理を実行するタスクが含まれる１つのパケットを他の処理演算部（図２では、第１の請負側処理演算部１２または第２の請負側処理演算部１４）に送信して処理させる場合について説明した。しかし、それぞれの処理演算部１１〜処理演算部１６が分割するタスクの数、つまり、遠隔関数によって処理を実行するタスクが含まれるパケットの数は、さらに多くの数であってもよい。
【００５７】
次に、本実施形態の演算装置１において、１つのタスクを複数のタスクに分割して、複数の処理演算部によって実行する別の動作について説明する。図４は、本実施形態の演算装置１に備えた処理演算部が他の処理演算部の関数（遠隔関数）を呼び出してタスクの処理を実行する動作の別の一例を模式的に示した図である。図４には、最初にパケットが入力された処理演算部１１がパケットに含まれるタスクの処理を分割して生成したパケットを次の処理演算部１２に出力し、分割されたタスクが含まれるパケットが入力された処理演算部１２がさらにタスクの処理を分割して生成した２つのパケットを次の処理演算部１４に出力することによって、処理演算部１１に入力されたパケットに含まれるタスクの処理を実行する動作を示している。
【００５８】
なお、以下の説明においても、処理演算部１１を依頼元処理演算部１１といい、処理演算部１２を第１の請負側処理演算部１２といい、処理演算部１４を第２の請負側処理演算部１４という。また、依頼元処理演算部１１に入力されたパケットを依頼元パケットといい、依頼元処理演算部１１に入力された依頼元パケットに含まれるタスクを分割したタスクが含まれるパケットを第１のパケットといい、第１の請負側処理演算部１２が第１のパケットに含まれるタスクをさらに分割したタスクが含まれるパケットを第２のパケットという。ただし、図４に示した動作の一例では、第１の請負側処理演算部１２が、第１のパケットに含まれるタスクを分割したそれぞれのタスクが含まれる２つの第２のパケットを生成する。以下の説明においては、２つの第２のパケットのそれぞれを区別して表す場合に、それぞれの第２のパケットをパケットキュー３０に出力する順番に、「第２ａのパケット」、「第２ｂのパケット」という。
【００５９】
なお、それぞれの処理演算部の間でやり取りするパケットの入出力の方向を明確にする方法は、図２に示した動作の一例と同様である。例えば、第１の請負側処理演算部１２から第２の請負側処理演算部１４に送信する第２ａのパケットを「第２ａの送信パケット」といい、第２の請負側処理演算部１４から第１の請負側処理演算部１２に送信する第２ａのパケットを「第２ａの受信パケット」という。
【００６０】
まず、最初の依頼元パケットが入力された依頼元処理演算部１１は、入力された依頼元パケットに含まれるタスクの処理を実行する。このとき、依頼元処理演算部１１は、入力された依頼元パケットに含まれるタスクの処理において、このタスクの処理を開始する依頼元開始関数と、このタスクの処理の終了を判定する依頼元終了関数との２つに分離する。そして、依頼元処理演算部１１は、分離した依頼元開始関数による処理を実行する。ここで、依頼元開始関数には、タスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）も含まれている。このため、依頼元処理演算部１１は、依頼元開始関数による処理において、第１の遠隔関数を呼び出して処理を実行するタスクを含んだ第１の送信パケットＰ２１Ｔを生成し、生成した第１の送信パケットＰ２１Ｔを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ２０１参照）。
【００６１】
この第１の送信パケットＰ２１Ｔには、図３（ａ）に示した第１の送信パケットＰ１１Ｔと同様の情報が含まれる。ただし、この第１の送信パケットＰ２１Ｔを生成して出力する依頼元処理演算部１１は、次の処理演算部において、この第１の送信パケットＰ２１Ｔに含まれるタスクを分割するか否かを管理していない。つまり、依頼元処理演算部１１は、第１の送信パケットＰ２１Ｔに含まれるタスクが分割されて第２のパケットとして他の処理演算部に送信されるか否かを管理しておらず、仮に第１の送信パケットＰ２１Ｔに含まれるタスクが分割されて第２のパケットとして送信されるとした場合でも、分割されるパケットの数を管理していない。従って、依頼元処理演算部１１は、第１の送信パケットＰ２１Ｔ内に、この第１の送信パケットＰ２１Ｔが第２のパケットとして分割される数を計数（カウント）するための変数（以下「カウンタ変数」という）の情報を、さらに含める。
【００６２】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第１の送信パケットＰ２１Ｔが入力される（Ｃ２０２参照）。第１の送信パケットＰ２１Ｔが入力された第１の請負側処理演算部１２は、入力された第１の送信パケットＰ２１Ｔに含まれるタスクの処理を実行する。このとき、第１の請負側処理演算部１２は、入力された第１の送信パケットＰ２１Ｔに含まれるタスクの処理において、このタスクの処理を開始する第１の遠隔開始関数と、このタスクの処理の終了を判定する第１の遠隔終了関数との２つに分離する。そして、第１の請負側処理演算部１２は、分離した第１の遠隔開始関数による処理を実行する。ここで、第１の遠隔開始関数には、タスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）が、複数含まれている。このため、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、さらに第２の遠隔関数のそれぞれを呼び出して処理を実行するタスクを含んだ複数の第２の送信パケットＰ２２Ｔを生成し、生成したそれぞれの第２の送信パケットＰ２２Ｔを、パケット出力信号線５０を介してパケットキュー３０に順次送信する（Ｃ２０３参照）。
【００６３】
図４に示した動作の一例では、第２の遠隔関数を呼び出して処理を実行する２つのタスクを含んでいる場合の一例を示している。従って、第１の請負側処理演算部１２は、第２の遠隔関数のそれぞれを呼び出して処理を実行するタスクを含んだ２つの第２の送信パケットＰ２２Ｔ（第２ａの送信パケットＰ２２Ｔａおよび第２ｂの送信パケットＰ２２Ｔｂ）を生成する。このため、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、第１の送信パケットＰ２１Ｔに含まれているカウンタ変数の情報を用いて、パケットキュー３０に送信した第２の送信パケットＰ２２Ｔの数を管理する。
【００６４】
より具体的には、図４に示した第１の請負側処理演算部１２内の第１の遠隔開始関数において、まず、カウンタ変数の値を“＋１”した後（ステップＳ１１）に、１つ目の第２ａの送信パケットＰ２２Ｔａを、パケット出力信号線５０を介してパケットキュー３０に送信する（ステップＳ１２）。その後、パケット出力信号線５０を介してパケットキュー３０に送信する第２の送信パケットＰ２２Ｔの生成が全て終了したか否かを判定（ステップＳ１３）し、第２の送信パケットＰ２２Ｔの生成が全て終了していない場合には、ステップＳ１１に戻って、さらにカウンタ変数の値を“＋１”した後に、２つ目の第２ｂの送信パケットＰ２２Ｔｂを、パケット出力信号線５０を介してパケットキュー３０に送信する。以降、同様に、第１の請負側処理演算部１２は、第１の遠隔開始関数におけるステップＳ１１〜ステップＳ１３を繰り返し、パケットキュー３０に送信した第２の送信パケットＰ２２Ｔの数をカウントしながら、生成した第２の送信パケットＰ２２Ｔを、パケットキュー３０に順次送信する。このようにして、第１の請負側処理演算部１２は、パケット出力信号線５０を介してパケットキュー３０に送信した第２の送信パケットＰ２２Ｔの数を管理する。
【００６５】
この第２の送信パケットＰ２２Ｔのそれぞれには、図３（ａ）に示した第１の送信パケットＰ１１Ｔと同様の情報が含まれる。ただし、この第２の送信パケットＰ２２Ｔを生成して出力する第１の請負側処理演算部１２も、依頼元処理演算部１１と同様に、次の処理演算部において、この第２の送信パケットＰ２２Ｔに含まれるタスクを分割するか否かを管理していない。従って、第１の請負側処理演算部１２も、依頼元処理演算部１１と同様に、それぞれの第２の送信パケットＰ２２Ｔ内に、この第２の送信パケットＰ２２Ｔが第３のパケットとして分割される数を計数（カウント）するためのカウンタ変数の情報を、さらに含める。
【００６６】
その後、第２の請負側処理演算部１４に、パケットキュー３０からパケット入力信号線６０を介して第２の送信パケットＰ２２Ｔのそれぞれが順次入力される（Ｃ２０４参照）。第２の請負側処理演算部１４は、入力されたそれぞれの第２の送信パケットＰ２２Ｔで呼び出されたそれぞれの第２の遠隔関数によって、入力された第２の送信パケットＰ２２Ｔのそれぞれに含まれるタスクの処理を順次実行する。そして、呼び出されたそれぞれの第２の遠隔関数によるタスクの処理が終了する毎に、呼び出された第２の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２の受信パケットＰ２２Ｒを生成し、生成した第２の受信パケットＰ２２Ｒを、パケット出力信号線５０を介してパケットキュー３０に順次送信する（Ｃ２０５参照）。
【００６７】
図４に示した動作の一例では、第２の請負側処理演算部１４に、２つの第２の送信パケットＰ２２Ｔ（第２ａの送信パケットＰ２２Ｔａおよび第２ｂの送信パケットＰ２２Ｔｂ）が順次入力される。従って、第２の請負側処理演算部１４は、第２ａの送信パケットＰ２２Ｔａで呼び出された第２の遠隔関数によるタスクの処理が終了した後に、第２ａの送信パケットＰ２２Ｔａで呼び出された第２の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ａの受信パケットＰ２２Ｒａを生成し、生成した第２ａの受信パケットＰ２２Ｒａを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ２０５参照）。その後、第２の請負側処理演算部１４は、第２ｂの送信パケットＰ２２Ｔｂで呼び出された第２の遠隔関数によるタスクの処理が終了した後に、第２ｂの送信パケットＰ２２Ｔｂで呼び出された第２の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ｂの受信パケットＰ２２Ｒｂを生成し、生成した第２ｂの受信パケットＰ２２Ｒｂを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ２０５参照）。この第２の受信パケットＰ２２Ｒのそれぞれには、図３（ｂ）に示した第２の受信パケットＰ１２Ｒと同様の情報が含まれる。
【００６８】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第２の受信パケットＰ２２Ｒのそれぞれが順次入力される（Ｃ２０６参照）。それぞれの第２の受信パケットＰ２２Ｒが入力された第１の請負側処理演算部１２は、分離した第１の遠隔終了関数によって、第１の遠隔関数によるタスクの処理の終了を判定する処理を実行する。この判定の処理では、それぞれの第２の受信パケットＰ２２Ｒに含まれる、第２の遠隔関数を呼び出す元となった第１の送信パケットＰ２１Ｔを識別するための情報、つまり、第１の請負側処理演算部１２自身がそれぞれの第２の送信パケットＰ２２Ｔに含めた情報に基づいて実行される。なお、この判定の処理は、第１の遠隔開始関数による処理において生成した全ての第２の送信パケットＰ２２Ｔと同じ数の第２の受信パケットＰ２２Ｒが入力された後に実行される。従って、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において生成した全ての第２の送信パケットＰ２２Ｔと同じ数の第２の受信パケットＰ２２Ｒが入力されたか否かを確認する。
【００６９】
図４に示した動作の一例では、第２の遠隔関数を呼び出して処理を実行する２つのタスクを含んでいる場合の一例を示している。このため、第１の請負側処理演算部１２は、第２の遠隔関数のそれぞれを呼び出して処理を実行するタスクを含んだ２つの第２の送信パケットＰ２２Ｔ（第２ａの送信パケットＰ２２Ｔａおよび第２ｂの送信パケットＰ２２Ｔｂ）と同じ数の第２の受信パケットＰ２２Ｒ（第２ａの受信パケットＰ２２Ｒａおよび第２ｂの受信パケットＰ２２Ｒｂ）が入力されたか否かを確認する。この第２の受信パケットＰ２２Ｒが入力された数の確認は、第１の送信パケットＰ２１Ｔに含まれているカウンタ変数の情報、つまり、第１の遠隔開始関数による処理において更新したカウンタ変数の値に基づいて行う。
【００７０】
より具体的には、図４に示した第１の請負側処理演算部１２内の第１の遠隔終了関数において、まず、１つ目の第２ａの受信パケットＰ２２Ｒａを、パケットキュー３０からパケット入力信号線６０を介して受信する（ステップＳ２１）。そして、受信した第２ａの受信パケットＰ２２Ｒａに、第１の請負側処理演算部１２自身が第２の送信パケットＰ１２Ｔに含めた、第１の送信パケットＰ１１Ｔを識別するための情報が含まれている場合に、カウンタ変数の値を“−１”する（ステップＳ２２）。その後、パケットキュー３０からパケット入力信号線６０を介して全ての第２の受信パケットＰ２２Ｒの受信が終了したか否かを判定、すなわち、カウンタ変数の値が“０”であるか否かを判定する（ステップＳ２３）。この判定の結果、カウンタ変数の値が“０”でない、すなわち、第２の受信パケットＰ２２Ｒの受信が全て終了していない場合には、ステップＳ２１に戻って、２つ目の第２ｂの受信パケットＰ２２Ｒｂを受信して、さらにカウンタ変数の値を“−１”する。以降、同様に、第１の請負側処理演算部１２は、第１の遠隔終了関数におけるステップＳ２１〜ステップＳ２３を繰り返し、受信した第２の受信パケットＰ２２Ｒの数をカウントしながら、カウンタ変数の値が“０”であるか否か、すなわち、送信した第２の送信パケットＰ２２Ｔと同じ数の第２の受信パケットＰ２２Ｒを受信したか否かを確認する。このようにして、第１の請負側処理演算部１２は、パケットキュー３０からパケット入力信号線６０を介して受信した第２の受信パケットＰ２２Ｒの数を管理する。
【００７１】
そして、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において生成した全ての第２の送信パケットＰ２２Ｔと同じ数の第２の受信パケットＰ２２Ｒが入力された後、第１の遠隔関数によるタスクの処理の終了を判定する。第１の遠隔関数によるタスクの処理の終了を判定した結果、呼び出された第１の遠隔関数によるタスクの処理が終了した場合には、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ２１Ｒを生成し、生成した第１の受信パケットＰ２１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ２０７参照）。
【００７２】
また、第１の遠隔関数によるタスクの処理の終了を判定した結果、引き続き第１の遠隔関数によるタスクの処理を行う場合には、入力されたそれぞれの第２の受信パケットＰ２２Ｒに含まれる、第２の遠隔関数によるタスクの処理を実行したそれぞれの処理結果に基づいて、呼び出された第１の遠隔関数によるタスクの処理を引き続き実行する。そして、引き続き実行した第１の遠隔関数によるタスクの処理が終了した後に、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ２１Ｒを生成し、生成した第１の受信パケットＰ２１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ２０７参照）。この第１の受信パケットＰ２１Ｒには、図３（ｂ）に示した第２の受信パケットＰ１２Ｒと同様の情報が含まれる。
【００７３】
その後、依頼元処理演算部１１に、パケットキュー３０からパケット入力信号線６０を介して第１の受信パケットＰ２１Ｒが入力される（Ｃ２０８参照）。第１の受信パケットＰ２１Ｒが入力された依頼元処理演算部１１は、分離した依頼元終了関数によって、入力された依頼元パケットに含まれるタスクの処理の終了を判定する処理を実行する。この判定の処理では、第１の受信パケットＰ２１Ｒに含まれる、第１の遠隔関数を呼び出す元となった依頼元パケットを識別するための情報、つまり、依頼元処理演算部１１自身が第１の送信パケットＰ２１Ｔに含めた情報に基づいて実行される。そして、入力された依頼元パケットに含まれるタスクの処理の終了を判定した結果、依頼元パケットに含まれるタスクの処理が終了した場合には、入力された依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に送信する。
【００７４】
また、入力された依頼元パケットに含まれるタスクの処理の終了を判定した結果、引き続き依頼元パケットに含まれるタスクの処理を行う場合には、入力された第１の受信パケットＰ２１Ｒに含まれる、第１の遠隔関数によるタスクの処理を実行した処理結果に基づいて、依頼元パケットに含まれるタスクの処理を引き続き実行する。そして、引き続き実行した依頼元パケットに含まれるタスクの処理が終了した後に、入力された依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成し、生成したパケットを、パケット出力信号線５０を介してパケットキュー３０に送信する。
【００７５】
次に、本実施形態の演算装置１において、１つのタスクを複数のタスクに分割する場合に、処理演算部のそれぞれが生成するパケットについて説明する。図５は、本実施形態の演算装置１に備えた処理演算部が他の処理演算部の関数（遠隔関数）を複数呼び出す際に生成するパケットの構成を説明する図である。処理演算部１１〜処理演算部１６のそれぞれが生成するパケットの構成は、パケットに含まれる情報が異なるのみで、図５に示したパケットの構成と同様の構成である。図５では、それぞれの処理演算部１１〜処理演算部１６が出力するパケットの構成の一例として、図４に示した依頼元処理演算部１１が出力する第１の送信パケットＰ２１Ｔの構成の一例を図５（ａ）に、第２の請負側処理演算部１４が出力する複数の第２の受信パケットＰ２２Ｒの構成の一例を図５（ｂ）に、それぞれ示している。
【００７６】
それぞれの処理演算部１１〜処理演算部１６の間でやり取りするパケットには、上述したように、図３（ａ）に示した第１の送信パケットＰ１１Ｔ、および図３（ｂ）に示した第２の受信パケットＰ１２Ｒと同様の情報が、少なくとも含まれる。以下の説明においては、図３に示したそれぞれのパケットに含まれる情報と同じ情報には同一の符号を付与して詳細な説明を省略し、図３に示したそれぞれのパケットに含まれる情報と異なる情報のみについて説明する。
【００７７】
それぞれの処理演算部１１〜処理演算部１６が遠隔関数を呼び出すために生成するパケットには、上述したように、このパケットが次のパケットとして分割される数、つまり、このパケットで呼び出した遠隔関数によって分割されるタスクの数をカウントするためのカウンタ変数の情報が、さらに含まれる。より具体的には、図５（ａ）に示したように、第１の送信パケットＰ２１Ｔには、この第１の送信パケットＰ２１Ｔで呼び出した第１の遠隔関数によって第２のパケットとして分割される数を表すカウンタ変数の情報である「第２のパケット数カウンタ変数」（Ｔ２６参照）が含まれている。
【００７８】
また、それぞれの処理演算部１１〜処理演算部１６が呼び出された遠隔関数によってタスクの処理が終了した後に生成するパケットには、上述したように、図３（ｂ）に示した第２の受信パケットＰ１２Ｒと同様の情報のみが含まれる。ただし、第２の受信パケットＰ２２Ｒのそれぞれに含まれる、「第２の遠隔関数アドレス」（Ｒ１１参照）は、呼び出されたそれぞれの第２の遠隔関数を表す情報であるため、第２の受信パケットＰ２２Ｒ毎に異なる情報が含まれている。より具体的には、図５（ｂ）に示したように、第２の受信パケットＰ２２Ｒが４つの第２のパケットで構成されている場合、１つ目の第２ａの受信パケットＰ２２Ｒａには「第２ａの遠隔関数アドレス」（Ｒ１１参照）が、含まれている。また、２つ目の第２ｂの受信パケットＰ２２Ｒｂには「第２ｂの遠隔関数アドレス」が、３つ目の第２ｃの受信パケットＰ２２Ｒｃには「第２ｃの遠隔関数アドレス」が、４つ目の第２ｄの受信パケットＰ２２Ｒｄには「第２ｄの遠隔関数アドレス」が、それぞれ含まれている。
【００７９】
本実施形態によれば、パケット（依頼元パケット、第１の送信パケット、第１の受信パケット、第２の送信パケット、第２の受信パケットなど）を互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部（処理演算部１１〜処理演算部１６）と、演算処理の処理内容を表す複数の関数で構成されたタスクを含むパケットを格納するパケットキュー（パケットキュー３０）と、を備え、処理演算部１１〜処理演算部１６のそれぞれは、入力されたパケットに含まれるタスクの処理において、このタスクの処理を自身の持つ関数によって開始する開始関数（依頼元開始関数、第１の遠隔開始関数など）と、このタスクの処理の終了を自身の持つ関数によって判定する終了関数（依頼元終了関数、第１の遠隔終了関数など）とに分離し、開始関数によって開始したこのタスクの処理において、他の処理演算部１１〜処理演算部１６が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割し、この分割したタスクの処理において呼び出す第１の遠隔関数の情報（第１の遠隔開始関数アドレス、第２の遠隔関数アドレスなど）と、この分割したタスクが含まれている元のパケットを識別するための情報（依頼元パケット識別子、第１のパケット識別子など）とが少なくとも含まれるパケットを生成して、第１の送信パケットとしてパケットキュー３０を介して他の処理演算部１１〜処理演算部１６に送信し、タスクの処理結果が含まれるパケットを、第１の受信パケットとしてパケットキュー３０を介して他の処理演算部１１〜処理演算部１６から受信した後に、終了関数によるこのタスクの処理において、受信した第１の受信パケットが、自身が送信した第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、この第１の受信パケットに含まれるパケットを識別するための情報（第１のパケット識別子）に基づいて判定し、受信した第１の受信パケットが、自身が送信した第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力されたパケットに含まれるタスクの処理が終了したと判定し、このタスクの処理結果（処理結果データ、処理パラメータなど）を含めたパケットを生成してパケットキュー３０に送信する、演算装置が構成される。
【００８０】
また、本実施形態によれば、パケット（依頼元パケット、第１の送信パケット、第１の受信パケット、第２の送信パケット、第２の受信パケットなど）を互いにやり取りすることによって、要求された演算処理を分担して実行する複数の処理演算部（処理演算部１１〜処理演算部１６）と、演算処理の処理内容を表す複数の関数で構成されたタスクを含むパケットを格納するパケットキュー（パケットキュー３０）と、を備えた本実施形態の演算装置における演算方法であって、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに含まれるタスクの処理において、このタスクの処理を自身の持つ関数によって開始する開始関数（依頼元開始関数、第１の遠隔開始関数など）と、このタスクの処理の終了を自身の持つ関数によって判定する終了関数（依頼元終了関数、第１の遠隔終了関数など）とに分離する手順と、開始関数によって開始したこのタスクの処理において、他の処理演算部１１〜処理演算部１６が持つ関数を第１の遠隔関数として呼び出して実行するタスクを分割する手順と、この分割したタスクの処理において呼び出す第１の遠隔関数の情報（第１の遠隔開始関数アドレス、第２の遠隔関数アドレスなど）と、この分割したタスクが含まれている元のパケットを識別するための情報（依頼元パケット識別子、第１のパケット識別子など）とが少なくとも含まれるパケットを生成して、第１の送信パケットとしてパケットキュー３０を介して他の処理演算部１１〜処理演算部１６に送信する手順と、タスクの処理結果が含まれるパケットを、第１の受信パケットとしてパケットキュー３０を介して他の処理演算部１１〜処理演算部１６から受信した後に、終了関数によるこのタスクの処理において、受信した第１の受信パケットが、自身が送信した第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットであるか否かを、この第１の受信パケットに含まれるパケットを識別するための情報（第１のパケット識別子）に基づいて判定する手順と、受信した第１の受信パケットが、自身が送信した第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了して戻ってきたパケットである場合に、入力されたパケットに含まれるタスクの処理が終了したと判定し、このタスクの処理結果（処理結果データ、処理パラメータなど）を含めたパケットを生成してパケットキュー３０に送信する手順と、を含む演算方法が構成される。
【００８１】
また、本実施形態によれば、第１の送信パケットは、第１の送信パケットに含まれる第１の遠隔関数によるタスクからさらに、他の処理演算部１１〜処理演算部１６が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、処理演算部１１〜処理演算部１６のそれぞれは、自身が送信した第２の送信パケットの数と、自身が送信した第２の送信パケットに含まれる第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了したと判定する、演算装置が構成される。
【００８２】
また、本実施形態によれば、第１の送信パケットは、第１の送信パケットに含まれる第１の遠隔関数によるタスクからさらに、他の処理演算部１１〜処理演算部１６が持つ関数を第２の遠隔関数として呼び出して実行するタスクを分割したときに生成する第２の送信パケットの数を計数するためのカウンタ変数の情報を含み、処理演算部１１〜処理演算部１６のそれぞれが、自身が送信した第２の送信パケットの数と、自身が送信した第２の送信パケットに含まれる第２の遠隔関数によるタスクの処理が終了して戻ってきた第２の受信パケットの数とが同じ数である場合に、入力された第１の送信パケットに含まれる第１の遠隔関数によるタスクの処理が終了したと判定する手順、を含む演算方法が構成される。
【００８３】
また、本実施形態によれば、処理演算部１１〜処理演算部１６のそれぞれは、入力された第１の送信パケットに含まれる第１の遠隔関数によるタスクからさらに、他の処理演算部１１〜処理演算部１６が持つ異なる複数の関数を、それぞれの第２の遠隔関数として呼び出して実行する複数のタスクを分割し、この分割した複数のタスクのそれぞれ毎に、第２の送信パケットを複数生成（第２ａの送信パケット、第２ｂの送信パケットなど）して送信する、演算装置が構成される。
【００８４】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに含まれる１つのタスクの処理を、他の処理演算部が持つ遠隔関数によって処理を実行する複数のタスクに分割する。なお、図４に示した動作の一例では、依頼元処理演算部１１が、入力されたパケットに含まれるタスクの処理を分割し、第１の遠隔関数によって処理を実行するタスクが含まれる１つの第１の送信パケットＰ２１Ｔの処理を第１の請負側処理演算部１２に実行させる。そして、第１の請負側処理演算部１２が、入力された第１の送信パケットＰ２１Ｔに含まれるタスクの処理を分割し、第２の遠隔関数によって処理を実行するタスクが含まれる２つの第２の送信パケットＰ２２Ｔの処理を第２の請負側処理演算部１４に実行させる場合について説明した。また、第１の請負側処理演算部１２が、第２の請負側処理演算部１４に送信した第２の送信パケットＰ２２Ｔの数と、第２の請負側処理演算部１４から受信した第２の受信パケットＰ２２Ｒの数とを管理する場合について説明した。しかし、それぞれの処理演算部１１〜処理演算部１６が分割するタスクの数、つまり、遠隔関数によって処理を実行するタスクが含まれるパケットの数は、さらに多くの数であってもよい。
【００８５】
なお、図５（ａ）に示したようなパケットの構成、つまり、このパケットで呼び出した遠隔関数によって分割されるタスクの数をカウントするためのカウンタ変数の情報が含まれた構成は、次の遠隔関数を呼び出して処理を実行するタスクの数が３以上である場合に限定されるものではない。例えば、図２に示した動作の一例のように、それぞれの処理演算部が、入力されたパケットに含まれる１つのタスクの処理を分割したときに、他の処理演算部に処理させるタスクが１つである、つまり、他の処理演算部が持つ遠隔関数を呼び出して処理を実行するタスクが含まれるパケットが１つである場合においても、カウンタ変数の情報が含まれる１つのパケットを、それぞれの処理演算部の間でやり取りすることもできる。これは、分割した１つのタスクを他の処理演算部に処理させる場合であっても、カウンタ変数の値が“１”となるのみで、図４に示した動作においても図２に示した動作の一例と同様に動作するからである。より具体的には、図４に示した第１の請負側処理演算部１２内の第１の遠隔開始関数において、第２の送信パケットＰ２２Ｔをパケットキュー３０に送信するときにカウンタ変数の値が“１”となり、第２の受信パケットＰ２２Ｒをパケットキュー３０から受信したときにカウンタ変数の値が“０”となる動作をするからである。従って、演算装置１に備えたそれぞれの処理演算部１１〜処理演算部１６が遠隔関数を呼び出すために生成するパケットの構成は、図５（ａ）に示したようなカウンタ変数の情報が含まれた構成を、基本的なパケットの構成として考えることができる。
【００８６】
なお、図２および図４に示した動作の一例では、分割したタスクが含まれるそれぞれのパケットが送信される先の他の処理演算部が、１つの処理演算部（図２および図４では、第１の請負側処理演算部１２または第２の請負側処理演算部１４）である場合について説明した。しかし、分割したタスクが含まれるそれぞれのパケットは、複数の他の処理演算部に送信されてもよい。
【００８７】
次に、本実施形態の演算装置１において、１つのタスクを複数のタスクに分割して、複数の処理演算部によって実行するさらに別の動作について説明する。図６は、本実施形態の演算装置１に備えた処理演算部が複数の他の処理演算部の関数（遠隔関数）を呼び出してタスクの処理を実行する動作の一例を模式的に示した図である。図６には、最初にパケットが入力された処理演算部１１がパケットに含まれるタスクの処理を分割して生成したパケットを次の処理演算部１２に出力し、分割されたタスクが含まれるパケットが入力された処理演算部１２がさらにタスクの処理を分割して生成した２つのパケットのそれぞれを次の処理演算部１４または処理演算部１５に出力する。そして、処理演算部１４および処理演算部１５のそれぞれは、入力されたパケットに含まれるタスクの処理を同時期に実行することによって、処理演算部１１に入力されたパケットに含まれるタスクの処理を実行する動作を示している。
【００８８】
なお、以下の説明においても、処理演算部１１を依頼元処理演算部１１といい、処理演算部１２を第１の請負側処理演算部１２という。また、依頼元処理演算部１１に入力されたパケットを依頼元パケットといい、依頼元処理演算部１１に入力された依頼元パケットに含まれるタスクを分割したタスクが含まれるパケットを第１のパケットといい、第１の請負側処理演算部１２が第１のパケットに含まれるタスクをさらに分割したタスクが含まれるパケットを第２のパケットという。そして、以下の説明においても、２つの第２のパケットのそれぞれを区別して表す場合には、それぞれの第２のパケットをパケットキュー３０に出力する順番に、「第２ａのパケット」、「第２ｂのパケット」という。なお、それぞれの処理演算部の間でやり取りするパケットの入出力の方向を明確にする方法は、図２および図４に示した動作の一例と同様である。
【００８９】
なお、図６に示した動作の一例では、第１の請負側処理演算部１２が、第１のパケットに含まれるタスクを分割したそれぞれのタスクが含まれる２つの第２のパケットを、処理演算部１４または処理演算部１５に出力する。以下の説明においては、第１の請負側処理演算部１２が分割した２つの第２のパケットの内、一方の第２のパケットが入力された処理演算部１４、つまり、分割された１つのタスクを含んだ第２ａのパケットが入力され、第２ａのパケットに含まれるタスクの処理を実行する処理演算部１４を、「第２ａの請負側処理演算部１４」という。また、第１の請負側処理演算部１２が分割した２つの第２のパケットの内、他方の第２のパケットが入力された処理演算部１５、つまり、分割されたもう１つのタスクを含んだ第２ｂのパケットが入力され、第２ｂのパケットに含まれるタスクの処理を実行する処理演算部１５を、「第２ｂの請負側処理演算部１５」という。
【００９０】
まず、最初の依頼元パケットが入力された依頼元処理演算部１１は、図４に示した動作の一例と同様に、入力された依頼元パケットに含まれるタスクの処理を実行し、依頼元開始関数による処理において、第１の遠隔関数を呼び出して処理を実行するタスクを含んだ第１の送信パケットＰ３１Ｔを生成して、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ３０１参照）。この第１の送信パケットＰ３１Ｔには、図５（ａ）に示した第１の送信パケットＰ２１Ｔと同様の情報が含まれる。つまり、この第１の送信パケットＰ３１Ｔが第２のパケットとして分割される数をカウントするためのカウンタ変数の情報も含まれる。
【００９１】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第１の送信パケットＰ３１Ｔが入力される（Ｃ３０２参照）。第１の送信パケットＰ３１Ｔが入力された第１の請負側処理演算部１２は、図４に示した動作の一例と同様に、入力された第１の送信パケットＰ３１Ｔに含まれるタスクの処理を実行し、第１の遠隔開始関数による処理において、第２の遠隔関数のそれぞれを呼び出して処理を実行するタスクを含んだ複数の第２の送信パケットＰ３２Ｔを生成して、パケット出力信号線５０を介してパケットキュー３０に順次送信する（Ｃ３０３参照）。
【００９２】
図６に示した動作の一例では、図４に示した動作の一例と同様に、第１の請負側処理演算部１２は、第２の遠隔関数のそれぞれを呼び出して処理を実行するタスクを含んだ２つの第２の送信パケットＰ３２Ｔを生成する。より具体的には、図６に示した動作の一例では、第２ａの遠隔関数を呼び出して処理を実行するタスクを含んだ第２ａの送信パケットＰ３２Ｔａと、第２ｂの遠隔関数を呼び出して処理を実行するタスクを含んだ第２ｂの送信パケットＰ３２Ｔｂとのそれぞれを生成する。この第２の送信パケットＰ３２Ｔのそれぞれには、図５（ａ）に示した第１の送信パケットＰ２１Ｔと同様の情報が含まれる。そして、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、図４に示した動作の一例と同様に、第１の送信パケットＰ３１Ｔに含まれているカウンタ変数の情報を用いて、パケットキュー３０に送信した第２の送信パケットＰ３２Ｔの数を管理する。
【００９３】
その後、第２ａの請負側処理演算部１４に、パケットキュー３０からパケット入力信号線６０を介して第２ａの送信パケットＰ３２Ｔａが入力される（Ｃ３０４参照）。第２ａの送信パケットＰ３２Ｔａが入力された第２ａの請負側処理演算部１４は、呼び出された第２ａの遠隔関数によって、入力された第２ａの送信パケットＰ３２Ｔａに含まれるタスクの処理を実行する。そして、呼び出された第２ａの遠隔関数によるタスクの処理が終了した後に、呼び出された第２ａの遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ａの受信パケットＰ３２Ｒａを生成し、生成した第２ａの受信パケットＰ３２Ｒａを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ３０５参照）。この第２ａの受信パケットＰ３２Ｒａには、図５（ｂ）に示した第２の受信パケットＰ２２Ｒａと同様の情報が含まれる。
【００９４】
また、第２ｂの請負側処理演算部１５に、パケットキュー３０からパケット入力信号線６０を介して第２ｂの送信パケットＰ３２Ｔｂが入力される（Ｃ３０６参照）。第２ｂの送信パケットＰ３２Ｔｂが入力された第２ｂの請負側処理演算部１５は、呼び出された第２ｂの遠隔関数によって、入力された第２ｂの送信パケットＰ３２Ｔｂに含まれるタスクの処理を実行する。そして、呼び出された第２ｂの遠隔関数によるタスクの処理が終了した後に、呼び出された第２ｂの遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ｂの受信パケットＰ３２Ｒｂを生成し、生成した第２ｂの受信パケットＰ３２Ｒｂを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ３０７参照）。この第２ｂの受信パケットＰ３２Ｒｂにも、図５（ｂ）に示した第２の受信パケットＰ２２Ｒｂと同様の情報が含まれる。
【００９５】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第２の受信パケットＰ３２Ｒのそれぞれが入力される（Ｃ３０８参照）。それぞれの第２の受信パケットＰ３２Ｒが入力された第１の請負側処理演算部１２は、図４に示した動作の一例と同様に、分離した第１の遠隔終了関数によって、第１の遠隔関数によるタスクの処理の終了を判定する処理を実行する。なお、この判定の処理も、図４に示した動作の一例と同様に、第１の遠隔開始関数による処理において生成した全ての第２の送信パケットＰ３２Ｔと同じ数の第２の受信パケットＰ３２Ｒが入力された後に実行される。
【００９６】
図６に示した動作の一例では、第１の請負側処理演算部１２が生成したそれぞれの第２の送信パケットＰ３２Ｔに含まれるタスクの処理が、異なる処理演算部（第２ａの請負側処理演算部１４および第２ｂの請負側処理演算部１５）によって実行される。このため、第１の請負側処理演算部１２に第２の受信パケットＰ３２Ｒのそれぞれが入力される順番は、第２ａの請負側処理演算部１４による第２ａの送信パケットＰ３２Ｔａに含まれるタスクの処理と、第２ｂの請負側処理演算部１５による第２ｂの送信パケットＰ３２Ｔｂに含まれるタスクの処理とのそれぞれの進捗によって異なる。しかし、第１の請負側処理演算部１２は、第１の送信パケットＰ３１Ｔに含まれているカウンタ変数の情報（第１の遠隔開始関数による処理において更新したカウンタ変数の値）に基づいて、送信した第２の送信パケットＰ３２Ｔの数と、受信した第２の受信パケットＰ３２Ｒの数とが同じ数であるか否かによって、パケットキュー３０からパケット入力信号線６０を介して受信した第２の受信パケットＰ３２Ｒの数を管理している。このため、第１の請負側処理演算部１２における第１の遠隔関数によるタスクの処理の終了を判定する処理は、第２の受信パケットＰ３２Ｒのそれぞれが第１の請負側処理演算部１２に入力される順番に影響されない。
【００９７】
そして、第１の請負側処理演算部１２は、第１の遠隔関数によるタスクの処理が終了した後、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ３１Ｒを生成し、生成した第１の受信パケットＰ３１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ３０９参照）。この第１の受信パケットＰ３１Ｒには、図５（ｂ）に示した第２の受信パケットＰ２２Ｒａと同様の情報が含まれる。
【００９８】
その後、依頼元処理演算部１１に、パケットキュー３０からパケット入力信号線６０を介して第１の受信パケットＰ３１Ｒが入力される（Ｃ３１０参照）。第１の受信パケットＰ３１Ｒが入力された依頼元処理演算部１１は、図４に示した動作の一例と同様に、分離した依頼元終了関数によって、入力された依頼元パケットに含まれるタスクの処理の終了を判定する処理を実行し、依頼元パケットに含まれるタスクの処理が終了した後、依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成して、パケット出力信号線５０を介してパケットキュー３０に送信する。
【００９９】
本実施形態によれば、処理演算部１１〜処理演算部１６のそれぞれは、入力された第１の送信パケットに含まれる第１の遠隔関数によるタスクからさらに、複数の他の処理演算部１１〜処理演算部１６のそれぞれが持つ関数を、それぞれの第２の遠隔関数として呼び出して実行する複数のタスクを分割し、この分割した複数のタスクのそれぞれ毎に、第２の送信パケットを複数生成（第２ａの送信パケット、第２ｂの送信パケットなど）して送信する、演算装置が構成される。
【０１００】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに含まれる１つのタスクの処理を、他の処理演算部が持つ遠隔関数によって処理を実行する複数のタスクに分割し、分割したそれぞれのタスクの処理を、複数の他の処理演算部が同時期に実行する。なお、図６に示した動作の一例では、依頼元処理演算部１１が、入力されたパケットに含まれるタスクの処理を分割し、第１の遠隔関数によって処理を実行するタスクが含まれる１つの第１の送信パケットＰ３１Ｔの処理を第１の請負側処理演算部１２に実行させる。そして、第１の請負側処理演算部１２が、入力されたパケットに含まれるタスクの処理を分割し、第２の遠隔関数によって処理を実行するタスクが含まれる２つの第２の送信パケットＰ３２Ｔのそれぞれの処理を、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とが同時期に処理させる場合について説明した。また、第１の請負側処理演算部１２が、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とのそれぞれに送信した第２の送信パケットＰ３２Ｔの数と、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とのそれぞれから受信した第２の受信パケットＰ３２Ｒの数とを管理する場合について説明した。しかし、それぞれの処理演算部１１〜処理演算部１６が分割するタスクの数、つまり、遠隔関数によって処理を実行するタスクが含まれるパケットの数は、さらに多くの数であってもよく、同時期に処理するタスクの数も、さらに多くの数であってもよい。
【０１０１】
なお、図６に示した動作の一例では、分割したタスクが含まれるそれぞれのパケットを、複数の他の処理演算部（図６では、第２ａの請負側処理演算部１４および第２ｂの請負側処理演算部１５）に送信し、それぞれの他の処理演算部が同時期に、入力されたパケットに含まれるタスクの処理を実行する場合について説明した。しかし、分割したタスクが含まれるそれぞれのパケットは、複数の他の処理演算部に、順次送信されてもよい。
【０１０２】
次に、本実施形態の演算装置１において、１つのタスクを複数のタスクに分割して、複数の処理演算部によって実行するさらに別の動作について説明する。図７は、本実施形態の演算装置１に備えた処理演算部が複数の他の処理演算部の関数（遠隔関数）を呼び出してタスクの処理を実行する動作の別の一例を模式的に示した図である。図７には、最初にパケットが入力された処理演算部１１がパケットに含まれるタスクの処理を分割して生成したパケットを次の処理演算部１２に出力し、分割されたタスクが含まれるパケットが入力された処理演算部１２がさらにタスクの処理を分割して生成した１つのパケットを次の処理演算部１４に出力する。そして、処理演算部１４が、入力されたパケットに含まれるタスクの処理を実行して処理演算部１２に戻し、処理演算部１２がさらにタスクの処理を分割して生成した１つのパケットを次の処理演算部１５に出力することによって、処理演算部１１に入力されたパケットに含まれるタスクの処理を実行する動作を示している。つまり、図７には、処理演算部１２がタスクの処理を分割して生成した２つのパケットに含まれるタスクの処理を、処理演算部１４と処理演算部１５とが順次実行する、いわゆる、パイプライン処理によって、処理演算部１１に入力されたパケットに含まれるタスクの処理を実行する動作を示している。
【０１０３】
なお、以下の説明においても、処理演算部１１を依頼元処理演算部１１といい、処理演算部１２を第１の請負側処理演算部１２といい、処理演算部１４を第２ａの請負側処理演算部１４とい、処理演算部１５を第２ｂの請負側処理演算部１５という。また、依頼元処理演算部１１に入力されたパケットを依頼元パケットといい、依頼元処理演算部１１に入力された依頼元パケットに含まれるタスクを分割したタスクが含まれるパケットを第１のパケットといい、第１の請負側処理演算部１２が第１のパケットに含まれるタスクをさらに分割したタスクが含まれるパケットを第２のパケットという。そして、以下の説明においても、２つの第２のパケットのそれぞれを区別して表す場合には、それぞれの第２のパケットをパケットキュー３０に出力する順番に、「第２ａのパケット」、「第２ｂのパケット」という。なお、それぞれの処理演算部の間でやり取りするパケットの入出力の方向を明確にする方法は、図２、図４，および図６に示した動作の一例と同様である。
【０１０４】
まず、最初の依頼元パケットが入力された依頼元処理演算部１１は、図４および図６に示した動作の一例と同様に、入力された依頼元パケットに含まれるタスクの処理を実行し、依頼元開始関数による処理において、第１の遠隔関数を呼び出して処理を実行するタスクを含んだ第１の送信パケットＰ４１Ｔを生成して、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ４０１参照）。この第１の送信パケットＰ４１Ｔには、図５（ａ）に示した第１の送信パケットＰ２１Ｔと同様の情報が含まれる。
【０１０５】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第１の送信パケットＰ４１Ｔが入力される（Ｃ４０２参照）。第１の送信パケットＰ２１Ｔが入力された第１の請負側処理演算部１２は、入力された第１の送信パケットＰ４１Ｔに含まれるタスクの処理を実行する。このとき、第１の請負側処理演算部１２は、入力された第１の送信パケットＰ４１Ｔに含まれるタスクの処理において、このタスクの処理を開始する第１の遠隔開始関数と、このタスクの処理の中継を判定する第１の遠隔中継関数と、このタスクの処理の終了を判定する第１の遠隔終了関数との３つに分離する。そして、第１の請負側処理演算部１２は、分離した第１の遠隔開始関数による処理を実行する。ここで、第１の遠隔開始関数には、タスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）が含まれている。また、第１の遠隔中継関数には、第１の遠隔開始関数によるタスクの処理が終了した後のタスクの処理において、自身の持つ関数以外に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）が含まれている。このため、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、さらに第２ａの遠隔関数を呼び出して処理を実行するタスクを含んだ第２ａの送信パケットＰ４２Ｔａを生成し、生成した第２ａの送信パケットＰ４２Ｔａを、パケット出力信号線５０を介してパケットキュー３０に順次送信する（Ｃ４０３参照）。
【０１０６】
この第２ａの送信パケットＰ４２Ｔａには、図５（ａ）に示した第１の送信パケットＰ２１Ｔと同様の情報が含まれる。そして、第１の請負側処理演算部１２は、第１の遠隔開始関数による処理において、図４および図６に示した動作の一例と同様に、第１の送信パケットＰ４１Ｔに含まれているカウンタ変数の情報を用いて、パケットキュー３０に送信した第２ａの送信パケットＰ４２Ｔａの数を管理する。
【０１０７】
その後、第２ａの請負側処理演算部１４に、パケットキュー３０からパケット入力信号線６０を介して第２ａの送信パケットＰ４２Ｔａが入力される（Ｃ４０４参照）。第２ａの送信パケットＰ４２Ｔａが入力された第２ａの請負側処理演算部１４は、呼び出された第２ａの遠隔関数によって、入力された第２ａの送信パケットＰ４２Ｔａに含まれるタスクの処理を実行する。そして、呼び出された第２ａの遠隔関数によるタスクの処理が終了した後に、呼び出された第２ａの遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ａの受信パケットＰ４２Ｒａを生成し、生成した第２ａの受信パケットＰ４２Ｒａを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ４０５参照）。この第２ａの受信パケットＰ４２Ｒａには、図５（ｂ）に示した第２の受信パケットＰ２２Ｒａと同様の情報が含まれる。
【０１０８】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第２ａの受信パケットＰ４２Ｒａが入力される（Ｃ４０６参照）。第２ａの受信パケットＰ４２Ｒａが入力された第１の請負側処理演算部１２は、図４および図６に示した第１の遠隔終了関数の動作の一例と同様に、分離した第１の遠隔中間関数によって、第１の遠隔関数によるタスクの処理の終了を判定する処理を実行する。なお、この判定の処理も、図４および図６に示した第１の遠隔終了関数の動作の一例と同様に、第１の遠隔開始関数による処理において生成した全ての第２ａの送信パケットＰ４２Ｔａと同じ数の第２ａの受信パケットＰ４２Ｒａが入力された後に実行される。
【０１０９】
続いて、第１の請負側処理演算部１２は、第１の遠隔関数によるタスクの処理が終了した後、分離した第１の遠隔中継関数による処理を実行する。ここで、第１の遠隔中継関数には、上述したように、第１の遠隔開始関数によるタスクの処理が終了した後に、他の処理演算部が持つ遠隔関数を使用して処理を実行する演算処理の処理内容（タスク）が含まれている。このため、第１の請負側処理演算部１２は、第１の遠隔中継関数による処理において、さらに第２ｂの遠隔関数を呼び出して処理を実行するタスクを含んだ第２ｂの送信パケットＰ４２Ｔｂを生成し、生成した第２ｂの送信パケットＰ４２Ｔｂを、パケット出力信号線５０を介してパケットキュー３０に順次送信する（Ｃ４０７参照）。
【０１１０】
この第２ｂの送信パケットＰ４２Ｔｂには、図５（ａ）に示した第１の送信パケットＰ２１Ｔと同様の情報が含まれる。そして、第１の請負側処理演算部１２は、第１の遠隔中継関数による処理において、図４および図６に示した第１の遠隔開始関数の動作の一例と同様に、第１の送信パケットＰ４１Ｔに含まれているカウンタ変数の情報を用いて、パケットキュー３０に送信した第２ｂの送信パケットＰ４２Ｔｂの数を管理する。なお、第１の送信パケットＰ４１Ｔに含まれているカウンタ変数の情報は、第１の遠隔開始関数による処理において用いるカウンタ変数の情報と、第１の遠隔中継関数による処理において用いるカウンタ変数の情報と異なる情報であってもよい。しかし、図７に示した動作の一例では、第１の遠隔開始関数による処理によって送信した全ての第２ａの送信パケットＰ４２Ｔａに含まれるタスクの処理が、第２ａの請負側処理演算部１４によって全て終了した後に、第１の遠隔中継関数によるタスクの処理を開始する。このため、カウンタ変数の情報は、第１の遠隔開始関数による処理と第１の遠隔中継関数による処理とのそれぞれのタスクの処理において用いることができる共通の情報であってもよい。
【０１１１】
その後、第２ｂの請負側処理演算部１５に、パケットキュー３０からパケット入力信号線６０を介して第２ｂの送信パケットＰ４２Ｔｂが入力される（Ｃ４０８参照）。第２ｂの送信パケットＰ４２Ｔｂが入力された第２ｂの請負側処理演算部１５は、呼び出された第２ｂの遠隔関数によって、入力された第２ｂの送信パケットＰ４２Ｔｂに含まれるタスクの処理を実行する。そして、呼び出された第２ｂの遠隔関数によるタスクの処理が終了した後に、呼び出された第２ｂの遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第２ｂの受信パケットＰ４２Ｒｂを生成し、生成した第２ｂの受信パケットＰ４２Ｒｂを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ４０９参照）。この第２ｂの受信パケットＰ４２Ｒｂにも、図５（ｂ）に示した第２の受信パケットＰ２２Ｒｂと同様の情報が含まれる。
【０１１２】
その後、第１の請負側処理演算部１２に、パケットキュー３０からパケット入力信号線６０を介して第２ｂの受信パケットＰ４２Ｒｂが入力される（Ｃ４１０参照）。第２ｂの受信パケットＰ４２Ｒｂが入力された第１の請負側処理演算部１２は、図４および図６に示した動作の一例と同様に、分離した第１の遠隔終了関数によって、第１の遠隔関数によるタスクの処理の終了を判定する処理を実行する。なお、この判定の処理も、図４および図６に示した動作の一例と同様に、第１の遠隔中継関数による処理において生成した全ての第２ｂの送信パケットＰ４２Ｔｂと同じ数の第２ｂの受信パケットＰ４２Ｒｂが入力された後に実行される。
【０１１３】
そして、第１の請負側処理演算部１２は、第１の遠隔関数によるタスクの処理が終了した後、呼び出された第１の遠隔関数によってタスクの処理が終了したことを表すタスクが含まれる第１の受信パケットＰ４１Ｒを生成し、生成した第１の受信パケットＰ４１Ｒを、パケット出力信号線５０を介してパケットキュー３０に送信する（Ｃ４１１参照）。この第１の受信パケットＰ４１Ｒにも、図５（ｂ）に示した第２の受信パケットＰ２２Ｒａと同様の情報が含まれる。
【０１１４】
その後、依頼元処理演算部１１に、パケットキュー３０からパケット入力信号線６０を介して第１の受信パケットＰ４１Ｒが入力される（Ｃ４１２参照）。第１の受信パケットＰ４１Ｒが入力された依頼元処理演算部１１は、図４および図６に示した動作の一例と同様に、分離した依頼元終了関数によって、入力された依頼元パケットに含まれるタスクの処理の終了を判定する処理を実行し、依頼元パケットに含まれるタスクの処理が終了した後、依頼元パケットに含まれるタスクの処理が終了したことを表すパケットを生成して、パケット出力信号線５０を介してパケットキュー３０に送信する。
【０１１５】
本実施形態によれば、処理演算部１１〜処理演算部１６のそれぞれは、入力された第１の送信パケットに含まれる第１の遠隔関数によるタスクからさらに、複数の他の処理演算部１１〜処理演算部１６のそれぞれが持つ関数を、それぞれの第２の遠隔関数として順次呼び出して実行する複数のタスクを分割し、この分割した複数のタスクのそれぞれ毎に、第２の送信パケットを複数生成（第２ａの送信パケット、第２ｂの送信パケットなど）し、最初に送信した第２ａの送信パケットに含まれる第２の遠隔関数によるタスクの処理が終了したと判定した後、生成したそれぞれの第２の送信パケット（第２ｂの送信パケットなど）を、送信した第２の送信パケットに含まれる第２の遠隔関数によるタスクの処理が終了したと判定する毎に順次送信する、演算装置が構成される。
【０１１６】
このように、演算装置１では、処理演算部１１〜処理演算部１６のそれぞれが、入力されたパケットに含まれる１つのタスクの処理を、他の処理演算部が持つ遠隔関数によって処理を実行する複数のタスクに分割し、分割したそれぞれのタスクの処理を、複数の他の処理演算部が順次実行する。なお、図７に示した動作の一例では、依頼元処理演算部１１が、入力されたパケットに含まれるタスクの処理を分割し、第１の遠隔関数によって処理を実行するタスクが含まれる１つの第１の送信パケットＰ４１Ｔの処理を第１の請負側処理演算部１２に実行させる。そして、第１の請負側処理演算部１２が、入力されたパケットに含まれるタスクの処理を分割し、第２の遠隔関数によって処理を順次実行するタスクが含まれる２つの第２の送信パケットＰ４２Ｔのそれぞれの処理を、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とに順次処理させる場合について説明した。また、第１の請負側処理演算部１２が、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とのそれぞれに送信した第２の送信パケットＰ４２Ｔの数と、第２ａの請負側処理演算部１４と第２ｂの請負側処理演算部１５とのそれぞれから受信した第２の受信パケットＰ４２Ｒの数とを管理する場合について説明した。しかし、それぞれの処理演算部１１〜処理演算部１６が分割するタスクの数、つまり、遠隔関数によって処理を順次実行するタスクが含まれるパケットの数は、さらに多くの数であってもよく、順次処理するタスクの数も、さらに多くの数であってもよい。言い換えると、パイプライン処理の段数は、さらに多くの段数であってもよい。また、１段のパイプライン処理において実行するタスクが含まれるパケットの数は、さらに多くの数であってもよく、１段のパイプライン処理において同時期に複数のタスクの処理を行う構成、つまり、図６に示した動作の一例と、図７に示した動作の一例とを併せた動作をする構成であってもよい。
【０１１７】
上記に述べたとおり、本発明を実施するための形態によれば、演算装置に備えたそれぞれの処理演算部（プロセッサ）が、入力されたパケットに含まれるタスクの処理を分割して、他の処理演算部が持つ関数（遠隔関数）を呼び出して実行するタスクの処理が含まれるパケットを生成する。そして、生成したそれぞれのパケットを、パケットキューを介してやり取りする。また、それぞれの処理演算部がパケットに含まれるタスクの処理を実行した結果を、パケットを生成した処理演算部に戻す。これにより、本発明を実施するための形態では、演算装置に入力されたパケットに含まれるタスクを階層的に分割する構造と、分割したタスクの処理結果を集結させる構造とを持たせることができる。このことにより、本発明を実施するための形態では、演算装置においてＯＳの機能を実行することなく、タスクの分割と処理演算部の間での通信との両方を実現することができる。つまり、本発明を実施するための形態では、ＯＳを実行することによるプロセッサの処理能力の低下を抑えながら、少ない資源（リソース）で、処理演算部の間での通信とタスクの分割および処理結果の集結とを実現することができ、マルチプロセッサ構成の演算装置に備えたそれぞれの処理演算部の稼働率を、容易に向上させることができる。
【０１１８】
なお、本実施形態においては、タスクを２階層に分割する場合、つまり、依頼元処理演算部１１が、入力された依頼元パケットに含まれるタスクを第１の請負側処理演算部１２が持つ第１の遠隔関数によって実行する１階層下のタスクに分割し、第１の請負側処理演算部１２が、第２の請負側処理演算部１４が持つ第２の遠隔関数によって実行するさらに１階層下のタスクに分割する場合について説明した。しかし、演算装置に入力されたパケットに含まれるタスクを分割する階層は、本発明を実施するための形態に限定されるものではない。
【０１１９】
また、本実施形態では、図１において、演算装置１内に備える処理演算部１１〜処理演算部１６のそれぞれが、異なるプロセッサで構成されたマルチプロセッサの構成を示しているが、処理演算部１１〜処理演算部１６のそれぞれが１つのプロセッサではなく、１つのプロセッサ内に備えられたそれぞれの処理モジュールとして構成される場合であっても、同様に考えることができる。より具体的には、例えば、処理演算部１１〜処理演算部１６と、パケットキュー３０と、パケット出力信号線５０と、パケット入力信号線６０とを構成要素として備えた、１つのプロセッサの構成である場合も同様に考えることができる。言い換えると、処理演算部１１〜処理演算部１６のそれぞれがマルチプロセッサの構成要素であっても、マルチモジュール（またはマルチコア）の構成要素であっても、同様に考えることができる。
【０１２０】
また、本実施形態においては、演算装置１内に６つの処理演算部１１〜処理演算部１６を備えた構成について説明したが、演算装置内に備える処理演算部の数は、本発明を実施するための形態に限定されるものではない。また、本実施形態においては、演算装置１内に、６つの処理演算部１１〜処理演算部１６に対応した１つのパケットキュー３０を備えた構成について説明した。つまり、６つの処理演算部１１〜処理演算部１６で１つのパケットキュー３０を共有する構成について説明した。しかし、演算装置に備えるパケットキュー３０の数や、１つのパケットキューを共有する処理演算部の数は、本発明を実施するための形態に限定されるものではない。例えば、６つの処理演算部と２つのパケットキューとを備えた構成の演算装置において、それぞれのパケットキューが３つの処理演算部に対応する構成、つまり、演算装置内で３つの処理演算部毎に１つのパケットキューを共有する構成であっても同様に、本発明の考え方を適用することができる。
【０１２１】
また、本実施形態においては、演算装置１に備えたそれぞれの処理演算部が持っている処理機能について説明していない。しかし、例えば、演算装置１が、撮像装置に備えた画像処理装置である場合には、それぞれの処理演算部の処理機能は、ＹＣ変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、様々な画像処理の機能であると考えられる。また、例えば、演算装置１が、撮像装置に備えた画像処理装置内の画像認識部などの一部の処理部である場合には、それぞれの処理演算部の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための機能であると考えられる。
【０１２２】
また、本実施形態においては、処理演算部がパケットを送信したときに“＋１”し、この処理演算部がパケットを受信したときに“−１”するカウンタ変数の値によって、また、処理演算部が他の処理演算部に送信したパケットの数と、他の処理演算部から受信したパケットの数とを管理する場合について説明した。しかし、送受信するパケットの数を管理する方法は、本発明を実施するための形態に限定されるものではない。例えば、送信したパケットの数をカウントするためのカウンタ変数の情報と、受信したパケットの数をカウントするためのカウンタ変数の情報とのそれぞれを持ち、パケットを送受信する毎に対応するカウンタ変数の値を“＋１”し、それぞれのカウンタ変数の値を比較することによって、送信したパケットの数と同じ数のパケットを受信したか否かを判定する構成にすることもできる。
【０１２３】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０１２４】
１・・・演算装置
１１，１２，１３，１４，１５，１６・・・処理演算部
２０・・・メモリ部
３０・・・パケットキュー
４０・・・バス
５０・・・パケット出力信号線
６０・・・パケット入力信号線
Ｐ１１Ｔ，Ｐ２１Ｔ，Ｐ３１Ｔ，Ｐ４１Ｔ・・・パケット（第１の送信パケット）
Ｐ１２Ｔ，Ｐ２２Ｔ，Ｐ２２Ｔａ，Ｐ２２Ｔｂ，Ｐ３２Ｔ，Ｐ３２Ｔａ，Ｐ３２Ｔｂ，Ｐ４２Ｔ，Ｐ４２Ｔａ，Ｐ４２Ｔｂ・・・パケット（第２の送信パケット）
Ｐ１１Ｒ，Ｐ２１Ｒ，Ｐ３１Ｒ，Ｐ４１Ｒ，・・・パケット（第１の受信パケット）
Ｐ１２Ｒ，Ｐ２２Ｒ，Ｐ２２Ｒａ，Ｐ２２Ｒｂ，Ｐ３２Ｒ，Ｐ３２Ｒａ，Ｐ３２Ｒｂ，Ｐ４２Ｒ，Ｐ４２Ｒａ，Ｐ４２Ｒｂ・・・パケット（第２の受信パケット）
Ｔ１２，Ｒ１２・・・パケット識別子
Ｔ２６・・・カウンタ変数
【図１】
2015095163.tif 000003
【図２】
2015095163.tif 000004
【図３】
2015095163.tif 000005
【図４】
2015095163.tif 000006
【図５】
2015095163.tif 000007
【図６】
2015095163.tif 000008
【図７】
2015095163.tif 000009