本明細書および添付図面の記載により、少なくとも以下の事項が明らかとなる。
===データ処理システム全体の構成の概略===
以下、図2を参照して、データ処理装置を備えたデータ処理システム全体の構成の概略について説明する。
図2に示されているデータ処理システムは、データ処理装置1を備えた並列コンピュータシステムであり、データ処理装置1以外に、記憶装置6、入力装置7、出力装置8、およびバス9を含んで構成されている。また、データ処理装置1、記憶装置6、入力装置7、および出力装置8は、バス9を介して互いに接続されている。なお、データ処理装置1の構成についての詳細な説明は後述する。
===データ処理システム全体の動作の概略===
次に、データ処理システム全体の動作の概略について説明する。
記憶装置6は、RAM(Random Access Memory)やROM(Read Only Memory)などで構成され、プログラム(実行コード)や当該プログラムの実行に用いられるデータなどを記憶している。また、データ処理装置1は、コンピュータシステムのCPUに相当し、記憶装置6に記憶されているプログラムを実行する。なお、データ処理装置1の動作についての詳細な説明は後述する。
入力装置7は、キーボードやマウスなどで構成され、データやプログラム(ソースプログラムまたは実行コード)を含む情報を外部から当該データ処理システムに入力する。一方、出力装置8は、ディスプレイやプリンタなどで構成され、情報を文字や画像などとして外部に出力する。
なお、上記データ処理装置1、記憶装置6、入力装置7、および出力装置8の分類は、固定的なものではない。例えば、ハードディスクドライブや光ディスクドライブなどの補助記憶装置は、記憶装置6として用いられるが、外部との間で情報を入出力する入力装置7および出力装置8に分類してもよい。
===データ処理装置の構成===
以下、図3を参照して、本発明の一実施形態におけるデータ処理装置の構成について説明する。
図3に示されているデータ処理装置1は、PE100ないし163、MCE(Memory Control/Controlling Element:メモリ制御要素/メモリ制御素子)300、キャッシュメモリ400、および通信路(伝送路)500を含んで構成されている。
データ処理装置1は、処理部に相当するPEを複数備え、各PEが通信路500を介して互いに接続されている。本実施形態では、一例として、データ処理装置1は、8行8列の行列状に配置された64個のPE100ないし163を備えているものとする。また、PE100ないし163は、隣接するPE間のみが互いに接続されているものとする。なお、各PEの構成についての詳細な説明は後述する。
ここで、PE100ないし163の座標(X,Y)を、図3に示すように、それぞれ(0,0)ないし(7,7)と表すこととすると、各PEに対して、X座標を上位3ビット、Y座標を下位3ビットとする識別番号を設定することができる。また、このように設定された識別番号は、図3に示されている各PEの3桁の符号の下2桁と一致している。例えば、座標(0,7)に位置するPE107の識別番号は、7(2進表記で000111)となり、座標(7,0)に位置するPE156の識別番号は、56(2進表記で111000)となる。
データ処理装置1は、制御部に相当するMCEを少なくとも1つ備え、各MCEが通信路500を介してPE100ないし163の何れかと接続されている。本実施形態では、一例として、データ処理装置1は、1個のMCE300のみを備えているものとする。また、図3に示すように、MCE300は、隣接するPE100ないし107と接続されているものとする。
キャッシュメモリ400は、MCE300と接続されている。また、キャッシュメモリ400は、前述したバス9を介して、データ処理装置1外の記憶装置6(不図示)と接続されている。
===データ処理装置の動作===
次に、図4ないし図8を適宜参照して、本実施形態におけるデータ処理装置の動作について説明する。
キャッシュメモリ400は、キャッシュを行いつつ、MCE300と記憶装置6との間の入出力を制御する。したがって、記憶装置6に記憶されているプログラムやデータなどは、キャッシュメモリ400を介してMCE300に読み込まれる。
ここで、ソースプログラムとデータ処理装置1で処理されるプログラム(実行コード)との関係の一例を図4に示す。高級言語で記述されたソースプログラムPR0は、実行コードPR1に予めコンパイルされたうえで記憶装置6に記憶されており、MCE300には、実行コードPR1が読み込まれる。なお、図4においては、ソースプログラムPR0の一例として、C++言語で記述された、配列sp[1024]の各要素を2で除算した値を配列dp[1024]に格納する処理が示されている。また、実行コードPR1は、機械語プログラムではなく、機械語と略1対1に対応するアセンブリ言語で記述されたプログラムとしてもよい。
MCE300は、読み込まれた実行コードPR1から、データフロー図に基づいて、後述する初期パケット列を生成する。なお、MCE300は、データフロー図自体を生成する必要はないが、本実施形態においては、説明の便宜上、まずデータフロー図を生成し、次にデータフロー図に基づいて初期パケット列を生成するものとする。
ここで、データ処理装置1で用いられる命令セットの一例を図5に示す。図5において、各命令は、2入力・1出力命令、1入力・1出力命令、およびループ関連命令に大別されている。これらのうち、2入力・1出力命令は、入力された2つのデータをそれぞれ左側および右側オペランドとして2項演算を行う命令であり、1入力・1出力命令は、入力された1つのデータをオペランドとして単項演算を行う命令である。一方、ループ関連命令は、ループ処理を各PEにおいて展開するため、本実施形態のデータ処理装置に対して追加された命令である。
また、図5に示すように、各命令に対して、オペレータ(演算子)に相当する記号と機械語における16進表記とが設定されており、これらはデータフロー図やパケット列についての説明で適宜用いられる。本実施形態では、各命令は、例えば8ビットの固定長となっている。
まず、2入力・1出力命令について説明する。
2つのデータ(AおよびB)の加算結果(A+B)を出力する加算命令に対しては、記号「+」と16進表記10Hとが設定されている。また、2つのデータ(AおよびB)の乗算結果(A×B)を出力する乗算命令に対しては、記号「×」と16進表記14Hとが設定されている。
2つのデータ(LおよびR)の減算結果(L−R)を出力する減算命令の場合、減算は交換法則が成立しない非可換演算であるため、各データを左側または右側オペランドの何れとするかを示す左右情報(方向情報)を必要とする。そのため、減算命令に対する記号「−」には、さらに左右情報「L」または「R」が付加され、それぞれ16進表記12Hまたは13Hが設定されている。また、2つのデータ(LおよびR)の除算結果(L/R)を出力する除算命令に対しては、左右情報が付加された記号「/」(「/L」および「/R」)と、16進表記16Hおよび17Hとが設定されている。
なお、左右情報「L」は、左側オペランドとなるデータを示し、左右情報「R」は、右側オペランドとなるデータを示している。また、当該命令セットにおいては、各命令のLSB(Least Significant Bit:最下位ビット)が左右情報専用に割り当てられている。したがって、以下の命令(ヌル文字を除く)においても、左右情報「L」を有する命令および左右情報を有しない命令のLSBは0、左右情報「R」を有する命令のLSBは1となっている。そのため、交換法則が成立する可換演算を行う加算命令や乗算命令などに対しても、容易に左右情報を付加することができる。
左右情報が付加された記号「write」(「writeL」および「writeR」)と、16進表記18Hおよび19Hとが設定されている書き込み命令は、データ(L)が示す記憶装置6のアドレスに記憶されているデータ(*L)にデータ(R)を書き込む命令である。なお、「*」は間接参照演算子である。
左右情報が付加された記号「Dap」(「DapL」および「DapR」)と、16進表記50Hおよび51Hとが設定されているデータ追加命令は、後述するパケット(L)のデータ部分にパケット(R)のデータ部分を追加する命令である。また、左右情報が付加された記号「Iap1」ないし「Iap4」(「Iap1L」ないし「Iap4L」、および「Iap1R」ないし「Iap4R」)と、16進表記60Hないし67Hとが設定されている命令追加命令は、いずれも、後述するパケット(L)の処理命令部分にパケット(R)のデータ部分を追加する命令である。
次に、1入力・1出力命令について説明する。なお、1入力・1出力命令は、1つのデータのみをオペランドとするため、いずれも左右情報を有しない。
記号「NOP」と16進表記00Hとが設定されているNOP命令は、何もしない命令である。また、記号「read」と16進表記02Hとが設定されている読み出し命令は、データ(A)が示す記憶装置6のアドレスに記憶されているデータ(*A)を読み出す命令である。なお、命令ではないが、パケットの終端を示すヌル文字として、例えば16進表記FFHが設定されている。
次に、ループ関連命令について説明する。なお、ここでは概略についてのみ説明し、詳細については具体例を挙げて後述する。
左右情報が付加された記号「pack」(「packL」および「packR」)と、16進表記70Hおよび71Hとが設定されているパック(梱包)命令は、パケット(L)のデータ部分とパケット(R)のデータ部分とを1つのパケットのデータ部分に同梱する命令である。したがって、パック命令は、2入力・1出力命令となる。
左右情報が付加された記号「dup」(「dupL」および「dupR」)と、16進表記72Hおよび73Hとが設定されているデュプリケート(複製)命令は、パケット(L)のデータ部分を複製して、2つのパケットのデータ部分に分配する命令である。その際、複製および分配によって新たに生成されたパケットの処理命令部分には、パケット(R)のデータ部分が追加される。したがって、デュプリケート命令は、2入力・2出力命令となる。
左右情報が付加された記号「step」(「stepL」および「stepR」)と、16進表記74Hおよび75Hとが設定されているステップ(段階)命令は、パケット(R)とパケット(L)のデータ部分とに応じたテンプレート情報(以下、Sテンプレートと称する)を生成し、後述するテンプレートバッファに登録する命令である。その際、パケット(R)およびパケット(L)自体は消滅する。したがって、ステップ命令は、2入力・0出力(ただし、Sテンプレートを生成)命令となる。
左右情報が付加された記号「rep1」ないし「rep4」(「rep1L」ないし「rep4L」、および「rep1R」ないし「rep4R」)と、16進表記80Hないし87Hとが設定されているリピート(繰り返し)命令は、いずれも、パケット(R)とパケット(L)のデータ部分とに応じたテンプレート情報(以下、Rテンプレートと称する)を生成し、テンプレートバッファに登録する命令である。その際、パケット(R)自体は消滅する。したがって、リピート命令は、2入力・1出力(さらに、Rテンプレートを生成)命令となる。
MCE300は、図5に示した命令セットを用いて、データフロー図を生成する。図6は、実行コードPR1から生成されたデータフロー図を示しており、図4に示したソースプログラムPR0に対応している。また、図6において、D1ないしD8はデータを示しており、I1ないしI13は命令を示している。なお、図6において、2重線は、複数のパケットからなるパケット群の生成、および生成されたパケット群に対する処理を表している。
データD1は、ループの全繰り返し数を示し、ソースプログラムにおける「ii=0;ii<1024」から、1024となる。また、データD2は、後述するループIDピッチ(ループIDの増分)を示し、1重ループや最内ループの場合には、1となる。そして、データD1およびD2の組み合わせによって、ループIDが1ずつ増加する1024個のパケット群を生成すべきことが示されている。
データD3およびD4は、それぞれ配列dp[1024]およびsp[1024]を示すポインタであり、データD5はループ内の除算における除数2を示している。また、データD6は、デュプリケート命令の実行によって新たに生成されるパケットの処理命令部分に追加される命令を示している。
データD7は、ループ内で使用するループ変数(カウンタ変数)iiの初期値を示し、ソースプログラムにおける「ii=0」から、0となる。また、データD8は、後述するステップピッチ(ループ変数iiに相当するデータの増分)を示し、ソースプログラムにおける「ii++」から、1となる。そして、データD1およびD2の組み合わせとデータD7およびD8の組み合わせとによって、ループIDが1ずつ増加し、初期値0から1ずつ増加するループ変数iiをデータとする1024個のパケット群を生成すべきことが示されている。
図6において、長破線より上側にある命令I1ないしI8は、いずれもループ関連命令であり、これらの命令が実行されることによって、ループ処理が展開され、ループ変数ii=0からii=1023までの繰り返し処理に相当するパケット群が生成される。なお、当該ループ処理の展開についての詳細な説明は、後述する各ループ関連命令についての具体的な説明において行うこととする。また、長破線より下側にある命令I9ないしI13は、ループ処理の展開によって生成されたパケット群に対する命令であるため、これらについての詳細な説明も後述する。
図7は、図6に示したデータフロー図に基づいて生成される、各命令が実行される前の初期パケット列を示している。
各パケットは、データ部分(data section)と拡張識別情報部分(extended identification information section)とからなる。また、拡張識別情報部分は、識別情報部分(identification information section)と処理命令(命令情報)部分(processing instructions section)とからなる。なお、各パケットは、暗号化や圧縮などの目的で適宜符号化されていてもよい。
識別情報部分は、例えば汎用IDおよびループIDを含む。これらのうち、汎用IDは、例えば、当該パケットを生成したMCEを示す発行元情報などに用いられる。一方、ループIDは、ループ処理におけるループの繰り返しごとに設定される識別番号であり、例えば、ループ変数ii=0からii=1023までの繰り返し処理に対応して、0から1023まで設定される。
本実施形態では、一例として、処理命令部分は、8個までの命令1ないし8のほか、命令数情報を含む。また、各命令は、実行順序とは逆順に配列されており、最初に実行されるべき命令が最後尾に配置され、以降はヌル文字となっている。さらに、命令数情報は、未処理の命令数を示すが、その都度計数するようにしてもよい。
データ部分は、データ本体のほか、当該データのデータタイプ情報および延長フラグを含む。また、データタイプ情報は、例えば「整数型(integer)」、「浮動小数点型(floating)」、「ポインタ型(pointer)」などのデータタイプを示す。さらに、データタイプとして「命令型(command)」を備えており、当該命令型のデータは、命令追加命令やデュプリケート命令の実行によって、パケットの処理命令部分に命令として追加される。本実施形態では、データ本体を例えば64ビットの固定長とすることによって、命令型のデータとして、それぞれ8ビットの命令を8個まで格納することができる。なお、延長フラグは、命令追加命令とは異なる命令の追加機能(特許文献1における命令追加処理)に用いられる。
図7から明らかなように、パケットP1ないしP8で構成される初期パケット列は、図6に示したデータフロー図を8個のデータD1ないしD8ごとに再構成したものであり、各パケットは、当該データに識別情報および処理命令を付加して生成され、MCE300から隣接するPE100ないし107の何れかに発行される。
MCE300から発行されたパケットは、PE100ないし163のうち、後述する宛先情報が示すPEまで、通信路500を介して伝達される。また、各PEは、パケットに含まれる処理命令を実行する実行ノードに相当する。なお、各PEの動作についての詳細な説明は後述する。
なお、本発明のデータ処理装置は、本実施形態に示したように、機械語やアセンブリ言語で記述された実行コードPR1からパケット列を生成するMCEを備える構成に限定されるものではない。
例えば、記憶装置6には、ソースプログラムPR0から実行コードPR1にコンパイルする際の中間の段階で生成される中間コードとして、構文木(syntax tree)で表現されたプログラムが記憶されていてもよい。構文木では、オペランドが葉ノード(leaf node)に配置され、オペレータが内部ノード(internal node)に配置された木構造となっているため、機械語やアセンブリ言語の場合に比べて、データフロー図の生成が容易となる。
また、例えば、記憶装置6には、コンパイラを備える外部装置によって予め生成された初期パケット列(initial packet sequences)が記憶されていてもよい。この場合には、MCE300は、各パケットをそのまま隣接するPEに発行することができる。
また、例えば、記憶装置6には、初期パケット列のうち、識別情報部分の一部または全部を省略した、またはヌル文字とした中間パケット列(interim packet sequences)が記憶されていてもよい。この場合には、MCE300は、省略された識別情報部分を付加したうえで、各パケットを隣接するPEに発行する。
さらに、例えば、ループ処理の展開によって生成されたパケット群が外部装置からデータ処理装置に直接入力されてもよい。この場合の外部装置には、並列に動作している他のデータ処理装置も含まれ得る。
ここで、ソースプログラムとデータ処理装置1で処理されるプログラム(実行コード)との関係の他の例を図8に示す。この場合、コンパイラは、高級言語で記述されたソースプログラムPR0から、データフロー図に基づいて初期パケット列または中間パケット列を生成する。また、記憶装置6には、これらのパケット列が適宜符号化されたうえで、実行コードPR2として記憶される。そして、MCE300には、実行コードPR2が読み込まれる。
===PE(処理要素)の構成===
以下、図1を参照して、本実施形態におけるPEの構成について説明する。
図1に示されているPE100ないし163は、入出力部210、比較・選択部230、バッファメモリ240、命令デコーダ250、ALU(Arithmetic Logic Unit:算術論理演算部)260、パケット生成部270、およびテンプレートバッファ280をそれぞれ含んで構成されている。なお、本実施形態では、命令デコーダ250およびALU260が演算部に相当する。
入出力部210は、宛先情報算出部211、出力ポート214aないし214d、および入力ポート215aないし215dを含む。また、入出力部210には、各入力ポートを介して、パケットや、記憶装置6から読み出されたデータなどが入力されている。さらに、入出力部210からは、各出力ポートを介して、パケットや、記憶装置6に書き込まれるデータなどが出力されている。そして、各入出力ポート(入力ポートおよび出力ポート)は、前述した通信路500(不図示)を介して、隣接するPEやMCEと接続されている。
例えば、図3のPE110の場合、4組の入出力ポートは、それぞれPE109、102、111、および118と接続されている。また、例えばPE100の場合、2組の入出力ポートは、それぞれPE101および108と接続され、1組の入出力ポートは、MCE300と接続され、そして、1組の入出力ポートは、使用されない。また、各入出力ポートが複数のチャネルを備え、当該複数のチャネルを使用して、隣接するPE間やPEおよびMCE間でパケットやデータなどを入出力する構成としてもよい。
比較・選択部230には、入出力部210からパケットが入力されている。また、比較・選択部230は、ハッシュ値算出部231を含み、パケット記憶部に相当するバッファメモリ240との間でパケットを入出力している。さらに、比較・選択部230からは、命令デコーダ250を介して、それぞれ左側および右側オペランドとなるデータを有するパケットがALU260に入力されている。そして、ALU260によって新たに生成されたパケットは、再び入出力部210に入力されている。なお、新たに生成されたパケットの宛先情報が当該PEを示している場合には、当該パケットは、入出力部210から再び比較・選択部230に入力されることとなる。
本実施形態では、命令デコーダ250からは、さらにテンプレート情報がパケット生成部270に入力されている。また、パケット生成部270は、テンプレート記憶部に相当するテンプレートバッファ280との間でテンプレート情報を入出力している。そして、パケット生成部270によって新たに生成されたパケットは、再び入出力部210に入力されている。
===PE(処理要素)の動作===
次に、図9ないし図11を適宜参照して、本実施形態におけるPEの動作について説明する。
入出力部210は、まず、宛先情報算出部211が入力されたパケットの宛先情報を算出する。宛先情報は、パケットを処理すべきPEを示す情報であり、当該パケットの拡張識別情報部分から求めることができる。ここで、図9および図10を参照して、本実施形態における宛先情報の算出方法について説明する。
宛先情報算出部211は、まず、各パケットから拡張識別情報部分のみを抽出し、各拡張識別情報のうち、最初に実行されるべき命令の左右情報をマスクする。前述したように、本実施形態では、最初に実行されるべき命令がパケットの最後尾(ヌル文字の直前)に配置され、各命令のLSBが左右情報専用に割り当てられている。したがって、拡張識別情報の最後(ヌル文字の直前)の1ビットを0または1でマスクすればよい。
宛先情報算出部211は、次に、上記のマスクされた拡張識別情報を識別情報部分と処理命令部分とに分割し、それぞれの部分に基づいて擬似(疑似)乱数を生成し、当該擬似乱数に応じて、宛先情報を算出する。本実施形態では、図9に示すように、識別情報部分から0ないし3(2進表記で00ないし11)の2ビットの擬似乱数Ridを生成し、処理命令部分から0ないし15(2進表記で0000ないし1111)の4ビットの擬似乱数Rcmを生成する。そして、擬似乱数Ridの上位1ビットXiと擬似乱数Rcmの上位2ビットXcとからなる3ビットの値をX座標(X=4Xi+Xc)とし、擬似乱数Ridの下位1ビットYiと擬似乱数Rcmの下位2ビットYcとからなる3ビットの値をY座標(Y=4Yi+Yc)として算出する。
このようにして、識別情報および(マスクされた)処理命令からそれぞれ擬似乱数RidおよびRcmを生成し、これらの擬似乱数に応じて、図3に示した各PEの座標と同じ形式の座標(X,Y)を宛先情報として算出することができる。また、前述したように、X座標を上位3ビット、Y座標を下位3ビットとする各PEの識別番号を宛先情報としてもよい。ここで、擬似乱数は、物理乱数と異なり、再現性があるため、マスクされた拡張識別情報が同一のパケットからは同一の擬似乱数RidおよびRcmが生成され、同一の宛先情報が算出される。
図10は、このように算出された宛先情報と各PEとの対応関係を示している。ここで、擬似乱数Ridの2ビットXiおよびYiは、それぞれX座標およびY座標の上位1ビット(最上位ビット)となっている。そのため、宛先情報(X,Y)が示すPE(宛先のPE)は、当該XiおよびYiに応じて、図10において長破線で囲まれた4つの区画(block)の何れかに含まれることとなる。
このことは、64個(8行8列)のPE100ないし163全体を擬似乱数Ridの2ビットの値に対応する4つの区画に分割したことに相当する。そして、算出された宛先情報は、識別情報から生成される擬似乱数Rid(第1の宛先情報)に応じて何れかの区画を示し、処理命令から生成される擬似乱数Rcm(第2の宛先情報)に応じて区画内のPEの位置を示すこととなる。
図10に示されているように、各区画は16個(4行4列)のPEを含むPE群(処理部群)であり、Rid=0(Xi=Yi=0)に対応する区画には、0≦X≦3かつ0≦Y≦3の範囲のPEが含まれている。また、Rid=1(Xi=0、Yi=1)に対応する区画には、0≦X≦3かつ4≦Y≦7の範囲のPEが含まれている。また、Rid=2(Xi=1、Yi=0)に対応する区画には、4≦X≦7かつ0≦Y≦3の範囲のPEが含まれている。また、Rid=3(Xi=Yi=1)に対応する区画には、4≦X≦7かつ4≦Y≦7の範囲のPEが含まれている。そして、識別情報が同一のパケットからは同一の擬似乱数Ridが生成されるため、それらのパケットの宛先のPEは、同一の区画に含まれることとなる。
なお、擬似乱数の生成には、公知の方法を用いることができる。宛先情報の算出時間の観点からは、LCG(Linear Congruential Generator:線形合同法)やLFSR(Linear Feedback Shift Register:線形帰還シフトレジスタ)など、高速な生成方法を用いることが望ましい。また、宛先情報算出部211は、予め生成された擬似乱数テーブルを参照して宛先情報を算出する構成としてもよい。この場合、宛先情報算出部211は、パケットごとに擬似乱数を生成する必要がないため、宛先情報の算出時間を短縮することができる。
一方、PEの使用効率の観点からは、パケット分布が一様となるよう、擬似乱数が一様分布に近いほど望ましい。また、確率変数族が予測不可能であることは、一様分布であることと等価であるので、CSPRNG(Cryptographically Secure Pseudo-Random Number Generator:暗号論的擬似乱数生成器)を用いることによって、PEの使用効率の向上を図ることができる。しかしながら、命令によっても各パケットの処理時間は異なるため、実際には、擬似乱数が一様分布であっても、パケット分布が一様とはならないこともある。そのため、宛先情報の算出時間が長くなり過ぎない程度で、一様分布に近い擬似乱数を用いることが望ましい。
さらに、パケットが入力される度に各PEが宛先情報を算出する代わりに、算出した宛先情報をパケットに付加し、当該宛先情報を再利用してもよい。例えば、MCEがパケットをPEに発行する場合、およびPEが新たなパケットを生成する場合に宛先情報を付加することによって、それ以外の場合には付加されている宛先情報をそのまま利用することができる。この場合、宛先情報が付加されているパケットに対して宛先情報を算出する必要はない。
入出力部210は、次に、パケットの宛先情報が当該PEを示しているか否かを判定し、当該PEを示している場合には、当該パケットを取得して比較・選択部230に入力する。一方、パケットの宛先情報が当該PEを示していない場合には、宛先情報が示すPEに近づく方向に隣接するPEに当該パケットを転送する。そして、当該動作を各PEの入出力部が行うことによって、各パケットは宛先情報が示すPEまで伝達され、取得される。
例えば、各パケットは、まず、宛先情報が示すPEとY座標が一致するまで、図10のy軸方向に移動し、次に、X座標が一致するまで、図10のx軸方向に移動する。このような移動規則を採用することによって、パケットの移動経路は常に最短となる。また、移動中の方向転換は1回または0回となり、各PE間における通信路500の使用頻度を平均化することができる。
一例として、図3において、MCE300からPE103に発行されたパケットの宛先情報がPE127を示す場合には、当該パケットは、PE111およびPE119を経由して、PE127まで伝達される。また、一例として、PE127によって処理され、新たに生成されたパケットの宛先情報がPE108を示す場合には、当該パケットは、PE126、PE125、PE124、およびPE116を経由して、PE108まで伝達される。
比較・選択部230は、入出力部210によって取得されたパケット(以下、取得パケットと称する)のうち、命令の実行が可能なものを処理対象(命令の実行対象)として選択して、命令デコーダ250に入力する。また、比較・選択部230は、命令の実行が可能でないパケットをバッファメモリ240に記憶させるとともに、バッファメモリ240に記憶されているパケット(以下、記憶パケットと称する)の読み出しを行う。
より具体的には、取得パケットの最初に実行されるべき(最後尾の)命令が1入力・1出力命令である場合、比較・選択部230は、取得パケットのみを命令デコーダ250に入力する。一方、取得パケットの最初に実行されるべき(最後尾の)命令がループ関連命令または2入力・1出力命令である場合、比較・選択部230は、上記のマスクされた拡張識別情報が取得パケットと一致するパケットを、記憶パケットから検索する。そして、一致する記憶パケットが存在するときには、比較・選択部230は、当該一致する2つのパケットを処理対象として選択して、命令デコーダ250に入力する。また、一致する記憶パケットが存在しないときには、比較・選択部230は、取得パケットをバッファメモリ240に記憶させる。
なお、マスクされた拡張識別情報が取得パケットと一致する記憶パケットの検索を効率よく行うため、本実施形態では、バッファメモリ240は、ハッシュテーブルを含む。また、比較・選択部230は、まず、ハッシュ値算出部231が、取得パケットからハッシュ値を算出する。当該ハッシュ値は、宛先情報の場合と同様に、取得パケットのマスクされた拡張識別情報に基づいて算出される。そして、比較・選択部230は、取得パケットをバッファメモリ240に記憶させる場合には、取得パケットをそのハッシュ値と対応付けてハッシュテーブルに格納する。
なお、ハッシュテーブルには、公知の実装方法を用いることができる。図11は、バッファメモリ240に実装されるハッシュテーブルの一例を示している。当該ハッシュテーブルでは、ハッシュ衝突の解決方法として、オープンアドレス法(open addressing)を用い、再ハッシュ手順として、線形探索法(linear probing)を用いている。
図11においては、一例として、ハッシュ値がn+3となるパケット1が格納された後に、ハッシュ値がnとなるパケット2ないし5が格納された場合を示している。パケット1は、ルート配列[256]の要素n+3の位置に格納され、フラグ「1」およびカウント値「1」が設定されている。また、パケット2ないし5は、それぞれ要素n、n+1、n+2、n+4の位置に格納され、要素nの位置にフラグ「1」およびカウント値「4」が設定されている。
命令デコーダ250は、比較・選択部230から入力される1つまたは2つのパケットの最初に実行されるべき命令を読解(解釈)したうえで、当該パケットをALU260に入力する。また、その際、最初に実行されるべき命令がリピート命令またはステップ命令である場合には、テンプレート情報(RテンプレートまたはSテンプレート)を生成し、パケット生成部270に入力する。
ALU260は、命令デコーダ250から入力される1つまたは2つのパケットのデータ部分(オペランド)に対して、算術演算(整数演算および/または浮動小数点演算)や論理演算などを行い、演算結果を出力する。より具体的には、ALU260は、入力されたパケットのデータに対して、最初に実行されるべき命令を実行し、実行結果のデータに、実行された命令を除いた拡張識別情報を付加して新たなパケットを生成し、再び入出力部210に入力する。
パケット生成部270は、まず、命令デコーダ250から入力されるテンプレート情報をテンプレートバッファ280に登録する。また、パケット生成部270は、テンプレートバッファ280に登録されているテンプレート情報に基づいて、テンプレート情報ごとにループ繰り返し数分のパケット群を生成し、入出力部210に入力する。なお、当該パケット群の生成は、パケット生成部270以外の各部の動作とは独立して、自動的に(クロックごとに)行われる。
このようにして、各PEは、宛先情報が当該PEを示すパケットのみを取得し、宛先情報が当該PEを示さないパケットを他のPEに転送する。そして、取得パケットのデータに対して最初に実行されるべき命令を実行するとともに、実行結果のデータに実行された命令を除いた拡張識別情報を付加して新たなパケットを生成し、生成されたパケットをその宛先情報に応じて転送または取得する。
なお、本実施形態では、最初に実行されるべき命令がリピート命令である場合には、宛先情報算出部211およびハッシュ値算出部231は、それぞれ、それ以外の場合とは異なる方法で宛先情報およびハッシュ値を算出する。すなわち、最初に実行されるべき命令がリピート命令である場合には、宛先情報およびハッシュ値の算出に用いられる拡張識別情報の部分が、上記のマスクされた拡張識別情報とは異なる。この場合における宛先情報およびハッシュ値の算出方法についての詳細な説明は、後述するリピート命令についての具体的な説明において行うこととする。
===データ処理装置の動作の具体例===
ここで、図12ないし図20を適宜参照しつつ、図6に示したデータフロー図および図7に示した初期パケット列を用いて、データ処理装置1の動作の具体例について説明する。
パケットP1およびP2は、最初に実行されるべき(最後尾の)命令がいずれもパック命令I1であり、これらの拡張識別情報は、パック命令I1の左右情報を除いて一致しているため、同一の宛先情報が算出される。したがって、パケットP1およびP2は、算出された宛先情報が示す同一のPEまで伝達され、取得される。そして、当該PEのALU260においてパック命令I1が実行され、その結果、図12に示すように、データD1(1024)とデータD2(1)とをデータ部分に同梱し、パック命令I1を除いた新たなパケットP9が生成される。同様に、パケットP7およびP8に対して、パック命令I2が実行され、その結果、データD7(0)とデータD8(1)とをデータ部分に同梱し、パック命令I2を除いた新たなパケットP10が生成される。
なお、本実施形態では、パック命令は、整数型のデータに対して実行され、整数型のデータを例えば32ビットの固定長とすることによって、2つの整数型のデータを1つのパケットのデータ部分に同梱することができる。また、データ部分が2つの整数型のデータからなることを示すため、パック命令の実行によって生成されたパケットP9およびP10のデータタイプは、「梱包型(packed)」となっている。
パケットP9およびP3は、最初に実行されるべき命令がいずれもリピート命令I3であり、次に実行されるべき命令が格納される処理命令部分(パケットP9の命令5およびパケットP3の命令3)には、命令ではなく同一の整数「4」が格納されている。当該整数は、リピート命令の実行の際にダウンカウンタとして用いられ、リピート命令は、ダウンカウンタを備えた実質的に16ビットの命令として取り扱われる。
また、これらのパケットに対しては、図13に示すように、最初に実行される実質16ビットのリピート命令(I3+「4」)のみを処理命令部分に含む拡張識別情報P9’およびP3’を用いて、宛先情報およびハッシュ値の算出が行われる。拡張識別情報P9’およびP3’は、リピート命令I3の左右情報を除いて一致しているため、同一の宛先情報が算出される。したがって、パケットP9およびP3は、算出された宛先情報が示す同一のPEまで伝達され、取得される。そして、当該PEのALU260においてリピート命令I3(rep1)が実行され、その結果、パケットP9においてリピート命令I3(rep1L)のダウンカウンタが「3」にダウンカウントされた新たなパケットP11が生成される。
一方、命令デコーダ250は、パケットP3においてリピート命令I3(rep1R)およびダウンカウンタを除いたテンプレートパケットTP1を含むテンプレート情報(Rテンプレート)を生成し、パケット生成部270を介してテンプレートバッファ280に登録する。ここで、テンプレートパケットTP1は、実際に生成されるパケットではなく、Rテンプレートの一部となり、パケット生成部270によって生成されるパケット群に反映される。
ここで、テンプレートバッファ280の構成例を図15に示す。図15に示すように、テンプレートバッファ280は、複数のテンプレート情報を登録することができる。また、テンプレート数は、テンプレートバッファ280に登録されているテンプレート情報の数を示し、次テンプレート番号は、パケット生成部270が参照すべき(次に実行すべき)テンプレート情報を示す。
図15において、テンプレート情報TI1は、リピート命令I3に従って登録されたテンプレート情報であり、テンプレートパケットTP1とともに、パケット生成部270がパケット群を生成する際の生成条件を含んでいる。ここで、RSフラグは、テンプレート情報がRテンプレートであるかSテンプレートであるかを示している。テンプレート情報TI1は、リピート命令I3に従って登録されたRテンプレートであるため、RSフラグは、「R」となっている。
また、全生成数(ループの全繰り返し数に相当)は、当該テンプレート情報に基づいてパケット生成部270が生成すべき全パケット数(パケット群に含まれるパケットの個数)を示し、生成済数は、全生成数のうち、パケット生成部270によって既に生成されたパケット数を示している。さらに、ループIDピッチは、パケット生成部270がパケット群を生成する際のループIDの増分を示し、ステップピッチは、パケット生成部270がパケット群を生成する際のデータの増分(ループ変数iiの増分に相当)を示している。そして、図15に示すように、RテンプレートTI1の全生成数およびループIDピッチには、それぞれパケットP9のデータ部分に同梱されたデータD1(1024)およびデータD2(1)が格納され、ステップピッチは、「0」となる。
同様に、図14に示すように、パケットP11およびP4に対して、リピート命令I4(rep1)が実行され、その結果、パケットP11においてリピート命令I4(rep1L)のダウンカウンタが「2」にダウンカウントされた新たなパケットP12が生成される。一方、パケットP4においてリピート命令I4(rep1R)およびダウンカウンタを除いたテンプレートパケットTP2を含むRテンプレートTI2がテンプレートバッファ280に登録される。
また、同様に、パケットP12およびP5に対して、リピート命令I5(rep1)が実行され、その結果、パケットP12においてリピート命令I5(rep1L)のダウンカウンタが「1」にダウンカウントされた新たなパケットP13が生成される。一方、パケットP5においてリピート命令I5(rep1R)およびダウンカウンタを除いたテンプレートパケットTP3を含むRテンプレートTI3がテンプレートバッファ280に登録される。
さらに、同様に、パケットP13およびP6に対して、リピート命令I6(rep1)が実行され、その結果、パケットP13において、リピート命令I6(rep1L)および「0」にダウンカウントされたダウンカウンタを除いた新たなパケットP14が生成される。一方、パケットP6においてリピート命令I6(rep1R)およびダウンカウンタを除いたテンプレートパケットTP4を含むRテンプレートTI4がテンプレートバッファ280に登録される。
図16に示すように、パケット生成部270は、テンプレートバッファ280に登録されたRテンプレートTI1に基づいて、ループ変数ii=0からii=1023までの繰り返し処理に相当する1024個のパケット群GP1−iiを生成する。ここで、最初に生成されるパケットGP1−0は、テンプレートパケットTP1と同一であり、さらに、RテンプレートTI1のループIDピッチが「1」であるため、パケットGP1−0ないしGP1−1023のループIDは、順次1ずつ増加している。また、同様に、パケット生成部270は、RテンプレートTI2、TI3、およびTI4に基づいて、それぞれパケット群GP2−ii、GP3−ii、およびGP4−iiを生成する。
なお、前述したように、パケット群の生成はクロックごとに行われ、パケット生成部270は、テンプレートバッファ280を参照して、クロックごとに1つずつパケットを生成する。また、1つのPEにおけるテンプレートバッファ280に複数のテンプレート情報が登録されている場合には、パケット生成部270は、パケットを1つ生成する度にテンプレートバッファ280の次テンプレート番号を順次更新する。
例えば、RテンプレートTI1ないしTI3がそれぞれ1番目ないし3番目のテンプレート情報として登録され、次テンプレート番号が1の場合には、まず、RテンプレートTI1に基づいて、パケット群GP1−iiに含まれる1つのパケットが生成される。また、次テンプレート番号は、更新されて2となる。次に、RテンプレートTI2に基づいて、パケット群GP2−iiに含まれる1つのパケットが生成され、次テンプレート番号は、更新されて3となる。次に、RテンプレートTI3に基づいて、パケット群GP3−iiに含まれる1つのパケットが生成され、次テンプレート番号は、更新されて再び1となる。
以上の動作を繰り返すことによって、テンプレートバッファ280に登録されているすべてのテンプレート情報から均等にパケット群を生成することができる。したがって、同一のループIDを有するパケットができるだけ近いタイミングで生成されることとなり、未処理のパケットが増大するのを抑制することができる。
リピート命令I6の実行によって生成されたパケットP14、およびパック命令I2の実行によって生成されたパケットP10は、最初に実行されるべき命令がいずれもステップ命令I7であり、これらの拡張識別情報は、ステップ命令I7の左右情報を除いて一致しているため、同一の宛先情報が算出される。したがって、パケットP14およびP10は、算出された宛先情報が示す同一のPEまで伝達され、取得される。
そして、命令デコーダ250は、図17に示すように、パケットP10において、データ部分に同梱されている1番目のデータD7(0)のみを残し、ステップ命令I7(stepR)を除いたテンプレートパケットTP5を含むテンプレート情報(Sテンプレート)を生成し、パケット生成部270を介してテンプレートバッファ280に登録する。ここで、テンプレートパケットTP5は、実際に生成されるパケットではなく、Sテンプレートの一部となり、パケット生成部270によって生成されるパケット群に反映される。なお、テンプレートパケットTP5のデータタイプは、「梱包型」から「整数型」に戻っている。
図15において、テンプレート情報TI5は、ステップ命令I7に従って登録されたテンプレート情報であり、テンプレートパケットTP5を含んでいる。ここで、テンプレート情報TI5は、ステップ命令I7に従って登録されたSテンプレートであるため、RSフラグは、「S」となっている。また、図15に示すように、SテンプレートTI5の全生成数およびループIDピッチには、それぞれパケットP14のデータ部分に同梱されていたデータD1(1024)およびデータD2(1)が格納される。一方、ステップピッチには、パケットP10のデータ部分に同梱されていた2番目のデータD8(1)が格納される。
図18に示すように、パケット生成部270は、テンプレートバッファ280に登録されたSテンプレートTI5に基づいて、ループ変数ii=0からii=1023までの繰り返し処理に相当する1024個のパケット群GP5−iiを生成する。ここで、最初に生成されるパケットGP5−0は、テンプレートパケットTP5と同一であり、さらに、SテンプレートTI5のループIDピッチが「1」であるため、パケットGP5−0ないしGP5−1023のループIDは、順次1ずつ増加している。また、SテンプレートTI5のステップピッチが「1」であるため、パケットGP5−0ないしGP5−1023の整数型のデータは、データD7が示す初期値「0」から順次1ずつ増加している。したがって、パケット群GP5−iiの各データは、ループ変数iiに相当する。
図19に示すように、パケット群GP5−iiおよびGP4−iiに含まれるパケットのうち、それぞれ任意のループID=iiを有するパケットP15およびP16は、最初に実行されるべき命令がいずれもデュプリケート命令I8であり、これらの拡張識別情報は、デュプリケート命令I8の左右情報を除いて一致しているため、同一の宛先情報が算出される。したがって、パケットP15およびP16は、算出された宛先情報が示す同一のPEまで伝達され、取得される。
そして、当該PEのALU260においてデュプリケート命令I8が実行され、その結果、パケットP15においてデュプリケート命令I8(dupL)を除いた新たなパケットP17が生成される。さらに、パケットP15のデータ部分を複製して、パケットP16の命令型のデータD6をパケットの処理命令部分に命令として追加した新たなパケットP18も生成される。
このようにして、ループ関連命令I1ないしI8が実行されることによって、ループ処理が展開され、図20に示すように、ループ変数ii=0からii=1023までの繰り返し処理に相当するパケット群が生成される。図20において、パケットP19ないしP21は、それぞれパケット群GP1−iiないしGP3−iiに含まれるパケットのうち、任意のループID=iiを有するパケットである。そして、図20に示されているパケットP17ないしP21は、ソースプログラムにおける、任意のループ変数iiについてのforループ内の処理に対応している。
図6において、加算命令I9は、パケットP19のデータ(dp)とパケットP17のデータ(ii)とを加算してデータdp+iiを出力し、加算命令I10は、パケットP20のデータ(sp)とパケットP18のデータ(ii)とを加算してデータsp+iiを出力する。また、読み出し命令I11は、記憶装置6からデータ*(sp+ii)を読み出す。さらに、除算命令I12は、データ*(sp+ii)をパケットP21のデータ(2)で除算してデータ*(sp+ii)/2を出力する。そして、書き込み命令I5は、記憶装置6のデータ*(dp+ii)にデータ*(sp+ii)/2を書き込む。
以上のデータフローによって、配列sp[1024]の1つの要素を2で除算した値が配列dp[1024]に格納される。
以上のように、本実施形態のデータ処理装置は、追加されたループ関連命令を実行することによって、各PEにおいてループ処理を展開し、ループ繰り返し数分のパケット群を生成する点で、特許文献1のデータ処理装置と大きく異なっている。
ここで、図20に示した5個のパケットP17ないしP21を1セットとすると、当該5パケットのセットは、ループ変数ii=0からii=1023までの繰り返し処理に対応して1024セット生成されている。そして、各セットに含まれる5パケットは、ループID(=ii)が同一であるため、識別情報が同一となり、それらの宛先のPEは、いずれも同一の区画に含まれることとなる。さらに、命令I9ないしI12の実行によって生成されるパケットのループIDは変更されないため、当該5パケットから生成されるパケットの宛先のPEも、同一の区画に含まれることとなる。
したがって、ループ処理の展開(ループ関連命令I1ないしI8の実行)によって生成された5×1024パケットには、ループIDが同一の5パケットのセットごとに同一の区画が割り当てられ、各セットに含まれる5パケットは、この区画内で移動しつつ、命令I9ないしI13が実行される。すなわち、ループ処理を展開した後には、パケットの移動がループIDごとに4行4列の区画内に制限される。そのため、本実施形態のデータ処理装置は、特許文献1のデータ処理装置において16個(4行4列)のPEを備えた場合に比べて、4倍の64個(8行8列)のPEを備えるものの、各パケットの平均移動距離は増加せず、パケットのPE間の移動に伴うオーバーヘッドが大きくならない。
一方、各5パケットのセットは、互いにループIDが異なるため、それらに含まれるパケットには、ループIDごとに4つの区画の何れかが割り当てられることとなる。そのため、それぞれの区画(に含まれるPE)を有効に使用することができ、PEの使用効率の向上も図られている。
なお、各パケットに対する区画の割り当ては、識別情報から生成される擬似乱数Ridに応じて行われるため、ループIDだけでなく汎用IDによっても割り当てられる区画が異なる。したがって、例えばMCEにおいて異なる汎用IDを設定することによって、処理命令部分にループ関連命令を含まないパケットに対しても、異なる区画の割り当てを行うことができる。
また、このような区画の割り当ては、PEでループ処理を展開する場合だけでなく、MCEでループ処理を展開する場合であっても同様の効果を奏する。図21は、特許文献1のデータ処理装置において、MCEでループ処理を展開して生成された「展開後のパケット列」を示している。図21に示されているように、「展開後のパケット列」は、5パケットごとに識別情報が同一の5×1024パケットからなるため、図20に示した5パケットのセットの1024セット分と同様に、擬似乱数Ridに応じた区画の割り当てを行うことができる。
さらに、このように区画の割り当てを行うことによって、省電力効果も得られる。論理回路の1つのゲートのスイッチングに伴う消費電力(動的消費電力)Pは、
P=a×(CV2f/2)
と表される。ここで、aは活性化率、Cは負荷容量、Vは電源電圧、fは動作周波数である。
例えば、ループ処理を行わないパケットの識別情報を固定した場合、それらのパケットからは同一の擬似乱数Ridが生成され、同一の区画が割り当てられることとなる。したがって、ループ処理を行わない並列性の低いパケットは、1つの区画(使用区画)内で処理されるため、それ以外の区画(不使用区画)では、活性化率aが0となり、電力を消費しなくなる。なお、実際には、入出力部210におけるパケットの転送などにより、不使用区画内であってもスイッチングするゲートがあるため、活性化率aが完全には0とならない。一方、ループ処理を行う並列性の高いパケットには、ループIDに応じて区画が割り当てられるため、すべての区画を動作させて、ループ処理を高速に並列処理することができる。
前述したように、データ処理装置1において、MCE300は、データごとに、識別情報および処理命令を含む拡張識別情報が付加されたパケットを生成し、8行8列の行列状に配置された64個のPE100ないし163は、16個(4行4列)のPEをそれぞれ含む4つの区画に分割され、各PEは、宛先情報が当該PEを示すパケットのみを取得し、取得パケットの命令を実行するとともに、識別情報に応じて何れかの区画を示す第1の宛先情報を算出し、(マスクされた)処理命令に応じて区画内のPEの位置を示す第2の宛先情報を算出することによって、ループ処理の展開によって生成されたパケットの移動が4行4列の区画内に制限されるため、全体のPE数を増加させても各パケットの平均移動距離が増加せず、パケットのPE間の移動に伴うオーバーヘッドを小さくし、全体としての処理能力を向上させ、PE数の増加に見合う処理能力の向上を図ることができる。
また、各パケットに対して、識別情報から生成される擬似乱数Rid(第1の宛先情報)に応じて区画の割り当てを行い、(マスクされた)処理命令から生成される擬似乱数Rcm(第2の宛先情報)に応じて区画内のPEの割り当てを行うことによって、パケットのPE間の移動に伴うオーバーヘッドを小さくしつつ、パケット分布を一様分布に近づけ、それぞれの区画(に含まれるPE)を有効に使用することができ、PEの使用効率の向上を図ることができる。
また、各PEは、取得パケットの命令を実行してパケットを生成するとともに、テンプレートバッファ280に登録されたテンプレート情報に基づいて、パケット生成部270が独立してパケット群を生成することによって、各PEにおいてループ処理を展開することができるため、ループ処理におけるボトルネックを解消し、ループ処理を高速に並列処理することができる。特に、ループ繰り返し数が確定し、同期なしに並列処理を行うことができるDoall型ループ処理において、PE数の増加に見合う処理能力の向上を図ることができる。そして、生成されたパケット群に含まれる各パケットは、識別情報に含まれるループIDに応じて4つの区画の何れかが割り当てられ、移動が4行4列の区画内に制限されるため、パケットのPE間の移動に伴うオーバーヘッドを小さくして、全体としての処理能力を向上させ、PE数の増加に見合う処理能力の向上を図ることができる。
また、リピート命令を実行し、テンプレートパケットとパケット群を生成する際の生成条件とを含むテンプレート情報(Rテンプレート)を生成してテンプレートバッファ280に登録することによって、テンプレートパケットのループIDを変化させたパケット群を生成することができる。
また、パケット群の生成条件として、全生成数とループIDピッチとをテンプレートバッファ280に登録することによって、テンプレートパケットのループIDをループIDピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、リピート命令の次に実行されるべき命令が格納される処理命令部分に、命令ではなく整数データを格納することによって、リピート命令を、ダウンカウンタを備えた実質的に16ビットの命令として取り扱うことができ、ダウンカウントの回数分リピート命令を再利用することができる。そのため、パケットに含まれる命令数を削減することができ、パケット数の削減も図ることができる。そして、最初に実行されるべき命令がリピート命令である場合には、識別情報に応じて第1の宛先情報を算出するとともに、ダウンカウンタを含めた実質16ビットのリピート命令のみを含む処理命令部分、すなわち、「整数データ+リピート命令(左右情報を除く)」に応じて第2の宛先情報を算出することによって、ダウンカウンタのカウント値が同一のリピート命令が最初に実行される2つのパケットを同一のPEまで伝達することができる。
また、ステップ命令を実行し、テンプレートパケットとパケット群を生成する際の生成条件とを含むテンプレート情報(Sテンプレート)を生成してテンプレートバッファ280に登録することによって、テンプレートパケットのループIDおよびループ変数(整数型のデータ)を変化させたパケット群を生成することができる。
また、パケット群の生成条件として、全生成数とループIDピッチとステップピッチとをテンプレートバッファ280に登録することによって、テンプレートパケットのループIDをループIDピッチずつ順次増加させ、ループ変数を初期値からステップピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、MCE300は、ループ関連命令を含むパケットを各PEに発行することによって、各PEにおいてループ処理を展開し、MCEの処理能力やMCE・PE間の通信能力によるボトルネックを解消することができる。
また、データ処理システムにおいて、データ処理装置1のMCE300が、パケットを逐次生成する、または予め生成されたパケット列を読み込むことによって、インタプリタ型またはコンパイラ型の並列コンピュータシステムを構成することができる。
また、前述したように、図7に示したパケットのデータ構造において、各パケットは、識別情報に応じて算出される第1の宛先情報が示す区画内において、(マスクされた)処理命令に応じて算出される第2の宛先情報が示す位置のPEによって取得されて、命令が実行される。さらに、リピート命令が実行されてRテンプレートが登録されることによって、命令の実行とは独立して、テンプレートパケットのループIDをループIDピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。そのため、ループ処理におけるボトルネックを解消し、ループ処理を高速に並列処理することができる。そして、生成されたパケット群に含まれる各パケットは、識別情報に含まれるループIDに応じて区画が割り当てられるため、パケットのPE間の移動に伴うオーバーヘッドを小さくして、全体としての処理能力を向上させ、PE数の増加に見合う処理能力の向上を図ることができる。
また、前述したように、ステップ命令が実行されてSテンプレートが登録されることによって、命令の実行とは独立して、テンプレートパケットのループIDをループIDピッチずつ順次増加させ、ループ変数を初期値からステップピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、ソースプログラムPR0から予め生成された初期パケット列を実行コードPR2として記録媒体に記録することによって、当該実行コードPR2をコンパイラ型の処理系において利用することができる。
また、初期パケット列のうち、識別情報部分の少なくとも一部を省略した、またはヌル文字とした中間パケット列を記録媒体に記録することによって、当該中間パケット列に省略された識別情報部分を付加したうえで、コンパイラ型の処理系において利用することができる。
また、ソースプログラムPR0から予め生成された初期パケット列を実行コードPR2として記憶装置6に記憶させることによって、各MCEは、当該実行コードPR2を読み込んで利用することができる。
また、初期パケット列のうち、識別情報部分の少なくとも一部を省略した、またはヌル文字とした中間パケット列を記憶装置6に記憶させることによって、各MCEは、当該中間パケット列を読み込んで、省略された識別情報部分を付加したうえで利用することができる。
また、データ処理システムにおいて、データ処理装置1が記憶装置6に記憶された初期パケット列または中間パケット列を読み込むことによって、コンパイラ型の並列コンピュータシステムを構成することができる。
また、前述したように、8行8列の行列状に配置され、16個(4行4列)のPEをそれぞれ含む4つの区画に分割された64個のPE100ないし163は、それぞれ、識別情報に応じて何れかの区画を示す第1の宛先情報を算出し、(マスクされた)処理命令に応じて区画内のPEの位置を示す第2の宛先情報を算出するとともに、第1および第2の宛先情報が当該PEを示すパケットのみを取得し、取得パケットの命令を実行することによって、パケットのPE間の移動に伴うオーバーヘッドを小さくして、全体としての処理能力を向上させ、PE数の増加に見合う処理能力の向上を図ることができる。
なお、上記実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得るとともに、本発明にはその等価物も含まれる。
上記実施形態では、原則として、宛先情報算出部211における(第1および第2の)宛先情報の算出、ハッシュ値算出部231におけるハッシュ値の算出、および比較・選択部230におけるパケットの比較(処理対象の2つのパケットの選択)には、いずれもマスクされた拡張識別情報のビット列(以下、原則使用ビット列と称する)が用いられている。ここで、マスクされた拡張識別情報は、拡張識別情報全体から、最初に実行されるべき命令の左右情報のみを除いたものである。また、例外として、最初に実行されるべき命令が実質16ビットのリピート命令である場合には、当該最初に実行される実質16ビットのリピート命令(ただし、左右情報を除く)のみを処理命令部分に含む拡張識別情報のビット列(以下、例外使用ビット列と称する)を用いて、宛先情報およびハッシュ値の算出やパケットの比較が行われている。しかしながら、これに限定されるものではない。
宛先情報算出部211における宛先情報の算出では、パケットの分散性が良い(パケット分布が一様に近い)ほど、PEの使用効率が向上するものの、パケットの分散性は、算出に用いるビット列よりも、算出に用いる擬似乱数に大きく依存している。そのため、上記の原則使用ビット列や例外使用ビット列のすべてを宛先情報の算出に用いる必要はなく、それらのビット列が同一のパケットから同一の宛先情報が算出されるよう、少なくともそれらのビット列の一部に基づいて宛先情報を算出すればよい。
また、ハッシュ値算出部231におけるハッシュ値の算出でも、ハッシュテーブルの使用効率や記憶パケットの検索効率は、算出に用いるビット列よりも、算出に用いるハッシュ関数に大きく依存している。そのため、宛先情報算出部211における宛先情報の算出と同様に、上記の原則使用ビット列や例外使用ビット列が同一のパケットから同一のハッシュ値が算出されるよう、少なくともそれらのビット列の一部に基づいて宛先情報を算出すればよい。
したがって、例えば、識別情報のビット列のみを宛先情報やハッシュ値の算出に用いると、最初に実行されるべき命令の左右情報をマスクしたり、拡張識別情報のビット列のうち算出に用いる部分を最初に実行されるべき命令によって変更したりする必要がない。一方、比較・選択部230におけるパケットの比較には、上記の原則使用ビット列や例外使用ビット列を用いる必要がある。
上記実施形態では、宛先情報算出部211は、上記の原則使用ビット列や例外使用ビット列のうち、識別情報部分から擬似乱数Ridを生成し、処理命令部分から擬似乱数Rcmを生成しているが、これに限定されるものではない。
擬似乱数Ridは、PE100ないし163全体を分割した何れかの区画を示す第1の宛先情報として用いられる。そして、当該第1の宛先情報は、上記の原則使用ビット列や例外使用ビット列のうち、少なくとも識別情報の一部を含む部分(第1の部分)に基づいて算出される必要がある。例えば、識別情報のうちループIDのビット列のみを第1の宛先情報の算出に用いると、ループIDが同一のパケットには同一の区画が割り当てられ、それらのパケットの移動を割り当てた区画内に制限することができる。また、ループIDから必要なビット数分(例えば下位2ビット)だけ抽出して、これを擬似乱数Ridとして用いてもよい。
擬似乱数Rcmは、第1の宛先情報に応じて割り当てられた区画内のPEの位置を示す第2の宛先情報として用いられる。そして、当該第2の宛先情報は、上記の原則使用ビット列や例外使用ビット列のうち、少なくとも第1の部分以外の部分を含む部分(第2の部分)に基づいて算出される必要がある。例えば、上記の原則使用ビット列や例外使用ビット列全体から疑似乱数を生成し、これを第2の宛先情報として用いてもよい。
なお、図7においては、識別情報部分は、汎用IDおよびループIDを含んでいるが、これに限定されるものではない。例えば、汎用IDが単にパケットを生成したMCEを示しているに過ぎない場合には、処理対象として選択すべき2つのパケットが異なるMCEで生成されており、異なる汎用IDを有している場合もあり得る。このような場合、上記の原則使用ビット列や例外使用ビット列の一部として、汎用IDを宛先情報およびハッシュ値の算出やパケットの比較に用いることはできないため、汎用IDをデータ部分に含めたり、図7に示した以外の追加情報部分に含めたりする必要がある。