以下に、図面を参照し、本願の開示する演算処理装置、情報処理装置、および情報処理装置の制御方法の実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
〔1〕本実施形態に関連する技術
まず、図14〜図23を参照しながら本実施形態に関連する技術について説明する。
近年、マルチプロセッサシステム(情報処理装置)では、通信の高スループットを実現すべく、図14に示すように、複数のCPUやルータの相互間が、高速シリアル伝送によるネットワーク(図16の符号30参照)を介して接続される。図14は、マルチプロセッサシステムの構成の一例を示すブロック図である。
また、近年、CPUとしては、複数のコア(core)を内蔵したマルチコアプロセッサが一般的に用いられる。ここで、図15を参照しながら、図14に示すマルチプロセッサシステムを構成する各CPU(マルチコアプロセッサ,演算処理装置)10の構成の一例について説明する。図15は、CPU10の構成の一例を示すブロック図である。
図15に示すように、CPU10においては、複数のコア11が共有キャッシュ(三次キャッシュ)12を介して接続されている。図15では、コア11として、N+1個のコア#0〜コア#N(Nは1以上の整数)が備えられている。図15では、一次キャッシュ(不図示)および二次キャッシュ(不図示)が各コア11に内蔵され、三次キャッシュが、共有キャッシュ12として用いられているが、一次キャッシュを各コア11に内蔵し、二次キャッシュを共有キャッシュ12として用いてもよい。
共有キャッシュ12には、コア11のほかにMAC(Memory Access Controller)13およびルータ(Router)14が接続されている。MAC13は、メインメモリとして機能するDIMM(Dual Inline Memory Module)20を接続され、DIMM20とのデータのやり取りを制御する制御部として機能する。ルータ14は、他のCPU10または他のルータ(例えばルーティング用のLSI(Large Scale Integrated circuit))に接続され、パケットによって、他のCPU10とのデータの通信を行なう通信部として機能する。
このようなCPU10において、コア11の一つがメモリデータの読出(フェッチ)を要求する場合(フェッチ要求を発行する場合)について考える。コア11は、当該コア11が必要とする8バイトのデータ(処理対象データ)を示すアドレスを指定して、まず、コア11に内蔵されたキャッシュ(一次キャッシュ,二次キャッシュ)にアクセスする。その結果、コア11は、キャッシュヒットすると、当該8バイトのデータを内蔵キャッシュから読み出す。
一方、コア11は、内蔵メモリでキャッシュミスすると、複数のコアによって共有している共有キャッシュ(図15では3次キャッシュ)12にアクセスする。しかし、共有キャッシュ12でもキャッシュミスすると、メインメモリ20に対するアクセスが行なわれる。共有キャッシュ12のキャッシュラインサイズは、例えば128バイトであるため、MAC13に対しては、コア11の要求する8バイトの処理対象データを含む128バイトのデータブロックの読出が要求される。
次に、コア11が、当該コア11の属するCPU10(例えば図14や図16のCPU#0)と異なる他のCPU10(例えば図14や図16のCPU#1)におけるメモリデータ(例えば8バイトの処理対象データ)の読出を要求する場合について、図16を参照しながら説明する。図16は、図14に示すマルチプロセッサシステムにおいて一CPU#0から他CPU#1へフェッチ要求を行なう場合のパケットルーティングを説明する図である。
この場合、図16に示すように、CPU#0におけるコア11は、フェッチ要求パケットを、ルータ14およびネットワーク30を介して他のCPU#1へ送信する。フェッチ要求パケットを受け取ったCPU#1は、要求されたメモリデータ(8バイトの処理対象データ)を含むデータブロックを、CPU#1のDIMM20から読み出し、フェッチ応答パケットとしてデータブロックを送り返す。このときのデータブロックのサイズは128バイトである。
ここで、図17(A)および図17(B)を参照しながら、フェッチ要求パケットおよびフェッチ応答パケットについて説明する。図17(A)はデータ無しパケット(フェッチ要求パケット)のフォーマットを示す図であり、図17(B)はデータ付きパケット(フェッチ応答パケット)のフォーマットを示す図である。
パケットには、図17(A)に示すようなデータ無しパケットと、図17(B)に示すようなデータ付きパケットとがある。CPU#0からCPU#1へ送信されるフェッチ要求パケットは、データ無しパケットであり、当該フェッチ要求パケットに対するフェッチ応答パケットは、データ付きパケットである。パケットの先頭サイクルは、パケットの内容や宛先を判別するための情報を載せたヘッダ(Header;HD)である。
さらに、図18(A)および図18(B)を参照しながら、フェッチ要求パケットおよびフェッチ応答パケットのヘッダについて説明する。図18(A)はフェッチ要求パケットのヘッダのフォーマットを示す図であり、図18(B)はフェッチ応答パケットのヘッダのフォーマットを示す図である。
図18(A)に示すように、フェッチ要求パケットのヘッダには、パケットの種別を表すOpcode(オペコード;OPC)や、コア11の要求するメモリデータのPhysical Address(物理アドレス;PAまたはpa)や、パケットを識別するための識別子であるRequest ID(RQID)などの情報が含まれる。図18(B)に示すように、フェッチ応答パケットのヘッダには、OPCやRQIDなどの情報が含まれる。なお、RSV(reserve)は、未使用のビットである。
コア11の要求する処理対象データを含む128バイトのデータブロックは、図17(B)に示すように、ヘッダの後に、8バイトのデータに分けられ、16サイクルかけて送信される。フェッチ応答パケットにおいて、各サイクルの8バイトデータは、先頭から順に物理アドレスpa[6:3] = 0000, 0001, … , 1111におけるデータData0, Data1, … , DataFに対応する。
CPU#1からフェッチ応答パケットを受け取ったCPU#0(ルータ14)は、フェッチ応答パケットに添付されたデータブロックを、CPU#0の共有キャッシュ12に登録するとともに、フェッチ要求を行なったコア11へ送る。
一方、CPU#0,#1間の伝送エラーは、パケットに付されたCRCをパケット受信側でチェックすることによって検出される。伝送エラーが検出されると、伝送エラーを検出したパケット以降のパケットは破棄され、DLLP(Data Link Layer Packet)を用いてNACK(Negative ACKnowledgement)を送ることで、送信側CPU#1に対しパケットの再送が要求される。
伝送エラーを検出したパケットを、中継点(ルータ;図14参照)や受信側CPU#0において破棄することができない場合、当該パケットは、当該パケットの末尾をEDBにして送出される。
受信側CPU#0におけるルータ14は、他のCPU#1から受信したフェッチ応答パケットを、一旦、当該ルータ14内のバッファ(図19の符号141参照)に格納する。当該バッファを受信バッファという。受信バッファはFIFOのバッファである。ここで、図19〜図23を参照しながら、受信バッファ141および当該受信バッファに対するパケット書込/読出処理について説明する。
図19は、図15に示すCPU10におけるルータ14に含まれる受信バッファ141および当該受信バッファ141に対するパケット書込/読出処理に係る構成を示すブロック図である。図19に示すように、受信バッファ141の書込側には、WDR(Write Data Register;書込データレジスタ),HDWP(Header Write Pointer;ヘッダ書込ポインタ)およびWP(Write Pointer;書込ポインタ)が備えられる。また、受信バッファ141の読出側には、RDR(Read Data Register;読出データレジスタ)およびRP(Read Pointer;読出ポインタ)が備えられる。
WDRは、受信バッファ141に書き込まれる書込対象データ(一単位データ;例えば8バイトデータ)を一時的に保存するレジスタである。WPは、書込対象パケットの書込を制御するもので、WDRに保存されている書込対象データの、受信バッファ141における書込先アドレスを指定するポインタである。WPは、初期状態では0を設定され、書込対象パケットの受信バッファ141への書込時に1サイクル毎に1ずつインクリメントされる。WDRに保存されている書込対象データは、WPによって指定されるアドレスに書き込まれる。HDWPは、書込対象パケットのヘッダのアドレスを指定するポインタであり、初期状態では0を設定される。
RDRは、受信バッファ141から読み出された読出データ(一単位データ;例えば8バイトデータ)を一時的に保存するレジスタである。RPは、受信バッファ141からのデータの読出を制御するもので、受信バッファ141から読み出すデータのアドレスを指定するポインタである。RPは、初期状態では0を設定され、受信バッファ141からのデータ読出時に1サイクル毎に1ずつインクリメントされる。RPによって指定されるアドレスのデータは、受信バッファ141から読み出され、RDRに一時的に保存され、前述したように共有キャッシュ12に登録されるとともにフェッチ要求を行なったコア11へ送信される。
図20に示すフローチャート(ステップS101〜S107)に従って、図19に示すパケット書込処理に係る構成(CPU#0におけるルータ14)の動作について説明する。ルータ14は、パケット書込時にヘッダ(HD)またはデータ(DT)の受信を待機しており(ステップS101のNOルート)、ヘッダ(HD)またはデータ(DT)を受信すると(ステップS101のYESルート)、EDBを受信したか否かを判断する(ステップS102)。
EDBを受信していない場合(ステップS102のNOルート)、ルータ14は、パケットの最終サイクルを示すENDを受信したか否かを判断する(ステップS103)。ENDを受信した場合(ステップS103のYESルート)、ルータ14は、HDWPに、次の書込対象パケットの先頭アドレス(ヘッダのアドレス)を指定する値として、WP+1を設定する(ステップS104)。この後、ルータ14は、WPによって指定される、受信バッファ141のエントリに、WDRにおけるデータ(又はヘッダ)を書き込んでから(ステップS105)、WPを1インクリメントし(ステップS106)、ステップS101の処理に戻る。
ステップS102でEDBを受信したと判断した場合(YESルート)、ルータ14は、WPにHDWPを設定し(ステップS107)、ステップS101の処理に戻る。これによって、現在の書込対象パケット(末尾にEDBを設定されたパケット)が、再度、先頭(ヘッダ)から順に受信バッファ141へ書き込まれる。
ついで、図21に示すフローチャート(ステップS111〜S113)に従って、図19に示すパケット読出処理に係る構成(CPU#0におけるルータ14)の動作について説明する。ルータ14は、RPの値とHDWPの値とが一致しているか否かを判断する(ステップS111)。RPの値とHDWPの値とが一致している場合(ステップS111のYESルート)、ルータ14は、書込対象パケットの書込中であると判断し、ステップS111の処理に戻る。
RPの値とHDWPの値とが一致しない場合(ステップS111のNOルート)、ルータ14は、書込対象パケットの書込を完了したと判断し、受信バッファ141からのパケット読出を開始する(図22のタイミングT18参照)。つまり、ルータ14は、RPによって指定される、受信バッファ141のエントリ(一単位データ)を、受信バッファ141からRDR経由で読み出す(ステップS112)。この後、ルータ14は、RPを1インクリメントし(ステップS113)、ステップS111の処理に戻る。
ここで、受信バッファ141に対するフェッチ応答パケットの書込/読出処理の最短ケースのタイムチャートを図22に示す。図22に示すように、初期状態(タイミングT0参照)において、WE(Write Enable)およびRE(Read Enable)はLow状態に設定され、WP,HDWP,RPは0に設定される。パケットの書込処理は、WEをHigh状態にすることで開始され、まずヘッダHDがWDR経由で受信バッファ141に書き込まれる(タイミングT1参照)。
以降、WPが1ずつインクリメントされる都度、16個のデータDT0〜DTFがWDR経由で受信バッファ141に順次書き込まれる(タイミングT2〜T17参照;図20のステップS103のNOルートからステップS105,S106参照)。
そして、タイミングT17で、データDTFとパケットの最終サイクルを示すENDとが受信されると、WEがLow状態に設定されるとともにREがHigh状態に設定される。これに伴い、タイミングT18で、HDWPの値として、次のパケットのヘッダのアドレスを示す値WP+1=17が設定される(図20のステップS103のYESルートからステップS104)。これにより、HDWPの値17とRPの値1とが不一致になり(図21のステップS111のNOルート)、パケットの読出処理が開始され、まずヘッダHDがRDR経由で受信バッファ141から読み出される(タイミングT18参照)。
以降、RPが1インクリメントされる都度、16個のデータDT0〜DTFがRDR経由で受信バッファ141から順次読み出される(タイミングT19〜T34参照;図21のステップS111のNOルートからステップS112,S113参照)。このような読出処理は、タイミングT34でHDWPの値とRPの値とが一致するまで(つまり図21のステップS111でYESと判定されるまで)実行される。図22に示す例では、タイミングT34においてHDWPの値とRPの値とは、17で一致している。
図20〜図22を参照しながら上述したように、パケット読出処理は、パケットの最終サイクルで最後の単位データが書き込まれるのを待ってから開始される。これは、パケットの最終サイクル(末尾)がEDBである場合には、パケットを破棄する必要があるためである。
ついで、受信したフェッチ応答パケットの末尾がEDBである場合のタイムチャートを図23に示す。図23では、図22と同様の手順に従ってパケットのデータDT8の書込タイミングT10になった時点で、EDBが検出される場合が例示されている。この場合、タイミングT11で、WPの値としてHDWPの値(図23では0)が保存される(図20のステップS102のYESルートからステップS107参照)。
これにより、受信バッファ141からの読出処理を行なうことなく、現在の書込対象パケット(末尾にEDBを設定されたパケット)が、再度、先頭(ヘッダ)から順に受信バッファ141へ書き込まれる。その際、末尾にEDBを設定されたパケットは、後続のパケットによって上書きされる。
〔2〕本実施形態の概要
上述したように、高速シリアル伝送によるネットワーク30では、伝送エラーがCRCによってチェックされる。そして、伝送エラーが検出されるとパケットの末尾がEDBに書き換えられる。そのため、エンドポイント(CPU#0)では、応答データ(処理対象データ)を含むパケットの末尾までの全てのデータを受信しないと、そのパケットが正常か否かを判定することができない。
したがって、フェッチ要求を発行したCPU#0では、当該フェッチ要求に応じた応答データを含むパケットの末尾までの全てのデータが、一旦、受信バッファ141に保存されてから、受信バッファ141におけるデータが先頭から順にコア11に送り出される。
しかし、受信バッファ141はFIFOであるので、コア11が要求している処理対象データ(一単位データ;例えば8バイトデータ)の、受信バッファ141からの読出は、当該単位データ直前のデータが読み出されるまで待たされる。このため、コア11から見て通信レイテンシが大きくなり、CPU#0の処理性能や、当該CPU#0を含む情報処理装置(マルチプロセッサシステム)の処理性能が低下する場合がある。
このため、高速シリアル伝送のネットワーク30で接続されるマルチプロセッサシステムにおいて、コア11が要求する処理対象データの読出レイテンシを短縮することが望まれている。
そこで、本実施形態(第1および第2実施形態)では、例えば、他のCPU10から読み出され転送されてきたフェッチ応答パケットにおける128バイトのデータブロックのうち、コア11が必要とする8バイトの処理対象データが、先に受信バッファ141から読み出されコア11へ送られる。これにより、コア11から見た通信レイテンシ(処理対象データの読出レイテンシ)が短縮される。
つまり、後述する第1実施形態の情報処理装置では、上述した関連技術と同様、エンドポイントの受信バッファ141に、フェッチ要求に対する応答パケットが全て書き込まれる。エンドポイントは、高速シリアル伝送のネットワーク30に接続されフェッチ応答パケットを受信する受信側CPU10A(図1参照;第1の演算処理装置,CPU#0)である。しかし、第1実施形態の情報処理装置では、図1〜図7を参照しながら後述するように、パケットの書込後、パケットの受信バッファ141からの読出時には、受信バッファ141に書き込んだ順ではなく、コア11が要求する8バイトの処理対象データが最初に読み出される。
後述する第1実施形態の情報処理装置は、コア11が要求する8バイトの処理対象データを最初に読み出すため、フェッチ応答パケットは、コア11が要求する処理対象データを示す物理アドレス(pa[6:3])を含む(図2,図3参照)。また、エンドポイントにおいては、上述した関連技術のパケット読出処理に係る構成(図19のRPおよびRDR参照)に、後述するHDRP(ヘッダ読出ポインタ),LengthレジスタおよびCycleCT(サイクルカウンタ)が追加される(図4および図5の読出部143参照)。HDRP,LengthレジスタおよびCycleCTを用いてRPを制御することで、コア11が要求する8バイトの処理対象データを最初に読み出すことが可能になっている(図5〜図7参照)。
このようにして、CPU10Aのコア11から要求される処理対象データを先頭にして受信バッファ141から読み出すことで読出レイテンシが短縮される。例えば、コア11が要求する処理対象データがパケットの最後尾である場合、当該処理対象が最初に読み出されることで、レイテンシを[パケットのデータ部分のサイクル数−1]だけ短縮することができる。逆に、処理対象データがパケットの先頭だった場合、レイテンシは変わらない。つまり、レイテンシの短縮サイクル数は、処理対象データがパケットの何番目のデータであるかによって変わる。したがって、平均すると、[パケットのデータ部分のサイクル数−1]/2程度、レイテンシを短縮することが可能である。
また、図1および図8〜図13を参照しながら後述する第2実施形態は、行列計算等で発生するストライドアクセスにおいて、1個のデータ付きパケット内に、必要な単位データ(処理対象データ)が複数存在する場合に対応する技術である。行列の計算などで配列を扱う際、コア11は、パケット長よりも短い一定間隔をあけたアドレスにおける複数の単位データを要求し、当該複数の単位データが1つのパケットに含まれている。
このような場合、第2実施形態では、受信バッファ141からパケットを読み出す際、必要な複数の単位データを、他の単位データよりも前(先頭側)に詰めて送出することで、必要な複数の単位データが、他の単位データよりも先に読み出される。これにより、CPU10Aのコア11から見たレイテンシが、大幅に短縮される。
〔3〕第1実施形態の情報処理装置
図1を参照しながら、本発明の第1実施形態としての演算処理装置(CPU)10A,10Bを含む情報処理装置(マルチプロセッサシステム)1の構成について説明する。図1は、その構成を示すブロック図である。
図1に示すように、第1実施形態の情報処理装置1は、複数(図1で2個)のCPU10A,10Bを有するマルチプロセッサシステムであり、例えばPC,サーバである。CPU10Aは、第1の演算処理装置に相当し、受信側CPUもしくはCPU#0と表記する場合がある。また、CPU10Bは、第2の演算処理装置に相当し、送信側CPUもしくはCPU#1と表記する場合がある。なお、第1実施形態の情報処理装置1には2個のCPUが備えられているが、本発明は、これに限定されるものでなく、3個以上のCPUが備えられてもよい。
CPU10AとCPU10Bとは、高速シリアル伝送によるネットワーク30を介して相互に通信可能に接続される。
CPU10Aは、図15に示すCPU10と同様、複数のコア11Aを内蔵したマルチコアプロセッサである。CPU10Aにおいては、複数のコア11が共有キャッシュ(三次キャッシュ)12Aを介して接続されている。図1では、コア11Aとして、N+1個のコア#0〜コア#N(Nは1以上の整数)が備えられている。図1では、一次キャッシュ(不図示)および二次キャッシュ(不図示)が各コア11に内蔵され、三次キャッシュが、共有キャッシュ12Aとして用いられているが、一次キャッシュを各コア11Aに内蔵し、二次キャッシュを共有キャッシュ12Aとして用いてもよい。
共有キャッシュ12Aには、コア11AのほかにMAC13Aおよびルータ14Aが接続されている。MAC13Aは、メインメモリとして機能するDIMM20Aを接続され、DIMM20Aとのデータのやり取りを制御する制御部として機能する。ルータ14Aは、他のCPU10Bまたは他のルータ(例えばルーティング用のLSI;図14参照)に接続され、パケットによって、他のCPU10Bとのデータの通信を行なう第1の通信部として機能する。
CPU10Bは、コア11B,共有キャッシュ(三次キャッシュ)12B,MAC13B,ルータ14Bを有している。コア11B,共有キャッシュ12B,MAC13B,ルータ14Bは、それぞれ、上述したCPU10Aのコア11A,共有キャッシュ12A,MAC13A,ルータ14Aと同様である。ただし、MAC13Bは、メインメモリとして機能するDIMM20Bを接続され、DIMM20Bとのデータのやり取りを制御する制御部として機能する。ルータ14Bは、他のCPU10Aまたは他のルータ(例えばルーティング用のLSI;図14参照)に接続され、パケットによって、他のCPU10Aとのデータの通信を行なう第2の通信部として機能する。
CPU10Aにおける複数のコア(処理部)11Aのうちの少なくとも一つは、必要な処理対象データ(例えば8バイトの単位データ)の読出要求を生成する。以下では、読出要求をフェッチ要求という場合がある。
CPU10Aにおけるルータ(第1の通信部)14Aは、一のコア11Aが生成したフェッチ要求を、フェッチ要求パケット(図2,図17(A)参照)によってCPU10Bへ送信する。また、ルータ(第1の通信部)14Aは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット(図2,図17(B)参照)を、CPU10Bから受信する。
一方、CPU10Bにおけるルータ(第2の通信部)14Bは、フェッチ要求パケット(図2,図17(A)参照)によって、CPU10Aからフェッチ要求を受信する。また、ルータ(第2の通信部)14Bは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット(図2,図17(B)参照)を、CPU10Aへ送信する。
特に、第1実施形態において、CPU10Bのルータ(第2の通信部)14Bは、フェッチ要求(フェッチ要求パケットのヘッダ)に含まれるアドレス情報(図18(A)のPA参照)から取り出された処理対象データのアドレス情報pa[6:3]を記録した応答ヘッダをデータブロックに付す。ここで、応答ヘッダは、例えば図3を参照しながら後述するフェッチ応答パケットのヘッダである。そして、ルータ(第2の通信部)14Bは、応答ヘッダを付したデータブロックを、フェッチ応答パケット(図2,図17(B)参照)としてCPU10Aへ送信する。
CPU10Aのルータ(第1の通信部)14Aは、受信バッファ141,書込部142,読出部143を有する。第1実施形態において、受信バッファ141,書込部142,読出部143は、CPU10Aのルータ14A内に備えられているが、CPU10A内に備えられていればよい。
受信バッファ(バッファ)141は、データブロックを添付されたデータ付きパケットを単位データ(例えば8バイト)で保存する。
書込部142は、ルータ14Aによって受信されたパケット(ヘッダおよびデータブロック)に含まれる複数の単位データを、受信バッファ141に順次書き込む。第1実施形態の書込部142は、図4を参照しながら後述するごとく、図19に示した関連技術と同様に構成されている。
読出部143は、パケットに含まれる複数の単位データのうちの少なくとも一つである処理対象データを、受信バッファ141から優先的に読み出す。特に、第1実施形態の読出部143は、データブロックに付された応答ヘッダに記録された処理対象データのアドレス情報pa[6:3]を参照する。そして、読出部143は、まず、参照した当該アドレス情報pa[6:3]に対応する処理対象データを受信バッファ141から読み出した後、当該処理対象データ以外の単位データを受信バッファ141から順次読み出す。第1実施形態の読出部143は、図4および図5を参照しながら後述するごとく構成され、図6および図7を参照しながら後述するごとく動作する。
なお、第1実施形態では、CPU10Aが、第1の通信部としての機能や、受信バッファ141,書込部142,読出部143としての機能を有し、CPU10Bが、第2の通信部としての機能を有する場合について説明している。しかし、複数のCPU10A,10Bのそれぞれが、第1および第2の通信部としての機能と、受信バッファ141,書込部142,読出部143としての機能とを有していてもよい。
ここで、図2を参照しながら、図1に示す情報処理装置1において、一CPU10Aのコア11Aから他CPU10Bのメモリデータに対するフェッチ要求を発行する場合のパケットルーティングについて説明する。
この場合、図2に示すように、必要な処理対象データを読み出すためのフェッチ要求パケット(データ無しパケット)が、CPU10Aから発行・送信され、ネットワーク30経由で、当該処理対象データを保持するメモリ20Bを有するCPU10Bにルーティングされる。ルータ14Bによってフェッチ要求パケットを受信したCPU10Bは、要求された処理対象データを含むデータブロックをメモリ20Bから読み出し、フェッチ応答パケット(データ付きパケット)を生成し、当該フェッチ応答パケットをCPU10Aに送信する。
このとき、CPU10Bで生成されるフェッチ応答パケットのヘッダ(応答ヘッダ)のフォーマットを図3に示す。図3に示すように、第1実施形態では、フェッチ応答パケットのヘッダに、フェッチ要求対象の単位データ(処理対象データ)を特定可能な4ビットの物理アドレスpa[6:3]が載せられている。4ビットの物理アドレスpa[6:3]は、フェッチ応答パケットに含まれるデータブロックにおける複数の単位データ(例えば16個の8バイトデータ)のうちの、どの単位データがCPU10A側のコア11Aによって要求されているのかを識別するための情報である。
CPU10Bがフェッチ応答パケットを生成する際、フェッチ要求パケットのヘッダに載っている物理アドレスPA(図18(A)参照)から、フェッチ要求対象の単位データを特定可能な4ビットの物理アドレスpa[6:3]が取り出される。取り出された物理アドレスpa[6:3]を、図18(B)を参照しながら前述したヘッダに含ませることにより、図3に示すようなフォーマットの応答ヘッダが生成される。このように生成された応答ヘッダを有するフェッチ応答パケットは、図2に示すように、フェッチ要求の発行元であるCPU10Aにルーティングされ送信される。
CPU10A側で受信されたフェッチ応答パケットは、まず、ルータ14Aに設けられた受信バッファ141に、書込部142(図1,図4参照)によって、一旦、単位データ毎に書き込まれる。この後、読出部143′におけるRPの値(読み出すべき単位データのアドレス)を制御することで、受信バッファ141に書き込まれたパケットのうち、コア11Aが要求する処理対象データが、受信バッファ141から優先的に読み出される。図4は、図1に示すCPU10Aにおけるルータ14Aに含まれる受信バッファ141および当該受信バッファ141に対するパケット書込/読出処理に係る構成(書込部142および読出部143)を示すブロック図である。
図4に示すように、第1実施形態の書込部142は、図19に示した関連技術の受信バッファ141に対するパケット書込処理に係る構成と同様のWDR,HDWPおよびWPを有する。また、第1実施形態の読出部143は、図19に示した関連技術の受信バッファ141に対するパケット書込処理に係る構成と同様のRDRおよびRPに加え、HDRP(Header Read Pointer;ヘッダ読出ポインタ),LengthレジスタおよびCycleCT(Cycle Counter;サイクルカウンタ)を有する。
WDRは、受信バッファ141に書き込まれる書込対象データ(一単位データ;例えば8バイトデータ)を一時的に保存するレジスタである。WPは、書込対象パケットの書込を制御するもので、WDRに保存されている書込対象データの、受信バッファ141における書込先アドレスを指定するポインタである。WPは、初期状態では0を設定され、書込対象パケットの受信バッファ141への書込時に1サイクル毎に1ずつインクリメントされる。WDRに保存されている書込対象データは、WPによって指定されるアドレスに書き込まれる。HDWPは、書込対象パケットのヘッダのアドレスを指定するポインタであり、初期状態では0を設定される。
RDRは、受信バッファ141から読み出された読出データ(一単位データ;例えば8バイトデータ)を一時的に保存するレジスタである。RPは、受信バッファ141からのデータの読出を制御するもので、受信バッファ141から読み出すデータのアドレスを指定するポインタである。RPは、初期状態では0を設定され、受信バッファ141からのデータ読出時に1サイクル毎に1ずつインクリメントされる。RPによって指定されるアドレスのデータは、受信バッファ141から読み出され、RDRに一時的に保存され、前述したように共有キャッシュ12Aに登録されるとともにフェッチ要求を行なったコア11へ送信される。
HDRPは、受信バッファ141から読出中のパケットのヘッダのアドレスを示すポインタであり、初期状態では0を設定される。Lengthレジスタは、受信バッファ141から読出中のパケットのデータ長(パケット長)Lengthを設定される。Lengthレジスタに設定されるデータ長Lengthは、ヘッダを受信バッファ141から読み出した際に、Length生成部143a(図5参照)によって当該ヘッダにおけるOpcode(パケット種)から生成され設定される。CycleCTは、受信バッファ141から読出中のパケットの単位データが、何個目の単位データであるかを示すカウンタであり、一サイクル毎につまり一単位データを読み出す都度、1ずつインクリメントされる。
ついで、図5を参照しながら、図4に示すパケット読出処理に係る構成、つまり読出部143について、より詳細に説明する。図5は、読出部143の詳細構成を示すブロック図である。図5に示す読出部143は、図6および図7を参照しながら後述するように動作する。図5に示すように、第1実施形態の読出部143は、Length生成部143aと1加算器143b,143dと加算器143c,143e,143fとセレクタ143gとを含む。
Length生成部143aは、図4を参照しながら前述したように、ヘッダを受信バッファ141から読み出した際に、当該ヘッダにおけるOpcodeから、受信バッファ141から読出中のパケットのデータ長Lengthを生成し、Lengthレジスタに設定する。
1加算器(+1)143bは、HDRPの示す値(以下、HDRPと表記)に1を加算する。
加算器143cは、Lengthレジスタにおけるデータ長Lengthと、1加算器143bからの値HDRP+1とを加算し、得られた値HDRP+Length+1をHDRPに設定する(図6のステップS24参照)。加算器143cの動作タイミングは、CycleCTの示す値(以下、CycleCTと表記)がデータ長LengthになってCycleCTをリセット(初期化)するタイミング(図6のステップS22および図7のタイミングT34参照)である。
1加算器(+1)143dは、RPの示す値(以下、RPと表記)に1を加算する。
加算器143eは、コア11Aが要求する処理対象データを特定する物理アドレスpa[6:3]と、1加算器143dからの値RP+1とを加算し、得られた値RP+pa[6:3]+1をRPに設定する(図6のステップS16参照)。物理アドレスpa[6:3]は、読出中のパケットのヘッダからRD−BUS(読出バス)を介して読み出される。加算器143eの動作タイミングは、フェッチ応答パケットからヘッダを読み出すタイミング(図6のステップS15のYESルート;図7のタイミングT18参照)である。当該タイミングで、セレクタ143gは、加算器143eで得られた値RP+pa[6:3]+1をRPに設定するように切替動作を行なう(図5〜図7の(1)参照)。
加算器143fは、Lengthレジスタにおけるデータ長Lengthと、1加算器143bからの値HDRP+1とを加算し、得られた値HDRP+Length+1をRPに設定する(図6のステップS23参照)。加算器143fの動作タイミングは、CycleCTがデータ長LengthになってCycleCTをリセット(初期化)するタイミング(図6のステップS22;図7のタイミングT34参照)である。当該タイミングで、セレクタ143gは、加算器143fで得られた値HDRP+Length+1をRPに設定するように切替動作を行なう(図5〜図7の(4)参照)。
また、セレクタ143gは、1加算器143dで得られた値RP+1をRPに設定するように切替動作を行なう(図5〜図7の(2)参照)。当該切替動作を行なうタイミングは、ヘッダのOpcodeがフェッチ応答でない場合(図6のステップS15のNOルート参照)、もしくは、RPがHDRP+Lengthと一致しないタイミング(図6のステップS19のNOルート;図7のタイミングT19〜T23,T25〜T33参照)である。
さらに、セレクタ143gは、1加算器143bで得られた値HDRP+1をRPに設定するように切替動作を行なう(図5〜図7の(3)参照)。当該切替動作を行なうタイミングは、RPがHDRP+Lengthと一致するタイミング(図6のステップS19のYESルート;図7のタイミングT24参照)である。
なお、上述した書込部142および読出部143としての機能は、論理ゲート等によってハードウエア的にCPU10Aに組み込まれて実現されてもよいし、プログラムを実行することでソフトウエア的にCPU10Aに組み込まれて実現されてもよい。
次に、図5〜図7を参照しながら、上述のごとく構成された書込部142および読出部143の動作について説明する。図6は、図5に示すパケット読出処理に係る構成(読出部143)の動作を説明するフローチャートである。図7は、図4および図5に示すパケット読出処理に係る構成(読出部143)が図6に示すフローチャートに従って10番目のデータ(DTA)を最初に読み出す場合の動作を示すタイムチャートである。
第1実施形態の書込部142によるパケット書込動作は、図20を参照しながら前述した関連技術の動作と同様であるので、その説明は省略する。これに対し、第1実施形態の読出部143によるパケット読出動作は、図21を参照しながら前述した関連技術の動作と異なっている。
ここで、図6に示すフローチャート(ステップS11〜S24)に従って、図5および図7を参照しながら、第1実施形態の読出部143によるパケット読出動作について説明する。
ルータ14Aは、RPの値とHDWPの値とが一致しているか否かを判断する(ステップS11)。RPの値とHDWPの値とが一致している場合(ステップS11のYESルート)、ルータ14Aは、書込対象パケットの書込中であると判断し、ステップS11の処理に戻る。
RPの値とHDWPの値とが一致しない場合(ステップS11のNOルート)、ルータ14Aは、書込対象パケットの書込を完了したと判断し、受信バッファ141からのパケット読出を開始する(図7のタイミングT18参照)。つまり、RPによって指定される、受信バッファ141のエントリ(一単位データ)が、受信バッファ141からRDR経由で読み出される(ステップS12)。そして、読み出されたエントリがヘッダ(HD)であるか否かが判断される(ステップS13)。
パケット読出の開始時には、まずパケットのヘッダが読み出されるため、読み出されたエントリはヘッダであると判断される(ステップS13のYESルート)。この場合、読み出されたヘッダのOpcodeが参照され、当該Opcode(パケット種)に基づき、受信バッファ141から読出中のパケットのデータ長Lengthが生成され、生成されたデータ長Lengthが読出部143のLengthレジスタに設定される(ステップS14)。
この後、当該Opcodeがフェッチ応答であるか否かを判断する(ステップS15)。フェッチ応答である場合(ステップS15のYESルート)、セレクタ143gは図5の(1)を選択するように切替動作を行なう。これにより、加算器143eで得られた値RP+pa[6:3]+1がRPに設定され(ステップS16)、CycleCTが1インクリメントされる(ステップS17)。そして、RPに設定された値(アドレス)で指定されるエントリ(データDTA)が読み出される(ステップS11のNOルートからステップS12)。つまり、パケットのヘッダを読み出した際に、ヘッダの物理アドレスpa[6:3]に基づき、コア11Aが要求しているデータに対応する受信バッファ141のアドレスRP+pa[6:3]+1がRPに設定される。図7に示す例では、10番目のデータDTAに対応するアドレスを示す11が、RPにセットされる。
この後、次のサイクルで、ヘッダの次に読み出されるエントリはデータであり、この場合(ステップS13のNOルート)、CycleCTの値がデータ長(パケット長)Lengthに到達したか否かが判断される(ステップS18)。つまり、読出対象パケットの全てのデータが読み出されたか否かが判断される。図7では、Length=16の例が示されている。
CycleCT=Lengthでない場合(ステップS18のNOルート)、RPの値が値HDRP+Length(図7では値16)に到達したか否かが判断される(ステップS19)。RP=HDRP+Lengthでない場合(ステップS19のNOルート)、もしくは、ヘッダのOpcodeがフェッチ応答でない場合(ステップS15のNOルート)、セレクタ143gは図5の(2)を選択するように切替動作を行なう。これにより、RPの値が値HDRP+Lengthに到達するまで、一単位データを読み出す都度(図7のタイミングT19〜T23参照)、RPの値が1インクリメントされ(ステップS20)、CycleCTが1インクリメントされた後(ステップS17)、処理はステップS11に戻る。
RPの値が値HDRP+Lengthに到達すると(ステップS19のYESルート)、セレクタ143gは図5の(3)を選択するように切替動作を行なう。これにより、1加算器143bで得られた値HDRP+1がRPに設定され(ステップS21)、CycleCTが1インクリメントされる(ステップS17)。例えば図7のタイミングT24では、HDRP=0であるため、RPには1が設定される。この後、処理はステップS11に戻る。
RPに値HDRP+1を設定した後の各サイクル(図7のタイミングT25〜T33参照)では、CycleCTの値がデータ長Lengthに到達するまで、つまり読出対象パケットの全てのデータが読み出されるまで、セレクタ143gは図5の(2)を選択するように切替動作を行なう。これにより、CycleCTの値がデータ長Lengthに到達するまで、一単位データを読み出す都度、RPの値が1インクリメントされ(ステップS20)、CycleCTが1インクリメントされた後(ステップS17)、処理はステップS11に戻る。
CycleCTの値がデータ長Lengthに到達すると(ステップS18のYESルート;図7のタイミングT34参照)、CycleCTの値が0にリセットされる(ステップS22)。そして、セレクタ143gは図5の(4)を選択するように切替動作を行なう。これにより、加算器143fで得られた値HDRP+Length+1(図7では値17)が、次に読み出すべきデータのアドレスとしてRPに設定される(ステップS23)。また、加算器143cで得られた値HDRP+Length+1(図7では値17)が、次に読み出すべきパケットのヘッダのアドレスとしてHDRPに設定される(ステップS24)。この後、処理はステップS11に戻る。
以上の動作により、第1実施形態では、データDTAを、図22に示した関連技術の場合よりも10サイクル早く読み出すことができ、レイテンシが短縮される。
また、上述した動作では、物理アドレスpa[6:3]によって、読み出すデータの順番が一意に決まる。したがって、パケットを受け取ったコア11Aは、受信バッファ141におけるパケットから最初に読み出したデータ以外のデータが、どの物理アドレスのデータであるかを容易に判断することができる。
〔4〕第2実施形態の情報処理装置
次に、図1および図8〜図13を参照しながら、本発明の第2実施形態としての情報処理装置(マルチプロセッサシステム)1′について説明する。ここで説明する第2実施形態は、複数の処理対象データが、一つのデータブロック内において所定間隔Intervalをあけて存在する場合に対応する技術である。つまり、第2実施形態は、前述したように、行列計算等で発生するストライドアクセスにおいて、1個のデータ付きパケット内に、必要な単位データ(処理対象データ)が複数存在する場合に対応する技術である。例えば、図13に示す例では、16個の8バイトデータDT0〜DTFを含むパケット内に、所定間隔Interval=4をあけて4個の処理対象データDT2,DT6,DTA,DTEが存在する場合について説明する。
図1に示すように、第2実施形態の情報処理装置1′も、第1実施形態の情報処理装置1と同様、複数(図1で2個)のCPU10A,10Bを有している。第2実施形態においても、CPU10AとCPU10Bとは、高速シリアル伝送によるネットワーク30を介して相互に通信可能に接続される。
情報処理装置1′におけるCPU10A,10Bも、図1〜図7を参照しながら前述した情報処理装置1におけるCPU10A,10Bと同様に構成されている。ただし、第2実施形態の情報処理装置1′では、以下に説明するように、CPU10Aのルータ14Aの第1の通信部としての機能、および、CPU10Bのルータ14Bの第2の通信部としての機能に若干の変更が加えられる。また、第2実施形態の情報処理装置1′では、以下に説明するように、CPU10A(ルータ14A)における読出部143が、読出部143′(図1,図10,図11参照)に変更されている。
第2実施形態のCPU10Aにおけるルータ(第1の通信部)14Aも、第1実施形態と同様、一のコア11Aが生成したフェッチ要求を、フェッチ要求パケット(図9,図17(A)参照)によってCPU10Bへ送信する。また、ルータ(第1の通信部)14Aは、フェッチ要求に対応する処理対象データを含むデータブロックを添付されたフェッチ応答パケット(図9,図17(B)参照)を、CPU10Bから受信する。
ただし、第2実施形態のCPU10Aにおけるルータ(第1の通信部)14AからCPU10Bへ送信される、フェッチ要求パケットのヘッダは、図8(A)に示すようなフォーマットを有する。つまり、フェッチ要求パケットのヘッダには、図18(A)を参照しながら上述したOPC,RQID,物理アドレスPAのほかに、上記所定間隔に関する情報(ここでは上記所定間隔を示す値Interval)が含まれる。
また、第2実施形態のCPU10Bにおけるルータ(第2の通信部)14Bは、図8(B)に示すようなフォーマットを有する応答ヘッダをCPU10Aへ送信されるフェッチ応答パケット(DIMM20B等から読み出されたデータブロック)に付す。図8(B)に示すように、当該応答ヘッダには、フェッチ要求パケットのヘッダに含まれるアドレス情報(図8(A)のPA参照)から取り出された先頭の処理対象データのアドレス情報pa[6:3]と、所定間隔Intervalとが記録される。そして、ルータ(第2の通信部)14Bは、応答ヘッダを付したデータブロックを、フェッチ応答パケット(図9,図17(B)参照)としてCPU10Aへ送信する。
さらに、第2実施形態のCPU10Aにおけるルータ(第1の通信部)14Aは、受信バッファ141,書込部142,読出部143′を有する。第2実施形態において、受信バッファ141,書込部142,読出部143′は、CPU10Aのルータ14A内に備えられているが、CPU10A内に備えられていればよい。受信バッファ141および書込部142は、図1および図4を参照しながら上述した第1実施形態の受信バッファ141および書込部142と同様に構成されているので、その説明は省略する。
読出部143′は、データブロック(フェッチ応答パケット)に付された応答ヘッダに記録された、先頭の処理対象データの物理アドレスpa[6:3]と所定間隔Intervalとを参照する。そして、読出部143′は、参照した物理アドレスpa[6:3]と所定間隔Intervalとに基づき、まず、コア11Aの要求する複数の処理対象データを受信バッファ141から読み出した後、当該複数の処理対象データ以外の単位データを受信バッファ141から順次読み出す。第2実施形態における読出部143′は、図10および図11を参照しながら後述するごとく構成され、図12および図13を参照しながら後述するごとく動作する。
なお、第2実施形態では、CPU10Aが、第1の通信部としての機能や、受信バッファ141,書込部142,読出部143′としての機能を有し、CPU10Bが、第2の通信部としての機能を有する場合について説明している。しかし、複数のCPU10A,10Bのそれぞれが、第1および第2の通信部としての機能と、受信バッファ141,書込部142,読出部143′としての機能とを有していてもよい。
ここで、図9を参照しながら、第2実施形態の情報処理装置1′において、一CPU10Aのコア11Aから他CPU10Bのメモリデータに対する、ストライドアクセスに係るフェッチ要求を発行する場合のパケットルーティングについて説明する。
この場合、図9に示すように、必要な処理対象データを読み出すためのフェッチ要求パケット(データ無しパケット)が、CPU10Aから発行・送信され、ネットワーク30経由で、当該処理対象データを保持するメモリ20Bを有するCPU10Bにルーティングされる。このとき、フェッチ要求パケットのヘッダには、図8(A)に示すように、少なくとも、処理対象データのアドレス情報PAと、ストライドアクセスに係る所定間隔Intervalとが含まれる。
一方、ルータ14Bによってフェッチ要求パケットを受信したCPU10Bは、要求された処理対象データを含むデータブロックをメモリ20Bから読み出し、フェッチ応答パケット(データ付きパケット)を生成し、当該フェッチ応答パケットをCPU10Aに送信する。このとき、図8(B)に示すように、CPU10Bで生成されるフェッチ応答パケットのヘッダ(応答ヘッダ)には、ストライドアクセス対象の先頭の単位データ(処理対象データ)を特定可能な4ビットの物理アドレスpa[6:3]が載せられている。また、図8(B)に示すように、当該ヘッダには、ストライドアクセスに係る所定間隔Intervalも載せられている。
CPU10Bがフェッチ応答パケットを生成する際、フェッチ要求パケットのヘッダに載っている物理アドレスPA(図8(A)参照)から、フェッチ要求対象の先頭単位データを特定可能な4ビットの物理アドレスpa[6:3]が取り出される。また、同ヘッダからストライドアクセスに係る所定間隔Intervalが取り出される。取り出された物理アドレスpa[6:3]および所定間隔Intervalを応答ヘッダに含ませることにより、図8(B)に示すようなフォーマットの応答ヘッダが生成される。このように生成された応答ヘッダを有するフェッチ応答パケットは、図9に示すように、フェッチ要求の発行元であるCPU10Aにルーティングされ送信される。
上述の通り、第2実施形態では、フェッチ要求パケットのヘッダおよびフェッチ応答パケットのヘッダの両方に、コア11Aがメモリ20Bにストライドアクセスする際のアドレス間隔を示すIntervalが追加されている。ここで、例えば、データブロック(128バイトデータ)に含まれる単位データ(8バイトデータ)の数が16である場合、所定間隔Intervalの値は、0<Interval<16の範囲の整数である。これは、Interval=0の場合、同一の単位データを選択することになる一方、Interval=16の場合、パケットに含まれるデータブロック(16個の単位データ)の範囲を超えることになるからである。
CPU10A側で受信されたフェッチ応答パケットは、まず、ルータ14Aに設けられた受信バッファ141に、書込部142(図1,図10参照)によって、一旦、単位データ毎に書き込まれる。この後、読出部143′におけるRPの値(読み出すべき単位データのアドレス)を制御することで、受信バッファ141に書き込まれたパケットのうち、コア11Aが要求する処理対象データが受信バッファ141から優先的に読み出される。
特に、第2実施形態における読出部143′は、応答ヘッダに記録された、先頭の処理対象データの物理アドレスpa[6:3]と所定間隔Intervalとに基づき、コア11Aの要求する複数の処理対象データを受信バッファ141から読み出した後、それ以外のデータを受信バッファ141から順次読み出す。
以下、上述のような機能を実現する第2実施形態の構成について、図10および図11を参照しながら説明する。図10は、第2実施形態のCPU10Aにおけるルータ14Aに含まれる受信バッファ141および当該受信バッファ141に対するパケット書込/読出処理に係る構成(書込部142および読出部143′)を示すブロック図である。図11は、図10に示すパケット読出処理に係る構成(読出部143′)を詳細に示すブロック図である。
図10に示すように、第2実施形態における書込部142は、図4に示した書込部142と同様のWDR,HDWPおよびWPを有する。
また、第2実施形態の読出部143′は、図4に示した読出部143と同様のRDR,RP,HDRP,LengthレジスタおよびCycleCTに加え、Intervalレジスタを有する。WDR,HDWP,WP,RDR,RP,HDRP,LengthレジスタおよびCycleCTについては、既述のものと同様であるので、その説明は省略する。
第2実施形態で追加されるIntervalレジスタには、フェッチ応答パケットのヘッダ(応答ヘッダ)を受信バッファ141から読み出した際に、当該ヘッダに記録された所定間隔Intervalが設定される。なお、パケット種がフェッチ応答パケット以外のパケットについては、Intervalの値として1が設定される。
ついで、図11を参照しながら、図10に示すパケット読出処理に係る構成、つまり読出部143′について、より詳細に説明する。図11に示すように、第2実施形態の読出部143′は、第1実施形態の読出部143と同様のLength生成部143aと1加算器143b,143dと加算器143c,143e,143fとセレクタ143gとに加え、加算器143hおよび演算器143iを有する。
Length生成部143aは、第1実施形態と同様、ヘッダを受信バッファ141から読み出した際に、当該ヘッダにおけるOpcodeから、受信バッファ141から読出中のパケットのデータ長Lengthを生成し、Lengthレジスタに設定する。
1加算器(+1)143bは、第1実施形態と同様、HDRPの示す値に1を加算する。
加算器143cは、第1実施形態と同様、Lengthレジスタにおけるデータ長Lengthと、1加算器143bからの値HDRP+1とを加算し、得られた値HDRP+Length+1をHDRPに設定する(図12のステップS45参照)。加算器143cの動作タイミングは、CycleCTの示す値がデータ長LengthになってCycleCTをリセット(初期化)するタイミング(図12のステップS43および図13のタイミングT34参照)である。
1加算器(+1)143dは、第1実施形態と同様、RPの示す値に1を加算する。
加算器143eは、第1実施形態と同様、コア11Aが要求する先頭の処理対象データを特定する物理アドレスpa[6:3]と、1加算器143dからの値RP+1とを加算し、得られた値RP+pa[6:3]+1をRPに設定する(図12のステップS37参照)。物理アドレスpa[6:3]は、読出中のパケットのヘッダからRD−BUSを介して読み出される。加算器143eの動作タイミングは、フェッチ応答パケットからヘッダを読み出すタイミング(図12のステップS36のYESルート;図13のタイミングT18参照)である。当該タイミングで、セレクタ143gは、加算器143eで得られた値RP+pa[6:3]+1をRPに設定するように切替動作を行なう(図11〜図13の(1)参照)。
加算器143fは、第1実施形態と同様、Lengthレジスタにおけるデータ長Lengthと、1加算器143bからの値HDRP+1とを加算し、得られた値HDRP+Length+1をRPに設定する(図12のステップS44参照)。加算器143fの動作タイミングは、CycleCTがデータ長LengthになってCycleCTをリセット(初期化)するタイミング(図12のステップS43;図13のタイミングT34参照)である。当該タイミングで、セレクタ143gは、加算器143fで得られた値HDRP+Length+1をRPに設定するように切替動作を行なう(図11〜図13の(4)参照)。
第2実施形態で追加された加算器143hは、Intervalレジスタにおける所定間隔Intervalと、RPの値とを加算し、得られた値RP+IntervalをRPに設定する(図12のステップS41参照)。加算器143hの動作タイミングは、ヘッダのOpcodeがフェッチ応答でない場合(図12のステップS36のNOルート参照)、もしくは、RP+IntervalがHDRP+Length以下であるタイミング(図12のステップS40のNOルート;図13のタイミングT19〜T21,T23〜T25,T27〜T29,T31〜T32参照)である。当該タイミングで、セレクタ143gは、加算器143hで得られた値RP+IntervalをRPに設定するように切替動作を行なう(図11〜図13の(2)参照)。
また、第2実施形態で追加された演算器143iは、Intervalレジスタにおける所定間隔Intervalと、1加算器143bからの値HDRP+1と、RPの値とに基づき、値HDRP+[(RP−HDRP+1)%Interval]を算出し、当該値をRPに設定する(図12のステップS42参照)。演算器143iの動作タイミングは、RP+IntervalがHDRP+Lengthを超えるタイミング(図12のステップS40のYESルート;図13のタイミングT22,T26,T30参照)である。当該タイミングで、セレクタ143gは、演算器143iで得られた値をRPに設定するように切替動作を行なう(図11〜図13の(3)参照)。なお、上記値における%は、剰余を与える演算に用いられる記号で、剰余=被除数%除数と規定される。例えば、16%4=4、17%4=1、14%4=2となる。
なお、上述した書込部142および読出部143′としての機能は、論理ゲート等によってハードウエア的にCPU10Aに組み込まれて実現されてもよいし、プログラムを実行することでソフトウエア的にCPU10Aに組み込まれて実現されてもよい。
次に、図11〜図13を参照しながら、上述のごとく構成された書込部142および読出部143′の動作について説明する。図12は、図11に示すパケット読出処理に係る構成(読出部143′)の動作を説明するフローチャートである。図13は、図10および図11に示すパケット読出処理に係る構成(読出部143′)が図12に示すフローチャートに従って2,6,10,14番目のデータ(DT2,DT6,DTA,DTE)を先に読み出す場合の動作を示すタイムチャートである。
第2実施形態の書込部142によるパケット書込動作は、図20を参照しながら前述した関連技術の動作と同様であるので、その説明は省略する。一方、第2実施形態の読出部143′によるパケット読出動作は、図6を参照しながら前述した第1実施形態の読出部143の動作と部分的に異なっている。
図12に示すフローチャート(ステップS31〜S45)に従って、図11および図13を参照しながら第2実施形態の読出部143′によるパケット読出動作について説明する。
ルータ14Aは、RPの値とHDWPの値とが一致しているか否かを判断する(ステップS11)。RPの値とHDWPの値とが一致している場合(ステップS31のYESルート)、ルータ14Aは、書込対象パケットの書込中であると判断し、ステップS31の処理に戻る。
RPの値とHDWPの値とが一致しない場合(ステップS31のNOルート)、ルータ14Aは、書込対象パケットの書込を完了したと判断し、受信バッファ141からのパケット読出を開始する(図13のタイミングT18参照)。つまり、RPによって指定される、受信バッファ141のエントリ(一単位データ)が、受信バッファ141からRDR経由で読み出される(ステップS32)。そして、読み出されたエントリがヘッダ(HD)であるか否かが判断される(ステップS33)。
パケット読出の開始時には、まずパケットのヘッダが読み出されるため、読み出されたエントリはヘッダであると判断される(ステップS33のYESルート)。この場合、読み出されたヘッダの所定間隔Intervalが参照され、ヘッダから当該Intervalの値が、読出部143′のIntervalレジスタに設定される(ステップS34)。また、読み出されたヘッダのOpcodeが参照され、当該Opcode(パケット種)に基づき、受信バッファ141から読出中のパケットのデータ長Lengthが生成され、生成されたデータ長Lengthが読出部143′のLengthレジスタに設定される(ステップS35)。
この後、当該Opcodeがフェッチ応答であるか否かを判断する(ステップS36)。フェッチ応答である場合(ステップS36のYESルート)、セレクタ143gは図11の(1)を選択するように切替動作を行なう。これにより、加算器143eで得られた値RP+pa[6:3]+1がRPに設定され(ステップS37)、CycleCTが1インクリメントされる(ステップS38)。そして、RPに設定された値(アドレス)で指定されるエントリ(データDT2)が読み出される(ステップS31のNOルートからステップS32)。つまり、パケットのヘッダを読み出した際に、ヘッダの物理アドレスpa[6:3]に基づき、コア11Aが要求しているデータ(先頭単位データ)に対応する受信バッファ141のアドレスRP+pa[6:3]+1がRPに設定される。図13に示す例では、2番目のデータDT2に対応するアドレスを示す3が、RPにセットされる。
この後、次のサイクルで、ヘッダの次に読み出されるエントリはデータであり、この場合(ステップS33のNOルート)、CycleCTの値がデータ長(パケット長)Lengthに到達したか否かが判断される(ステップS39)。つまり、読出対象パケットの全てのデータが読み出されたか否かが判断される。図13では、Length=16の例が示されている。
CycleCT=Lengthでない場合(ステップS39のNOルート)、値RP+Intervalが値HDRP+Length(図13では値16)を超えているか否かが判断される(ステップS40)。RP+IntervalがHDRP+Length以下である場合(ステップS40のNOルート)、もしくは、ヘッダのOpcodeがフェッチ応答でない場合(ステップS36のNOルート)、セレクタ143gは図11の(2)を選択するように切替動作を行なう。
これにより、RP+Intervalの値が値HDRP+Lengthを超えるまで、一単位データを読み出す都度、RPの値に、所定間隔の値Interval(図13ではInterval=4)が加算され(ステップS41)、CycleCTが1インクリメントされた後(ステップS38)、処理はステップS31に戻る。なお、ステップS41の処理の実行タイミングは、図13のタイミングT19〜T21,T23〜T25,T27〜T29,T31〜T33に対応する。
RP+Intervalの値が値HDRP+Lengthを超えると(ステップS40のYESルート)、セレクタ143gは図11の(3)を選択するように切替動作を行なう。これにより、演算器143iで得られた値HDRP+[(RP−HDRP+1)%Interval]がRPに設定され(ステップS42)、CycleCTが1インクリメントされる(ステップS38)。
例えば、図13のタイミングT22では、値HDRP+[(RP−HDRP+1)%Interval]=0+[(15−0+1)%4]=16%4=4であるため、RPには4が設定される。また、図13のタイミングT26では、値HDRP+[(RP−HDRP+1)%Interval]=0+[(16−0+1)%4]=17%4=1であるため、RPには1が設定される。同様に、図13のタイミングT30では、値HDRP+[(RP−HDRP+1)%Interval]=0+[(13−0+1)%4]=14%4=2であるため、RPには2が設定される。この後、処理はステップS31に戻る。
この後、CycleCTの値がデータ長Lengthに到達すると(ステップS39のYESルート;図13のタイミングT34参照)、CycleCTの値が0にリセットされる(ステップS43)。そして、セレクタ143gは図11の(4)を選択するように切替動作を行なう。これにより、加算器143fで得られた値HDRP+Length+1(図13では値17)が、次に読み出すべきデータのアドレスとしてRPに設定される(ステップS44)。また、加算器143cで得られた値HDRP+Length+1(図7では値17)が、次に読み出すべきパケットのヘッダのアドレスとしてHDRPに設定される(ステップS45)。この後、処理はステップS31に戻る。
以上の動作により、第2実施形態では、データDT2,DT6,DTA,DTEが他のデータよりも先に読み出され、レイテンシが短縮される。
また、上述した動作では、先頭の処理対象データの物理アドレスpa[6:3]と所定間隔Intervalとによって、読み出すデータの順番が一意に決まる。したがって、パケットを受け取ったコア11Aは、受信バッファ141におけるパケットから先に読み出されたデータ群以外のデータが、どの物理アドレスのデータであるかを容易に判断することができる。
なお、図1〜図7を参照しながら上述した第1実施形態は、図8〜図13を参照しながら上述した第2実施形態の所定間隔Intervalの値が1である場合に相当する。
〔5〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
〔6〕付記
以上の各実施形態を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
他の演算処理装置に接続される演算処理装置であって、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記他の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記他の演算処理装置から受信する通信部と、
前記データブロックを保存するバッファと、
前記通信部が受信したデータブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有する、演算処理装置。
(付記2)
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記1に記載の演算処理装置。
(付記3)
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記他の演算処理装置へ送信し、
前記読出部は、
前記データブロックに付された応答ヘッダに前記他の演算処理装置によって記録された先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記1に記載の演算処理装置。
(付記4)
第1の演算処理装置と、
前記第1の演算処理装置に接続される第2の演算処理装置と、を有し、
前記第1の演算処理装置は、
処理対象データの読出要求を生成する処理部と、
前記処理部が生成した読出要求を前記第2の演算処理装置へ送信するとともに、送信した前記読出要求に対応する前記処理対象データを含むデータブロックを前記第2の演算処理装置から受信する第1の通信部と、
前記データブロックを保存するバッファと、
前記第1の通信部が受信したデータブロックに含まれる複数の単位データを前記バッファに順次書き込む書込部と、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す読出部と、を有し、
前記第2の演算処理装置は、
前記第1の演算処理装置から前記読出要求を受信するとともに、受信した前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第1の演算処理装置へ送信する第2の通信部を有する、情報処理装置。
(付記5)
前記第2の演算処理装置における前記第2の通信部は、
前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報を記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第1の演算処理装置へ送信する、付記4に記載の情報処理装置。
(付記6)
前記第1の演算処理装置における前記読出部は、
前記データブロックに付された前記応答ヘッダに記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記5に記載の情報処理装置。
(付記7)
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第1の演算処理装置における前記第1の通信部は、
前記所定間隔に関する情報を含む前記読出要求を前記第2の演算処理装置へ送信し、
前記第2の演算処理装置における前記第2の通信部は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第1の演算処理装置へ送信する、付記4に記載の情報処理装置。
(付記8)
前記第1の演算処理装置における前記読出部は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記7に記載の情報処理装置。
(付記9)
第1の演算処理装置と、前記第1の演算処理装置に接続される第2の演算処理装置と、を有する情報処理装置の制御方法であって、
前記第1の演算処理装置は、
処理対象データの読出要求を前記第2の演算処理装置へ送信し、
前記第2の演算処理装置は、
前記第1の演算処理装置から前記読出要求を受信すると、受信した前記読出要求に対応する前記処理対象データを含む前記データブロックを前記第1の演算処理装置へ送信し、
前記第1の演算処理装置は、
前記読出要求に対応する前記処理対象データを含むデータブロックを前記第2の演算処理装置から受信し、
受信したデータブロックに含まれる複数の単位データをバッファに順次書き込み、
前記複数の単位データのうちの少なくとも一つである前記処理対象データを前記バッファから優先的に読み出す、情報処理装置の制御方法。
(付記10)
前記第2の演算処理装置は、
前記読出要求に含まれるアドレス情報から取り出された前記処理対象データのアドレス情報を記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第1の演算処理装置へ送信する、付記9に記載の情報処理装置の制御方法。
(付記11)
前記第1の演算処理装置は、
前記データブロックに付された前記応答ヘッダに記録された前記処理対象データのアドレス情報を参照し、
当該アドレス情報に対応する前記処理対象データを前記バッファから読み出した後、
前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記10に記載の情報処理装置の制御方法。
(付記12)
複数の前記処理対象データが前記複数の単位データにおいて所定間隔をあけて存在する場合、
前記第1の演算処理装置は、
前記所定間隔に関する情報を含む前記読出要求を前記第2の演算処理装置へ送信し、
前記第2の演算処理装置は、
前記読出要求に含まれるアドレス情報から取り出された先頭の前記処理対象データのアドレス情報と、前記読出要求から取り出された前記所定間隔に関する情報とを記録した応答ヘッダを前記データブロックに付し、
前記応答ヘッダを付した前記データブロックを、前記第1の演算処理装置へ送信する、付記9に記載の情報処理装置の制御方法。
(付記13)
前記第1の演算処理装置は、
前記データブロックに付された前記応答ヘッダに記録された前記先頭の前記処理対象データのアドレス情報と前記所定間隔に関する情報とを参照し、
前記アドレス情報と前記所定間隔とに基づき、前記複数の前記処理対象データを前記バッファから読み出した後、
前記複数の前記処理対象データ以外の単位データを前記バッファから順次読み出す、付記12に記載の情報処理装置の制御方法。