(57)【要約】［課題］  転送が不要なデータの転送を効率よく削減するデータ転送装置を提供する。［解決手段］  本発明のデータ送信装置は、メモリと当該メモリに書き込みを行うプロセッサと、前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定検出手段と、前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段とを含む。
2014087654.tif 000002
【特許請求の範囲】
【請求項１】
メモリと当該メモリに書き込みを行うプロセッサと、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
を含むデータ送信装置。
【請求項２】
前記検出手段は、前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である検出範囲を受信し、当該検出範囲内の前記メモリに対して書き込みを検出し、
前記抽出手段は、前記転送範囲のうち、前記転送実行範囲に加え、前記検出範囲に含まれない範囲を、前記転送実行範囲として抽出する
請求項１に記載のデータ送信装置。
【請求項３】
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記検出範囲から除外する
請求項２に記載のデータ送信装置。
【請求項４】
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、さらに、前記書き込みが検出された前記範囲の更新の頻度を測定し、当該頻度が所定頻度を超えたことを検出すると、以降、前記範囲を前記監視範囲から除外する
請求項２又は３に記載のデータ送信装置。
【請求項５】
前記更新範囲を記憶する更新範囲記憶手段を含み、
前記検出手段は、特定した前記更新範囲を前記更新範囲記憶手段に格納する
請求項１乃至４のいずれかに記載のデータ送信装置。
【請求項６】
前記転送先ノードと、請求項１乃至５のいずれかに記載のデータ送信装置とを含む、情報処理システム。
【請求項７】
プロセッサにより書き込みが行われるメモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定し、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出し、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う
データ送信方法。
【請求項８】
メモリと当該メモリに書き込みを行うプロセッサを含むコンピュータを、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
して動作させるデータ送信プログラムを記憶する記録媒体。
【請求項９】
前記コンピュータを、
前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である検出範囲を受信し、当該検出範囲内の前記メモリに対して書き込みを検出する前記検出手段と、
前記転送範囲のうち、前記転送実行範囲に加え、前記検出範囲に含まれない範囲を、前記転送実行範囲として抽出する前記抽出手段と
して動作させる前記データ送信プログラムを記憶する請求項８に記載の記録媒体。
【請求項１０】
前記コンピュータを、
前記転送命令を複数回受信する前記抽出手段と、
検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記検出範囲から除外する前記検出手段と
して動作させる前記データ送信プログラムを記憶する請求項９に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ送信装置、データ送信方法、及びデータ送信プログラムに関し、特に分散メモリシステムでのデータ送信におけるデータ送信装置、データ送信方法、及びデータ送信プログラムに関する。
【背景技術】
【０００２】
独立したメモリ空間とプロセッサを持つ複数のノードで構成される分散メモリシステムでは、一般に、処理を複数のノードが協調して処理する場合、ノード間で複数回のデータ転送が行われる。この様なデータ転送は性能のボトルネックになることが知られているため、データ転送は極力少なくすることが望ましい。【０００３】
図１は、分散メモリシステムの例を表すブロック図である。【０００４】
分散メモリシステムのプログラミングモデルとして、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ−Ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｏｎ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔｓ）のようなアクセラレータを備えたシステムなどで利用されている、オフロードモデルがある。このモデルは、ホストノードがアクセラレータノードに対するデータ転送や処理の呼び出しを指示するモデルである。【０００５】
図２は、オフロードモデルを利用したシステムで行われる処理の順序の例を表す図である。図２の例では、ノード０がホストノードであり、ノード１がアクセラレータノードである。【０００６】
このようなシステム向けにオフロード機能を備えたライブラリがある。このライブラリは、ライブラリ関数内でアクセラレータへのデータ転送や処理の呼び出しを行う。このことにより、ライブラリを利用するプログラムは、データ転送などの手続きを行うことなく、アクセラレータを利用できる。【０００７】
図３は、ホストノードにおける、プログラムとライブラリによる処理の分担の例を表す図である。【０００８】
このようなライブラリでは、オフロードを行うライブラリ関数が複数回呼び出される場合、通常、ライブラリ関数が呼び出されるたびにデータ転送が行われる。これは、ライブラリは、複数回の呼び出しの間にデータが変更されているかどうかを判別できないため、再度データを送るという方式を取らざるを得ないからである。データが前回の呼び出しから変更されていない場合、そのデータを再度送ることは、本来は無駄である。そのため、このようなライブラリを用いる場合、無駄な転送が行われるという問題がある。【０００９】
無駄なデータの転送を削減するライブラリの一例のマニュアルが、非特許文献２に記載されている。非特許文献２は、MAGAMAライブラリのマニュアルである。MAGAMAライブラリはＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）向けのライブラリである。【００１０】
このライブラリは、データ転送と処理の呼び出しを行うライブラリ関数と、処理の呼び出しのみを行うライブラリ関数の両方を備える。このライブラリのユーザは、アクセラレータ上にデータがあり、かつデータが更新されていないことが明らかな場合に、前述の２つのライブラリ関数のうち後者のライブラリ関数を使用する。このことにより、無駄なデータ転送は行われない。【００１１】
また、特許文献１には、この様な無駄なデータ転送を削減する、複数のノードの間で仮想共有メモリを用いるシステムが記載されている。仮想共有メモリはソフトウェア分散共有メモリとも呼ばれる。【００１２】
特許文献１の各ノードは、スレッド化されたプログラムを実行するプロセッサと、各ノードに分散配置された分散メモリを含む。各ノードは、プログラムの起動時に、そのプログラムを、メモリへのデータの書き込みを行う書き込み側スレッドとメモリからデータを読み出す読み出し側スレッドに変換する。そして、各ノードは、それぞれのプロセッサにおいて変換されたスレッドプログラムを実行する。書き込み側スレッドは、書き込み側のスレッドが実行されるノードの分散メモリに対して、データの書き込みを行う。書き込み側のスレッドと、そのスレッドが書き込んだデータを読み出す読み出し側のスレッドが、別のノードで実行される場合、書き込み側のノードは、読み出し側のノードに、書き込まれたデータを転送する。データを受信した読み出し側のノードは、そのデータを、読み出し側のノードの分散メモリに書き込む。読み出し側のノードは、さらに、読み出し側のスレッドを起動する。読み出し側のスレッドは、そのデータを、読み出し側のノードのメモリから読み出す。【００１３】
非特許文献１には、アクセラレータノードがメモリアクセスを監視する機能を備えていない、オフロードモデルのシステムで分散共有メモリを実現する、非対称分散共有メモリ方式が記載されている。本方式では、メモリアクセスの監視は、ホストノードでのみで行われる。ホストノードがアクセラレータノードに処理を行わせる場合、前回アクセラレータノードに処理を行わせた後、ホストノードが書き込みを行った共有データを、すべてアクセラレータに転送する。このことにより、ホストノードは、アクセラレータの処理に必要なデータがアクセラレータ上に存在するようにする。【００１４】
特許文献２には、携帯電話機が接続された場合、その携帯電話に記憶されている電子メールの更新の有無を判定し、更新がある場合、その携帯電話から電子メールを取得する車載装置が記載されている。【００１５】
特許文献３には、コンテンツの要約情報のデータの取得要求を携帯電話から受けた場合に、要約情報のデータを携帯電話に送信する情報提供システムが記載されている。特許文献３の情報提供システムは、前回の取得要求で指定された要約情報のデータが更新されている場合にのみ、更新後の新しい要約情報のデータを携帯電話に送信する。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００３−０３６１７９号公報
【特許文献２】特開２０１２−１２８４９８号公報
【特許文献３】特開２０１２−０６９１３９号公報
【非特許文献】
【００１７】
【非特許文献１】"An Asymmetric Distributed Shared Memory Model for Heterogeneous Parallel Systems", Isaac Gelado, et al., ASPLOS2010
【非特許文献２】MAGMA version 0.2 Users' Guide, http://icl.cs.utk.edu/projectsfiles/magma/docs/magma-v02.pdf
【発明の概要】
【発明が解決しようとする課題】
【００１８】
非特許文献２のライブラリを使用する場合、アクセラレータ上にデータがあるかないかの判断を、ライブラリの利用者が行う必要がある。また、ライブラリ中で複数のデータが転送される場合に、一部のデータの転送を行わないことは困難である。従って、この場合、データ転送が不要なデータが転送されてしまう場合がある。【００１９】
特許文献１の技術では、書き込み側スレッドと読み込み側スレッドが別ノードで実行される場合、メモリへのデータの書き込みが行われるたびにデータの転送が行われる。従って、特許文献１の技術では、データ転送のオーバーヘッドが大きい。さらに、特許文献１の技術では、メモリへのデータの書き込みが行われるたびに、書き込み側のスレッドが終了し、読み込み側のスレッドが起動される。従って、特許文献１の技術では、メモリへのデータの書き込みを伴う処理のオーバーヘッドが大きい。【００２０】
非特許文献１に記載の方法では、ホストノードは、アクセラレータ上での処理で利用されるかどうかに関わらず、更新されているすべてのデータを転送する。従って、非特許文献１に記載の方法では、データ転送が不要なデータが転送されてしまう場合がある。【００２１】
特許文献２及び３の技術は、複数のノードで構成される分散メモリシステムにおいて、データ送信が不要なデータの送信を削減することはできない。【００２２】
本発明の目的の一つは、転送が不要なデータの転送を効率よく削減するデータ送信装置を提供することにある。
【課題を解決するための手段】
【００２３】
本発明のデータ送信装置は、メモリと当該メモリに書き込みを行うプロセッサと、前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信し、受信の度に、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段とを含む。【００２４】
本発明のデータ送信方法は、プロセッサにより書き込みが行われるメモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定し、前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出し、前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う。【００２５】
本発明の記録媒体は、メモリと当該メモリに書き込みを行うプロセッサを含むコンピュータを、前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段として動作させるデータ送信プログラムを記憶する。【００２６】
本発明は、係る記録媒体に格納されたデータ送信プログラムによっても実現可能である。
【発明の効果】
【００２７】
本発明には、転送が不要なデータの転送を効率よく削減することができるという効果がある。
【図面の簡単な説明】
【００２８】
【図１】図１は、分散メモリシステムの例を表すブロック図である。
【図２】図２は、オフロードモデルを利用したシステムで行われる処理の順序の例を表す図である。
【図３】図３は、ホストノードにおける、プログラムとライブラリによる処理の分担の例を表す図である。
【図４】図４は、第１の実施形態の情報処理システム１００の全体の構成の例を表すブロック図である。
【図５】図５は、第１の実施形態の情報処理システム１００の詳細な構成の例を表すブロック図である。
【図６】図６は、第１、第２の実施形態の、書き込み検出時の動作を表すフローチャートである。
【図７】図７は、更新範囲記憶部１１が記憶する、更新範囲の例である。
【図８】図８は、第１の実施形態のホストノード１の、データ転送時の動作を表すフローチャートである。
【図９】図９は、第２の実施形態の情報処理システム１００Ａの構成を表すブロック図である。
【図１０】図１０は、第２の実施形態のホストノード１Ａの、データの転送時の動作を表すフローチャートである。
【図１１】図１１は、第３の実施形態の情報処理システム１００Ｂの構成を表すブロック図である。
【図１２】図１２は、第３の実施形態のホストノード１Ｂの、書き込み検出時の動作を表すフローチャートである。
【図１３】図１３は、履歴記憶部１５が記憶する書き込みの履歴の例を表す図である。
【図１４】図１４は、第３の実施形態のホストノード１Ｂの、データ転送検出時の動作を表すフローチャートである。
【図１５】図１５は、第４の実施形態の情報処理システム１００Ｃの構成を表すブロック図である。
【図１６】図１６は、第５の実施形態の情報処理システム１００Ｄの構成の例を表すブロック図である。
【図１７】図１７は、第６の実施形態のデータ送信装置１Ｃの構成を表すブロック図である。
【図１８】図１８は、本発明の第１の構成例の情報処理システム１００の概要を表す図である。
【図１９】図１９は、オフロードライブラリ５０の詳細な構成を表す図である。
【図２０】図２０は、第１の構成例のデータ監視部５２の構成を示す図である。
【図２１】図２１は、第１の構成例のプログラム４０の例である。
【図２２】図２２は、第１の構成例のオフロードライブラリ５０が備える、掛け算を行う関数の例である。
【図２３】図２３は、初期状態の転送データ表を表す図である。
【図２４】図２４は、行列aとbの送信の後に更新された、転送データ表を表す図である。
【図２５】図２５は、行列aとbの送信の後に更新された、データ更新表９１を表す図である。
【図２６】図２６は、行列aに対する書き込みが行われた後変更された、データ更新表９１を表す図である。
【図２７】図２７は、第２の構成例の構成を示す図である。
【図２８】図２８は、第２の構成例のデータ転送ライブラリ５０Ａのデータ送信関数の例を表す図である。
【図２９】図２９は、第３の構成例の構成を表す図である。
【図３０】図３０は、第４の構成例の構成を表す図である。
【図３１】図３１は、第４の構成例の別形態の例を表す図である。
【図３２】図３２は、第５の構成例の構成の概要を表す図である。
【図３３】図３３は、本構成例の各ノードの詳細な構成を表す図である。
【図３４】図３４は、ホストノード１、ホストノード１Ａ、ホストノード１Ｂ、データ送信装置１Ｃ、転送元ノード１Ｄ、アクセラレータノード３、アクセラレータノード３Ａ、及び転送先ノード３Ｄを実現するために使用される、コンピュータ１０００の構成の一例を表す図である。
【発明を実施するための形態】
【００２９】
次に、本発明を実施するための形態について図面を参照して詳細に説明する。
【００３０】
（第１の実施形態）
図４は、本発明の第１の実施形態の情報処理システム１００の全体の構成の例を表すブロック図である。
【００３１】
図４を参照すると、情報処理システム１００は、ホストノード１と、アクセラレータノード３を含む。情報処理システム１００は、複数のアクセラレータノード３を含んでいてもよい。ホストノード１と、各アクセラレータノード３は、通信ネットワークである接続網４によって接続されている。ホストノード１と、各アクセラレータノード３と、接続網４は、同一の装置に含まれていてもよい。
【００３２】
本実施形態及び後述の他の実施形態の説明においては、主に、アクセラレータノード３が１台である場合の構成及び動作について述べる。また、以下の、各実施形態の詳細な構成を表すブロック図では、接続網４は図示されない。
【００３３】
図５は、本実施形態の情報処理システム１００の詳細な構成の例を表すブロック図である。
【００３４】
図５を参照すると、本実施形態の情報処理システム１００は、ホストノード１と、アクセラレータノード３を含む。ホストノード１は、プロセッサ２０とメモリ２１を含むデータ送信装置である。ホストノード１は、メモリ２１への書き込みを伴う処理を行うプログラムを、プロセッサ２０によって実行する。そして、ホストノード１は、メモリ２１に格納されているデータをアクセラレータノード３に送信する。
【００３５】
ホストノード１は、検出部１０と、更新範囲記憶部１１と、抽出部１２と、転送部１３を含む。さらに、ホストノード１は、プロセッサ２０と、メモリ２１に加えて、指示部２２を含む。指示部２２は、例えば、プログラムによって制御され、指示部２２として動作するプロセッサ２０である。プロセッサ２０を指示部２２として動作させるプログラムは、プロセッサ２０で動作するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）であっても、ＯＳ上で動作するライブラリであっても、あるいは、ＯＳ及びライブラリのいずれか一方又は双方を利用して動作するユーザプログラムであってもよい。
【００３６】
アクセラレータノード３は、プロセッサ３０と、メモリ３１を含む。アクセラレータノード３は、例えば、グラフィクスアクセラレータである。そして、プロセッサ３０は、例えば、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００３７】
本実施形態の情報処理システム１００には、ホストノード１とアクセラレータノード３による、オフロードモデルを用いた分散メモリシステムが採用されている。
【００３８】
ホストノード１では、プログラムを実行するプロセッサ２０が、メモリ２１に格納されているデータの読み書きを行いながら処理を実行する。そして、プロセッサ２０は、メモリ２１に格納されているデータを使用する処理の一部を、アクセラレータノード３のプロセッサ３０に実行させる。そのために、ホストノード１は、メモリ２１に格納されているデータを、アクセラレータノード３に送信する。本実施形態では、ホストノード１が、データの転送元ノードであり、アクセラレータノード３が、データの転送先ノードである。
【００３９】
指示部２２は、抽出部１２に対して、例えばプログラムによって決められた範囲の、転送元ノードのメモリに格納されているデータを転送する指示である転送命令を送信する。転送命令は、メモリの、転送するデータが格納されている範囲である、転送範囲を含んでいればよい。転送命令は、転送範囲そのものであってもよい。メモリの範囲は、例えば、データが格納されているメモリの領域の先頭アドレスとサイズである。メモリの範囲は、先頭アドレスとサイズの、複数の組み合わせであってもよい。本実施形態の転送範囲は、ホストノード１のメモリ２１における範囲である。
【００４０】
検出部１０は、所定範囲内のメモリ２１に対する書き込みを検出する。検出部１０が書き込みを検出する対象である、メモリ２１の範囲が、監視範囲である。本実施形態では、監視範囲は、メモリ２１の一部又は全部である。監視範囲は、予め定められていてもよい。検出部１０は、例えば指示部２２から、監視範囲を受信してもよい。その場合、指示部２２は、例えばプロセッサ２０で動作するプログラムの制御によりプロセッサ２０が決定した監視範囲を、検出部１０に送信すればよい。
【００４１】
検出部１０は、書き込みが検出された範囲を、更新範囲記憶部１１に格納する。また、転送元ノードのメモリにおいて、書き込みが検出された範囲が、更新範囲である。本実施形態の更新範囲は、メモリ２１において、書き込みが検出された範囲である。
【００４２】
更新範囲記憶部１１は、検出部１０により検出された更新範囲を記憶する。
【００４３】
本実施形態では、転送先ノードであるアクセラレータノード３は、更新範囲を除く監視範囲内のメモリ２１に格納されているデータと同一のデータを保持している。例えば、検出部１０による書き込みの検出の開始時に、監視範囲内のメモリ２１に格納されているデータは、予め転送先ノードであるアクセラレータノード３に転送されていればよい。そして、更新範囲記憶部１１は、更新範囲を記憶していなければよい。あるいは、書き込みの検出の開始時に、更新範囲記憶部１１は、メモリ２１の監視範囲のうち、アクセラレータノード３が保持していないデータが格納されている範囲を、更新範囲として記憶していてもよい。
【００４４】
抽出部１２は、ホストノード１の指示部２２から、例えば前述の転送命令を受信することにより、転送範囲を取得する。
【００４５】
抽出部１２は、転送範囲のうち、更新範囲記憶部１１が記憶する更新範囲に含まれる範囲を抽出する。すなわち、抽出部１２は、転送範囲のうち、書き込みが行われ、格納されているデータが更新された範囲を、転送実行範囲として抽出する。本実施形態では、後述するように、転送部１３は、メモリ２１において、転送実行範囲に格納されているデータを転送する。転送範囲に、監視範囲に含まれない範囲が存在する場合、抽出部１２は、さらに、転送範囲に含まれ監視範囲に含まれない範囲を、転送実行範囲として抽出すればよい。
【００４６】
転送部１３は、メモリ２１の転送実行範囲に格納されているデータを、転送先ノードであるアクセラレータノード３に転送する。転送部１３は、アクセラレータノード３のメモリ３１に、転送されるデータを書き込めばよい。アクセラレータノード３は、後述するように、データを受信し、受信したデータをメモリ３１に書き込む受信部３２を含んでいてもよい。そして、転送部１３は、転送されるデータをその受信部３２に送信してもよい。
【００４７】
次に、本実施形態のホストノード１の動作について、図面を参照して詳細に説明する。
【００４８】
図６は、本実施形態のホストノード１の、書き込み検出時における動作を表すフローチャートである。
【００４９】
図６のホストノード１の動作開始時において、転送先ノードであるアクセラレータノード３は、メモリ２１の監視範囲に格納されているデータと同一のデータを保持している。そして、更新範囲記憶部１１には更新範囲は格納されていない。
【００５０】
図６を参照すると、まず検出部１０が、指示部２２から、監視範囲を取得する（ステップＳ１０１）。
【００５１】
図５や他の図に示すメモリ２１の斜線部分が、監視範囲の例を表す。監視範囲は、メモリ２１の一部であっても、全体であってもよい。監視範囲は、例えばホストノード１の設計者によって、予め決められていてもよい。この場合、監視範囲は、書き込みが行われる可能性がある範囲を含んでいればよい。また、監視範囲が予め決められている場合、ホストノード１は、ステップＳ１０１の動作を行わなくてよい。図６に示す例のように、検出部１０が指示部２２から監視範囲を取得する場合、例えばプログラムによって制御されるプロセッサ２０が、監視範囲を決定すればよい。プログラムによって制御されるプロセッサ２０は、例えば、アクセラレータノード３に転送され、アクセラレータノード３が行う処理において使用されるデータが格納される、転送範囲と同一の範囲になるように、監視範囲を決めてもよい。
【００５２】
次に、検出部１０が、監視範囲内のメモリ２１に対する書き込みを検出する（ステップＳ１０２）。
【００５３】
本実施形態の例では、検出部１０は、メモリ２１への書き込みを検出することにより、メモリ２１に格納されているデータの更新を検出する。後述の本実施形態の具体例の説明において、検出部１０によるメモリ２１への書き込みの検出方法の例について、詳細に説明する。検出部１０は、他の方法により、データの更新を検出してもよい。
【００５４】
書き込みが検出されなかった場合（ステップＳ１０３においてＮｏ）、検出部１０は、監視範囲内のメモリ２１に対する書き込みの監視を継続する。すなわち、ホストノード１の動作はステップＳ１０２に戻る。
【００５５】
書き込みが検出された場合（ステップＳ１０３においてＹｅｓ）、検出部１０は、書き込みが検出された範囲である更新範囲を、更新範囲記憶部１１に格納する（ステップＳ１０４）。
【００５６】
図７は、更新範囲記憶部１１が記憶する、更新範囲の例である。
【００５７】
更新範囲記憶部１１は、更新範囲として、例えば、データが書き込まれた領域の先頭アドレスと、書き込まれたデータのサイズの組み合わせを記憶する。更新範囲記憶部１１は、先頭アドレスとサイズの組み合わせ複数からなる、更新範囲を記憶していてもよい。書き込みが検出された際に、更新範囲記憶部１１に既に更新範囲が格納されている場合、検出部１０は、更新範囲記憶部１１に格納されている更新範囲を更新する。更新範囲記憶部１１が更新範囲を図７に示す例の形で記憶する場合、検出部１０は、新たに検出された更新範囲を、更新範囲記憶部１１に追加すればよい。検出された更新範囲と同じ更新範囲が既に更新範囲記憶部１１に格納されている場合、検出部１０は更新範囲の更新を行わなくてよい。新たに検出された更新範囲と、更新範囲記憶部１１に格納されている更新範囲とが、互いに重複する場合、検出部１０は、新たに検出された更新範囲を含むように、更新範囲記憶部１１に格納されている更新範囲を更新すればよい。
【００５８】
ステップＳ１０４の動作の終了後、ホストノード１の動作は、ステップＳ１０２に戻る。
【００５９】
次に、ホストノード１の、データ転送時における動作について、図面を参照して詳細に説明する。
【００６０】
図８は、ホストノード１の、データ転送時における動作を表すフローチャートである。
【００６１】
ホストノード１の指示部２２は、抽出部１２に対して、転送範囲を送信し、そして、メモリ２１の転送範囲に格納されているデータの転送を指示する。転送範囲をホストノード１の抽出部１２に送信することが、データの転送の指示であってもよい。情報処理システム１００が複数のアクセラレータノード３を含む場合、指示部２２は、転送範囲に加えて、転送先であるアクセラレータノード３のノード識別子を、ホストノード１の抽出部１２に送信すればよい。
【００６２】
図８を参照すると、まず、抽出部１２が、ホストノード１の指示部２２から、転送範囲を取得する（ステップＳ１１１）。
【００６３】
前述のように、転送範囲は、例えば、転送されるデータが格納されている領域の先頭アドレスとサイズの組み合わせである。転送範囲は、先頭アドレスとサイズの組み合わせが複数含まれているリストであってもよい。
【００６４】
情報処理システム１００が複数のアクセラレータノード３を含む場合、抽出部１２は、転送範囲に加えて、転送先のアクセラレータノード３のノード識別子を、指示部２２から取得する。例えば情報処理システム１００がアクセラレータノード３を一つしか含まない場合のように、転送先のアクセラレータノード３が特定されている場合、抽出部１２は転送先のアクセラレータノード３のノード識別子を取得しなくてよい。
【００６５】
次に、抽出部１２が、転送範囲のうち、更新範囲に含まれる範囲を、転送実行範囲として抽出する（ステップＳ１１２）。
【００６６】
前述のように、転送範囲は、監視範囲に含まれるよう設定されていればよい。転送範囲に、監視範囲に含まれない範囲が存在する場合、抽出部１２は、その範囲も転送実行範囲にすればよい。その場合も、抽出部１２は、転送範囲と監視範囲に含まれ、更新範囲に含まれない範囲を、転送実行範囲として抽出しない。
【００６７】
転送先ノードであるアクセラレータノード３は、少なくともメモリ２１の監視範囲のうち書き込みが行われていない範囲に格納されているデータと、同一のデータを保持している。一方、メモリ２１の監視範囲のうち書き込みが行われた範囲に格納されているデータは、書き込みにより更新されている。アクセラレータノード３は、メモリ２１のうち書き込みが行われた範囲に格納されているデータと同一のデータを保持しているとは限らない。メモリ２１において書き込みが検出されたデータが格納されている範囲が、更新範囲である。抽出部１２は、転送範囲のうち、更新範囲に含まれる範囲を抽出することで、転送範囲内で書き込みが検出された範囲を、転送実行範囲として抽出する。すなわち、抽出部１２は、転送範囲に格納されているデータのうち、書き込みがあったデータを、転送の対象にする。
【００６８】
転送実行範囲が存在しない場合（ステップＳ１１３においてＮｏ）、処理は終了する。転送範囲が監視範囲に含まれているのであれば、転送範囲のうち、書き込みが行われたデータが格納されている範囲が、転送実行範囲である。その場合、転送範囲に格納されているデータに、書き込みが行われたデータが存在しない場合、処理は終了する。なお、転送範囲のうち監視範囲に含まれない範囲が存在し、その範囲が転送実行範囲として抽出されているのであれば、転送範囲に格納されているデータへの書き込みの有無に関わらず、転送実行範囲は存在する。
【００６９】
転送実行範囲が存在する場合（ステップＳ１１３においてＹｅｓ）、処理はステップＳ１１４に進む。転送範囲に格納されているデータに、書き込みが行われたデータが存在する場合、その書き込みが行われたデータが格納されている範囲は、転送実行範囲に含まれる。また、転送範囲のうち監視範囲に含まれない範囲が存在し、その範囲が転送実行範囲として抽出されているのであれば、処理はステップＳ１１４に進む。
【００７０】
ステップＳ１１４において、転送部１３は、抽出部１２が抽出した転送実行範囲内のメモリ２１に格納されているデータを、転送先ノードであるアクセラレータノード３に送信する。
【００７１】
メモリ３１の、転送されるデータが格納される範囲を、以下では格納範囲と表記する。格納範囲は、例えば転送元ノードにより決定される。転送部１３は、例えば指示部２２から、格納範囲を取得すればよい。転送部１３が格納範囲を決定してもよい。転送先ノードが格納範囲を決定してもよい。
【００７２】
転送部１３は、メモリ２１に格納されているデータを直接読み出し、アクセラレータノード３のメモリ３１に直接書き込むように設計されていればよい。また、転送部１３は、メモリ３１にデータを書き込む受信部３２に、データを送信するよう設計されていてもよい。この場合、転送先ノードが格納範囲を決定するよう設計されていないのであれば、転送部１３は、データに加えて格納範囲を受信部３２に送信すればよい。そして、受信部３２は、転送されたデータをメモリ３１の格納範囲に格納すればよい。
【００７３】
データの転送の終了後、転送部１３は、格納されているデータが転送された転送実行範囲に含まれる範囲を、更新範囲記憶部１１に格納されている更新範囲から除去する（ステップＳ１１５）。
【００７４】
これにより、格納されているデータの転送が行われた範囲は、その範囲が次に抽出部１２が取得する転送範囲に含まれていても、その範囲に対して転送範囲取得までに再び書き込みが行われない場合、データ転送の対象にならない。
【００７５】
以上で説明した本実施形態には、転送が不要なデータの転送を効率よく削減することができるという第１の効果がある。
【００７６】
その理由は、抽出部１２が、監視範囲に含まれる転送範囲のうち、更新範囲に含まれる範囲を転送実行範囲として抽出し、更新範囲に含まれない範囲を転送実行範囲として抽出しないからである。そして、転送部１３は、メモリ２１の転送実行範囲に格納されているデータを、転送先ノードに送信する。すなわち、転送部１３は、メモリ２１の、データの転送が指示された範囲である転送範囲で監視範囲に格納されているデータのうち、書き込みが行われたデータのみを転送する。前述のように、本実施形態では、転送先ノードは、監視範囲のうち、転送元ノードの、更新範囲に含まれない範囲のメモリに格納されているデータと同じデータを保持している。転送先ノードが保持するデータの転送は、無駄なデータの転送である。従って、転送部１３は、転送元ノードの転送範囲内のメモリに格納されているデータのうち、書き込みが行われたデータだけを転送することで、無駄なデータの転送を削減することができる。
【００７７】
また、本実施形態には、メモリ２１に対する書き込みの有無を監視する負荷を軽減できるという第２の効果がある。
【００７８】
その理由は、抽出部１２が、さらに、転送範囲に含まれ監視範囲に含まれない範囲を、転送実行範囲として抽出するからである。メモリ２１のある範囲が転送範囲に含まれていれば、その範囲に格納されているデータは転送先ノードに転送される。従って、本実施形態は、例えば、サイズの小さいデータが格納されている範囲を予め監視範囲から除外したり、監視範囲を転送が予定されているデータが格納されている範囲だけに限定したりすることにより、書き込みの有無を監視する負荷を軽減することができる。
【００７９】
（第２の実施形態）
次に、本発明の第２の実施形態について、図面を参照して詳細に説明する。
【００８０】
図９は、本実施形態の情報処理システム１００Ａの構成を表すブロック図である。
【００８１】
図９を参照すると、情報処理システム１００Ａは、ホストノード１Ａと、アクセラレータノード３を含む。本実施形態では、ホストノード１Ａが転送元ノードであり、アクセラレータノード３が転送先ノードである。
【００８２】
図９を図５と比較すると、本実施形態の情報処理システム１００Ａの構成と第１の実施形態の情報処理システム１００の構成は、次の相違を除き同じである。情報処理システム１００Ａと情報処理システム１００の相違は、情報処理システム１００Ａがホストノード１ではなくホストノード１Ａを含むことである。また、ホストノード１とホストノード１Ａの相違は、ホストノード１Ａが転送済範囲記憶部１４を含むことである。さらに、ホストノード１Ａは、削除部１６を含んでいてもよい。
【００８３】
転送済範囲記憶部１４は、転送部１３がメモリ２１からアクセラレータノード３に転送したデータが格納されている範囲である、転送済範囲を記憶する。
【００８４】
本実施形態の抽出部１２は、転送範囲のうち更新範囲に含まれる範囲に加えて、転送範囲のうち転送済範囲に含まれない範囲を、転送実行範囲として抽出する。
【００８５】
また、本実施形態の転送部１３は、さらに、データの転送の終了後、メモリ２１の、転送されたデータが格納されている範囲を、転送済範囲として、転送済範囲記憶部１４に格納する。
【００８６】
削除部１６は、例えば指示部２２から、転送先ノードのメモリの、転送されたデータが格納されている範囲を受信する。本実施形態では転送先ノードはアクセラレータノード３であり、転送先ノードのメモリはメモリ３１である。そして、削除部１６は、転送先ノードのメモリの、受信した範囲に格納されているデータを、消去する。
【００８７】
次に、本実施形態のホストノード１Ａの動作について、図面を参照して詳細に説明する。
【００８８】
図６は、本実施形態のホストノード１Ａの、書き込み検出時における動作を表すフローチャートである。本実施形態のホストノード１Ａの書き込み検出時における動作は、第１の実施形態のホストノード１Ａの動作と同じである。
【００８９】
図１０は、本実施形態のホストノード１Ａの、データの転送時における動作を表すフローチャートである。
【００９０】
動作開始時において、アクセラレータノード３が、メモリ２１に格納されているデータと同一のデータを保持していなければ、転送済範囲記憶部１４は転送済範囲を記憶していない。
【００９１】
図１０に示すステップＳ１１１、ステップＳ１１３、ステップＳ１１４、及びステップＳ１１５の動作は、図８における同一の符号のステップの動作と同じであるので、説明を省略する。
【００９２】
ステップＳ２０１で、抽出部１２は、転送範囲のうち更新範囲に含まれる範囲に加えて、転送範囲のうち転送済範囲に含まれない範囲を、転送実行範囲として抽出する。前述のように、抽出部１２は、転送範囲のうち監視範囲に含まれない範囲が存在する場合、更にその範囲も、転送実行範囲として抽出すればよい。
【００９３】
転送先ノードであるアクセラレータノード３は、転送済範囲記憶部１４が記憶する転送済範囲のうち更新範囲を除く範囲の、メモリ２１に格納されているデータと、同一のデータを保持している。一方、アクセラレータノード３は、メモリ２１の、転送範囲のうち転送済範囲に含まれない範囲に格納されているデータを保持していない。抽出部１２は、転送範囲のうち、転送済範囲に含まれない範囲を、転送実行範囲として抽出する。
【００９４】
また、メモリ２１の、転送済範囲のうち更新範囲に含まれる範囲に格納されているデータは、書き込みにより更新されている。抽出部１２は、さらに、転送範囲のうち更新範囲に含まれる範囲を、その範囲が転送済範囲に含まれていても、転送実行範囲として抽出する。
【００９５】
ステップＳ２０２で、転送部１３は、データの転送後、転送されたデータが格納されている転送実行範囲を、転送済範囲として、転送済範囲記憶部１４に格納する。
【００９６】
ステップＳ２０２の後、ホストノード１の動作は、ステップＳ１１１に戻る。そして、抽出部１２は、次の転送範囲を取得する。抽出部１２は、例えば、再び指示部２２が転送範囲を送信するまで待機すればよい。
【００９７】
前述のように、ホストノード１Ａは、転送したデータを転送先ノードから削除する削除部１６を含んでいてもよい。このような構成であれば、本実施形態のホストノード１Ａは、転送先ノードが保持するデータ量の増大を抑制することができる。
【００９８】
削除部１６は、例えば指示部２２から、メモリ３１において削除の対象であるデータが格納されている範囲である削除範囲を受信し、削除範囲に格納されているデータを、メモリ３１から消去する。削除範囲は、削除の対象のデータの格納範囲、すなわち、メモリ３１の、削除対象のデータが格納されている領域の、先頭アドレス及びデータサイズであればよい。削除範囲は、メモリ２１から読み出されてアクセラレータノード３に転送された、メモリ３１において削除の対象であるデータが、メモリ２１において格納されている領域の先頭アドレス及びデータサイズであってもよい。この場合、転送部１３が、データの転送終了時に、その転送されたデータが格納されている転送済範囲と、そのデータが格納されたメモリ３１の範囲である格納範囲とを関連付けて、転送済範囲記憶部１４に格納するよう設計されていればよい。削除部１６は、メモリ２１から読み出されてアクセラレータノード３に転送された、メモリ３１において削除の対象であるデータが、メモリ２１において転送時に格納されていた転送済範囲を指示部２２から受信する。そして、削除部１６は、その転送済範囲に対応付けられている格納範囲を転送済範囲記憶部１４から読み出す。削除部１６は、メモリ３１の、読み出した格納範囲に格納されているデータを消去する。
【００９９】
削除部１６は、格納範囲のデータの消去後、消去したデータの格納範囲と、その格納範囲に対応する転送済範囲を、転送済範囲記憶部１４から削除すればよい。
【０１００】
以上で説明した本実施形態には、第１の実施形態の第１及び第２の効果と同じ効果がある。その理由は、第１の実施形態の第１及び第２の効果の理由と同じである。
【０１０１】
本実施形態には、さらに、転送範囲に、アクセラレータノード３が保持していないデータが格納されている範囲が含まれている場合にも、無駄なデータの転送を削減できるという効果がある。
【０１０２】
その理由は、抽出部１２が、転送範囲のうち更新範囲に含まれる範囲に加えて、転送範囲のうち転送済範囲に含まれない範囲を、転送実行範囲として抽出するからである。このことにより、転送部１３は、転送先ノードが保持するデータを転送せずに、書き込みが行われたデータと、転送先ノードが保持していないデータの転送を行うことができる。
【０１０３】
（第３の実施形態）
次に、本発明の第３の実施形態について、図面を参照して詳細に説明する。
【０１０４】
図１１は、本実施形態の情報処理システム１００Ｂの構成を表すブロック図である。
【０１０５】
図１１を参照すると、情報処理システム１００Ｂは、ホストノード１Ｂと、ホストノード１と、アクセラレータノード３を含む。本実施形態では、ホストノード１Ｂが転送元ノードであり、アクセラレータノード３が転送先ノードである。
【０１０６】
図１１と図５を比較すると、本実施形態の情報処理システム１００Ｂの構成と第１の実施形態の情報処理システム１００の構成は、次の相違を除き同じである。情報処理システム１００Ｂと情報処理システム１００の相違は、情報処理システム１００Ｂがホストノード１ではなくホストノード１Ｂを含むことである。また、ホストノード１とホストノード１Ｂの相違は、ホストノード１Ｂが履歴記憶部１５を含んでいてもよいことである。
【０１０７】
本実施形態の検出部１０は、メモリ２１における監視範囲内への書き込みが検出された際、その書き込みが所定の条件に合致する場合、メモリ２１の、その書き込みが行われた範囲を、監視範囲から除外する。検出部１０は、例えば、書き込みが検出された範囲のサイズが所定サイズ未満の場合、その範囲を監視範囲から除外する。あるいは、検出部１０は、書き込みが検出された範囲に対する書き込みの頻度が所定頻度以上である場合、その範囲を監視範囲から除外する。以下、検出部１０により監視範囲から除外された範囲を、除外範囲と表記する。
【０１０８】
履歴記憶部１５は、書き込みの履歴を記憶する。検出部１０は、書き込みの検出時に、履歴記憶部１５に格納された書き込みの履歴の更新を行う。検出部１０が、書き込みの頻度により除外範囲の監視範囲からの除外を行うよう構成されていない場合、履歴記憶部１５は存在しなくてよい。
【０１０９】
除外範囲が監視範囲から除外された後に、転送部１３が受信する転送範囲に除外範囲が含まれている場合、メモリ２１における除外範囲への書き込みの有無に関わらず、転送部１３は、メモリ２１における除外範囲に格納されているデータを、転送先ノードに転送する。
【０１１０】
次に、本実施形態のホストノード１Ｂの動作について、図面を参照して詳細に説明する。
【０１１１】
図１２は、本実施形態のホストノード１Ｂの、書き込み検出時における動作を表すフローチャートである。ステップＳ１０１からステップＳ１０４までの動作は、図６における同じ符号のステップの動作と同じである。
【０１１２】
検出部１０が書き込みの頻度を検出するよう構成されている場合、ステップＳ１０４の動作の後、検出部１０は、履歴記憶部１５に格納されている書き込みの履歴を更新する（ステップＳ３０１）。検出部１０が書き込みの頻度を検出するよう構成されてない場合、検出部１０は、ステップＳ３０１の動作を行わなくてよい。
【０１１３】
検出部１０は、書き込みが行われた領域の先頭アドレス及びサイズと、その書き込みが行われた日時との組み合わせを、履歴記憶部１５に格納する。あるいは、検出部１０は、書き込みの検出時に、例えば所定の時刻以降に行われた書き込みの、領域毎の回数を、履歴記憶部１５に格納してもよい。
【０１１４】
図１３は、履歴記憶部１５が記憶する書き込みの履歴の例を表す図である。図１３の例では、履歴記憶部１５は所定時刻以降の書き込みの回数を記憶する。
【０１１５】
次に、検出部１０は、検出された書き込みの特徴を検出する（ステップＳ３０２）。書き込みの特徴は、例えば、一度に書き込まれたデータのサイズすなわちその書き込みが行われた領域のサイズである。書き込みの特徴は、書き込みが行われた領域毎の書き込みの頻度すなわち更新の頻度であってもよい。書き込みの特徴は、書き込みが行われた領域のサイズ及びその領域の更新の頻度であってもよい。
【０１１６】
検出部１０は、例えば、書き込みが行われた領域のサイズを検出する。そして、検出部１０は、検出されたサイズが所定サイズ未満である場合、その領域を監視範囲から除外する。検出部１０は、書き込みが行われた領域のサイズを、例えば、プロセッサ２０とメモリ２１の信号から検出してもよい。検出部１０は、プロセッサ２０が実行する書き込み命令を解析することにより、書き込まれるデータのサイズを検出してもよい。
【０１１７】
また、例えば、検出部１０は、監視範囲内の領域毎の、書き込みの頻度を検出してもよい。検出部１０は、履歴記憶部１５に格納されている、書き込みの範囲と日時の組み合わせや、書き込みの回数から、領域毎の書き込みの頻度を算出する。書き込みの頻度は、例えば、過去単位時間当たりの書き込みの回数である。書き込みの頻度は、例えば、検出部１０が指示部２２に指示された時刻以降の、書き込み回数であってもよい。
【０１１８】
前述の所定サイズや所定頻度は、予め決められていればよい。検出部１０が、前述の所定サイズや所定頻度を、指示部２２から受信してもよい。また、検出部１０は、サイズの検出と頻度の測定の双方を行ってもよい。
【０１１９】
次に、検出部１０は、検出された特徴が所定の条件に一致する書き込みが検出された範囲を、監視範囲から除外する（ステップＳ３０３）。
【０１２０】
前述のように、検出部１０は、例えば、書き込みが検出された領域のサイズが所定サイズ未満である場合、その領域を監視範囲から除外する。あるいは、検出部１０は、例えば、書き込みが検出された領域に対する書き込みの頻度が所定頻度以上である未満である場合、その領域を監視範囲から除外してもよい。あるいは、検出部１０は、例えば、書き込みが検出された領域のサイズが所定サイズ未満であり、かつ、その領域に対する書き込みの頻度が所定頻度以上である未満である場合、その領域を監視範囲から除外してもよい。そして、検出部１０は、以後、監視範囲から除かれた範囲に対して、書き込みの検出を行わない。
【０１２１】
次に、本実施形態のホストノード１Ｂの、データ転送検出時の動作について、図面を参照して詳細に説明する。
【０１２２】
図１４は、本実施形態のホストノード１Ｂの、データ転送検出時の動作を表すフローチャートである。図１４のステップＳ３１１以外のステップの動作は、図６における同じ符号のステップの動作と同じである。
【０１２３】
ステップＳ３１１で、抽出部１２は、転送範囲のうち、更新範囲に含まれる範囲と、監視範囲から除外された範囲を、転送実行範囲として抽出する（ステップＳ３１１）。
【０１２４】
抽出部１２は、前述のように、転送範囲に含まれ、監視範囲に含まれない領域を、転送実行範囲として抽出する。従って、検出部１０により監視範囲から除外された領域は、抽出部１２により、転送実行範囲として抽出される。
【０１２５】
前述のように、転送部１３は、メモリ２１の、転送実行範囲内に格納されているデータを、転送先ノードに転送する。監視範囲から除外された領域は転送実行範囲に含まれるので、監視範囲から除外された領域に格納されているデータは、検出部１０により転送先ノードに転送される。
【０１２６】
あるいは、検出部１０が、履歴記憶部１５や他の図示しない記憶部に、除外範囲を格納してもよい。そして、抽出部１２は、転送範囲に含まれる除外範囲を、転送実行範囲に加えてもよい。
【０１２７】
以上で説明した本実施形態には、第１の実施形態と同じ効果がある。その理由は、第１の実施形態における理由と同じである。
【０１２８】
さらに、本実施形態には、書き込みの検出の負荷を軽減できるという効果がある。
【０１２９】
その理由は、検出部１０が抽出した、書き込みが検出された領域のサイズが所定サイズより小さい領域や、書き込みが検出された領域に対する書き込みの頻度が所定頻度より小さい領域を、監視範囲から除外するからである。検出部１０は、監視範囲から除外した範囲に対して、書き込みの検出を行わない。
【０１３０】
一方、抽出部１２は、検出部１０が監視範囲から除外した範囲を、その範囲に対する書き込みの有無にかかわらず、転送実行範囲として抽出する。従って、検出部１０が監視範囲から除外した範囲に格納されているデータは、その範囲が転送範囲に含まれているなら、そのデータに対する書き込みの有無にかかわらず、転送される。
【０１３１】
しかし、所定サイズ未満の範囲が監視範囲から除外される場合、データのサイズが小さいので、転送されるデータ量が増加することによる負荷の増加は少ない。また、検出部１０が抽出する特徴が頻度であり、頻度が所定回数以上の範囲が監視範囲から除外される場合、除外された範囲が監視対象であっても、その範囲のデータが転送される場合が多い。従って、監視範囲から除外された上述の範囲に格納されているデータを転送することによる転送の負荷の増加は少ない。
【０１３２】
また、ホストノード１Ｂは、第２の実施形態のホストノード１Ａと同様、転送済範囲記憶部１４を含んでいてもよい。その場合、ステップＳ３１１で、抽出部１２は、転送範囲のうち、送信済範囲に含まれない範囲と、更新範囲に含まれる範囲と、監視範囲から除外された範囲を合わせて、転送実行範囲として抽出する。転送部１３は、第２の実施形態の転送部１３と同様に動作する。
【０１３３】
この場合、本実施形態には、さらに、第２の実施形態の効果と同じ効果がある。その理由は、第２の実施形態における理由と同じである。
【０１３４】
（第４の実施形態）
次に、本発明の第４の実施形態について、図面を参照して詳細に説明する。
【０１３５】
図１５は、本実施形態の情報処理システム１００Ｃの構成を表すブロック図である。
【０１３６】
本実施形態の情報処理システム１００の各構成要素は、図５に示す第１の実施形態の情報処理システム１００Ｃの同じ番号の構成要素と同じである。図５に示す情報処理システム１００Ｃは、ホストノード１とアクセラレータノード３Ａとを含む。ホストノード１は、第１の実施形態のホストノード１と同様に、転送元ノードとしても動作する。アクセラレータノード３Ａは、第１の実施形態のアクセラレータノード３と同様に、転送先ノードとして動作する。本実施形態では、アクセラレータノード３Ａは、さらに転送元ノードとしても動作する。また、ホストノード１は、さらに転送先ノードとしても動作する。
【０１３７】
本実施形態のアクセラレータノード３Ａは、さらに、検出部３３と、更新範囲記憶部３４を含む。
【０１３８】
指示部２２は、さらに、メモリ３１において書き込みに検出を行う監視範囲を、検出部３３に対して送信する。
【０１３９】
検出部３３は、例えば指示部２２から受信した監視範囲内のメモリ３１に対して、書き込みの検出を行う。そして、検出部３３は、メモリ３１の、書き込みが検出された範囲を、更新範囲として更新範囲記憶部３４に格納する。
【０１４０】
更新範囲記憶部３４は、メモリ３１の、書き込みが検出された範囲である更新範囲を記憶する。
【０１４１】
本実施形態の他の構成要素は、図５に示す第１の実施形態において、同一の番号が付与されている構成要素と同じ動作を行う。
【０１４２】
本実施形態の抽出部１２は、さらに、指示部２２から、メモリ３１における転送範囲を受信する。アクセラレータノード３Ａが複数存在する場合、抽出部１２は、さらに、指示部２２から、アクセラレータノード３Ａを特定するノード識別子を受信する。そして、抽出部１２は、メモリ３１における転送範囲のうち、検出部３３が書き込みの検出を行う監視範囲に含まれる範囲を、メモリ３１における転送実行範囲として抽出する。メモリ３１における転送範囲に、メモリ３１における監視範囲に含まれない範囲が含まれている場合、抽出部１２は、その転送範囲に含まれその監視範囲に含まれない範囲も、メモリ３１における転送実行範囲として抽出する。
【０１４３】
転送部１３は、さらに、メモリ３１の、抽出された転送実行範囲に格納されているデータを、アクセラレータノード３Ａからメモリ２１に転送する。アクセラレータノード３Ａが複数存在する場合、抽出部１２は、アクセラレータノード３Ａのノード識別子を受信する。そして、抽出部１２は、受信したノード識別子で特定されるアクセラレータノード３Ａから、メモリ３１の、抽出された転送実行範囲に格納されているデータを、メモリ２１に転送する。
【０１４４】
なお、指示部２２は、転送範囲に加えて、転送範囲がメモリ２１の転送範囲であるか、アクセラレータノード３Ａのメモリ３１であるかを判別できる識別情報を、抽出部１２に送信すればよい。抽出部１２は、その識別情報に応じて、アクセラレータノード３Ａにデータを転送するか、アクセラレータノード３Ａからデータを転送するかを決定すればよい。
【０１４５】
次に、本実施形態のホストノード１及びアクセラレータノード３Ａの動作について、図面を参照して詳細に説明する。
【０１４６】
図６は、本実施形態のホストノード１の、書き込み検出時の動作を表すフローチャートである。
【０１４７】
また、図８は、本実施形態のホストノード１の、データ転送時の動作を表すフローチャートである。
【０１４８】
ホストノード１が転送元ノードであり、アクセラレータノード３Ａが転送先ノードである場合の、ホストノード１の動作は、前述の第１の実施形態の動作と同じである。
【０１４９】
次に、アクセラレータノード３Ａが転送元ノードであり、ホストノード１が転送先ノードである場合の動作について説明する。この場合の動作の説明は、第１の実施形態の動作の説明において、検出部１０を検出部３３に、更新範囲記憶部１１を更新範囲記憶部３４に、メモリ２１をメモリ３１に置き換えたものに相当する。
【０１５０】
図８は、本実施形態のアクセラレータノード３Ａの、書き込み検出時の動作を表すフローチャートである。
【０１５１】
第１の実施形態のホストノード１の動作とは相違は、検出部１０ではなく検出部３３が、メモリ２１ではなくメモリ３１への書き込みを検出することである。また、検出部３３は、更新範囲を、更新範囲記憶部１１ではなく更新範囲記憶部３４に格納する。
【０１５２】
本実施形態では、ホストノード１は、更新範囲記憶部３４に格納されている更新範囲内のメモリ３１に格納されているデータを除き、監視範囲内のメモリ３１に格納されているデータと同一のデータを保持している。
【０１５３】
例えば、検出部３３による書き込みの検出の開始時に、監視範囲内のメモリ３１に格納されているデータは、予めホストノード１に転送されていればよい。そして、その場合、更新範囲記憶部３４は、更新範囲を記憶していない。あるいは、書き込みの検出の開始時に、更新範囲記憶部３４は、メモリ３１における監視範囲のうち、ホストノード１が保持していないデータが格納されている範囲を、予め更新範囲として記憶していてもよい。
【０１５４】
ステップＳ１０１では、検出部３３は、メモリ３１の監視範囲を取得する。
【０１５５】
ステップＳ１０２では、検出部１０は、メモリ３１に対する書き込みの検出を行う。検出部１０は、メモリ３１の監視範囲に対する書き込みを、更新範囲として検出する。
【０１５６】
図８は、本実施形態のホストノード１の、データ転送時の動作を表すフローチャートである。
【０１５７】
第１の実施形態のホストノード１の動作とは相違は、抽出部１２が、更新範囲を、更新範囲記憶部１１ではなく更新範囲記憶部３４から読み出すことである。また、本実施形態では、転送部１３が、メモリ２１ではなくメモリ３１の転送実行範囲に格納されているデータを、アクセラレータノード３ではなくメモリ２１に転送する。
【０１５８】
ステップＳ１１１では、抽出部１２は、メモリ３１の転送範囲を取得する。
【０１５９】
また、アクセラレータノード３Ａが複数存在する場合、ステップＳ１１１において、抽出部１２は、転送元ノードのアクセラレータノード３Ａのノード識別子を取得する。この場合、指示部２２は、転送元ノードのアクセラレータノード３Ａのノード識別子を抽出部１２に送信する。情報処理システム１００Ｃがアクセラレータノード３Ａを一つしか含まない場合のように、転送元のアクセラレータノード３Ａが特定されている場合、抽出部１２は転送元のアクセラレータノード３Ａのノード識別子を取得しなくてよい。
【０１６０】
ステップＳ１１２において、抽出部１２は、メモリ３１の転送実行範囲を抽出する。
【０１６１】
ステップＳ１１４において、転送部１３は、メモリ３１の転送実行範囲に格納されているデータを、転送先ノードであるメモリ２１に送信する。
【０１６２】
以上で説明した本実施形態には、第１の実施の形態と同じ効果がある。また、本実施形態には、転送先ノードがホストノード１であり、転送元ノードがアクセラレータノード３Ａである場合にも、第１の実施形態と同じ効果がある。その理由は、第１の実施形態における理由と同じである。
【０１６３】
本実施形態のホストノード１は、図９の第２の実施形態のホストノード１Ａと同様の構成を持ち、ホストノード１Ａの動作と同様の動作を行ってもよい。その場合、本実施形態のホストノード１は、メモリ３１からメモリ２１へのデータ転送時には、検出部１０を検出部３３に、更新範囲記憶部１１を更新範囲記憶部３４に、メモリ２１をメモリ３１に置き換えたホストノード１Ａの動作と同様の動作を行えばよい。本実施形態のホストノード１は、上述した第３の実施形態における、図１１に示すホストノード１Ｂの動作と同様の構成を持ち、ホストノード１Ｂと同様の動作を行ってもよい。その場合、本実施形態のホストノード１は、メモリ３１からメモリ２１へのデータ転送時には、検出部１０を検出部３３に、更新範囲記憶部１１を更新範囲記憶部３４に、メモリ２１をメモリ３１に置き換えたホストノード１Ｂの動作と同様の動作を行えばよい。
【０１６４】
（第５の実施形態）
次に、本発明の第５の実施形態について、図面を参照して詳細に説明する。
【０１６５】
本実施形態は、一方のノードがデータ転送を指示するオフロードモデルではなく、データの転送に関わる双方のノード上でデータ転送を指示する通信モデルにより構成されている。この通信モデルでは、データ転送を完了するためには、データの転送元ノードでは送信動作が指示され、転送先ノードでは受信動作が指示される必要がある。このような通信モデルは、例えばプロセス間通信やＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）などで用いられるsocket通信ライブラリで採用されている。このような通信モデルは、当業者には一般的な通信モデルである。
【０１６６】
図１６は、本実施形態の情報処理システム１００Ｄの構成の例を表すブロック図である。情報処理システム１００Ｄは、図示しない通信網４によって互いに接続された、転送元ノード１Ｄと転送先ノード３Ｄを含む。
【０１６７】
本実施形態では、転送先ノード３Ｄは、図５のアクセラレータノード３の構成に加えて、受信部３２を含む。
【０１６８】
転送元ノード１Ｄは、第１の実施形態のホストノード１と同様に動作する。また、転送先ノード３Ｄは、第１の実施形態のアクセラレータノード３と同様に動作する。
【０１６９】
本実施形態では、各ノードに、ホストノードとアクセラレータノードの区別はない。また、各ノードが、転送元ノードと転送先ノードの両方の構成を備えていてもよい。その場合、各ノードは、データ転送の方向により、転送元ノードまたは転送先ノードとして動作する。
【０１７０】
次に、本実施形態の動作について、図面を参照して詳細に説明する。
【０１７１】
本実施形態のホストノード１は、図６及び図８に示す、第１の実施形態のホストノード１の動作と同様に動作する。
【０１７２】
ただし、データの転送が行われる場合、転送部１３は、受信部３２に、データを受信することを指示する。受信部３２は、データ受信の指示を受信した場合のみ、データの受信を行う。
【０１７３】
本実施形態のホストノード１は、第２の実施形態のホストノード１Ａと同じ構成を持ち、ホストノード１Ａと同様の動作を行ってもよい。本実施形態のホストノード１は、第３の実施形態のホストノード１Ｂと同じ構成を持ち、ホストノード１Ｂと同様の動作を行ってもよい。ただし、いずれの場合も、転送部１３が、データの転送が行われる場合に、受信部３２に、データを受信することを指示する。
【０１７４】
本実施形態には、第１の実施形態と同じ効果がある。その理由は、第１の実施形態における理由と同じである。
【０１７５】
本実施形態には、本実施形態の上述の通信モデルでも、第１の実施形態と同様に、データの無駄な転送を削減できるという効果がある。その理由は、転送部１３が、データ受信部３２に、データの受信を行う指示を送信するからである。
【０１７６】
（第６の実施形態）
次に、本発明の第６の実施形態について、図面を参照して詳細に説明する。
【０１７７】
図１７は、本実施形態のデータ送信装置１Ｃの構成を表すブロック図である。
【０１７８】
図１７を参照すると、本実施形態のデータ送信装置１Ｃは、メモリ２１とプロセッサ２０と、検出部１０と、抽出部１２と、転送部１３とを含む。プロセッサ２０はメモリ２１に書き込みを行う。検出部１０は、転送先ノード３が保持するデータが格納されている前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する。抽出部１２は、前記プロセッサ２０から前記メモリ２１の転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する。転送部１３は、前記メモリ２１の、前記転送実行範囲に格納されているデータを、前記転送先ノード３に転送するデータ転送を行う。
【０１７９】
以上で説明した本実施形態には、第１の実施形態と同じ効果がある。その理由は、第１の実施形態における理由と同じである。
【０１８０】
ホストノード１は、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。ホストノード１Ａは、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。ホストノード１Ｂは、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。データ送信装置１Ｃはコンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。転送元ノード１Ｄは、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。アクセラレータノード３は、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。アクセラレータノード３Ａは、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。転送先ノード３Ｄは、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
【０１８１】
図３４は、コンピュータ１０００の構成の一例を表す図である。コンピュータ１０００は、ホストノード１、ホストノード１Ａ、ホストノード１Ｂ、データ送信装置１Ｃ、転送元ノード１Ｄ、アクセラレータノード３、アクセラレータノード３Ａ、及び転送先ノード３Ｄを実現するために使用される。図３４を参照すると、コンピュータ１０００は、プロセッサ１００１と、メモリ１００２と、記憶装置１００３と、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インタフェース１００４とを含む。また、コンピュータ１０００は、記録媒体１００５にアクセスすることができる。メモリ１００２と記憶装置１００３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ハードディスクなどの記憶装置である。記録媒体１００５は、例えば、ＲＡＭ、ハードディスクなどの記憶装置、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、可搬記録媒体である。記憶装置１００３が記録媒体１００５であってもよい。プロセッサ１００１は、メモリ１００２と、記憶装置１００３に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ１００１は、Ｉ／Ｏインタフェース１００４を介して、例えば、転送先ノードあるいは転送元ノードにアクセスすることができる。プロセッサ１００１は、記録媒体１００５にアクセスすることができる。記録媒体１００５には、コンピュータ１０００を、ホストノード１、として動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、ホストノード１Ａとして動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、ホストノード１Ｂとして動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、データ送信装置１Ｃ、として動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、転送元ノード１Ｄとして動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、アクセラレータノード３として動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、アクセラレータノード３Ａとして動作させるプログラムが格納されている。又は、記録媒体１００５には、コンピュータ１０００を、転送先ノード３Ｄとして動作させるプログラムが格納されている。
【０１８２】
プロセッサ１００１は、記録媒体１００５に格納されているプログラムを、メモリ１００２にロードする。前述のように、そのプログラムは、コンピュータ１０００を、ホストノード１、ホストノード１Ａ、ホストノード１Ｂ、データ送信装置１Ｃ、転送元ノード１Ｄ、アクセラレータノード３、アクセラレータノード３Ａ、又は転送先ノード３Ｄとして動作させる。そして、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、ホストノード１として動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、ホストノード１Ａとして動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、ホストノード１Ｂとして動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、データ送信装置１Ｃとして動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、転送元ノード１Ｄとして動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、アクセラレータノード３として動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、アクセラレータノード３Ａとして動作する。又は、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、転送先ノード３Ｄとして動作する。
【０１８３】
検出部１０、抽出部１２、転送部１３、削除部１６、指示部２２、受信部３２は、例えば、プログラムを記憶する記録媒体１００５からメモリ１００２に読み込まれた、各部の機能を実現するための専用のプログラムと、そのプログラムを実行するプロセッサ１００１により実現することができる。また、更新範囲記憶部１１、転送済範囲記憶部１４、履歴記憶部１５は、コンピュータが含むメモリやハードディスク装置等の記憶装置１００３により実現することができる。
【０１８４】
検出部１０、更新範囲記憶部１１、抽出部１２、転送部１３、転送済範囲記憶部１４、履歴記憶部１５、削除部１６、指示部２２、受信部３２の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
【０１８５】
（第１の構成例）
次に、本発明の各実施形態の具体的な構成例について、図面を参照して詳細に説明する。
【０１８６】
図１８は、本発明の第１の構成例の情報処理システム１００の概要を表す図である。図１８に示す構成例では、オフロードモデルが利用されている。
【０１８７】
図１８に示す例では、ホストノード１はメインメモリ９０とＣＰＵ８０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含む。ＣＰＵ８０は、ＯＳ７０（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行する。ＣＰＵ８０は、ＯＳ７０上で、オフロードライブラリ５０とアクセラレータライブラリ６０を実行する。ＣＰＵ８０は、さらに、オフロードライブラリ５０とアクセラレータライブラリ６０を利用する、プログラム４０を実行している。また、ホストノード１とアクセラレータ３は、通信回線である接続網４によって接続されている。アクセラレータ３は、上述のアクセラレータノード３である。
【０１８８】
オフロードライブラリ５０は、アクセラレータ３で特定の処理を行う機能を持つライブラリである。オフロードライブラリ５０は、例えば種々の行列演算をアクセラレータ３で実行する機能を持つライブラリである。アクセラレータライブラリ６０は、アクセラレータ３を利用するための低レベルの機能を提供するライブラリである。アクセラレータライブラリ６０は、例えば、アクセラレータ３のメモリを割り当てる機能や、アクセラレータ３のメモリとホストノード１上のメモリ間でデータを転送する機能を有する。この様なライブラリの例として、ＧＰＵ用のライブラリとして、ＧＰＵメーカーが提供するライブラリがある。本構成例は、オフロードライブラリ５０が、アクセラレータ３の呼び出しを、プログラム４０に対して隠蔽する場合の例である。すなわち、アクセラレータ３へのデータ転送の指示や、アクセラレータ３での処理の呼び出しは、オフロードライブラリ５０内で行われる。
【０１８９】
図１９は、ホストノード１の詳細な構成を表す図である。本構成例のホストノード１のＣＰＵ８０は、ＯＳ７０、アクセラレータライブラリ６０、オフロードライブラリ５０、及びプログラム４０を実行する。
【０１９０】
図１９の本構成例及び後述の各構成例の構成を表す図において、ホストノード１とホストノード１が含むメインメモリ９０は省略され、図示されない。ＯＳ７０とＣＰＵ８０は、図示されないホストノード１に含まれる。また、プログラム４０と各ライブラリはホストノード１のＣＰＵ８０により実行される。ＣＰＵ８０は、同時に複数のプログラム４０を実行していてもよい。
【０１９１】
また、本発明の各構成例において、プログラム及びライブラリが備える各部は、その部が含まれるプログラム又はライブラリが備える機能ブロックを表す。プログラム及びライブラリによって制御されるＣＰＵ８０が、プログラム及びライブラリが含む各部として動作する。以下では、プログラム及びライブラリによって制御されるＣＰＵ８０の動作を、プログラム又はライブラリの動作として説明する。
【０１９２】
プログラム４０は、オフロード処理呼出部４１を備えている。オフロード処理呼出部４１は、ライブラリが提供する処理を行う際に、当該処理を行うライブラリ関数を呼び出す機能を有する。オフロードライブラリ５０は、データ転送指示部５３、データ転送判断部５４、データ監視指示部５１、データ監視部５２、処理指示部５５を備える。また、アクセラレータライブラリ６０は、データ転送実行部６１、処理呼出部６２を備える。これらのライブラリはその他の機能も備えていてよいが、本発明と直接関係ない機能についての説明は省略されている。ＯＳ７０は、メモリアクセス制御部７１と、アクセラレータ用ドライバ７２を含む。ＣＰＵ８０は、メモリアクセス監視部８１を含む。メモリアクセス監視部８１は、ＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）による実現される。メモリアクセス監視部８１は、ＭＭＵ８１とも表記される。
【０１９３】
本構成例と前述の各実施形態との間の構成要素の関係は、以下の通りである。データ転送指示部５３は、指示部２２として動作する。データ転送判断部５４は、抽出部１２として動作する。データ監視部５２は、検出部１０として動作する。データ監視指示部５１及びデータ監視部５２は、第３の実施形態の検出部１０として動作する。データ転送実行部６１は、転送部１３として動作する。ＣＰＵ８０が、プロセッサ２０である。メインメモリ９０が、メモリ２１である。また、メインメモリ９０が更新範囲記憶部１１、転送済範囲記憶部１４、履歴記憶部１５として動作する。更新範囲記憶部１１に格納されている更新範囲は、データ更新表として、表の形で表すことができる。更新範囲記憶部１１に格納されている更新範囲の集合を、以下では、データ更新表９１と表記する。転送済範囲記憶部１４に格納されている転送済範囲は、転送データ表として、表の形で表すことができる。転送済範囲記憶部１４に格納されている転送済範囲の集合を、転送データ表と表記する。更新範囲記憶部１１、転送済範囲記憶部１４、履歴記憶部１５、データ更新表９１、及び転送データ表は、図１９では省略されている。
【０１９４】
処理指示部５５は、アクセラレータ３が実行する処理を指定して、その処理をアクセラレータ３に実行させることを指示する機能を有する。処理呼出部６２は、処理指示部５５の指示を受けて、実際にアクセラレータ３に処理を実行させる機能を有する。
【０１９５】
次に、本構成例のデータ監視部５２について説明する。
【０１９６】
図２０は、本構成例のデータ監視部５２の構成を示す図である。本構成例のデータ監視部５２は、メモリ保護設定部５２１と例外処理部５２２を含む。データ監視部５２は、ＯＳ７０のメモリアクセス制御部７１およびＣＰＵ８０のＭＭＵ８１を利用して、データへのアクセスの監視を行う。ＯＳ７０のメモリアクセス制御部７１とＣＰＵ８０のＭＭＵ８１の組み合わせが、図２０のメモリ保護部７５である。データ更新表９１は、メインメモリ９０に格納されている。あるいは、データ監視部５２がデータ更新表９１を記憶していてもよい。
【０１９７】
ＭＭＵ８１は、ＣＰＵ８０が行うメモリアクセスを監視する。そして、ＭＭＵ８１は、ページテーブルに記述されたページ単位のメモリのアクセス権に対して、違反したアクセスが行われたときに、ＭＭＵ８１に例外が発生するよう設計されている。ＭＭＵ８１は、このような機能を有する、広く用いられているハードウェアである。一般に、例外が発生するとＯＳ７０の例外ハンドラが呼び出され、ＯＳ７０の例外ハンドラはプログラム４０のシグナルハンドラを呼び出す。これらの構成要素や機能は、既存の任意の方法で実現される。例えば、これらの構成要素や機能は、一般的なＣＰＵやＯＳに備わっている。
【０１９８】
メモリ保護設定部５２１は、監視対象のデータが格納されているページのアクセス権をリードオンリーに設定するように、ＯＳ７０のメモリアクセス制御部７１を呼び出す。例えば、一部のＯＳにおいて実装されている、メモリのページの保護属性を制御するための関数である、「mprotect」という関数を用いることで、アクセス権を設定することができることが知られている。
【０１９９】
例外処理部５２２は、アクセス権違反が発生したときに呼び出されるシグナルハンドラである。例外処理部５２２は、呼び出されると、アクセス違反が発生したアドレスから、書き込みが行われたデータを特定する。そして、例外処理部５２２は、データ更新表９１がその特定されたデータが更新されたことを表すように、データ更新表９１を変更する。また、例外処理部５２２は、監視対象のデータが格納されているページのアクセス権を、ライト可能に変更する。これにより、データ監視部５２は、プログラム４０が、データ監視が行われない場合と同じ動作を行うようにする。
【０２００】
次に、具体的な処理の例を用いて、本構成例の動作を説明する。
【０２０１】
図２１は、本構成例のプログラム４０の例である。本構成例のプログラム４０は、行列a、b、c、x、yを用いて、x=a*b、y=a*cという、２回の行列の掛け算を行うプログラムである。
【０２０２】
図２２は、本構成例のオフロードライブラリ５０が備える、掛け算を行う関数の例である。図２２の「lib_matmul」関数は、アクセラレータ３で行列の掛け算を行う関数の例である。この関数は、引数で受け取ったホストメモリ上の各行列のアドレスに対して、「get_acc_memory」関数を呼び出すことによって、各行列に対応する、アクセラレータ３のメモリ上の行列のアドレスを得る。「get_acc_memory」関数は、行列がアクセラレータ３のメモリに割り当てられていなければ、その行列に新たにメモリを割り当て、割り当てたメモリのアドレスを返す。また、「get_acc_memory」関数は、行列にメモリが既に割り当てられていれば、そのメモリのアドレスを返す。
【０２０３】
次に、「lib_matmul」関数は、「startMonitor」関数を呼び出して、行列uへのデータアクセスを監視することを指示する。この処理は、データ監視部５２が、行列uが格納されているメモリ全体を監視対象にして、書き込みの検出を開始することに相当する。
【０２０４】
次に、「lib_matmul」関数は、行列bがアクセラレータ３に送信されているか否かを、「IsExist」関数によって調べ、行列bがホスト上で変更されているか否かを、「IsModified」関数によって調べる。これらの関数は、それぞれ、転送データ表、データ更新表９１を利用して判定する。「lib_matmul」関数は、行列bが送信されていない場合及び行列bが変更が行われている場合の少なくともいずれかの場合に、send関数を呼び出して、データの送信を指示する。転送後、「lib_matmul」関数は、「updateTables」関数を呼び出して、転送データ表およびデータ更新表９１を変更する。なお、「send」関数はアクセラレータライブラリ６０が提供する関数である。「lib_matmul」関数は、さらに、行列vに対して同様の処理を行う。図２２に示す例では、行列vに対する処理の記載は省略されている。
【０２０５】
そして、「lib_matmul」関数は、「call」関数を呼び出して、アクセラレータ３で掛け算処理を行うことを指示する。この指示は、処理指示部５５の動作に相当する。その後、「lib_matmul」関数は、「recv」関数によって、掛け算の結果をアクセラレータ３から受信する。「call」関数と「recv」関数はアクセラレータライブラリ６０が提供する関数である。
【０２０６】
本構成例の説明では、アクセラレータライブラリ６０が備える関数の詳細な説明は省略する。なお、以上で説明した、「send」関数、「recv」関数、「call」関数は、既存の任意の実装方法で実装されていればよい。また、これらの機能は、必ずしも関数によって実現されている必要はない。これらの機能は、ディレクティブ等で実現されてもよい。
【０２０７】
次に、本構成例の動作でのデータ更新表９１と、転送データ表について説明する。
【０２０８】
図２３は、プログラム４０が最初に「lib_matmul」関数を実行する際の、初期状態の転送データ表を表す図である。この状態ではまだデータ転送は行われていないので、転送データ表は空である。このため、最初の「lib_matmul」の呼び出しでは、行列aとbが、ともにアクセラレータ３へ送信される。
【０２０９】
図２４は、行列aとbが送信された後に更新された、転送データ表を表す図である。また、図２５は、行列aとbが送信された後に更新された、データ更新表９１を表す図である。転送データ表には、送信された行列aとbが、それらのデータがアクセラレータ３に存在することを示す状態で追加される。データ更新表９１には、行列aとbが、これらのデータがホストノード１で更新されていないことを表す状態で追加される。
【０２１０】
プログラム４０が、図２１に示す二つめの「lib_matmul」関数を実行する際、転送データ表を参照することにより、アクセラレータ３に、行列aは存在し、行列cは存在しないことが分かる。また、データ更新表９１より、行列aは更新されていないことが分かる。従って、行列cのみが転送される。さらに、行列cの転送後、転送データ表とデータ更新表９１が変更される。変更後の表は明らかであるため省略する。
【０２１１】
このように、図２１に示す例において「lib_matmul」関数が２回続けて呼び出される場合のように、共通の行列aが使われる二つの関数が順次呼び出される場合、二つの関数間で行列aの変更が無ければ、２つ目の関数では、行列aの転送は行われない。そのため、無駄なデータ転送を削減することができる。
【０２１２】
一方、行列aを使用する二つの関数の呼び出しの間で、行列aに対する書き込みが行われた場合、データ監視部５２は、図２６に示すようにデータ更新表９１を変更する。このため、行列aに対する書き込みが行われた後の二回目の「lib_matmul」関数の処理では、行列aも転送される。従って、その二回目の「lib_matmul」関数の処理では、更新後のデータを用いて掛け算が行われるため、正しい計算が行われる。
【０２１３】
図２６は、行列aに対する書き込みが行われた後変更された、データ更新表９１を表す図である。
【０２１４】
本構成例のデータ更新表９１やデータ転送表では、メモリ領域は、アドレスとサイズを用いて行列単位で表されている。メモリ領域は、例えばページ単位で表されていてもよい。この場合、データ転送判断部５４は、ページ単位のメモリ領域に対して、転送を行うかどうかを判断する。そして、行列の一部のみが更新された場合、更新された部分が含まれるページだけが転送される。すなわち、行列の一部のみが更新される場合、変更された部分を含まないページが転送されない。そのため、データ転送量をさらに削減することが可能である。
【０２１５】
以上で説明した本構成例では、ホストノード１が１つであり、アクセラレータ３が１つである場合の例である。しかし、ホストノード１とアクセラレータ３いずれか一方又は双方が、複数存在していてもよい。複数のホストノード１が存在する場合、それぞれのホストノード１が、データ更新表９１と転送データ表を備える。また、複数のアクセラレータノード３が存在する場合、データ転送実行部６１として動作する「lib_matmul」関数は、転送データ表に、データがアクセラレータ３にあるかどうかが、アクセラレータ３毎に区別して記録する。
【０２１６】
（第２の構成例）
次に本発明の第２の構成例について説明する。
【０２１７】
図２７は本構成例の構成を示す図である。本構成例のホストノード１のＣＰＵ８０は、ＯＳ７０、アクセラレータライブラリ６０、データ転送ライブラリ５０Ａ、及びプログラム４０Ａを実行する。本構成例では、プログラム４０Ａがデータ転送指示部５３、データ監視指示部５１、処理指示部５５を備える。また、データ転送ライブラリ５０Ａが、データ転送判断部５４、データ監視部５２を備える。アクセラレータライブラリ６０、ＯＳ７０、及びＣＰＵ８０の構成は、第１の構成例と同じである。それぞれの構成要素の機能は第１の構成例と同じである。
【０２１８】
本構成例では、プログラム４０Ａは、アクセラレータで行う処理を指定して、アクセラレータライブラリ６０の処理呼出部６２を呼び出す。一方、プログラム４０Ａは、データ転送の際、アクセラレータライブラリ６０のデータ転送実行部６１を直接呼び出さずに、データ転送ライブラリ５０Ａを利用する。本構成例は、第１の構成例とは異なり、ホストノード１がアクセラレータ３に実行させる処理は、オフロードライブラリ５０が提供する機能による処理に限定されない。本構成例には、第１の構成例と同じ効果がある。本構成例では、さらに、プログラム４０Ａが、任意の処理をアクセラレータ３に実行させることができる。
【０２１９】
図２８は、本構成例のデータ転送ライブラリ５０Ａが提供するデータ送信関数の例を表す図である。図２８の「sendData」関数が、本構成例のデータ転送ライブラリ５０Ａが提供するデータ送信関数の例である。「sendData」関数の引数は、転送されるデータのアドレスとサイズである。まず「sendData」関数は、データのサイズが閾値以上の場合に、データ監視部５２に監視を行うように指示する。これはデータ監視指示部５１の動作に相当する。次に「sendData」関数は、データ更新表９１と転送データ表を調べて、データを送信するか決定する。「sendData」関数は、データを送信することが決定された場合は、データ転送実行部６１を呼び出し、そして、両テーブルを更新する。
【０２２０】
（第３の構成例）
次に本発明の第３の構成例について説明する。
【０２２１】
図２９は、本構成例の構成を表す図である。本構成例のホストノード１のＣＰＵ８０は、ＯＳ７０と、アクセラレータライブラリ６０と、プログラム４０Ｂを実行する。本構成例では、プログラム４０Ｂが、データ転送指示部５３、データ転送判断部５４、データ監視指示部５１、データ監視部５２、及び処理指示部５５を備える。アクセラレータライブラリ６０、ＯＳ７０、及びＣＰＵ８０の構成は、第１の構成例と同じである。それぞれの構成要素の機能は第１の構成例と同じである。
【０２２２】
本構成例には、第１の構成例と同じ効果がある。本構成例では、さらに、本構成例では、プログラム４０Ｂが、アクセラレータライブラリ６０以外のライブラリによらずに、データの転送と、アクセラレータ３における処理を行うことができる。
【０２２３】
（第４の構成例）
次に、本発明の第４の構成例について説明する。
【０２２４】
図３０は、本構成例の構成を表す図である。本構成例のホストノード１のＣＰＵ８０は、ＯＳ７０と、アクセラレータライブラリ６０Ａと、データ監視ライブラリ５０Ｂと、プログラム４０Ａを実行する。データ監視ライブラリ５０Ｂは、データ監視部５２を含む。アクセラレータライブラリ６０Ａは、処理呼出部６２と、ＤＴＵ（Ｄａｔａ  Ｔｒａｎｓｆｅｒ  Ｕｎｉｔ）呼出部６３を含む。本構成例のホストノード１は、データ転送ユニット６５を含む。本構成例では、データ転送ユニット６５が、データ転送判断部５４とデータ転送実行部６１を備える。ＯＳ７０、及びＣＰＵ８０の構成は、第１の構成例と同じである。それぞれの構成要素の機能は第１の構成例と同じである。
【０２２５】
データ転送ユニット６５は、ノード間でデータを転送する機能を有するハードウェアである。データ転送ユニット６５は、ＣＰＵ８０を用いずにデータを転送する。データ転送ユニット６５がデータ転送を行うことにより、データ転送のためのＣＰＵ負荷の削減が可能である。そのため、このようなデータ転送ユニット６５は広く用いられている。一般に、データ転送ユニット６５は、指定されたデータを転送する機能を有する。本構成例のデータ転送ユニット６５は、さらに、データ転送判断部５４を備えることによって、データが更新されている場合にのみ、データを転送する。
【０２２６】
本構成例の典型的なデータ転送時の動作を以下に示す。
【０２２７】
１．プログラム４０Ａがアクセラレータライブラリ６０Ａにデータの転送を指示する。
【０２２８】
２．アクセラレータライブラリ６０ＡのＤＴＵ呼出部６３は、データ転送ユニット６５を用いてデータ転送を行うことを、アクセラレータ用ドライバ７２に指示する。アクセラレータ用ドライバ７２はデータ転送ユニット６５を呼び出す。
【０２２９】
３．データ転送ユニット６５のデータ転送判断部５４が、データ更新表９１を参照して、データの更新の有無を判定する。データ転送判断部５４は、データが更新されている場合のみ、データ転送実行部６１を呼び出して、データを転送する。
【０２３０】
本データ転送動作は、送信先に既にデータがある場合にのみ行われることが望ましい。なぜならば、データが更新されていない場合は、データ転送が行われないからである。本構成例における、既にデータが送られているかどうかの判断を行う方法は、前述の構成例における判断方法と同じでよい。
【０２３１】
本構成例において、データ転送を削減するためには、データ監視指示部５１が、転送されるデータへの書き込みを監視するように、データ監視部５２に指示することが望ましい。そして、データ監視部５２が、転送されるデータの書き込みを監視することが望ましい。なぜならば、監視されていないデータに対する書き込みは、データ更新表９１に記録されないからである。データが監視されていないデータは、そのデータへの書き込みの有無に関わらず、必ず転送される。
【０２３２】
図３０ではデータ更新表９１は省略されているが、データ更新表９１は、メインメモリ９０中に配置されていればよい。この場合、データ転送ユニット６５は、メインメモリ９０に配置されているデータ更新表９１を参照する。また、データ転送ユニット６５がデータ更新表９１を記憶してもよい。
【０２３３】
本構成例では、プログラム４０Ａがデータ転送指示部５３、処理指示部５５、データ監視指示部５１を備えている。データ転送指示部５３、処理指示部５５、データ監視指示部５１は、第１の構成例や第２の構成例のように、オフロードライブラリ５０やデータ転送ライブラリ５０Ａに含まれていてもよい。
【０２３４】
図３１は、本構成例の別形態の例を表す図である。図３１の例では、ホストノード１は、ＣＰＵ８０Ａ及びメインメモリ９０に加えて、データ転送ユニット６５Ａを含む。ホストノード１のＣＰＵ８０Ａが、ＯＳ７０、アクセラレータライブラリ６０、及びプログラム４０Ｃを実行する。プログラム４０Ｃは、データ転送指示部５３と処理指示部５５を含む。ＣＰＵ８０Ａは、メモリアクセス監視部８１とデータ監視部５２を含む。データ転送ユニット６５Ａは、データ監視判断部５６と、データ転送判断部５４と、データ転送実行部６１を含む。アクセラレータライブラリ６０Ａは、図３０に示すアクセラレータライブラリ６０Ａと同じである。ＯＳ７０は、図３０に示すＯＳ７０と同じである。ただし、本別形態のＯＳ７０は、データ監視部５２を含んでいなくてもよい。
【０２３５】
図３１の例のように、本構成例では、データ転送ユニット６５Ａがデータ監視判断部５６を含んでいてもよい。この場合、データ転送ユニット６５Ａに含まれるデータ監視判断部５６が、データ監視部５２を呼び出し、データ監視部５２にデータを監視することを指示する。そのため、プログラム４０Ｃや各ライブラリが、データ監視指示部５１の機能を備える必要がない。
【０２３６】
（第５の構成例）
次に、本発明の第５の構成例について説明する。
【０２３７】
図３２は、本構成例の構成の概要を表す図である。本構成例は、第５の実施形態に基づく構成例である。図３２を参照すると、本構成例では、同一の構成を持つ複数台のノードが接続されている。データの転送時には、一方のノードがデータの送信を行い、他方のノードがデータの受信を行う。データの送信を行うノードが、前述の転送元ノード１Ｄとして動作する。データの受信を行うノードが、前述の転送先ノード３Ｄとして動作する。
【０２３８】
図３３は、本構成例の各ノードの詳細な構成を表す図である。本構成例のＣＰＵ８０は、ＯＳ７０Ａ、通信ライブラリ６０Ｂ、データ転送ライブラリ５０Ｃ、及びプログラム４０Ｄを実行する。ＯＳ７０Ａは、メモリアクセス制御部７１と通信ドライバ７３を含む。通信ライブラリ６０Ｂは、データ転送実行部６１を含む。データ転送ライブラリ５０Ｃは、データ監視判断部５６と、データ監視部５２と、データ転送判断部５４を含む。また、例えばデータ転送ライブラリ５０Ｃが、前述の受信部３２として動作する、図３３では図示されないデータ受信部を含む。
【０２３９】
本構成例は、他の構成例と異なり、通信ライブラリ６０Ｂを備えている。通信ライブラリ６０Ｂは、送受信型の通信を行うためのライブラリである。通信ライブラリ６０Ｂのデータ転送実行部６１は、データを送信する機能とデータを受信する機能を有する。その他の構成要素は他の構成例の同一の番号の構成要素と同じであるので、説明を省略する。
【０２４０】
本構成例のデータ転送判断部５４は、データ転送を行うと判断した場合に、通信ライブラリ６０Ｂのデータ転送実行部６１を呼び出し、データ転送実行部６１にデータ転送を実行させる。また、データ転送判断部５４は、データ転送を行わないと判断した場合にもデータ転送実行部６１を呼び出し、データ転送実行部６１により、データ転送を行わない旨を伝えるメッセージを、転送先ノードに送信する。これは、転送先ノードの、データを受信するデータ受信部が、データが送信されないことを知るために必要だからである。
【０２４１】
本構成例の各ノードは、図３３の構成では、データ転送判断部５４を含むデータ転送ライブラリ５０Ｃを含む。各ノードは、他の構成例のホストノード１のように、データ転送判断部５４を備えたオフロードライブラリ５０を含んでいてもよく、プログラム４０Ｄがデータ転送判断部５４を含んでいてもよい。
【０２４２】
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０２４３】
（付記１）
メモリと当該メモリに書き込みを行うプロセッサと、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を、更新範囲記憶手段に格納する検出手段と、
前記更新範囲記憶手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信し、受信の度に、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
を含むデータ送信装置。
【０２４４】
（付記２）
前記検出手段は、前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である検出範囲を受信し、当該検出範囲内の前記メモリに対して書き込みを検出し、
前記抽出手段は、前記転送範囲のうち、前記転送実行範囲に加え、前記検出範囲に含まれない範囲を、前記転送実行範囲として抽出する
付記１に記載のデータ送信装置。
【０２４５】
（付記３）
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記検出範囲から除外する
付記２に記載のデータ送信装置。
【０２４６】
（付記４）
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、さらに、前記書き込みが検出された前記範囲の更新の頻度を測定し、当該頻度が所定頻度を超えたことを検出すると、以降、前記範囲を前記監視範囲から除外する
付記２又は３に記載のデータ送信装置。
【０２４７】
（付記５）
前記転送先ノードと、付記１乃至４のいずれかに記載のデータ送信装置とを含む、情報処理システム。
【０２４８】
（付記６）
プロセッサにより書き込みが行われるメモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を、更新範囲記憶手段に格納し、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信し、受信の度に、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出し、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う
データ送信方法。
【０２４９】
（付記７）
メモリと当該メモリに書き込みを行うプロセッサを含むコンピュータを、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を、更新範囲記憶手段に格納する検出手段と、
前記更新範囲記憶手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信し、受信の度に、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
して動作させるデータ送信プログラム。
【０２５０】
（付記８）
前記コンピュータを、
前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である検出範囲を受信し、当該検出範囲内の前記メモリに対して書き込みを検出する前記検出手段と、
前記転送範囲のうち、前記転送実行範囲に加え、前記検出範囲に含まれない範囲を、前記転送実行範囲として抽出する前記抽出手段と
して動作させる付記７に記載のデータ送信プログラム。
【０２５１】
（付記９）
前記コンピュータを、
前記転送命令を複数回受信する前記抽出手段と、
検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記検出範囲から除外する前記検出手段と
して動作させる付記８に記載のデータ送信プログラム。
【０２５２】
（付記１０）
前記コンピュータを、
前記転送命令を複数回受信する前記抽出手段と、
さらに、前記書き込みが検出された前記範囲の更新の頻度を測定し、当該頻度が所定頻度を超えたことを検出すると、以降、前記範囲を前記監視範囲から除外する前記検出手段と
して動作させる付記８又は９に記載のデータ送信プログラム。
【０２５３】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０２５４】
この出願は、２０１２年１２月７日に出願された日本出願特願２０１２−２６８１２０を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０２５５】
１、１Ａ、１Ｂ    ホストノード
１Ｃ  データ送信装置
１Ｄ    転送元ノード
３    アクセラレータノード（転送先ノード、アクセラレータ）
３Ａ    アクセラレータノード
３Ｄ    転送先ノード
４    接続網
１０    検出部
１１    更新範囲記憶部
１２    抽出部
１３    転送部
１４    転送済範囲記憶部
１５    履歴記憶部
１６    削除部
２０、３０    プロセッサ
２１、３１    メモリ
２２    指示部
３２    受信部
４０、４０Ａ、４０Ｂ、４０Ｃ、４０Ｄ    プログラム
４１    オフロード処理呼出部
５０    オフロードライブラリ
５０Ａ、５０Ｃ    データ転送ライブラリ
５０Ｂ    データ監視ライブラリ
５１    データ監視指示部
５２    データ監視部
５３    データ転送指示部
５４    データ転送判断部
５５    処理指示部
５６    データ監視判断部
６０、６０Ａ    アクセラレータライブラリ
６０Ｂ    通信ライブラリ
６１    データ転送実行部
６２    処理呼出部
６３    ＤＴＵ呼出部
６５、６５Ａ    データ転送ユニット
７０、７０Ａ    ＯＳ
７１    メモリアクセス制御部
７２    アクセラレータ用ドライバ
７３    通信ドライバ
７５    メモリ保護部
８０、８０Ａ    ＣＰＵ
８１    メモリアクセス監視部
９０    メインメモリ
９１    データ更新表
１００、１００Ａ、１００Ｂ、１００Ｃ、１００Ｄ    情報処理システム
５２１    メモリ保護設定部
５２２    例外処理部
【図１】
2014087654.tif 000003
【図２】
2014087654.tif 000004
【図３】
2014087654.tif 000005
【図４】
2014087654.tif 000006
【図５】
2014087654.tif 000007
【図６】
2014087654.tif 000008
【図７】
2014087654.tif 000009
【図８】
2014087654.tif 000010
【図９】
2014087654.tif 000011
【図１０】
2014087654.tif 000012
【図１１】
2014087654.tif 000013
【図１２】
2014087654.tif 000014
【図１３】
2014087654.tif 000015
【図１４】
2014087654.tif 000016
【図１５】
2014087654.tif 000017
【図１６】
2014087654.tif 000018
【図１７】
2014087654.tif 000019
【図１８】
2014087654.tif 000020
【図１９】
2014087654.tif 000021
【図２０】
2014087654.tif 000022
【図２１】
2014087654.tif 000023
【図２２】
2014087654.tif 000024
【図２３】
2014087654.tif 000025
【図２４】
2014087654.tif 000026
【図２５】
2014087654.tif 000027
【図２６】
2014087654.tif 000028
【図２７】
2014087654.tif 000029
【図２８】
2014087654.tif 000030
【図２９】
2014087654.tif 000031
【図３０】
2014087654.tif 000032
【図３１】
2014087654.tif 000033
【図３２】
2014087654.tif 000034
【図３３】
2014087654.tif 000035
【図３４】
2014087654.tif 000036
【手続補正書】
【提出日】平成27年5月21日(2015.5.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリと当該メモリに書き込みを行うプロセッサと、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
を含み、
前記検出手段は、前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である監視範囲を受信し、当該監視範囲内の前記メモリに対して書き込みを検出し、
前記抽出手段は、前記転送範囲のうち、前記転送実行範囲に加え、前記監視範囲に含まれない範囲を、前記転送実行範囲として抽出する
データ送信装置。
【請求項２】
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記監視範囲から除外する
請求項１に記載のデータ送信装置。
【請求項３】
前記抽出手段は、前記転送命令を複数回受信し、
前記検出手段は、さらに、前記書き込みが検出された前記範囲の更新の頻度を測定し、当該頻度が所定頻度を超えたことを検出すると、以降、前記範囲を前記監視範囲から除外する
請求項１又は２に記載のデータ送信装置。
【請求項４】
前記転送先ノードと、請求項１乃至３のいずれかに記載のデータ送信装置とを含む、情報処理システム。
【請求項５】
プロセッサから、前記プロセッサにより書き込みが行われるメモリ内の書き込みの検出を行う範囲である監視範囲を受信し、当該監視範囲内の前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定し、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出し、前記転送範囲のうち、前記転送実行範囲に加え、前記監視範囲に含まれない範囲を、前記転送実行範囲として抽出し、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う
データ送信方法。
【請求項６】
前記転送命令を複数回受信し、
検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記監視範囲から除外する
請求項５に記載のデータ送信方法。
【請求項７】
前記転送命令を複数回受信し、
さらに、前記書き込みが検出された前記範囲の更新の頻度を測定し、当該頻度が所定頻度を超えたことを検出すると、以降、前記範囲を前記監視範囲から除外する
請求項５又は６に記載のデータ送信方法。
【請求項８】
メモリと当該メモリに書き込みを行うプロセッサを含むコンピュータを、
前記メモリに対する書き込みを検出し、書き込みが検出された前記メモリの範囲である更新範囲を特定する検出手段と、
前記プロセッサから前記メモリの転送範囲を指定する転送命令を受信するのに応じて、受信した前記転送範囲のうち前記更新範囲に含まれる範囲を、転送実行範囲として抽出する抽出手段と、
前記メモリの、前記転送実行範囲に格納されているデータを、転送先ノードに転送するデータ転送を行う転送手段と
して動作させ、
前記検出手段は、前記プロセッサから、前記メモリ内の書き込みの検出を行う範囲である監視範囲を受信し、当該監視範囲内の前記メモリに対して書き込みを検出し、
前記抽出手段は、前記転送範囲のうち、前記転送実行範囲に加え、前記監視範囲に含まれない範囲を、前記転送実行範囲として抽出する
データ送信プログラム。
【請求項９】
前記コンピュータを、
前記転送命令を複数回受信する前記抽出手段と、
検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記監視範囲から除外する前記検出手段と
して動作させる請求項８に記載のデータ送信プログラム。
【請求項１０】
前記コンピュータを、
前記転送命令を複数回受信する前記抽出手段と、
検出された前記更新範囲のサイズが所定サイズ未満である場合、以降、当該更新範囲を前記監視範囲から除外する前記検出手段と、
して動作させる請求項８又は９に記載のデータ送信プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１２０
【補正方法】変更
【補正の内容】
【０１２０】
前述のように、検出部１０は、例えば、書き込みが検出された領域のサイズが所定サイズ未満である場合、その領域を監視範囲から除外する。あるいは、検出部１０は、例えば、書き込みが検出された領域に対する書き込みの頻度が所定頻度以上である場合、その領域を監視範囲から除外してもよい。あるいは、検出部１０は、例えば、書き込みが検出された領域のサイズが所定サイズ未満であり、かつ、その領域に対する書き込みの頻度が所定頻度以上である場合、その領域を監視範囲から除外してもよい。そして、検出部１０は、以後、監視範囲から除かれた範囲に対して、書き込みの検出を行わない。
【国際調査報告】
2014087654.tif 000037
2014087654.tif 000038
2014087654.tif 000039
2014087654.tif 000040