(57)【要約】【課題】計算ノードに搭載するメモリを効率的に活用することが難しい、という課題を解決すること。【解決手段】外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、外部装置に計算処理を実行させる外部装置制御手段と、計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて外部メモリにアクセスするメモリアクセス手段と、変換した物理アドレスと、外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで外部メモリを仮想化する外部メモリ仮想化手段と、を有する。【選択図】図３
2018152019.tif 000002
【特許請求の範囲】
【請求項１】
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を有する
制御装置。
【請求項２】
請求項１に記載の制御装置であって、
記憶装置と、
前記外部メモリに格納されたデータを前記記憶装置に退避させる退避手段と、
を有し、
前記退避手段は、前記外部装置制御手段により前記外部装置が実行する前記計算処理の内容が変更される際に、前記外部メモリに格納された当該計算処理用のデータを前記記憶装置に退避させる
制御装置。
【請求項３】
請求項２に記載の制御装置であって、
データが記憶されているメモリから他のメモリへ直接データを転送する転送装置を制御する転送装置制御手段を備え、
前記転送装置制御手段は、前記退避手段がデータを退避させる際に前記転送装置によるデータの転送を禁止する
制御装置。
【請求項４】
請求項３に記載の制御装置であって、
前記外部メモリ仮想化手段は、前記外部装置制御手段により前記外部装置が実行する前記計算処理の内容が変更される際であって、前記外部メモリに格納された当該計算処理用のデータが前記転送装置による転送の対象でない場合、前記変換した物理アドレスと前記外部メモリ物理アドレスとを対応づけた情報のうち、前記変換した物理アドレスを少なくとも解放する
制御装置。
【請求項５】
請求項３又は４に記載の制御装置であって、
前記退避手段が退避するデータが前記転送装置による転送の対象である場合に、当該転送装置がデータを転送する際に用いる転送アドレスリストの物理アドレスを前記外部メモリにアクセスする際に用いるアドレスから退避先の前記記憶装置のアドレスに変更するアドレス更新手段を有する
制御装置。
【請求項６】
請求項５に記載の制御装置であって、
前記退避手段は、前記外部装置による前記計算処理が終了すると、前記外部メモリに展開された前記計算処理用のデータを前記記憶装置に退避させ、
前記アドレス更新手段は、前記転送アドレスリストの物理アドレスを前記外部メモリのアドレスから退避先の前記記憶装置のアドレスに変更する
制御装置。
【請求項７】
請求項１乃至６のいずれかに記載の制御装置であって、
前記外部メモリ内の断片化したデータを連続する領域に最配置する再配置手段を有する
制御装置。
【請求項８】
制御装置が、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させ、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスし、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する
制御方法。
【請求項９】
情報処理装置に、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を実現させるための
プログラム。
【請求項１０】
オペレーティングシステムが組み込まれた制御ノードと、前記制御ノードにより制御される計算ノードと、を有し、
前記制御ノードは、
前記計算ノードの有するメモリに計算処理を実行する際に必要となるデータを展開するとともに、前記計算ノードに前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記メモリを仮想化する外部メモリ仮想化手段と、
を有する
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、制御方法、プログラム、情報処理装置に関し、特に、コンテキストスイッチを行うことが可能な制御装置、制御方法、プログラム、情報処理装置に関する。
【背景技術】
【０００２】
制御用ノード（制御ノード）と演算用ノード（計算ノード）とを備える計算機が知られている。
【０００３】
例えば、特許文献１には、オペレーティングシステムが組み込まれた制御コア（制御ノード）と、制御コアにて制御され、所定の計算処理を行う少なくとも一つの計算コア（計算ノード）と、を有する情報処理装置が記載されている。特許文献１によると、制御コアは、停止している計算コアに対して当該計算コアが行う計算処理の開始を指示する計算コア制御部を有する。また、計算コアは、計算コア制御部からの指示に応じて計算処理を開始させる計算処理制御部と、計算処理の実行中に発生した例外処理を検出し、例外処理の発生した計算処理の実行を停止する例外検出部と、を備えている。特許文献１によると、上記構成によりＯＳ（Operating System）などからの干渉を抑制することが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−９４９７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載されているような技術の場合、計算ノードが有するメモリへのアクセスは、例えば、メモリマップドＩ／Ｏの仕組みを用いてプロセッサなどの演算装置がＰＣＩ（Peripheral Component Interconnect）メモリ空間にアクセスすることで行われる。ここで、ＰＣＩメモリ空間のサイズは、ホストである制御ノードのＢＩＯＳ（Basic Input Output System）もしくはＯＳで設定される。そのため、制御ノードがサポートするＰＣＩメモリ空間以上のメモリを計算ノードに搭載しても、制御ノードが使用可能なメモリのサイズはＰＣＩメモリ空間のサイズに制限されることになる。その結果、計算ノードに搭載するメモリを効率的に活用することが難しい、という問題が生じていた。
【０００６】
また、ＰＣＩメモリ空間は物理アドレスである。そのため、例えば、計算ノードで行われている計算処理を変更するコンテキストスイッチを行った場合に、単純に当該計算ノードのメモリに展開されているデータを退避させると、例えばＩｎｆｉｎｉｂａｎｄなどのＲＤＭＡ（Remote Direct Memory Access）が利用している物理アドレスに参照すべきデータがない状態となることになる。また、ＲＤＭＡ用途ではない箇所についても、物理アドレスはホストのＭＭＵ（Memory Management Unit）によって割り当てが管理されているため、データを退避させるためにはＭＭＵの再設定が必要となる。以上のような理由により、特許文献１に記載されている技術では、コンテキストスイッチを行った場合でも計算ノードのメモリに展開されているデータを退避させることが難しかった。その結果、計算ノードに搭載するメモリを効率的に活用することが難しい、という問題が生じていた。
【０００７】
以上のように、計算ノードに搭載するメモリを効率的に活用することが難しい、という問題が生じていた。
【０００８】
そこで、本発明の目的は、計算ノードに搭載するメモリを効率的に活用することが出来ない、という問題を解決する制御装置、制御方法、プログラム、情報処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
かかる目的を達成するため本発明の一形態である制御装置は、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を有する
という構成を採る。
【００１０】
また、本発明の他の形態である制御方法は、
制御装置が、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させ、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスし、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する
という構成を採る。
【００１１】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を実現させるためのプログラムである。
【００１２】
また、本発明の他の形態である情報処理装置は、
オペレーティングシステムが組み込まれた制御ノードと、前記制御ノードにより制御される計算ノードと、を有し、
前記制御ノードは、
前記計算ノードの有するメモリに計算処理を実行する際に必要となるデータを展開するとともに、前記計算ノードに前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記メモリを仮想化する外部メモリ仮想化手段と、
を有する
という構成を採る。
【発明の効果】
【００１３】
本発明は、以上のように構成されることにより、計算ノードに搭載するメモリを効率的に活用することが難しい、という問題を解決する制御装置、制御方法、プログラム、情報処理装置を提供することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態における並列計算機の構成の一例を示すブロック図である。
【図２】計算コアの構成の一例を示すブロック図である。
【図３】並列計算機が有する制御ノードと計算ノードの詳細な構成の一例を示すブロック図である。
【図４】計算ノードが計算プロセスを実行する際の構成の一例を示すブロック図である。
【図５】図３で示すデバイス内ページテーブルの構成の一例を示す図である。
【図６】制御ノードのＣＰＵから計算ノードのメモリへアクセスする様子の一例を示す図である。
【図７】並列計算機がコンテキストスイッチを行う際の処理の一例を示すフローチャートである。
【図８】図７で示すステップＳ１０９の処理の詳細な一例を示すフローチャートである。
【図９】ＲＤＭＡデバイスがデータ転送を行う際の処理の一例を示すフローチャートである。
【図１０】並列計算機の他の構成の一例を示すブロック図である。
【図１１】本発明の第２の実施形態における制御装置の構成の一例を示すブロック図である。
【図１２】本発明の第２の実施形態における情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１５】
［第１の実施形態］
本発明の第１の実施形態について、図１乃至図１０を参照して説明する。図１は、並列計算機１の構成の一例を示すブロック図である。図２は、計算コア２４の構成の一例を示すブロック図である。図３は、並列計算機１が有する制御ノード１０と計算ノード２０の構成の一例を示すブロック図である。図４は、計算ノード２０が計算プロセスを実行する際の構成の一例を示すブロック図である。図５は、デバイス内ページテーブル２０１の構成の一例を示す図である。図６は、制御ノード１０のＣＰＵ１２から計算ノード２０のメモリ２１へアクセスする様子の一例を示す図である。図７は、並列計算機１がコンテキストスイッチを行う際の処理の一例を示すフローチャートである。図８は、図７で示すステップＳ１０９の処理の詳細な一例を示すフローチャートである。図９は、ＲＤＭＡデバイス４０がデータ転送を行う際の処理の一例を示すフローチャートである。図１０は、並列計算機１の他の構成の一例を示すブロック図である。
【００１６】
本実施形態において説明する並列計算機１は、ＯＳが組み込まれた制御ノード１０と、制御ノード１０による制御により計算プロセス２０２を実行する計算ノード２０と、を有している。後述するように、制御ノード１０は、計算プロセス２０２が使用する計算用データ２１０をメモリ２１に展開する際に、ＰＣＩメモリ空間アドレスとメモリ２１内の物理アドレスであるデバイス内アドレスとを対応付けたデバイス内ページテーブル２０１を作成する。このようにデバイス内ページテーブル２０１を作成することで、制御ノード１０は、計算ノード２０が有するメモリ２１を仮想化する。これにより、制御ノード１０は、ＰＣＩメモリ空間の大きさに制限されずにメモリ２１を活用することが可能となる。
【００１７】
また、制御ノード１０は、計算ノード２０が実行する計算プロセス２０２を変更するコンテキストスイッチを行う際に、必要に応じて、当該計算プロセス２０２を実行するためにメモリ２１に展開されていた計算用データ２１０を制御ノード１０に退避させる。この際、制御ノード１０は、ＲＤＭＡデバイス４０によるデータの転送を禁止するとともに、必要に応じて、転送アドレスリスト１０３１を更新する。これにより、ＲＤＭＡデバイス４０によるデータの転送を保証しつつ、計算ノード２０のメモリ２１を効率的に活用することが可能となる。
【００１８】
図１を参照すると、本実施形態における並列計算機１は、制御ノード１０（制御装置）と、計算プロセス２０２を実行するＰＣＩデバイスである計算ノード２０と、プロセッサを介さずにメモリ間のデータ転送を行うＲＤＭＡデバイス４０（転送装置）と、を有している。制御ノード１０と計算ノード２０とは、ノード間通信手段３０（例えば、ＰＣＩ  ｅｘｐｒｅｓｓ）を介して互いに通信可能なよう接続されている。また、制御ノード１０とＲＤＭＡデバイス４０とは、ノード間通信手段３０を介して互いに通信可能なよう接続されている。
【００１９】
なお、本実施形態における並列計算機１は、例えば、ＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）向けの並列計算機として利用することが出来る。本実施形態における並列計算機１は、例えば、特開２０１５−９４９７４号公報に開示されている並列計算機などに適用することも出来る。
【００２０】
また、本実施形態では、並列計算機１が制御ノード１０と計算ノード２０の２つのノードから構成されている場合について説明する。しかしながら、並列計算機１の構成は、本実施形態で例示する場合に限定されない。例えば、並列計算機１は、１つの制御ノード１０と２つの計算ノード２０とから構成されるなど、３つ以上の複数のノードから構成されていても構わない。また、本実施形態で説明する例では、制御ノード１０と計算ノード２０とは、同じコンピュータアーキテクチャを有している。しかしながら、制御ノード１０と計算ノード２０とは、異なるコンピュータアーキテクチャを採用していても構わない。
【００２１】
図１で示すように、制御ノード１０は、例えば、メモリ１１（記憶装置）と、ＣＰＵ１２（central processing unit）と、データ転送手段１３と、を有している。また、ＣＰＵ１２は、ｍ個（ｍは１以上の正の整数）のプロセッサコア１４を有している。メモリ１１と、ＣＰＵ１２と、データ転送手段１３とは、ノード内ではＰＣＩ  Ｅｘｐｒｅｓｓなどによって接続されている。プロセッサコア１４は、自ノード（制御ノード１０）内のメモリ１１、データ転送手段１３に上記ＰＣＩ  Ｅｘｐｒｅｓｓなどを通じてアクセス可能である。また、計算ノード２０は、制御ノード１０と同様の構成を有している。つまり、計算ノード２０は、メモリ２１と、ＣＰＵ２２と、データ転送手段２３と、を有している。また、ＣＰＵ２２は、複数のプロセッサコア２４を有している。
【００２２】
本実施形態における並列計算機１は、ＮＵＭＡ（Ｎｏｎ−Ｕｎｉｆｏｒｍｅｄ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）型の情報処理装置である。各ノードが他のノードのメモリへアクセスするとき（例えば、制御ノード１０が計算ノード２０のメモリ２１へアクセスするとき）は、ノード間通信手段３０を用いることになる。
【００２３】
メモリ１１は、データや実行するプログラムなどを記憶する半導体メモリである。メモリ１１は、制御ノード１０内のプロセッサコア１４から共有される。メモリ２１の構成は、メモリ１１と同様である。つまり、メモリ２１は、計算ノード２０内のプロセッサコア２４から共有される。
【００２４】
データ転送手段１３は、ＣＰＵ１２を介さずにメモリ１１に対してアクセスするＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）エンジン１５と、ＣＰＵ１２上のレジスタ等の資源に対してアクセスする対ＣＰＵ通信機能１６とを有している。なお、対ＣＰＵ通信機能１６は、ＣＰＵ１２上のレジスタ等の資源をメモリ空間にマップし、ＤＭＡエンジン１５からアクセスするように構成しても構わない。データ転送手段２３の構成は、データ転送手段１３の構成と同様である。
【００２５】
ノード間通信手段３０は、ＰＣＩ  Ｅｘｐｒｅｓｓ、ＩｎｆｉｎｉｂａｎｄなどのＤＭＡ機能若しくはＲＤＭＡ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）機能を持つインターコネクトによって実現することが出来る。
【００２６】
制御ノード１０及び計算ノード２０は、上述したような構成を有している。なお、後述するように、本実施形態では、制御ノード１０がオペレーティングシステム（ＯＳ、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）機能を有するのに対して、計算ノード２０はオペレーティングシステム機能を有していない。また、計算ノード２０は、制御ノード１０からの制御により計算プロセス２０２を実行することになる。以下においては、計算ノード２０上のプロセッサコア２４を計算コア２４と呼ぶ。
【００２７】
ここで、計算コア２４の構成の詳細について説明する。図２を参照すると、計算コア２４は、例えば、汎用レジスタ群２４０と、制御レジスタ群２４１と、例外検出手段２４２と、レジスタ群アクセス手段２４３と、例外通知手段２４４と、を有している。
【００２８】
汎用レジスタ群２４０は、ｘ８６やＡＲＭなどの一般的なプロセッサと同様に、プログラムカウンタ（ＰＣ）や演算結果を格納するための汎用レジスタ（ＧＰＲ）などから構成される。これらのレジスタは、計算コア２４での命令の実行に伴い書き換えられることになる。また、計算コア２４がロード命令、ストア命令を実行することで、汎用レジスタ群２４０とメモリ２１との間でデータ転送が行われる。
【００２９】
制御レジスタ群２４１は、計算コア２４の実行を制御するためのレジスタである。制御ノード１０は、計算ノード２０の制御レジスタ群２４１に対して、ノード間通信手段３０及びデータ転送手段１３、２３を通じて、命令の実行の開始及び実行の停止を指示することになる。制御ノード１０が計算コア２４に実行の開始を指示すると、計算コア２４は汎用レジスタ群２４０の内容に従って処理を開始する。具体的には、計算コア２４は、プログラムカウンタの値に従い命令をフェッチして、フェッチされた命令の実行を行い、汎用レジスタ群２４０やメモリ２１の内容の更新を実施する。この状態を命令実行状態と呼ぶ。また、制御ノード１０が計算コア２４に実行の停止を指示すると、計算コア２４は、新規の命令実行を停止させる。実行の停止が指示された状態で、計算コア２４上に仕掛中の命令が無い状態を、命令実行停止状態と呼ぶ。計算コア２４は、一旦命令実行停止状態に遷移すると、制御ノード１０から実行の開始の指示があるまで、新規の命令実行を行わない。なお、計算コア２４が命令実行状態であるか、あるいは、命令実行停止状態であるかは、ノード間通信手段３０、データ転送手段１３、レジスタ群アクセス手段２４３を通じて、制御ノード１０から参照することが出来る。仮に、参照を行う機能が無い場合には、例外情報の送出によって、命令実行状態であるか、命令実行停止状態であるかを制御ノード１０に対して通知するように構成することが出来る。
【００３０】
例外検出手段２４２は、命令の実行中に何らかの例外を検出した場合に、制御レジスタ群２４１に実行の停止の指示を行う。同時に、例外検出手段２４２は、例外通知手段２４４に対して、例外通知の依頼を行う（例外発生情報を送信する）。上記の例外とは、ゼロ除算例外などの演算例外、メモリアクセス境界違反などのメモリアクセス系例外、システムコール呼び出しのためのソフトウェアトラップなどの一般のプロセッサで発生する例外を指す。
【００３１】
例外通知手段２４４は、例外検出手段２４２から取得した例外発生情報に基づき、ノード間通信手段３０を用いて、制御ノード１０に対して、計算コア２４の実行停止を通知する。この例外通知手段２４４は、例外の発生を制御ノード１０に通知することが出来れば、実装方法は問わない。例えば、（Ａ）ＰＣＩ  ＥｘｐｒｅｓｓのＭＳＩ／ＭＳＩ−Ｘのようなノード間通信手段３０が持つ割り込み機能、（Ｂ）事前に予約したメモリ領域へのＤＭＡ書き込み、などの方法で実現することが出来る。（Ｂ）の方法の場合には、制御ノード１０上で後述する計算ノード用管理手段１０２が、計算ノード２０からの例外通知の有無をポーリング等の方式で監視する必要がある。さらに、例外通知手段２４４は、制御ノード１０からの設定により、制御ノード１０への例外発生の通知を抑止することも出来る。その場合には、例えば、（Ｃ）制御ノード１０が直接に制御レジスタ群２４１の実行状態を監視（ポーリング）することで、例外の発生を制御ノード１０が検知するように構成することが出来る。
【００３２】
レジスタ群アクセス手段２４３は、制御ノード１０から発行された指示に基づいて、汎用レジスタ群２４０及び制御レジスタ群２４１の各レジスタに対して読み出し・書き込みを行う。ただし、汎用レジスタ群２４０への読み出し及び書き込みは、命令実行停止状態の計算コア２４にのみ発行が許可される。命令実行状態の計算コア２４の汎用レジスタ群２４０へアクセスがあったときの計算コア２４の動作は不定である（例えば、当該アクセスは無視される）。
【００３３】
以上が、計算コア２４の構成の一例である。本実施形態における並列計算機１がコンテキストスイッチを行う際には、計算コア２４の汎用レジスタ群２４０のコンテキスト（レジスタ値）を変更することになる。並列計算機１は、後述するように、このようなコンテキストスイッチを行う際などにおいて、効率的にメモリ２１を活用することが出来る。図３は、本実施形態における並列計算機１において、計算ノード２０が有するメモリ２１を効率的に活用するための構成の一例を示している。以下、計算ノード２０、制御ノード１０についてより詳細に説明する。
【００３４】
＜計算ノード２０＞
図３を参照すると、計算ノード２０上には、制御ノード１０からの制御により１つまたは複数の計算プロセス２０２が展開されている。なお、計算プロセス２０２とは、計算ノード２０上に展開されたプロセスのことをいう（任意の実行単位で構わない）。計算プロセス２０２は、計算ノード２０上で動作するアプリケーションプログラムの開始等に伴い生成され、その実行の終了に伴って破棄されることになる。
【００３５】
具体的には、例えば、図４で示すように、計算ノード２０のメモリ２１内には、計算プロセス２０２を実行する際などに利用される計算用データ２１０（計算用データ２１０−１、２１０−２、……２１０−ｎ。特に区別しない場合は、計算用データ２１０と表記する）が格納されている。また、計算コア２４には、それぞれ、１つの計算プロセス２０２のコンテキストが格納されている。各計算コア２４は、格納されたコンテキストに対応するメモリ２１上の計算用データ２１０を用いて、計算プロセス２０２の処理を行うことになる。
【００３６】
また、計算ノード２０は、制御ノード１０の計算ノードメモリ仮想化手段１０２５により作成されたデバイス内ページテーブル２０１を有している。デバイス内ページテーブル２０１は、メモリマップドＩ／Ｏアドレスへのアクセスを計算ノード２０内部でデバイス内物理アドレスへ変換するのに用いる。デバイス内ページテーブル２０１は、例えば、計算ノード用管理手段１０２が計算用データ２１０をメモリ２１に展開する際に、計算ノードメモリ仮想化手段１０２５により作成される。
【００３７】
図５は、デバイス内ページテーブル２０１の構成の一例である。図５を参照すると、デバイス内ページテーブル２０１では、例えば、制御ノード１０のＣＰＵ１２から認識されるＰＣＩメモリ空間アドレスと、メモリ２１内の物理アドレスであるデバイス内アドレスと、が対応付けられている。例えば、図５の１行目では、ＰＣＩメモリ空間アドレス「０」と、デバイス内アドレス「０ｘ５０００」と、が対応付けられている。
【００３８】
このようにデバイス内ページテーブル２０１を作成することで、例えば、ＰＣＩメモリ空間アドレスと対応付けられるデバイス内アドレスを変更することが可能となる。これにより、制御ノード１０が使用可能なメモリのサイズがＰＣＩメモリ空間のサイズで制限されなくなる。なお、デバイス内ページテーブル２０１には、例えば、メモリ２１の１ページごとに対応するページテーブルエントリがある。また、デバイス内ページテーブル２０１には、使用状況や属性を示す情報を含むことが出来る。
【００３９】
以上が、計算ノード２０の構成の一例である。計算ノード２０内の計算コア２４によるメモリ２１へのアクセスは、計算コア２４専用のページテーブル（図示しない）を用いて行っても良いし、デバイス内ページテーブル２０１を利用しても良い。
【００４０】
＜制御ノード１０＞
制御ノード１０は、オペレーティングシステムを採用する通常のスタンドアローン型の計算機システムと同じ構成を採用し、計算ノード２０のためのオペレーティングシステム機能のサービスを提供する。なお、本明細書では、制御ノード１０上に搭載されるオペレーティングシステムを、制御ノード用ＯＳ１０１と呼ぶ。制御ノード用ＯＳ１０１は、例えば、オペレーティングシステムとしての一般的な機能を有している。制御ノード用ＯＳ１０１は、Ｌｉｎｕｘ（登録商標）やＷｉｎｄｏｗｓなどに代表される計算機に用いられるコモディティのオペレーティングシステムであってよい。
【００４１】
図３を参照すると、制御ノード１０は、制御ノード用ＯＳ１０１と、計算ノード用管理手段１０２（外部装置制御手段）と、ＲＤＭＡデバイス４０を管理するＲＤＭＡデバイスドライバ１０３（転送手段）と、代理プロセス１０４と、しての機能を有している。上記各構成（機能）は、例えば、図示しない記憶装置に格納されたプログラムをＣＰＵ１２が実行することで実現される。
【００４２】
制御ノード用ＯＳ１０１は、制御ノード１０のメモリ管理を行うＭＭＵ１０１１（Memory Management Unit）（メモリアクセス手段）と、データ転送許可フラグ１０１２（データ転送禁止手段）と、を有している。なお、データ転送許可フラグ１０１２は、例えば、ＲＤＭＡデバイスドライバ１０３が有していても構わない。
【００４３】
ＭＭＵ１０１１は、例えば、論理アドレスと物理アドレスとを対応付けた図示しない表を有している。ＭＭＵ１０１１は、図示しない表を参照することで、ＣＰＵ１２が使用する論理アドレスを物理アドレスに変換する処理を行う。本実施形態における並列計算機１はメモリマップドＩ／Ｏの仕組みを用いており、物理アドレス空間の一部には入出力のための領域が設けられている。
【００４４】
データ転送許可フラグ１０１２は、ＲＤＭＡデバイス４０によるデータの転送を許可するか否かを示している。後述するように、データ転送許可フラグ１０１２が「許可」を示している場合、ＲＤＭＡデバイス４０は、データ転送を実行することが出来る。一方、データ転送許可フラグ１０１２が「不許可」を示している場合、ＲＤＭＡデバイス４０は、データ転送許可フラグ１０１２が「許可」を示すまで待機することになる。
【００４５】
データ転送許可フラグ１０１２は、後述するデータ転送許可フラグ更新手段１０２３により更新される。なお、データ転送許可フラグ１０１２は、一律に全てのデータ転送を許可するか否か示しても構わないし、例えば、計算プロセス２０２やメモリ２１、ページごとにデータ転送を許可するか否か示しても構わない。換言すると、データ転送許可フラグ１０１２は、例えば、計算プロセス２０２やメモリ２１、ページごとの「許可」又は「不許可」を示しても構わない。
【００４６】
ＲＤＭＡデバイスドライバ１０３は、ＲＤＭＡデバイス４０を制御する。ＲＤＭＡデバイスドライバ１０３は、計算プロセス２０２ごとに転送アドレスリスト１０３１とＲＤＭＡリクエストキュー１０３２とを保持している。また、ＲＤＭＡデバイスドライバ１０３は、データ転送許可フラグ確認手段１０３３を有している。
【００４７】
転送アドレスリスト１０３１は、計算プロセス２０２で使用する論理アドレスと、物理アドレスと、を対応付けている。転送アドレスリスト１０３１の物理アドレスは、例えば、ＰＣＩメモリ空間アドレスを示している。また、後述するように、転送アドレスリスト１０３１の物理アドレスは、ＲＤＭＡアドレス更新手段１０２４によりＰＣＩメモリ空間アドレスから退避先のアドレス（つまり、デバイスメモリ退避領域１１１のアドレス）に更新されることがある。このように、転送アドレスリスト１０３１の物理アドレスは、計算用データ２１０がメモリ１１に退避中であるか否かに応じて更新される。
【００４８】
ＲＤＭＡリクエストキュー１０３２は、ＣＰＵ１２や代理プロセス１０４などからデータ転送リクエストを受け付けて保管する。データ転送リクエストには、例えば、データ転送元の論理アドレスやデータ転送先の論理アドレスなどを示す情報が含まれている。
【００４９】
データ転送許可フラグ確認手段１０３３は、ＲＤＭＡデバイス４０にデータ転送を実行させる際に、データ転送許可フラグ１０１２を確認する。データ転送許可フラグ１０１２が「許可」を示している場合、データ転送許可フラグ確認手段１０３３は、データ転送を許可する。一方、データ転送許可フラグ１０１２が「不許可」を示している場合、データ転送許可フラグ確認手段１０３３は、データ転送を許可しない。
【００５０】
計算ノード用管理手段１０２は、計算ノード２０で計算プロセス２０２を実行するために必要な準備を行うとともに、計算ノード２０上のメモリ管理全般を行う。例えば、計算ノード用管理手段１０２は、計算ノード２０に計算プロセス２０２を実行させる場合、計算コア２４にコンテキストを格納するとともに、実行させる計算プロセス２０２に対応する計算用データ２１０をメモリ２１に展開する。また、計算ノード用管理手段１０２は、メモリ２１上に計算用データ２１０を展開する際に、計算ノードメモリ仮想化手段１０２５に対してデバイス内ページテーブル２０１を作成するよう指示する。これにより、計算ノードメモリ仮想化手段１０２５は、デバイス内ページテーブル２０１を作成する。
【００５１】
図３を参照すると、計算ノード用管理手段１０２は、プロセススケジューラ１０２１と、計算ノードメモリ退避・復元手段１０２２（退避手段）と、データ転送許可フラグ更新手段１０２３と、ＲＤＭＡアドレス更新手段１０２４（アドレス更新手段）と、計算ノードメモリ仮想化手段１０２５（外部メモリ仮想化手段）と、を有している。
【００５２】
プロセススケジューラ１０２１は、計算ノード２０で実行される計算プロセス２０２を管理する。
【００５３】
例えば、プロセススケジューラ１０２１は、システムコールの実行やタイムスライスを使いきった等の理由により、計算コア２４で実行中の計算プロセス２０２を変更するコンテキストスイッチを行うことを決定する。
【００５４】
また、プロセススケジューラ１０２１は、コンテキストスイッチを行う際に、予め定められた管理方針に応じて変更前の計算プロセス２０２用の計算用データ２１０を制御ノード１０のメモリ１１に退避させるか否か判断する。
【００５５】
例えば、プロセススケジューラ１０２１は、コンテキストスイッチが発生するごとに、変更前の計算プロセス２０２用の計算用データ２１０を退避させることを決定する。または、プロセススケジューラ１０２１は、任意の回数のコンテキストスイッチが発生するごとに、変更前の計算プロセス２０２用の計算用データ２１０を退避させることを決定する。このように、プロセススケジューラ１０２１は、例えば、コンテキストスイッチの発生回数に応じて計算用データ２１０を退避させるか否か判断する構成することが出来る。また、プロセススケジューラ１０２１は、メモリ２１の空き容量に応じて変更前の計算プロセス２０２用の計算用データ２１０を退避させるか否か判断しても構わない。例えば、プロセススケジューラ１０２１は、新たな計算プロセス２０２に対応する計算用データ２１０をメモリ２１に展開した後のメモリ２１の空き容量が所定の閾値以下となる場合に、変更前の計算プロセス２０２で使用していた計算用データ２１０を退避させるよう決定することが出来る。また、プロセススケジューラ１０２１は、計算用データ２１０がＲＤＭＡデバイス４０によるデータ転送の対象となっているか否かに応じて、計算用データ２１０を退避させるか否か判断するよう構成しても構わない。このように、プロセススケジューラ１０２１は、予め定められた管理方針に従って、計算用データ２１０をメモリ１１に退避させるか否か判断する。なお、プロセススケジューラ１０２１は、上記条件のいくつかを組み合わせて計算用データ２１０を退避させるか否か判断しても構わないし、上記例示した以外の管理方針に基づいて計算用データ２１０を退避させるか否か判断しても構わない。
【００５６】
さらに、プロセススケジューラ１０２１は、計算用データ２１０を制御ノード１０のメモリ１１に退避させる際に、データ転送許可フラグ１０１２を「不許可」に更新するようデータ転送許可フラグ更新手段１０２３に指示する。また、プロセススケジューラ１０２１は、転送アドレスリスト１０３１などを確認して退避させる計算用データ２１０がＲＤＭＡ対象であると判断される場合に、ＲＤＭＡアドレス更新手段１０２４に対して転送アドレスリスト１０３１を更新するよう指示する。
【００５７】
このように、プロセススケジューラ１０２１は、計算プロセス２０２に対する全体的な管理を行う。
【００５８】
計算ノードメモリ退避・復元手段１０２２は、プロセススケジューラ１０２１からの指示に応じて、メモリ２１に展開された計算用データ２１０をメモリ１１に確保されたデバイスメモリ退避領域１１１に退避させる。また、計算ノードメモリ退避・復元手段１０２２は、プロセススケジューラ１０２１からの指示に応じて、デバイスメモリ退避領域１１１に退避した計算用データ２１０をメモリ２１に復元する。
【００５９】
例えば、計算ノードメモリ退避・復元手段１０２２は、計算用データ２１０を退避させる旨の指示をプロセススケジューラ１０２１から受けると、メモリ１１にデバイスメモリ退避領域１１１を確保する。そして、計算ノードメモリ退避・復元手段１０２２は、確保したデバイスメモリ退避領域１１１に対象の計算用データ２１０を退避させる。この際、計算ノードメモリ退避・復元手段１０２２は、退避する前のＰＣＩメモリ空間アドレスを示す情報や退避している計算用データ２１０が対応する計算プロセス２０２を示す情報など、退避した計算用データ２１０を復元する際に必要となる情報を管理情報として管理するよう構成することが出来る。
【００６０】
データ転送許可フラグ更新手段１０２３は、プロセススケジューラ１０２１からの指示に応じて、データ転送許可フラグ１０１２を更新する。換言すると、データ転送許可フラグ更新手段１０２３は、プロセススケジューラ１０２１からの指示に応じて、データ転送許可フラグ１０１２を「許可」又は「不許可」のいずれかに更新する。
【００６１】
ＲＤＭＡアドレス更新手段１０２４は、プロセススケジューラ１０２１からの指示に応じて、転送アドレスリスト１０３１の物理アドレスを変更する。
【００６２】
例えば、ＲＤＭＡアドレス更新手段１０２４は、メモリ１１に計算用データ２１０を退避させる際に、転送アドレスリスト１０３１のうち対象となる物理アドレスをＰＣＩメモリ空間アドレスから退避先のアドレスに変更する。また、ＲＤＭＡアドレス更新手段１０２４は、メモリ１１に退避させた計算用データ２１０をメモリ２１に復元する際に、転送アドレスリスト１０３１のうち対象となる物理アドレスを退避先のアドレスからＰＣＩメモリ空間アドレスに変更する。
【００６３】
計算ノードメモリ仮想化手段１０２５は、デバイス内ページテーブル２０１の作成や管理を行う。
【００６４】
例えば、計算ノードメモリ仮想化手段１０２５は、計算ノード用管理手段１０２がメモリ２１上に計算用データ２１０を展開する際に、計算ノード用管理手段１０２からの指示に応じてデバイス内ページテーブル２０１を作成する。
【００６５】
また、計算ノードメモリ仮想化手段１０２５は、計算ノードメモリ退避・復元手段１０２２が計算用データ２１０を退避させた後、デバイス内ページテーブル２０１内の退避させた計算用データ２１０に対応するＰＣＩメモリ空間アドレスやデバイス内アドレスを解放する。さらに、計算ノードメモリ仮想化手段１０２５は、例えば、コンテキストスイッチを行う場合であって、計算用データ２１０の退避を行わず、かつ、退避しない計算用データ２１０がＲＤＭＡデバイス４０による転送の対象でない場合、ＰＣＩメモリ空間アドレスのみを解放することが出来る。換言すると、計算ノードメモリ仮想化手段１０２５は、コンテキストスイッチを行う場合であって、対象の計算用データ２１０がＲＤＭＡデバイス４０による転送の対象でない場合、計算用データ２１０を退避させる際にはＰＣＩメモリ空間アドレスとデバイス内アドレスを解放し、計算用データ２１０を退避させない際にはＰＣＩメモリ空間アドレスを解放する、ということが出来る。つまり、計算ノードメモリ仮想化手段１０２５は、コンテキストスイッチを行う場合であって、対象の計算用データ２１０がＲＤＭＡデバイス４０による転送の対象でない場合、少なくともＰＣＩメモリ空間アドレスを解放する。
【００６６】
また、計算ノードメモリ仮想化手段１０２５は、計算ノードメモリ退避・復元手段１０２２が計算用データ２１０を復元した後、管理情報などを参照して、デバイス内ページテーブル２０１を復元する。この際、デバイス内アドレスは任意の場所で構わないが、格納されるデータとＰＣＩメモリ空間アドレスとの対応が退避前と同じになるように、計算ノードメモリ仮想化手段１０２５はデバイス内ページテーブル２０１を復元する。このようにデバイス内ページテーブル２０１を復元することで、ＭＭＵ１０１１を更新する必要はないことになる。
【００６７】
代理プロセス１０４は、計算ノード２０で動作する計算プロセス２０２の実行を補助する。代理プロセス１０４は、計算プロセス２０２と対応する形で生成される。代理プロセス１０４は、例えば、計算プロセス２０２からの要求に応じて、計算ノード２０上に存在するべきＯＳの代替でシステムコール処理を行う。また、代理プロセス１０４は、計算プロセス２０２がＲＤＭＡデバイス４０を利用する際にも利用される。換言すると、計算プロセス２０２は、代理プロセス１０４に対して指示することで、ＲＤＭＡデバイス４０を利用したデータ転送を行うことになる。
【００６８】
以上が、制御ノード１０と計算ノード２０のより詳細な構成の一例である。
【００６９】
ＲＤＭＡデバイス４０は、ＲＤＭＡデバイスドライバ１０３からの指示に応じて、データの転送などの処理を行う。つまり、ＲＤＭＡデバイス４０は、ＲＤＭＡデバイスドライバ１０３からの指示に応じて、データが記憶されているメモリから他のメモリへ直接データを転送する処理などを行う。ＲＤＭＡデバイス４０の構成は既知のものと同じであるため、詳細な説明は省略する。
【００７０】
以上が、並列計算機１の構成の一例である。ここで、メモリ２１を仮想化した場合の制御ノード１０のＣＰＵ１２から計算ノード２０のメモリ２１へアクセスする様子の一例を図６で示す。図６を参照すると、ＣＰＵ１２は、ＰＣＩメモリ空間にアクセスすることで計算ノード２０のメモリ２１へアクセスすることが分かる。この際に、計算ノード２０では、ＰＣＩメモリ空間アドレスとデバイス内アドレスとを対応付けたデバイス内ページテーブル２０１を有している。デバイス内ページテーブル２０１を用いてメモリ２１を仮想化することで、ＣＰＵ１２がＰＣＩメモリ空間の大きさに制限されずにメモリ２１を活用することが可能となる。
【００７１】
続いて、図７乃至図９を参照して、並列計算機１の動作の一例について説明する。まず、図７を参照して、コンテキストスイッチを行う際の全体的な流れの一例について説明する。
【００７２】
図７を参照すると、プロセススケジューラ１０２１は、システムコールの実行やタイムスライスを使いきった等の理由により、計算コア２４で実行中の計算プロセス２０２を変更するコンテキストスイッチを行うことを決定する。すると、プロセススケジューラ１０２１は、予め定められた管理方針に応じて、コンテキストスイッチによる変更前の計算プロセス２０２用の計算用データ２１０を制御ノード１０のメモリ１１に退避させるか否か判断する（ステップＳ１０１）。
【００７３】
計算用データ２１０をメモリ１１に退避させる場合（ステップＳ１０１、Ｙｅｓ）、プロセススケジューラ１０２１は、データ転送許可フラグ１０１２を「不許可」に更新するようデータ転送許可フラグ更新手段１０２３に指示する。これにより、データ転送許可フラグ更新手段１０２３は、データ転送許可フラグ１０１２を「不許可」に更新する（ステップＳ１０２）。また、プロセススケジューラ１０２１は、計算ノードメモリ退避・復元手段１０２２に対して、計算用データ２１０を退避させるよう指示する。すると、計算ノードメモリ退避・復元手段１０２２は、プロセススケジューラ１０２１からの指示に応じて、メモリ１１にデバイスメモリ退避領域１１１を確保する（ステップＳ１０３）。そして、計算ノードメモリ退避・復元手段１０２２は、確保したデバイスメモリ退避領域１１１に対象の計算用データ２１０を退避させる（ステップＳ１０４）。計算ノードメモリ退避・復元手段１０２２による計算用データ２１０の退避の後、計算ノードメモリ仮想化手段１０２５は、デバイス内ページテーブル２０１のうち退避させた計算用データ２１０に対応するＰＣＩメモリ空間アドレスとデバイス内アドレスを解放する（ステップＳ１０５）。
【００７４】
また、プロセススケジューラ１０２１は、転送アドレスリスト１０３１などを確認して、退避させる計算用データ２１０がＲＤＭＡ対象であるか否か確認する（ステップＳ１０６）。計算用データ２１０がＲＤＭＡ対象であった場合（ステップＳ１０６、Ｙｅｓ）、プロセススケジューラ１０２１は、ＲＤＭＡアドレス更新手段１０２４に対して転送アドレスリスト１０３１を更新するよう指示する。当該指示を受けて、ＲＤＭＡアドレス更新手段１０２４は、転送アドレスリスト１０３１の対応する物理アドレスを、ＰＣＩメモリ空間アドレスから退避先のアドレス（つまり、デバイスメモリ退避領域１１１のアドレス）に更新する（ステップＳ１０７）。
【００７５】
ステップＳ１０７の処理の後、計算ノード用管理手段１０２は、計算コア２４の汎用レジスタ群２４０からコンテキストを引き上げる（ステップＳ１０８）。計算ノード用管理手段１０２は、引き上げたコンテキストを図示しない計算プロセスＤＢ（database）などで管理することになる。また、計算ノード用管理手段１０２は、新しい計算プロセス２０２に対応するコンテキストを汎用レジスタ群２４０に保存する（ステップＳ１０９）。なお、ステップＳ１０９の処理の詳細は、図８を参照して後に説明する。
【００７６】
ステップＳ１０９の処理の後、プロセススケジューラ１０２１は、データ転送許可フラグ１０１２を「許可」に更新するようデータ転送許可フラグ更新手段１０２３に指示する。これにより、データ転送許可フラグ更新手段１０２３は、データ転送許可フラグ１０１２を「許可」に更新する（ステップＳ１１０）。なお、データ転送許可フラグ１０１２が既に「許可」である場合、データ転送許可フラグ更新手段１０２３は何もしなくて構わない。
【００７７】
一方、ステップＳ１０１の処理で計算用データ２１０をメモリ１１に退避させないと判断した場合（ステップＳ１０１、Ｎｏ）、プロセススケジューラ１０２１は、転送アドレスリスト１０３１などを確認して、退避しない計算用データ２１０がＲＤＭＡ対象であるか否か確認する（ステップＳ１１１）。そして、退避しない計算用データ２１０がＲＤＭＡ対象でなかった場合（ステップＳ１１１、Ｎｏ）、プロセススケジューラ１０２１は、計算ノードメモリ仮想化手段１０２５を用いてデバイス内ページテーブル２０１のうち退避しない計算用データ２１０に対応するＰＣＩメモリ空間アドレスのみを解放する（ステップＳ１１２）。ステップＳ１１２の処理の後、また、退避しない計算用データ２１０がＲＤＭＡ対象である場合（ステップＳ１１１、Ｙｅｓ）、ステップＳ１０８の処理に進むことになる。
【００７８】
以上が、コンテキストスイッチを行う際の全体的な流れの一例である。続いて、図８を参照して、図７のステップＳ１０９の処理の詳細について説明する。
【００７９】
図８を参照すると、プロセススケジューラ１０２１は、コンテキストスイッチによる変更後の計算プロセス２０２が使用する計算用データ２１０がデバイスメモリ退避領域１１１に退避されているか否か確認する（ステップＳ２０１）。ステップＳ２０１の確認は、例えば、転送アドレスリスト１０３１を確認したり、管理情報などを確認したりすることで確認することが出来る。
【００８０】
計算用データ２１０がデバイスメモリ退避領域１１１に退避されている場合（ステップＳ２０１、Ｙｅｓ）、プロセススケジューラ１０２１は、対象の計算用データ２１０を復元するよう計算ノードメモリ退避・復元手段１０２２に指示する。これにより、計算ノードメモリ退避・復元手段１０２２は、メモリ２１に対象の計算用データ２１０を復元する（ステップＳ２０２）。その後、計算ノードメモリ仮想化手段１０２５により、デバイス内ページテーブル２０１を復元する（ステップＳ２０３）。この際、デバイス内アドレスは任意の場所で構わないが、格納されるデータとＰＣＩメモリ空間アドレスとの対応が退避前と同じになるように、計算ノードメモリ仮想化手段１０２５はデバイス内ページテーブル２０１を復元する。
【００８１】
また、プロセススケジューラ１０２１は、転送アドレスリスト１０３１などを確認して、復元する計算用データ２１０がＲＤＭＡ対象であるか否か確認する（ステップＳ２０４）。計算用データ２１０がＲＤＭＡ対象であった場合（ステップＳ２０４、Ｙｅｓ）、プロセススケジューラ１０２１は、ＲＤＭＡアドレス更新手段１０２４に対して転送アドレスリスト１０３１を更新するよう指示する。当該指示を受けて、ＲＤＭＡアドレス更新手段１０２４は、転送アドレスリスト１０３１の対応する物理アドレスを、退避先のアドレスからＰＣＩメモリ空間アドレスに更新する（ステップＳ２０５）。
【００８２】
その後、計算ノード用管理手段１０２は、計算コア２４の汎用レジスタ群２４０にコンテキストを保存する（ステップＳ２０６）。
【００８３】
一方、計算用データ２１０がデバイスメモリ退避領域１１１に退避されていない場合（ステップＳ２０１、Ｎｏ）、プロセススケジューラ１０２１は、デバイス内ページテーブル２０１を参照してＰＣＩメモリ空間アドレスが解放されているか否か確認する（ステップＳ２０７）。そして、ＰＣＩメモリ空間アドレスが解放されていた場合（ステップＳ２０７、Ｙｅｓ）、プロセススケジューラ１０２１は、計算ノードメモリ仮想化手段１０２５を用いてデバイス内ページテーブル２０１のうち対応するＰＣＩメモリ空間アドレスを復元する（ステップＳ２０８）。ステップＳ２０８の処理の後、また、ＰＣＩメモリ空間アドレスが解放されていなかった場合（ステップＳ２０７）、ステップＳ２０６の処理に進むことになる。
【００８４】
以上が、図７のステップＳ１０９の処理の詳細な一例である。続いて、図９を参照して、ＲＤＭＡデバイス４０がデータ転送を行う際の処理の一例について説明する。
【００８５】
図９を参照すると、ＲＤＭＡデバイスドライバ１０３は、ＲＤＭＡリクエストキュー１０３２に登録されたリクエストを１つずつ取り出す。そして、ＲＤＭＡデバイスドライバ１０３は、転送アドレスリスト１０３１を参照して、論理アドレスを物理アドレスに変換する。
【００８６】
ＲＤＭＡデバイスドライバ１０３のデータ転送許可フラグ確認手段１０３３は、データ転送許可フラグ１０１２を確認する。そして、データ転送許可フラグ１０１２が「許可」であった場合（ステップＳ３０２、Ｙｅｓ）、データ転送許可フラグ確認手段１０３３は、データ転送を許可する。これにより、ＲＤＭＡデバイス４０は、データ転送を実行する（ステップＳ３０３）。
【００８７】
一方で、データ転送許可フラグ１０１２が「不許可」であった場合（ステップＳ３０２、Ｎｏ）、データ転送許可フラグ確認手段１０３３は、例えば所定時間ごと（任意の時間で構わない）に再度データ転送許可フラグ１０１２を確認する（ステップＳ３０１）。このように、データ転送許可フラグ１０１２が「不許可」であった場合にデータ転送許可フラグ確認手段１０３３がデータ転送を許可しないことで、ＲＤＭＡデバイス４０は、データ転送許可フラグ１０１２が「許可」である場合のみデータ転送を実行する。
【００８８】
以上が、ＲＤＭＡデバイス４０がデータ転送を行う際の処理の一例である。
【００８９】
このように、本実施形態における制御ノード１０は、計算ノードメモリ仮想化手段１０２５を有している。このような構成により、計算ノードメモリ仮想化手段１０２５は、ＰＣＩメモリ空間アドレスとメモリ２１内の物理アドレスであるデバイス内アドレスとを対応付けたデバイス内ページテーブル２０１を作成することで、メモリ２１を仮想化することが出来る。これにより、ＰＣＩメモリ空間の大きさに制限されずにメモリ２１を活用することが可能となる。その結果、計算ノード２０に搭載するメモリ２１を効率的に活用することが可能となる。
【００９０】
また、制御ノード１０は、計算ノードメモリ退避・復元手段１０２２と、データ転送許可フラグ更新手段１０２３と、ＲＤＭＡアドレス更新手段１０２４と、を有している。このような構成により、計算ノードメモリ退避・復元手段１０２２が計算用データ２１０を退避させる際に、データ転送許可フラグ更新手段１０２３によりＲＤＭＡデバイス４０によるデータ転送を禁止することが出来る。また、ＲＤＭＡアドレス更新手段１０２４により、転送アドレスリスト１０３１中の対応する物理アドレスをＰＣＩメモリ空間アドレスから退避先のアドレスに変更することが出来る。これにより、ＲＤＭＡ対象のデータであっても、ＲＤＭＡによるデータ転送を保証しつつ、制御ノード１０にデータを退避させることが可能となる。その結果、計算ノード２０に搭載するメモリ２１を効率的に活用することが可能となる。
【００９１】
なお、繰り返し計算プロセス２０２を実行すると、メモリ２１内で使用中の領域が物理的に不連続になった場所が多数できてしまうおそれがある。このような状態になると、物理的に連続な領域が必要な場合などにおいてメモリ取得が失敗する可能性が高くなる。本実施形態によると、メモリ２１を仮想化しているため、分断されているデバイス内アドレスを移動してもデバイス内ページテーブル２０１のＰＣＩメモリ空間アドレスはそのまま使う事ができる。そのため、メモリ２１を対象としたメモリコンパクションやデフラグメンテーションが実施可能である。換言すると、制御ノード１０の計算ノード用管理手段１０２は、メモリコンパクションやデフラグメンテーションを行う再配置手段１０２６を有することが出来る（図１０参照）。
【００９２】
また、一般にメモリは一定の容量ごとにメモリバンクと呼ばれる単位でＣＰＵからアクセスされ、同時にアクセスするデータを別のメモリバンクに配置することでメモリアクセスの並列化を行うことができる。本発明によると、メモリ２１が仮想化されるため、計算コア２４からよりアクセス効率の良い位置にデータの物理アドレスを移動させることができる。
【００９３】
また、通常のメモリ領域は確保したプロセスの終了とともに解放されるが、ＲＤＭＡ対象の領域はＲＤＭＡデバイスドライバ１０３が安全にメモリを解放できるまで確保し続けることになる。一方で、本実施形態で説明した並列計算機１によると、メモリ操作の主体である計算プロセス２０２が終了したあとはメモリ２１に計算用データ２１０がある必要が低下するため、当該計算用データ２１０をメモリ１１のデバイスメモリ退避領域１１１に退避させることが可能となる。そして、ＲＤＭＡ転送が完全に終了した後にデバイスメモリ退避領域１１１に退避させた計算用データ２１０を解放することが可能となる。換言すると、プロセススケジューラ１０２１は、計算プロセス２０２が終了すると、計算用データ２１０をメモリ１１に退避させるよう計算ノードメモリ退避・復元手段１０２２に指示するよう構成することが出来る。これにより、計算ノードメモリ退避・復元手段１０２２は、計算プロセス２０２が終了した計算用データ２１０を確保したデバイスメモリ退避領域１１１に退避させることが可能となる。また、この際に、プロセススケジューラ１０２１は、転送アドレスリスト１０３１を更新するようＲＤＭＡアドレス更新手段１０２４に対して指示する。これにより、ＲＤＭＡアドレス更新手段１０２４は、転送アドレスリスト１０３１を更新することが出来る。このような構成により、ＲＤＭＡ対象のデータであっても、計算プロセス２０２が終了した時点でメモリ２１を確保し続ける必要がなくなる。これにより、メモリ２１を効率的に活用することが可能となる。
【００９４】
［第２の実施形態］
次に、図１１、図１２を参照して、本発明の第２の実施形態について説明する。図１１は、制御装置５の構成の一例を示している。図１２は、情報処理装置６の構成の一例を示している。第２の実施形態では、制御装置５と情報処理装置６の構成の概要について説明する。まず、図１１を参照して制御装置５について説明する。
【００９５】
図１１を参照すると、制御装置５は、外部装置制御手段５１と、メモリアクセス手段５２と、外部メモリ仮想化手段５３と、を有している。例えば、制御装置５は、図示しない演算装置と記憶装置とを有しており、記憶装置に格納されたプログラムを演算装置が実行することで、上記各手段を実現する。
【００９６】
外部装置制御手段５１は、外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、外部装置に計算処理を実行させる。
【００９７】
メモリアクセス手段５２は、計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて外部メモリにアクセスする。
【００９８】
外部メモリ仮想化手段９３は、変換した物理アドレスと、外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで外部メモリを仮想化する。
【００９９】
このように、本実施形態における制御装置５は、外部メモリ仮想化手段５３を有している。このような構成により、外部メモリ仮想化手段５３は、変換した物理アドレスと、外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで外部メモリを仮想化することが出来る。これにより、制御装置５で確保可能な物理アドレスの大きさに制限されずに外部メモリを活用することが可能となる。その結果、外部メモリを有効に活用することが可能となる。
【０１００】
また、上述した制御装置５は、当該制御装置５に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、情報処理装置に、外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、外部装置に計算処理を実行させる外部装置制御手段５１と、計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて外部メモリにアクセスするメモリアクセス手段５２と、変換した物理アドレスと、外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで外部メモリを仮想化する外部メモリ仮想化手段５３と、を実現させるためのプログラムである。
【０１０１】
また、上述した制御装置５により実行される制御方法は、制御装置が、外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、外部装置に計算処理を実行させ、計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて外部メモリにアクセスし、変換した物理アドレスと、外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで外部メモリを仮想化する、という方法である。
【０１０２】
上述した構成を有する、プログラム、又は、制御方法、の発明であっても、上記制御装置５と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【０１０３】
また、本発明の目的は、図１２で示すような情報処理装置６であっても達成することが出来る。図１２を参照すると、情報処理装置６は、制御ノード７と、計算ノード８とを有している。
【０１０４】
計算ノード８は、制御ノード７により制御される。計算ノード８は、メモリ８１を有している。
【０１０５】
制御ノード７は、オペレーティングシステムが組み込まれている。図１２を参照すると、制御ノード７は、外部装置制御手段７１と、メモリアクセス手段７２と、外部メモリ仮想化手段７３と、を有している。例えば、制御ノード７は、図示しない演算装置と記憶装置とを有しており、記憶装置に格納されたプログラムを演算装置が実行することで、上記各手段を実現する。
【０１０６】
外部装置制御手段７１は、計算ノード８の有するメモリ８１に計算処理を実行する際に必要となるデータを展開するとともに、計算ノード８に計算処理を実行させる。
【０１０７】
メモリアクセス手段５２は、計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいてメモリ８１にアクセスする。
【０１０８】
外部メモリ仮想化手段９３は、変換した物理アドレスと、メモリ８１内の物理アドレスである外部メモリ物理アドレスと、を対応付けることでメモリ８１を仮想化する。
【０１０９】
このような構成を有する情報処理装置６であっても、制御装置５と同様に、本発明の目的を達成することが出来る。
【０１１０】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明における制御装置などの概略を説明する。但し、本発明は、以下の構成に限定されない。
【０１１１】
（付記１）
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を有する
制御装置。
（付記２）
付記１に記載の制御装置であって、
記憶装置と、
前記外部メモリに格納されたデータを前記記憶装置に退避させる退避手段と、
を有し、
前記退避手段は、前記外部装置制御手段により前記外部装置が実行する前記計算処理の内容が変更される際に、前記外部メモリに格納された当該計算処理用のデータを前記記憶装置に退避させる
制御装置。
（付記３）
付記２に記載の制御装置であって、
データが記憶されているメモリから他のメモリへ直接データを転送する転送装置を制御する転送装置制御手段を備え、
前記転送装置制御手段は、前記退避手段がデータを退避させる際に前記転送装置によるデータの転送を禁止する
制御装置。
（付記４）
付記３に記載の制御装置であって、
前記外部メモリ仮想化手段は、前記外部装置制御手段により前記外部装置が実行する前記計算処理の内容が変更される際であって、前記外部メモリに格納された当該計算処理用のデータが前記転送装置による転送の対象でない場合、前記変換した物理アドレスと前記外部メモリ物理アドレスとを対応づけた情報のうち、前記変換した物理アドレスを少なくとも解放する
制御装置。
（付記５）
付記３又は４に記載の制御装置であって、
前記退避手段が退避するデータが前記転送装置による転送の対象である場合に、当該転送装置がデータを転送する際に用いる転送アドレスリストの物理アドレスを前記外部メモリにアクセスする際に用いるアドレスから退避先の前記記憶装置のアドレスに変更するアドレス更新手段を有する
制御装置。
（付記６）
付記５に記載の制御装置であって、
前記退避手段は、前記外部装置による前記計算処理が終了すると、前記外部メモリに展開された前記計算処理用のデータを前記記憶装置に退避させ、
前記アドレス更新手段は、前記転送アドレスリストの物理アドレスを前記外部メモリのアドレスから退避先の前記記憶装置のアドレスに変更する
制御装置。
（付記７）
付記１乃至６のいずれかに記載の制御装置であって、
前記外部メモリ内の断片化したデータを連続する領域に最配置する再配置手段を有する
制御装置。
（付記８）
制御装置が、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させ、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスし、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する
制御方法。
（付記８−１）
付記８に記載の制御方法であって、
前記外部装置が実行する前記計算処理の内容が変更される際に、前記外部メモリに格納された当該計算処理用のデータを前記制御装置が有する記憶装置に退避させる
制御方法。
（付記８−２）
付記８−１に記載の制御方法であって、
前記外部メモリに格納された当該計算処理用のデータを前記制御装置が有する記憶装置に退避させる際に、データが記憶されているメモリから他のメモリへ直接データを転送する転送装置によるデータの転送を禁止する
制御方法。
（付記９）
情報処理装置に、
外部装置の有する外部メモリに計算処理を実行する際に必要となるデータを展開するとともに、前記外部装置に前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記外部メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記外部メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記外部メモリを仮想化する外部メモリ仮想化手段と、
を実現させるための
プログラム。
（付記９−１）
付記９に記載のプログラムであって、
前記外部メモリに格納されたデータを前記記憶装置に退避させる退避手段を実現させ、
前記退避手段は、前記外部装置制御手段により前記外部装置が実行する前記計算処理の内容が変更される際に、前記外部メモリに格納された当該計算処理用のデータを前記情報処理装置が有する記憶装置に退避させる
プログラム。
（付記９−２）
付記９−１に記載のプログラムであって、
データが記憶されているメモリから他のメモリへ直接データを転送する転送装置を制御する転送装置制御手段を実現させ、
前記転送装置制御手段は、前記退避手段がデータを退避させる際に前記転送装置によるデータの転送を禁止する
プログラム。
（付記１０）
オペレーティングシステムが組み込まれた制御ノードと、前記制御ノードにより制御される計算ノードと、を有し、
前記制御ノードは、
前記計算ノードの有するメモリに計算処理を実行する際に必要となるデータを展開するとともに、前記計算ノードに前記計算処理を実行させる外部装置制御手段と、
前記計算処理で使用する論理アドレスを物理アドレスに変換するとともに、変換した物理アドレスに基づいて前記メモリにアクセスするメモリアクセス手段と、
前記変換した物理アドレスと、前記メモリ内の物理アドレスである外部メモリ物理アドレスと、を対応付けることで前記メモリを仮想化する外部メモリ仮想化手段と、
を有する
情報処理装置。
（付記１０−１）
付記１０に記載の情報処理装置であって、
前記制御ノードは、
記憶装置と、
前記メモリに格納されたデータを前記記憶装置に退避させる退避手段と、
を有し、
前記退避手段は、前記外部装置制御手段により前記計算ノードが実行する前記計算処理の内容が変更される際に、前記メモリに格納された当該計算処理用のデータを前記記憶装置に退避させる
情報処理装置。
（付記１０−２）
付記１０−１に記載の情報処理装置であって、
前記制御ノードは、データが記憶されているメモリから他のメモリへ直接データを転送する転送装置を制御する転送装置制御手段を備え、
前記転送装置制御手段は、前記退避手段がデータを退避させる際に前記転送装置によるデータの転送を禁止する
情報処理装置。
【０１１２】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されていたりする。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０１１３】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【０１１４】
１  並列計算機
１０  制御ノード
１１  メモリ
１１１  デバイスメモリ退避領域
１２  ＣＰＵ
１３  データ転送手段
１４  プロセッサコア
１５  ＤＭＡエンジン
１６  対ＣＰＵ通信機能
１０１  制御ノード用ＯＤ
１０１１  ＭＭＵ
１０１２  データ転送許可フラグ
１０２  計算ノード用管理手段
１０２１  プロセススケジューラ
１０２２  計算ノードメモリ退避・復元手段
１０２３  データ転送許可フラグ更新手段
１０２４  ＲＤＭＡアドレス更新手段
１０２５  計算ノードメモリ仮想化手段
１０２６  再配置手段
１０３  ＲＤＭＡデバイスドライバ
１０３１  転送アドレスリスト
１０３２  ＲＤＭＡリクエストキュー
１０３３  データ転送許可フラグ確認手段
１０４  代理プロセス
２０  計算ノード
２１  メモリ
２１０  計算用データ
２２  ＣＰＵ
２３  データ転送手段
２４  プロセッサコア、計算コア
２４０  汎用レジスタ群
２４１  制御レジスタ群
２４２  例外検出手段
２４３  レジスタ群アクセス手段
２４４  例外通知手段
２０１  デバイス内ページテーブル
２０２  計算プロセス
２５  ＤＭＡエンジン
２６  対ＣＰＵ通信機能
３０  ノード間通信手段
４０  ＲＤＭＡデバイス
５  制御装置
５１  外部装置制御手段
５２  メモリアクセス手段
５３  外部メモリ仮想化手段
６  情報処理装置
７  制御ノード
７１  外部装置制御手段
７２  メモリアクセス手段
７３  外部メモリ仮想化手段
８  計算ノード
８１  メモリ
【図１】
2018152019.tif 000003
【図２】
2018152019.tif 000004
【図３】
2018152019.tif 000005
【図４】
2018152019.tif 000006
【図５】
2018152019.tif 000007
【図６】
2018152019.tif 000008
【図７】
2018152019.tif 000009
【図８】
2018152019.tif 000010
【図９】
2018152019.tif 000011
【図１０】
2018152019.tif 000012
【図１１】
2018152019.tif 000013
【図１２】
2018152019.tif 000014