(57)【要約】  アクセラレータを用いた計算処理の高速化を図るために、アクセラレータ制御装置１は、生成部１２と制御部１４を備える。生成部１２は、実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する。制御部１４は、制御対象のアクセラレータに備えられているメモリに、ＤＡＧのノードに相当するデータが格納されている場合に、アクセラレータのメモリに格納されているデータを用いて、ＤＡＧのエッジに相当する処理を実行するようにアクセラレータを制御する。
2016063482.tif 000002
【特許請求の範囲】
【請求項１】
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する生成手段と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する制御手段と
を備えるアクセラレータ制御装置。
【請求項２】
前記制御手段は、前記ＤＡＧのノードに相当するデータの全部または一部である分割データに、前記ＤＡＧの複数のエッジに相当する各処理を連続して実行できる場合には、前記アクセラレータのメモリに格納されている前記分割データを前記処理が終了する度に前記メモリから削除することなく、当該分割データに前記複数の処理を連続して実行するように前記アクセラレータを制御する請求項１に記載されているアクセラレータ制御装置。
【請求項３】
前記ＤＡＧのエッジに相当する処理が実行される際に前記アクセラレータのメモリの一部を前記ＤＡＧの処理に必要なメモリ領域として割り当て、また、前記アクセラレータのメモリのうちの、前記ＤＡＧの後工程のエッジに相当する処理に使用されないデータを格納しているメモリ領域を解放するメモリ管理手段と、
前記アクセラレータのメモリに格納されているデータを管理するデータ管理手段と、
前記アクセラレータのメモリに格納するデータ、および、前記アクセラレータのメモリから移動したデータを保持する格納手段と
をさらに備え、
前記制御手段は、前記ＤＡＧの処理に必要となる前記アクセラレータのメモリ領域を前記メモリ管理手段に要求し、また、前記アクセラレータのメモリに格納されているデータに関する情報を前記データ管理手段に問い合わせ、問い合わせ結果に応じて前記アクセラレータのメモリに格納されているデータの移動と削除を制御する請求項１または請求項２に記載されているアクセラレータ制御装置。
【請求項４】
前記アクセラレータのメモリを複数に分割した分割領域であるページが保持するデータが前記ＤＡＧのエッジに相当する処理に使用されているか否かを示す情報と、前記メモリから前記格納手段への前記データの移動である退避を要するか否かを示す情報とを含む管理情報を備え、
前記メモリ管理手段は、前記アクセラレータのメモリ領域を解放する場合に、前記管理情報を参照して、前記ＤＡＧのエッジに相当する処理に使用されていないデータであって退避を要しないデータを保持するページを、退避を要するデータを保持するページよりも先に解放する請求項３に記載されているアクセラレータ制御装置。
【請求項５】
前記メモリ管理手段は、前記アクセラレータのメモリ領域を解放する場合に、前記ＤＡＧのノードに相当するデータの全部または一部である分割データを保持する複数のページをまとめて解放する請求項４に記載されているアクセラレータ制御装置。
【請求項６】
前記コンピュータプログラムに基づいた処理は、予約ＡＰＩ（Application Programming Interface）と実行ＡＰＩを呼び出して実行させる処理を含み、
前記生成手段は、前記予約ＡＰＩの呼び出しに応じてＤＡＧを更新し、
前記生成手段により生成されたＤＡＧの処理は、前記実行ＡＰＩの呼び出しに応じてトリガされる請求項１乃至請求項５の何れか一つに記載されているアクセラレータ制御装置。
【請求項７】
前記コンピュータプログラムに基づいて、前記ＤＡＧにおける複数のエッジの処理に使用するデータを前記アクセラレータのメモリにキャッシュするように前記生成手段に依頼する実行手段をさらに備え、
前記生成手段は、前記キャッシュの依頼を受けたことを表す情報であるマークを、キャッシュ対象のデータに付与し、
前記制御手段は、前記マークが付与されたデータが使用するページがロックされていない場合には、退避を要するページとして扱うように前記メモリ管理手段に依頼する請求項３に記載されているアクセラレータ制御装置。
【請求項８】
前記コンピュータプログラムに基づき呼び出されるＡＰＩは、指定した処理が生成するデータの容量を示すパラメータを引数とし、
前記生成手段が生成する前記ＤＡＧは、生成されるデータの容量、または、前記ＤＡＧのエッジにおける処理に使用する入力データの容量と当該処理により算出された出力データの容量との比率が付加されている請求項６に記載されているアクセラレータ制御装置。
【請求項９】
コンピュータが、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成し、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御するアクセラレータ制御方法。
【請求項１０】
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する処理と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する処理と、
をコンピュータに実行させる処理手順が表されているプログラム記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセラレータを用いて計算処理を実行するコンピュータシステムに係る技術に関する。
【背景技術】
【０００２】
非特許文献１には、コンピュータ制御システムの一例が記載されている。非特許文献１に示されているコンピュータ制御システムは、図１１に示すように、ドライバホスト６と、ワーカホスト８−１〜８−３とを備えている。ドライバホスト６と各ワーカホスト８−１〜８−３は、ネットワーク７によって接続されている。ワーカホスト８−１〜８−３は計算処理を行うコンピュータである。ドライバホスト６はワーカホスト８−１〜８−３における計算処理を制御するコンピュータである。なお、ワーカホストの数は１つ以上であればよく、図１１に例示した３つに限定されない。【０００３】
図１１に示したコンピュータ制御システムは、次のように動作する。【０００４】
ドライバホスト６は、ワーカホスト８−１〜８−３に行わせる処理の流れを表すＤＡＧ（Directed Acyclic Graph，無閉路有向グラフ）を保持する。図４は、ＤＡＧの一例を表す。図４におけるＤＡＧの各ノード（節点）はデータを表し、ノード間を接続するエッジ（辺）は処理を表す。図４のＤＡＧに従うと、コンピュータがデータ（ノード）４−１に対して処理５−１を施すことによりデータ４−２が生成され、次に、コンピュータがデータ４−２に対して処理５−２を施すことによりデータ４−３が生成される。また、コンピュータがデータ４−３およびデータ４−４の２つのデータを受け当該２つのデータに処理５−３を施すことによりデータ４−５が生成される。さらに、コンピュータがデータ４−５に対して処理５−４を施すことによりデータ４−６が生成される。【０００５】
ここで、データ４−１は、例えば、図１２に表されるような複数の分割データ４Ａ−１，４Ｂ−１，・・・・により構成される。また、他のデータ４−２，４−３，・・・・も同様に、複数の分割データにより構成される。なお、データ４−１〜４−６を構成する分割データは、複数とは限らず、１つである場合もある。この明細書においては、データを構成する分割データが１つであっても、つまり、分割データがデータの一部ではなくデータそのものであっても、分割データと記載する。【０００６】
ドライバホスト６は、図４におけるＤＡＧの各エッジ（処理）において、ワーカホスト８−１〜８−３に、データの処理を分担させる。例えば、ドライバホスト６は、データ４−１を処理する処理５−１に関し、図１２に示される分割データ４Ａ−１をワーカホスト８−１に、分割データ４Ｂ−１をワーカホスト８−２に、分割データ４Ｃ−１をワーカホスト８−３にそれぞれ担当させる。つまり、ドライバホスト６は、並列にデータを処理するように各ワーカホスト８−１〜８−３を制御する。【０００７】
図１１におけるコンピュータ制御システムは、上記のような構成を採用し、かつ、ワーカホストの数を増加させることにより、目的とする処理の処理性能を向上させることができる。【０００８】
なお、特許文献１には並列処理システムに関する技術が記載されている。特許文献１では、コマンドデータが複数のステータスデータと関連付けられている場合には、アクセラレータは、コマンドデータを読み出す回数と、コマンドデータと関連付けされた所定の回数とに応じて、コマンドデータを一つの処理装置に処理させる。【０００９】
また、特許文献２には、互いに異なるメモリ領域を使用する複数のプロセッサを備える画像処理装置に関する技術が記載されている。特許文献２では、バッファモジュールは、前段の処理によりバッファに書き込まれた画像データを、後段の処理が使用するメモリ領域に確保した転送用バッファに転送する。後段の処理では、その転送用バッファに転送された画像データが読み出され当該画像データが処理される。【００１０】
さらに、特許文献３は、命令スケジューリング方式に関し、この特許文献３には、命令ブロックを単位として命令を実行するスケジュールが構築される技術が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１４−１４９７４５号公報
【特許文献２】特開２０１３−２１４１５１号公報
【特許文献３】特開平０３−１３５６３０号公報
【非特許文献】
【００１２】
【非特許文献１】M. Zaharia他著, "Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing," NSDI’12 Proceeding of the 9th USENIX conference on Networked Systems Design and Implementation, 2012
【発明の概要】
【発明が解決しようとする課題】
【００１３】
非特許文献１に示されているコンピュータ制御システムには、ワーカホスト８−１〜８−３（つまり、アクセラレータ）を用いた計算を高速に行うことができないという問題がある。その理由は、ワーカホスト（アクセラレータ）８−１〜８−３のメモリが効率的に利用されていないからである。また、処理により生成されたデータである出力データがワーカホスト８−１〜８−３のメモリに格納できない場合には、出力データは、ワーカホスト８−１〜８−３からドライバホスト６に移される（退避する）。そして、その出力データが処理される場合には、当該出力データは、ドライバホスト６からワーカホスト８−１〜８−３のメモリに格納（ロード）される。このように、出力データがワーカホスト８−１〜８−３のメモリに格納できない場合には、ドライバホスト６とワーカホスト８−１〜８−３との間でのデータの通信が頻繁に発生する。このことは、コンピュータ制御システムが計算を高速に行うことができない理由の一つである。【００１４】
本発明は上記課題を解決するために考え出された。すなわち、本発明の主な目的は、アクセラレータを用いた計算処理の高速化を図ることができる技術を提供することにある。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明のアクセラレータ制御装置は、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する生成部と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する制御部と
を備える。【００１６】
また、本発明のアクセラレータ制御方法は、
コンピュータが、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成し、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する。【００１７】
さらに、本発明のプログラム記憶媒体は、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する処理と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する処理と、
をコンピュータに実行させる処理手順が表されている。【００１８】
なお、本発明の主な目的は、本発明のアクセラレータ制御装置に対応する本発明のアクセラレータ制御方法によっても達成される。また、本発明の主な目的は、本発明のアクセラレータ制御装置およびアクセラレータ制御方法に対応するコンピュータプログラムおよびそれを記憶するプログラム記憶媒体によっても達成される。
【発明の効果】
【００１９】
本発明によれば、アクセラレータを用いた計算処理の高速化を図ることができる。
【図面の簡単な説明】
【００２０】
【図１Ａ】本発明に係るアクセラレータ制御装置の概略構成を表すブロック図である。
【図１Ｂ】図１Ａにおけるアクセラレータ制御装置の構成の変形例を表すブロック図である。
【図２】第１実施形態のアクセラレータ制御装置を備えたコンピュータシステムの構成例を表すブロック図である。
【図３】予約ＡＰＩ（Application Programming Interface）と実行ＡＰＩ（Application Programming Interface）の一例を説明する図である。
【図４】ＤＡＧの一例を表す図である。
【図５】第１実施形態におけるメモリ管理テーブルの一例を表す図である。
【図６】第１実施形態におけるデータ管理テーブルの一例を表す図である。
【図７】アクセラレータで処理されるデータの一例を説明する図である。
【図８】アクセラレータで処理されるデータの別の例を説明する図である。
【図９】第１実施形態のアクセラレータ制御装置の動作例を表すフローチャートである。
【図１０】第１実施形態のアクセラレータ制御装置におけるメモリ管理部の動作例を表すフローチャートである。
【図１１】コンピュータ制御システムの一構成例を説明するブロック図である。
【図１２】コンピュータ制御システムで処理されるデータの構成を説明する図である。
【図１３】アクセラレータ制御装置を構成するハードウェアの構成例を表すブロック図である。
【発明を実施するための形態】
【００２１】
以下に、本発明に係る実施形態を図面を参照しつつ説明する。
【００２２】
まず、本発明に係る実施形態の概要について説明する。
【００２３】
図１Ａは、本発明に係るアクセラレータ制御装置の一実施形態の構成を簡略化して表すブロック図である。図１Ａにおけるアクセラレータ制御装置１は、アクセラレータ（図示せず）に接続し、当該アクセラレータの動作を制御する機能を備えている。アクセラレータ制御装置１は、生成部１２と、制御部１４とを備えている。生成部１２は、実行対象のコンピュータプログラム（以下、ユーザプログラムとも記す）に基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する機能を備えている。制御部１４は、アクセラレータに備えられているメモリにＤＡＧのノードに相当するデータが格納（ロード）されている場合には、メモリに格納されているデータを用いてＤＡＧのエッジに相当する処理を実行するようにアクセラレータを制御する。
【００２４】
なお、制御部１４は、ＤＡＧのノードに相当するデータの全部または一部である分割データを用いて、ＤＡＧの複数のエッジに相当する各処理を連続して実行できる場合には、次のようにアクセラレータを制御してもよい。すなわち、制御部１４は、連続して処理可能な分割データを処理が終了する度にアクセラレータのメモリから削除せずに（退避することなく）、そのデータに複数の処理を連続して実行するようにアクセラレータを制御してもよい。
【００２５】
上記のように、アクセラレータ制御装置１は、アクセラレータのメモリに格納されているデータ（キャッシュされているデータ）をＤＡＧの処理に用いるようにアクセラレータを制御する。このため、アクセラレータに処理を実行させる度にアクセラレータ制御装置１から処理対象のデータをアクセラレータに提供し格納（ロード）する場合に比べて、アクセラレータ制御装置１は、データのロードに掛かる時間を削減できる。これにより、アクセラレータ制御装置１は、アクセラレータを用いた処理の高速化を図ることができる。また、アクセラレータ制御装置１は、アクセラレータへのデータのロードに掛かるサービスコストを削減できる。さらに、処理対象のデータに複数の処理を連続して実行するようにアクセラレータを制御することによって、アクセラレータ制御装置１は、アクセラレータを用いた処理の高速化を促進させることができる。つまり、そのような制御によって、アクセラレータ制御装置１は、アクセラレータからアクセラレータ制御装置１へのデータの移動（退避）と、アクセラレータへのデータの提供（再ロード）との処理を減少できる。これにより、アクセラレータ制御装置１は、アクセラレータを用いた処理の高速化を促進させることができるし、データのロードに掛かるサービスコストを削減できる。
【００２６】
なお、アクセラレータ制御装置１は、図１Ｂに表されているように、さらに、メモリ管理部１６を備えていてもよい。メモリ管理部１６は、アクセラレータ制御装置１が制御するアクセラレータに備えられているメモリを管理する機能を備えている。メモリ管理部１６を備えている場合には、制御部１４は、ＤＡＧに示された処理に必要なアクセラレータのメモリリソースをメモリ管理部１６に要求する。メモリ管理部１６は、処理に必要なメモリ容量を確保するためにメモリの一部を解放する（つまり、既に格納されているデータを削除した後に新規のデータを格納することを許可する）ことがある。この場合には、メモリ管理部１６は、解放可能なメモリ領域のうちの、ＤＡＧにおける後工程の処理で使用しないデータや、ユーザプログラムに基づいたキャッシュ（一時保存）の要求を受けていないデータを保持するメモリ領域から解放する。そして、メモリ管理部１６は、そのように解放したメモリ領域をも含めて処理に必要なメモリ容量に応じたメモリ領域を確保し、ＤＡＧにおける処理に使用するメモリ領域として、確保したメモリ領域を割り当てる。
【００２７】
制御部１４は、アクセラレータのメモリに、キャッシュされたデータ（キャッシュデータ）が格納されている場合には、ＤＡＧの処理にキャッシュデータを使用するようにアクセラレータを制御する。このように、アクセラレータ制御装置１は、キャッシュデータを使用して処理を実行するようにアクセラレータを制御することによって、アクセラレータへのデータのロードの回数を減少でき、これにより、データのロードに掛かるサービスコストを削減できる。また、アクセラレータ制御装置１は、データのロードの回数を減少できることにより、処理の高速化を図ることができる。
【００２８】
また、制御部１４は、処理に対するアクセラレータのメモリ容量が不足し、かつ、データに複数の処理を連続して実行可能である場合には、一度のアクセラレータのメモリへのデータのロードでアクセラレータに複数の処理を連続して実行させる。このように、アクセラレータ制御装置１は、アクセラレータへのデータの一度のロードで複数の処理が連続して実行されるようにアクセラレータを制御することによって、アクセラレータからのデータの移動（退避）と、データのロードとの回数を削減できる。これにより、アクセラレータ制御装置１は、データの退避とロードに掛かるサービスコストを削減できる。また、アクセラレータ制御装置１は、データのロードの回数を減少できることにより、処理の高速化を図ることができる。
【００２９】
＜第１実施形態＞
以下に、本発明に係る第１実施形態のアクセラレータ制御装置について説明する。
【００３０】
図２は、第１実施形態のアクセラレータ制御装置１を備えたコンピュータシステムの構成を簡略化して表すブロック図である。このコンピュータシステムは、計算処理を実行するアクセラレータ３−１，３−２と、アクセラレータ３−１，３−２を制御するアクセラレータ制御装置１とを備えている。アクセラレータ３−１，３−２と、アクセラレータ制御装置１とは、Ｉ／Ｏ（Input/Output）バスインターコネクト２によって接続されている。
【００３１】
なお、図２の例では、２つのアクセラレータ３−１，３−２が図示されているが、アクセラレータの数は１つ以上であればよい。ここで、アクセラレータとは、コンピュータとＩ／Ｏバスを介して接続されるコプロセッサであり、例えば、NVIDIA社のＧＰＵ（Graphics Processing Unit）やIntel社のXeon Phi （登録商標）などが知られている。
【００３２】
また、各アクセラレータ３−１，３−２は、以下に説明するような共通の構成を備え、また、アクセラレータ制御装置１により同様な制御が行われる。以下では、説明を分かり易くするために、各アクセラレータ３−１，３−２を単にアクセラレータ３とも記載する。
【００３３】
アクセラレータ３は、データを処理するプロセッサ３１と、データを格納するメモリ３２とを備えている。
【００３４】
アクセラレータ制御装置１は、実行部１１と、生成部１２と、計算部１３と、制御部１４と、格納部１５と、メモリ管理部１６と、データ管理部１８と、記憶部２０とを備えている。
【００３５】
実行部１１は、ユーザプログラムを実行する機能を備えている。第１実施形態では、アクセラレータ制御装置１には、図３に表されるような予約ＡＰＩ（Application Programming Interface）および実行ＡＰＩ（Application Programming Interface）が与えられている。ユーザプログラムは、予約ＡＰＩおよび実行ＡＰＩを用いながら（呼び出しながら）実行される。予約ＡＰＩは、図４に表されるＤＡＧのエッジ、すなわち、１つの処理に対応する。
【００３６】
生成部１２は、ユーザプログラムが要求する処理順を表すＤＡＧを生成する機能を備えている。例えば、予約ＡＰＩがユーザプログラムに基づいて呼び出され実行されることにより、生成部１２は、ＤＡＧのエッジとノード、すなわち、１つの処理とその処理によって生成されるデータをＤＡＧに生成（追加）する。
【００３７】
ＤＡＧの各データは、図７に表すような分割データにより構成される。なお、以下の説明では、データを複数に分割したことによる各データ部分を分割データと表すだけでなく、データが分割されない場合にも、つまり、データそのもの（データ全体）を分割データと表すこともある。
【００３８】
図３に表す予約ＡＰＩは、処理を予約するために利用されるＡＰＩである。つまり、予約ＡＰＩが実行されても、アクセラレータ３での処理は実行されず、ＤＡＧが生成されるに過ぎない。また、実行ＡＰＩが呼び出された場合には、生成部１２によってＤＡＧに新たなエッジおよびノードが生成される場合と、生成されない場合とがある。実行ＡＰＩが実行されると、それまでに生成されたＤＡＧの処理の実行がトリガ（起動）される。実行ＡＰＩに属する処理として、例えば、ユーザプログラム内でＤＡＧが処理された後のデータが必要となる処理や、ファイル書き込み等のＤＡＧの記述が完了して結果を書き込み、または、表示してプログラムを完了する処理等がある。
【００３９】
図３に表されるように、予約ＡＰＩや実行ＡＰＩは、１つあるいは複数の引数α，β，…を持つ場合がある。引数のうちの１つは、カーネル関数と呼ばれる。カーネル関数は、ユーザプログラムがデータに対して実行する処理を表す関数である。すなわち、予約ＡＰＩや実行ＡＰＩはデータに対し行われる処理のアクセスパターンを表し、実際の処理はユーザプログラムにおいて予約ＡＰＩおよび実行ＡＰＩの引数として与えられるカーネル関数に基づいて行われる。また、他の引数の１つは、予約ＡＰＩまたは実行ＡＰＩとそれらに与えられるカーネル関数による処理が生成する出力データの大きさを示すパラメータである。
【００４０】
例えば、図４におけるデータ４−１に施される処理５−１の場合には、パラメータは生成されるデータ４−２の容量を示す。なお、容量を示す方法として、例えば、生成されるデータ４−２の容量の絶対値を与える方法が用いられる。また、容量を示す方法として、処理されるデータ（入力データ）となるデータ４−１の容量と生成されるデータ（出力データ）となるデータ４−２の容量との相対的な比率を与える方法が用いられることもある。
【００４１】
また、実行部１１は、ユーザプログラムに基づいた要求に応じて、複数のＤＡＧで繰り返し使用するデータに関しては、アクセラレータ３にデータを優先的にキャッシュするように生成部１２に依頼（要求）するようにしてもよい。
【００４２】
生成部１２は、実行部１１が予約ＡＰＩと実行ＡＰＩを読み出す度にＤＡＧを生成する。生成部１２は、予約ＡＰＩが呼ばれた場合に、予約ＡＰＩに応じたエッジとノードをＤＡＧに追加する。また、生成部１２は、実行ＡＰＩが実行された場合に、必要に応じてエッジとノードを追加し、これまで生成したＤＡＧを計算部１３に通知する。
【００４３】
なお、生成部１２が生成するＤＡＧは、ユーザプログラムに基づいた処理に関連する予約ＡＰＩや実行ＡＰＩの種類、各ＡＰＩに与えられたカーネル関数を含む。このＤＡＧは、さらに、各処理で生成されるデータの容量、または、処理の入力側のノードが示すデータと出力側のノードが示すデータの容量比率等の各ノードが示すデータの容量に関する情報を含む。また、生成部１２は、実行部１１からの依頼に基づいて、ＤＡＧにおいて、キャッシュを行うノード（データ）には、キャッシュ対象のデータであることを表す情報（マーク）を付与する。
【００４４】
計算部１３は、生成部１２が生成したＤＡＧを受け取り、受け取ったＤＡＧの各処理において必要となるアクセラレータ３のメモリ３２におけるスレッド数およびメモリ容量（メモリリソース）を計算し、ＤＡＧおよび必要なリソースの情報を制御部１４に渡す。
【００４５】
格納部１５は、データを格納する構成を備えている。第１実施形態では、格納部１５は、アクセラレータ３のメモリ３２に提供し格納（ロード）するデータを保持する。
【００４６】
メモリ管理部１６は、アクセラレータ制御装置１の起動後、アクセラレータ３のメモリ３２をすべて確保し、確保したメモリリソースを一定のサイズのページに分割して管理する。ページサイズは、例えば、４ＫＢや６４ＫＢである。
【００４７】
記憶部２０には、メモリ３２を管理する際に利用する管理情報であるメモリ管理テーブル１７が格納されている。図５は、メモリ管理テーブル１７の一例を表す図である。メモリ管理テーブル１７は、各ページに関する情報を保持する。例えば、ページの情報は、ページが属するアクセラレータ３を識別するアクセラレータ番号と、ページ番号と、ページに計算中または計算後のデータが保持されていることを示す使用フラグとを含む。さらに、ページの情報は、ページが計算に使用中であり解放することが禁止されていることを示すロックフラグを含む。さらにページの情報は、ページを解放する場合はＤＡＧにおける後工程の処理で必要となるためスワップ（退避）する必要があることを示す要スワップフラグを含む。さらにまた、ページの情報は、使用フラグがアサート（有効化）されている場合に、ページが保持するデータを示す使用データ番号と、各データのどの分割データを保持しているかを示す分割データ番号とを含む。使用データ番号は、ＤＡＧのノードに割り当てられる識別子である。
【００４８】
メモリ管理部１６は、メモリ管理テーブル１７を参照して、アクセラレータ３のメモリ３２を管理する。メモリ管理部１６は、制御部１４の要求を受けると、まず、要求された容量のページ数を使用フラグがアサートされていないページ（フリーのページ）のみから確保可能かどうかを確認する。メモリ管理部１６は、確保可能である場合には、それらのページの使用フラグとロックフラグをアサートし、制御部１４に確保完了を応答する。
【００４９】
また、メモリ管理部１６は、要求された容量のページ数をフリーのページのみから確保できない場合には、次のようにして要求された容量のページ数を確保する。つまり、メモリ管理部１６は、フリーのページに加えて、使用フラグがアサートされ、かつ、ロックフラグおよび要スワップフラグがアサートされていないページをも利用して必要なページ数を確保する。そして、メモリ管理部１６は、その確保したページの使用フラグとロックフラグをアサートし、制御部１４に確保完了を応答する。このとき、メモリ管理部１６は、確保されたページが保持していたデータを削除する。また、メモリ管理部１６は、削除対象のデータのデータ番号と、分割データ番号と、ページ番号とをデータ管理部１８に通知する。なお、メモリ管理部１６は、メモリを解放する際には、１つのデータの１つの分割データが複数のページに分散して保持されている場合には、これら複数のページをまとめて解放する。
【００５０】
さらに、フリーのページと、使用フラグがアサートされ、かつ、ロックフラグおよび要スワップフラグがアサートされていないページとを合わせても必要なページを確保できない場合がある。この場合には、メモリ管理部１６は、さらに残りのページのうちのロックページ以外のページをも利用して、必要な容量のページ数を確保する。このとき、メモリ管理部１６は、スワップフラグがアサートされているページに関しては、格納されているデータを格納部１５に退避（移動）し、移動したデータを格納していたページを解放する。メモリ管理部１６は、データの退避や削除を、１つのデータの１つの分割データを単位として行う。このとき、メモリ管理部１６は、格納部１５に退避した分割データ、または、要スワップフラグがアサートされておらずメモリ解放により削除した分割データにおけるデータ番号、分割データ番号、ページ番号をデータ管理部１８に通知する。
【００５１】
また、メモリ管理部１６は、使用可能なページ数の不足により、制御部１４が要求する容量のページ数を確保できない場合には、メモリ容量を確保できないことを表すエラーのメッセージを制御部１４に応答する。
【００５２】
さらに、メモリ管理部１６は、制御部１４から、確保可能なメモリの情報に関する問い合わせを受けた場合には、その時点で確保可能なメモリの情報を制御部１４に応答する。また、メモリ管理部１６は、制御部１４からの要求に応じて、管理しているページの要スワップフラグをアサートするとともに、計算が終了し計算に使用されていたページのロックフラグのアサートを解除する。
【００５３】
データ管理部１８は、データ管理テーブル１９を用いて、アクセラレータ３のメモリ３２が保持するデータを管理する。
【００５４】
記憶部２０には、アクセラレータ３のメモリ３２に格納されているデータの管理に利用するデータ管理テーブル１９が保持されている。図６は、データ管理テーブル１９の一例を表す図である。データ管理テーブル１９は、各データに関する情報を保持する。データの情報は、データを識別するデータ番号と、データの分割番号と、データがアクセラレータ３のメモリ３２と格納部１５の何れに保持されているかを示すマテリアライズフラグと、データが格納部１５に退避（移動）されていることを示すスワップフラグとを含む。さらに、データの情報は、マテリアライズフラグがアサートされ、かつ、スワップフラグがアサートされていないデータを保持するアクセラレータ３を示すアクセラレータ番号と、データを保持するアクセラレータ３のメモリ３２のページ番号とを含む。なお、データがアクセラレータ３のメモリ３２に保持されている場合に、マテリアライズフラグがアサートされる。
【００５５】
データ管理部１８は、制御部１４からデータの存在に関する問い合わせを受けた場合には、問い合わせ対象のデータがすでに存在するか否かをデータ管理テーブル１９を利用して確認する。かつ、データ管理部１８は、データ管理テーブル１９に基づいて、問い合わせ対象のデータのマテリアライズフラグとスワップフラグがそれぞれアサートされているかを確認する。そして、データ管理部１８は、その確認結果を制御部１４に応答する。また、データ管理部１８は、メモリ管理部１６の通知を受けた場合には、アクセラレータ３のメモリ３２から消去されたデータのマテリアライズフラグを０とする。さらに、データ管理部１８は、アクセラレータ３のメモリ３２から格納部１５に退避されたデータのスワップフラグをアサートする。
【００５６】
制御部１４は、生成部１２が生成したＤＡＧ、および、計算部１３が計算した必要リソースの情報を計算部１３から受け取った場合には、ＤＡＧで指定された処理を行う。このとき、制御部１４は、ＤＡＧで指定されたデータ番号をデータ管理部１８に問合せ、そのデータが既に計算され、マテリアライズフラグがアサートされているか、または、スワップフラグがアサートされているかを調べる。また、制御部１４は、確保可能なメモリ容量をメモリ管理部１６に問い合わせる。そして、制御部１４は、高速にＤＡＧを処理する実行手順で処理を実行する。
【００５７】
つまり、制御部１４は、既に計算され、かつ、マテリアライズフラグがアサートされ、スワップフラグがアサートされていないデータに関しては、そのデータをアクセラレータ３のメモリ３２にキャッシュしておき、当該キャッシュされたデータを利用する。これにより、そのデータをロードおよび生成する処理が省略される。
【００５８】
また、制御部１４は、マテリアライズフラグとスワップフラグが共にアサートされているデータに関しては、格納部１５に退避されているデータをロードするために必要なメモリ容量をメモリ管理部１６に要求する。さらに、制御部１４は、メモリ管理部１６から確保完了の応答を受け取ると、指定されたページにデータをロードし、そのデータを使用する。これにより、そのデータを生成する処理が省略される。
【００５９】
このように、制御部１４は、すでにアクセラレータ３のメモリ３２に格納されているデータに対する処理を、メモリ３２に存在しないデータに対する処理よりも優先する。このため、処理時に、退避していた格納部１５からアクセラレータ３のメモリ３２にロードされることによるサービスコストが削減される。
【００６０】
また、例えば、図４に示すＤＡＧのデータ４−１と、当該データ４−１を処理したことによるデータ（出力データ）であるデータ４−２との双方が、容量不足のために、アクセラレータ３のメモリ３２に格納できない場合がある。つまり、アクセラレータ３で処理するデータの総量がアクセラレータ３のメモリ３２に収まらない場合がある。このような場合には、制御部１４は次のようにアクセラレータ３を制御する。なお、ＤＡＧのデータ４−１〜４−３は、図７に示すように、それぞれ、複数の分割データに分割されているとする。
【００６１】
すなわち、アクセラレータ３の処理順として、データ４−１の分割データ４１−１，４２−１に順に処理５−１を行った後に、データ４−２の分割データ４１−２，４２−２に順に処理５−２を行うというような処理順がある。これに対し、制御部１４は、データ４−１の分割データ４１−１に処理５−１を行った後に続けてデータ４−２の分割データ４１−２に処理５−２を行うというような処理順となるようにアクセラレータ３を制御する。これにより、制御部１４は、データ４−２の分割データ４１−２がアクセラレータ３のメモリ３２から格納部１５に退避される可能性を低下させる。
【００６２】
制御部１４は、分割データに連続して処理を施す制御（最適化）を、図７に例示するような２つの処理が連続する場合に限らず、３つ以上の処理が連続する場合にも同様に実施してもよい。
【００６３】
なお、制御部１４は、複数のアクセラレータ３を用いて処理を実行する場合には、複数のアクセラレータ３に、複数の分割データを分散させ各分割データにＤＡＧのエッジにおける同一の処理を並列に行わせる。
【００６４】
また、制御部１４は、図８に示されるように、データを構成する分割データの数が図７の場合よりも多い場合であっても、上記同様に、分割データに処理５−１と処理５−２を連続して行うように各アクセラレータ３を制御する。
【００６５】
さらに、制御部１４は、ＤＡＧの各エッジにおける処理をアクセラレータ３に行わせる場合に、アクセラレータ３のメモリ３２に処理対象の分割データが格納されていない場合には、次の動作を行う。すなわち、制御部１４は、処理対象のデータをアクセラレータ３にロードし、また、出力データを出力するために必要なメモリ容量に相当するアクセラレータ３のメモリ３２におけるページ数をメモリ管理部１６に依頼して確保する。そして、制御部１４は、処理を実行するアクセラレータ３に処理対象のデータを格納部１５からロードさせ処理を実行させる。
【００６６】
また、制御部１４は、処理が終了すると、メモリ管理部１６に通知し、使用していたメモリページのロックをメモリ管理部１６によって解除する。さらに、制御部１４は、ＤＡＧの後工程の処理において必要となるデータに関しては、ロックフラグのアサートを解除し、スワップフラグをアサートするようにメモリ管理部１６に通知する。また、制御部１４は、複数のＤＡＧで使用されるデータとしてキャッシュを依頼するマークが付加されたデータに関しては、データ管理テーブル１９のデータに該当するページ番号のスワップフラグをアサートするようにメモリ管理部１６に通知する。
【００６７】
次に、第１実施形態のアクセラレータ制御装置１の動作例を、図２および図９を用いて説明する。図９は、第１実施形態のアクセラレータ制御装置１の動作例を表すフローチャートである。なお、図９に表されるフローチャートは、アクセラレータ制御装置１が実行する処理手順を表している。
【００６８】
実行部１１は、予約ＡＰＩと実行ＡＰＩを利用するユーザプログラムを実行する（ステップＡ１）。
【００６９】
その後、実行部１１が実行したユーザプログラムの処理が実行ＡＰＩにより呼び出され（読み出され）実行された処理であるか否かを生成部１２が判断する（ステップＡ２）。そして、実行されたユーザプログラムの処理が実行ＡＰＩにより呼び出された処理ではない場合（ステップＡ２のＮｏ）には、生成部１２は、予約ＡＰＩにより呼び出され実行された処理であるか否かを確認する（ステップＡ３）。予約ＡＰＩにより呼び出された処理である場合（ステップＡ３のＹｅｓ）には、生成部１２は予約ＡＰＩで指定された処理と当該処理により生成されるデータに相当するエッジとノードを、それまでに生成したＤＡＧに追加する。つまり、生成部１２は、ＤＡＧを更新する（ステップＡ４）。
【００７０】
その後、実行部１１は、実行したユーザプログラムの命令が当該プログラムの最後の命令であるか否かを確認する（ステップＡ５）。最後の命令である場合（ステップＡ５のＹｅｓ）には、実行部１１はユーザプログラムに基づいた処理を終了する。一方、最後の命令ではない場合（ステップＡ５のＮｏ）には、実行部１１は、ステップＡ１に戻り、ユーザプログラムの実行を継続する。
【００７１】
一方、ステップＡ２において、実行部１１が実行したユーザプログラムの処理が実行ＡＰＩにより呼び出された処理である場合（ステップＡ２のＹｅｓ）には、生成部１２は、これまでに生成されたＤＡＧを伝達する処理（ステップＡ６〜Ａ１４）に移行する。
【００７２】
すなわち、生成部１２は、実行した処理および生成されたデータに相当するエッジとノードを必要に応じＤＡＧに追加することによりＤＡＧを更新し（ステップＡ６）、ＤＡＧを計算部１３に伝達する。
【００７３】
計算部１３は、与えられたＤＡＧの各エッジにおける処理に必要なアクセラレータのスレッド数とメモリ容量を算出する（ステップＡ７）。さらに、計算部１３は、算出されたスレッド数とメモリ容量を必要リソース情報としてＤＡＧに付加し、当該ＤＡＧを制御部１４に伝達する。
【００７４】
制御部１４は、必要リソース情報が付加されたＤＡＧを受け取ると、ＤＡＧに含まれるデータを確認する。つまり、制御部１４は、どのデータがすでに存在しているかをデータ管理部１８に確認する。もしくは、制御部１４は、どのデータがアクセラレータ３にキャッシュされているか、または、格納部１５に退避されているかをデータ管理部１８に確認する。また、制御部１４は、確保可能なメモリ容量をメモリ管理部１６に確認する。そして、制御部１４は、得られた情報に基づいて、次のように、実行する処理の順番を決定する。すなわち、制御部１４は、既に計算されているデータが活用されるようにする。また、制御部１４は、アクセラレータ３のメモリ３２に存在するデータを計算する処理が優先されるようにする。さらに、制御部１４は、データ（分割データ）に対する複数の処理が連続して行われるようにする。制御部１４は、上記のような事項が考慮された最適な処理順を探索して決定する（ステップＡ８）。つまり、制御部１４は、処理順の最適化を行う。なお、分割データに対する連続した処理は、処理するデータがアクセラレータ３のメモリ３２に収容できない場合に特に有効である。
【００７５】
然る後に、制御部１４は、決定した処理順に従ってＤＡＧのそれぞれのエッジにおける処理が実行されるように次のようにアクセラレータ３を制御する。まず、制御部１４は、実行対象のエッジにおける処理で処理される分割データがすでにアクセラレータ３のメモリ３２に用意（格納）されているか否かを確認する（ステップＡ９）。そして、制御部１４は、処理される分割データがアクセラレータ３に用意されていない場合（ステップＡ９のＮｏ）には、その分割データを格納部１５からアクセラレータ３のメモリ３２にロードする（ステップＡ１０）。ここで、ロードが必要な場合として、例えば、分割データがアクセラレータ３のメモリ３２から格納部１５に退避されたことによってアクセラレータ３のメモリ３２から削除されている場合が考えられる。また、ロードが必要な場合として、ＤＡＧの最初の処理で処理される分割データであるためにアクセラレータ３に与えられていない場合も考えられる。
【００７６】
その後、制御部１４は、実行する処理の出力に必要となるメモリ容量の確保をメモリ管理部１６に依頼する（ステップＡ１１）。このとき、制御部１４は、出力されるデータに関する情報をメモリ管理テーブル１７に追加するために必要となる情報（例えば、使用データ番号や分割データ番号）をメモリ管理部１６に通知する。メモリ管理部１６は、アクセラレータ３に必要なメモリ容量（ページ）を確保し、通知された情報をメモリ管理テーブル１７に登録する。そして、メモリ管理部１６は、確保したページのページ番号を制御部１４に通知する。ここで、確保されたメモリのページに対するロックフラグがアサートされる。
【００７７】
その後、制御部１４は、実行した処理が出力する出力データに関する情報（換言すれば、出力データに関する情報をデータ管理テーブル１９に追加するのに必要な情報）をデータ管理部１８に通知する。データ管理部１８は、通知された情報をデータ管理テーブル１９に登録する（ステップＡ１２）。
【００７８】
然る後に、制御部１４は、ＤＡＧのエッジに該当する処理が実行されるようにアクセラレータ３を制御する（ステップＡ１３）。制御部１４は、処理が完了すると、処理完了をメモリ管理部１６に通知し、処理に使用していたメモリ３２のページにおけるロックフラグのアサートを解除する。また、制御部１４は、ＤＡＧにおける後工程のエッジ（処理）で使用することが分かっているデータについては、データが格納されるページにおけるメモリ管理デーブル１７の要スワップフラグをアサートするようにメモリ管理部１６に依頼する。さらに、制御部１４は、実行部１１からキャッシュを依頼されたデータに関しても、要スワップフラグをアサートするようにメモリ管理部１６に依頼する。
【００７９】
制御部１４は、ステップＡ９〜Ａ１３の処理を、ステップＡ８で決定した最適な処理順に従ってＤＡＧで指定されたすべての処理の実行を完了するまで継続する。
【００８０】
そして、ＤＡＧのすべての処理を実行し終えると（ステップＡ１４のＹｅｓ）、制御部１４は、ステップＡ１の動作に戻る。
【００８１】
次に、処理に必要なメモリ容量を確保するためにページを割り当てるメモリ管理部１６の動作について、図１０を利用して説明する。図１０は、ページの割り当て処理に関するメモリ管理部１６の動作例を表すフローチャートである。
【００８２】
メモリ管理部１６は、メモリ管理テーブル１７を参照することにより、要求されたメモリ容量に相当するフリーのページ数がアクセラレータ３のメモリ３２に存在するか否かを調べる（ステップＢ１）。メモリ管理部１６は、フリーのページだけで要求されたメモリ容量を確保できる場合（ステップＢ１のＹｅｓ）には、そのページを処理のために使用するページとして割り当てる（ステップＢ７）。
【００８３】
一方、メモリ管理部１６は、要求されたメモリ容量に相当するフリーのページ数が足りない場合（ステップＢ１のＮｏ）には、メモリ管理テーブル１７からロックフラグと要スワップスラグがアサートされていないページを検索する。そして、メモリ管理部１６は、検索されたページと、フリーのページとを合わせることにより、要求されたメモリ容量を確保できるかどうかを調べる（ステップＢ２）。
【００８４】
ここで、メモリ管理部１６は、必要となるメモリ容量が確保できる場合（ステップＢ２のＹｅｓ）、ロックフラグも要スワップフラグもアサートされていない全部または一部のページを解放し、解放したページが保持していたデータを削除する（ステップＢ６）。そして、メモリ管理部１６は、解放したページが保持していたデータを削除した旨をデータ管理部１８に通知する。
【００８５】
また、メモリ管理部１６は、ステップＢ２でもメモリ容量を確保できない場合（ステップＢ２のＮｏ）、要スワップフラグがアサートされたページをも含めることによって要求されたメモリ容量を確保できるか否かを調べる（ステップＢ３）。
【００８６】
メモリ管理部１６は、ステップＢ３において必要なメモリ容量を確保できない場合（ステップＢ３のＮｏ）には、エラーであることを制御部１４に応答する（ステップＢ４）。
【００８７】
また、メモリ管理部１６は、ステップＢ３において必要なメモリ容量を確保できる場合（ステップＢ３のＹｅｓ）には、次の動作を実行する。すなわち、メモリ管理部１６は、ロックフラグがアサートされておらず、かつ、要スワップフラグがアサートされた全部または一部のページに格納されているデータを格納部１５に退避（移動）する（ステップＢ５）。そして、メモリ管理部１６は、データを格納部１５に移動したページと、ロックフラグと要スワップフラグがアサートされていないページと合わせて解放し、解放したページのデータを削除する（ステップＢ６）。また、メモリ管理部１６は、データを退避したことおよびページを解放したことをデータ管理部１８に通知する。ここで、メモリ管理部１６は、データに関する処理（ステップＢ５，Ｂ６）を、分割データを単位として行う。
【００８８】
然る後に、データ管理部１８は、制御部１４に要求されたメモリ容量に応じたページを処理のために使用するページとして割り当てる（ステップＢ７）。
【００８９】
以上のように、第１実施形態のアクセラレータ制御装置１では、生成部１２は、ユーザプログラムの処理の流れを表すＤＡＧ（無閉路有向グラフ）を生成する。制御部１４は、ＤＡＧに示された処理を実行するために必要なアクセラレータのメモリ容量をメモリ管理部１６に要求して確保する。メモリ管理部１６は、キャッシュ（つまり、アクセラレータ３のメモリ３２に保持しておくこと）を要求されたデータやＤＡＧにおける後工程の処理において使用されるデータを優先してアクセラレータ３のメモリ３２に保持させる。これにより、制御部１４は、アクセラレータ３にＤＡＧの処理を実行させる際に、当該アクセラレータ３のメモリ３２にデータが既に存在する場合、そのデータをキャッシュデータとしてアクセラレータ３に利用させる。また、制御部１４は、アクセラレータ３にＤＡＧの処理を行わせる際に、データに対して連続して複数の処理を実行させることによって、一度のアクセラレータ３へのデータのロードでまとめて複数の処理をアクセラレータ３に実行させることができる。
【００９０】
すなわち、第１実施形態のアクセラレータ制御装置１では、メモリ管理部１６がアクセラレータ３のメモリ３２においてＤＡＧの処理（計算）に必要な最小限のメモリ確保を行い、残りのメモリ部分に可能な限り、使用が予定されているデータを保持させる。このため、アクセラレータ３は、メモリ３２に保持されているデータをキャッシュデータとして用いて処理を実行できる。これにより、アクセラレータ３は、ＤＡＧの処理を行う度にアクセラレータ制御装置１の格納部１５からデータをロードするという処理を行わなくて済む。また、アクセラレータ３は、メモリからアクセラレータ制御装置１の格納部１５にデータを退避する処理を削減することができる。したがって、第１実施形態のアクセラレータ制御装置１は、アクセラレータ３を用いた処理の高速化を図ることができる。
【００９１】
なお、図１３は、アクセラレータ制御装置１を構成するハードウェアの一例を簡略化して表すブロック図である。アクセラレータ制御装置１は、ＣＰＵ（Central Processing Unit）１００と、メモリ１１０と、入出力ＩＦ(InterFace)１２０と、通信部１３０とを有している。これらＣＰＵ１００と、メモリ１１０と、入出力ＩＦ１２０と、通信部１３０とは、バス１４０によって相互に接続されている。入出力ＩＦ１２０は、入力装置（キーボードやマウス等）や表示装置などの周辺機器と、アクセラレータ制御装置１とが情報を通信できるように接続する構成を備えている。通信部１３０は、情報通信網を通して他のコンピュータと通信できるように接続する構成を備えている。メモリ１１０は、データやコンピュータプログラムを記憶する構成を備えている。ここでのメモリとは広義の意味を持つ記憶装置を表し、半導体メモリおよび一般に二次記憶と呼ばれるハードディスクやフラッシュディスクを含む。ＣＰＵ１００は、メモリから読み出したコンピュータプログラムを実行することにより、様々な機能を持つことができる。例えば、第１実施形態のアクセラレータ制御装置１における実行部１１と生成部１２と計算部１３と制御部１４とメモリ管理部１６とデータ管理部１８は、ＣＰＵ１００により実現される。メモリ管理テーブル１７とデータ管理テーブル１９は、メモリ１１０により実現される記憶部２０に格納される。
【００９２】
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９３】
（付記１）
ユーザプログラムを表すＤＡＧ（Directed Acyclic Graph）を生成する生成部と、
アクセラレータのメモリに前記ＤＡＧのノードに相当するデータがロードされている場合、前記アクセラレータのメモリにロードされた前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する制御部と、を備える、
ことを特徴とするアクセラレータ制御装置。
【００９４】
（付記２）
前記制御部は、前記ＤＡＧのノードに相当するデータの全部または一部である分割データに対して、前記ＤＡＧの複数のエッジに相当する複数の処理を連続して実行できる場合、前記アクセラレータのメモリ上にロードされた前記分割データを退避させることなく、前記アクセラレータのメモリ上にロードされた前記分割データに対して、前記複数の処理を連続して実行するように前記アクセラレータを制御してもよい。
【００９５】
（付記３）
前記アクセラレータ制御装置は、前記アクセラレータのメモリのうちの、前記ＤＡＧのエッジに相当する以後の処理において使用されないデータを保持するメモリ領域を優先して解放しつつ、前記ＤＡＧの計算に必要なメモリ領域の割り当てを行うメモリ管理部と、前記アクセラレータのメモリのデータを管理するデータ管理部と、前記アクセラレータのメモリにロードするデータ、および、前記ＤＡＧの処理中に前記アクセラレータのメモリから退避させたデータを保持する格納部と、を備え、前記制御部は、前記ＤＡＧの計算に必要となる前記アクセラレータのメモリを前記メモリ管理部に要求するとともに、前記アクセラレータのメモリのデータを前記データ管理部に問い合わせ、問い合わせ結果に応じて前記アクセラレータを制御してもよい。
【００９６】
（付記４）
前記アクセラレータ制御装置は、前記アクセラレータのメモリの各ページが保持するデータが前記ＤＡＧのエッジに相当する処理に使用中であるか否かを示す情報と、該データの退避を要するか否かを示す情報を保持するテーブルを備え、前記メモリ管理部は、前記アクセラレータのメモリを解放する際、前記テーブルを参照して、前記ＤＡＧのエッジに相当する処理に使用中のデータ以外のデータであって退避を要しないデータを保持するページを、退避を要するデータを保持するページよりも優先的に解放してもよい。
【００９７】
（付記５）
前記メモリ管理部は、前記アクセラレータのメモリを解放する際、前記ＤＡＧのノードに相当するデータの全部または一部である分割データを保持する複数のページをまとめて解放してもよい。
【００９８】
（付記６）
前記ユーザプログラムは、予約ＡＰＩ（Application Programming Interface）と実行ＡＰＩの２種類のＡＰＩを使用し、前記生成部は、前記予約ＡＰＩの呼び出しに応じてＤＡＧの生成を継続し、前記生成部により生成されたＤＡＧの処理は、前記実行ＡＰＩの呼び出しに応じてトリガされるようにしてもよい。
【００９９】
（付記７）
前記アクセラレータ制御装置は、前記ユーザプログラムの依頼を受け、複数のＤＡＧに跨って計算に使用するデータを前記アクセラレータのメモリにキャッシュするように前記生成部に依頼する実行部を備え、前記生成部は、前記キャッシュの依頼を受けたデータをマークし、前記制御部は、前記マークされたデータが使用するページがロックされていない場合、退避を要するページとして扱うように前記メモリ管理部に依頼してもよい。
【０１００】
（付記８）
前記ユーザプログラムが呼び出すＡＰＩは、指定した処理が生成するデータの容量を示すパラメータを引数とし、前記生成部が生成するＤＡＧは、生成されるデータの容量、または、入力データの容量と出力データの容量との比率を含んでもよい。
【０１０１】
（付記９）
コンピュータが、ユーザプログラムを表すＤＡＧ（Directed Acyclic Graph）を生成するステップと、
アクセラレータのメモリ上に前記ＤＡＧのノードに相当するデータがロードされている場合、前記アクセラレータのメモリにロードされた前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御するステップと、を含む、
ことを特徴とするアクセラレータ制御方法。
【０１０２】
（付記１０）
前記アクセラレータ制御方法は、前記ＤＡＧのノードに相当するデータの全部または一部である分割データに対して、前記ＤＡＧの複数のエッジに相当する複数の処理を連続して実行できる場合、前記アクセラレータのメモリ上にロードされた前記分割データを退避させることなく、前記アクセラレータのメモリ上にロードされた前記分割データに対して、前記複数の処理を連続して実行するように、前記コンピュータが前記アクセラレータを制御するステップを含んでもよい。
【０１０３】
（付記１１）
前記アクセラレータ制御方法は、前記コンピュータが、前記アクセラレータのメモリのうちの、前記ＤＡＧのエッジに相当する以後の処理において使用されないデータを保持するメモリ領域を優先して解放しつつ、前記ＤＡＧの計算に必要なメモリ領域の割り当てを行うステップと、前記アクセラレータのメモリ上のデータを管理するステップと、前記アクセラレータのメモリにロードするデータ、および、前記ＤＡＧの処理中に前記アクセラレータのメモリから退避させたデータを前記コンピュータのメモリに保持するステップと、前記アクセラレータのメモリ上のデータに応じて前記アクセラレータを制御するステップと、を含んでもよい。
【０１０４】
（付記１２）
前記アクセラレータ制御方法は、前記アクセラレータのメモリの各ページが保持するデータが前記ＤＡＧのエッジに相当する処理に使用中であるか否かを示す情報と、該データの退避を要するか否かを示す情報を、前記コンピュータがテーブルに保持するステップと、前記アクセラレータのメモリを解放する際、前記テーブルを参照して、前記ＤＡＧのエッジに相当する処理に使用中のデータ以外のデータであって退避を要しないデータを保持するページを、退避を要するデータを保持するページよりも優先的に解放するステップと、を含んでもよい。
【０１０５】
（付記１３）
前記アクセラレータ制御方法において、前記コンピュータは、前記アクセラレータのメモリを解放する際、前記ＤＡＧのノードに相当するデータの全部または一部である分割データを保持する複数のページをまとめて解放してもよい。
【０１０６】
（付記１４）
ユーザプログラムを表すＤＡＧ（Directed Acyclic Graph）を生成する処理と、
アクセラレータのメモリ上に前記ＤＡＧのノードに相当するデータがロードされている場合、前記アクセラレータのメモリにロードされた前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する処理と、をコンピュータに実行させる処理手順が表されているコンピュータプログラム。
【０１０７】
（付記１５）
前記コンピュータプログラムは、前記ＤＡＧのノードに相当するデータの全部または一部である分割データに対して、前記ＤＡＧの複数のエッジに相当する複数の処理を連続して実行できる場合、前記アクセラレータのメモリ上にロードされた前記分割データを退避させることなく、前記アクセラレータのメモリ上にロードされた前記分割データに対して、前記複数の処理を連続して実行するように前記アクセラレータを制御する処理を前記コンピュータに実行させてもよい。
【０１０８】
（付記１６）
前記コンピュータプログラムは、前記アクセラレータのメモリのうちの、前記ＤＡＧのエッジに相当する以後の処理において使用されないデータを保持するメモリ領域を優先して解放しつつ、前記ＤＡＧの計算に必要なメモリ領域の割り当てを行う処理と、前記アクセラレータのメモリ上のデータを管理する処理と、前記アクセラレータのメモリにロードするデータ、および、前記ＤＡＧの処理中に前記アクセラレータのメモリから退避させたデータを前記コンピュータのメモリに保持する処理と、前記アクセラレータのメモリ上のデータに応じて前記アクセラレータを制御する処理と、を前記コンピュータに実行させてもよい。
【０１０９】
（付記１７）
前記コンピュータプログラムは、前記アクセラレータのメモリの各ページが保持するデータが前記ＤＡＧのエッジに相当する処理に使用中であるか否かを示す情報と、該データの退避を要するか否かを示す情報をテーブルに保持する処理と、前記アクセラレータのメモリを解放する際、前記テーブルを参照して、前記ＤＡＧのエッジに相当する処理に使用中のデータ以外のデータであって退避を要しないデータを保持するページを、退避を要するデータを保持するページよりも優先的に解放する処理と、を前記コンピュータに実行させてもよい。
【０１１０】
（付記１８）
前記コンピュータプログラムは、前記アクセラレータのメモリを解放する際、前記ＤＡＧのノードに相当するデータの全部または一部である分割データを保持する複数のページをまとめて解放する処理を、前記コンピュータに実行させてもよい。
【０１１１】
以上、上記した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上記した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０１１２】
この出願は、２０１４年１０月２３日に出願された日本出願特願２０１４−２１５９６８を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１１３】
１  アクセラレータ制御装置
３，３−１，３−２  アクセラレータ
１１  実行部
１２  生成部
１３  計算部
１４  制御部
１５  格納部
１６  メモリ管理部
１８  データ管理部
【図１Ａ】
2016063482.tif 000003
【図１Ｂ】
2016063482.tif 000004
【図２】
2016063482.tif 000005
【図３】
2016063482.tif 000006
【図４】
2016063482.tif 000007
【図５】
2016063482.tif 000008
【図６】
2016063482.tif 000009
【図７】
2016063482.tif 000010
【図８】
2016063482.tif 000011
【図９】
2016063482.tif 000012
【図１０】
2016063482.tif 000013
【図１１】
2016063482.tif 000014
【図１２】
2016063482.tif 000015
【図１３】
2016063482.tif 000016
【手続補正書】
【提出日】平成29年4月14日(2017.4.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する生成手段と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する制御手段と
を備えるアクセラレータ制御装置。
【請求項２】
前記制御手段は、前記ＤＡＧのノードに相当するデータの全部または一部である分割データに、前記ＤＡＧの複数のエッジに相当する各処理を連続して実行できる場合には、前記アクセラレータのメモリに格納されている前記分割データを前記処理が終了する度に前記メモリから削除することなく、当該分割データに前記複数の処理を連続して実行するように前記アクセラレータを制御する請求項１に記載されているアクセラレータ制御装置。
【請求項３】
前記ＤＡＧのエッジに相当する処理が実行される際に前記アクセラレータのメモリの一部を前記ＤＡＧの処理に必要なメモリ領域として割り当て、また、前記アクセラレータのメモリのうちの、前記ＤＡＧの後工程のエッジに相当する処理に使用されないデータを格納しているメモリ領域を解放するメモリ管理手段と、
前記アクセラレータのメモリに格納されているデータを管理するデータ管理手段と、
前記アクセラレータのメモリに格納するデータ、および、前記アクセラレータのメモリから移動したデータを保持する格納手段と
をさらに備え、
前記制御手段は、前記ＤＡＧの処理に必要となる前記アクセラレータのメモリ領域を前記メモリ管理手段に要求し、また、前記アクセラレータのメモリに格納されているデータに関する情報を前記データ管理手段に問い合わせ、問い合わせ結果に応じて前記アクセラレータのメモリに格納されているデータの移動と削除を制御する請求項１または請求項２に記載されているアクセラレータ制御装置。
【請求項４】
前記アクセラレータのメモリを複数に分割した分割領域であるページが保持するデータが前記ＤＡＧのエッジに相当する処理に使用されているか否かを示す情報と、前記メモリから前記格納手段への前記データの移動である退避を要するか否かを示す情報とを含む管理情報を備え、
前記メモリ管理手段は、前記アクセラレータのメモリ領域を解放する場合に、前記管理情報を参照して、前記ＤＡＧのエッジに相当する処理に使用されていないデータであって退避を要しないデータを保持するページを、退避を要するデータを保持するページよりも先に解放する請求項３に記載されているアクセラレータ制御装置。
【請求項５】
前記メモリ管理手段は、前記アクセラレータのメモリ領域を解放する場合に、前記ＤＡＧのノードに相当するデータの全部または一部である分割データを保持する複数のページをまとめて解放する請求項４に記載されているアクセラレータ制御装置。
【請求項６】
前記コンピュータプログラムに基づいた処理は、予約ＡＰＩ（Application Programming Interface）と実行ＡＰＩを呼び出して実行させる処理を含み、
前記生成手段は、前記予約ＡＰＩの呼び出しに応じてＤＡＧを更新し、
前記生成手段により生成されたＤＡＧの処理は、前記実行ＡＰＩの呼び出しに応じてトリガされる請求項１乃至請求項５の何れか一つに記載されているアクセラレータ制御装置。
【請求項７】
前記コンピュータプログラムに基づいて、前記ＤＡＧにおける複数のエッジの処理に使用するデータを前記アクセラレータのメモリにキャッシュするように前記生成手段に依頼する実行手段をさらに備え、
前記生成手段は、前記キャッシュの依頼を受けたことを表す情報であるマークを、キャッシュ対象のデータに付与し、
前記制御手段は、前記マークが付与されたデータが使用するページがロックされていない場合には、退避を要するページとして扱うように前記メモリ管理手段に依頼する請求項３に記載されているアクセラレータ制御装置。
【請求項８】
前記コンピュータプログラムに基づき呼び出されるＡＰＩは、指定した処理が生成するデータの容量を示すパラメータを引数とし、
前記生成手段が生成する前記ＤＡＧは、生成されるデータの容量、または、前記ＤＡＧのエッジにおける処理に使用する入力データの容量と当該処理により算出された出力データの容量との比率が付加されている請求項６に記載されているアクセラレータ制御装置。
【請求項９】
コンピュータが、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成し、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御するアクセラレータ制御方法。
【請求項１０】
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する処理と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する処理と、
をコンピュータに実行させるコンピュータプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
さらに、本発明のコンピュータプログラムは、
実行対象のコンピュータプログラムに基づいた処理の流れを表すＤＡＧ（Directed Acyclic Graph）を生成する処理と、
制御対象のアクセラレータに備えられているメモリに、前記ＤＡＧのノードに相当するデータが格納されている場合に、前記アクセラレータのメモリに格納されている前記データを用いて、前記ＤＡＧのエッジに相当する処理を実行するように前記アクセラレータを制御する処理と、
をコンピュータに実行させる。
【国際調査報告】
2016063482.tif 000017
2016063482.tif 000018
2016063482.tif 000019
2016063482.tif 000020