本明細書および添付図面の記載により、少なくとも以下の事項が明らかとなる。
===データ処理システム全体の構成の概略===
以下、図2を参照して、後述する本発明の第1および第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に分類してもよい。
<第1実施形態>
===データ処理装置の構成===
以下、図3を参照して、本発明の第1の実施形態におけるデータ処理装置の構成について説明する。
図3に示されているデータ処理装置1は、PE100ないし115、MCE300ないし303、キャッシュメモリ400、および通信路(伝送路)500を含んで構成されている。
データ処理装置1は、処理部に相当するPEを複数備え、各PEが通信路500を介して互いに接続されている。本実施形態では、一例として、データ処理装置1は、4行4列の行列状に配置された16個のPE100ないし115を備えているものとする。また、PE100ないし115は、隣接するPE間のみが互いに接続されているものとする。なお、各PEの構成についての詳細な説明は後述する。
ここで、PE100ないし115の座標(X,Y)を、図3に示すように、それぞれ(0,0)ないし(3,3)と表すこととすると、各PEに対して、X座標を上位2ビット、Y座標を下位2ビットとする識別番号を設定することができる。また、このように設定された識別番号は、図3に示されている各PEの3桁の符号の下2桁と一致している。例えば、座標(0,3)に位置するPE103の識別番号は、3(2進表記で0011)となり、座標(3,0)に位置するPE112の識別番号は、12(2進表記で1100)となる。
データ処理装置1は、制御部に相当するMCEを少なくとも1つ備え、各MCEが通信路500を介してPE100ないし115の何れかと接続されている。本実施形態では、一例として、データ処理装置1は、4個のMCE300ないし303を備えているものとする。また、MCE300ないし303は、それぞれ隣接するPE100ないし103と接続されているものとする。なお、図3に示すように、MCE300ないし303に対して、それぞれ0ないし3の識別番号が設定されている。
キャッシュメモリ400は、MCE300ないし303と接続されている。また、キャッシュメモリ400は、前述したバス9(不図示)を介して、データ処理装置1外の記憶装置6と接続されている。
なお、データ処理装置1における各PEの配置および接続は、本実施形態に示した行列状の配置および接続に限定されるものではない。例えば、図3において、各PE間における通信路500の一部を省略することによって、リング型の接続となる。また、例えば、すべてのPE間やPEおよびMCE間を直接接続することもできる。この場合、電気配線による電気信号の伝達では、PEやMCEの個数が増加するほど、配線が困難となる。さらに、例えば図4に示すように、MCE300(およびキャッシュメモリ400)と各PEとの間を、ネットワーク600を介して接続してもよい。この場合、ネットワーク600に設けられたルータが後述する宛先情報算出部を備え、各PEに宛先情報算出部を設けない構成としてもよい。
===データ処理装置の動作===
次に、図5ないし図9を適宜参照して、本実施形態におけるデータ処理装置の動作について説明する。
キャッシュメモリ400は、キャッシュを行いつつ、MCE300ないし303と記憶装置6との間の入出力を制御する。したがって、記憶装置6に記憶されているプログラムやデータなどは、キャッシュメモリ400を介してMCE300ないし303に読み込まれる。
ここで、ソースプログラムとデータ処理装置1で処理されるプログラム(実行コード)との関係の一例を図5に示す。高級言語で記述されたソースプログラムPR0は、実行コードPR1に予めコンパイルされたうえで記憶装置6に記憶されており、MCE300ないし303には、実行コードPR1が読み込まれる。なお、図5においては、ソースプログラムPR0の一例として、C++言語で記述された、配列sp[1024]の各要素を2で除算した値を配列dp[1024]に格納する処理が示されている。また、実行コードPR1は、機械語プログラムではなく、機械語と略1対1に対応するアセンブリ言語で記述されたプログラムとしてもよい。
MCE300ないし303は、読み込まれた実行コードPR1から、データフロー図に基づいて、後述する初期パケット列を生成する。なお、各MCEは、データフロー図自体を生成する必要はないが、本実施形態においては、説明の便宜上、まずデータフロー図を生成し、次にデータフロー図に基づいて初期パケット列を生成するものとする。
ここで、データ処理装置1で用いられる命令セットの一例を図6に示す。図6において、各命令は、2入力・1出力命令、1入力・1出力命令、およびループ関連命令に大別されている。これらのうち、2入力・1出力命令は、入力された2つのデータをそれぞれ左側および右側オペランドとして2項演算を行う命令であり、1入力・1出力命令は、入力された1つのデータをオペランドとして単項演算を行う命令である。一方、ループ関連命令は、ループ処理を各PEにおいて展開するため、本実施形態のデータ処理装置に対して追加された命令である。
また、図6に示すように、各命令に対して、オペレータ(演算子)に相当する記号と機械語における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テンプレートを生成)命令となる。
各MCEは、図6に示した命令セットを用いて、データフロー図を生成する。図7は、実行コードPR1から生成されたデータフロー図を示しており、図5に示したソースプログラムPR0に対応している。また、図7において、D1ないしD8はデータを示しており、I1ないしI13は命令を示している。なお、図7において、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個のパケット群を生成すべきことが示されている。
図7において、長破線より上側にある命令I1ないしI8は、いずれもループ関連命令であり、これらの命令が実行されることによって、ループ処理が展開され、ループ変数ii=0からii=1023までの繰り返し処理に相当するパケット群が生成される。なお、当該ループ処理の展開についての詳細な説明は、後述する各ループ関連命令についての具体的な説明において行うこととする。また、長破線より下側にある命令I9ないしI13は、ループ処理の展開によって生成されたパケット群に対する命令であるため、これらについての詳細な説明も後述する。
図8は、図7に示したデータフロー図に基づいて生成される、各命令が実行される前の初期パケット列を示している。
各パケットは、データ部分(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における命令追加処理)に用いられる。
図8から明らかなように、パケットP1ないしP8で構成される初期パケット列は、図7に示したデータフロー図を8個のデータD1ないしD8ごとに再構成したものであり、各パケットは、当該データに識別情報および処理命令を付加して生成され、各MCEから隣接するPEに発行される。
各MCEから発行されたパケットは、PE100ないし115のうち、後述する宛先情報が示すPEまで、通信路500を介して伝達される。また、各PEは、パケットに含まれる処理命令を実行する実行ノードに相当する。なお、各PEの動作についての詳細な説明は後述する。
なお、本発明のデータ処理装置は、本実施形態に示したように、機械語やアセンブリ言語で記述された実行コードPR1からパケット列を生成するMCEを備える構成に限定されるものではない。
例えば、記憶装置6には、ソースプログラムPR0から実行コードPR1にコンパイルする際の中間の段階で生成される中間コードとして、構文木(syntax tree)で表現されたプログラムが記憶されていてもよい。構文木では、オペランドが葉ノード(leaf node)に配置され、オペレータが内部ノード(internal node)に配置された木構造となっているため、機械語やアセンブリ言語の場合に比べて、データフロー図の生成が容易となる。
また、例えば、記憶装置6には、コンパイラを備える外部装置によって予め生成された初期パケット列(initial packet sequences)が記憶されていてもよい。この場合には、各MCEは、各パケットをそのまま隣接するPEに発行することができる。
また、例えば、記憶装置6には、初期パケット列のうち、識別情報部分の一部または全部を省略した、またはヌル文字とした中間パケット列(interim packet sequences)が記憶されていてもよい。この場合には、各MCEは、省略された識別情報部分を付加したうえで、各パケットを隣接するPEに発行する。
さらに、例えば、ループ処理の展開によって生成されたパケット群が外部装置からデータ処理装置に直接入力されてもよい。この場合の外部装置には、並列に動作している他のデータ処理装置も含まれ得る。
ここで、ソースプログラムとデータ処理装置1で処理されるプログラム(実行コード)との関係の他の例を図9に示す。この場合、コンパイラは、高級言語で記述されたソースプログラムPR0から、データフロー図に基づいて初期パケット列または中間パケット列を生成する。また、記憶装置6には、これらのパケット列が適宜符号化されたうえで、実行コードPR2として記憶される。そして、MCE300ないし303には、実行コードPR2が読み込まれる。
===PE(処理要素)の構成===
以下、図1を参照して、本実施形態におけるPEの構成について説明する。
図1に示されているPE100ないし115は、入出力部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、106、111、および114と接続されている。また、例えばPE100の場合、2組の入出力ポートは、それぞれPE101および104と接続され、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(処理要素)の動作===
次に、図10を適宜参照して、本実施形態におけるPEの動作について説明する。
入出力部210は、まず、宛先情報算出部211が入力されたパケットの宛先情報を算出する。宛先情報は、パケットを処理すべきPEを示す情報であり、当該パケットの拡張識別情報部分から求めることができる。
宛先情報算出部211は、まず、各パケットから拡張識別情報部分のみを抽出し、各拡張識別情報のうち、最初に実行されるべき命令の左右情報をマスクする。前述したように、本実施形態では、最初に実行されるべき命令がパケットの最後尾(ヌル文字の直前)に配置され、各命令のLSBが左右情報専用に割り当てられている。したがって、拡張識別情報の最後(ヌル文字の直前)の1ビットを0または1でマスクすればよい。
宛先情報算出部211は、次に、上記のマスクされた拡張識別情報に基づいて擬似(疑似)乱数を生成し、当該擬似乱数に応じて、宛先情報を算出する。例えば、0ないし15(2進表記で0000ないし1111)の4ビットの値を宛先情報として算出すると、当該宛先情報は、図3の各PEの座標と同様に、上位2ビットをX座標、下位2ビットをY座標とする座標(X,Y)の形式で表すこともできる。ここで、擬似乱数は、物理乱数と異なり、再現性があるため、マスクされた拡張識別情報が同一のパケットからは同一の擬似乱数が生成され、同一の宛先情報が算出される。
なお、擬似乱数の生成には、公知の方法を用いることができる。宛先情報の算出時間の観点からは、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座標が一致するまで、図3の上下方向に移動し、次に、X座標が一致するまで、図3の左右方向に移動する。このような移動規則を採用することによって、パケットの移動経路は常に最短となる。また、移動中の方向転換は1回または0回となり、各PE間における通信路500の使用頻度を平均化することができる。一例として、図3において、MCE301からPE101に発行されたパケットの宛先情報がPE115を示す場合には、当該パケットは、PE102、PE103、PE107、およびPE111を経由して、PE115まで伝達される。
比較・選択部230は、入出力部210によって取得されたパケット(以下、取得パケットと称する)のうち、命令の実行が可能なものを処理対象(命令の実行対象)として選択して、命令デコーダ250に入力する。また、比較・選択部230は、命令の実行が可能でないパケットをバッファメモリ240に記憶させるとともに、バッファメモリ240に記憶されているパケット(以下、記憶パケットと称する)の読み出しを行う。
より具体的には、取得パケットの最初に実行されるべき(最後尾の)命令が1入力・1出力命令である場合、比較・選択部230は、取得パケットのみを命令デコーダ250に入力する。一方、取得パケットの最初に実行されるべき(最後尾の)命令がループ関連命令または2入力・1出力命令である場合、比較・選択部230は、上記のマスクされた拡張識別情報が取得パケットと一致するパケットを、記憶パケットから検索する。そして、一致する記憶パケットが存在するときには、比較・選択部230は、当該一致する2つのパケットを処理対象として選択して、命令デコーダ250に入力する。また、一致する記憶パケットが存在しないときには、比較・選択部230は、取得パケットをバッファメモリ240に記憶させる。
なお、マスクされた拡張識別情報が取得パケットと一致する記憶パケットの検索を効率よく行うため、本実施形態では、バッファメモリ240は、ハッシュテーブルを含む。また、比較・選択部230は、まず、ハッシュ値算出部231が、取得パケットからハッシュ値を算出する。当該ハッシュ値は、宛先情報の場合と同様に、取得パケットのマスクされた拡張識別情報に基づいて算出される。そして、比較・選択部230は、取得パケットをバッファメモリ240に記憶させる場合には、取得パケットをそのハッシュ値と対応付けてハッシュテーブルに格納する。
なお、ハッシュテーブルには、公知の実装方法を用いることができる。図10は、バッファメモリ240に実装されるハッシュテーブルの一例を示している。当該ハッシュテーブルでは、ハッシュ衝突の解決方法として、オープンアドレス法(open addressing)を用い、再ハッシュ手順として、線形探索法(linear probing)を用いている。
図10においては、一例として、ハッシュ値が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は、それぞれ、それ以外の場合とは異なる方法で宛先情報およびハッシュ値を算出する。すなわち、最初に実行されるべき命令がリピート命令である場合には、宛先情報およびハッシュ値の算出に用いられる拡張識別情報の部分が、上記のマスクされた拡張識別情報とは異なる。この場合における宛先情報およびハッシュ値の算出方法についての詳細な説明は、後述するリピート命令についての具体的な説明において行うこととする。
===データ処理装置の動作の具体例===
ここで、図11ないし図19を適宜参照しつつ、図7に示したデータフロー図および図8に示した初期パケット列を用いて、データ処理装置1の動作の具体例について説明する。
パケットP1およびP2は、最初に実行されるべき(最後尾の)命令がいずれもパック命令I1であり、これらの拡張識別情報は、パック命令I1の左右情報を除いて一致しているため、同一の宛先情報が算出される。したがって、パケットP1およびP2は、算出された宛先情報が示す同一のPEまで伝達され、取得される。そして、当該PEのALU260においてパック命令I1が実行され、その結果、図11に示すように、データ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ビットの命令として取り扱われる。
また、これらのパケットに対しては、図12に示すように、最初に実行される実質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の構成例を図14に示す。図14に示すように、テンプレートバッファ280は、複数のテンプレート情報を登録することができる。また、テンプレート数は、テンプレートバッファ280に登録されているテンプレート情報の数を示し、次テンプレート番号は、パケット生成部270が参照すべき(次に実行すべき)テンプレート情報を示す。
図14において、テンプレート情報TI1は、リピート命令I3に従って登録されたテンプレート情報であり、テンプレートパケットTP1とともに、パケット生成部270がパケット群を生成する際の生成条件を含んでいる。ここで、RSフラグは、テンプレート情報がRテンプレートであるかSテンプレートであるかを示している。テンプレート情報TI1は、リピート命令I3に従って登録されたRテンプレートであるため、RSフラグは、「R」となっている。
また、全生成数(ループの全繰り返し数に相当)は、当該テンプレート情報に基づいてパケット生成部270が生成すべき全パケット数(パケット群に含まれるパケットの個数)を示し、生成済数は、全生成数のうち、パケット生成部270によって既に生成されたパケット数を示している。さらに、ループIDピッチは、パケット生成部270がパケット群を生成する際のループIDの増分を示し、ステップピッチは、パケット生成部270がパケット群を生成する際のデータの増分(ループ変数iiの増分に相当)を示している。そして、図14に示すように、RテンプレートTI1の全生成数およびループIDピッチには、それぞれパケットP9のデータ部分に同梱されたデータD1(1024)およびデータD2(1)が格納され、ステップピッチは、「0」となる。
同様に、図13に示すように、パケット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に登録される。
図15に示すように、パケット生成部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は、図16に示すように、パケットP10において、データ部分に同梱されている1番目のデータD7(0)のみを残し、ステップ命令I7(stepR)を除いたテンプレートパケットTP5を含むテンプレート情報(Sテンプレート)を生成し、パケット生成部270を介してテンプレートバッファ280に登録する。ここで、テンプレートパケットTP5は、実際に生成されるパケットではなく、Sテンプレートの一部となり、パケット生成部270によって生成されるパケット群に反映される。なお、テンプレートパケットTP5のデータタイプは、「梱包型」から「整数型」に戻っている。
図14において、テンプレート情報TI5は、ステップ命令I7に従って登録されたテンプレート情報であり、テンプレートパケットTP5を含んでいる。ここで、テンプレート情報TI5は、ステップ命令I7に従って登録されたSテンプレートであるため、RSフラグは、「S」となっている。また、図14に示すように、SテンプレートTI5の全生成数およびループIDピッチには、それぞれパケットP14のデータ部分に同梱されていたデータD1(1024)およびデータD2(1)が格納される。一方、ステップピッチには、パケットP10のデータ部分に同梱されていた2番目のデータD8(1)が格納される。
図17に示すように、パケット生成部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に相当する。
図18に示すように、パケット群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が実行されることによって、ループ処理が展開され、図19に示すように、ループ変数ii=0からii=1023までの繰り返し処理に相当するパケット群が生成される。図19において、パケットP19ないしP21は、それぞれパケット群GP1−iiないしGP3−iiに含まれるパケットのうち、任意のループID=iiを有するパケットである。そして、図19に示されているパケットP17ないしP21は、ソースプログラムにおける、任意のループ変数iiについてのforループ内の処理に対応している。
図7において、加算命令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および特許文献2のデータ処理装置と大きく異なっている。
ここで、特許文献1のデータ処理装置において、4個のMCEでループ処理を展開してパケットを生成した場合と、本実施形態のデータ処理装置において、16個のPEでループ処理を展開してパケットを生成した場合との比較結果を図20に示す。図20は、クロックごとに4個のMCE(短破線)で1つずつパケットを生成した場合と、16個のPE(実線)で1つずつパケットを生成した場合とにおいて、生成された各パケットが擬似乱数に基づく宛先のPEに到達した個数をシミュレーションにより計測したものである。
図20に示すように、4個のMCEでパケットを生成した場合に比べて、16個のPEでパケットを生成した場合には、約4倍のパケットを生成しており、性能が向上している。したがって、ループ繰り返し数が多くなるほど、PE数の増加に見合う処理能力の向上を図ることができる。なお、100クロックの間に16個のPEで1600個のパケットを生成可能であるものの、図20の実線においては、100クロックの間に宛先のPEに到達したパケット数は、1500個弱となっている。これは、図20において宛先のPEに到達したパケット数は、PE間の通信路における制限と、PE間を転送中のパケットの存在とによって、生成可能なパケット数より少なくなるためである。
===データ処理装置の動作の他の具体例===
ここで、多重ループの処理を含むソースプログラムおよびデータフロー図の一例を図21に示し、当該データフロー図に基づいて生成される初期パケット列を図22に示す。なお、図21において、2重線は、外側(ソースプログラムの1行目)のループ処理(ループ関数ii)に対応するパケット群の生成などを表し、3重線は、内側(ソースプログラムの2行目)のループ処理(ループ関数jj)に対応するパケット群の生成などを表している。
データD33およびD34は、それぞれ内側のループの全繰り返し数(全生成数)およびループIDピッチを示し、ループIDが1ずつ増加する200個のパケット群を生成すべきことを示している。一方、データD31およびD32は、それぞれ外側のループの全繰り返し数およびループIDピッチを示し、ループIDが200ずつ増加する100個のパケット群を生成すべきことを示している。なお、当該外側のループのループIDピッチは、その1つ内側にあるループの全繰り返し数およびループIDピッチの積(200×1)に等しい。
そして、図21に示すように、パック命令I31およびI32の実行によって生成される2つのパケットに対して、リピート命令I35が実行され、データD33およびD34をそれぞれのデータ部分に同梱した100個のパケット群が生成される。さらに、当該100個のパケット群に対して、リピート命令I43ないしI48が実行され、それぞれ(100×200=)20000個のパケット群が生成されることとなる。
データD38およびD39は、それぞれ内側のループのループ変数jjの初期値およびステップピッチを示し、データD33およびD34と合わせて、ループIDが1ずつ増加し、初期値0から1ずつ増加するループ変数jjをデータとする200個のパケット群を生成すべきことを示している。一方、データD42およびD43は、それぞれ外側のループのループ変数iiの初期値およびステップピッチを示し、データD31およびD32と合わせて、ループIDが200ずつ増加し、初期値0から1ずつ増加するループ変数iiをデータとする100個のパケット群を生成すべきことを示している。
なお、図8に示したパケットの構成は、処理命令部分に8個までの命令しか含むことができないため、図21に示したデータフロー図および図22に示した初期パケット列には、パケットの処理命令部分に命令を追加する命令追加命令I51およびI53が含まれている。
ここで、図23は、命令追加命令I51が実行される直前のパケットP44およびP45と、命令追加命令I51の実行によって生成されるパケットP46とを示している。また、命令追加命令I53が実行される直前のパケットP47およびP48と、命令追加命令I53の実行によって生成されるパケットP49とを示している。なお、パケットP44、P45、P47、およびP48は、それぞれ2重のループ処理を展開して生成された20000個のパケット群に含まれるパケットのうち、任意のループID(LID1=ii×200+jj)を有するパケットである。
パケットP44およびP45に対して、命令追加命令I51が実行され、その結果、パケットP44において、命令追加命令I51(Iap1L)を除き、パケットP45の命令型のデータD40を処理命令部分に命令として追加した新たなパケットP46が生成される。同様に、パケットP47およびP48に対して、命令追加命令I53が実行され、その結果、パケットP47において、命令追加命令I53(Iap2L)を除き、パケットP45の命令型のデータD41を処理命令部分に命令として追加した新たなパケットP46が生成される。
ここで、多重ループの処理を含むソースプログラムおよびデータフロー図の他の例を図24に示し、当該データフロー図に基づいて生成される初期パケット列を図25に示す。なお、図24において、短破線は、何れかのループ処理(ループ関数ii、jj、kk、およびnn)に対応するパケット群の生成を表している。
データD65およびD66は、ソースプログラムの3行目の(最内)ループ処理(ループ関数kk)に対応し、ループIDが1ずつ増加する5個のパケット群を生成すべきことを示している。また、データD63およびD64は、ソースプログラムの2行目のループ処理(ループ関数jj)に対応し、ループIDが5ずつ増加する3個のパケット群を生成すべきことを示している。なお、当該2行目のループのループIDピッチは、その1つ内側にある3行目のループの全繰り返し数およびループIDピッチの積(5×1)に等しい。
また、データD69およびD70は、ソースプログラムの7行目の(最内)ループ処理(ループ関数nn)に対応し、ループIDが1ずつ増加する10個のパケット群を生成すべきことを示している。さらに、データD61およびD62は、ソースプログラムの1行目の(最外)ループ処理(ループ関数ii)に対応し、ループIDが25ずつ増加する100個のパケット群を生成すべきことを示している。なお、当該1行目のループのループIDピッチは、その1つ内側にある2行目および7行目のループの全繰り返し数およびループIDピッチの積の合計(3×5×1+10×1)に等しい。
そして、これらのループ処理の組み合わせによって、「func1」の関数コールを行う(100×3×5=)1500個のパケット群、および「func2」の関数コールを行う(100×10=)1000個のパケット群が生成されることとなる。
なお、図24に示したソースプログラムでは、ループ内にループ関数を用いる処理がないため、図24に示したデータフロー図および図25に示した初期パケット列には、ステップ命令が含まれていない。また、1行目のループの1つ内側にある2行目のループと7行目のループとの間でループIDが重複しないようにする必要がある。そこで、これらのデータフロー図および初期パケット列には、ループIDが重複しないようにループIDにオフセットを加算する、記号「lid+」で表されるループIDオフセット命令I75およびI76が含まれている。
ここで、図26は、ループIDオフセット命令I75が実行される直前のパケットP72およびP73と、ループIDオフセット命令I75の実行によって生成されるパケットP74およびP75とを示している。また、ループIDオフセット命令I76が実行される直前のパケットP74およびP76と、ループIDオフセット命令I76の実行によって生成されるパケットP77およびP78とを示している。なお、パケットP72、P73、およびP76は、それぞれ1行目のループ処理を展開して生成された100個のパケット群に含まれるパケットのうち、任意のループID(LID2=ii×25)を有するパケットである。
図26に示すように、ループIDオフセット命令は、リピート命令と同様に、ダウンカウンタを備えた実質的に16ビットの命令として取り扱われる。また、リピート命令の場合と同様に、最初に実行されるべき命令がループIDオフセット命令であるパケットに対しては、当該最初に実行される実質16ビットのループIDオフセット命令のみを処理命令部分に含む拡張識別情報を用いて、宛先情報およびハッシュ値の算出が行われる。
パケットP72およびP73に対して、ループIDオフセット命令I75(lid+)が実行され、その結果、パケットP72においてループIDオフセット命令I75(lid+L)のダウンカウンタが「1」にダウンカウントされた新たなパケットP74が生成される。さらに、パケットP73において、ループIDオフセット命令I75(lid+R)およびダウンカウンタを除き、パケットP72の整数型のデータD68(15)をループIDに加算した新たなパケットP75も生成される。したがって、パケットP75のループIDは、LID3=ii×25+15となる。
同様に、パケットP74およびP76に対して、ループIDオフセット命令I76(lid+)が実行され、その結果、パケットP74において、ループIDオフセット命令I75(lid+L)および「0」にダウンカウントされたダウンカウンタを除いた新たなパケットP77が生成される。なお、パケットP77は、処理命令を含まないため、発行元のMCEまで戻したり、消去したりする処理が行われる。さらに、パケットP76において、ループIDオフセット命令I76(lid+R)およびダウンカウンタを除き、パケットP74の整数型のデータD68(15)をループIDに加算した新たなパケットP78も生成される。したがって、パケットP78のループIDもLID3(=ii×25+15)となる。
ここで、図27は、「func1」の関数コールを行う直前のパケットP79、および「func2」の関数コールを行う直前のパケットP80を示している。なお、パケットP79は、1行目ないし3行目の3重のループ処理を展開して生成された1500個のパケット群に含まれるパケットのうち、任意のループID(LID4=ii×25+jj×5+kk)を有するパケットである。また、パケットP80は、1行目および7行目の2重のループ処理を展開して生成された1000個のパケット群に含まれるパケットのうち、任意のループID(LID5=ii×25+15+nn)を有するパケットである。したがって、それぞれのパケット群に割り当てられるループIDは、
LID4=0〜14,25〜39,50〜64,…、
LID5=15〜24,40〜49,65〜74,…
となり、ループIDの重複を回避することができる。
<第2実施形態>
===データ処理装置の構成===
以下、図28を参照して、本発明の第2の実施形態におけるデータ処理装置の構成について説明する。
図28に示されているデータ処理装置1は、PE100ないし115、MCE300ないし303、およびキャッシュメモリ400を含んで構成されている。また、第1実施形態と同様に、キャッシュメモリ400は、MCE300ないし303、およびデータ処理装置1外の記憶装置6と接続されている。
本実施形態では、図28に示すように、PE100ないし115には、それぞれ0ないし15の識別番号が設定され、MCE300ないし303には、それぞれ0ないし3の識別番号が設定されている。また、各PEおよび各MCEは、発光素子LEおよび受光素子LRを備えている。なお、各PEの構成についての詳細な説明は後述する。
===通信路の構成および動作の一例===
本実施形態では、パケットの移動に伴う配線遅延やオーバーヘッドなどの問題を回避するため、PE間やPEおよびMCE間の情報伝達は、電磁波を用いて行われる。ここで、電磁波、特に光を用いて情報伝達を行う場合における、PE間やPEおよびMCE間の通信路の構成の一例を図29に示す。なお、図29は、データ処理装置1をMCE303、およびPE103、107、111、115側(図28において下側)から見た透過図(透過側面図)である。
図29に示されている通信路は、光を透過する透過材501、光を反射する反射材502、および光を吸収する吸収材503からなり、各PE、各MCE、およびキャッシュメモリ400が形成される半導体基板504の上方に配置されている。なお、透過材501および反射材502は、それぞれ光ファイバにおけるコア(core)およびクラッド(cladding)に相当し、石英ガラスやプラスチックなどが用いられる。さらに、透過材501としてシリコンや窒化シリコンを用い、反射材502として酸化シリコンを用いることによって、これらを半導体基板504上に形成することが可能となる。
透過材501の領域には、各PEおよび各MCEが備える発光素子LEおよび受光素子LRが配置されている。また、透過材501は、反射材502より屈折率が高く、反射材502は、透過材501を上下から挟むように配置されている。さらに、吸収材503は、反射によって光信号の波形が崩れるのを防止するため、少なくとも各発光素子LEおよび各受光素子LRを囲むように配置されている。そして、このような構成によって、発光素子LEから出射された光信号は、反射材502によって全反射されながら透過材501中を伝達され、各受光素子LRに入射する。
ここで、各PEおよび各MCEには、互いに異なる波長域(周波数帯域)が設定されており、各受光素子LRは、OCF(On-chip Color Filter)やリング発振器などを用いた光学フィルタによって、設定された波長域の光のみを受光するように構成されている。本実施形態では、一例として、図28に示すように、PE100ないし115には、それぞれ波長域λ0ないしλ15が設定され、MCE300ないし303には、それぞれ波長域λ16ないしλ19が設定されているものとする。
そして、各発光素子LEは、情報伝達先のPEまたはMCEに設定された波長域の光信号を出射することによって、選択した1つのPEまたはMCEに情報を伝達することができる。なお、発光素子が出射する光の波長を可変とする方法として、例えば特許文献3では、3端子型結晶シリコン素子の制御電極に印加する電位によって波長を制御する方法が開示されている。また、互いに異なる波長域の光を出射する複数の発光素子を切り替えて用いることによっても、波長を可変とすることができる。
ここで、図30を参照して、図29に示した通信路において、光を用いて情報伝達を行う場合における、データ処理装置1の送受信動作の具体例について説明する。なお、本実施形態におけるデータ処理装置1の動作は、当該送受信動作を除いて、第1実施形態のデータ処理装置1の動作と同様である。以下、各PEおよび各MCEを、設定されている識別番号aと対応付けて、PE(a)およびMCE(a)のように称することとする。
本実施形態のデータ処理装置1において、後述するように、PE間やPEおよびMCE間の情報伝達は、パケットを送受信することによって行われる。また、本実施形態の光を用いた情報伝達においては、1つのPEまたはMCEに対して複数のPEまたはMCEから同時にパケットが送信される場合、これらは同じ波長域の光で送信される。そのため、データ処理装置1は、競合によって情報が失われたり、変更されたりしないように調停(仲裁)する、アービトレーション機能を備えている。
図30の最初のアービトレーションフェーズにおいて、PE(2)およびPE(4)から波長域λ0の光でRTS(Request to Send:送信要求)パケットが送信され、PE(0)は、PE(4)からのRTSパケットを先に受信している。この場合、PE(0)は、PE(4)に対して波長域λ4の光でCTS(Clear to Send:送信許可)パケットを送信することとなる。そして、PE(4)は、CTSパケットを受信した後、データ転送フェーズにおいて、PE(0)に対して波長域λ0の光で通常の(データ)パケットを送信する。
さらに、次のアービトレーションフェーズにおいては、PE(2)およびPE(3)から波長域λ0の光でRTSパケットが送信され、PE(0)は、PE(2)からのRTSパケットを先に受信している。この場合、PE(0)は、PE(2)に対して波長域λ2の光でCTSパケットを送信することとなる。そして、PE(2)は、CTSパケットを受信した後、データ転送フェーズにおいて、PE(0)に対して波長域λ0の光で通常の(データ)パケットを送信する。
このようにして、各発光素子LEが情報伝達先のPEまたはMCEに設定された波長域の光でパケットを送信し、各受光素子LRが設定された波長域の光のみを受光することによって、パケットを取得することができる。以下、RTS/CTSパケット以外の通常の(データ)パケットを、単にパケットと称することとする。
なお、各PEおよび各MCEに設定される波長域は、紫外領域から赤外領域までのいずれを用いてもよい。しかしながら、透過材501および反射材502に用いられる材料によっては、紫外線を吸収し、透過率が低下するため、可視光領域から赤外領域までの波長を用いることが望ましい。
また、データ処理装置1における各PEの配置は、タイルプロセッサと同様の行列状の配置に限定されるものではない。例えば図31に示すように、面積が大きいキャッシュメモリ400を中央に配置し、周囲にPEおよびMCEを配置してもよい。この場合、パケットは各MCEから発行されるため、発行元のMCEから発行先のPEまでの距離を平均化することができる。
===PE(処理要素)の構成===
以下、図32を参照して、本実施形態におけるPEの構成について説明する。なお、本実施形態におけるPE100ないし115の構成は、入出力部210の構成を除いて、第1実施形態のPE100ないし115の構成と同様である。
入出力部210は、宛先情報算出部211、送信部212、および受信部213を含む。また、送信部212および受信部213は、それぞれ発光素子LEおよび受光素子LRを備えており、これらを介して、データ転送フェーズにおけるパケットおよびアービトレーションフェーズにおけるRTS/CTSパケットを送受信している。さらに、送信部212および受信部213は、読み出し命令によって記憶装置6から読み出されたデータや、書き込み命令によって記憶装置6に書き込まれるデータなども、データ転送フェーズにおいてパケットとして送受信することとなる。
なお、パケットを送受信する際の光信号の変調方式としては、例えばOOK(On-Off Keying:オン・オフ変調)などを用いることができる。また、PEおよびMCE間でパケットの送受信を行うため、MCE300ないし303も、入出力部210と同様の入出力部を備えている。
また、データ処理装置1の各PEおよび各MCEは、本実施形態に示したように、1つの発光素子LEを備える構成に限定されるものではない。
例えば図33に示すように、各PEおよび各MCEに共通の発光素子LEを備えた構成としてもよい。図33において、発光素子LEから出射された広い波長域の光が光導波路WGを介して各PEおよび各MCEに導かれている。また、各PEおよび各MCEは、光学フィルタFLによって情報伝達先のPEまたはMCEに設定された波長域のみを透過させ、光スイッチSWによってOOKなどの変調を行う。そして、変調された光信号が光導波路WGを介して透過材501の領域に導かれる。なお、図33においては、他のPEまたはMCEからの光信号も、光導波路WGを介して受光素子LRに入射する構成となっている。
また、各PEおよび各MCEが複数の発光素子LEを備え、複数のチャネルを使用して、PE間やPEおよびMCE間でパケットを送受信する構成としてもよい。この場合、波長可変の発光素子を複数備えるほか、例えば図34に示すように、各送信部が、設定された波長域λ0ないしλ19の光を出射する波長固定の発光素子を備え、これらを切り替えて用いる構成とすることもできる。
ここで、図35を参照して、各PEおよび各MCEが複数のチャネルを使用して情報伝達を行う場合における、データ処理装置1の送受信動作の具体例について説明する。なお、図35においては、一例として、各PEおよび各MCEは、光スイッチなどの変調手段を少なくとも4つ備え、同時に4つのチャネルを使用している。また、アービトレーションフェーズは、RTSパケットを送受信するRTSフレームとCTSパケットを送受信するCTSフレームとからなり、CTSフレームは、さらに、各PEおよび各MCEに対応するタイムスロットに時分割されている。
図35のRTSフレームにおいて、PE(0)から波長域λ1ないしλ4の光でRTSパケットが送信され、これらのRTSパケットは、それぞれPE(1)ないしPE(4)によって受信されている。また、PE(1)ないしPE(4)のうちPE(2)およびPE(4)は、CTSフレームのそれぞれに対応するタイムスロットにおいて、PE(0)に対して波長域λ0の光でCTSパケットを送信している。この場合、PE(0)は、それぞれのCTSパケットを受信した後、データ転送フェーズにおいて、PE(2)およびPE(4)に対してそれぞれ波長域λ2およびλ4の光でパケットを送信することとなる。
受信部213によって取得されたパケットは、比較・選択部230に入力されている。また、第1実施形態と同様に、比較・選択部230からは、命令デコーダ250を介してパケットがALU260に入力されるとともに、命令デコーダ250からは、テンプレート情報がパケット生成部270に入力されている。そして、ALU260およびパケット生成部270によって新たに生成されたパケットは、宛先情報算出部211に入力されている。
宛先情報算出部211から送信部212には、新たに生成されたパケットとともに、宛先情報に対応する波長域情報WLが入力されている。また、受信部213がRTSパケットを受信した場合には、受信部213から送信部212に、当該RTSパケットの送信元のPEまたはMCEに設定された波長域情報WLが入力されることとなる。さらに、受信部213がCTSパケットを受信した場合には、受信部213から送信部212に、当該CTSパケットが入力されることとなる。そして、送信部212からは、波長域情報WLが示す波長域の光で新たに生成されたパケットやRTS/CTSパケットが送信されている。
なお、新たに生成されたパケットの宛先情報が当該PEを示している場合には、当該パケットは、宛先情報算出部211から比較・選択部230に入力されることとなる。
===PE(処理要素)の動作===
次に、本実施形態におけるPEの動作について説明する。なお、本実施形態における各PEの動作は、入出力部210の動作を除いて、第1実施形態の各PEの動作と同様である。
入出力部210の受信部213は、当該PEに設定された波長域λnの光のみを受光して、パケットを取得する。ここで、各パケットは、送信元のPEまたはMCEの宛先情報算出部211によって算出された宛先情報に対応する波長域の光で送信されており、当該波長域が設定されたPEまたはMCEのみが受信することができる。したがって、各PEおよび各MCEは、宛先情報が示す、各パケットを処理すべきPEのみにパケットを伝達することができる。
受信部213によって取得されたパケット(取得パケット)は、第1実施形態と同様に、比較・選択部230、命令デコーダ250、ALU260、およびパケット生成部270によって処理される。そして、ALU260およびパケット生成部270によって新たに生成されたパケットは、宛先情報算出部211に入力される。
宛先情報算出部211は、第1実施形態と同様の方法によって、新たに生成されたパケットの宛先情報を算出する。例えば、0ないし15の4ビットの値を宛先情報として算出すると、当該宛先情報は、図28の各PEに設定されている識別番号と対応付けることができる。また、宛先情報算出部211は、算出された宛先情報が当該PEを示している場合には、新たに生成されたパケットを再び比較・選択部230に入力し、比較・選択部230は、当該パケットを取得パケットとして処理することとなる。
一方、宛先情報算出部211は、算出された宛先情報が当該PEを示していない場合には、新たに生成されたパケットとともに、算出された宛先情報に対応する波長域情報WLを送信部212に入力する。送信部212は、新たに生成されたパケットが入力されると、まず、アービトレーションフェーズにおいて、波長域情報WLが示す波長域の光でRTSパケットを送信する。そして、送信部212は、当該RTSパケットに対するCTSパケットを受信部213が受信した後のデータ転送フェーズにおいて、当該波長域情報WLが示す波長域の光で新たに生成されたパケットを送信する。
なお、受信部213は、アービトレーションフェーズにおいて、他のPEまたはMCEからのRTSパケットを受信した場合、当該RTSパケットの送信元のPEまたはMCEに設定された波長域を示す波長域情報WLを送信部212に入力する。そして、送信部212は、当該アービトレーションフェーズにおいて、当該波長域情報WLが示す波長域の光でCTSパケットを送信する。
このようにして、各PEは、当該PEに設定された波長域λnの光のみを受光してパケットを取得し、取得パケットのデータに対して最初に実行されるべき(最後尾の)命令を実行する。そして、実行結果のデータに実行された命令を除いた拡張識別情報を付加して新たなパケットを生成し、生成されたパケットの宛先情報に対応する波長域の光で送信する。
なお、本実施形態では、生成されたパケットの宛先情報が当該PEを示している場合には、当該パケットは、送信部212から送信されず、取得パケットとして処理される。しかしながら、宛先情報が当該PEを示すパケットも送信部212から送信し、当該PEの受信部213によって取得されるようにしてもよい。
また、前述したように、各パケットは適宜符号化され得るが、符号化および復号は、例えば、それぞれ送信部212および受信部213において行うことができる。すなわち、受信部213によって取得されたパケットは、復号されたうえで比較・選択部230に入力される。一方、ALU260によって新たに生成されたパケットは、宛先情報算出部211において宛先情報の算出が行われた後、送信部212によって符号化されたうえで送信される。
前述したように、データ処理装置1において、各MCEは、データごとに、処理命令を含む拡張識別情報が付加されたパケットを生成し、各PEは、拡張識別情報に応じて定まる宛先情報が当該PEを示すパケットのみを取得し、取得パケットの命令を実行してパケットを生成するとともに、テンプレートバッファ280に登録されたテンプレート情報に基づいて、パケット生成部270が独立してパケット群を生成することによって、各PEにおいてループ処理を展開することができるため、ループ処理におけるボトルネックを解消し、ループ処理を高速に並列処理することができる。特に、ループ繰り返し数が確定し、同期なしに並列処理を行うことができるDoall型ループ処理において、PE数の増加に見合う処理能力の向上を図ることができる。
また、リピート命令を実行し、テンプレートパケットとパケット群を生成する際の生成条件とを含むテンプレート情報(Rテンプレート)を生成してテンプレートバッファ280に登録することによって、テンプレートパケットのループIDを変化させたパケット群を生成することができる。
また、パケット群の生成条件として、全生成数とループIDピッチとをテンプレートバッファ280に登録することによって、テンプレートパケットのループIDをループIDピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、リピート命令の次に実行されるべき命令が格納される処理命令部分に、命令ではなく整数データを格納することによって、リピート命令を、ダウンカウンタを備えた実質的に16ビットの命令として取り扱うことができ、ダウンカウントの回数分リピート命令を再利用することができる。そのため、パケットに含まれる命令数を削減することができ、パケット数の削減も図ることができる。
また、最初に実行されるべき命令がリピート命令である場合には、ダウンカウンタを含めた実質16ビットのリピート命令のみを処理命令部分に含む拡張識別情報、すなわち、「識別情報+整数データ+リピート命令(左右情報を除く)」を用いて宛先情報を算出することによって、ダウンカウンタのカウント値が同一のリピート命令が最初に実行される2つのパケットを同一のPEまで伝達することができる。
また、取得パケットおよび記憶パケットの「識別情報+整数データ+リピート命令(左右情報を除く)」を比較して、リピート命令の実行対象のパケットを選択することによって、ダウンカウンタのカウント値が同一のリピート命令を実行することができる。
また、ステップ命令を実行し、テンプレートパケットとパケット群を生成する際の生成条件とを含むテンプレート情報(Sテンプレート)を生成してテンプレートバッファ280に登録することによって、テンプレートパケットのループIDおよびループ変数(整数型のデータ)を変化させたパケット群を生成することができる。
また、パケット群の生成条件として、全生成数とループIDピッチとステップピッチとをテンプレートバッファ280に登録することによって、テンプレートパケットのループIDをループIDピッチずつ順次増加させ、ループ変数を初期値からステップピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、パック命令を実行し、パケット(L)のデータ部分とパケット(R)のデータ部分とを1つのパケットのデータ部分に同梱することによって、リピート命令またはステップ命令の実行により、当該同梱された2つのデータをそれぞれ全生成数およびループIDピッチとしてテンプレートバッファ280に登録することができる。
また、ステップ命令の実行により、パック命令の実行によって同梱された2つのデータをそれぞれループ変数の初期値およびステップピッチとしてテンプレートバッファ280に登録することができる。
また、ループIDオフセット命令を実行し、パケット(R)のループIDにパケット(L)のデータをオフセットとして加算することによって、多重ループの処理にけるループIDの重複を回避することができる。
また、ループIDオフセット命令の次に実行されるべき命令が格納される処理命令部分に、命令ではなく整数データを格納することによって、ループIDオフセット命令を、ダウンカウンタを備えた実質的に16ビットの命令として取り扱うことができ、ダウンカウントの回数分ループIDオフセット命令を再利用することができる。そのため、パケットに含まれる命令数を削減することができ、パケット数の削減も図ることができる。
また、最初に実行されるべき命令がループIDオフセット命令である場合には、ダウンカウンタを含めた実質16ビットのループIDオフセット命令のみを処理命令部分に含む拡張識別情報、すなわち、「識別情報+整数データ+ループIDオフセット命令(左右情報を除く)」を用いて宛先情報を算出することによって、ダウンカウンタのカウント値が同一のループIDオフセット命令が最初に実行される2つのパケットを同一のPEまで伝達することができる。
また、取得パケットおよび記憶パケットの「識別情報+整数データ+ループIDオフセット命令(左右情報を除く)」を比較して、ループIDオフセット命令の実行対象のパケットを選択することによって、ダウンカウンタのカウント値が同一のループIDオフセット命令を実行することができる。
また、各PEは、当該PEに設定された周波数帯域の電磁波のみを受信してパケットを取得し、宛先情報に対応する周波数帯域の電磁波でパケットを送信することによって、電気配線を用いないで各パケットが伝達されるため、オーバーヘッドを小さくし、全体としての処理速度を向上させることができる。
また、各PEが発光素子LEおよび受光素子LRを備え、各受光素子LRが当該PEに設定された波長域の光のみを受信してパケットを取得し、各受光素子LRが宛先のPEに設定された波長域の光でパケットを送信することによって、紫外領域から赤外領域までの光を用いて情報伝達を行うことができる。
また、各MCEは、ループ関連命令を含むパケットを各PEに発行することによって、各PEにおいてループ処理を展開し、MCEの処理能力やMCE・PE間の通信能力によるボトルネックを解消することができる。
また、データ処理システムにおいて、データ処理装置1の各MCEが、パケットを逐次生成する、または予め生成されたパケット列を読み込むことによって、インタプリタ型またはコンパイラ型の並列コンピュータシステムを構成することができる。
また、前述したように、図8に示したパケットのデータ構造において、各パケットは、拡張識別情報に応じて定まる宛先情報が示すPEによって取得されて、命令が実行される。そして、リピート命令が実行されてRテンプレートが登録されることによって、命令の実行とは独立して、テンプレートパケットのループIDをループIDピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。そのため、ループ処理におけるボトルネックを解消し、ループ処理を高速に並列処理することができる。
また、リピート命令の実行の際にダウンカウンタとして用いられる整数データを当該リピート命令に隣接して格納することによって、リピート命令を実質的に16ビットの命令として取り扱うことができ、ダウンカウントの回数分リピート命令を再利用して、パケットに含まれる命令数やパケット数の削減を図ることができる。
また、前述したように、ステップ命令が実行されてSテンプレートが登録されることによって、命令の実行とは独立して、テンプレートパケットのループIDをループIDピッチずつ順次増加させ、ループ変数を初期値からステップピッチずつ順次増加させた、全生成数が示す個数のパケットからなるパケット群を生成することができる。
また、パック命令の実行により、2つのパケットのデータが1つのパケットのデータ部分に同梱されることによって、リピート命令またはステップ命令の実行の際に、当該同梱された2つのデータをそれぞれ全生成数およびループIDピッチとして登録することができる。
また、ステップ命令の実行の際に、パック命令の実行によって同梱された2つのデータをそれぞれループ変数の初期値およびステップピッチとして登録することができる。
また、ループIDオフセット命令の実行により、パケット(R)のループIDにパケット(L)のデータがオフセットとして加算されることによって、多重ループの処理にけるループIDの重複を回避することができる。
また、ループIDオフセット命令の実行の際にダウンカウンタとして用いられる整数データを当該ループIDオフセット命令に隣接して格納することによって、ループIDオフセット命令を実質的に16ビットの命令として取り扱うことができ、ダウンカウントの回数分ループIDオフセット命令を再利用して、パケットに含まれる命令数やパケット数の削減を図ることができる。
また、ソースプログラムPR0から予め生成された初期パケット列を実行コードPR2として記録媒体に記録することによって、当該実行コードPR2をコンパイラ型の処理系において利用することができる。
また、初期パケット列のうち、識別情報部分の少なくとも一部を省略した、またはヌル文字とした中間パケット列を記録媒体に記録することによって、当該中間パケット列に省略された識別情報部分を付加したうえで、コンパイラ型の処理系において利用することができる。
また、ソースプログラムPR0から予め生成された初期パケット列を実行コードPR2として記憶装置6に記憶させることによって、各MCEは、当該実行コードPR2を読み込んで利用することができる。
また、初期パケット列のうち、識別情報部分の少なくとも一部を省略した、またはヌル文字とした中間パケット列を記憶装置6に記憶させることによって、各MCEは、当該中間パケット列を読み込んで、省略された識別情報部分を付加したうえで利用することができる。
また、データ処理システムにおいて、データ処理装置1が記憶装置6に記憶された初期パケット列または中間パケット列を読み込むことによって、コンパイラ型の並列コンピュータシステムを構成することができる。
また、前述したように、各PEは、拡張識別情報に応じて定まる宛先情報が当該PEを示すパケットのみを取得し、取得パケットの命令を実行するとともに、テンプレートバッファ280に登録されたテンプレート情報に基づいて、パケット生成部270が独立してパケット群を生成することによって、ループ処理におけるボトルネックを解消して、ループ処理を高速に並列処理し、特にDoall型ループ処理において、PE数の増加に見合う処理能力の向上を図ることができる。
なお、上記実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得るとともに、本発明にはその等価物も含まれる。
上記実施形態では、原則として、宛先情報算出部211における宛先情報の算出、ハッシュ値算出部231におけるハッシュ値の算出、および比較・選択部230におけるパケットの比較(処理対象の2つのパケットの選択)には、いずれもマスクされた拡張識別情報のビット列(以下、原則使用ビット列と称する)が用いられている。ここで、マスクされた拡張識別情報は、拡張識別情報全体から、最初に実行されるべき命令の左右情報のみを除いたものである。また、例外として、最初に実行されるべき命令が実質16ビットの命令(リピート命令またはループIDオフセット命令)である場合には、当該最初に実行される実質16ビットの命令(ただし、左右情報を除く)のみを処理命令部分に含む拡張識別情報のビット列(以下、例外使用ビット列と称する)を用いて、宛先情報およびハッシュ値の算出やパケットの比較が行われている。しかしながら、これに限定されるものではない。
宛先情報算出部211における宛先情報の算出では、パケットの分散性が良い(パケット分布が一様に近い)ほど、PEの使用効率が向上するものの、パケットの分散性は、算出に用いるビット列よりも、算出に用いる擬似乱数に大きく依存している。そのため、上記の原則使用ビット列や例外使用ビット列のすべてを宛先情報の算出に用いる必要はなく、それらのビット列が同一のパケットから同一の宛先情報が算出されるよう、少なくともそれらのビット列の一部に基づいて宛先情報を算出すればよい。
また、ハッシュ値算出部231におけるハッシュ値の算出でも、ハッシュテーブルの使用効率や記憶パケットの検索効率は、算出に用いるビット列よりも、算出に用いるハッシュ関数に大きく依存している。そのため、宛先情報算出部211における宛先情報の算出と同様に、上記の原則使用ビット列や例外使用ビット列が同一のパケットから同一のハッシュ値が算出されるよう、少なくともそれらのビット列の一部に基づいて宛先情報を算出すればよい。
したがって、例えば、識別情報のビット列のみを宛先情報やハッシュ値の算出に用いると、最初に実行されるべき命令の左右情報をマスクしたり、拡張識別情報のビット列のうち算出に用いる部分を最初に実行されるべき命令によって変更したりする必要がない。一方、比較・選択部230におけるパケットの比較には、上記の原則使用ビット列や例外使用ビット列を用いる必要がある。
なお、図8においては、識別情報部分は、汎用IDおよびループIDを含んでいるが、これに限定されるものではない。例えば、汎用IDが単にパケットを生成したMCEを示しているに過ぎない場合には、処理対象として選択すべき2つのパケットが異なるMCEで生成されており、異なる汎用IDを有している場合もあり得る。このような場合、上記の原則使用ビット列や例外使用ビット列の一部として、汎用IDを宛先情報およびハッシュ値の算出やパケットの比較に用いることはできないため、汎用IDをデータ部分に含めたり、図8に示した以外の追加情報部分に含めたりする必要がある。