(57)【要約】アクセラレータを用いた計算を高速に実行する。アクセラレータ制御装置は、データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて保持するデータ管理テーブルと、前記名前を付したデータを入力データとする第１の処理を受け付けると、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別するデータ管理部と、前記判別したアクセラレータに前記第１の処理を実行させるタスク処理部と、を備えている。
2016181648.tif 000002
【特許請求の範囲】
【請求項１】
データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて保持するデータ管理テーブルと、
前記名前を付したデータを入力データとする第１の処理を受け付けると、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別するデータ管理手段と、
前記判別したアクセラレータに前記第１の処理を実行させるタスク処理手段と、を備える、
アクセラレータ制御装置。
【請求項２】
前記データ管理手段は、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する、
請求項１に記載のアクセラレータ制御装置。
【請求項３】
前記データ管理手段は、データを生成したプログラムの完了を超えてアクセラレータのローカルメモリ上にデータを蓄積する第２の処理を受け付けると、前記蓄積するデータに付される名前と、前記蓄積するデータをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて前記データ管理テーブルに登録する、
請求項１または２に記載のアクセラレータ制御装置。
【請求項４】
ユーザプログラムからの処理要求をＤＡＧ（Directed Acyclic Graph）として受け付け、前記ＤＡＧに含まれる処理の実行を前記タスク処理手段に要求するプログラム解析手段を備え、
前記データ管理手段は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持するアクセラレータを判別し、
前記タスク処理手段は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持すると判別されたアクセラレータに、前記ＤＡＧに含まれる処理を実行させる、
請求項１ないし３のいずれか１項に記載のアクセラレータ制御装置。
【請求項５】
前記ＤＡＧに含まれる処理の入力データは、複数のアクセラレータの複数のローカルメモリ上に分割して保持され、
前記データ管理手段は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持する複数のアクセラレータを判別し、
前記タスク処理手段は、前記判別された複数のアクセラレータのそれぞれに、前記ＤＡＧに含まれる処理を実行させる、
請求項４に記載のアクセラレータ制御装置。
【請求項６】
前記データ管理手段は、前記第１の処理の入力データがアクセラレータの外部に退避されている場合、退避されたデータをアクセラレータにロードし、アクセラレータのローカルメモリに十分な空き領域がないときには、他のデータをアクセラレータの外部に退避した後、前記第１の処理の入力データをロードする、
請求項１ないし５のいずれか１項に記載のアクセラレータ制御装置。
【請求項７】
前記データ管理手段は、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保するための十分な空き領域がない場合、他のデータを前記判別したアクセラレータの外部に退避させた後、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する
請求項１ないし６のいずれか１項に記載のアクセラレータ制御装置。
【請求項８】
データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けてデータ管理テーブルに保持し、
前記名前を付したデータを入力データとする第１の処理を受け付けると、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別し、
前記判別したアクセラレータに前記第１の処理を実行させる、
アクセラレータ制御方法。
【請求項９】
前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する、
請求項８に記載のアクセラレータ制御方法。
【請求項１０】
データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けてデータ管理テーブルに保持する処理と、
前記名前を付したデータを入力データとする第１の処理を受け付ける処理と、
前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別する処理と、
前記判別したアクセラレータに前記第１の処理を実行させる処理と、をコンピュータに実行させる、
プログラムが記録された記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアクセラレータ制御装置、アクセラレータ制御方法およびプログラムに関し、特にアクセラレータを用いた計算を制御するアクセラレータ制御装置、アクセラレータ制御方法およびプログラムに関する。
【背景技術】
【０００２】
特許文献１には、アクセラレータ制御装置の一例が記載されている。図１０に示すように、特許文献１に記載されたアクセラレータ制御装置は、情報処理装置８によって構成される。情報処理装置８は、共有メモリ８１と、共有メモリ８１に接続する複数のアクセラレータ８２１〜８２３とを備えている。【０００３】
共有メモリ８１は、アクセラレータ８２１〜８２３が処理するデータを保持する。アクセラレータ８２１〜８２３は、共有メモリ８１からアクセラレータ８２１〜８２３に移動されたデータに対して処理を行う。アクセラレータ８２１〜８２３は、処理を完了したデータを再び共有メモリ８１に移動する。これらのデータの移動と処理は、所望の処理が完了するまで繰り返して行われる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−０２５３９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。【０００６】
特許文献１に記載された技術では、アクセラレータにデータを移動するのに時間を要するため、アクセラレータを用いた計算が高速に行えないおそれがある。また、同じ理由により、かかる技術によると、複数のアクセラレータを用いて計算を行う場合、用いるアクセラレータの数に応じた全体の計算時間の短縮が実現されないおそれもある。【０００７】
そこで、アクセラレータを用いた計算が高速に行えるようにすることが課題となる。本発明の目的は、かかる課題解決に寄与するアクセラレータ制御装置、アクセラレータ制御方法およびプログラムを提供することにある。なお、本発明のその他の課題ないし目的は、後述の発明を実施するための形態の説明において明らかとなる。
【課題を解決するための手段】
【０００８】
本発明の第１の態様に係るアクセラレータ制御装置は、データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて保持するデータ管理テーブルと、前記名前を付したデータを入力データとする第１の処理を受け付けると、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別するデータ管理部と、前記判別したアクセラレータに前記第１の処理を実行させるタスク処理部と、を備えている。【０００９】
本発明の第２の態様に係るアクセラレータ制御方法は、データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けてデータ管理テーブルに保持し、前記名前を付したデータを入力データとする第１の処理を受け付けると、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別し、前記判別したアクセラレータに前記第１の処理を実行させる。【００１０】
本発明の第３の態様に係るプログラムは、データに付した名前と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けてデータ管理テーブルに保持する処理と、前記名前を付したデータを入力データとする第１の処理を受け付ける処理と、前記データ管理テーブルを参照して前記データをローカルメモリ上に保持するアクセラレータを判別する処理と、前記判別したアクセラレータに前記第１の処理を実行させる処理と、をコンピュータに実行させる。なお、プログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することもできる。
【発明の効果】
【００１１】
本発明に係るアクセラレータ制御装置、アクセラレータ制御方法およびプログラムによると、アクセラレータを用いた計算を高速に行うことができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、一実施形態に係るアクセラレータ制御装置の構成を例示するブロック図である。
【図２】図２は、第１の実施形態に係るアクセラレータ制御装置の構成を例示するブロック図である。
【図３】図３は、第１の実施形態に係るアクセラレータ制御装置における予約ＡＰＩおよび実行ＡＰＩを例示する図である。
【図４】図４は、第１の実施形態に係るアクセラレータ制御装置におけるＤＡＧ（Directed Acyclic Graph）の構成を例示する図である。
【図５】図５は、第１の実施形態に係るアクセラレータ制御装置におけるデータおよび処理の分割について説明するための図である。
【図６】図６は、第１の実施形態に係るアクセラレータ制御装置におけるデータおよび処理の分割について説明するための図である。
【図７】図７は、第１の実施形態に係るアクセラレータ制御装置におけるメモリ管理テーブルの構成を例示する図である。
【図８】図８は、第１の実施形態に係るアクセラレータ制御装置におけるデータ管理テーブルの構成を例示する図である。
【図９Ａ】図９Aは、第１の実施形態に係るアクセラレータ制御装置の動作を例示するフロー図（１／２）である。
【図９Ｂ】図９Bは、第１の実施形態に係るアクセラレータ制御装置の動作を例示するフロー図（２／２）である。
【図１０】図１０は、特許文献１に記載された関連技術を説明するための図である。
【発明を実施するための形態】
【００１３】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００１４】
図１は、一実施形態に係るアクセラレータ制御装置１の構成を例示するブロック図である。図１を参照すると、アクセラレータ制御装置１は、データ管理テーブル３４、データ管理部３３、および、タスク処理部３２を備えている。
【００１５】
データ管理テーブル３４は、データに付した名前（例えば、図８のオブジェクト名）と当該データをローカルメモリ上に保持するアクセラレータを識別する識別子（例えば、図８のアクセレレータ番号、ページ番号）とを関連付けて保持する。データ管理部３３は、名前を付したデータを入力データとする第１の処理（例えば、図４に示すＤＡＧに含まれる処理）を受け付けると、データ管理テーブル３４を参照して当該データをローカルメモリ上に保持するアクセラレータを判別する。タスク処理部３２は、判別したアクセラレータに第１の処理を実行させる。
【００１６】
かかる構成によると、処理に使用するデータをアクセラレータのメモリ上に予め保持することで、処理の際にアクセラレータのメモリにデータをロードする必要がなくなるため、アクセラレータを用いた計算を高速化することが可能となる。
【００１７】
また、データ管理部３３は、第１の処理の出力データを出力するためのメモリ領域を、判別したアクセラレータのローカルメモリ上に確保するようにしてもよい。
【００１８】
これにより、アクセラレータの処理によって生じる出力データをアクセラレータ上のローカルメモリに保持することができる。したがって、アクセラレータ上で処理を実行する際に、アクセラレータ上のローカルメモリと外部のメモリ（例えば、図２のメインメモリ４）との間における入出力データのやりとりが不要となる。よって、アクセラレータを用いた計算をさらに高速化することが可能となる。
【００１９】
さらに、データ管理部３３は、データを生成したプログラムの完了を超えてアクセラレータのローカルメモリ上にデータを蓄積する第２の処理（例えば、後述するstoreObject）を受け付けると、蓄積するデータに付される名前と、蓄積するデータをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けてデータ管理テーブル３４に登録する。
【００２０】
これにより、ユーザプログラムの完了を超えてアクセラレータのローカルメモリに保持すべきデータを、予めアクセラレータのローカルメモリに蓄積することが可能となる。
【００２１】
さらに、他の実施形態によると、アクセラレータ制御装置１は、ユーザプログラムの完了を超えてアクセラレータのメモリにデータを保持させるデータ管理部３３と、アクセラレータ上のメモリに管理されるデータの名前からデータを保持するアクセラレータとアクセラレータのメモリのアドレスを対応付けるデータ管理テーブル３４と、アクセラレータのメモリが保持するデータに対し、ユーザが指定する処理をアクセラレータに行わせるタスク処理部３２とを備える。
【００２２】
かかる構成により、ユーザプログラムの完了を超えてアクセラレータ上にデータを保持し、ユーザプログラムの依頼によりアクセラレータに保持するデータに対しユーザプログラムから依頼された処理を行わせるよう動作する。また、ユーザプログラムからの依頼により、ユーザプログラムの完了を超えてアクセラレータのメモリ上にデータを保持する。
【００２３】
かかる構成を採用し、ユーザプログラムの実行の度にアクセラレータのメモリにデータをロードする必要性をなくすことにより、アクセラレータを用いた計算を高速に行うことが可能となる。
【００２４】
さらに、複数のアクセラレータのメモリ上に計算に使用するデータを分割して保持し、ユーザから依頼された処理をデータの分割を保持するそれぞれのアクセラレータに対して行わせるようにしてもよい。
【００２５】
かかる構成によると、計算の度にアクセラレータのメモリにデータをロードする必要がなくなる。したがって、複数のアクセラレータを用いて計算を行う場合に、使用するアクセラレータの数に従って全体の計算時間を短縮することが可能となる。
【００２６】
＜実施形態１＞
次に、第１の実施形態に係るアクセラレータ制御装置について、図面を参照して詳細に説明する。
【００２７】
［構成］
図２を参照すると、本実施形態に係るアクセラレータ制御装置１は、アクセラレータ５１〜５３、メインメモリ４、アクセラレータ制御部３、ユーザプログラム２１、および、ＤＡＧ（Directed Acyclic Graph）作成部２２を備えている。アクセラレータ制御装置１は、一例として、ホストコンピュータによって実現される。なお、ユーザプログラム２１は、アクセラレータ制御装置１の外部の構成としてもよい。
【００２８】
アクセラレータ５１〜５３は、計算処理を実行する。
【００２９】
メインメモリ４は、アクセラレータ５１〜５３のメモリリソースの不足により保持できなくなったデータを退避するためのメモリである。
【００３０】
アクセラレータ制御部３は、アクセラレータ５１〜５３を制御する。
【００３１】
ＤＡＧ作成部２２は、ユーザプログラム２１のＡＰＩ（Application Programming Interface）呼び出しにより、ユーザプログラム２１の処理を示すＤＡＧ（Directed Acyclic Graph）を作成してアクセラレータ制御部３に送信する。
【００３２】
図２において、アクセラレータの数は説明の都合上３つとしている。ただし、アクセラレータの数は１つ以上であればよく、図示の態様に限定されない。アクセラレータとは、特に限定されないが、例えばＮＶＩＤＩＡ社のＧＰＵ（Graphical Processing Unit）、Intel社のXeon Phi等である。アクセラレータはコンピュータのＣＰＵ（Central Processing Unit）のコプロセッサであり、一例として、コンピュータのＩ／Ｏ（Input/Output）スロットに挿入する形で実装される。
【００３３】
以下では、複数のアクセラレータ５１〜５３についての説明が重複する場合、アクセラレータ５１についてのみ説明する。アクセラレータ５２、５３については、同様の説明があてはまる。
【００３４】
アクセラレータ５１は、データを処理するプロセッサ５１１と、データを格納するアクセラレータメモリ５２１を備えている。ここでは、アクセラレータが有するローカルメモリを「アクセラレータメモリ」ともいう。
【００３５】
ユーザプログラム２１は、アクセラレータ５１〜５３を用いるプログラマであるユーザが作成するアプリケーションプログラム、または、ユーザによって実行されるアプリケーションプログラムである。ユーザプログラム２１は、一例として、ＤＡＧ作成部２２によって提供されるＡＰＩを用いて実装される。ＤＡＧ作成部２２によって提供されるＡＰＩには、例えば、図３に示すように予約ＡＰＩおよび実行ＡＰＩの２種類のＡＰＩが含まれる。
【００３６】
予約ＡＰＩは、図４に示すＤＡＧの処理の１つに対応する。ユーザプログラム２１から予約ＡＰＩが呼び出されると、ＤＡＧ作成部２２は、ＤＡＧに対して１つの処理と、その処理が生成するデータとを追加する。例えば、図４において、データ６１に対して予約ＡＰＩを用いて処理７１が呼ばれた場合、ＤＡＧ作成部２２は処理７１とその出力データであるデータ６２をＤＡＧに付加する。なお、予約ＡＰＩは、処理を予約するためのＡＰＩである。すなわち、予約ＡＰＩが呼び出された直後には、アクセラレータ５１〜５３での処理は実行されず、ＤＡＧが生成されるにすぎない。
【００３７】
一方、実行ＡＰＩが呼び出された場合、新たな処理とその処理が生成するデータがＤＡＧに付加される場合とされない場合とがある。また、実行ＡＰＩの呼び出しは、それまでに生成されたＤＡＧの処理の実行をトリガする。実行ＡＰＩに属する処理は、ユーザプログラム２１内でＤＡＧが処理された後のデータが必要となる場合や、計算結果のデータをアクセラレータメモリにデータオブジェクトとして保持するstoreObjectの場合等である。
【００３８】
予約ＡＰＩや実行ＡＰＩは、図３に示すように１つまたは複数の引数α、β、γ、…を持つ場合がある。これらの引数のうちの１つは、カーネル関数である場合がある。ここで、カーネル関数とは、ユーザプログラム２１がデータに対し実行する処理を示す関数である。ＡＰＩが引数として関数をとるか否かは、予約ＡＰＩや実行ＡＰＩの種類に依存する。予約ＡＰＩや実行ＡＰＩはデータに対し行われる処理のパターンを示し、実際の具体的な処理はユーザプログラム内で予約ＡＰＩと実行ＡＰＩの引数として与えられるカーネル関数によって行われる。
【００３９】
カーネル関数を引数とするＡＰＩの一例は、mapである。mapでは、入力データを構成するすべての要素に対してカーネル関数が適用される。ＤＡＧの入力データは、例えば、画像やデータベースのテーブルである。これらのデータにmapが適用された場合、カーネル関数は画像の各画素や、データベースの各エントリに対して個別に適用される。
【００４０】
一方、カーネル関数を必要としないＡＰＩとして、例えば、storeObject，appendObject，readがある。storeObjectは、計算結果をアクセラレータメモリ５２１〜５２３にデータオブジェクトとして保持するＡＰＩである。storeObjectによると、アクセラレータメモリ５２１〜５２３にデータオブジェクトとして保持するデータに名前付けを行うことが可能となる。このとき、storeObjectの引数としてオブジェクトの名前を渡す。また、appendObjectは、すでに存在するオブジェクトの末尾にデータを付加する場合に用いられるＡＰＩである。さらに、readは、アクセラレータ５１〜５３上に存在するデータオブジェクトの内容をユーザ空間に取得するＡＰＩである。
【００４１】
また、ＤＡＧが示す処理の入力データとして、アクセラレータメモリ５２１〜５２３が保持するデータオブジェクトを指定することが可能である。この場合、予約ＡＰＩや実行ＡＰＩで行う処理の入力データとして、アクセラレータ５１〜５３が保持するオブジェクトの名前を指定する。この名前は、storeObjectを呼び出したプログラムが付けたものである。
【００４２】
ここで、ＤＡＧの各データは、図５に示すように２つ以上の分割から構成されてもよい。図５は、図４のＤＡＧのデータ６１、処理７１、データ６２、処理７２、および、データ６３において、データを２つの分割で構成した例である。この場合、例えば、処理７１を、データ６１分割１とデータ６１分割２の両方に適用すれば、データ６１を分割しない場合の処理と同一の結果が得られる。これは、並列計算ではデータパラレルという処理形態に属し、本発明の属する技術分野における技術者の間で一般的に知られている処理である。図５では、データ６１分割１に対する処理を処理７１分割１等と記しているが、処理７１分割１の処理内容は図４における処理７１と同一である。また、複数の分割に対する処理を、異なるアクセラレータが分散して実行するようにしてもよい。
【００４３】
図６は、データ６１がデータ６１分割１と、データ６１分割２と、データ６１分割３と、データ６１分割４に分割されている場合を示す。ここで、データ６１分割１とデータ６１分割２は、アクセラレータ５１で処理される。一方、データ６１分割３とデータ６１分割４は、アクセラレータ５２で処理される。この場合、４つすべてのデータ分割を１つのアクセラレータで処理する場合と比較して、理想的なケースでは２倍の計算性能が得られる。
【００４４】
なお、以下の説明では、誤解のおそれがない場合、データや処理を分割する場合について説明し、データや処理を分割しない場合についての説明を省略する。したがって、データを分割しない場合、以下の説明におけるデータ分割はすべてのデータを意味し、データ分割に対する処理はすべてのデータに対する処理を意味する。
【００４５】
ＤＡＧ作成部２２は、ユーザプログラム２１が予約ＡＰＩと実行ＡＰＩを呼び出す度にＤＡＧを生成する。予約ＡＰＩが呼ばれた場合、ＤＡＧ作成部２２はＤＡＧに対応する処理と出力データを付加する。一方、実行ＡＰＩが呼ばれた場合、ＤＡＧ作成部２２はＤＡＧ処理と出力データの追加が必要であれば追加し、それまで生成したＤＡＧをアクセラレータ制御部３に通知する。
【００４６】
なお、ＤＡＧ作成部２２が作成するＤＡＧは、ユーザプログラム２１が呼び出した予約ＡＰＩや実行ＡＰＩの種類、各ＡＰＩに与えられたカーネル関数を含む。また、ＤＡＧ作成部２２は、ＤＡＧを通知する際、ユーザプログラム２１の識別子を送信する。また、ＤＡＧ作成部２２は、ユーザプログラム２１が終了する場合、アクセラレータ制御部３にユーザプログラム２１の識別子を送信し、ユーザプログラム２１が生成したデータのうちのstoreObjectで保持が指定された以外の中間データを消去するように要求する。
【００４７】
図２を参照すると、アクセラレータ制御部３は、プログラム解析部３１、タスク処理部３２、データ管理部３３、データ管理テーブル３４、および、メモリ管理テーブル３５を備えている。プログラム解析部３１は、ＤＡＧ作成部２２から受信したユーザプログラム２１の処理を示すＤＡＧを解析する。タスク処理部３２は、ＤＡＧの処理を実行する。データ管理部３３は、ＤＡＧの処理に必要なデータの管理や準備を行う。メモリ管理テーブル３５は、アクセラレータのメモリを管理する。データ管理テーブル３４は、アクセラレータのメモリ上のデータを管理する。以下、これらの各構成について詳述する。
【００４８】
メモリ管理テーブル３５は、アクセラレータメモリ５２１〜５２３を管理するテーブルである。アクセラレータメモリ５２１〜５２３は、一定サイズのページに分割して管理される。ページサイズは、例えば、４ＫＢや６４ＫＢである。メモリ管理テーブル３５は、図７に示すように、各ページに関する情報をエントリとして保持する。各ページの情報は、そのページが属するアクセラレータ番号と、ページ番号と、そのページが使用中であることを示す使用中フラグと、そのページが使用中である場合、ページが保持するデータの識別子を示すデータ番号と、そのページが保持するデータはデータのどの分割かを示す分割番号と、そのページが計算に使用中であり解放することが禁止されていることを示すロックフラグとを保持する。使用中フラグとロックフラグは、ブール値である。データの識別子は、ＤＡＧのデータに割り当てられる。
【００４９】
ここでは、一例として、使用中フラグは、ページが使用中である場合「１」とし、それ以外の場合「０」とする。また、ロックフラグは、ページの解放が禁止される場合「１」とし、それ以外の場合「０」とする。
【００５０】
例えば、図７に示すメモリ管理テーブル３５の最初のエントリは、アクセラレータ５１のページ１は、データ６２の分割１によって使用され、このページは現在計算に使用されているためロック中であることを示す。なお、ロック中のページが保持するデータは、メインメモリ４に退避させることができない。
【００５１】
データ管理テーブル３４は、アクセラレータメモリ５２１〜５２３上のデータを管理する。データ管理テーブル３４は、図８に示すように、ユーザプログラム２１から送信されたＤＡＧ内のデータに関する情報を保持する。各エントリは、データ番号と、各データの分割番号と、そのデータが計算済みか否かを示す計算済フラグと、そのデータがメインメモリ４に退避されていることを示すスワップフラグと、そのデータを保持するアクセラレータ番号を示すアクセラレータ番号と、データを保持するアクセラレータのページ番号と、そのデータを生成したユーザプログラム２１の識別子であるプロセス番号と、そのデータがユーザプログラム２１の完了を超えてアクセラレータのメモリに保持されるデータオブジェクトであることを示すオブジェクトフラグと、オブジェクトフラグがセットされている場合にオブジェクトの名前を示すオブジェクト名と、を保持する。計算済フラグ、スワップフラグ、および、オブジェクトフラグは、ブール値である。
【００５２】
ここでは、一例として、計算済フラグは、計算済である場合「１」とし、それ以外の場合「０」とする。また、スワップフラグは、データがメインメモリ４に退避されている場合「１」とし、それ以外の場合「０」とする。さらに、オブジェクトフラグは、ユーザプログラム２１の完了を超えてアクセラレータのメモリに保持されるデータオブジェクトの場合「１」とし、それ以外の場合「０」とする。
【００５３】
例えば、図８に示すデータ管理テーブル３４の最初のエントリは、データ番号が６２であるデータの分割１はすでに計算済みであり、アクセラレータ５１のページ１に保持されていることを示す。また、このデータはユーザプログラム２１の完了を超えてアクセラレータのメモリに保持されるデータオブジェクトであり、オブジェクト名が「ｐｉｃ」であることを示す。データ管理テーブル３４のエントリが保持するアクセラレータ番号とページ番号より、メモリ管理テーブル３５の該当エントリを参照し、各データが使用するページの情報を検索したり、計算に使用する場合にページをロックしたりすることが可能となる。
【００５４】
プログラム解析部３１は、ＤＡＧ作成部２２から受信したユーザの処理を示すＤＡＧを解析し、データと処理に分割する。プログラム解析部３１は、ＤＡＧ内のデータについて、データ管理テーブル３４にエントリを作成する。ここで、プログラム解析部３１は、データ分割数に応じた数のエントリを作成する。なお、データのエントリ作成時点では、まだ各データ分割の計算が行われていないため、データ管理テーブル３４における計算済フラグは「０」となる。
【００５５】
一方、ＤＡＧの入力データとしてユーザプログラム２１の今回より前のＤＡＧが出力したデータや、ユーザプログラム２１とは別のユーザプログラムが以前に作成し、アクセラレータ上のメモリにストアしたデータオブジェクトのデータについては、エントリがすでに存在している。したがって、プログラム解析部３１は、これらのデータのエントリを新たに作成する必要はない。また、これらのエントリの計算済フラグは、データ管理テーブル３４において「１」にセットされている。
【００５６】
プログラム解析部３１は、ＤＡＧの「処理」の単位に分割した処理を実行するようにタスク処理部３２に要求する。プログラム解析部３１は、ＤＡＧの処理１つにつき、データ分割数に応じて処理の要求を行う。また、プログラム解析部３１は、ユーザプログラム２１の完了通知をＤＡＧ作成部２２から受信し、ユーザプログラム２１がＤＡＧの実行により生成したデータのうち、プログラムの完了を超えて保持されるデータオブジェクト以外のデータの分割のエントリをデータ管理テーブル３４から消去する。さらに、プログラム解析部３１は、消去したエントリが使用していたページのメモリ管理テーブル３５の使用中フラグを解除する（例えば、使用中フラグを「１」から「０」に変更する）ことで、アクセラレータメモリ５２１〜５２３を解放する。
【００５７】
データ管理部３３は、データスケジューラ３３１とデータ移動部３３２を備えている。
データスケジューラ３３１は、アクセラレータメモリ５２１〜５２３が保持するデータの管理や、メモリの確保を指示する。データ移動部３３２は、アクセラレータ５１〜５３にデータをロードし、アクセラレータメモリ５２１〜５２３の確保を行う。
【００５８】
データスケジューラ３３１は、メモリ管理テーブル３５を参照して、アクセラレータ５１のアクセラレータメモリ５２１を管理する。また、データスケジューラ３３１は、他のアクセラレータ５２、５３についても、同様に管理する。さらに、データスケジューラ３３１は、タスク処理部３２から処理の実行に必要な入力データと出力データの要求を受ける。
【００５９】
実行する処理がＤＡＧの最初の処理である場合、入力データとしてアクセラレータメモリが保持するデータオブジェクトの識別子が指定されている。また、実行する処理が最初以外の処理である場合、ＤＡＧにおける前段の処理が完了していれば、その処理の出力データがすでに計算されている。いずれの場合も、データ管理テーブル３４の対応するエントリのスワップフラグが「０」であれば、それらのデータの分割がメインメモリ４に退避されていないため、アクセラレータメモリ上において準備が完了している。
【００６０】
一方、スワップフラグが「１」の場合、データスケジューラ３３１はその分割をアクセラレータメモリ上に用意する。データスケジューラ３３１は、メモリ管理テーブル３５を参照し、退避されたデータ分割をロードするために十分な空きページがいずれかのアクセラレータ５１〜５３に存在するか否かを確認する。十分な空きページが存在する場合、データスケジューラ３３１は退避されたデータをその空きページにロードするようにデータ移動部３３２に要求する。一方、空きページが十分でない場合、データスケジューラ３３１はデータ管理テーブル３４およびメモリ管理テーブル３５を参照し、ロックされていないページが保持するデータの分割を選択し、その分割をメインメモリ４に退避するようにデータ移動部３３２に要求する。ここで、データスケジューラ３３１は、データの分割を単位として退避の要求を行う。これにより、入力データをロードするためのメモリが確保できるため、データスケジューラ３３１はデータ移動部３３２に入力データの分割をロードするよう通知する。
【００６１】
データスケジューラ３３１は、処理の出力データに関しては、メモリ管理テーブル３５を参照し、タスク処理部３２が要求する処理の出力データに必要なページ数が空きページから確保可能であれば、メモリを確保するようデータ移動部３３２に要求する。このとき、データスケジューラ３３１はページを確保するアクセラレータも指定する。
【００６２】
一方、空きページから確保可能でない場合、データスケジューラ３３１は、退避された入力データをロードするためにメモリを確保する上述の場合と同様の動作を行う。すなわち、データスケジューラ３３１は、まず、アクセラレータメモリ上でロックされていないページが保持するデータの分割をメインメモリ４に退避するようするようにデータ移動部３３２に通知した後、データ移動部３３２に出力データを出力するためのページ数を確保させる。
【００６３】
また、データスケジューラ３３１は、入力データと出力データのメモリ領域をロックするようにデータ移動部３３２に要求する。さらに、データスケジューラ３３１は、タスク処理部３２から処理の完了通知を受信し、データ移動部３３２にロック中のページのロックを解除し、データ管理テーブル３４における出力データの計算済フラグを「１」にセットするように通知する。
【００６４】
なお、タスクスケジューラ３２１が実行を要求する処理の種類によっては、入力データと出力メモリ領域の一方のみを準備すればよい場合がある。例えば、データオブジェクトの内容を取得するreadの実行要求では、出力メモリ領域を用意する必要はない。
【００６５】
また、タスクスケジューラ３２１からの要求が入力データと出力メモリ領域の用意ではなく、すでに存在しているデータをユーザプログラム２１の完了を超えて保持するstoreObjectである場合、データスケジューラ３３１はデータ移動部３３２に該当するデータのデータ管理テーブル３４のエントリのオブジェクトフラグをセットし、要求内に指定されたオブジェクト名を登録するよう要求する。
【００６６】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、アクセラレータのメモリの確保や、アクセラレータに対するデータの移動を行う。
【００６７】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、アクセラレータのメモリの確保を行い、メモリ管理テーブル３５に確保したメモリのページのエントリを登録する。また、データ移動部３３２は、データ管理テーブル３４のデータの分割のエントリに、確保したメモリに該当するアクセラレータ番号とページ番号を登録する。
【００６８】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、計算に使用中のページのロックフラグを「１」にセットする。また、データ移動部３３２は、計算が完了したページのロックフラグを「１」から「０」に解除する。さらに、データ移動部３３２は、データ管理テーブル３４において出力データの計算済フラグを「１」にセットする。
【００６９】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、データ分割をメインメモリ４に退避する。この場合、データ移動部３３２は、退避したデータ分割のデータ管理テーブル３４のエントリのスワップフラグをセットする。また、データ移動部３３２は、退避したデータ分割が使用していたページのメモリ管理テーブル３５のエントリの使用中フラグを解除する。
【００７０】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、ユーザプログラム２１の完了を超えてアクセラレータのメモリに保持するデータのデータ管理テーブル３４のエントリのオブジェクトフラグをセットし、オブジェクト名を登録する。
【００７１】
タスク処理部３２は、タスクスケジューラ３２１と、タスク実行部３２２を備えている。タスクスケジューラ３２１は、処理の実行に必要な入力データと出力データのメモリ領域を要求し、また、処理の実行を要求する。また、タスク実行部３２２は、アクセラレータ５１〜５３に処理を行わせる。
【００７２】
タスクスケジューラ３２１は、プログラム解析部３１からＤＡＧが含む処理の実行要求を受信する。タスクスケジューラ３２１は、データ分割に対する処理実行の単位で要求を受信する。タスクスケジューラ３２１は、受信した要求の処理のうち、ＤＡＧの上流から順番に処理を実行する。図４で示したＤＡＧでは、処理７１や処理７３が上流の処理である。ＤＡＧにおいて、上流の処理が完了しなければ、下流の（次段の）処理を行うことができない。タスクスケジューラ３２１は、実行する各処理に必要な入力データと出力データのメモリ領域をデータスケジューラ３３１に要求する。タスクスケジューラ３２１は、データスケジューラ３３１から要求した処理に対するデータとメモリ領域の確保完了を受信後、タスク実行部３２２に該当する処理を実行するために必要なアクセラレータ番号、入力データのアドレス、出力データを書き込むアドレス、または、これらの情報を知るために必要なデータ管理テーブル３４とメモリ管理テーブル３５のエントリ情報を通知し、タスク実行部３２２に処理を行わせる。この処理は、データ分割の単位で行われる。
【００７３】
要求する処理が、アクセラレータが保持するデータオブジェクトにデータを追記するappendObjectである場合、タスクスケジューラ３２１は追記する情報をタスク実行部３２２に渡す。このデータは、プログラム解析部３１がユーザプログラム２１のＤＡＧを受信する中に含まれている。
【００７４】
タスクスケジューラ３２１は、タスク実行部３２２から処理の完了通知を受信し、処理が完了したため入力データと出力データのロックを解除するようにデータスケジューラ３３１に通知する。
【００７５】
さらに、タスクスケジューラ３２１は、タスク実行部３２２に要求した処理がアクセラレータのメモリが保持するデータオブジェクトの内容を取得するreadである場合、readを実行したタスク実行部３２２からデータを取得し、取得したデータを、プログラム解析部３１を介してユーザプログラム２１に伝える。
【００７６】
また、タスクスケジューラ３２１は、プログラム解析部３１から要求された処理がstoreObjectである場合、すでに計算済みのデータをデータオブジェクトとしてユーザプログラム２１の完了を超えて保持するようにデータスケジューラ３３１に要求する。
【００７７】
タスク実行部３２２は、タスクスケジューラ３２１からの指示を受け、タスクスケジューラ３２１から受信したユーザプログラム２１のカーネル関数を用いて指定されたアクセラレータの指定された入力アドレスと出力アドレスに対して処理を行う。また、タスク実行部３２２は、処理完了をタスクスケジューラ３２１に通知する。要求された処理がappendObjectである場合、タスク実行部３２２は指定されたデータオブジェクトに対してデータを追記する。一方、要求された処理がデータオブジェクトの内容を取得するreadである場合、タスク実行部３２２は指定されたデータオブジェクトの該当番地から情報を取得してタスクスケジューラ３２１に通知する。
【００７８】
［動作］
次に、本実施形態の動作について、図２と、図９A及び図９Bと、を参照して詳細に説明する。図９A及び図９Bは、本実施形態に係るアクセラレータ制御装置１の動作を例示するフロー図である。なお、図９Aに示す”A”に続く処理は、図９Bに示す”A”から続行される。また、図９Bに示す”B”に続く処理は、図９Aに示す”B”から続行される。
【００７９】
まず、予約ＡＰＩと実行ＡＰＩを用いて作成されたユーザプログラム２１が実行される（ステップＡ１）。
【００８０】
ユーザプログラム２１が実行ＡＰＩを呼び出すと（ステップＡ２のＹｅｓ）、ＤＡＧ作成部１２は、それまでに生成したＤＡＧを通知する処理に移行する。
【００８１】
一方、実行ＡＰＩ呼び出しでない場合（ステップＡ２のＮｏ）、ＤＡＧ作成部２２は予約ＡＰＩ呼び出しか否かを確認する（ステップＡ３）。
【００８２】
予約ＡＰＩ呼び出しである場合（ステップＡ３のＹｅｓ）、ＤＡＧ作成部２２は予約ＡＰＩで指定された処理とデータをそれまで生成したＤＡＧに追加する（ステップＡ４）。
【００８３】
次に、ユーザプログラム２１が終了する場合（ステップＡ５のＹｅｓ）、ＤＡＧ作成部２２はアクセラレータ制御部３にユーザプログラム２１の完了を通知する（ステップＡ６）。
【００８４】
プログラム解析部３１は、この通知により、ユーザプログラム２１が生成したデータのうちの、ユーザプログラム２１の完了を超えて保持されるデータオブジェクト以外のデータを削除する（ステップＡ７）。具体的には、プログラム解析部３１は、データ管理テーブル３４において、ユーザプログラム２１の識別子がプロセス番号に記載されたデータであり、かつ、オブジェクトフラグがアサートされていないデータの分割を消去する。データの消去を完了後、ユーザプログラム２１の実行は完了する。
【００８５】
また、ユーザプログラムが終了しない場合（ステップＡ５のＮｏ）、ステップＡ１に戻り、ユーザプログラムの実行が継続される。
【００８６】
実行ＡＰＩが呼び出された場合（ステップＡ２のＹｅｓ）、ＤＡＧ作成部２２は、必要であればＤＡＧに最後の処理とデータを追加し、ＤＡＧをプログラム解析部３１に通知する（ステップＡ８）。
【００８７】
プログラム解析部３１は、ＤＡＧを受信し、ＤＡＧを構成する処理を個別に分解する。
次に、プログラム解析部３１は、各処理の実行をタスク処理部３２に要求する（ステップＡ９）。要求された処理の実行は、データ分割の単位で行う。例えば、図５に示す処理７１では、処理７１が処理７１分割１と処理７１分割２の２つから構成されるため、２個の個別の処理がプログラム解析部３１により生成され、タスク処理部３２に要求される。以下では、個別のデータ分割に対する処理を単に「処理」と呼ぶ。
【００８８】
タスクスケジューラ３２１は、プログラム解析部３１から受信した処理の要求の中で、ＤＡＧの上流に位置する処理から順番に実行する。
【００８９】
まず、処理の内容がユーザプログラム２１の完了を超えてユーザのデータをアクセラレータメモリのデータオブジェクトとして保持するstoreObjectである場合（ステップＡ１０のＹｅｓ）、タスクスケジューラ３２１はデータ管理部３３にユーザプログラム２１のストアを要求する（ステップＡ２２）。
【００９０】
データスケジューラ３３１はstoreObjectの要求を受け、データ管理テーブル３４を参照し、該当エントリのオブジェクトフラグをセットし、プロセス番号を消去するようにデータ移動部３３２に要求し、データ移動部３３２は指定された処理を行う。また、storeObjectの要求の中に、データオブジェクトの名前が指定されているため、データスケジューラ３３１はオブジェクト名をデータ移動部３３２に登録させる（ステップＡ２３）。
【００９１】
一方、処理の要求がstoreObjectでない場合（ステップＡ１０のＮｏ）、タスクスケジューラ３２１は、次の処理の実行に必要な入力データと出力データのメモリ領域をデータ管理部３３に要求する（ステップＡ１１）。
【００９２】
データスケジューラ３３１は、データ管理テーブル３４を参照し、要求されたデータのスワップフラグが「１」にセットされていなければ、データが準備完了であると判断する（ステップＡ１２のＹｅｓ）。そして、データスケジューラ３３１は入力データが使用するメモリページのメモリ管理テーブル３５の該当するエントリのロックフラグをセットするようにデータ移動部３３２に要求する。
【００９３】
一方、要求されたデータのスワップフラグが「１」にセットされている場合（ステップＡ１２のＮｏ）、タスクスケジューラ３２１は、メモリ管理テーブル３５を参照し、メインメモリ４に退避されたデータを収容するために十分なメモリ空き領域を保持するアクセラレータが存在するとき、そのアクセラレータに入力データをロードするようにデータ移動部３３２に要求する。データ移動部３３２は、指定されたアクセラレータに入力データをロードし、データ管理テーブル３４の該当するデータのスワップフラグ、アクセラレータ番号、ページ番号を更新する（ステップＡ１３）。また、データスケジューラ３３１は、メモリ管理テーブル３５において、ロードしたデータが使用するページについて、使用中フラグ、データ番号、および、分割番号を更新する。また、データスケジューラ３３１は、メモリ管理テーブル３５においてロックフラグを「１」にセットする。
【００９４】
一方、メインメモリ４に退避されたデータを収容するために十分なメモリ空き領域を保持するアクセラレータが存在しない場合、データスケジューラ３３１はメモリ管理テーブル３５を参照し、ロックフラグがセットされていなページを使用しているデータを選択し、メインメモリ４に退避するようにデータ移動部３３２に要求する。データ移動部３３２は指定されたデータを退避し、データ管理テーブル３４におけるスワップフラグとアクセラレータ番号とページ番号を更新する。データがメインメモリ４に退避されると、そのデータのアクセラレータ番号とページ番号は無効となる。データスケジューラ３３１は、入力データをアクセラレータにロードするために必要なメモリ領域が空くまで、データ退避の要求を継続する。入力データをロードするためのメモリが空きになると、その後のデータをロードする処理は、メインメモリ４に退避されたデータを収容するために十分なメモリ空き領域を保持するアクセラレータが存在する場合のデータのロードの処理と同様である。
【００９５】
次に、データスケジューラ３３１は、要求された処理の出力メモリ領域が処理の入力データを保持するアクセラレータに確保可能か否かを確認する（ステップＡ１４）。ここで、空きメモリ領域が十分である場合、確保可能と判断する（ステップＡ１４のＹｅｓ）。
【００９６】
一方、空きメモリ領域が十分でない場合（ステップＡ１４のＮｏ）、データスケジューラ３３１は、メモリ管理テーブル３５を参照し、ロックフラグがセットされていないページを使用するデータを退避するようデータ移動部３３２に要求する。データ移動部３３２が指定されたデータを退避する動作（ステップＡ１５）は、ステップＡ１３においてデータを退避する場合の動作と同様である。
【００９７】
アクセラレータに出力データを収容するために十分なメモリ領域が空くと、データスケジューラ３３１は、データ移動部３３２に出力データのメモリを確保するように要求する（ステップＡ１６）。
【００９８】
データ移動部３３２はメモリを確保し、出力データの該当するデータ管理テーブル３４のエントリにおいてアクセラレータ番号とページ番号を記載する。また、使用しているページのメモリ管理テーブル３５のロックフラグをセットする。データスケジューラ３３１は、入力データと出力データのメモリ領域がアクセラレータ上に用意されると、タスク処理部３２にデータの用意完了を通知する（ステップＡ１７）。
【００９９】
タスクスケジューラ３２１は、データ用意完了通知を受け、タスク実行部３２２に処理の実行を要求する（ステップＡ１８）。
【０１００】
実行する処理の要求がユーザプログラム２１により与えられたカーネル関数の実行である場合、タスク実行部３２２はデータを保持するアクセラレータを用いて入力データに対しカーネル関数を実行させ、出力メモリ領域に結果を出力させる。一方、実行する処理の要求がデータのreadである場合、タスク実行部３２２はデータを保持するアクセラレータからデータを読み、タスクスケジューラ３２１に通知する。また、実行する処理の要求がデータを付加するappendである場合、タスク実行部３２２はデータを保持するアクセラレータのメモリ領域に与えられたデータを書き込む。タスクスケジューラ３２１は、タスク実行部３２２による処理が完了すると、データ管理部３３に処理完了を通知する（ステップＡ１９）。
【０１０１】
タスクスケジューラ３２１は、処理が完了した入力データと出力データについて、メモリ管理テーブル３５におけるロックフラグを解除するとともに、出力データについてデータ管理テーブル３４における該当エントリの計算済フラグをセットするように、データ移動部３３２に要求する（ステップＡ２０）。データ移動部３３２は、要求された処理を行う。
【０１０２】
タスクスケジューラ３２１は、プログラム解析部３１から要求されたＤＡＧのすべての処理が完了するまで（ステップＡ２１のＮｏ）、処理のデータの要求と処理の実行を継続する。
【０１０３】
一方、ＤＡＧの処理が完了すると（ステップＡ２１のＹｅｓ）、ステップＡ１に戻る。
【０１０４】
以上のように、本実施形態のアクセラレータ制御装置１では、プログラム解析部３１はＤＡＧ作成部２２からユーザプログラム２１の処理を示すＤＡＧを受信し、ＤＡＧを構成する処理に分割し、タスクスケジューラ３２１に処理の実行を要求する。タスクスケジューラ３２１は処理に必要な入力データと計算結果を出力するために必要なメモリ領域をデータスケジューラ３３１に要求する。データスケジューラ３３１はデータ管理テーブル３４を参照し、名前により指定された入力データがアクセラレータメモリ上に存在することを確認しロックするとともに、さらに、出力メモリ領域を確保しロックする。タスクスケジューラ３２１は入力データと出力メモリの準備完了の通知を受け、タスク実行部３２２にデータを保持するアクセラレータでの処理の実行を要求する。
【０１０５】
本実施形態のアクセラレータ制御装置１では、かかる構成および動作により、アクセラレータのメモリにユーザプログラム２１の完了を超えてデータを保持する。これにより、ユーザプログラム２１が開始してからアクセラレータにデータをロードする必要がなく、アクセラレータが保持するデータに対し計算を行える。これによりデータロードコストを削減し、アクセラレータを用いた計算を高速化することができる。また、本実施形態では、１つのデータを複数のアクセラレータに分割して保持し、ユーザプログラムの処理を分割し、各データの分割を保持するアクセラレータに処理を分配して行わせることで、アクセラレータへのデータロードコストを削減し、用いるアクセラレータ数に応じて処理時間を削減することが可能となる。
【０１０６】
＜実施形態２＞
次に、第２の実施形態について説明する。本実施形態では、ＣＰＵ（Central Processing Unit）とメモリを備えたコンピュータに対して、第１の実施形態に係るアクセラレータ制御装置の動作を行わせる。特に、ＣＰＵに対して、ユーザプログラム２１、ＤＡＧ作成部２２、プログラム解析部３１、タスクスケジューラ３２１、タスク実行部３２２、データスケジューラ３３１、および、データ移動部３３２の機能を行わせる。一方、コンピュータのメモリを、データ管理テーブル３４、メモリ管理テーブル３５、および、メインメモリ４として使用する。ここで、メモリとは、広義の記憶手段であり、半導体メモリおよび一般に二次記憶と呼ばれるハードディスクやフラッシュディスクを含む。また、アクセラレータはコンピュータのＩ／Ｏスロットに挿入する。あるいは、Ｉ／Ｏデバイス用のインターコネクションを用いてアクセラレータとコンピュータを接続することも可能である。
【０１０７】
本発明によれば、１つ以上のアクセラレータを含む計算装置の処理高速化といった用途に適用できる。
【０１０８】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の態様に係るアクセラレータ制御装置のとおりである。
［形態２］
前記データ管理部は、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する、
形態１に記載のアクセラレータ制御装置。
［形態３］
前記データ管理部は、データを生成したプログラムの完了を超えてアクセラレータのローカルメモリ上にデータを蓄積する第２の処理を受け付けると、前記蓄積するデータに付される名前と、前記蓄積するデータをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて前記データ管理テーブルに登録する、
形態１または２に記載のアクセラレータ制御装置。
［形態４］
ユーザプログラムからの処理要求をＤＡＧ（Directed Acyclic Graph）として受け付け、前記ＤＡＧに含まれる処理の実行を前記タスク処理部に要求するプログラム解析部を備え、
前記データ管理部は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持するアクセラレータを判別し、
前記タスク処理部は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持すると判別されたアクセラレータに、前記ＤＡＧに含まれる処理を実行させる、
形態１ないし３のいずれか一に記載のアクセラレータ制御装置。
［形態５］
前記ＤＡＧに含まれる処理の入力データは、複数のアクセラレータの複数のローカルメモリ上に分割して保持され、
前記データ管理部は、前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持する複数のアクセラレータを判別し、
前記タスク処理部は、前記判別された複数のアクセラレータのそれぞれに、前記ＤＡＧに含まれる処理を実行させる、
形態４に記載のアクセラレータ制御装置。
［形態６］
前記データ管理部は、前記第１の処理の入力データがアクセラレータの外部に退避されている場合、退避されたデータをアクセラレータにロードし、アクセラレータのローカルメモリに十分な空き領域がないときには、他のデータをアクセラレータの外部に退避した後、前記第１の処理の入力データをロードする、
形態１ないし５のいずれか一に記載のアクセラレータ制御装置。
［形態７］
前記データ管理部は、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保するための十分な空き領域がない場合、他のデータを前記判別したアクセラレータの外部に退避させた後、前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する、
形態１ないし６のいずれか一に記載のアクセラレータ制御装置。
［形態８］
上記第２の態様に係るアクセラレータ制御方法のとおりである。
［形態９］
前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保するステップを含む、
形態８に記載のアクセラレータ制御方法。
［形態１０］
データを生成したプログラムの完了を超えてアクセラレータのローカルメモリ上にデータを蓄積する第２の処理を受け付けるステップと、
前記蓄積するデータに付される名前と、前記蓄積するデータをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて前記データ管理テーブルに登録するステップと、を含む、
形態８または９に記載のアクセラレータ制御方法。
［形態１１］
ユーザプログラムからの処理要求をＤＡＧ（Directed Acyclic Graph）として受け付けるステップと、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持するアクセラレータを判別するステップと、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持すると判別されたアクセラレータに、前記ＤＡＧに含まれる処理を実行させるステップと、を含む、
形態８ないし１０のいずれか一に記載のアクセラレータ制御方法。
［形態１２］
前記ＤＡＧに含まれる処理の入力データを、複数のアクセラレータの複数のローカルメモリ上に分割して保持するステップと、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持する複数のアクセラレータを判別するステップと、
前記判別された複数のアクセラレータのそれぞれに、前記ＤＡＧに含まれる処理を実行させるステップと、を含む、
形態１１に記載のアクセラレータ制御方法。
［形態１３］
上記第３の態様に係るプログラムのとおりである。
［形態１４］
前記第１の処理の出力データを出力するためのメモリ領域を、前記判別したアクセラレータのローカルメモリ上に確保する処理を、前記コンピュータに実行させる、
形態１３に記載のプログラム。
［形態１５］
データを生成したプログラムの完了を超えてアクセラレータのローカルメモリ上にデータを蓄積する第２の処理を受け付ける処理と、
前記蓄積するデータに付される名前と、前記蓄積するデータをローカルメモリ上に保持するアクセラレータを識別する識別子とを関連付けて前記データ管理テーブルに登録する処理と、を前記コンピュータに実行させる、
形態１３または１４に記載のプログラム。
［形態１６］
ユーザプログラムからの処理要求をＤＡＧ（Directed Acyclic Graph）として受け付ける処理と、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持するアクセラレータを判別する処理と、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持すると判別されたアクセラレータに、前記ＤＡＧに含まれる処理を実行させる処理と、をコンピュータに実行させる、
形態１３ないし１５のいずれか一に記載のプログラム。
［形態１７］
前記ＤＡＧに含まれる処理の入力データを、複数のアクセラレータの複数のローカルメモリ上に分割して保持する処理と、
前記ＤＡＧに含まれる処理の入力データをローカルメモリ上に保持する複数のアクセラレータを判別する処理と、
前記判別された複数のアクセラレータのそれぞれに、前記ＤＡＧに含まれる処理を実行させる処理と、を前記コンピュータに実行させる、
形態１６に記載のプログラム。
【０１０９】
なお、上記特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【０１１０】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０１１１】
この出願は、２０１５年５月１２日に出願された日本出願特願２０１５−０９７０３３を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１１２】
１    アクセラレータ制御装置
３    アクセラレータ制御部
４    メインメモリ
８    情報処理装置
２１    ユーザプログラム
２２    ＤＡＧ作成部
３１    プログラム解析部
３２    タスク処理部
３３    データ管理部
３４    データ管理テーブル
３５    メモリ管理テーブル
５１〜５３    アクセラレータ
６１〜６６    データ
７１〜７４    処理
８１    共有メモリ
３２１    タスクスケジューラ
３２２    タスク実行部
３３１    データスケジューラ
３３２    データ移動部
５１１〜５１３    プロセッサ
５２１〜５２３    アクセラレータメモリ
８２１〜８２３    アクセラレータ
【図１】
2016181648.tif 000003
【図２】
2016181648.tif 000004
【図３】
2016181648.tif 000005
【図４】
2016181648.tif 000006
【図５】
2016181648.tif 000007
【図６】
2016181648.tif 000008
【図７】
2016181648.tif 000009
【図８】
2016181648.tif 000010
【図９Ａ】
2016181648.tif 000011
【図９Ｂ】
2016181648.tif 000012
【図１０】
2016181648.tif 000013
【国際調査報告】
2016181648.tif 000014
2016181648.tif 000015
2016181648.tif 000016
2016181648.tif 000017