(57)【要約】      （修正有）【課題】ＲＤＭＡで転送されたデータの参照時に発生するキャッシュミスを抑制する。【解決手段】第１ノードと、第２ノードとを有する並列処理装置において、第１ノードは、データと、データのサイズの情報とを第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信する送信部を有する。第２ノードは、データと、データのサイズの情報とを第１ノードから受信し、データをメモリ領域に書き込む受信部と、受信部によりデータが書き込まれた位置の情報と、データのサイズの情報とに基づき、データの少なくとも一部をプリフェッチするデータ処理部とを有する。【選択図】図１１
2018045438.tif 000002
【特許請求の範囲】
【請求項１】
第１ノードと、
第２ノードと、
を有し、
前記第１ノードは、
データと、前記データのサイズの情報とを前記第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信する送信部
を有し、
前記第２ノードは、
前記データと、前記データのサイズの情報とを前記第１ノードから受信し、前記データをメモリ領域に書き込む受信部と、
前記受信部により前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチするデータ処理部と、
を有する並列処理装置。
【請求項２】
前記データのサイズの情報は、キャッシュライン数の情報を含み、
前記データが書き込まれた位置の情報は、前記データが書き込まれたメモリ領域の末尾アドレスを含む、
請求項１記載の並列処理装置。
【請求項３】
前記データ処理部は、
キャッシュラインサイズに前記キャッシュライン数に所定数を加えた数を乗じることで算出されたサイズと、前記データが書き込まれたメモリ領域の末尾アドレスとに基づき、前記プリフェッチの開始位置を特定し、
前記プリフェッチの開始位置から、算出された前記キャッシュライン数に前記キャッシュラインサイズを乗じたサイズの分だけ前記データを読み出す、
請求項２記載の並列処理装置。
【請求項４】
前記データは、データ本体と、当該データ本体のサイズの情報とを含み、
前記データ処理部は、
前記データ本体のサイズの情報と、前記フッタのサイズと前記データが書き込まれたメモリ領域の末尾アドレスとから算出された前記フッタの先頭アドレスとに基づき、前記データ本体の先頭アドレスを特定し、
特定した前記データ本体の先頭アドレスに基づき、キャッシュメモリから前記データ本体を読み出す、
処理をさらに実行する請求項１記載の並列処理装置。
【請求項５】
前記データが書き込まれた位置の情報は、前記データが書き込まれたメモリ領域の末尾アドレスの情報を含む、
請求項１乃至４のいずれか１つ記載の並列処理装置。
【請求項６】
コンピュータに、
記憶装置に格納されたデータを読み出し、
読み出された前記データと、前記データのサイズの情報とを他のコンピュータにＲＤＭＡ（Remote Direct Memory Access）で送信する、
処理を実行させる送信プログラム。
【請求項７】
コンピュータに、
データと、前記データのサイズの情報とを他のコンピュータから受信し、
受信した前記データをメモリ領域に書き込み、
前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチする、
処理を実行させる受信プログラム。
【請求項８】
第１ノードと第２ノードとを有する並列処理装置において実行されるデータ転送方法であって、
前記第１ノードは、データと、前記データのサイズの情報とを前記第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信し、
前記第２ノードは、前記データと、前記データのサイズの情報とを前記第１ノードから受信し、
前記第２ノードは、受信した前記データをメモリ領域に書き込み、
前記第２ノードは、前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチする、
処理を実行するデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置におけるデータ転送技術に関する。
【背景技術】
【０００２】
ＤＭＡ（Direct Memory Access）とは、ＣＰＵ（Central Processing Unit）を介することなく、メモリとその他のデバイス（例えば周辺機器など）との間で直接データを転送する方式である。例えば或る文献には、情報処理装置内における或るキャッシュメモリから別のキャッシュメモリにデータが直接転送されることが記載されている。また、或る文献には、ＤＭＡ転送装置内の転送元領域から転送先領域にデータが直接転送されることが記載されている。
【０００３】
ＤＭＡは単一のノード内でのデータ転送の方式であるが、或るノードのメインメモリから別のノードのメインメモリへ直接データを転送する方式はＲＤＭＡ（Remote Direct Memory Access）と呼ばれる。
【０００４】
ＲＤＭＡによって転送されるデータは、データを受信したノードのメインメモリに書き込まれる。データを受信したノードのＣＰＵがメインメモリに書き込まれたデータを利用する場合、キャッシュメモリにデータが存在しなければキャッシュミスが発生する。キャッシュミスの発生により、ＣＰＵがデータの処理を開始するまでに要する時間は長くなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−３２８９９５号公報
【特許文献２】特開２００９−２１１２４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、１つの側面では、ＲＤＭＡで転送されたデータの参照時に発生するキャッシュミスを抑制するための技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明に係る並列処理装置は、第１ノードと、第２ノードとを有する。そして、第１ノードは、データと、データのサイズの情報とを第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信する送信部を有する。そして、第２ノードは、データと、データのサイズの情報とを第１ノードから受信し、データをメモリ領域に書き込む受信部と、受信部によりデータが書き込まれた位置の情報と、データのサイズの情報とに基づき、データの少なくとも一部をプリフェッチするデータ処理部とを有する。
【発明の効果】
【０００８】
１つの側面では、ＲＤＭＡで転送されたデータの参照時に発生するキャッシュミスを抑制できるようになる。
【図面の簡単な説明】
【０００９】
【図１】図１は、キャッシュミスの発生について説明するための図である。
【図２】図２は、キャッシュミスの発生について説明するための図である。
【図３】図３は、キャッシュミスの発生について説明するための図である。
【図４】図４は、本実施の形態のシステム構成を示す図である。
【図５】図５は、各ノードの機能ブロック図である。
【図６】図６は、送信ノードの送信プロセスが実行する処理の処理フローを示す図である。
【図７】図７は、フッタ及び送信指示の設定例を示す図である。
【図８】図８は、送信ノードのインターコネクトが実行する処理の処理フローを示す図である。
【図９】図９は、受信ノードのインターコネクトが実行する処理の処理フローを示す図である。
【図１０】図１０は、受信ノードの受信プロセスが実行する処理の処理フローを示す図である。
【図１１】図１１は、本実施の形態の処理について説明するための図である。
【図１２】図１２は、プリフェッチ無しの場合とプリフェッチ無しの場合とを比較するための図である。
【発明を実施するための形態】
【００１０】
上で述べたように、ＲＤＭＡによって転送されるデータを受信したノードにおいては、キャッシュミスが発生することがある。まず、この点について図１乃至図３を用いて説明する。
【００１１】
図１において、或るノードにおける送信プロセスは、メインメモリ上のデータを、ＲＤＭＡ  Ｗｒｉｔｅによって別のノードのメインメモリに書き込む。データの送信時、送信プロセスは、送信についての情報を指示キューに書き込む。具体的には、データが格納されている領域の先頭アドレスである送信元先頭アドレスと、データのサイズと、送信されたデータが格納される領域の先頭アドレスである送信先先頭アドレスと、任意の情報を設定可能な追加情報（１バイト以上２バイト以下）とを書き込む。インターコネクト１５は、送信プロセスからデータの送信を指示されると、指示キューに格納された情報に従い、データをＲＤＭＡで受信プロセスに送信する。なお、データと共に、指示キューに書き込まれた情報が制御情報として送信される。
【００１２】
受信プロセスのインターコネクト２５は、データを受信すると、制御情報に従ってデータをメインメモリに書き込む。そして、メインメモリへの書き込みが完了すると、インターコネクト２５は、データが書き込まれた領域の末尾アドレスである送信先末尾アドレスと、受信した追加情報とを通知キューに書き込む。通知キューに情報が書き込まれると、受信プロセスは、通知キューに書き込まれた情報に従いデータの読み出しを開始する。
【００１３】
この場合、受信プロセスがデータのサイズの情報を有していれば、送信先末尾アドレスとデータのサイズの情報とに基づき先頭アドレスを特定することができる。しかし、受信プロセスがデータのサイズの情報を有していない場合、データの先頭アドレスを特定することができない。
【００１４】
そこで、図２に示すような方法を採用することでデータの先頭アドレスが特定される。具体的には、送信プロセスは、データ（以下では、データ本体と呼ぶ）の末尾に、データ本体のサイズの情報を含むフッタを付加する。そして、インターコネクト１５は、フッタが付加されたデータ本体を受信プロセスに送信する。
【００１５】
フッタが付加されたデータ本体がインターコネクト２５によってメインメモリに書き込まれると、送信先末尾アドレス（ここでは、フッタの末尾のアドレス）と、追加情報とが通知キューに書き込まれる。受信プロセスは、フッタのサイズ（フッタのサイズは固定である）と、送信先末尾アドレスとに基づきフッタの先頭アドレスを特定する。そして、受信プロセスは、フッタに含まれるデータ本体のサイズの情報を読み出し、データ本体のサイズからデータ本体の先頭アドレスを特定する。
【００１６】
但し、受信側ノードにおいて、インターコネクト２５によってメインメモリに書き込まれたデータ本体をＣＰＵが読み込む時、ＣＰＵのキャッシュメモリにデータ本体が存在しなければ、キャッシュミスが発生する。そのため、ＣＰＵはメインメモリにアクセスすることになるため、アクセスの終了までに時間がかかる。図３に示すように、フッタの読出しと、データ本体の読出しとにおいてキャッシュミスが発生する。
【００１７】
キャッシュミスによって発生するメモリアクセスを待つ時間を短縮する方法として、プリフェッチが知られている。しかし、プリフェッチは、アクセスされるメモリアドレスを指定することが前提となっており、また、メモリアクセスのタイミングより十分前のタイミング（具体的には、メモリアクセスにかかる時間と同程度の時間だけ前のタイミング）で開始されなければ効果が無い。図２の例の場合、フッタの読み出しによってデータ本体の先頭アドレスが計算され、そしてメモリアクセスが開始されるので、メモリアクセスの直前にならないとプリフェッチすることができない。つまり、プリフェッチを行ったとしても効果が無い。また、むやみにプリフェッチを行うと性能が逆に低下する。さらに、通信を複数回行う場合、次の通信で書き込むデータのサイズ及びメモリアドレス等は未知であるので、次の通信のためにそれらの情報を前の通信に含めておくことは普通はできない。
【００１８】
そこで、本実施の形態においては、以下のような方法によってキャッシュミスの発生を抑制する。
【００１９】
図４に、本実施の形態のシステム構成を示す。ノード１およびノード２は、例えば、ＨＰＣ（High Performance Computing）を実行する並列計算システムに含まれるコンピュータ装置である。ノード１およびノード２は、計算処理に使用されるデータを送受信するための通信ケーブルで接続され、データを送信および受信することができる。図４においてはノードの数が２であるが、ノードの数は３以上であってもよい。
【００２０】
ノード１は、ＣＰＵ１０と、メインメモリ１１と、補助記憶装置１２と、バス１３と、インターコネクト１５とを有する。ＣＰＵ１０は、演算部１０１と、キャッシュメモリ１０２とを有する。メインメモリ１１は、例えばＲＡＭ（Random Access Memory）である。補助記憶装置１２は、例えばＨＤＤ（Hard Disk Drive）であり、本実施の形態の処理を実行するためのプログラム１２１を格納する。プログラム１２１は、例えば、並列計算システム等における複数のノードが通信を行うための通信ライブラリであるＭＰＩ（Message Passing Interface）ライブラリのプログラムを含む。インターコネクト１５は、他のノードとデータを交換するためのハードウエアである。
【００２１】
ノード２は、ＣＰＵ２０と、メインメモリ２１と、補助記憶装置２２と、バス２３と、インターコネクト２５とを有する。ＣＰＵ２０は、演算部２０１と、キャッシュメモリ２０２とを有する。メインメモリ２１は、例えばＲＡＭである。補助記憶装置２２は、例えばＨＤＤであり、本実施の形態の処理を実行するためのプログラム２２１を格納する。プログラム２２１は、例えば、並列計算システム等における複数のノードが通信を行うための通信ライブラリであるＭＰＩライブラリのプログラムを含む。インターコネクト２５は、他のノードとデータを交換するためのハードウエアである。
【００２２】
プログラム１２１は、ＣＰＵ１０によってメインメモリ１１にロードされて実行されることで各種機能を実現する。例えばノード１が送信ノードであり且つノード２が受信ノードである場合、図５に示すように、ノード１においては、送信プロセス１１１が実現される。送信プロセス１１１は、他のノードにＲＤＭＡでデータを送信するための処理を実行する。また、ノード１には、書き込みを指示するための指示キュー１１２が、例えばメインメモリ１１上に実現される。
【００２３】
プログラム２２１は、ＣＰＵ２０によってメインメモリ２１にロードされて実行されることで各種機能を実現する。例えばノード１が送信ノードであり且つノード２が受信ノードである場合、図５に示すように、ノード２においては、受信プロセス２１１が実現される。受信プロセス２１１は、他のノードからＲＤＭＡでデータを受信するための処理を実行する。また、ノード２には、書き込みの完了を通知するための通知キュー２１２が、例えばメインメモリ２１上に実現される。
【００２４】
次に、図６乃至図１２を用いて、本実施の形態のシステムにおいて実行される処理を説明する。以下では、ノード１が送信ノードであり、ノード２が受信ノードであるとする。
【００２５】
まず、図６及び図７を用いて、送信ノードであるノード１の送信プロセス１１１の処理を説明する。ノード１における送信プロセス１１１は、メインメモリ１１上のデータ本体の末尾に、データ本体のサイズの情報を含むフッタを付加する（図６：ステップＳ１）。フッタのサイズは固定である。
【００２６】
送信プロセス１１１は、メインメモリ２１上に格納される全体データ（データ本体及びフッタを含む）の末尾アドレスから数えて全体データの先頭アドレスが何キャッシュライン前に位置するかを示すキャッシュライン数の情報を計算する。そして、送信プロセス１１１は、指示キュー１１２に、送信されるデータ本体が格納されているメインメモリ１１の領域の先頭アドレスである送信元先頭アドレスと、フッタが付加されたデータ本体のサイズであるデータサイズと、ＲＤＭＡ転送によってデータ本体が書き込まれるメインメモリ２１上の領域の先頭アドレスである送信先先頭アドレスと、キャッシュライン数の情報を含む追加情報とを含む送信指示を書き込む（ステップＳ３）。
【００２７】
図７に、フッタ及び送信指示の設定例を示す。図７において、ｆｏｏｔｅｒ＿ｓｉｚｅはフッタのサイズを表し、ｃａｃｈｅ＿ｌｉｎｅ＿ｓｉｚｅはキャッシュラインサイズを表し、ｓｏｕｒｃｅ＿ｈｅａｄ＿ａｄｄｒは送信元先頭アドレスを表し、ｄａｔａ＿ｓｉｚｅは全体データのサイズを表し、ｅｍｂｅｄｄｅｄ＿ｄａｔａは追加情報を表す。ここで、「／」は小数点以下を切り捨てる除算を表す。送信プロセス１１１は以上のような送信指示に従ってＲＤＭＡ ｗｒｉｔｅを実行する。
【００２８】
一方で、受信プロセス２１１は、完了通知から全体データが書き込まれた領域の末尾アドレスと追加情報とを読み出す。そして、受信プロセス２１１は、アドレスｎｏｔｉｃｅ．ｄｅｓｔｉｎａｔｉｏｎ＿ｔａｉｌ＿ａｄｄｒ−（ｎｏｔｉｃｅ．ｅｍｂｅｄｄｅｄ＿ｄａｔａ＋１）＊ｃａｃｈｅ＿ｌｉｎｅ＿ｓｉｚｅからｃａｃｈｅ＿ｌｉｎｅ＿ｓｉｚｅバイトごとにｎｏｔｉｃｅ．ｄｅｓｔｉｎａｔｉｏｎ＿ｔａｉｌ＿ａｄｄｒの手前のキャッシュラインまでプリフェッチを実行する。受信プロセス２１１の処理については、後で詳細に説明する。
【００２９】
送信プロセス１１１は、全体データの送信要求をインターコネクト１５に出力する（ステップＳ５）。そして処理は終了する。
【００３０】
図８を用いて、送信ノードであるノード１のインターコネクト１５が実行する処理を説明する。インターコネクト１５は、全体データの送信要求を送信プロセス１１１から受け取る（図８：ステップＳ１１）。
【００３１】
インターコネクト１５は、メインメモリ１１上の全体データを受信プロセス２１１にＲＤＭＡで送信する（ステップＳ１３）。なお、データ本体と共に、指示キュー１１２に書き込まれた情報を含む制御情報が受信プロセス２１１に送信される。そして処理は終了する。
【００３２】
以上のような処理を実行すれば、追加情報のサイズに上限があるため全体データのサイズそのものを受信プロセス２１１に通知できない場合においても、受信プロセス２１１は追加情報に基づきデータ本体の先頭アドレスが含まれる範囲を特定できるようになる。キャッシュライン数の情報は２バイト以下であるので、追加情報のサイズの上限を超えない。
【００３３】
図９を用いて、受信ノードであるノード２のインターコネクト２５が実行する処理を説明する。まず、インターコネクト２５は、全体データを送信ノードであるノード１から受信する（図９：ステップＳ２１）。
【００３４】
インターコネクト２５は、受信した全体データ（すなわち、データ本体及びフッタ）を、制御情報に従いメインメモリ２１に書き込む（ステップＳ２３）。
【００３５】
インターコネクト２５は、全体データの末尾アドレスと追加情報とを通知キュー２１２に書き込む（ステップＳ２５）。そして処理は終了する。
【００３６】
図１０を用いて、受信ノードであるノード２の受信プロセス２１１の処理を説明する。受信プロセス２１１は、通知キュー２１２に完了通知が有るか判定する（図１０：ステップＳ３１）。
【００３７】
通知キュー２１２に完了通知が無い場合（ステップＳ３３：Ｎｏルート）、ステップＳ３１の処理に戻る。一方、通知キュー２１２に完了通知が有る場合（ステップＳ３３：Ｙｅｓルート）、以下の処理が実行される。具体的には、受信プロセス２１１は、通知キュー２１２から、全体データの末尾アドレスと追加情報とを読み出す（ステップＳ３５）。
【００３８】
受信プロセス２１１は、全体データの末尾アドレスと、追加情報に含まれるキャッシュライン数と、キャッシュラインサイズとに基づき、プリフェッチの開始位置を特定する（ステップＳ３７）。ステップＳ３７においては、例えば、全体データの末尾アドレスから、（キャッシュライン数＋１）＊キャッシュラインサイズに相当する分だけ前の位置がプリフェッチの開始位置として特定される。但し、全体データの末尾アドレスではなく、全体データの末尾アドレスから所定範囲にあるアドレスを起点として特定されてもよい。
【００３９】
受信プロセス２１１は、ステップＳ３７において特定された開始位置から、キャッシュライン数＊キャッシュラインサイズの分だけ、メインメモリ２１からキャッシュメモリ２０２へのプリフェッチを行う（ステップＳ３９）。なお、ステップＳ３９の処理を実行すると、一部のデータ本体についてはプリフェッチが行われない可能性があるので、プリフェッチが行われなかったデータ本体については、メインメモリ２１から読み出される。また、フッタはプリフェッチされない。
【００４０】
受信プロセス２１１は、フッタをメインメモリ２１から読み出す（ステップＳ４０）。上で述べたように、フッタのサイズは固定であるので、全体データの末尾アドレスとフッタのサイズとからフッタの先頭アドレスが特定される。従って、ステップＳ４０においては、特定された先頭アドレスからフッタのサイズの分だけ読み出しが行われる。
【００４１】
受信プロセス２１１は、ステップＳ４０において読み出されたフッタに含まれる、データ本体のサイズの情報に基づき、データ本体の先頭アドレスを特定する（ステップＳ４１）。ステップＳ４０において特定されたフッタの先頭アドレスからデータ本体の末尾アドレスが特定されるので、データ本体の末尾アドレスとデータ本体のサイズとからデータ本体の先頭アドレスが特定される。
【００４２】
受信プロセス２１１は、ステップＳ４１において特定された先頭アドレスに基づき、データ本体をキャッシュメモリ２０２から読み出す（ステップＳ４３）。通常、キャッシュメモリ２０２に格納されるデータにはメインメモリ２１のアドレスの情報が付加されるので、その情報に基づきキャッシュメモリ２０２からデータ本体が読み出される。但し、上で述べたように、データ本体の一部がキャッシュメモリ２０２に存在しない場合が有るので、その場合にはメインメモリ２１から読み出される。そして処理は終了する。
【００４３】
図１１を用いて、上で説明した処理について説明を追加する。例えば図１１に示すように、「キャッシュライン数＝２」であることを表す追加情報が設定されている場合、２キャッシュライン分のメモリ領域についてプリフェッチが行われる。フッタが存在する部分に対してはプリフェッチされない。従って、フッタについてはキャッシュミスが発生するが、データ本体の大部分についてはキャッシュミスが発生しない。
【００４４】
従って、本実施の形態のようにプリフェッチを行うことで、図１２に示すように、データ本体のロードに要する時間を短縮することができるようになる。キャッシュライン数の計算、追加情報フィールドへのデータの埋め込み、追加情報フィールドからのデータの読み出し及びプリフェッチにも時間を要するが、キャッシュミスの抑制によって短縮される時間の方が長いので、全体としては時間が短縮される。
【００４５】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明したノード１及びノード２の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００４６】
また、上で説明したデータ構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００４７】
また、追加情報フィールドの大きさ、全体データのサイズそのものを追加情報として送信してもよい。
【００４８】
なお、本実施の形態を適用可能なデータ本体のサイズは追加情報フィールドの大きさによる。仮に、キャッシュラインサイズが１２８バイトであり且つ追加情報フィールドのサイズが８ビットであるとすると、最大で３２ＫｉＢまでのデータ本体について本実施の形態を適用することができる。
【００４９】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００５０】
本実施の形態の第１の態様に係る並列処理装置は、（Ａ）第１ノードと、（Ｂ）第２ノードとを有する。そして、第１ノードは、（ａ１）データと、データのサイズの情報とを、第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信する送信部を有する。そして、第２ノードは、（ｂ１）データと、データのサイズの情報とを第１ノードから受信し、データをメモリ領域に書き込む受信部と、（ｂ２）受信部によりデータが書き込まれた位置の情報と、データのサイズの情報とに基づき、データの少なくとも一部をプリフェッチするデータ処理部とを有する。
【００５１】
このようにすれば、データをメモリ領域から読み出す前にデータの少なくとも一部は予めプリフェッチされるので、キャッシュミスの発生を抑止することができる。キャッシュライン数の情報を使用すれば、データサイズ（単位は例えばバイト）の情報を使用する場合よりも情報量を少なくすることができるようになる。
【００５２】
また、データのサイズの情報は、キャッシュライン数の情報を含んでもよく、データが書き込まれた位置の情報は、データが書き込まれたメモリ領域の末尾アドレスを含んでもよい。
【００５３】
また、データ処理部は、（ｂ２１）キャッシュラインサイズにキャッシュライン数に所定数を加えた数を乗じることで算出されたサイズと、データが書き込まれたメモリ領域の末尾アドレスとに基づき、プリフェッチの開始位置を特定し、（ｂ２２）プリフェッチの開始位置から、算出されたキャッシュライン数にキャッシュラインサイズを乗じたサイズの分だけデータを読み出してもよい。データを適切にプリフェッチできるようになる。
【００５４】
また、データは、データ本体と、当該データ本体のサイズの情報とを含んでもよい。そして、データ処理部は、（ｂ３）データ本体のサイズの情報と、フッタのサイズとデータが書き込まれたメモリ領域の末尾アドレスとから算出されたフッタの先頭アドレスとに基づき、データ本体の先頭アドレスを特定し、（ｂ４）特定したデータ本体の先頭アドレスに基づき、キャッシュからデータ本体を読み出してもよい。キャッシュからデータを読み出すことができればメモリ領域へのアクセスは不要であるので、データの処理を開示できるようになるまでの時間を短縮できるようになる。
【００５５】
また、データが書き込まれる位置の情報は、データが書き込まれるメモリ領域の先頭アドレスの情報を含んでもよい。第２ノードがデータをメモリ領域に書き込めるようになる。
【００５６】
また、メモリ領域はメインメモリの領域であってもよい。
【００５７】
また、第１ノード及び第２ノードは、情報処理装置であってもよい。
【００５８】
本実施の形態の第２の態様に係る送信プログラムは、（Ｃ）記憶装置に格納されたデータを読み出し、（Ｄ）読み出されたデータと、データのサイズの情報とを、他のコンピュータにＲＤＭＡ（Remote Direct Memory Access）で送信する処理を含む。
【００５９】
本実施の形態の第３の態様に係る受信プログラムは、（Ｅ）データと、データのサイズの情報とを他のコンピュータから受信し、データをメモリ領域に書き込む受信部と、（Ｆ）データが書き込まれた位置の情報と、データのサイズの情報とに基づき、データの少なくとも一部をプリフェッチする処理を含む。
【００６０】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００６１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００６２】
（付記１）
第１ノードと、
第２ノードと、
を有し、
前記第１ノードは、
データと、前記データのサイズの情報とを前記第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信する送信部
を有し、
前記第２ノードは、
前記データと、前記データのサイズの情報とを前記第１ノードから受信し、前記データをメモリ領域に書き込む受信部と、
前記受信部により前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチするデータ処理部と、
を有する並列処理装置。
【００６３】
（付記２）
前記データのサイズの情報は、キャッシュライン数の情報を含み、
前記データが書き込まれた位置の情報は、前記データが書き込まれたメモリ領域の末尾アドレスを含む、
付記１記載の並列処理装置。
【００６４】
（付記３）
前記データ処理部は、
キャッシュラインサイズに前記キャッシュライン数に所定数を加えた数を乗じることで算出されたサイズと、前記データが書き込まれたメモリ領域の末尾アドレスとに基づき、前記プリフェッチの開始位置を特定し、
前記プリフェッチの開始位置から、算出された前記キャッシュライン数に前記キャッシュラインサイズを乗じたサイズの分だけ前記データを読み出す、
付記２記載の並列処理装置。
【００６５】
（付記４）
前記データは、データ本体と、当該データ本体のサイズの情報とを含み、
前記データ処理部は、
前記データ本体のサイズの情報と、前記フッタのサイズと前記データが書き込まれたメモリ領域の末尾アドレスとから算出された前記フッタの先頭アドレスとに基づき、前記データ本体の先頭アドレスを特定し、
特定した前記データ本体の先頭アドレスに基づき、キャッシュメモリから前記データ本体を読み出す、
処理をさらに実行する付記１記載の並列処理装置。
【００６６】
（付記５）
前記データが書き込まれた位置の情報は、前記データが書き込まれたメモリ領域の末尾アドレスの情報を含む、
付記１乃至４のいずれか１つ記載の並列処理装置。
【００６７】
（付記６）
前記メモリ領域はメインメモリの領域である、
付記１乃至５のいずれか１つ記載の並列処理装置。
【００６８】
（付記７）
前記第１ノード及び第２ノードは、情報処理装置である、
付記１乃至６のいずれか１つ記載の並列処理装置。
【００６９】
（付記８）
コンピュータに、
記憶装置に格納されたデータを読み出し、
読み出された前記データと、前記データのサイズの情報とを他のコンピュータにＲＤＭＡ（Remote Direct Memory Access）で送信する、
処理を実行させる送信プログラム。
【００７０】
（付記９）
コンピュータに、
データと、前記データのサイズの情報とを他のコンピュータから受信し、
受信した前記データをメモリ領域に書き込み、
前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチする、
処理を実行させる受信プログラム。
【００７１】
（付記１０）
第１ノードと第２ノードとを有する並列処理装置において実行されるデータ転送方法であって、
前記第１ノードは、データと、前記データのサイズの情報とを前記第２ノードにＲＤＭＡ（Remote Direct Memory Access）で送信し、
前記第２ノードは、前記データと、前記データのサイズの情報とを前記第１ノードから受信し、
前記第２ノードは、受信した前記データをメモリ領域に書き込み、
前記第２ノードは、前記データが書き込まれた位置の情報と、前記データのサイズの情報とに基づき、前記データの少なくとも一部をプリフェッチする、
処理を実行するデータ転送方法。
【符号の説明】
【００７２】
１，２  ノード    １０，２０  ＣＰＵ
１１，２１  メインメモリ    １２，２２  補助記憶装置
１３，２３  バス    １５，２５  インターコネクト
１０１，２０１  演算部    １０２，２０２  キャッシュメモリ
１２１，２２１  プログラム
１１１  送信プロセス    １１２  指示キュー
２１１  受信プロセス    ２１２  通知キュー
【図１】
2018045438.tif 000003
【図２】
2018045438.tif 000004
【図３】
2018045438.tif 000005
【図４】
2018045438.tif 000006
【図５】
2018045438.tif 000007
【図６】
2018045438.tif 000008
【図７】
2018045438.tif 000009
【図８】
2018045438.tif 000010
【図９】
2018045438.tif 000011
【図１０】
2018045438.tif 000012
【図１１】
2018045438.tif 000013
【図１２】
2018045438.tif 000014