(57)【要約】【課題】複数のプロセッサが搭載されたマルチプロセッサにおいて、実行する処理に応じたプロセッサの指定と動的な処理負荷の分散とを両立した演算装置を提供する。【解決手段】入力されたパケットに対して演算処理を行い、次の演算処理に関する情報をパケットにして出力する複数の処理演算部と、パケットキューを具備し、格納されたパケットをいずれか１つの処理演算部に送出するパケット分配部とを備え、パケットには、次に演算処理を実行させる少なくとも１つの処理演算部を指定するための宛先情報が付加され、パケット分配部は、複数の処理演算部で共有するパケットキューに順次パケットを格納し、格納されたパケットのそれぞれに含まれる宛先情報と、指定された処理演算部の稼働状態とに基づいて、１つのパケットに対して１つの処理演算部を送出先として選択し、パケットキューから取り出して選択した処理演算部に送出する。【選択図】図１
2014170305.tif 000002
【特許請求の範囲】
【請求項１】
入力されたパケットに対して演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記パケットにして出力する複数の処理演算部と、
前記パケットを格納するパケットキューを具備し、該パケットキューに格納された前記パケットを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に送出するパケット分配部と、
を備え、
前記処理演算部のそれぞれは、
次に演算処理を実行させる少なくとも１つの前記処理演算部を指定するための宛先情報を前記パケットに付加して出力し、
前記パケット分配部は、
前記処理演算部のいずれかから出力された前記パケットを、複数の前記処理演算部で共有する前記パケットキューに順次格納し、該パケットキューに格納された前記パケットのそれぞれに含まれる前記宛先情報と、該宛先情報によって指定された前記処理演算部の稼働状態とに基づいて、１つの前記パケットに対して１つの前記処理演算部を該パケットの送出先として選択し、前記パケットを前記パケットキューから取り出して、該取り出した前記パケットの送出先として選択した前記処理演算部に送出する、
ことを特徴とする演算装置。
【請求項２】
前記パケット分配部は、
前記パケットキューに順次格納された前記パケットの内、最も早く前記パケットキューに格納された前記パケットに含まれる前記宛先情報によって指定された前記処理演算部の中から、該パケットよりも後に前記パケットキューに格納された前記パケットに含まれる前記宛先情報によって指定された前記処理演算部を除外することによって、該パケットの送出先の前記処理演算部を順次絞り込む、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記パケット分配部は、
前記パケットの送出先の前記処理演算部を順次絞り込んだ結果、該パケットの送出先の前記処理演算部が１つになった場合、該パケットの送出先の前記処理演算部の絞り込みを終了する、
ことを特徴とする請求項２に記載の演算装置。
【請求項４】
前記パケット分配部は、
前記パケットの送出先の前記処理演算部を順次絞り込んだ結果、該パケットの送出先の前記処理演算部がなくなった場合、該パケットの送出先の前記処理演算部の絞り込みを、該パケットの送出先の前記処理演算部がなくなった手前の段階に戻す、
ことを特徴とする請求項２または請求項３に記載の演算装置。
【請求項５】
前記パケット分配部は、
前記パケットキューに前記パケットが格納される毎、および該パケットキューから前記パケットが取り出される毎に、該パケットキューに最も早く格納された前記パケットから順次、該パケットの送出先の前記処理演算部の絞り込みを行う、
ことを特徴とする請求項２から請求項４のいずれか１の項に記載の演算装置。
【請求項６】
前記パケット分配部は、
前記パケットの送出先の前記処理演算部を順次絞り込んだ結果、該パケットの送出先の前記処理演算部が１つになった場合、前記パケットキューに該パケットが格納された順番に基づいた取り出し順番を待たずに、該パケットを送出先の１つの前記処理演算部に送出することができる状態にする、
ことを特徴とする請求項５に記載の演算装置。
【請求項７】
前記パケット分配部は、
１つの前記処理演算部に送出することができる状態にされた前記パケットを送出する前記処理演算部の稼働状態に応じて、取り出し順番を待たずに該パケットを前記パケットキューから取り出して、送出先の該１つの前記処理演算部に送出する、
ことを特徴とする請求項６に記載の演算装置。
【請求項８】
前記処理演算部のそれぞれは、
入力された前記パケットに対して異なる専門的な演算処理を行う処理機能を有する、
ことを特徴とする請求項１から請求項７のいずれか１の項に記載の演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。
【背景技術】
【０００２】
半導体技術の進歩により、複雑な処理を高速に演算処理するプロセッサを実現することが可能になってきている。しかし、近年では、消費電力や発熱、さらには物性的な限界も見え始めている。この問題を回避した上で複雑な処理を高速に行うための手段として、プロセッサの個数を増やし、それぞれのプロセッサが並列に演算処理を行う、いわゆる、マルチプロセッサを構成する例も多く見受けられるようになった。マルチプロセッサでは、要求された演算処理を複数個のプロセッサが分担して行うことによって、演算処理に要する時間の短縮を図ることができる。
【０００３】
マルチプロセッサの構成は、大きく２つに大別される。１つは、ホモジニアスと呼ばれている構成である。このホモジニアス構成のマルチプロセッサでは、搭載されたそれぞれのプロセッサが全て同じ処理機能を持っているため、要求された演算処理を、いずれのプロセッサでも実行することができる。一般的に、ホモジニアス構成のマルチプロセッサを使用した処理では、要求された処理を複数のタスクやスレッドに分割する。そして、オペレーションシステムなどによって、それぞれのタスクやスレッドの処理を、どのプロセッサで実行するかを判断し、各プロセッサに対する処理の振り分けを行なう。
【０００４】
もう１つは、ヘテロジニアスと呼ばれる構成である。このヘテロジニアス構成のマルチプロセッサは、異なる処理機能を持った複数のプロセッサが搭載され、それぞれのプロセッサは、専門的な処理機能（以下、「専門機能」）に特化して要求された処理を分担する。このヘテロジニアス構成のマルチプロセッサに搭載されたそれぞれのプロセッサは、専門機能に特化していることから、ホモジニアス構成のマルチプロセッサに搭載されるそれぞれのプロセッサよりも回路規模が小さく、要求された処理を少ない回路構成で実現できるメリットがある。
【０００５】
しかし、ヘテロジニアス構成のマルチプロセッサでは、各プロセッサの処理機能がそれぞれ異なることから、それぞれのプロセッサが実行する処理の役割が分かれていることになる。このため、要求された処理をそれぞれのプロセッサに割り振る際に、その処理を実行することができるプロセッサを一意に指定する必要がある。つまり、ヘテロジニアス構成のマルチプロセッサでは、処理する内容に応じて、それぞれ異なる専門機能を持つプロセッサを指定することが必要になる。
【０００６】
なお、ヘテロジニアス構成のマルチプロセッサであっても、処理の内容によっては必ずしも専門機能を必要とせず、搭載した複数のプロセッサがそれぞれ持っている共通の処理機能で、処理を実行できることもある。この場合には、プロセッサを指定する際の選択肢が複数存在することになる。このため、それぞれのプロセッサの動作状況に応じてリアルタイムにプロセッサの指定を変更する、つまり、処理を実行するプロセッサの割り振りを調整することによって、搭載した複数のプロセッサの処理負荷を均一にし、マルチプロセッサとしての全体の稼働率を上げることが可能になる。
【０００７】
例えば、特許文献１には、搭載したそれぞれのプロセッサの消費電力を測定することによって、各プロセッサの処理負荷が均一になるように制御するマルチプロセッサの技術が開示されている。特許文献１で開示された技術では、プロセッサに対する処理の要求をパケットにし、それぞれのプロセッサの動作状況に応じてパケットを送付するプロセッサを動的に切り替えることによって、各プロセッサの処理負荷が均一になるように制御している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−３９８０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１で開示された技術は、搭載したそれぞれのプロセッサの処理機能が対等であるホモジニアス構成のマルチプロセッサを前提にしている。つまり、特許文献１で開示された技術では、搭載された全てのプロセッサが同じ処理機能を持っているため、消費電力のみからそれぞれのプロセッサの処理負荷を測定することができ、パケットを送付するプロセッサを動的に切り替えても、要求された処理を実行することができるのである。
【００１０】
このため、ヘテロジニアス構成のマルチプロセッサに対して、特許文献１で開示された技術を適用したとしても、ヘテロジニアス構成のマルチプロセッサに搭載された専門機能を持つそれぞれのプロセッサの指定と、それぞれのプロセッサに対する動的な処理負荷の分散とを両立することができない、という問題がある。
【００１１】
本発明は、上記の課題認識に基づいてなされたものであり、異なる処理機能を持った複数のプロセッサが搭載されたマルチプロセッサにおいて、実行する処理に応じたプロセッサの指定と、それぞれのプロセッサに対する動的な処理負荷の分散とを両立した演算装置を提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記の課題を解決するため、本発明の演算装置は、入力されたパケットに対して演算処理を行う処理機能を有し、次に実行する演算処理に関する情報を前記パケットにして出力する複数の処理演算部と、前記パケットを格納するパケットキューを具備し、該パケットキューに格納された前記パケットを、複数の前記処理演算部の内、いずれか１つの前記処理演算部に送出するパケット分配部と、を備え、前記処理演算部のそれぞれは、次に演算処理を実行させる少なくとも１つの前記処理演算部を指定するための宛先情報を前記パケットに付加して出力し、前記パケット分配部は、前記処理演算部のいずれかから出力された前記パケットを、複数の前記処理演算部で共有する前記パケットキューに順次格納し、該パケットキューに格納された前記パケットのそれぞれに含まれる前記宛先情報と、該宛先情報によって指定された前記処理演算部の稼働状態とに基づいて、１つの前記パケットに対して１つの前記処理演算部を該パケットの送出先として選択し、前記パケットを前記パケットキューから取り出して、該取り出した前記パケットの送出先として選択した前記処理演算部に送出する、ことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、異なる処理機能を持った複数のプロセッサが搭載されたマルチプロセッサにおいて、実行する処理に応じたプロセッサの指定と、それぞれのプロセッサに対する動的な処理負荷の分散とを両立した演算装置を提供することができるという効果が得られる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態における演算装置の概略構成の一例を示したブロック図である。
【図２】本実施形態の演算装置に備えたそれぞれの処理演算部が持つ処理機能の一例を説明する図である。
【図３】本実施形態の演算装置に備えたそれぞれの処理演算部が出力するパケットの構成を説明する図である。
【図４】本実施形態の演算装置に備えたパケット分配部によるパケットの分配方法を説明する図である。
【図５】本実施形態の演算装置に備えたパケット分配部がパケットの分配先を決定する一例を説明する図である。
【図６】本実施形態の演算装置に備えたパケット分配部がパケットの分配先を決定する一例を説明する図である。
【図７】本実施形態の演算装置に備えたパケット分配部がパケットの分配先を決定する一例を説明する図である。
【図８】本実施形態の演算装置に備えたパケット分配部がパケットの分配先を決定する一例を説明する図である。
【図９】本実施形態の演算装置に備えたパケット分配部によるパケットの分配の一例を説明する図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態について、図面を参照して説明する。図１は、本実施形態における演算装置の概略構成の一例を示したブロック図である。図１に示した演算装置１は、６つの処理演算部１１〜処理演算部１６と、メモリ部２０と、パケット分配部３０と、を備えている。演算装置１は、要求された演算処理を、処理演算部１１〜処理演算部１６のそれぞれで分担して行うヘテロジニアス構成のマルチプロセッサである。処理演算部１１〜処理演算部１６のそれぞれとメモリ部２０とは、バス４０を介して接続されている。
【００１６】
処理演算部１１〜処理演算部１６のそれぞれは、異なる専門的な処理機能（以下、「専門機能」）持ったプロセッサである。なお、ヘテロジニアス構成のマルチプロセッサである演算装置１であっても、演算装置１内に備えた処理演算部の全てが異なる専門機能の演算処理を実行するのではなく、処理演算部１１〜処理演算部１６のいずれか複数または全てで共通の処理機能（以下、「共通機能」）も持っている。以下の説明においては、処理演算部１１〜処理演算部１６のそれぞれを、プロセッサエレメントＰＥともいう。より具体的には、処理演算部１１をプロセッサエレメントＰＥ１といい、処理演算部１２をプロセッサエレメントＰＥ２といい、処理演算部１３をプロセッサエレメントＰＥ３といい、処理演算部１４をプロセッサエレメントＰＥ４といい、処理演算部１５をプロセッサエレメントＰＥ５といい、処理演算部１６をプロセッサエレメントＰＥ６という。
【００１７】
処理演算部１１〜処理演算部１６のそれぞれは、例えば、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によって、バス４０を介して接続されたメモリ部２０へのデータの書き込みや、メモリ部２０からのデータの読み出しを行いながら、演算装置１に対して要求された演算処理を分担して実行する。
【００１８】
また、処理演算部１１〜処理演算部１６のそれぞれは、自身が演算処理した後に引き続き別の処理演算部または自身に演算処理を実行させるための情報や、次に実行する演算処理の内容をパケットにして、パケット出力信号線５０に出力する。
【００１９】
また、処理演算部１１〜処理演算部１６のそれぞれは、パケット入力信号線７０から入力されたパケットに含まれる、別の処理演算部または自身が前回の演算処理を実行した情報や演算処理の内容に応じて、続きの次の演算処理を実行する。なお、処理演算部１１〜処理演算部１６のそれぞれは、さらに別の処理演算部または自身が引き続き実行する演算処理がある場合には、引き続き別の処理演算部または自身に演算処理を実行させるための情報や、次に実行する演算処理の内容をパケットにして、再度パケット出力信号線５０に出力する。
【００２０】
また、処理演算部１１〜処理演算部１６のそれぞれは、稼働中であるか非稼働であるかを表すレディ信号を、レディ信号線６０に出力する。処理演算部１１〜処理演算部１６のそれぞれは、今回の演算処理が完了し、次の演算処理を実行する準備が整ったときに、レディ信号を非稼働の状態にし、次の演算処理を実行するための情報や、次に実行する演算処理の内容のパケットが受け付けられる状態であることを表す。
【００２１】
メモリ部２０は、処理演算部１１〜処理演算部１６のそれぞれで共有される、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリである。メモリ部２０には、処理演算部１１〜処理演算部１６のそれぞれが起動するためのプログラムや、処理演算部１１〜処理演算部１６のそれぞれが演算処理を実行するために用いるデータが格納されている。また、メモリ部２０には、処理演算部１１〜処理演算部１６のそれぞれが演算処理の途中で生成したデータなどが、一時的に格納される。
【００２２】
パケット分配部３０は、処理演算部１１〜処理演算部１６のそれぞれから出力されたそれぞれのパケットを受信し、受信したパケットに基づいて、次の演算処理を実行させる処理演算部１１〜処理演算部１６のいずれか１つを選択する。そして、パケット分配部３０は、選択した処理演算部１１〜処理演算部１６のいずれか１つに送出することによって、次の演算処理を実行させるためのパケットを、処理演算部１１〜処理演算部１６のそれぞれに分配する。パケット分配部３０は、パケット受信部３１と、レディ信号受信部３２と、パケット送出部３３と、パケットキュー３４と、宛先演算部３５と、を備えている。
【００２３】
パケット受信部３１は、処理演算部１１〜処理演算部１６のそれぞれからパケット出力信号線５０に出力されたそれぞれのパケットを受信し、受信したパケットを順次パケットキュー３４に格納する。
【００２４】
パケットキュー３４は、パケットを格納する待ち行列のメモリである。パケットキュー３４には、処理演算部１１〜処理演算部１６のそれぞれから出力されたそれぞれのパケットが、順次格納される。パケットキュー３４に格納されたそれぞれのパケットは、基本的に、格納された順番で出力されるが、演算装置１では、宛先演算部３５によってパケットキュー３４から出力されるパケットの出力先や出力順番が決定される。
【００２５】
レディ信号受信部３２は、処理演算部１１〜処理演算部１６のそれぞれからレディ信号線６０に出力に出力されたそれぞれのレディ信号を受信し、処理演算部１１〜処理演算部１６のそれぞれの稼働状態を、宛先演算部３５に出力する。
【００２６】
宛先演算部３５は、パケットキュー３４に格納されたそれぞれのパケットに含まれる情報に基づいて、次の演算処理を実行させる処理演算部、すなわち、パケットキュー３４に格納されたパケットの出力先を選択する。
【００２７】
パケット送出部３３は、パケットキュー３４に格納されたパケットを順次読み出し、読み出したパケットをパケット入力信号線７０に出力することによって、宛先演算部３５によって選択されたパケットの出力先の処理演算部１１〜処理演算部１６のいずれか１つ、すなわち、次の演算処理を実行させる処理演算部に送出する。
【００２８】
このように、演算装置１では、いずれの処理演算部から出力されたパケットも、パケット分配部３０を経由してから、次の演算処理を実行する処理演算部に入力される。なお、演算装置１に要求された処理を分担して行う際に、パケット分配部３０を介して処理演算部１１〜処理演算部１６のそれぞれでやり取りされるパケットの構成や、パケットを送出する処理演算部の選択方法に関する詳細な説明は、後述する。
【００２９】
ここで、処理演算部１１〜処理演算部１６のそれぞれが持つ処理機能の一例について説明する。図２は、本実施形態の演算装置１に備えたそれぞれの処理演算部が持つ処理機能の一例を説明する図である。上述したように、演算装置１に備えた処理演算部１１〜処理演算部１６のそれぞれは、異なる専門機能と共通機能とをそれぞれ、処理機能として持っている。図２には、図１に示した演算装置１に備えた６つの処理演算部（プロセッサエレメントＰＥ）のそれぞれ毎に、実行することができる機能の違いを示している。図２において、それぞれのプロセッサエレメントＰＥは、“○：白抜きの丸”で示した機能を実行することができる。
【００３０】
より具体的には、プロセッサエレメントＰＥ１は、機能Ａと機能Ｂとを実行することができ、プロセッサエレメントＰＥ２は、機能Ａと機能Ｃとを実行することができ、プロセッサエレメントＰＥ３は、機能Ａと機能Ｃと機能Ｅとを実行することができ、プロセッサエレメントＰＥ４、プロセッサエレメントＰＥ５、およびプロセッサエレメントＰＥ６のそれぞれは、機能Ａと機能Ｄとを実行することができる。
【００３１】
言い換えると、機能Ａは、全てのプロセッサエレメントＰＥ１〜ＰＥ６が実行することができる機能、すなわち、共通機能である。また、機能Ｂは、プロセッサエレメントＰＥ１のみが実行することができる機能、すなわち、専門機能である。また、機能Ｃは、プロセッサエレメントＰＥ２とプロセッサエレメントＰＥ３のみが実行することができる専門機能である。また、機能Ｄは、プロセッサエレメントＰＥ４、プロセッサエレメントＰＥ５、およびプロセッサエレメントＰＥ６のみが実行することができる専門機能である。また、機能Ｅは、プロセッサエレメントＰＥ３のみが実行することができる専門機能である。
【００３２】
このように、ヘテロジニアス構成のマルチプロセッサである演算装置１に備えたそれぞれのプロセッサエレメントＰＥ１〜ＰＥ６は、全ての処理機能が異なっているのではなく、いくつかのプロセッサエレメントＰＥ同士で同じ処理機能を持っている。従って、特定のプロセッサエレメントＰＥのみが持つ専門機能は、当然ながらそのプロセッサエレメントＰＥのみでしか演算処理を実行することができないが、複数のプロセッサエレメントＰＥが共通に持っている専門機能であれば、同じ専門機能を持っているプロセッサエレメントＰＥのいずれでも演算処理を実行することができる。
【００３３】
なお、プロセッサエレメントＰＥ１〜ＰＥ６のそれぞれは、演算装置１に備えた６つのプロセッサエレメントＰＥのそれぞれが、どのような処理機能を持っているのかを把握している。そして、今回の演算処理を実行したプロセッサエレメントＰＥは、把握しているそれぞれのプロセッサエレメントＰＥが持っている処理機能の情報に基づいて、引き続き演算処理を実行させるプロセッサエレメントＰＥを一意に指定する。
【００３４】
次に、処理演算部１１〜処理演算部１６のそれぞれが、引き続き演算処理を実行させる演算処理を一意に指定する方法について説明する。図３は、本実施形態の演算装置１に備えたそれぞれの処理演算部が出力するパケットの構成を説明する図である。演算装置１では、それぞれの処理演算部１１〜処理演算部１６が、図３に示したような構成のパケットをやり取りすることによって、要求された演算処理を、処理演算部１１〜処理演算部１６のそれぞれで分担して行う。
【００３５】
上述したように、演算装置１に備えた処理演算部１１〜処理演算部１６のそれぞれが実行することができる処理機能には、いずれか１つの処理演算部（プロセッサエレメントＰＥ）のみが実行することができる専門機能と、いくつかの処理演算部（プロセッサエレメントＰＥ）が実行することができる専門機能とがある。
【００３６】
このため、処理演算部１１〜処理演算部１６のそれぞれは、自身が演算処理した後に引き続き演算処理を実行させる処理演算部を、把握しているそれぞれの処理演算部が持っている処理機能の情報に基づいて一意に指定する。このとき、処理演算部１１〜処理演算部１６のそれぞれは、引き続き演算処理を実行させる処理演算部を一意に指定するために、図３に示したような構成のパケットを生成して、パケット出力信号線５０に出力する。それぞれの処理演算部が生成するパケットは、図３に示したように、宛先領域３１１とペイロード領域３１２とから構成される。
【００３７】
宛先領域３１１は、次に演算処理を実行する処理演算部（プロセッサエレメントＰＥ）を指定する情報が格納される領域である。宛先領域３１１は、図３に示したように、演算装置１に備えたそれぞれの処理演算部に対応する複数のプロセッサエレメント指定フィールドに分かれている。パケットを生成する処理演算部（プロセッサエレメントＰＥ）、つまり、今回の演算処理を実行したプロセッサエレメントＰＥは、次に演算処理を実行させる処理演算部（プロセッサエレメントＰＥ）に対応したプロセッサエレメント指定フィールドに、指定したことを表す情報を格納することによって、自身が演算処理した後に引き続き演算処理を実行させる処理演算部（プロセッサエレメントＰＥ）を一意に指定する。
【００３８】
図３には、図１に示した演算装置１に備えた６つの処理演算部（プロセッサエレメントＰＥ）のそれぞれに対応する６つのプロセッサエレメント指定フィールドに分かれている宛先領域３１１を示し、６つのプロセッサエレメント指定フィールドの違いを示すため、対応する処理演算部（プロセッサエレメントＰＥ）を表す符号ＰＥ１〜ＰＥ６を、宛先領域３１１の中段に示している。また、図３には、次に演算処理を実行させる処理演算部（プロセッサエレメントＰＥ）として、プロセッサエレメントＰＥ２とプロセッサエレメントＰＥ３とを指定した場合の一例を、宛先領域３１１の下段に示している。
【００３９】
より具体的には、次に演算処理を実行するプロセッサエレメントＰＥとして指定したことを表す情報として、“１”をプロセッサエレメントＰＥ２とプロセッサエレメントＰＥ３とのそれぞれに対応するプロセッサエレメント指定フィールドに格納している。また、次に演算処理を実行するプロセッサエレメントＰＥとして指定していないことを表す情報として、“０”をプロセッサエレメントＰＥ１、およびプロセッサエレメントＰＥ４〜ＰＥ６のそれぞれに対応するプロセッサエレメント指定フィールドに、格納している。今回の演算処理を実行したプロセッサエレメントＰＥが、このような宛先領域３１１が含まれたパケットを生成してパケット出力信号線５０に出力することによって、このパケットが、プロセッサエレメントＰＥ２およびプロセッサエレメントＰＥ３のいずれでも、次の演算処理を実行することができるパケットであることを表す。パケット分配部３０内の宛先演算部３５は、宛先領域３１１内のプロセッサエレメント指定フィールドに格納された情報に基づいて、プロセッサエレメントＰＥ２またはプロセッサエレメントＰＥ３のいずれか１つのプロセッサエレメントＰＥを、このパケットを出力するプロセッサエレメントＰＥとして選択する。
【００４０】
なお、引き続き実行する処理機能が、いずれか１つのプロセッサエレメントＰＥのみが実行することができる専門機能である場合には、対応するプロセッサエレメント指定フィールドのみに、“１”を格納することによって、専門機能を実行することができる１つのプロセッサエレメントＰＥのみを指定する。これにより、このパケットが、指定した１つのプロセッサエレメントＰＥのみが次の演算処理を実行することができるパケットであることを表す。パケット分配部３０内の宛先演算部３５は、宛先領域３１１内のプロセッサエレメント指定フィールドに格納された情報に基づいて、指定された１つのプロセッサエレメントＰＥを、このパケットを出力するプロセッサエレメントＰＥとして選択する。
【００４１】
また、引き続き実行する処理機能が、全てのプロセッサエレメントＰＥが実行することができる共通機能である場合には、全てのプロセッサエレメント指定フィールドに、“１”を格納することによって、全てのプロセッサエレメントＰＥを指定する。これにより、このパケットが、演算装置１に備えた６つのプロセッサエレメントＰＥのいずれでも次の演算処理を実行することができるパケットであることを表す。パケット分配部３０内の宛先演算部３５は、宛先領域３１１内のプロセッサエレメント指定フィールドに格納された情報に基づいて、６つのプロセッサエレメントＰＥの内いずれか１つのプロセッサエレメントＰＥを、このパケットを出力するプロセッサエレメントＰＥとして選択する。
【００４２】
ペイロード領域３１２は、次に演算処理を実行する処理演算部（プロセッサエレメントＰＥ）が、演算処理を実行する際に用いる情報や、演算処理の内容が格納されるデータの領域である。パケットを生成する処理演算部（プロセッサエレメントＰＥ）、つまり、今回の演算処理を実行したプロセッサエレメントＰＥは、演算処理を実行する際に用いる情報（例えば、パラメータや係数など）や、演算処理の内容（例えば、データなど）を、ペイロード領域３１２に格納することによって、次に演算処理を実行させる処理演算部（プロセッサエレメントＰＥ）に、演算処理に関する情報や内容を引き渡す。これにより、パケット分配部３０内のパケット送出部３３から送出されたパケットが入力された処理演算部（プロセッサエレメントＰＥ）は、パケットに含まれるペイロード領域３１２の情報や内容に基づいて、次の演算処理を実行する。
【００４３】
このように、今回の演算処理を実行したプロセッサエレメントＰＥは、宛先領域３１１内のプロセッサエレメント指定フィールドの少なくとも１つに、次に演算処理を実行するプロセッサエレメントＰＥを指定する情報を格納することによって、自身が演算処理した後に引き続き演算処理を実行させるプロセッサエレメントＰＥを一意に指定する。これにより、パケット分配部３０内の宛先演算部３５は、宛先領域３１１内のプロセッサエレメント指定フィールドに格納された情報に基づいて、次に演算処理を実行するプロセッサエレメントＰＥを選択し、パケット分配部３０内のパケット送出部３３は、宛先演算部３５によって選択された１つのプロセッサエレメントＰＥに、パケットを送出することができる。
【００４４】
次に、本実施形態の演算装置１に備えたパケット分配部３０によるパケットの分配方法について説明する。宛先演算部３５は、上述したように、パケットキュー３４に格納されたそれぞれのパケットに含まれる宛先領域３１１内のプロセッサエレメント指定フィールドの情報に基づいて、それぞれのパケットの分配先を決定するための演算を行って、次に演算処理を実行するプロセッサエレメントＰＥを最終的に選択する。すなわち、次に演算処理を実行させるプロセッサエレメントＰＥを絞り込む。宛先演算部３５によるパケットの分配先を決定する演算は、パケット受信部３１がプロセッサエレメントＰＥから新たなパケットを受信してパケットキュー３４に格納するたび、およびパケット送出部３３がパケットキュー３４に格納されたパケットをプロセッサエレメントＰＥに送出するたびに、パケットキュー３４に格納されているパケットに対して再度行う。
【００４５】
宛先演算部３５がパケットの分配先を決定する演算を行う際には、パケットキュー３４に格納されたそれぞれのパケットに含まれる宛先領域３１１内のそれぞれのプロセッサエレメント指定フィールドに格納された、次に演算処理を実行するプロセッサエレメントＰＥを指定する情報の組み合わせに基づいて、以下に示すようなケースを想定する。そして、想定したケースに基づいて、パケットを送出するプロセッサエレメントＰＥを順次絞り込む。なお、以下の説明においては、宛先領域３１１内のそれぞれのプロセッサエレメント指定フィールドに格納された、次に演算処理を実行するプロセッサエレメントＰＥを指定する情報を、「宛先領域３１１の情報」という。
【００４６】
（ケースＣ１）：宛先領域３１１の情報で、１つのプロセッサエレメントＰＥのみが、次に演算処理を実行するプロセッサエレメントＰＥとして指定されている。この場合には、指定された１つのプロセッサエレメントＰＥを選択し、選択した１つのプロセッサエレメントＰＥを、パケットの分配先として決定する。なお、この決定は、ヘテロジニアス構成のマルチプロセッサにおいて基本的な動作である。
【００４７】
（ケースＣ２）：パケットキュー３４に先に格納されたパケットの宛先領域３１１の情報で複数のプロセッサエレメントＰＥが指定されているが、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報に、複数のプロセッサエレメントＰＥの内、いずれかのプロセッサエレメントＰＥが含まれている。ただし、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されたプロセッサエレメントＰＥは、パケットキュー３４に先に格納されたパケットの宛先領域３１１の情報で指定された全てのプロセッサエレメントＰＥではない。この場合には、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されているプロセッサエレメントＰＥを、パケットキュー３４に先に格納されたパケットの分配先として決定せず、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されているプロセッサエレメントＰＥ以外のプロセッサエレメントＰＥを、パケットキュー３４に先に格納されたパケットの分配先として決定する。これにより、後に送出されるパケットに応じて演算処理を実行するプロセッサエレメントＰＥを、非稼働の状態、つまり、空きの状態にしておくことができる。このことにより、空きの状態になっているプロセッサエレメントＰＥに、パケットキュー３４に後に格納されたパケットを早く送出することができ、演算装置１に備えたプロセッサエレメントＰＥの稼働率を向上させることができる。
【００４８】
（ケースＣ３）：パケットキュー３４に先に格納されたパケットの宛先領域３１１の情報で複数のプロセッサエレメントＰＥが指定されているが、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報でも同じプロセッサエレメントＰＥが指定されている、つまり、２つのパケットで同じプロセッサエレメントＰＥが指定されている。この場合には、パケットキュー３４に先に格納されたパケットの宛先領域３１１の情報によるプロセッサエレメントＰＥの指定を変更せずにそのままにしておく。そして、レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥの稼働状態が、最も早く非稼働の状態になったプロセッサエレメントＰＥを、パケットキュー３４に先に格納されたパケットの分配先として決定し、次に非稼働の状態になったプロセッサエレメントＰＥを、パケットキュー３４に後に格納されたパケットの分配先として決定する。
【００４９】
（ケースＣ４）：パケットキュー３４に先に格納されたパケットの宛先領域３１１の情報で複数のプロセッサエレメントＰＥが指定されているが、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で、１つのプロセッサエレメントＰＥ以外のプロセッサエレメントＰＥが指定されている。この場合には、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されていない１つのプロセッサエレメントＰＥを、パケットキュー３４に先に格納されたパケットの分配先として決定する。これにより、後に送出されるパケットに応じて演算処理を実行するプロセッサエレメントＰＥを、非稼働（空き）の状態にし、その後パケットキュー３４に格納されたパケットの宛先領域３１１の情報に基づいて、パケットキュー３４に後に格納されたパケットの分配先を決定することができる。
【００５０】
なお、パケットキュー３４に先に格納されたパケットの分配先として決定したプロセッサエレメントＰＥよりも、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されているプロセッサエレメントＰＥの方が先に非稼働の状態になった場合には、パケットキュー３４に格納された順番に基づいた出力順番を待たずに、パケットキュー３４に後に格納されたパケットの宛先領域３１１の情報で指定されているプロセッサエレメントＰＥに、パケットを送出することもできる。これにより、それぞれのプロセッサエレメントＰＥが非稼働の状態になっている時間を短くすることができ、演算装置１に備えたプロセッサエレメントＰＥの稼働率を向上させることができる。
【００５１】
ここで、パケット分配部３０によるパケットの分配先を決定するための演算方法、つまり、パケットを送出するプロセッサエレメントＰＥを絞り込む方法について説明する。図４は、本実施形態の演算装置１に備えたパケット分配部３０によるパケットの分配方法を説明する図である。図４には、宛先演算部３５がパケットの分配先を決定する演算において、各段階の演算内容を表す方法を示している。宛先演算部３５は、上述したケースの想定に基づいて、今回分配先を決定するパケットの前後のパケットで指定されたプロセッサエレメントＰＥの情報を参照して、各段階でパケットを送出するプロセッサエレメントＰＥを決定する。図４の上段には宛先指定値ｄｓｔ［ｑ］［ｐ］を示し、中段には宛先演算値ｍｓｋ［ｑ］［ｐ］を示し、下段には宛先決定値ｅｎｂ［ｑ］［ｐ］を示している。
【００５２】
宛先指定値ｄｓｔ［ｑ］［ｐ］は、パケットの宛先領域３１１の情報でプロセッサエレメントＰＥが指定されている状態を示す値である。また、宛先演算値ｍｓｋ［ｑ］［ｐ］は、今回分配先を決定するパケットよりも後にパケットキュー３４に格納されたパケットの宛先領域３１１の情報に基づいて決定した、パケットを送出するプロセッサエレメントＰＥを示す値である。また、宛先決定値ｅｎｂ［ｑ］［ｐ］は、今回分配先を決定するパケットよりも前にパケットキュー３４に格納されたパケットの宛先領域３１１の情報に基づいて決定した、パケットを送出するプロセッサエレメントＰＥを示す値である。
【００５３】
なお、宛先指定値ｄｓｔ［ｑ］［ｐ］、宛先演算値ｍｓｋ［ｑ］［ｐ］、および宛先決定値ｅｎｂ［ｑ］［ｐ］において、ｑはパケットキュー３４内のパケットの待ち番号を表し、ｐはそれぞれのプロセッサエレメントＰＥを表す。より具体的には、ｑは、パケットキュー３４に格納されたパケットの順番、すなわち、基本的な動作で送出する際にパケットキュー３４から読み出すパケットの出力順番で、ｐ＝１、２、３、・・・と順次増加する値である。また、ｐは、それぞれのプロセッサエレメントＰＥに対応する値であり、ｐ＝１はプロセッサエレメントＰＥ１を、ｐ＝２はプロセッサエレメントＰＥ２を、ｐ＝３はプロセッサエレメントＰＥ３を、ｐ＝４はプロセッサエレメントＰＥ４を、ｐ＝５はプロセッサエレメントＰＥ５を、ｐ＝６はプロセッサエレメントＰＥ６を、それぞれ示している。
【００５４】
宛先演算部３５がパケットの分配先を決定するための演算を開始すると、まず、宛先演算部３５は、それぞれのパケット［ｑ］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［ｑ］［ｐ］にコピーする。これにより、パケット［ｑ］の宛先領域３１１の情報で、次に演算処理を実行するプロセッサエレメントＰＥとして指定されているプロセッサエレメントＰＥ［ｐ］に対応する宛先指定値ｄｓｔ［ｑ］［ｐ］が、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていることを表す“１”になる。また、宛先指定値ｄｓｔ［ｑ］［ｐ］は、パケット［ｑ］の宛先領域３１１の情報で、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていないプロセッサエレメントＰＥ［ｐ］に対応する宛先指定値ｄｓｔ［ｑ］［ｐ］が、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていないことを表す“０”になる。
【００５５】
続いて、宛先演算部３５は、宛先指定値ｄｓｔ［ｑ］［ｐ］の値を、宛先演算値ｍｓｋ［ｑ］［ｐ］にコピーする。そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認する。その結果、宛先演算部３５は、宛先演算値ｍｓｋ［ｑ］［ｐ］の値が“１”であるプロセッサエレメントＰＥ［ｐ］において、パケットキュー３４内で後に格納されたいずれかのパケット［ｑ］に、宛先演算値ｍｓｋ［ｑ］［ｐ］の値が“１”であるパケット［ｑ］が確認された場合には、パケットキュー３４内で前に格納されたパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］を、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていないことを表す“０”にする。
【００５６】
また、宛先演算部３５は、宛先演算値ｍｓｋ［ｑ］［ｐ］の値が“１”であるプロセッサエレメントＰＥ［ｐ］において、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値が“０”であることが確認された場合には、パケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］を変更せず、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていることを表す“１”のままにする。
【００５７】
このようにして、宛先演算部３５は、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認し、パケットキュー３４に後に格納されたパケット［ｑ］で、同じプロセッサエレメントＰＥ［ｐ］を指定しているパケット［ｑ］がある場合に宛先演算値ｍｓｋ［ｑ］［ｐ］の値を“０”にして、パケット［ｑ］を送出するプロセッサエレメントＰＥ［ｐ］に決定することを回避（マスク）する。
【００５８】
これにより、宛先指定値ｄｓｔ［ｑ］［ｐ］＝“１”で、宛先演算値ｍｓｋ［ｑ］［ｐ］＝“０”のパケット［ｑ］は、パケットキュー３４に格納された後続のパケット［ｑ］が特定のプロセッサエレメントＰＥ［ｐ］を指定していたため、現在のパケット［ｑ］におけるプロセッサエレメントＰＥ［ｐ］の指定から、後続のパケット［ｑ］が指定したプロセッサエレメントＰＥ［ｐ］を除外することになる。すなわち、後続のパケット［ｑ］の指定したプロセッサエレメントＰＥ［ｐ］への送出を優先することになる。
【００５９】
なお、全てのプロセッサエレメントＰＥ［ｐ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認してマスクする演算を行った結果、同じパケット［ｑ］の全ての宛先演算値ｍｓｋ［ｑ］［ｐ］の値が“０”になった場合、宛先演算部３５は、今回の宛先演算値ｍｓｋ［ｑ］［ｐ］に対するマスクの演算の結果を破棄する。すなわち、宛先演算部３５によるマスクの演算の結果、パケット［ｑ］を送出するプロセッサエレメントＰＥ［ｐ］がなくなってしまった場合には、そのパケット［ｑ］の全てのプロセッサエレメントＰＥ［ｐ］のマスクを解除し、宛先演算値ｍｓｋ［ｑ］［ｐ］に宛先指定値ｄｓｔ［ｑ］［ｐ］の値をコピーした状態、つまり、手前の段階に戻す。
【００６０】
続いて、宛先演算部３５は、宛先演算値ｍｓｋ［ｑ］［ｐ］の値を、宛先決定値ｅｎｂ［ｑ］［ｐ］にコピーする。そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認する。その結果、宛先演算部３５は、宛先決定値ｅｎｂ［ｑ］［ｐ］の値が“１”であるプロセッサエレメントＰＥ［ｐ］において、パケットキュー３４内で前に格納されたいずれかのパケット［ｑ］に、宛先決定値ｅｎｂ［ｑ］［ｐ］の値が“１”であるパケット［ｑ］が確認された場合には、パケットキュー３４内で後に格納されたパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］を、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていないことを表す“０”にする。
【００６１】
また、宛先演算部３５は、宛先決定値ｅｎｂ［ｑ］［ｐ］の値が“１”であるプロセッサエレメントＰＥ［ｐ］において、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値が“０”であることが確認された場合には、パケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］を変更せず、次に演算処理を実行するプロセッサエレメントＰＥ［ｐ］として指定されていることを表す“１”のままにする。
【００６２】
このようにして、宛先演算部３５は、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認し、パケットキュー３４に前に格納されたパケット［ｑ］で、同じプロセッサエレメントＰＥ［ｐ］を指定しているパケット［ｑ］がある場合に宛先決定値ｅｎｂ［ｑ］［ｐ］の値を“０”にして、パケット［ｑ］を送出するプロセッサエレメントＰＥ［ｐ］に決定することを回避（マスク）する。
【００６３】
これにより、宛先決定値ｅｎｂ［ｑ］［ｐ］＝“１”のパケット［ｑ］は、パケットキュー３４に格納された先行するいずれのパケット［ｑ］でも、同じプロセッサエレメントＰＥ［ｐ］を指定していないことになる。これは、先行するいずれのパケット［ｑ］でも、同じプロセッサエレメントＰＥ［ｐ］を指定していないパケット［ｑ］は、パケットキュー３４に格納された順番に基づいた出力順番を待たずに、パケットキュー３４からすぐに読み出して、指定したプロセッサエレメントＰＥ［ｐ］に送出することができるパケット［ｑ］であることを表している。
【００６４】
最後に、宛先演算部３５は、レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥ［ｐ］の稼働状態を確認する。その結果、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］が非稼働の状態になったことを確認が確認された場合、すなわち、プロセッサエレメントＰＥ［ｐ］が入力されたパケット［ｑ］に応じた次の演算処理を実行する準備が整ったことが確認された場合には、宛先決定値ｅｎｂ［ｑ］［ｐ］＝“１”のパケット［ｑ］をパケット送出部３３に読み出させ、対応するプロセッサエレメントＰＥ［ｐ］に送出させる。
【００６５】
このようにして、宛先演算部３５は、パケットキュー３４に格納されたパケット［ｑ］を、次の演算処理を実行するプロセッサエレメントＰＥ［ｐ］のそれぞれに分配する。ここで、上述したそれぞれのケースにおいて行う、宛先演算部３５によるパケットの分配先を決定する演算、つまり、パケットを送出するプロセッサエレメントＰＥ［ｐ］の絞り込みの一例について説明する。図５〜図８は、本実施形態の演算装置１に備えたパケット分配部３０がパケットの分配先を決定する一例を説明する図である。なお、図５に示したパケットの分配先を決定する一例はケースＣ１に対応し、図６に示したパケットの分配先を決定する一例はケースＣ２に対応し、図７に示したパケットの分配先を決定する一例はケースＣ３に対応し、図８に示したパケットの分配先を決定する一例はケースＣ４に対応している。
【００６６】
なお、図５〜図８では、説明を容易にするため、演算装置１に４つの処理演算部（プロセッサエレメントＰＥ）を備えている場合を示している。そして、図５〜図８では、パケット［ｑ］を図の縦方向（上下方向）に並べ、プロセッサエレメントＰＥ［ｐ］を横方向（左右方向）に並べた２次元の配置で示している。また、図５〜図８において点線で囲った横方向の短冊が、１つのパケット［ｑ］を示している。また、図５〜図８の一番下に、宛先演算部３５によるパケットの分配先を決定する演算の結果、すなわち、パケット［ｑ］が送出されるプロセッサエレメントＰＥ［ｐ］を示している。そして、ぞれぞれのパケット［ｑ］には、それぞれのプロセッサエレメントＰＥ［ｐ］に対応する、図４に示した形式の宛先領域３１１の情報を示している。
【００６７】
まず、図５を用いて、ケースＣ１に対応した、宛先演算部３５によるパケットの分配先の決定方法を説明する。ケースＣ１の場合、宛先領域３１１の情報では、１つのプロセッサエレメントＰＥ［ｐ］のみが、次に演算処理を実行するプロセッサエレメントＰＥとして指定されている。図５では、パケットキュー３４にパケット［１］のみが格納され、パケット［１］においてプロセッサエレメントＰＥ［２］のみが指定されている場合を示している。
【００６８】
宛先演算部３５がパケットの分配先を決定するための演算を開始すると、まず、宛先演算部３５は、パケット［１］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［１］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［１］［２］のみの値が“１”になり、その他の宛先指定値ｄｓｔ［１］［ｐ］の値は“０”になる。
【００６９】
続いて、宛先演算部３５は、宛先指定値ｄｓｔ［１］［ｐ］の値を、宛先演算値ｍｓｋ［１］［ｐ］にコピーする。ここでは、宛先演算値ｍｓｋ［１］［２］のみの値が“１”になり、その他の宛先演算値ｍｓｋ［１］［ｐ］の値は“０”になる。
【００７０】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認する。ここでは、パケットキュー３４にパケット［１］のみが格納されているため、全てのパケット［ｑ］の宛先演算値ｍｓｋ［１］［ｐ］の値を確認した結果、パケット［１］の宛先演算値ｍｓｋ［１］［２］は、“１”のままである。
【００７１】
続いて、宛先演算部３５は、宛先演算値ｍｓｋ［１］［ｐ］の値を、宛先決定値ｅｎｂ［１］［ｐ］にコピーする。ここでは、宛先決定値ｅｎｂ［１］［２］のみの値が“１”になり、その他の宛先決定値ｅｎｂ［１］［ｐ］の値は“０”になる。
【００７２】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認する。ここでは、パケットキュー３４にパケット［１］のみが格納されているため、全てのパケット［ｑ］の宛先決定値ｅｎｂ［１］［ｐ］の値を確認した結果、パケット［１］の宛先決定値ｅｎｂ［１］［２］は、“１”のままである。
【００７３】
これにより、宛先演算部３５は、プロセッサエレメントＰＥ［２］を選択し、選択した１つのプロセッサエレメントＰＥ［２］を、パケットキュー３４に格納されたパケット［１］の分配先として決定する。
【００７４】
次に、図６を用いて、ケースＣ２に対応した、宛先演算部３５によるパケットの分配先の決定方法を説明する。ケースＣ２の場合、パケットキュー３４に先に格納されたパケット［ｑ］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［ｐ］が指定されているが、パケットキュー３４に後に格納されたパケット［ｑ］の宛先領域３１１の情報に、複数のプロセッサエレメントＰＥ［ｐ］の内、いずれかのプロセッサエレメントＰＥ［ｐ］が含まれている。図６では、パケットキュー３４に先に格納されたパケット［１］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［１］〜［４］が指定されているが、パケットキュー３４に後に格納されたパケット［３］の宛先領域３１１の情報に、プロセッサエレメントＰＥ［２］が含まれている場合を示している。
【００７５】
宛先演算部３５がパケットの分配先を決定するための演算を開始すると、まず、宛先演算部３５は、パケット［１］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［１］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［１］［ｐ］の全ての値が“１”になる。また、宛先演算部３５は、パケット［３］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［３］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［３］［２］のみの値が“１”になり、その他の宛先指定値ｄｓｔ［３］［ｐ］の値は“０”になる。
【００７６】
続いて、宛先演算部３５は、宛先指定値ｄｓｔ［１］［ｐ］の値を宛先演算値ｍｓｋ［１］［ｐ］に、宛先指定値ｄｓｔ［３］［ｐ］の値を宛先演算値ｍｓｋ［３］［ｐ］に、それぞれコピーする。ここでは、宛先演算値ｍｓｋ［１］［ｐ］の全ての値と、宛先演算値ｍｓｋ［３］［２］の値とが“１”になり、その他の宛先演算値ｍｓｋ［３］［ｐ］の値は“０”になる。
【００７７】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］のみがパケットキュー３４に後に格納されたパケット［ｑ］であるため、宛先演算値ｍｓｋ［１］［ｐ］と宛先演算値ｍｓｋ［３］［ｐ］とを比較し、宛先演算値ｍｓｋ［３］［２］のみの値が“１”であることが確認される。このため、宛先演算部３５は、宛先演算値ｍｓｋ［３］［２］と同じプロセッサエレメントＰＥ［２］を指定している宛先演算値ｍｓｋ［１］［２］の値を“０”にする。その他の宛先演算値ｍｓｋ［１］［ｐ］の値は“１”のままにする。
【００７８】
続いて、宛先演算部３５は、宛先演算値ｍｓｋ［１］［ｐ］の値を宛先決定値ｅｎｂ［１］［ｐ］に、宛先演算値ｍｓｋ［３］［ｐ］の値を宛先決定値ｅｎｂ［３］［ｐ］に、それぞれコピーする。ここでは、宛先決定値ｅｎｂ［１］［１］、宛先決定値ｅｎｂ［１］［３］、宛先決定値ｅｎｂ［１］［４］、および宛先決定値ｅｎｂ［３］［２］の値が“１”になり、その他の宛先決定値ｅｎｂ［１］［ｐ］および宛先決定値ｅｎｂ［３］［ｐ］の値は“０”になる。
【００７９】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］のみがパケットキュー３４に後に格納されたパケット［ｑ］であるため、現在の宛先決定値ｅｎｂ［１］［ｐ］と宛先決定値ｅｎｂ［３］［ｐ］とが、確認した結果として残る。すなわち、宛先決定値ｅｎｂ［１］［１］、宛先決定値ｅｎｂ［１］［３］、および宛先決定値ｅｎｂ［１］［４］の値は“１”のままである。
【００８０】
これにより、宛先演算部３５は、プロセッサエレメントＰＥ［１］、プロセッサエレメントＰＥ［３］、およびプロセッサエレメントＰＥ［４］を、パケットキュー３４に格納されたパケット［１］の分配先として決定する。
【００８１】
そして、レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥ［ｐ］の稼働状態が、最も早く非稼働の状態になったプロセッサエレメントＰＥ［１］、プロセッサエレメントＰＥ［３］、またはプロセッサエレメントＰＥ［４］のいずれか１つのプロセッサエレメントＰＥ［ｐ］に、パケットキュー３４に格納されたパケット［１］が、パケット送出部３３によって送出される。
【００８２】
次に、図７を用いて、ケースＣ３に対応した、宛先演算部３５によるパケットの分配先の決定方法を説明する。ケースＣ３の場合、パケットキュー３４に先に格納されたパケット［ｑ］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［ｐ］が指定されているが、パケットキュー３４に後に格納されたパケット［ｑ］の宛先領域３１１の情報でも同じプロセッサエレメントＰＥ［ｐ］が指定されている。図７では、パケットキュー３４に先に格納されたパケット［１］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［１］〜［４］が指定され、パケットキュー３４に後に格納されたパケット［３］の宛先領域３１１の情報でも複数のプロセッサエレメントＰＥ［１］〜［４］が指定されている場合を示している。
【００８３】
宛先演算部３５がパケットの分配先を決定するための演算を開始すると、まず、宛先演算部３５は、パケット［１］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［１］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［１］［ｐ］の全ての値が“１”になる。また、宛先演算部３５は、パケット［３］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［３］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［３］［ｐ］の全ての値が“１”になる。
【００８４】
続いて、宛先演算部３５は、宛先指定値ｄｓｔ［１］［ｐ］の値を宛先演算値ｍｓｋ［１］［ｐ］に、宛先指定値ｄｓｔ［３］［ｐ］の値を宛先演算値ｍｓｋ［３］［ｐ］に、それぞれコピーする。ここでは、宛先演算値ｍｓｋ［１］［ｐ］の全ての値と、宛先演算値ｍｓｋ［３］［ｐ］の全ての値とが“１”になる。
【００８５】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］のみがパケットキュー３４に後に格納されたパケット［ｑ］であるため、宛先演算値ｍｓｋ［１］［ｐ］と宛先演算値ｍｓｋ［３］［ｐ］とを比較し、宛先演算値ｍｓｋ［３］［ｐ］の全ての値が“１”であることが確認される。このため、宛先演算部３５は、宛先演算値ｍｓｋ［３］［ｐ］と同じプロセッサエレメントＰＥ［ｐ］を指定しているそれぞれの宛先演算値ｍｓｋ［１］［ｐ］の値を“０”にする。このため、図７（ａ）に示したように、宛先演算値ｍｓｋ［１］［ｐ］の全ての値が“０”になる。
【００８６】
しかし、宛先演算値ｍｓｋ［１］［ｐ］の全ての値が“０”の状態では、図７（ａ）を見てわかるように、宛先演算部３５が以降のパケットの分配先を決定する演算を行ったとしても、パケット［１］を送出するプロセッサエレメントＰＥ［ｐ］を決定することができない。そのため、宛先演算部３５は、図７（ｂ）に示したように、確認した結果を破棄し、パケット［１］の全ての宛先演算値ｍｓｋ［１］［ｐ］の値を、“１”に戻す。すなわち、宛先演算部３５は、宛先指定値ｄｓｔ［１］［ｐ］の値を宛先演算値ｍｓｋ［１］［ｐ］に、宛先指定値ｄｓｔ［３］［ｐ］の値を宛先演算値ｍｓｋ［３］［ｐ］に、それぞれコピーした、手前の段階に戻す。
【００８７】
続いて、宛先演算部３５は、宛先演算値ｍｓｋ［１］［ｐ］の値を宛先決定値ｅｎｂ［１］［ｐ］に、宛先演算値ｍｓｋ［３］［ｐ］の値を宛先決定値ｅｎｂ［３］［ｐ］に、それぞれコピーする。ここでは、宛先決定値ｅｎｂ［１］［ｐ］の全ての値と、宛先決定値ｅｎｂ［３］［ｐ］の全ての値とが“１”になる。
【００８８】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］のみがパケットキュー３４に後に格納されたパケット［ｑ］であるため、現在の宛先決定値ｅｎｂ［１］［ｐ］と宛先決定値ｅｎｂ［３］［ｐ］とが、確認した結果として残る。すなわち、図７（ｂ）に示したように、宛先決定値ｅｎｂ［１］［ｐ］と宛先決定値ｅｎｂ［３］［ｐ］との全ての値は“１”のままである。
【００８９】
これにより、宛先演算部３５は、プロセッサエレメントＰＥ［１］〜［４］の全てを、パケットキュー３４に格納されたパケット［１］の分配先として決定する。
【００９０】
そして、レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥ［ｐ］の稼働状態が、最も早く非稼働の状態になったプロセッサエレメントＰＥ［１］〜［４］のいずれか１つのプロセッサエレメントＰＥ［ｐ］に、パケットキュー３４に格納されたパケット［１］が、パケット送出部３３によって送出される。
【００９１】
次に、図８を用いて、ケースＣ４に対応した、宛先演算部３５によるパケットの分配先の決定方法を説明する。ケースＣ４の場合、パケットキュー３４に先に格納されたパケット［ｑ］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［ｐ］が指定されているが、パケットキュー３４に後に格納されたパケット［ｑ］の宛先領域３１１の情報で、１つのプロセッサエレメントＰＥ［ｐ］以外のプロセッサエレメントＰＥ［ｐ］が指定されている。図８では、パケットキュー３４に先に格納されたパケット［１］の宛先領域３１１の情報で複数のプロセッサエレメントＰＥ［１］〜［４］が指定され、パケットキュー３４に後に格納されたパケット［３］の宛先領域３１１の情報でプロセッサエレメントＰＥ［１］が指定され、パケットキュー３４にさらに後に格納されたパケット［５］の宛先領域３１１の情報でプロセッサエレメントＰＥ［２］とプロセッサエレメントＰＥ［４］とが指定されている場合を示している。
【００９２】
宛先演算部３５がパケットの分配先を決定するための演算を開始すると、まず、宛先演算部３５は、パケット［１］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［１］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［１］［ｐ］の全ての値が“１”になる。また、宛先演算部３５は、パケット［３］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［３］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［３］［１］のみの値が“１”になり、その他の宛先指定値ｄｓｔ［３］［ｐ］の値は“０”になる。また、宛先演算部３５は、パケット［５］の宛先領域３１１に格納されたプロセッサエレメント指定フィールドの値を、宛先指定値ｄｓｔ［５］［ｐ］にコピーする。ここでは、宛先指定値ｄｓｔ［５］［２］と宛先指定値ｄｓｔ［５］［４］との値が“１”になり、その他の宛先指定値ｄｓｔ［５］［ｐ］の値は“０”になる。
【００９３】
続いて、宛先演算部３５は、宛先指定値ｄｓｔ［１］［ｐ］の値を宛先演算値ｍｓｋ［１］［ｐ］に、宛先指定値ｄｓｔ［３］［ｐ］の値を宛先演算値ｍｓｋ［３］［ｐ］に、宛先指定値ｄｓｔ［５］［ｐ］の値を宛先演算値ｍｓｋ［５］［ｐ］に、それぞれコピーする。ここでは、宛先演算値ｍｓｋ［１］［ｐ］の全ての値と、宛先演算値ｍｓｋ［３］［１］の値と、宛先演算値ｍｓｋ［５］［２］の値と、宛先演算値ｍｓｋ［５］［４］の値とが“１”になり、その他の宛先演算値ｍｓｋ［３］［ｐ］の値と宛先演算値ｍｓｋ［５］［ｐ］の値とは“０”になる。
【００９４】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で後に格納された全てのパケット［ｑ］の宛先演算値ｍｓｋ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］とパケット［５］とがパケットキュー３４に後に格納されたパケット［ｑ］であるため、宛先演算値ｍｓｋ［１］［ｐ］と宛先演算値ｍｓｋ［３］［ｐ］とを比較し、さらに、宛先演算値ｍｓｋ［１］［ｐ］と宛先演算値ｍｓｋ［５］［ｐ］とを比較する。その結果、宛先演算値ｍｓｋ［３］［１］の値と、宛先演算値ｍｓｋ［５］［２］の値と、宛先演算値ｍｓｋ［５］［４］の値とが“１”であることが確認される。このため、宛先演算部３５は、宛先演算値ｍｓｋ［３］［１］と同じプロセッサエレメントＰＥ［１］を指定している宛先演算値ｍｓｋ［１］［１］の値を“０”にする。また、宛先演算部３５は、宛先演算値ｍｓｋ［５］［２］と同じプロセッサエレメントＰＥ［２］を指定している宛先演算値ｍｓｋ［１］［２］の値と、宛先演算値ｍｓｋ［５］［４］と同じプロセッサエレメントＰＥ［４］を指定している宛先演算値ｍｓｋ［１］［４］の値とを“０”にする。そして、宛先演算値ｍｓｋ［３］［ｐ］と宛先演算値ｍｓｋ［５］［ｐ］とのいずれとも同じプロセッサエレメントＰＥ［３］を指定していない、宛先演算値ｍｓｋ［１］［３］の値は“１”のままにする。
【００９５】
続いて、宛先演算部３５は、宛先演算値ｍｓｋ［１］［ｐ］の値を宛先決定値ｅｎｂ［１］［ｐ］に、宛先演算値ｍｓｋ［３］［ｐ］の値を宛先決定値ｅｎｂ［３］［ｐ］に、宛先演算値ｍｓｋ［５］［ｐ］の値を宛先決定値ｅｎｂ［５］［ｐ］に、それぞれコピーする。ここでは、宛先決定値ｅｎｂ［１］［３］、宛先決定値ｅｎｂ［３］［１］、宛先決定値ｅｎｂ［５］［２］、および宛先決定値ｅｎｂ［５］［４］の値が“１”になり、その他の宛先決定値ｅｎｂ［１］［ｐ］、宛先決定値ｅｎｂ［３］［ｐ］、および宛先決定値ｅｎｂ［５］［ｐ］の値は“０”になる。
【００９６】
そして、宛先演算部３５は、プロセッサエレメントＰＥ［ｐ］毎に、パケットキュー３４内で前に格納された全てのパケット［ｑ］の宛先決定値ｅｎｂ［ｑ］［ｐ］の値を確認する。ここでは、パケット［３］とパケット［５］とがパケットキュー３４に後に格納されたパケット［ｑ］であるため、現在の宛先決定値ｅｎｂ［１］［ｐ］と、宛先決定値ｅｎｂ［３］［ｐ］と、宛先決定値ｅｎｂ［５］［ｐ］とが、確認した結果として残る。すなわち、宛先決定値ｅｎｂ［１］［３］、宛先決定値ｅｎｂ［３］［１］、宛先決定値ｅｎｂ［５］［２］、および宛先決定値ｅｎｂ［５］［４］の値は“１”のままである。
【００９７】
なお、宛先演算部３５による演算の結果、例えば、宛先決定値ｅｎｂ［１］［３］の値が“０”になった場合、すなわち、パケット［１］を送出するプロセッサエレメントＰＥ［ｐ］がなくなってしまった場合には、宛先演算部３５は、今回の宛先決定値ｅｎｂ［１］［３］に対する演算の結果を破棄する。なお、パケット［ｑ］において、送出するプロセッサエレメントＰＥ［ｐ］が１つになったときに、宛先演算部３５が演算を終了する構成にすることもできる。
【００９８】
これにより、宛先演算部３５は、プロセッサエレメントＰＥ［３］を、パケットキュー３４に格納されたパケット［１］の分配先として決定し、プロセッサエレメントＰＥ［１］を、パケットキュー３４に格納されたパケット［３］の分配先として決定し、プロセッサエレメントＰＥ［２］およびプロセッサエレメントＰＥ［４］を、パケットキュー３４に格納されたパケット［５］の分配先として決定する。
【００９９】
そして、プロセッサエレメントＰＥ［３］に、パケットキュー３４に格納されたパケット［１］が、パケット送出部３３によって送出される。なお、パケットキュー３４に格納されたパケット［３］よりも前にパケットキュー３４に格納されたパケット［ｑ］でプロセッサエレメントＰＥ［１］が指定されていない場合には、パケット［３］よりも前にパケットキュー３４に格納されたパケット［ｑ］が送出されるまで順番を待たずに、パケットキュー３４に格納されたパケット［３］が、パケット送出部３３によって送出される。また、パケットキュー３４に格納されたパケット［５］よりも前にパケットキュー３４に格納されたパケット［ｑ］でプロセッサエレメントＰＥ［２］およびプロセッサエレメントＰＥ［４］が指定されていない場合には、パケット［５］よりも前にパケットキュー３４に格納されたパケット［ｑ］が送出されるまで順番を待たずに、レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥ［ｐ］の稼働状態が、最も早く非稼働の状態になったプロセッサエレメントＰＥ［２］またはプロセッサエレメントＰＥ［４］のいずれか１つのプロセッサエレメントＰＥ［ｐ］に、パケットキュー３４に格納されたパケット［５］が、パケット送出部３３によって送出される。
【０１００】
このようにして、パケット分配部３０は、宛先演算部３５によって、パケットキュー３４に格納されたパケット［ｑ］を送出するプロセッサエレメントＰＥ［ｐ］を動的に選択し、次の演算処理を実行するプロセッサエレメントＰＥ［ｐ］を動的に決定する。ここで、上述したそれぞれのケースにおける宛先演算部３５によるパケットの分配先の決定が、複合して行われる場合の一例について説明する。図９は、本実施形態の演算装置１に備えたパケット分配部３０によるパケットの分配の一例を説明する図である。
【０１０１】
図９では、図５〜図８に示したパケットの分配先を決定する一例と同様に、パケット［ｑ］を図の縦方向（上下方向）に並べ、演算装置１に備えた６つのプロセッサエレメントＰＥ［１］〜［６］を横方向（左右方向）に並べた２次元の配置で、図４に示した形式の宛先領域３１１の情報を示している。そして、図９の一番下に、パケット［ｑ］が送出されるプロセッサエレメントＰＥ［ｐ］を示している。なお、図９においても、図５〜図８に示したパケットの分配先を決定する一例と同様に、点線で囲った横方向の短冊が、１つのパケット［ｑ］を示している。なお、以下の説明においては、宛先演算部３５がパケット［ｑ］の分配先を決定するための演算を行うが、この演算における各段階の演算方法は、上述したケースＣ１〜ケースＣ４と同様であるため、各段階の演算方法に関する詳細な説明は省略する。
【０１０２】
最初に、パケット分配部３０にプロセッサエレメントＰＥ［１］〜［６］のいずれかからパケットが出力されると、パケット受信部３１は、受信したパケットをパケット［１］としてパケットキュー３４に格納する。そして、宛先演算部３５は、パケットキュー３４に格納されているパケット［１］の分配先を決定するための演算を行う。
【０１０３】
ここでは、パケット［１］ではプロセッサエレメントＰＥ［４］とプロセッサエレメントＰＥ［５］とを指定しているため、ケースＣ１に相当する演算が行われる。従って、宛先演算部３５は、プロセッサエレメントＰＥ［４］とプロセッサエレメントＰＥ［５］とをパケット［１］の分配先として決定する。なお、この時点では、プロセッサエレメントＰＥ［１］、プロセッサエレメントＰＥ［２］、プロセッサエレメントＰＥ［３］、およびプロセッサエレメントＰＥ［６］に分配するパケット［ｑ］は決定されていない。
【０１０４】
続いて、パケット分配部３０にプロセッサエレメントＰＥ［１］〜［６］のいずれかからパケットが出力されると、パケット受信部３１は、受信したパケットをパケット［２］としてパケットキュー３４に格納する。そして、宛先演算部３５は、パケットキュー３４に格納されているパケット［２］を含めた分配先を決定するための演算、すなわち、パケット［１］とパケット［２］との分配先を決定するための演算を行う。
【０１０５】
ここでは、パケット［１］の分配先としてプロセッサエレメントＰＥ［４］とプロセッサエレメントＰＥ［５］が決定されている状態である。しかし、パケット［２］ではプロセッサエレメントＰＥ［４］のみを指定している。このため、宛先演算部３５は、ケースＣ２に相当する演算を行い、プロセッサエレメントＰＥ［４］をパケット［２］の分配先として決定し、プロセッサエレメントＰＥ［５］をパケット［１］の分配先として決定する。なお、この時点でも、プロセッサエレメントＰＥ［１］、プロセッサエレメントＰＥ［２］、プロセッサエレメントＰＥ［３］、およびプロセッサエレメントＰＥ［６］に分配するパケット［ｑ］は決定されていない。
【０１０６】
続いて、パケット分配部３０にプロセッサエレメントＰＥ［１］〜［６］のいずれかからパケットが出力されると、パケット受信部３１は、受信したパケットをパケット［３］としてパケットキュー３４に格納する。そして、宛先演算部３５は、パケットキュー３４に格納されているパケット［３］を含めた分配先を決定するための演算、すなわち、パケット［１］〜パケット［３］の分配先を決定するための演算を行う。
【０１０７】
ここでは、パケット［１］の分配先としてプロセッサエレメントＰＥ［５］が決定され、パケット［２］の分配先としてプロセッサエレメントＰＥ［４］が決定されている状態である。そして、パケット［３］ではプロセッサエレメントＰＥ［２］と、プロセッサエレメントＰＥ［３］と、プロセッサエレメントＰＥ［６］とを指定している。このため、宛先演算部３５は、ケースＣ１に相当する演算を行い、プロセッサエレメントＰＥ［２］、プロセッサエレメントＰＥ［３］、およびプロセッサエレメントＰＥ［６］をパケット［３］の分配先として決定し、プロセッサエレメントＰＥ［４］をパケット［２］の分配先として決定し、プロセッサエレメントＰＥ［５］をパケット［１］の分配先として決定する。なお、この時点では、プロセッサエレメントＰＥ［１］に分配するパケット［ｑ］は決定されていない。
【０１０８】
続いて、パケット分配部３０にプロセッサエレメントＰＥ［１］〜［６］のいずれかからパケットが出力されると、パケット受信部３１は、受信したパケットをパケット［４］としてパケットキュー３４に格納する。そして、宛先演算部３５は、パケットキュー３４に格納されているパケット［４］を含めた分配先を決定するための演算、すなわち、パケット［１］〜パケット［４］の分配先を決定するための演算を行う。
【０１０９】
ここでは、パケット［１］の分配先としてプロセッサエレメントＰＥ［５］が決定され、パケット［２］の分配先としてプロセッサエレメントＰＥ［４］が決定され、パケット［３］の分配先としてプロセッサエレメントＰＥ［２］、プロセッサエレメントＰＥ［３］、およびプロセッサエレメントＰＥ［６］が決定されている状態である。そして、パケット［４］ではプロセッサエレメントＰＥ［３］とプロセッサエレメントＰＥ［５］とを指定している。このため、宛先演算部３５は、ケースＣ２に相当する演算を行う。これにより、宛先演算部３５は、プロセッサエレメントＰＥ［２］およびプロセッサエレメントＰＥ［６］をパケット［３］の分配先として決定し、プロセッサエレメントＰＥ［３］およびプロセッサエレメントＰＥ［５］をパケット［４］の分配先として決定し、プロセッサエレメントＰＥ［４］をパケット［２］の分配先として決定する。なお、この時点では、プロセッサエレメントＰＥ［１］に分配するパケット［ｑ］は決定されていない。
【０１１０】
しかし、この演算では、パケット［１］の分配先として決定されたプロセッサエレメントＰＥ［ｐ］がなくなってしまう。従って、宛先演算部３５は、ケースＣ３に相当する演算を行い、パケット［１］の分配先として決定していたプロセッサエレメントＰＥ［５］における演算の結果を破棄し、再度、プロセッサエレメントＰＥ［５］をパケット［１］の分配先として決定する。そして、パケット［４］のプロセッサエレメントＰＥ［５］に対応した宛先決定値ｅｎｂ［４］［５］を“０”にする。
【０１１１】
なお、パケット［１］の分配先として決定されたプロセッサエレメントＰＥ［ｐ］が１つになった時点で、プロセッサエレメントＰＥ［５］に対する他のパケット［ｑ］の分配を行わない方法を用いることによっても、パケット［１］の分配先として決定されたプロセッサエレメントＰＥ［ｐ］がなくなってしまうことを回避することができる。この場合、図９に示したパケットの分配先を決定する一例では、パケット［２］を含めて分配先を決定した時点で、パケット［１］の分配先として決定されたプロセッサエレメントＰＥ［５］に対して他のパケット［ｑ］を分配するための演算を終了することになる。なお、この時点では、パケット［２］を送出するプロセッサエレメントＰＥ［ｐ］も１つであるため、パケット［２］の分配先として決定されたプロセッサエレメントＰＥ［５］に対して他のパケット［ｑ］を分配するための演算を終了してもよい。
【０１１２】
これにより、宛先演算部３５は、プロセッサエレメントＰＥ［２］およびプロセッサエレメントＰＥ［６］をパケット［３］の分配先とし、プロセッサエレメントＰＥ［３］をパケット［４］の分配先とし、プロセッサエレメントＰＥ［４］をパケット［２］の分配先とし、プロセッサエレメントＰＥ［５］をパケット［１］の分配先として、最終的に決定する。なお、この時点でも、プロセッサエレメントＰＥ［１］に分配するパケット［ｑ］は決定されていない。
【０１１３】
最後に、パケット分配部３０にプロセッサエレメントＰＥ［１］〜［６］のいずれかからレディ信号が出力されると、レディ信号受信部３２は、受信したレディ信号に応じたプロセッサエレメントＰＥ［１］〜［６］の稼働状態を宛先演算部３５に出力する。そして、宛先演算部３５は、レディ信号受信部３２レディ信号受信部３２から入力されたそれぞれのプロセッサエレメントＰＥ［ｐ］の稼働状態に応じて、非稼働の状態のプロセッサエレメントＰＥ［ｐ］に送出するパケット［ｑ］をパケット送出部３３に読み出させ、対応するプロセッサエレメントＰＥ［ｐ］に送出させる。
【０１１４】
上記に述べたとおり、本発明を実施するための形態によれば、演算装置に備えたそれぞれの処理演算部が、次の演算処理を行うための情報や演算処理の内容をパケットに、引き続き演算処理を実行させる少なくとも１つの処理演算部を指定する宛先情報を付加して出力する。そして、パケット分配部が、それぞれの処理演算部から出力されたパケットを一旦パケットキューに格納することによって、複数の処理演算部でパケットキューを共有する。また、パケット分配部は、パケットキューに格納されたパケットに含まれる宛先情報に基づいて、次に演算処理を実行させる処理演算部を決定し、決定した処理演算部にパケットキューに格納されたパケットを送出する。これにより、本発明を実施するための形態では、演算装置がヘテロジニアス構成のマルチプロセッサであるにもかかわらず、次に実行する演算処理に適した処理演算部に確実にパケットを送出することができ、パケットに含まれた演算処理の情報や内容に応じた演算処理を実行することができる。
【０１１５】
また、本発明を実施するための形態によれば、演算装置に備えたそれぞれの処理演算部が出力するパケットの宛先情報として、複数の処理演算部を指定することができる。そして、パケット分配部は、複数指定された処理演算部の内、いずれか１つの処理演算部を選択する。また、パケット分配部は、パケットキューに格納された順番に基づいた出力順番を待たずに、非稼働の状態の処理演算部にパケットを送出する。また、パケット送出部は、特定の処理演算部に対して優先的にパケットを送出する。つまり、本発明を実施するための形態によれば、パケット送出部が、演算装置に備えたそれぞれの処理演算部から出力されたパケットの送出先を動的に選択する。これにより、本発明を実施するための形態では、次の演算処理を実行するために指定された処理演算部の内、一番早く次の演算処理を実行することができる処理演算部を動的に選択してパケットを分配することができ、演算装置に備えたそれぞれの処理演算部の処理負荷を分散させると共に、稼働率を向上させ、演算装置における演算処理の性能を向上させることができる。
【０１１６】
なお、本実施形態においては、演算装置１内に６つの処理演算部１１〜処理演算部１６を備えた構成について説明したが、演算装置内に備える処理演算部の数は、本発明を実施するための形態に限定されるものではない。また、本実施形態においては、演算装置１内に、６つの処理演算部１１〜処理演算部１６の対応した１つのパケット分配部３０を備えた構成について説明した。つまり、６つの処理演算部１１〜処理演算部１６で１つのパケットキュー３４を共有する構成について説明した。しかし、演算装置に備えるパケット分配部３０の数や、１つのパケットキューを共有する処理演算部の数は、本発明を実施するための形態に限定されるものではない。例えば、６つの処理演算部と２つのパケット分配部とを備えた構成の演算装置において、それぞれのパケット分配部が３つの処理演算部に対応する構成、つまり、演算装置内で３つの処理演算部毎に１つのパケットキューを共有する構成であっても同様に、本発明の考え方を適用することができる。
【０１１７】
また、本実施形態においては、パケット送出部３３が送出するパケットの構成について説明していないが、パケット送出部３３がそれぞれの処理演算部に送出するパケットの構成は、パケットキュー３４に格納されたパケットと同じ構成、つまり、図４に示したパケットの構成と同様の構成であってもよい。また、例えば、図４に示したペイロード領域３１２のみの構成であってもよい。
【０１１８】
また、本実施形態においては、演算装置１に備えたそれぞれの処理演算部が持っている処理機能について説明していない。しかし、例えば、演算装置１が、撮像装置に備えた画像処理装置である場合には、それぞれの処理演算部の処理機能は、ＹＣ変換処理、ノイズ除去処理、歪み補正処理、キズ補正処理、画像圧縮処理など、様々な画像処理の機能であると考えられる。また、例えば、演算装置１が、撮像装置に備えた画像処理装置内の画像認識部などの一部の処理部である場合には、それぞれの処理演算部の処理機能は、画像処理装置内の一部の処理部において種々の処理を行うための機能であると考えられる。
【０１１９】
以上、本発明の実施形態について、図面を参照して説明してきたが、具体的な構成はこの実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲においての種々の変更も含まれる。
【符号の説明】
【０１２０】
１・・・演算装置
１１，１２，１３，１４，１５，１６，ＰＥ，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４，ＰＥ５，ＰＥ６・・・処理演算部（プロセッサエレメント，処理演算部）
２０・・・メモリ部
３０・・・パケット分配部
３１・・・パケット受信部（パケット分配部）
３１１・・・宛先領域（パケット）
３１２・・・ペイロード領域（パケット）
３２・・・レディ信号受信部（パケット分配部）
３３・・・パケット送出部（パケット分配部）
３４・・・パケットキュー（パケット分配部）
３５・・・宛先演算部（パケット分配部）
４０・・・バス
５０・・・パケット出力信号線
６０・・・レディ信号線
７０・・・パケット入力信号線
【図１】
2014170305.tif 000003
【図２】
2014170305.tif 000004
【図３】
2014170305.tif 000005
【図４】
2014170305.tif 000006
【図５】
2014170305.tif 000007
【図６】
2014170305.tif 000008
【図７】
2014170305.tif 000009
【図８】
2014170305.tif 000010
【図９】
2014170305.tif 000011