(57)【要約】【課題】仮想アドレス空間を介して処理対象データにアクセスする処理の進捗状況に応じて、処理対象データに関する制御を行う。【解決手段】記憶部７１１は、処理対象データの仮想アドレス空間を示す情報を記憶する。処理部７１２は、仮想アドレス空間を介して処理対象データに対する所定の処理を行う。監視部７１３は、仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対する、処理部７１２からのアクセスを監視する。制御部７１４は、複数の監視領域のうち、監視部７１３がアクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う。【選択図】図７
2019021070.tif 000002
【特許請求の範囲】
【請求項１】
処理対象データの仮想アドレス空間を示す情報を記憶する記憶部と、
前記仮想アドレス空間を介して前記処理対象データに対する所定の処理を行う処理部と、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対する、前記処理部からのアクセスを監視する監視部と、
前記複数の監視領域のうち、前記監視部がアクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う制御部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記複数の監視領域は、前記仮想アドレス空間内において互いに隣接しない位置に設定され、
前記処理部は、前記所定の処理において、前記仮想アドレス空間に含まれる前記複数の領域に対して所定の順序でアクセスし、
前記監視部は、前記処理部が前記所定の処理を開始する前に、前記複数の監視領域それぞれを保護し、前記処理部が前記所定の処理を開始した後に、保護されている領域に対するアクセスを示す制御信号が発生した場合、前記制御信号に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域の仮想アドレスを前記制御部へ出力することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記監視部は、前記特定した監視領域の保護を解除して、次の監視領域に対するアクセスを監視し、
前記処理部は、保護が解除された監視領域にアクセスすることで、前記所定の処理を行うことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記処理対象データは、通信ネットワークを介して前記情報処理装置と接続された複数のストレージ装置に分散して格納され、
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶し、
前記制御部は、前記監視部がアクセスを検出した仮想アドレスに基づいて、前記処理部がアクセスする仮想アドレスのアドレス範囲を予測し、前記複数のストレージ装置のうち、予測したアドレス範囲の部分データを記憶するストレージ装置に対して、データ転送要求を送信し、前記部分データを記憶する前記ストレージ装置から受信した前記部分データを前記記憶部に格納することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記処理対象データは、第１プロセスから第２プロセスへ転送されるデータであり、
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶し、
前記制御部は、前記第１プロセスが前記記憶部に前記処理対象データを書き込むように、前記第１プロセスを制御し、
前記処理部は、前記第２プロセスが前記記憶部から前記処理対象データを読み出すように、前記第２プロセスを制御し、
前記制御部は、前記監視部がアクセスを検出した仮想アドレスに基づいて、前記第１プロセスに、前記第２プロセスへ転送するデータを書き込ませることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項６】
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶するとともに、前記所定の処理において前記処理部がアクセスする仮想アドレスと、前記所定の処理における前記処理部の挙動を示す識別情報との対応関係を記憶し、
前記制御部は、前記対応関係に基づいて、前記監視部がアクセスを検出した仮想アドレスに対応する識別情報を出力することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項７】
コンピュータが、
処理対象データの仮想アドレス空間を介して前記処理対象データに対する所定の処理を行い、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対するアクセスを監視し、
前記複数の監視領域のうち、アクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う、
ことを特徴とする情報処理方法。
【請求項８】
処理対象データの仮想アドレス空間を介して前記処理対象データに対する所定の処理を行い、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対するアクセスを監視し、
前記複数の監視領域のうち、アクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、大量のデータを処理する深層学習を高速化するために、分散並列計算を利用することが試みられている。分散並列計算を利用した分散深層学習において、トレーニングデータを記憶するために、Lustre（登録商標）のような高性能計算（High-Performance Computing，ＨＰＣ）並列ファイルシステムを用いることができる。
【０００３】
メモリ管理におけるパフォーマンスを向上させる自己調節型のメモリ管理システムも知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１３３９３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＨＰＣ並列ファイルシステムでは、複数のデータノードが深層学習のトレーニングデータを分散して記憶し、深層学習を並列に実行する複数の計算ノードの間で、容易にトレーニングデータを共有することができる。トレーニングデータは、メモリマップドファイルとして各計算ノードからアクセスすることが可能である。ＨＰＣ並列ファイルシステムではより多くのデータを処理することができるため、計算ノードの処理性能に合わせてデータを供給することが望ましい。
【０００６】
しかし、計算ノードが通信ネットワークを介してデータノードにアクセスする場合、ディスクアクセス及びデータ転送に伴うレイテンシが発生し、次のトレーニングデータが到着するまで深層学習の実行が待たされる。したがって、このようなレイテンシが深層学習のボトルネックになり得る。そこで、各計算ノードにおける深層学習の進捗状況に応じて、遅滞なくデータノードからトレーニングデータを供給することが望ましい。
【０００７】
なお、かかる問題は、分散深層学習に限らず、メモリマッピングを用いて処理対象データにアクセスする他の処理においても生ずるものである。また、かかる問題は、データ処理を行う計算ノードに処理対象データを供給する制御に限らず、処理対象データに関する他の制御を行う場合においても生ずるものである。
【０００８】
１つの側面において、本発明は、仮想アドレス空間を介して処理対象データにアクセスする処理の進捗状況に応じて、処理対象データに関する制御を行うことを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、情報処理装置は、記憶部、処理部、監視部、及び制御部を含む。記憶部は、処理対象データの仮想アドレス空間を示す情報を記憶する。処理部は、仮想アドレス空間を介して処理対象データに対する所定の処理を行う。監視部は、仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対する、処理部からのアクセスを監視する。制御部は、複数の監視領域のうち、監視部がアクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う。
【発明の効果】
【００１０】
１つの実施形態によれば、仮想アドレス空間を介して処理対象データにアクセスする処理の進捗状況に応じて、処理対象データに関する制御を行うことができる。
【図面の簡単な説明】
【００１１】
【図１】ＨＰＣ並列ファイルシステムの構成図である。
【図２】分散ファイルシステムの構成図である。
【図３】キャッシュを設けたＨＰＣ並列ファイルシステムの構成図である。
【図４】ＬＭＤＢデータファイルを示す図である。
【図５】アクセス位置を示す図である。
【図６】仮想アドレス空間を示す図である。
【図７】情報処理装置の機能的構成図である。
【図８】制御処理のフローチャートである。
【図９】情報処理システムの構成図である。
【図１０】計算ノードの機能的構成図である。
【図１１】データノードの機能的構成図である。
【図１２】分散深層学習における制御処理を示す図である。
【図１３】分散深層学習における制御処理のフローチャートである。
【図１４】パラメータを示す図である。
【図１５】メモリマップドアドレスの第１の状態を示す図である。
【図１６】メモリマップドアドレスの第２の状態を示す図である。
【図１７】メモリマップドアドレスの第３の状態を示す図である。
【図１８】メモリマップドアドレスの第４の状態を示す図である。
【図１９】メモリマップドアドレスの第５の状態を示す図である。
【図２０】メモリマップドアドレスの第６の状態を示す図である。
【図２１】メモリマップドアドレスの第７の状態を示す図である。
【図２２】メモリマップドアドレスの第８の状態を示す図である。
【図２３】メモリマップドアドレスの第９の状態を示す図である。
【図２４】メモリマップドアドレスの第１０の状態を示す図である。
【図２５】メモリマップドアドレスの第１１の状態を示す図である。
【図２６】メモリマップドアドレスの第１２の状態を示す図である。
【図２７】メモリマップドアドレスの第１３の状態を示す図である。
【図２８】メモリマップドアドレスの第１４の状態を示す図である。
【図２９】メモリマップドアドレスの第１５の状態を示す図である。
【図３０】メモリマップドアドレスの第１６の状態を示す図である。
【図３１】メモリマップドアドレスの第１７の状態を示す図である。
【図３２】実験で用いたＨＰＣ並列ファイルシステムの構成図である。
【図３３】計算ノード及びＯＳＳの構成図である。
【図３４】分散深層学習の実行結果を示す図である。
【図３５】実行結果を拡大した拡大図である。
【図３６】プリフェッチを起動しない場合の実行結果を示す図である。
【図３７】プロセス間通信を示す図である。
【図３８】プロセス間通信における制御処理のフローチャートである。
【図３９】メモリアクセスプロファイリングにおける制御処理のフローチャートである。
【図４０】情報処理装置のハードウェア構成図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、実施形態を詳細に説明する。
図１は、ＨＰＣ並列ファイルシステムの構成例を示している。図１のＨＰＣ並列ファイルシステムは、計算ノード１０１−１〜計算ノード１０１−３及びデータノード１０２−１〜データノード１０２−３を含み、これらのノードは、通信ネットワーク１０４によって互いに接続されている。各データノード１０２−ｉ（ｉ＝１〜３）は、記憶装置１０３−ｉを有する。計算ノード及びデータノードの個数は、４個以上であってもよい。
【００１３】
図１の構成では、深層学習における大量の処理対象データが複数のデータノード１０２−ｉに分散して格納され、複数の計算ノード１０１−ｉが処理対象データを共有することができる。しかし、各計算ノード１０１−ｉは、通信ネットワーク１０４を介してデータノード１０２−ｉからデータを取得するため、データ転送に伴うレイテンシが発生する。
【００１４】
図２は、Hadoop（登録商標）のアプローチによって計算ノードとデータノードを統合した分散ファイルシステムの構成例を示している。図１の分散ファイルシステムは、ノード２０１−１〜ノード２０１−３を含み、これらのノードは、通信ネットワーク２０３によって互いに接続されている。各ノード２０１−ｉ（ｉ＝１〜３）は、記憶装置２０２−ｉを有する。ノードの個数は、４個以上であってもよい。
【００１５】
図２の構成では、処理対象データが複数のノード２０１−ｉに分散して格納されるとともに、各ノード２０１−ｉが有するデータのレプリカが他のノード２０１−ｉに格納される。各ノード２０１−ｉは、自ノードの記憶装置２０２−ｉから直接データを取得して処理を行うことができるため、スループットが向上する。しかし、データが各ノード２０１−ｉに局在しているため、必ずしもＨＰＣには適していない。
【００１６】
深層学習のような大量のデータを処理するアプリケーションをＨＰＣ並列ファイルシステムにより実行するためには、データ転送に伴うレイテンシを削減することが望ましい。そのためには、各計算ノードにキャッシュを設けて、データノードが有するデータを一時的に記憶することが有効である。
【００１７】
図３は、計算ノードにキャッシュを設けたＨＰＣ並列ファイルシステムの構成例を示している。図３のＨＰＣ並列ファイルシステムは、図１の各計算ノード１０１−ｉにキャッシュ３０１−ｉを設けた構成を有する。キャッシュ３０１−ｉは、計算ノード１０１−ｉが処理に用いるデータの複製を一時的に記憶する。計算ノード１０１−ｉは、データノード１０２−ｉの代わりにキャッシュ３０１−ｉにアクセスすることで、データアクセスを高速化することができる。
【００１８】
例えば、計算ノード１０１−ｉは、分散深層学習のためのアプリケーションであるMessage Passing Interface-Caffe（ＭＰＩ−Ｃａｆｆｅ）を実行することで、深層学習を行うことができる。この場合、データノード１０２−ｉは、Lustre（登録商標） Object Storage Server（ＯＳＳ）を搭載していてもよく、キャッシュ３０１−ｉは、Lustre（登録商標）クライアントキャッシュであってもよい。また、記憶装置１０３−ｉは、Lightning Memory-Mapped Database（ＬＭＤＢ）であってもよい。ＬＭＤＢは、キー・バリュー・ストア（Key-Value Store，ＫＶＳ）の一例である。
【００１９】
図４は、ＬＭＤＢデータファイルの例を示している。図４のＬＭＤＢデータファイルは、プロセス１〜プロセス３がそれぞれ処理するデータ４０１〜データ４０３を含み、矢印４１１が示すように、プロセス１〜プロセス３によって連続的にアクセスされる。
【００２０】
図５は、図４のＬＭＤＢデータファイルにおけるアクセス位置の例を示している。データ４０１に対するプロセス１の現在のアクセス位置が位置５０１である場合、プロセス１が次にアクセスするデータは、範囲５０２のデータである。したがって、データアクセスパターンが連続アクセスである場合、位置５０１を検出することができれば、次のアクセス対象データを予測して、そのデータをデータノードから計算ノードのキャッシュにプリフェッチすることができる。
【００２１】
図６は、ＬＭＤＢデータファイルの仮想アドレス空間の例を示している。ＬＭＤＢデータファイルのデータ６０３は、いずれかの計算ノード上で動作するプロセスが処理するデータに対応し、いずれかのデータノードの記憶装置に格納されている。
【００２２】
メモリ６０２は、プロセスが動作している計算ノードのメモリに対応し、ページング方式のメモリマッピングの場合、データ６０３をページ毎に記憶することができる。メモリ６０２のページ６１２−１〜ページ６１２−６のうち、ページ６１２−１、ページ６１２−５、及びページ６１２−６には、データノードから転送されたデータの複製が格納されている。一方、ページ６１２−２〜ページ６１２−４には、データの複製が格納されていない。
【００２３】
仮想アドレス空間６０１は、プロセスがデータアクセスに用いる仮想アドレスの集合であり、領域６０４は、メモリマップドファイルの仮想アドレスを含む。領域６０４内の領域６１１−１〜領域６１１−６は、ページ６１２−１〜ページ６１２−６にそれぞれ対応する。
【００２４】
計算ノードは、プロセスから出力されるアクセス対象の仮想アドレスを、メモリ６０２の物理アドレスに変換することで、仮想アドレス空間６０１を介してデータ６０３にアクセスする。例えば、アクセス対象の仮想アドレスがデータを含むページ６１２−５に対応する場合、プロセスは、ページ６１２−５内のデータに直接アクセスすることができる。
【００２５】
一方、アクセス対象の仮想アドレスがデータを含まないページ６１２−２に対応する場合、ページフォルトが発生する。そして、計算ノードは、対応するデータを記憶するデータノードに対してデータ転送要求を送信し、データノードから受信したデータをページ６１２−２に格納し、プロセスは、ページ６１２−２内のデータにアクセスする。
【００２６】
このように、ページング方式のメモリマッピングにおいては、仮想アドレス空間内の各仮想アドレスがメモリ内の各物理アドレスに対応している。したがって、ＬＭＤＢデータファイルにおけるアクセス位置を検出することは、仮想アドレス空間におけるアクセスアドレスを検出することと等価である。
【００２７】
図７は、実施形態の情報処理装置の機能的構成例を示している。図７の情報処理装置７０１は、記憶部７１１、処理部７１２、監視部７１３、及び制御部７１４を含む。記憶部７１１は、処理対象データの仮想アドレス空間を示す情報を記憶する。処理部７１２、監視部７１３、及び制御部７１４は、仮想アドレス空間を利用した処理を行う。
【００２８】
図８は、図７の情報処理装置７０１が行う制御処理の例を示すフローチャートである。まず、処理部７１２は、仮想アドレス空間を介して処理対象データに対する所定の処理を行う（ステップ８０１）。次に、監視部７１３は、仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対する、処理部７１２からのアクセスを監視する（ステップ８０２）。そして、制御部７１４は、複数の監視領域のうち、監視部７１３がアクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う（ステップ８０３）。
【００２９】
図７の情報処理装置７０１によれば、仮想アドレス空間を介して処理対象データにアクセスする処理の進捗状況に応じて、処理対象データに関する制御を行うことができる。
【００３０】
図９は、図７の情報処理装置７０１を含む情報処理システムの構成例を示している。図９の情報処理システムは、例えば、分散深層学習を行うＨＰＣ並列ファイルシステムであり、計算ノード９０１−１〜計算ノード９０１−Ｎ（Ｎは２以上の整数）とデータノード９０２−１〜データノード９０２−Ｍ（Ｍは２以上の整数）を含む。これらのノードは、通信ネットワーク９０３によって互いに接続されている。
【００３１】
データノード９０２−１〜データノード９０２−Ｍは、処理対象データを分散して記憶し、計算ノード９０１−ｉ（ｉ＝１〜Ｎ）からのデータ転送要求に応じて、要求された部分データを計算ノード９０１−ｉへ転送する。計算ノード９０１−１〜計算ノード９０１−Ｎは、データノード９０２−１〜データノード９０２−Ｍから転送される部分データを用いて、並列にデータ処理を行う。
【００３２】
図１０は、図９の計算ノード９０１−ｉ（ｉ＝１〜Ｎ）の機能的構成例を示している。図１０の計算ノード９０１−ｉは、記憶部１００１−ｉ、処理部１００２−ｉ、監視部１００３−ｉ、及び制御部１００４−ｉを含む。計算ノード９０１−ｉは、図７の情報処理装置７０１に対応し、記憶部１００１−ｉ、処理部１００２−ｉ、監視部１００３−ｉ、及び制御部１００４−ｉは、記憶部７１１、処理部７１２、監視部７１３、及び制御部７１４にそれぞれ対応する。
【００３３】
図１１は、図９のデータノード９０２−ｊ（ｊ＝１〜Ｍ）の機能的構成例を示している。図１１のデータノード９０２−ｊは、ストレージ装置であり、記憶部１１０１−ｊ及び制御部１１０２−ｊを含む。記憶部１１０１−ｊは、処理対象データのうち、データノード９０２−ｊに割り当てられた一部のデータを記憶し、制御部１１０２−ｊは、計算ノード９０１−ｉからのデータ転送要求に応じて部分データを計算ノード９０１−ｉへ転送する制御を行う。記憶部１１０１−ｊは、ＬＭＤＢのようなＫＶＳであってもよく、リレーショナル・データベース（Relational Database，ＲＤＢ）であってもよい。
【００３４】
各計算ノード９０１−ｉの記憶部１００１−ｉは、キャッシュとして動作し、データノード９０２−ｊから転送される部分データを記憶するとともに、処理対象データの仮想アドレス空間を示す情報を記憶する。記憶部１００１−ｉが記憶する部分データは、仮想アドレス空間に含まれる複数の領域のうち、一部の領域の仮想アドレスに対応する。処理部１００２−ｉは、仮想アドレス空間を介して処理対象データにアクセスし、処理対象データを用いて深層学習を行う。
【００３５】
監視部１００３−ｉは、仮想アドレス空間内に複数の監視領域を設定し、それらの監視領域に対する処理部１００２−ｉからのアクセスを監視し、アクセスを検出した監視領域の仮想アドレスを制御部１００４−ｉへ出力する。制御部１００４−ｉは、監視部１００３−ｉが出力する仮想アドレスに基づいて、データノード９０２−ｊから部分データをプリフェッチし、記憶部１００１−ｉに格納する。
【００３６】
このとき、制御部１００４−ｉは、監視部１００３−ｉが出力する仮想アドレスに基づいて、処理部１００２−ｉがアクセスする仮想アドレスのアドレス範囲を予測する。そして、制御部１００４−ｉは、予測したアドレス範囲の部分データを記憶するデータノード９０２−ｊに対して、データ転送要求を送信し、そのデータノード９０２−ｊから受信した部分データを記憶部１００１−ｉに格納する。
【００３７】
図１２は、図９の各計算ノード９０１−ｉが行う分散深層学習における制御処理の例を示している。深層学習プロセス１２０１は、処理部１００２−ｉが生成するプロセスであり、シグナルハンドラ１２０５は、監視部１００３−ｉが生成するプロセスであり、入出力プロセス１２０６は、制御部１００４−ｉが生成するプロセスである。
【００３８】
ＬＭＤＢデータファイル１２０３は、深層学習のためのトレーニングデータ（処理対象データ）を含むファイルである。トレーニングデータは、画像、音声、又はテキストであってもよい。例えば、深層学習プロセス１２０１が画像認識のための深層学習を行う場合、ＬＭＤＢデータファイル１２０３は複数の画像を含む。
【００３９】
メモリマップドアドレス１２０２は、ＬＭＤＢデータファイル１２０３の仮想アドレス空間を示す情報である。この場合、ＬＭＤＢデータファイル１２０３の各ページが、メモリマップドアドレス１２０２に含まれる各領域に対応し、メモリマップドアドレス１２０２の各領域は、各ページに対応する範囲の仮想アドレスを含む。
【００４０】
まず、監視部１００３−ｉは、メモリマップドアドレス１２０２に含まれる複数の領域のうち、一部の領域を保護する（手順１２１１）。これにより、保護された領域が監視領域として設定され、その監視領域に対応するページが保護される。例えば、監視部１００３−ｉは、mprotectのようなシステムコールを用いて、メモリマップドアドレス１２０２内の領域に対するアクセスを禁止することで、その領域を保護することができる。図１２の例では、メモリマップドアドレス１２０２内の斜線で示された領域が監視領域に対応し、これらの監視領域は、互いに隣接しない位置に設定されている。
【００４１】
次に、深層学習プロセス１２０１は、メモリマップドアドレス１２０２内の複数の領域に対して所定の順序でアクセスすることで、ＬＭＤＢデータファイル１２０３にアクセスし、アクセスしたデータを用いて深層学習を行う（手順１２１２）。
【００４２】
深層学習プロセス１２０１が監視領域の仮想アドレスにアクセスした場合、保護されている領域に対するアクセス（フォルト）を示す制御信号１２０４が発生する（手順１２１３）。例えば、制御信号１２０４として、Signal Segmentation Violation（ＳＩＧＳＥＧＶ）信号を用いることができる。制御信号１２０４が発生した場合、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を中断させる（手順１２１４）。
【００４３】
シグナルハンドラ１２０５は、制御信号１２０４を検出し（手順１２１５）、制御信号１２０４に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域に対する保護を解除する（手順１２１６）。そして、シグナルハンドラ１２０５は、保護を解除した監視領域の仮想アドレスを制御部１００４−ｉへ出力し、入出力プロセス１２０６を呼び出す（手順１２１７）。
【００４４】
入出力プロセス１２０６は、ＬＭＤＢデータファイル１２０３のうち、深層学習プロセス１２０１が次にアクセスするアドレス範囲の部分データを、対応するデータノード９０２−ｊからプリフェッチする（手順１２１８）。そして、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を再開させる（手順１２１９）。これにより、深層学習プロセス１２０１は、保護が解除された監視領域に対応するページにアクセスして、深層学習を継続することができる。
【００４５】
なお、制御信号１２０４は、深層学習プロセス１２０１がいずれかの監視領域にアクセスした場合だけでなく、入出力プロセス１２０６がプリフェッチのためにいずれかの監視領域にアクセスした場合にも発生する。
【００４６】
図１２の制御処理において、ＳＩＧＳＥＧＶ信号の代わりに、カーネルレベルのページフォルト信号を、制御信号１２０４として用いることも可能である。この場合、シグナルハンドラ１２０５の代わりに、カーネルレベルの例外ハンドラが用いられ、手順１２１５において、例外ハンドラが例外の発生を検出する。
【００４７】
図１３は、分散深層学習における制御処理の具体例を示すフローチャートである。まず、処理部１００２−ｉは、深層学習プロセス１２０１を起動し、監視部１００３−ｉは、深層学習プロセス１２０１のプログラムに監視処理のための付加コードを注入する（ステップ１３０１）。例えば、監視部１００３−ｉは、LD_PRELOADのような環境変数を用いて、深層学習プロセス１２０１のプログラムに付加コードを注入することができる。この付加コードには、シグナルハンドラ１２０５を生成するコードも含まれる。
【００４８】
次に、監視部１００３−ｉは、ステップ１３０２、ステップ１３０３、ステップ１３２１、ステップ１３２３〜ステップ１３２６、及びステップ１３３１〜ステップ１３３３の処理を行う。このうち、ステップ１３２１、ステップ１３２３〜ステップ１３２６、及びステップ１３３１〜ステップ１３３３の処理は、注入された付加コードに基づいて実行される。
【００４９】
処理部１００２−ｉは、深層学習プロセス１２０１を用いてステップ１３２２の処理を行い、制御部１００４−ｉは、ステップ１３０４〜ステップ１３０８及びステップ１３１１〜ステップ１３１３の処理を行う。このうち、ステップ１３１１〜ステップ１３１３の処理は、入出力プロセス１２０６を用いて実行される。
【００５０】
監視部１００３−ｉは、付加コードに基づいて、監視領域を保護するための子プロセスを生成し（ステップ１３２１）、生成された子プロセスは、監視領域の位置を示す位置情報を待ち合わせる（ステップ１３３１）。子プロセスは、監視部１００３−ｉから位置情報を受信したか否かをチェックし（ステップ１３３２）、位置情報を受信していない場合（ステップ１３３２，ＮＯ）、ステップ１３３１及びステップ１３３２の処理を繰り返す。
【００５１】
監視部１００３−ｉは、メモリマップドアドレス１２０２内に監視領域を設定し（ステップ１３０２）、設定した監視領域の位置を示す位置情報を子プロセスへ転送する（ステップ１３０３）。子プロセスは、位置情報を受信した場合（ステップ１３３２，ＹＥＳ）、受信した位置情報が示しているすべての監視領域を保護する（ステップ１３３３）。
【００５２】
次に、制御部１００４−ｉは、入出力プロセス１２０６を生成し（ステップ１３０４）、入出力プロセス１２０６は、プリフェッチ指示を待ち合わせる（ステップ１３１１）。入出力プロセス１２０６は、制御部１００４−ｉからプリフェッチ指示を受信したか否かをチェックし（ステップ１３１２）、プリフェッチ指示を受信していない場合（ステップ１３１２，ＮＯ）、ステップ１３１１及びステップ１３１２の処理を繰り返す。
【００５３】
制御部１００４−ｉは、シグナルハンドラ１２０５からの保護解除通知を待ち合わせる（ステップ１３０５）。制御部１００４−ｉは、シグナルハンドラ１２０５から保護解除通知を受信したか否かをチェックし（ステップ１３０６）、保護解除通知を受信していない場合（ステップ１３０６，ＮＯ）、ステップ１３０５及びステップ１３０６の処理を繰り返す。
【００５４】
深層学習プロセス１２０１は、ＬＭＤＢデータファイル１２０３にアクセスし、アクセスしたデータを用いて深層学習を行う（ステップ１３２２）。シグナルハンドラ１２０５は、フォルトを示す制御信号１２０４が発生したか否かをチェックする（ステップ１３２３）。制御信号１２０４が発生していない場合（ステップ１３２３，ＮＯ）、深層学習プロセス１２０１は、ステップ１３２２の処理を継続する。
【００５５】
一方、制御信号１２０４が発生した場合（ステップ１３２３，ＹＥＳ）、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を中断させる（ステップ１３２４）。そして、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域に対する保護を解除するとともに、過去に保護を解除した監視領域を再度保護する。このとき、シグナルハンドラ１２０５は、制御信号１２０４が発生した時刻を記録しておくことで、記録した時刻に基づいてメモリアクセス速度を計算することができる。
【００５６】
次に、シグナルハンドラ１２０５は、保護を解除した監視領域の仮想アドレスを含む保護解除通知を制御部１００４−ｉへ転送し（ステップ１３２５）、深層学習プロセス１２０１の処理を再開させる（ステップ１３２６）。そして、深層学習プロセス１２０１及びシグナルハンドラ１２０５は、ステップ１３２２以降の処理を繰り返す。
【００５７】
制御部１００４−ｉは、保護解除通知を受信した場合（ステップ１３０６，ＹＥＳ）、受信した保護解除通知に含まれる仮想アドレスに基づいて、プリフェッチを起動するか否かを判定する（ステップ１３０７）。
【００５８】
例えば、保護解除通知に含まれる仮想アドレスが最初の監視領域に対応する場合、制御部１００４−ｉは、プリフェッチを起動する。また、保護解除通知に含まれる仮想アドレスが、既に起動されているプリフェッチ動作のアドレス範囲に含まれており、かつ、所定の閾値に対応する仮想アドレスに達していない場合、制御部１００４−ｉは、新たなプリフェッチを起動しない。一方、保護解除通知に含まれる仮想アドレスがその閾値に対応する仮想アドレスに達している場合、制御部１００４−ｉは、新たなプリフェッチを起動する。
【００５９】
プリフェッチを起動しない場合（ステップ１３０７，ＮＯ）、制御部１００４−ｉは、ステップ１３０５以降の処理を繰り返す。一方、プリフェッチを起動する場合（ステップ１３０７，ＹＥＳ）、制御部１００４−ｉは、保護解除通知に含まれる仮想アドレスに基づいて、深層学習プロセス１２０１が次にアクセスする仮想アドレスのアドレス範囲を予測する（ステップ１３０８）。そして、制御部１００４−ｉは、予測したアドレス範囲の部分データのプリフェッチを起動するプリフェッチ指示を、入出力プロセス１２０６へ転送し、ステップ１３０５以降の処理を繰り返す。
【００６０】
入出力プロセス１２０６は、プリフェッチ指示を受信した場合（ステップ１３１２，ＹＥＳ）、プリフェッチ指示が示すアドレス範囲の部分データを、対応するデータノード９０２−ｊからプリフェッチする（ステップ１３１３）。そして、入出力プロセス１２０６は、プリフェッチした部分データを記憶部１００１−ｉに格納して、ステップ１３１１以降の処理を繰り返す。
【００６１】
図１３の制御処理によれば、各計算ノードにおける深層学習の進捗状況に応じて、次に処理されるトレーニングデータをデータノードからプリフェッチすることが可能になる。これにより、計算ノードとデータノードとの間のデータ転送に伴うレイテンシが削減され、分散深層学習が高速化される。
【００６２】
次に、図１４乃至図３１を参照しながら、図１３の制御処理に基づくプリフェッチの例について説明する。
【００６３】
図１４は、制御処理で用いられるパラメータの例を示している。メモリマップドアドレス１２０２内の複数のチェックポイントＣＰは、監視領域の位置を示す位置情報に対応する仮想アドレスであり、距離Ｄは、隣接する２つのチェックポイントＣＰの間隔を表す。また、開始アドレスＳＡ及び終了アドレスＥＡは、ＬＭＤＢデータファイル１２０３内の処理対象データの範囲Ｒを示す仮想アドレスである。この例では、深層学習プロセス１２０１は、開始アドレスＳＡから終了アドレスＥＡに向かって、連続的にデータにアクセスする。
【００６４】
距離Ｄ１は、開始アドレスＳＡから、最初のプリフェッチが起動される仮想アドレスまでの間隔を表す。したがって、距離Ｄ１の範囲のデータに対するプリフェッチは行われない。
【００６５】
サイズＳは、１回のプリフェッチ動作でデータノード９０２−ｊから連続的に転送されるプリフェッチ対象データのサイズを表す。閾値ＴＨは、プリフェッチ中に新たなプリフェッチを起動するか否かを判定するためのデータ量の閾値である。複数のチェックポイントＣＰのうち、位置１４０１〜位置１４０３に設定されたチェックポイントＣＰは、新たなプリフェッチを起動するトリガとなり、それ以外のチェックポイントＣＰはトリガとはならない。
【００６６】
図１５は、メモリマップドアドレス１２０２の第１の状態を示している。第１の状態においては、未だチェックポイントＣＰは設定されていない。ページサイズＰＳは、記憶部１００１−ｉ内における各ページのデータ量を表す。
【００６７】
図１６は、メモリマップドアドレス１２０２の第２の状態を示している。第２の状態において、監視部１００３−ｉは、ページサイズＰＳよりも大きなデータ量に対応する距離Ｄを、チェックポイントＣＰ間の間隔として用いて、複数のチェックポイントＣＰを設定する。
【００６８】
図１７は、メモリマップドアドレス１２０２の第３の状態を示している。第３の状態において、監視部１００３−ｉによって生成された子プロセスは、斜線で示すように、各チェックポイントＣＰを含むページに対応する監視領域を保護する。
【００６９】
図１８は、メモリマップドアドレス１２０２の第４の状態を示している。第４の状態において、深層学習プロセス１２０１は、開始アドレスＳＡにアクセスして、範囲Ｒの処理対象データに対する深層学習を開始する。ポインタＰ１は、深層学習プロセス１２０１が現在アクセスしている仮想アドレスを表す。
【００７０】
図１９は、メモリマップドアドレス１２０２の第５の状態を示している。第５の状態において、ポインタＰ１は、開始アドレスＳＡから距離Ｄ１の範囲に存在し、この範囲は監視領域に該当しないため、制御信号１２０４は発生しない。
【００７１】
図２０は、メモリマップドアドレス１２０２の第６の状態を示している。第６の状態において、ポインタＰ１が最初の監視領域に到達したため、制御信号１２０４が発生する。そこで、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を中断させて、現在時刻を時刻ｔ１として記録する。
【００７２】
図２１は、メモリマップドアドレス１２０２の第７の状態を示している。第７の状態において、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、ポインタＰ１が到達した監視領域を特定し、特定した監視領域に対する保護を解除する。図２１では、ポインタＰ１が接する監視領域の斜線が削除されている。
【００７３】
図２２は、メモリマップドアドレス１２０２の第８の状態を示している。第８の状態において、シグナルハンドラ１２０５は、ポインタＰ１が到達した監視領域の仮想アドレスを含む保護解除通知を制御部１００４−ｉへ転送し、深層学習プロセス１２０１の処理を再開させる。
【００７４】
保護解除通知に含まれる仮想アドレスとしては、監視領域内の所定位置の仮想アドレスが用いられる。所定位置は、監視領域の先頭であってもよく、監視領域の末尾であってもよく、監視領域に含まれるチェックポイントＣＰであってもよい。
【００７５】
制御部１００４−ｉは、保護解除通知に含まれる仮想アドレスが最初の監視領域に対応するため、プリフェッチを起動することを決定し、深層学習プロセス１２０１が次にアクセスするアドレス範囲を予測する。この例では、深層学習プロセス１２０１が範囲Ｒのデータに連続的にアクセスしているため、制御部１００４−ｉは、ポインタＰ１が示す仮想アドレスから、サイズＳのプリフェッチ対象データに対応するアドレス範囲を、次にアクセスするアドレス範囲に決定する。
【００７６】
次に、制御部１００４−ｉは、そのアドレス範囲の部分データのプリフェッチを起動するプリフェッチ指示を、入出力プロセス１２０６へ転送する。入出力プロセス１２０６は、プリフェッチ指示に基づいて、プリフェッチ対象データを連続的にプリフェッチする動作を開始する。
【００７７】
図２３は、メモリマップドアドレス１２０２の第９の状態を示している。第９の状態において、入出力プロセス１２０６は、プリフェッチ対象データのプリフェッチを継続する。ポインタＰ２は、入出力プロセス１２０６が現在プリフェッチしているデータの仮想アドレスを表す。深層学習プロセス１２０１は、ポインタＰ１に対応するプリフェッチ済みのデータを用いて、深層学習を継続する。
【００７８】
図２４は、メモリマップドアドレス１２０２の第１０の状態を示している。第１０の状態において、入出力プロセス１２０６は、ポインタＰ２に対応するデータのプリフェッチを継続し、深層学習プロセス１２０１は、ポインタＰ１に対応するデータを用いて深層学習を継続する。
【００７９】
図２５は、メモリマップドアドレス１２０２の第１１の状態を示している。第１１の状態において、ポインタＰ２が次の監視領域に到達したため、制御信号１２０４が発生する。そこで、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を中断させる。
【００８０】
図２６は、メモリマップドアドレス１２０２の第１２の状態を示している。第１２の状態において、シグナルハンドラ１２０５は、制御信号１２０４が発生したため、保護が解除されている最初の監視領域を再度保護する。
【００８１】
図２７は、メモリマップドアドレス１２０２の第１３の状態を示している。第１３の状態において、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、ポインタＰ２が到達した監視領域を特定し、特定した監視領域に対する保護を解除する。そして、シグナルハンドラ１２０５は、ポインタＰ２が到達した監視領域の仮想アドレスを含む保護解除通知を制御部１００４−ｉへ転送し、深層学習プロセス１２０１の処理を再開させる。
【００８２】
この場合、保護解除通知に含まれる仮想アドレスが、既に起動されているプリフェッチ動作のアドレス範囲に含まれているが、閾値ＴＨに対応する仮想アドレスに達していないため、制御部１００４−ｉは、プリフェッチを起動しない。
【００８３】
図２８は、メモリマップドアドレス１２０２の第１４の状態を示している。第１４の状態において、ポインタＰ２がさらに次の監視領域に到達したため、制御信号１２０４が発生する。そこで、シグナルハンドラ１２０５は、深層学習プロセス１２０１の処理を中断させる。
【００８４】
この場合、ポインタＰ２が到達した監視領域は、サイズＳのプリフェッチ対象データに対応するアドレス範囲における最後の監視領域である。そこで、シグナルハンドラ１２０５は、現在時刻を時刻ｔ２として記録し、時刻ｔ２から時刻ｔ１を減算することで、メモリアクセス時間ｔを計算する。このメモリアクセス時間ｔは、メモリアクセス速度を示す指標として用いることができる。
【００８５】
図２９は、メモリマップドアドレス１２０２の第１５の状態を示している。第１５の状態において、シグナルハンドラ１２０５は、制御信号１２０４が発生したため、直前に保護を解除した監視領域を再度保護する。
【００８６】
図３０は、メモリマップドアドレス１２０２の第１６の状態を示している。第１６の状態において、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、ポインタＰ２が到達した監視領域を特定し、特定した監視領域に対する保護を解除する。
【００８７】
図３１は、メモリマップドアドレス１２０２の第１７の状態を示している。第１７の状態において、シグナルハンドラ１２０５は、ポインタＰ２が到達した監視領域の仮想アドレスを含む保護解除通知を制御部１００４−ｉへ転送し、深層学習プロセス１２０１の処理を再開させる。
【００８８】
この場合、保護解除通知に含まれる仮想アドレスが、既に起動されているプリフェッチ動作のアドレス範囲に含まれており、かつ、閾値ＴＨに対応する仮想アドレスを超えているため、制御部１００４−ｉは、プリフェッチを起動することを決定する。そして、制御部１００４−ｉは、既に起動されているプリフェッチ動作のアドレス範囲の末尾から、サイズＳのプリフェッチ対象データに対応するアドレス範囲を、次にアクセスするアドレス範囲に決定する。
【００８９】
次に、制御部１００４−ｉは、そのアドレス範囲の部分データのプリフェッチを起動するプリフェッチ指示を、入出力プロセス１２０６へ転送する。入出力プロセス１２０６は、プリフェッチ指示に基づいて、次のプリフェッチ対象データを連続的にプリフェッチする動作を開始する。
【００９０】
なお、閾値ＴＨは、サイズＳ以下のデータ量を表すが、好ましくは次式を満たすように設定される。
【００９１】
Ｇ≦Ｓ−ＴＨ      （１）
【００９２】
式（１）のＧは、仮想アドレス空間における距離Ｄをデータ量に換算した間隔を表す。式（１）を満たす閾値ＴＨを用いた場合、閾値ＴＨに対応する仮想アドレスと、プリフェッチ対象データの末尾に対応する仮想アドレスとの間に、少なくとも１つのチェックポイントＣＰが存在する。したがって、プリフェッチ対象データの末尾のデータがプリフェッチされる前に制御信号１２０４が発生し、既に起動されているプリフェッチ動作が完了する前に、次のプリフェッチを起動することが可能になる。
【００９３】
次に、図３２乃至図３６を参照しながら、図１３の制御処理に基づく実験結果の例について説明する。この実験では、mprotectを用いて監視領域が保護され、制御信号１２０４としてＳＩＧＳＥＧＶ信号が用いられている。
【００９４】
図３２は、実験で用いたＨＰＣ並列ファイルシステムの構成例を示している。図３２のＨＰＣ並列ファイルシステムは、計算ノードシステム３２０１及びデータノードシステム３２０２を含む。計算ノードシステム３２０１とデータノードシステム３２０２は、Infiniband３２０３によって接続されている。
【００９５】
計算ノードシステム３２０１は、計算ノード３２１１−１〜計算ノード３２１１−１６を含み、ＭＰＩ−Ｃａｆｆｅを実行する。データノードシステム３２０２は、Fujitsu Exabyte File System（ＦＥＦＳ）（商標）であり、Meta Data Server（ＭＤＳ）３２２１及びObject Storage Server（ＯＳＳ）３２３１−１〜ＯＳＳ３２３１−３を含む。計算ノード３２１１−ｉ（ｉ＝１〜１６）は、図９の計算ノード９０１−ｉに対応し、ＯＳＳ３２３１−ｊ（ｊ＝１〜３）は、データノード９０２−ｊに対応する。
【００９６】
各計算ノード３２１１−ｉは、Solid State Drive（ＳＳＤ）３２１２及びGraphics Processing Unit（ＧＰＵ）３２１３を有する。ＳＳＤ３２１２は、図１０の記憶部１００１−ｉとして用いられ、ＧＰＵ３２１３は、処理部１００２−ｉとして用いられる。
【００９７】
各ＯＳＳ３２３１−ｊは、Hard Disk Drive（ＨＤＤ）３２３２及びＳＳＤ３２３３を有する。ＨＤＤ３２３２及びＳＳＤ３２３３は、図１１の記憶部１１０１−ｊとして用いられる。ＨＤＤ３２３２は、Object Storage Target（ＯＳＴ）３２３４−１及びＯＳＴ３２３４−２を記憶し、ＳＳＤ３２３３は、ＯＳＴ３２３５−１〜ＯＳＴ３２３５−４を記憶する。ＯＳＴ３２３４−１、ＯＳＴ３２３４−２、及びＯＳＴ３２３５−１〜ＯＳＴ３２３５−４は、処理対象データに対応する。
【００９８】
ＭＤＳ３２２１は、ＳＳＤ３２２２を有し、ＳＳＤ３２２２は、Management Target（ＭＧＴ）３２２３、ＨＤＤ  Meta Data Target（ＭＤＴ）３２２４、及びＳＳＤ  ＭＤＴ３２２５を記憶する。ＭＧＴ３２２３、ＨＤＤ  ＭＤＴ３２２４、及びＳＳＤ  ＭＤＴ３２２５は、ＯＳＴ３２３４−１、ＯＳＴ３２３４−２、及びＯＳＴ３２３５−１〜ＯＳＴ３２３５−４のための管理情報である。
【００９９】
図３３は、図３２の計算ノード３２１１−ｉ及びＯＳＳ３２３１−ｊの構成例を示している。図３３の各計算ノード３２１１−ｉは、メモリ３３０１、Central Processing Unit（ＣＰＵ）３３０２、ＧＰＵ３３０３、及びHost Channel Adapter（ＨＣＡ）３３０４を含む。ＧＰＵ３３０３は、図３２のＧＰＵ３２１３に対応する。メモリ３３０１は、図１０の記憶部１００１−ｉとして用いられ、ＣＰＵ３３０２は、処理部１００２−ｉ、監視部１００３−ｉ、及び制御部１００４−ｉとして用いられる。ＨＣＡ３３０４は、Infiniband３２０３を介してＯＳＳ３２３１−１〜ＯＳＳ３２３１−３と通信する。
【０１００】
各ＯＳＳ３２３１−ｊは、ＨＣＡ３３１１、ＣＰＵ３３１２、及びＳＳＤ３３１３を含む。ＳＳＤ３３１３は、図３２のＳＳＤ３２３３に対応する。ＣＰＵ３３１２は、図１１の制御部１１０２−ｊとして用いられる。ＨＣＡ３３１１は、Infiniband３２０３を介して計算ノード３２１１−１〜計算ノード３２１１−１６と通信する。
【０１０１】
図３４は、図３２及び図３３のＨＰＣ並列ファイルシステムによる分散深層学習の実行結果の例を示している。図３４の横軸は、処理対象データを記憶する記憶装置の構成のバリエーションを示しており、縦軸は、分散深層学習の実行時間を示している。
【０１０２】
横軸のＦＥＦＳ  ＨＤＤは、図３３のＳＳＤ３３１３の代わりに図３２のＨＤＤ３２３２を用いた構成を表し、ＦＥＦＳ  ＳＳＤは、図３３の構成を表す。Ｌｏｃａｌ  ＳＳＤは、ＯＳＳ３２３１−１〜ＯＳＳ３２３１−３の代わりに、図３２の各計算ノード３２１１−ｉのＳＳＤ３２１２に処理対象データを格納する構成を表す。
【０１０３】
各構成におけるＥ１は、図１３の制御処理を適用せずに、分散深層学習を実行した結果（Baseline）を示している。したがって、Ｅ１の分散深層学習では、プリフェッチは行われていない。また、Ｅ２〜Ｅ１５は、図１３の制御処理を適用してプリフェッチを行った場合の間隔Ｇ及びサイズＳのバリエーションを示している。Ｅ２〜Ｅ１５の間隔Ｇ及びサイズＳは、以下の通りである。ＭＢは、メガバイトを表す。
【０１０４】
Ｅ２    Ｇ＝８ＭＢ      Ｓ＝８ＭＢ
Ｅ３    Ｇ＝８ＭＢ      Ｓ＝１０ＭＢ
Ｅ４    Ｇ＝１０ＭＢ    Ｓ＝１０ＭＢ
Ｅ５    Ｇ＝８ＭＢ      Ｓ＝５０ＭＢ
Ｅ６    Ｇ＝１０ＭＢ    Ｓ＝５０ＭＢ
Ｅ７    Ｇ＝３２ＭＢ    Ｓ＝５０ＭＢ
Ｅ８    Ｇ＝８ＭＢ      Ｓ＝１２８ＭＢ
Ｅ９    Ｇ＝１０ＭＢ    Ｓ＝１２８ＭＢ
Ｅ１０  Ｇ＝３２ＭＢ    Ｓ＝１２８ＭＢ
Ｅ１１  Ｇ＝１２８ＭＢ  Ｓ＝１２８ＭＢ
Ｅ１２  Ｇ＝８ＭＢ      Ｓ＝５１２ＭＢ
Ｅ１３  Ｇ＝３２ＭＢ    Ｓ＝５１２ＭＢ
Ｅ１４  Ｇ＝１２８ＭＢ  Ｓ＝５１２ＭＢ
Ｅ１５  Ｇ＝５１２ＭＢ  Ｓ＝５１２ＭＢ
【０１０５】
閾値ＴＨは、サイズＳの７５％に設定されている。各実行結果は、分散深層学習を所定回数実行して得られた実行時間の分布範囲を表し、平均値を示す横線と標準偏差を示す矩形とを含む。例えば、ＦＥＦＳ  ＨＤＤにおける平均値のうち最長の実行時間は、Ｅ１の２０４５秒であり、最短の実行時間は、Ｅ６の２４５．７３秒である。
【０１０６】
ＦＥＦＳ  ＳＳＤにおける平均値のうち最長の実行時間は、Ｅ１の２８４．６５秒であり、最短の実行時間は、Ｅ７の１７６．５０秒である。また、Ｌｏｃａｌ  ＳＳＤにおける平均値のうち最長の実行時間は、Ｅ１の３２２．８６秒であり、最短の実行時間は１６５．２３秒である。
【０１０７】
図３５は、図３４の実行結果を拡大した拡大図である。例えば、ＦＥＦＳ  ＨＤＤにおけるＥ２の実行結果において、横線３５０１は実行時間の平均値を示し、矩形３５０２は標準偏差を示す。
【０１０８】
いずれの記憶装置の構成においても、Ｅ２〜Ｅ１５の実行結果はＥ１の実行結果よりも良好である。ＦＥＦＳ  ＨＤＤにおける最短の実行時間は、Ｅ１の実行時間よりも８７．９８％削減されており、ＦＥＦＳ  ＳＳＤにおける最短の実行時間は、Ｅ１の実行時間よりも３７．９９％削減されている。さらに、Ｌｏｃａｌ  ＳＳＤにおける最短の実行時間は、Ｅ１の実行時間よりも４８．８２％削減されている。
【０１０９】
図３６は、図３２及び図３３のＨＰＣ並列ファイルシステムにおいて、制御信号１２０４が発生してもプリフェッチを起動しない場合の実行結果の例を示している。この場合、図１３のステップ１３０４〜ステップ１３０８、ステップ１３１１〜ステップ１３１３、及びステップ１３２５の処理が省略される。
【０１１０】
図３６の横軸は、間隔Ｇを示しており、縦軸は、分散深層学習の実行時間を示している。ただし、横軸のBaselineは、図１３の制御処理を適用せずに分散深層学習を実行した場合を示す。Ｃ１は、ＦＥＦＳ  ＨＤＤにおける実行結果を表し、Ｃ２は、ＦＥＦＳ  ＳＳＤにおける実行結果を表し、Ｃ３は、Ｌｏｃａｌ  ＳＳＤにおける実行結果を表す。
【０１１１】
図３６の実行結果によれば、記憶装置の構成及び間隔Ｇの値に依らずに、Baselineとほぼ同じ実行時間が得られている。したがって、監視領域の保護及び制御信号１２０４の検出に伴うオーバヘッドは極めて小さいことが分かる。
【０１１２】
図１２の制御処理は、分散深層学習以外に、メモリマッピングを用いて処理対象データにアクセスする他の処理に対しても適用することが可能である。このような処理としては、プロセス間通信、メモリアクセスプロファイリング等が挙げられる。
【０１１３】
図３７は、プロセス間通信の例を示している。図３７のプロセス間通信では、第１プロセス３７０１から第２プロセス３７０２へ転送されるデータが、処理対象データとして共有メモリ３７０３に格納される。第１プロセス３７０１は、矢印３７１１が示すように、共有メモリ３７０３に連続的に処理対象データを書き込み、第２プロセス３７０２は、矢印３７１２が示すように、共有メモリ３７０３から連続的に処理対象データを読み出す。
【０１１４】
そして、第２プロセス３７０２が保護されたページ３７１３にアクセスしたとき、制御信号１２０４が発生し、ページ３７１３に対するアクセスの発生が第１プロセス３７０１に通知される。このとき、第１プロセス３７０１は、第２プロセス３７０２が次に読み出すデータを共有メモリ３７０３に書き込む。
【０１１５】
例えば、図７の情報処理装置７０１内においてプロセス間通信が行われる場合、記憶部７１１が共有メモリ３７０３として用いられ、制御部７１４が第１プロセス３７０１を制御し、処理部７１２が第２プロセス３７０２を制御する。
【０１１６】
図３８は、図３７のプロセス間通信における制御処理の具体例を示すフローチャートである。まず、制御部７１４は、第１プロセス３７０１を起動し（ステップ３８０１）、共有メモリ３７０３のメモリマッピングを設定する（ステップ３８０２）。これにより、図１２のメモリマップドアドレス１２０２が生成される。
【０１１７】
処理部７１２は、第２プロセス３７０２を起動し、監視部７１３は、第２プロセス３７０２のプログラムに監視処理のための付加コードを注入する（ステップ３８３１）。そして、処理部７１２は、ステップ３８０２と同じメモリマッピングを設定する（ステップ３８３２）。
【０１１８】
次に、監視部７１３は、ステップ３８０３、ステップ３８０４、ステップ３８３３、ステップ３８３５〜ステップ３８３８、及びステップ３８４１〜ステップ３８４３の処理を行う。このうち、ステップ３８３３、ステップ３８３５〜ステップ３８３８、及びステップ３８４１〜ステップ３８４３の処理は、注入された付加コードに基づいて実行される。
【０１１９】
処理部７１２は、第２プロセス３７０２を用いてステップ３８３４の処理を行い、制御部７１４は、第１プロセス３７０１を用いて、ステップ３８０５〜ステップ３８１２及びステップ３８２１〜ステップ３８２３の処理を行う。
【０１２０】
監視部７１３は、付加コードに基づいて、監視領域を保護するための子プロセスを生成し（ステップ３８３３）、生成された子プロセスは、ステップ３８４１〜ステップ３８４３の処理を行う。ステップ３８４１〜ステップ３８４３の処理は、図１３のステップ１３３１〜ステップ１３３３の処理と同様である。
【０１２１】
監視部７１３は、メモリマップドアドレス１２０２内に監視領域を設定し（ステップ３８０３）、設定した監視領域の位置を示す位置情報を子プロセスへ転送する（ステップ３８０４）。
【０１２２】
次に、第１プロセス３７０１は、ライトプロセスを生成し（ステップ３８０５）、指示プロセスを生成する（ステップ３８０６）。そして、第１プロセス３７０１は、次に共有メモリ３７０３に書き込むライトデータを準備し（ステップ３８０７）、レディ通知を指示プロセスへ転送して（ステップ３８０８）、ステップ３８０７及びステップ３８０８の処理を繰り返す。
【０１２３】
ライトプロセスは、ライト指示を待ち合わせる（ステップ３８２１）。ライトプロセスは、指示プロセスからライト指示を受信したか否かをチェックし（ステップ３８２２）、ライト指示を受信していない場合（ステップ３８２２，ＮＯ）、ステップ３８２１及びステップ３８２２の処理を繰り返す。
【０１２４】
指示プロセスは、シグナルハンドラ１２０５からの保護解除通知を待ち合わせる（ステップ３８０９）。指示プロセスは、シグナルハンドラ１２０５から保護解除通知を受信したか否かをチェックし（ステップ３８１０）、保護解除通知を受信していない場合（ステップ３８１０，ＮＯ）、ステップ３８０９及びステップ３８１０の処理を繰り返す。
【０１２５】
第２プロセス３７０２は、共有メモリ３７０３にアクセスし、共有メモリ３７０３からデータを読み出す（ステップ３８３４）。シグナルハンドラ１２０５は、フォルトを示す制御信号１２０４が発生したか否かをチェックする（ステップ３８３５）。制御信号１２０４が発生していない場合（ステップ３８３５，ＮＯ）、第２プロセス３７０２は、ステップ３８３４の処理を継続する。
【０１２６】
一方、制御信号１２０４が発生した場合（ステップ３８３５，ＹＥＳ）、シグナルハンドラ１２０５は、第２プロセス３７０２の処理を中断させる（ステップ３８３６）。そして、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域に対する保護を解除するとともに、過去に保護を解除した監視領域を再度保護する。このとき、シグナルハンドラ１２０５は、制御信号１２０４が発生した時刻を記録しておくことで、記録した時刻に基づいてメモリアクセス速度を計算することができる。
【０１２７】
次に、シグナルハンドラ１２０５は、保護を解除した監視領域の仮想アドレスを含む保護解除通知を指示プロセスへ転送し（ステップ３８３７）、第２プロセス３７０２の処理を再開させる（ステップ３８３８）。そして、第２プロセス３７０２及びシグナルハンドラ１２０５は、ステップ３８３４以降の処理を繰り返す。
【０１２８】
指示プロセスは、保護解除通知を受信した場合（ステップ３８１０，ＹＥＳ）、ステップ３８１１の処理を行う。ステップ３８１１において、指示プロセスは、保護解除通知に含まれる仮想アドレスと、第１プロセス３７０１から受信したレディ通知とに基づいて、第２プロセス３７０２が次に読み出すライトデータが準備されているか否かをチェックする。ライトデータが準備されていない場合（ステップ３８１１，ＮＯ）、指示プロセスは、ステップ３８０９以降の処理を繰り返す。
【０１２９】
一方、ライトデータが準備されている場合（ステップ３８１１，ＹＥＳ）、指示プロセスは、そのライトデータを書き込ませるライト指示をライトプロセスへ転送し（ステップ３８１２）、ステップ３８０９以降の処理を繰り返す。
【０１３０】
ライトプロセスは、ライト指示を受信した場合（ステップ３８２２，ＹＥＳ）、準備されているライトデータを共有メモリ３７０３に書き込む（ステップ３８２３）。そして、ライトプロセスは、ステップ３８２１以降の処理を繰り返す。
【０１３１】
図３８の制御処理によれば、第２プロセス３７０２によるデータ読み出し処理の進捗状況に応じて、次に読み出されるデータを第１プロセス３７０１が共有メモリ３７０３に書き込むことが可能になる。これにより、データ書き込み処理に伴う待ち時間が削減され、プロセス間通信が効率化される。
【０１３２】
次に、メモリアクセスプロファイリングの例について説明する。メモリアクセスプロファイリングにおいて、リゾルバは、対象プログラムの実行中にアクセスされる仮想アドレスから、対象プログラムの挙動を示す識別情報を出力する。この識別情報としては、関数名、変数名等のユーザが識別可能な情報を用いることができる。
【０１３３】
例えば、図７の情報処理装置７０１がメモリアクセスプロファイリングを行う場合、処理部７１２が対象プログラムを実行し、制御部７１４がリゾルバを制御する。リゾルバは、制御部７１４によって生成されるプロセスである。記憶部７１１は、対象プログラムの実行中に処理部７１２がアクセスする仮想アドレスと、処理部７１２の挙動を示す識別情報との対応関係を示す識別情報テーブルを記憶する。
【０１３４】
そして、処理部７１２が保護されたページにアクセスしたとき、制御信号１２０４が発生し、そのページに対するアクセスの発生がリゾルバに通知される。このとき、リゾルバは、識別情報テーブルに基づいて、通知された仮想アドレスに対応する識別情報を出力する。
【０１３５】
図３９は、メモリアクセスプロファイリングにおける制御処理の具体例を示すフローチャートである。まず、制御部７１４は、リゾルバを起動する（ステップ３９０１）。処理部７１２は、コンパイラを用いて対象プログラムをコンパイルすることで、識別情報テーブルを含む実行ファイルを生成する（ステップ３９１１）。そして、処理部７１２は、実行ファイルを実行することで対象プログラムを起動し、監視部７１３は、実行ファイルに監視処理のための付加コードを注入する（ステップ３９１２）。
【０１３６】
次に、監視部７１３は、ステップ３９０２、ステップ３９０３、ステップ３９１３、ステップ３９１５〜ステップ３９１８、及びステップ３９２１〜ステップ３９２３の処理を行う。このうち、ステップ３９１３、ステップ３９１５〜ステップ３９１８、及びステップ３９２１〜ステップ３９２３の処理は、注入された付加コードに基づいて実行される。
【０１３７】
処理部７１２は、実行ファイルを用いてステップ３９１４の処理を行い、制御部７１４は、リゾルバを用いて、ステップ３９０４〜ステップ３９０８の処理を行う。
【０１３８】
監視部７１３は、付加コードに基づいて、監視領域を保護するための子プロセスを生成し（ステップ３９１３）、生成された子プロセスは、ステップ３９２１〜ステップ３９２３の処理を行う。ステップ３９２１〜ステップ３９２３の処理は、図１３のステップ１３３１〜ステップ１３３３の処理と同様である。
【０１３９】
監視部７１３は、メモリマップドアドレス１２０２内に監視領域を設定し（ステップ３９０２）、設定した監視領域の位置を示す位置情報を子プロセスへ転送する（ステップ３９０３）。
【０１４０】
次に、リゾルバは、実行ファイルから識別情報テーブルを取得し（ステップ３９０４）、シグナルハンドラ１２０５からの保護解除通知を待ち合わせる（ステップ３９０５）。リゾルバは、シグナルハンドラ１２０５から保護解除通知を受信したか否かをチェックし（ステップ３９０６）、保護解除通知を受信していない場合（ステップ３９０６，ＮＯ）、ステップ３９０５及びステップ３９０６の処理を繰り返す。
【０１４１】
処理部７１２は、記憶部７１１にアクセスしながら実行ファイルを実行する（ステップ３９１４）。シグナルハンドラ１２０５は、フォルトを示す制御信号１２０４が発生したか否かをチェックする（ステップ３９１５）。制御信号１２０４が発生していない場合（ステップ３９１５，ＮＯ）、処理部７１２は、ステップ３９１４の処理を継続する。
【０１４２】
一方、制御信号１２０４が発生した場合（ステップ３９１５，ＹＥＳ）、シグナルハンドラ１２０５は、実行ファイルの実行を中断させる（ステップ３９１６）。そして、シグナルハンドラ１２０５は、制御信号１２０４に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域に対する保護を解除するとともに、過去に保護を解除した監視領域を再度保護する。このとき、シグナルハンドラ１２０５は、制御信号１２０４が発生した時刻を記録しておくことで、記録した時刻に基づいてメモリアクセス速度を計算することができる。
【０１４３】
次に、シグナルハンドラ１２０５は、保護を解除した監視領域の仮想アドレスを含む保護解除通知をリゾルバへ転送し（ステップ３９１７）、実行ファイルの実行を再開させる（ステップ３９１８）。そして、処理部７１２及びシグナルハンドラ１２０５は、ステップ３９１４以降の処理を繰り返す。
【０１４４】
リゾルバは、保護解除通知を受信した場合（ステップ３９０６，ＹＥＳ）、識別情報テーブルを参照して、保護解除通知に含まれる仮想アドレスに対応する識別情報を特定する（ステップ３９０７）。そして、リゾルバは、特定した識別情報を出力して（ステップ３９０８）、ステップ３９０５以降の処理を繰り返す。
【０１４５】
図３９の制御処理によれば、対象プログラムに基づく処理の進捗状況に応じて、リゾルバが対象プログラムの挙動を示す識別情報を出力することが可能になる。これにより、識別情報に基づいて対象プログラムの動作を分析することができる。
【０１４６】
図１、図３、図３２、及び図３３のＨＰＣ並列ファイルシステムの構成は一例に過ぎず、ＨＰＣ並列ファイルシステムの用途又は条件に応じて、一部の構成要素を省略又は変更してもよい。図２の分散ファイルシステムの構成は一例に過ぎず、分散ファイルシステムの用途又は条件に応じて、一部の構成要素を省略又は変更してもよい。
【０１４７】
図７の情報処理装置７０１の構成は一例に過ぎず、情報処理装置７０１の用途又は条件に応じて、一部の構成要素を省略又は変更してもよい。
【０１４８】
図９の情報処理システムの構成は一例に過ぎず、情報処理システムの用途又は条件に応じて、一部の構成要素を省略又は変更してもよい。図１０の計算ノード９０１−ｉ及び図１１のデータノード９０２−ｊの構成は一例に過ぎず、情報処理システムの用途又は条件に応じて、一部の構成要素を省略又は変更してもよい。
【０１４９】
図８、図１３、図３８、及び図３９のフローチャートは一例に過ぎず、情報処理装置７０１又は情報処理システムの構成又は条件に応じて一部の処理を省略又は変更してもよい。
【０１５０】
図４及び図５のＬＭＤＢデータファイルは一例に過ぎず、処理対象データは、ＬＭＤＢデータファイル以外のメモリマップドファイルに格納されていてもよい。ＬＭＤＢデータファイルに対するアクセス順序は、連続している必要はなく、所定の規則に基づく他の順序であってもよい。アクセス順序は、離散的な順序であっても構わない。
【０１５１】
図６の仮想アドレス空間６０１は一例に過ぎず、仮想アドレス空間６０１は、情報処理システムの構成又は条件に応じて変化する。ページング方式のメモリマッピングの代わりに、セグメント方式のメモリマッピングを用いてもよい。
【０１５２】
図１２の制御処理は一例に過ぎず、情報処理システムの構成又は条件に応じて一部の処理を省略又は変更してもよい。例えば、深層学習プロセス１２０１の代わりに、別の機械学習プロセス、人工知能プロセス等を用いることもできる。
【０１５３】
図１４のパラメータは一例に過ぎず、情報処理システムの構成又は条件に応じて一部のパラメータを省略又は変更してもよい。例えば、すべてのチェックポイントＣＰを距離Ｄの間隔で配置する代わりに、複数の異なる間隔でチェックポイントＣＰを配置することもできる。
【０１５４】
図１５〜図３１のメモリマップドアドレス１２０２は一例に過ぎず、メモリマップドアドレス１２０２の状態は、ページサイズＰＳ、処理対象データの範囲Ｒ、距離Ｄ、サイズＳ等のパラメータに応じて変化する。メモリマップドアドレス１２０２に対するアクセス順序は、連続している必要はなく、所定の規則に基づく他の順序であってもよい。アクセス順序は、離散的な順序であっても構わない。
【０１５５】
図３４〜図３６の分散深層学習の実行結果は一例に過ぎず、分散深層学習の実行結果は、情報処理システムの構成又は条件と処理対象データに応じて変化する。図３７のプロセス間通信は一例に過ぎず、別のプロセス間通信に対して制御処理を適用することもできる。
【０１５６】
図４０は、図７の情報処理装置７０１、図１０の計算ノード９０１−ｉ、及び図１１のデータノード９０２−ｊとして用いられる情報処理装置（コンピュータ）のハードウェア構成例を示している。図４０の情報処理装置は、ＣＰＵ４００１、メモリ４００２、補助記憶装置４００３、媒体駆動装置４００４、及びネットワーク接続装置４００５を含む。これらの構成要素はバス４００６により互いに接続されている。
【０１５７】
メモリ４００２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。メモリ４００２は、図７の記憶部７１１、図１０の記憶部１００１−ｉ、又は図１１の記憶部１１０１−ｊとして用いることができる。
【０１５８】
ＣＰＵ４００１（プロセッサ）は、例えば、メモリ４００２を利用してプログラムを実行することにより、図７の処理部７１２、監視部７１３、及び制御部７１４として動作する。ＣＰＵ４００１は、メモリ４００２を利用してプログラムを実行することにより、図１０の処理部１００２−ｉ、監視部１００３−ｉ、及び制御部１００４−ｉとしても動作する。ＣＰＵ４００１は、メモリ４００２を利用してプログラムを実行することにより、図１１の制御部１１０２−ｊとしても動作する。
【０１５９】
補助記憶装置４００３は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置４００５は、ＳＳＤ、ＨＤＤ、又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置４００３にプログラム及びデータを格納しておき、それらをメモリ４００２にロードして使用することができる。補助記憶装置４００３は、図７の記憶部７１１、図１０の記憶部１００１−ｉ、又は図１１の記憶部１１０１−ｊとして用いることができる。
【０１６０】
媒体駆動装置４００４は、可搬型記録媒体４００７を駆動し、その記録内容にアクセスする。可搬型記録媒体４００７は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体４００９は、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体４００７にプログラム及びデータを格納しておき、それらをメモリ４００２にロードして使用することができる。
【０１６１】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ４００２、補助記憶装置４００３、又は可搬型記録媒体４００７のような、物理的な（非一時的な）記録媒体である。
【０１６２】
ネットワーク接続装置４００５は、通信ネットワーク９０３に接続され、通信に伴うデータ変換を行う通信インタフェース回路である。ネットワーク接続装置４００５は、図３３のＨＣＡ３３０４又はＨＣＡ３３１１であってもよい。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置４００５を介して受け取り、それらをメモリ４００２にロードして使用することができる。
【０１６３】
さらに、情報処理装置は、図３２のＧＰＵ３２１３又は図３３のＧＰＵ３３０３を含んでいてもよい。
【０１６４】
情報処理装置がオペレータ又はユーザと対話を行う場合、情報処理装置は、入力装置及び出力装置を含んでいてもよい。入力装置は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示及び情報の入力に用いられる。出力装置は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、分散深層学習における学習結果であってもよく、メモリアクセスプロファイリングにおいてリゾルバが出力する識別情報であってもよい。
【０１６５】
なお、情報処理装置が図４０のすべての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、可搬型記録媒体４００７を利用しない場合は、媒体駆動装置４００４を省略してもよい。
【０１６６】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１６７】
図１乃至図４０を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
処理対象データの仮想アドレス空間を示す情報を記憶する記憶部と、
前記仮想アドレス空間を介して前記処理対象データに対する所定の処理を行う処理部と、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対する、前記処理部からのアクセスを監視する監視部と、
前記複数の監視領域のうち、前記監視部がアクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う制御部と、
を備えることを特徴とする情報処理装置。
（付記２）
前記複数の監視領域は、前記仮想アドレス空間内において互いに隣接しない位置に設定され、
前記処理部は、前記所定の処理において、前記仮想アドレス空間に含まれる前記複数の領域に対して所定の順序でアクセスし、
前記監視部は、前記処理部が前記所定の処理を開始する前に、前記複数の監視領域それぞれを保護し、前記処理部が前記所定の処理を開始した後に、保護されている領域に対するアクセスを示す制御信号が発生した場合、前記制御信号に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域の仮想アドレスを前記制御部へ出力することを特徴とする付記１記載の情報処理装置。
（付記３）
前記監視部は、前記特定した監視領域の保護を解除して、次の監視領域に対するアクセスを監視し、
前記処理部は、保護が解除された監視領域にアクセスすることで、前記所定の処理を行うことを特徴とする付記２記載の情報処理装置。
（付記４）
前記処理対象データは、通信ネットワークを介して前記情報処理装置と接続された複数のストレージ装置に分散して格納され、
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶し、
前記制御部は、前記監視部がアクセスを検出した仮想アドレスに基づいて、前記処理部がアクセスする仮想アドレスのアドレス範囲を予測し、前記複数のストレージ装置のうち、予測したアドレス範囲の部分データを記憶するストレージ装置に対して、データ転送要求を送信し、前記部分データを記憶する前記ストレージ装置から受信した前記部分データを前記記憶部に格納することを特徴とする付記１乃至３のいずれか１項に記載の情報処理装置。
（付記５）
前記処理対象データは、第１プロセスから第２プロセスへ転送されるデータであり、
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶し、
前記制御部は、前記第１プロセスが前記記憶部に前記処理対象データを書き込むように、前記第１プロセスを制御し、
前記処理部は、前記第２プロセスが前記記憶部から前記処理対象データを読み出すように、前記第２プロセスを制御し、
前記制御部は、前記監視部がアクセスを検出した仮想アドレスに基づいて、前記第１プロセスに、前記第２プロセスへ転送するデータを書き込ませることを特徴とする付記１乃至３のいずれか１項に記載の情報処理装置。
（付記６）
前記記憶部は、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶するとともに、前記所定の処理において前記処理部がアクセスする仮想アドレスと、前記所定の処理における前記処理部の挙動を示す識別情報との対応関係を記憶し、
前記制御部は、前記対応関係に基づいて、前記監視部がアクセスを検出した仮想アドレスに対応する識別情報を出力することを特徴とする付記１乃至３のいずれか１項に記載の情報処理装置。
（付記７）
コンピュータが、
処理対象データの仮想アドレス空間を介して前記処理対象データに対する所定の処理を行い、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対するアクセスを監視し、
前記複数の監視領域のうち、アクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う、
ことを特徴とする情報処理方法。
（付記８）
前記複数の監視領域は、前記仮想アドレス空間内において互いに隣接しない位置に設定され、
前記コンピュータは、前記所定の処理を開始する前に、前記複数の監視領域それぞれを保護し、前記所定の処理において、前記仮想アドレス空間に含まれる前記複数の領域に対して所定の順序でアクセスし、保護されている領域に対するアクセスを示す制御信号が発生した場合、前記制御信号に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域の仮想アドレスを前記制御部へ出力することを特徴とする付記７記載の情報処理方法。
（付記９）
前記コンピュータは、前記特定した監視領域の保護を解除して、次の監視領域に対するアクセスを監視し、保護が解除された監視領域にアクセスすることで、前記所定の処理を行うことを特徴とする付記８記載の情報処理方法。
（付記１０）
前記処理対象データは、通信ネットワークを介して前記情報処理装置と接続された複数のストレージ装置に分散して格納され、
前記コンピュータは、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶する記憶部を含み、
前記コンピュータは、前記アクセスを検出した仮想アドレスに基づいて、アクセスする仮想アドレスのアドレス範囲を予測し、前記複数のストレージ装置のうち、予測したアドレス範囲の部分データを記憶するストレージ装置に対して、データ転送要求を送信し、前記部分データを記憶する前記ストレージ装置から受信した前記部分データを前記記憶部に格納することを特徴とする付記７乃至９のいずれか１項に記載の情報処理方法。
（付記１１）
処理対象データの仮想アドレス空間を介して前記処理対象データに対する所定の処理を行い、
前記仮想アドレス空間に含まれる複数の領域のうち、監視対象として設定された複数の監視領域に対するアクセスを監視し、
前記複数の監視領域のうち、アクセスを検出した監視領域の仮想アドレスに基づいて、所定の制御を行う、
処理をコンピュータに実行させるためのプログラム。
（付記１２）
前記複数の監視領域は、前記仮想アドレス空間内において互いに隣接しない位置に設定され、
前記コンピュータは、前記所定の処理を開始する前に、前記複数の監視領域それぞれを保護し、前記所定の処理において、前記仮想アドレス空間に含まれる前記複数の領域に対して所定の順序でアクセスし、保護されている領域に対するアクセスを示す制御信号が発生した場合、前記制御信号に基づいて、アクセスが発生した監視領域を特定し、特定した監視領域の仮想アドレスを前記制御部へ出力することを特徴とする付記１１記載のプログラム。
（付記１３）
前記コンピュータは、前記特定した監視領域の保護を解除して、次の監視領域に対するアクセスを監視し、保護が解除された監視領域にアクセスすることで、前記所定の処理を行うことを特徴とする付記１２記載のプログラム。
（付記１４）
前記処理対象データは、通信ネットワークを介して前記情報処理装置と接続された複数のストレージ装置に分散して格納され、
前記コンピュータは、前記仮想アドレス空間に含まれる前記複数の領域のうち一部の領域に対応するデータを記憶する記憶部を含み、
前記コンピュータは、前記アクセスを検出した仮想アドレスに基づいて、アクセスする仮想アドレスのアドレス範囲を予測し、前記複数のストレージ装置のうち、予測したアドレス範囲の部分データを記憶するストレージ装置に対して、データ転送要求を送信し、前記部分データを記憶する前記ストレージ装置から受信した前記部分データを前記記憶部に格納することを特徴とする付記１１乃至１３のいずれか１項に記載のプログラム。
【符号の説明】
【０１６８】
１０１−１〜１０１−３、９０１−１〜９０１−Ｎ、３２１１−１〜３２１１−１６  計算ノード
１０２−１〜１０２−３、９０２−１〜９０２−Ｍ  データノード
１０３−１〜１０３−３、２０２−１〜２０２−３  記憶装置
１０４、２０３、９０３  通信ネットワーク
２０１−１〜２０１−３  ノード
３０１−１〜３０１−３  キャッシュ
４０１〜４０３、６０３  データ
４１１、３７１１、３７１２  矢印
５０１  位置
５０２  範囲
６０１  仮想アドレス空間
６０２、３３０１、４００２  メモリ
６０４、６１１−１〜６１１−６  領域
６１２−１〜６１２−６、３７１３  ページ
７０１  情報処理装置
７１１、１００１−ｉ、１１０１−ｊ  記憶部
７１２、１００２−ｉ  処理部
７１３、１００３−ｉ  監視部
７１４、１００４−ｉ、１１０２−ｊ  制御部
１２０１  深層学習プロセス
１２０２  メモリマップドアドレス
１２０３  ＬＭＤＢデータファイル
１２０４  制御信号
１２０５  シグナルハンドラ
１２０６  入出力プロセス
１４０１〜１４０３  位置
３２０１  計算ノードシステム
３２０２  データノードシステム
３２１２、３２２２、３２３３、３３１３  ＳＳＤ
３２１３、３３０３  ＧＰＵ
３２２１  ＭＤＳ
３２２３  ＭＧＴ
３２２４  ＨＤＤ  ＭＤＴ
３２２５  ＳＳＤ  ＭＤＴ
３２３１−１〜３２３１−３  ＯＳＳ
３２３２  ＨＤＤ
３２３４−１、３２３４−２、３２３５−１〜３２３５−４  ＯＳＴ
３３０２、３３１２、４００１  ＣＰＵ
３３０４、３３１１  ＨＣＡ
３５０１  横線
３５０２  矩形
３７０１  第１プロセス
３７０２  第２プロセス
３７０３  共有メモリ
４００３  補助記憶装置
４００４  媒体駆動装置
４００５  ネットワーク接続装置
４００６  バス
４００７  可搬型記録媒体
【図１】
2019021070.tif 000003
【図２】
2019021070.tif 000004
【図３】
2019021070.tif 000005
【図４】
2019021070.tif 000006
【図５】
2019021070.tif 000007
【図６】
2019021070.tif 000008
【図７】
2019021070.tif 000009
【図８】
2019021070.tif 000010
【図９】
2019021070.tif 000011
【図１０】
2019021070.tif 000012
【図１１】
2019021070.tif 000013
【図１２】
2019021070.tif 000014
【図１３】
2019021070.tif 000015
【図１４】
2019021070.tif 000016
【図１５】
2019021070.tif 000017
【図１６】
2019021070.tif 000018
【図１７】
2019021070.tif 000019
【図１８】
2019021070.tif 000020
【図１９】
2019021070.tif 000021
【図２０】
2019021070.tif 000022
【図２１】
2019021070.tif 000023
【図２２】
2019021070.tif 000024
【図２３】
2019021070.tif 000025
【図２４】
2019021070.tif 000026
【図２５】
2019021070.tif 000027
【図２６】
2019021070.tif 000028
【図２７】
2019021070.tif 000029
【図２８】
2019021070.tif 000030
【図２９】
2019021070.tif 000031
【図３０】
2019021070.tif 000032
【図３１】
2019021070.tif 000033
【図３２】
2019021070.tif 000034
【図３３】
2019021070.tif 000035
【図３４】
2019021070.tif 000036
【図３５】
2019021070.tif 000037
【図３６】
2019021070.tif 000038
【図３７】
2019021070.tif 000039
【図３８】
2019021070.tif 000040
【図３９】
2019021070.tif 000041
【図４０】
2019021070.tif 000042