(57)【要約】  複数のアクセラレータを用いてデータを分割して処理する場合における、処理を高速化すること。  アクセラレータ制御装置は、データを分割して得られた区分データと区分データに隣接する区分データに含まれるデータである境界データとを合わせたデータを分割データとして保持するアクセラレータと、分割データに含まれる境界データのうちの分割データに含まれる区分データに隣接する区分データと一貫性があるデータの幅が、アクセラレータが実行する処理で参照されるデータの幅を表す参照幅以上であるかどうかを判定するデータ管理部と、を備える。
2016208178.tif 000002
【特許請求の範囲】
【請求項１】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定するデータ管理手段と、を備える、
ことを特徴とする、アクセラレータ制御装置。
【請求項２】
前記データ管理手段は、前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う、
請求項１に記載のアクセラレータ制御装置。
【請求項３】
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅として保持するテーブルと、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新するタスク処理手段と、を備え、
前記データ管理手段は、前記テーブルが保持する有効幅を参照して、前記判定を行う、
請求項１または２に記載のアクセラレータ制御装置。
【請求項４】
前記タスク処理手段は、前記少なくとも１つの区分データと、前記境界データのうちの有効幅から前記参照幅を差し引いた幅のデータとを対象として、前記アクセラレータに処理を実行させる、
請求項３に記載のアクセラレータ制御装置。
【請求項５】
ユーザプログラムが実行する処理を示すＤＡＧ（Directed Acyclic Graph）を生成するためのＡＰＩ（Application Program Interface）を提供するＤＡＧ作成手段を備え、
前記ＡＰＩは、前記処理を示すカーネル関数および前記参照幅を引数とする、
請求項１ないし４のいずれか１項に記載のアクセラレータ制御装置。
【請求項６】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、
前記境界データとして、前記アクセラレータが実行する処理で参照されるデータの幅を表す参照幅よりも大きい幅を有するデータを、前記アクセラレータに保持させるデータ管理手段と、を備える、
ことを特徴とする、アクセラレータ制御装置。
【請求項７】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持し、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定する
ことを特徴とする、アクセラレータ制御方法。
【請求項８】
前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う
請求項７に記載のアクセラレータ制御方法。
【請求項９】
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅としてテーブルに保持し、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新し、
前記判定は、前記テーブルが保持する有効幅を参照して行われる、
請求項７または８に記載のアクセラレータ制御方法。
【請求項１０】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持させる処理と、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定する処理と、をコンピュータに実行させる、
ことを特徴とする、プログラムを格納する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアクセラレータ制御装置、アクセラレータ制御方法およびプログラムに関し、特にアクセラレータを用いた計算を制御するアクセラレータ制御装置、アクセラレータ制御方法およびプログラムに関する。
【背景技術】
【０００２】
アクセラレータ制御装置の一例が特許文献１に記載されている。図１４に示すように、特許文献１に記載されたアクセラレータ制御装置は、１つのマスタコンピュータ１０と、複数のスレーブコンピュータ１１１〜１１３とを備えている。マスタコンピュータ１０は、データ分割部１００１と重複部分取捨選択部１００２を備えている。データ分割部１００１は、各分割領域に含まれる図形データ量が等しくなるように図形データを分割する。重複部分取捨選択部１００２は、各スレーブコンピュータ１１１〜１１３から受信した処理結果のうちの重複する部分を取捨選択して重複のない全処理結果を得る。スレーブコンピュータ１１１は、分割領域を処理する図形処理部１１１１を備えている。他のスレーブコンピュータ１１２、１１３も、スレーブコンピュータ１１１と同様の構成を有する。【０００３】
かかる構成を備えた特許文献１のアクセラレータ制御装置は、次のように動作する。データ分割部１００１は、各分割領域に含まれる図形データ量が等しくなるように図形データを分割する。マスタコンピュータ１０は、分割領域とその分割領域の境界周辺領域とを合わせたそれぞれの分担領域を個々のスレーブコンピュータ１１１〜１１３に送信する。
スレーブコンピュータ１１１〜１１３の図形処理部１１１１〜１１１３は、マスタコンピュータ１０から受信した図形データを互いに独立に処理する。スレーブコンピュータ１１１〜１１３は、その処理結果をマスタコンピュータ１０に送信する。重複部分取捨選択部１００２は、スレーブコンピュータ１１１〜１１３から受信した処理結果のうちの重複する部分を取捨選択して重複のない全処理結果を得る。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−１０３９８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。【０００６】
特許文献１に記載されたアクセラレータ制御装置によると、複数のアクセラレータ（特許文献１では、スレーブコンピュータ１１１〜１１３に相当）を用いてデータを分割して処理を行う場合、１つのデータに対して任意の処理を任意の順番で連続して行うときに処理が低速になるという問題がある。その理由は、各処理が完了する度に分割したデータを制御ユニット（特許文献１では、マスタコンピュータ１０に相当）に戻す必要があり、データ移動のコストが大きいからである。【０００７】
そこで、複数のアクセラレータを用いてデータを分割して処理する場合における、処理の高速化が課題となる。本発明の目的は、かかる課題解決に寄与するアクセラレータ制御装置、アクセラレータ制御方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の第１の態様に係るアクセラレータ制御装置は、データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定するデータ管理部と、を備えている。【０００９】
本発明の第２の態様に係るアクセラレータ制御装置は、データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、前記境界データとして、前記アクセラレータが実行する処理で参照されるデータの幅を表す参照幅よりも大きい幅を有するデータを、前記アクセラレータに保持させるデータ管理部と、を備えている。【００１０】
本発明の第３の態様に係るアクセラレータ制御方法は、データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持させるステップと、前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定するステップと、を含む。【００１１】
本発明の第４の態様に係るプログラムは、データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持させる処理と、前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定する処理と、をコンピュータに実行させる。なお、プログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することもできる。
【発明の効果】
【００１２】
本発明に係るアクセラレータ制御装置、アクセラレータ制御方法およびプログラムによると、複数のアクセラレータを用いてデータを分割して処理する場合において、処理を高速化することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態に係るアクセラレータ制御装置の構成を例示するブロック図である。
【図２】本発明の第１の実施形態に係るアクセラレータ制御装置の構成を例示するブロック図である。
【図３】本発明の第１の実施形態に係るアクセラレータ制御装置のＤＡＧ作成部が提供するＡＰＩを例示する図である。
【図４】本発明の第１の実施形態に係るアクセラレータ制御装置のＤＡＧ作成部が作成するＤＡＧを例示する図である。
【図５Ａ】画像処理のフィルタ処理における参照幅について説明するための図である。
【図５Ｂ】画像処理のフィルタ処理における参照幅について説明するための図である。
【図６】ＤＡＧに含まれるデータおよび処理の分割について例示する図である。
【図７】本発明の第１の実施形態に係るアクセラレータ制御装置のメモリ管理テーブルが保持する情報を例示する図である。
【図８】本発明の第１の実施形態に係るアクセラレータ制御装置のデータ管理テーブルが保持する情報を例示する図である。
【図９】本発明の第１の実施形態に係るアクセラレータ制御装置の有効幅管理テーブルが保持する情報を例示する図である。
【図１０】本発明の第１の実施形態に係るアクセラレータ制御装置における境界幅と有効幅について説明するため図である。
【図１１】本発明の第１の実施形態に係るアクセラレータ制御装置によるＤＡＧ作成部の動作を例示するフロー図である。
【図１２】本発明の第１の実施形態に係るアクセラレータ制御装置によるデータ管理部の動作を例示するフロー図である。
【図１３】本発明の第１の実施形態に係るアクセラレータ制御装置によるタスク処理部の動作を例示するフロー図である。
【図１４】特許文献１に記載されたマルチプロセッサシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００１５】
図１は、一実施形態に係るアクセラレータ制御装置１の構成を例示するブロック図である。図１を参照すると、アクセラレータ制御装置１は、データを分割して得られた複数の区分データの少なくとも１つの区分データ（例えば図１０の上段の区分データ）と前記少なくとも１つの区分データ（上段の区分データ）に隣接する区分データ（例えば図１０の中段の区分データ）に含まれるデータである境界データ（例えば図１０の境界データ９２）とを保持するアクセラレータ（例えばアクセラレータ５１）と、境界データ（９２）のうちの前記少なくとも１つの区分データに隣接する区分データ（図１０の中段の区分データ）と一貫性（コンシステンシ、整合性）があるデータの幅が、アクセラレータ（５１）が実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定するデータ管理部３３と、を備えている。
【００１６】
ここで、データ管理部３３は、前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、アクセラレータ（５１）に処理を実行させる前に、境界データ（９２）と前記少なくとも１つの区分データに隣接する区分データ（図１０の中段の区分データ）との間で同期を行う。
【００１７】
かかるアクセラレータ制御装置１によると、複数のアクセラレータを用いてデータを分割して処理する場合において、処理を高速化することが可能となる。なぜなら、境界データのうちの隣接する区分データと一貫性があるデータの幅（有効幅）が参照幅以上であるかどうかを判定して、境界データと隣接する区分データとの間でデータの同期の要否を判別することにより、有効幅が参照幅以上である場合、アクセラレータ間でデータを同期させることなく、個々のアクセラレータは自身が担当するデータに対する処理を連続して実行することができるからである。
【００１８】
また、他の展開形態によると、アクセラレータ制御装置１は、データを分割して得られた複数の区分データの少なくとも１つの区分データ（例えば図１０の上段の区分データ）と前記少なくとも１つの区分データ（上段の区分データ）に隣接する区分データ（例えば図１０の中段の区分データ）に含まれるデータである境界データ（例えば図１０の境界データ９２）とを保持するアクセラレータ（例えばアクセラレータ５１）と、境界データ（９２）として、アクセラレータ（５１）が実行する処理で参照されるデータの幅を表す参照幅よりも大きい幅を有するデータを、アクセラレータ（５１）に保持させるデータ管理部３３と、を備えている。
【００１９】
かかるアクセラレータ制御装置１によると、複数のアクセラレータを用いてデータを分割して処理する場合において、処理を高速化することが可能となる。なぜなら、アクセラレータによる処理で参照される参照幅よりも大きい幅（境界幅）を有する境界データをアクセラレータに保持させることにより、アクセラレータによる処理の都度、アクセラレータ間でデータを同期させる必要がなくなるからである。
【００２０】
図２を参照して、さらなる展開形態に係るアクセラレータ制御装置１について説明する。アクセラレータ制御装置１は、データを分割した区分データを含む被処理データ（図１０の分割データ９１１〜９１３）の間で境界データ（９２）を冗長に保持し、冗長に保持した境界データ（例えば、分割データ９１１の境界データ９２）が隣接する分割データ（９１２）の区分データとコンシステンシを保持する領域を有効幅（９４）として管理する手段（図２、図９の有効幅管理テーブル３４）と、ユーザプログラム２１から与えられた処理が要求する参照領域を示す参照幅に対して分割データ（９１１）の有効幅（９４）が十分かどうかを判断する手段（図２の同期判定部３３３）を備えている。ここで、アクセラレータ制御装置１は、有効幅（９４）が参照幅以上である場合、分割データ（９１１、９１２）の間で境界データの同期を行うことなくユーザプログラム２１の処理を行う。一方、アクセラレータ制御装置１は、有効幅が不足する場合、分割データ（９１１、９１２）間で同期を行ってからユーザプログラム２１の処理を行う。
【００２１】
また、アクセラレータ制御装置１は、分割されたデータが冗長に保持する分割データ（９１１）の境界データ（９２）において、境界データ（９２）の区分データを保持する隣接する分割データ（９１２）と一貫性（コンシステンシ、整合性）があるデータの領域を有効幅（９４）として管理する有効幅管理テーブル（３４）と、分割されたデータに対して行う処理が必要とするデータを参照する参照幅が、処理を行う分割データ（９１１）の有効幅（９４）以下であるかどうかを判定する同期判定部（３３３）と、分割データ（９１１）の有効幅（９４）から参照幅を減算した領域と分割データ（９１１）の区分データとを処理対象のデータ領域として算出する処理領域計算部（３２３）とを備えている。
【００２２】
ここで、分割データ（９１１）の有効幅（９４）が処理の参照幅以上である場合、分割データ（９１１、９１２）間で境界データ（９２）の同期を行わずにユーザプログラム２１から与えられた処理を行う。一方、有効幅（９４）が処理の参照幅より小さい場合、分割データ（９１１、９１２）間で境界データの同期を行ってからユーザプログラム２１から与えられた処理を行う。また、このときの計算対象領域は、分割データ（９１１）の区分データと、境界データ（９２）の有効幅（９４）から処理の参照幅を減じた幅のデータとする。
【００２３】
かかる構成を採用し、分割データ間（９１１〜９１３）で境界データ（９２）を冗長に保持し、ユーザプログラム２１から与えられた一連の処理の実行に必要な参照幅が境界データ（９２）に含まれる冗長データの有効幅（９４）で足りる場合、分割データ間で境界データの同期を行わずに処理を実行し、さらに、参照幅に対して有効幅（９４）が不足するケースを判定して境界データ（９２）の同期を行ってから処理を実行する。また、複数のアクセラレータ（５１〜５３）間で分割したデータをやり取りすることなく、任意の処理を（例えば、任意の順で）連続して行う。
【００２４】
かかるアクセラレータ制御装置によると、複数のアクセラレータを用いてデータを分割して処理を行う場合、１つのデータに対し任意の処理を（例えば、任意の順で）連続して高速に行うことができる。その理由は、分割したデータを複数のアクセラレータに置いたまま連続した処理を行うことができ、かつ各処理の間で分割したデータの間で行う境界データの同期コストを削減できるからである。
【００２５】
＜実施形態１＞
次に、第１の実施形態に係るアクセラレータ制御装置について、図面を参照して詳細に説明する。
【００２６】
図２は、本実施形態に係るアクセラレータ制御装置１の構成を例示するブロック図である。図２を参照すると、アクセラレータ制御装置１は、計算処理を実行するアクセラレータ５１と、アクセラレータ５２と、アクセラレータ５３と、アクセラレータがメモリリソースの不足により保持できなくなったデータを退避するメインメモリ４と、アクセラレータを制御するアクセラレータ制御部３と、ユーザプログラム２１と、ＤＡＧ作成部２２とを備えている。ここで、ＤＡＧ作成部２２は、ユーザプログラム２１のＡＰＩ（Application Programming Interface）呼び出しによりユーザプログラムの処理を示すＤＡＧ（Directed Acyclic Graph）を作成しアクセラレータ制御部３に送信する。
【００２７】
アクセラレータ５１は、データを処理するプロセッサ５１１とデータを格納するアクセラレータメモリ５２１を備えている。本実施形態では、アクセラレータの個数は、説明の都合上３つとしているが、アクセラレータの数は１つ以上であればいくつでもよい。アクセラレータとは、典型的にはＮＶＩＤＩＡ社のＧＰＵ（Graphics Processing Unit）やIntel社のXeon Phiである。アクセラレータは、コンピュータのＩ／Ｏ（Input/Output）スロットに挿入する形で実装され、コンピュータのＣＰＵ（Central Processing Unit）のコプロセッサとして機能する。以下では複数のアクセラレータについて説明が重複する場合、アクセラレータ５１についてのみ説明する。アクセラレータ５２、５３についても、アクセラレータ５１に対する説明と同様の説明が該当する。
【００２８】
ユーザプログラム２１は、例えば、アクセラレータを利用するプログラマが作成するアプリケーションプログラムである。ユーザプログラム２１は、図３に示すＤＡＧ作成部２２が提供する予約ＡＰＩおよび実行ＡＰＩの２種類を用いて実装される。
【００２９】
図３に示す予約ＡＰＩは、図４に示すＤＡＧの処理の１つに対応する。予約ＡＰＩがユーザプログラム２１から呼び出されると、ＤＡＧ作成部２２は１つの処理とその処理が生成するデータをＤＡＧに追加する。例えば、図４においてデータ６１に対し予約ＡＰＩを用いて処理７１が呼ばれると、ＤＡＧ作成部２２は処理７１と処理７１の出力データであるデータ６２をＤＡＧに付加する。
【００３０】
なお、予約ＡＰＩは処理を予約するためのＡＰＩである。すなわち、予約ＡＰＩが呼び出された直後にアクセラレータでの処理は実行されず、ＤＡＧが生成されるにすぎない。
一方、実行ＡＰＩが呼び出されると、新たな処理とその処理が生成するデータがＤＡＧに付加される場合とされない場合があるが、それまでに生成されたＤＡＧの処理の実行がトリガされる。実行ＡＰＩに属する処理は、ユーザプログラム２１内でＤＡＧが処理された後のデータが必要となる場合や、計算結果のデータをアクセラレータ上のメモリにデータオブジェクトとして保持するstoreObjectの場合等である。
【００３１】
予約ＡＰＩや実行ＡＰＩは、１つまたは複数の引数（図３に示すα、β、…）を持つ場合がある。これらの引数のうちの１つは、ユーザプログラム２１がデータに対して実行する処理を示す関数（カーネル関数と呼ばれる）である場合がある。関数を必要とするかどうかは、予約ＡＰＩおよび実行ＡＰＩの種類に依存する。予約ＡＰＩや実行ＡＰＩはデータに対して行われる処理のパターンを示し、実際の具体的な処理はユーザプログラム２１内で予約ＡＰＩまたは実行ＡＰＩの引数として与えられるカーネル関数によって行われる。
【００３２】
処理のパターンの一例は、図３の予約ＡＰＩに示すmapである。mapにおいては、入力データを構成するすべての要素に対してカーネル関数を適用する。ＤＡＧの入力データの例として、画像やデータベースのテーブルが考えられる。これらのデータにmapが適用された場合、カーネル関数が画像の各画素や、データベースの各エントリに対して個別に適用される。
【００３３】
一方、カーネル関数を必要としないＡＰＩの例として、図３の実行ＡＰＩに示すstoreObject、appendObject、read等がある。storeObjectは、計算結果をアクセラレータ上のメモリにデータオブジェクトとして保持する。storeObjectでは、アクセラレータ上のメモリにデータオブジェクトとして保持するデータに名前付けを行うことができる。このとき、storeObjectのＡＰＩの引数としてオブジェクトの名前を渡す。また、appendObjectはすでに存在するオブジェクトの末尾にデータを付加する場合に用いられるＡＰＩである。
さらに、readはアクセラレータ上に存在するデータオブジェクトの内容をユーザ空間に取得する。
【００３４】
また、ＤＡＧが示す処理の入力データとして、アクセラレータがメモリに保持するデータオブジェクトを指定することができる。この場合、予約ＡＰＩや実行ＡＰＩで行う処理の入力データとして、アクセラレータが保持するオブジェクトの名前を指定する。この名前として、storeObjectを呼び出す際にユーザプログラム２１が付けた名前が用いられる。また、ＤＡＧが示す処理の入力データの他の例として、ファイルシステム等のアクセラレータ外に格納されたデータを指定することができる。この場合、予約ＡＰＩや実行ＡＰＩで行う処理の入力データとして、ファイルシステム等が保持するオブジェクトの名前を指定する。
【００３５】
また、予約ＡＰＩはＡＰＩの種類により参照幅Ａを保持する。参照幅Ａは、予約ＡＰＩで与えられたカーネル関数が計算を担当するデータの要素（担当データ要素）の計算を実行する場合に参照する情報であって、担当データ要素に隣接するデータ要素の幅を表す。
【００３６】
参照幅について、図５Ａおよび図５Ｂに示す画像処理におけるフィルタ処理を用いて説明する。図５Ａは画像処理における３×３フィルタ８１、図５Ｂは画像処理における５×５フィルタ８２を示す。３×３フィルタ８１では、中央の画素を計算するため、当該画素に隣接する８つの画素を参照する。一方、５×５フィルタ８２では、中央の画素を計算するため、３×３フィルタ８１の場合よりも１つ遠い画素まで参照し、２４個の画素を参照する。これらのフィルタ処理は、例えば画像のノイズを除去するために、各画素と近傍の画素の平均値を計算することで画素値を平滑化する場合に用いられる。３×３フィルタ８１の場合、１つ目の近傍の画素まで参照するため、予約ＡＰＩの参照幅Ａは「Ａ＝１」となる。一方、５×５フィルタ８２の場合、２つ目の近傍の画素を参照するため、予約ＡＰＩの参照幅Ａは「Ａ＝２」となる。図５Ａおよび図５Ｂの場合、参照幅は縦方向および横方向の幅で決めている。これらの参照幅は、ユーザプログラム２１を作成するプログラマが予約ＡＰＩを使用する際にパラメータＡとして与える。
【００３７】
ここで、図４のＤＡＧについて、さらに説明する。本実施形態では、ＤＡＧの処理は複数のアクセラレータで分散して行われる。このため、ＤＡＧの各データは図６に示すように２つ以上に分割される。図６は、図４のＤＡＧのデータ６１、処理７１、データ６２、処理７２およびデータ６３において、データを４つに分割した例を示す。この場合、例えば、処理７１をデータ６１分割１、データ６１分割２、データ６１分割３、および、データ６１分割４の４つに適用すれば、データ６１を分割しない場合の処理と同一の結果が得られる。これは、並列計算ではデータパラレルという処理形態に属し、本発明の技術分野において公知の技術である。
【００３８】
なお、図６では、データ６１分割１に対する処理を処理７１分割１等と記載しているが、データを構成する個々の要素に対する処理内容は図４における処理７１と同一である。
また、一例として、データ６１分割１とデータ６１分割２の処理はアクセラレータ５１で行い、データ６１分割３とデータ６１分割４の処理はアクセラレータ５２で行うようにしてもよい。このとき、４つすべての分割データを１つのアクセラレータで処理する場合と比較して、理想的な場合では２倍の計算性能が得られる。また、ここでは、データ６１に関する処理を２つのアクセラレータで分散して行う場合を示したが、３つ以上のアクセラレータで行うことも可能である。この場合、各アクセラレータに分散される処理の単位は、データと処理の分割毎となる。
【００３９】
ＤＡＧ作成部２２は、ユーザプログラム２１が予約ＡＰＩと実行ＡＰＩを呼び出す度にＤＡＧを生成する。予約ＡＰＩが呼ばれた場合、ＤＡＧ作成部２２は対応する処理と出力データをＤＡＧに付加する。一方、実行ＡＰＩが呼ばれた場合、ＤＡＧ作成部２２は処理と出力データの追加が必要であれば追加し、これまで生成したＤＡＧをアクセラレータ制御部３に通知する。なお、ＤＡＧ作成部２２が作成するＤＡＧは、ユーザプログラム２１が呼び出した予約ＡＰＩまたは実行ＡＰＩの種類、各ＡＰＩに与えられたカーネル関数、および、参照幅を含む。
【００４０】
図２を参照すると、アクセラレータ制御部３は、プログラム解析部３１、タスク処理部３２、データ管理部３３、メモリ管理テーブル３６、データ管理テーブル３５、および、有効幅管理テーブル３４を備えている。プログラム解析部３１は、ＤＡＧ作成部２２から受信したユーザプログラム２１の処理を示すＤＡＧを解析する。タスク処理部３２は、ＤＡＧの処理を実行する。データ管理部３３は、ＤＡＧの処理に必要なデータの管理や準備を行う。メモリ管理テーブル３６は、アクセラレータのメモリを管理するために用いられる。データ管理テーブル３５は、アクセラレータのメモリ上のデータを管理するために用いられる。有効幅管理テーブル３４は、アクセラレータのメモリ上の分割データの境界データの有効幅を管理するために用いられる。
【００４１】
メモリ管理テーブル３６は、アクセラレータのメモリを管理するためのテーブルとして用いられる。アクセラレータのメモリは、例えば、一定サイズのページに分割して管理される。ページサイズは、例えば４ＫＢや６４ＫＢである。メモリ管理テーブル３６は、図７に示すように各ページに関する情報を保持する。各ページの情報は、そのページが属するアクセラレータ番号、ページ番号、そのページが使用中であることを示す使用中フラグ、そのページが使用中である場合、ページが保持するデータの識別子を示す使用データ（データ番号）、そのページが保持するデータはデータのどの分割かを示すデータ分割番号を保持する。使用中フラグは、ブール値である。データの識別子はＤＡＧの各データ（図４のデータ６１やデータ６２）に割り当てられる。例えば、図７に示すメモリ管理テーブル３６の最初のエントリは、アクセラレータ番号５１のページ１は、データ番号６１の分割１によって使用されていることを示す。以下の説明では、単にデータと呼ぶ場合、図４のデータ６１やデータ６２で示されるＤＡＧに含まれるデータを表すものとする。
【００４２】
データ管理テーブル３５は、アクセラレータのメモリ上のデータを管理するために用いられる。データ管理テーブル３５は、図８に示すようにユーザプログラム２１から送信されたＤＡＧ内のデータに関する情報を保持する。各データの情報は、データ番号、各データの分割番号、そのデータが計算済みかを示す計算済フラグ、そのデータを保持するアクセラレータ番号を示すアクセラレータ番号、データを保持するアクセラレータのページ番号を保持する。なお、分割データが複数のページに跨る場合、先頭ページのページ番号である。計算済フラグは、ブール値である。例えば、図８に示すデータ管理テーブル３５の最初のエントリは、データ番号が６１であるデータの分割１はすでに計算済みであり、アクセラレータ５１のページ１に保持されていることを示す。
【００４３】
有効幅管理テーブル３４は、図９に示すように各データの分割毎に境界幅と有効幅に関する情報を保持する。ここで、図１０を用いて各データの境界幅と有効幅について説明する。図１０は、１つのデータが３つに分割され、３つの分割データ９１１〜９１３から構成されていることを示す。なお、ここでの分割の数３は例示にすぎず、本発明はかかる分割の数に限定されない。ここでは、データが画像であり、画像を横方向に３分割した場合を例として説明する。なお、データは今回説明する画像に限らず、流体シミュレーションのデータやログデータ等、何らかの要素の集合としてデータが構成される場合、本発明を適用することができる。
【００４４】
以下、分割データ９１１について説明する。他の分割データ９１２、９１３についても同様の説明が当てはまる。分割データ９１１は、元のデータから分割された画像領域（以下「区分データ」という。）の他に、分割データ９１２の領域のうちの、分割データ９１１と接する領域を保持する。これを境界データ９２とする。境界データの分割データ９１２の方向への幅を境界幅９３とする。図１０の場合、例えば、境界幅９３が１０とは、境界データ９２の縦のピクセル数が１０個であることを意味する。
【００４５】
また、境界幅９３に対して、有効幅９４という概念を導入する。有効幅９４は、最小値が０以上、最大値が境界幅９３の値をとる。有効幅９４とは、境界データ９２のうちの、区分データを保持する隣接する分割データ９１２とコンシステンシを保持するデータの幅である。すなわち、有効幅９４は、分割データ９１１の境界データ９２のうちの、分割データ９１２との間でデータの内容が一致している幅を表す。逆に、境界データ９２の中で、有効幅９４に入らない領域のデータは、分割データ９１２と一致していない場合がある。
【００４６】
プログラム解析部３１は、ＤＡＧ作成部２２から受信したユーザの処理を示すＤＡＧを解析し、データと処理に分割する。プログラム解析部３１は、ＤＡＧ内のデータについては、データ管理テーブル３５にエントリを作成する。なお、プログラム解析部３１は、このエントリをデータ分割数分作成する。また、データのエントリ作成時点では、まだ各分割データの計算が行われていないため計算済フラグは０となる。ただし、ＤＡＧの入力データとして、以前のＤＡＧが出力したデータを使用する場合等、すでにアクセラレータ上のメモリにデータがストアされている場合、プログラム解析部３１はデータ管理テーブル３５に新たなエントリを作成する必要はなく、計算済フラグもセットされている。
【００４７】
また、プログラム解析部３１は、有効幅管理テーブル３４にもエントリを作成する。エントリを作成する時点では、境界幅と有効幅の値は不定である。有効幅管理テーブル３４についても、データ管理テーブル３５の場合と同様に、ユーザプログラム２１から渡されたＤＡＧの処理以前に作成されたデータについては、エントリが存在している。したがって、プログラム解析部３１は、かかるデータについてはエントリを作成する必要はない。
【００４８】
さらに、プログラム解析部３１は、ＤＡＧを処理の単位に分割し、各処理の実行をタスク処理部３２に要求する。処理とは、例えば図４に示す処理７１、処理７２等をいう。プログラム解析部３１は、処理実行の要求を、処理の入力データを構成する分割データそれぞれに対して個別に行う。以下、それぞれの分割データに対して行われる処理をサブタスクと呼んで説明する。サブタスクとは、例えば図６に示す処理７１分割１や処理７１分割２等に対応する。また、サブタスクの実行要求には、サブタスクの実行に必要な参照幅の情報が含まれる。この値は、図３の予約ＡＰＩの引数としてユーザプログラム２１から指定された値である。
【００４９】
図２を参照すると、データ管理部３３は、データスケジューラ３３１、データ移動部３３２、同期判定部３３３、および、境界幅読み込み部３３４を備えている。データスケジューラ３３１は、アクセラレータのメモリが保持するデータの管理や、メモリの確保を指示する。データ移動部３３２は、アクセラレータにデータをロードさせ、メモリの確保を行う。同期判定部３３３は、分割データ間のデータの同期の必要性を判定する。境界幅読み込み部３３４は、分割データの境界幅の設定値を設定ファイル等から読み込み、データ移動部３３２からの問い合わせに応答する。
【００５０】
同期判定部３３３は、データスケジューラ３３１の依頼を受け、指定された分割データの有効幅が指定されたサブタスクの実行が必要とする参照幅以上であるかを、有効幅管理テーブル３４を参照して判定し、判定結果をデータスケジューラ３３１に通知する。
【００５１】
データスケジューラ３３１は、メモリ管理テーブル３６を参照してアクセラレータ５１のアクセラレータメモリ５２１の管理を行う。他のアクセラレータ５２、５３についても同様である。データスケジューラ３３１は、タスク処理部３２からサブタスクの実行に必要な入力分割データの準備と出力分割データを出力するためのメモリ領域の確保の要求を受ける。要求の中には、サブタスクを実行するために必要な参照幅が含まれている。
【００５２】
実行するサブタスクがＤＡＧの最初のサブタスクである場合、入力分割データとしてアクセラレータのメモリが保持するデータオブジェクトの識別子が指定されている場合がある。この場合、すでにアクセラレータメモリ上に入力データが準備されているため、何も行う必要はない。また、別の場合として、識別子が指定する入力分割データはファイルシステム等のアクセラレータの外部に格納されているデータであって、アクセラレータが保持するメモリへロードする必要がある場合がある。メモリへのロードが必要な場合、データスケジューラ３３１は、データ移動部３３２にアクセラレータへの入力分割データのロードを依頼する。このとき、ロードするアクセラレータを指定する。
【００５３】
また、実行するサブタスクがＤＡＧに含まれる最初の処理以外の処理に属する場合、そのＤＡＧの前の処理に属するサブタスクが完了されていれば、その実行したいサブタスクの入力分割データはすでに出力されており、該当するデータ管理テーブル３５のエントリの計算済フラグもアサートされている。このとき、入力分割データはデータアクセラレータのメモリ上に準備完了となっているため何も行う必要はない。
【００５４】
さらに、データスケジューラ３３１は入力分割データについて同期判定部３３３に問い合せ、入力分割データがそのとき保持する有効幅が実行しようとしているサブタスクの参照幅以上であるか確認する。参照幅以上でない場合、データスケジューラ３３１はデータ移動部３３２に境界データの同期を要求する。一方、参照幅以上である場合、同期の必要がないため何も行わない。
【００５５】
また、データスケジューラ３３１は、出力分割データに関しては、タスク処理部３２が要求するサブタスクの出力分割データに必要なページ数を確保するようデータ移動部３３２に要求する。このとき、ページを確保するアクセラレータは、入力分割データを保持するアクセラレータと同一のアクセラレータである。
【００５６】
さらに、データスケジューラ３３１は、入力分割データと出力分割データのメモリ領域をロックするようデータ移動部３３２に要求する。このロックは入力分割データと出力分割データのメモリ領域が計算に使用されていることを示す。また、データスケジューラ３３１は、タスク処理部３２から処理の完了通知を受信し、データ移動部３３２にロック中のページのロックを解除し、データ管理テーブル３５における出力分割データの計算済フラグをセットするよう通知する。なお、タスクスケジューラ３２１が実行を要求する処理の種類によっては入力分割データと出力メモリ領域の片方だけ準備すればよい場合がある。例えば、データオブジェクトの内容を取得するreadの実行要求では、出力メモリ領域を用意する必要がない。
【００５７】
データ移動部３３２は、データスケジューラ３３１からの指示を受け、アクセラレータのメモリの確保や、アクセラレータに対するデータの移動を行う。データ移動部３３２は、データスケジューラ３３１からの指示を受け、アクセラレータのメモリの確保を行い、メモリ管理テーブル３６に確保したメモリのページのエントリを登録する。また、データ管理テーブル３５のデータの分割のエントリに、確保したメモリに該当するアクセラレータ番号とページ番号を登録する。さらに、データ移動部３３２は、データスケジューラ３３１からの指示を受け、計算に使用中のページの使用中フラグ（ロックフラグ）をセットする。また、データ移動部３３２は、計算が完了したページの使用中フラグ（ロックフラグ）を解除する。さらに、データ移動部３３２は、出力分割データのデータ管理テーブル３５の計算済フラグをセットする。
【００５８】
また、データ移動部３３２は、データスケジューラ３３１からの指示を受け、アクセラレータのメモリにファイルシステム等のアクセラレータの外部に格納されているデータから分割データに該当するデータ部分をロードする。このとき、データ移動部３３２は、分割データに付加する境界データの境界幅を境界幅読み込み部３３４に問い合せ、指示された幅の境界データを作成する。また、データ移動部３３２は、作成した分割データの境界幅と有効幅を有効幅管理テーブル３４の該当エントリに登録する。なお、データをロードした場合、境界幅と有効幅は同じ値となる。
【００５９】
図２を参照すると、タスク処理部３２は、タスクスケジューラ３２１、タスク実行部３２２および処理領域計算部３２３を備えている。タスクスケジューラ３２１は、サブタスクの実行に必要な分割入力データと分割出力データのメモリ領域をデータ管理部３３に要求し、サブタスクの実行をタスク実行部３２２に要求する。タスク実行部３２２は、タスクスケジューラ３２１から要求されたサブタスクをアクセラレータに実行させる。処理領域計算部３２３は、入力分割データに対しサブタスクを実行するデータ領域を計算する。
【００６０】
タスクスケジューラ３２１は、プログラム解析部３１からＤＡＧが含む処理の実行要求を受信する。要求は、分割データに対して実行するサブタスクの単位で受信する。なお、サブタスクには、実行に必要な参照幅が含まれている。これはユーザプログラム２１から渡されたものである。サブタスクの実行に必要な参照幅は、必要に応じてデータスケジューラ３３１やタスク実行部３２２に伝えられる。
【００６１】
タスクスケジューラ３２１は、要求されたサブタスクのうちの、ＤＡＧの上流の処理に属するサブタスクから順番に処理を実行する。これは、データ管理部３３に対してサブタスクの実行に必要な分割入力データと分割出力データのためのメモリ領域の要求をＤＡＧの上流から順番に行うことを意味する。例えば図４に示すＤＡＧでは、処理７１や処理７３が上流の処理である。タスクスケジューラ３２１は、上流の処理に属するすべてのサブタスクの実行を完了した後、下流にある次の処理が含むサブタスクを実行する。このように各処理の実行は１つずつ遷移していく。
【００６２】
タスクスケジューラ３２１は、実行するサブタスクに必要な入力分割データの準備と出力分割データのメモリ領域の確保をデータ管理部３３に要求する。タスクスケジューラ３２１は、データ管理部３３に要求した分割入力データの準備とメモリ領域の確保完了の通知を受信後、タスク実行部３２２に該当するサブタスクを実行するよう通知する。また、タスクスケジューラ３２１は、タスク実行部３２２からサブタスクの実行完了通知を受信し、処理が完了したため入力分割データと出力分割データのメモリのロックを解除するようデータ管理部３３に通知する。
【００６３】
タスク実行部３２２は、タスクスケジューラ３２１からの指示を受け、タスクスケジューラ３２１から受信したユーザプログラム２１のサブタスクの具体的な処理を示すカーネル関数を用いてサブタスクを実行する。タスク実行部３２２は、サブタスクを実行するアクセラレータや入力アドレスや出力アドレスの情報に関して、データ管理テーブル３５を参照することにより判定できる。ただし、これらの情報はタスクスケジューラ３２１からタスク実行部３２２に通知されるようにしてもよい。また、タスク実行部３２２は、サブタスクを実行する被計算入力データの領域については、処理領域計算部３２３に問い合わせ、指示された範囲に対して処理を実行する。
【００６４】
さらに、タスク実行部３２２は、サブタスクの実行完了をタスクスケジューラ３２１に通知する。また、タスク実行部３２２は、有効幅管理テーブル３４の出力分割データのエントリにおいて、実行したサブタスクの入力分割データのエントリの有効幅の値からサブタスクの参照幅を減じた値を有効幅として登録する。
【００６５】
処理領域計算部３２３は、サブタスクが処理を行う入力分割データの被計算領域の範囲を計算する。この被計算領域は、入力分割データの本領域と、分割データの境界データのうちの有効幅に対応するデータから今回実行するサブタスクの参照幅Ａを減じた領域とを併せた領域である。図１０を参照して、具体的に説明する。分割データ９１１の有効幅９４が４のとき、図５Ａの３×３フィルタ８１をあるピクセルに対し実行するためには、隣接する１ピクセルを参照用として用いる必要がある（すなわち、参照幅Ａ＝１）。そこで分割データ９１１に対する３×３フィルタ８１を行うサブタスクの実行では、境界データの幅が３つの領域まで計算が行われ、残り１つの幅は参照用に用いられる。
【００６６】
［動作］
次に、本実施形態の動作について図面を用いて詳細に説明する。
【００６７】
まず、図２と図１１を用いてユーザプログラム２１の要求によりユーザの処理を示すＤＡＧを作成し、アクセラレータ制御部３にＤＡＧの実行を要求する動作について説明する。図１１は、かかる動作を例示するフロー図である。
【００６８】
まず、予約ＡＰＩと実行ＡＰＩを用いて作成されたユーザプログラムが２１が実行される（ステップＡ１）。
【００６９】
この場合、ユーザプログラム２１が実行ＡＰＩを呼び出したとき（ステップＡ２のＹｅｓ）、ＤＡＧ作成部２２がそれまで生成したＤＡＧをアクセラレータ制御部３に通知し、ＤＡＧの処理を実行するよう要求して、処理を完了する（ステップＡ５）。
【００７０】
一方、実行ＡＰＩ呼び出しでない場合（ステップＡ２のＮｏ）、ＤＡＧ作成部２２は予約ＡＰＩ呼び出しかどうか確認する（ステップＡ３）。
【００７１】
予約ＡＰＩ呼び出しである場合（ステップＡ３のＹｅｓ）、ＤＡＧ作成部２２は予約ＡＰＩで指定された処理と出力データをそれまで生成したＤＡＧに追加する（ステップＡ４）。予約ＡＰＩには指定された処理に必要な参照幅が引数として与えられるため、ＤＡＧ作成部２２は、この情報もＤＡＧに保持させる。ステップＡ４の後、または、予約ＡＰＩ呼び出しでない場合（ステップＡ３のＮｏ）、ステップＡ１に処理が戻る。
【００７２】
次に、図２と図１２を用いて、データ管理部３３にタスクスケジューラ３２１からサブタスクを実行するために必要な入力分割データの準備と出力分割データのメモリ領域の確保を要求された場合の動作についいて説明する。
【００７３】
データスケジューラ３３１は、タスクスケジューラ３２１からサブタスクを実行するために必要な入力分割データの準備と出力分割データのメモリ領域の確保の要求を受信する（ステップＢ１）。
【００７４】
データスケジューラ３３１はデータ管理テーブル３５を参照し、要求された入力分割データの計算済フラグがセットされていれば、データが準備完了と判断する（ステップＢ２のＹｅｓ）。
【００７５】
一方、入力データの準備が完了していない場合（ステップＢ２のＮｏ）、データスケジューラ３３１はデータ移動部３３２に入力データのロード要求を行う（ステップＢ３）。
データ移動部３３２は、要求された分割データをロードする。
【００７６】
また、データ移動部３３２は、ロードする分割データの境界幅を境界幅読み込み部３３４に問い合せ、境界データを作成する。また、データ移動部３３２は、作成した境界データの幅と有効幅の情報を有効幅管理テーブル３４の分割データの該当エントリに登録する（ステップＢ４）。ここで、ステップＢ４においてデータをロードするアクセラレータは、アクセラレータ間の負荷分散を考慮してラウンドロビン等で選択することが可能である。
【００７７】
次に、データスケジューラ３３１は、同期判定部３３３に問い合せ、入力分割データの同期が必要か確認する（ステップＢ５）。同期判定部３３３は、入力分割データに対し行われるサブタスクの参照幅が入力分割データの有効幅以下であるかを、有効幅管理テーブル３４を参照して判断する。参照幅が有効幅より大きい場合、同期判定部３３３はデータ分割の同期が必要と判定する（ステップＢ５のＹｅｓ）。
【００７８】
データスケジューラ３３１は同期が必要という判定を受けると、分割データの境界データの同期をデータ移動部３３２に依頼する。データ移動部３３２はデータ分割の境界データをその区分データを保持するデータ分割から同期し、同期した境界データの分割データの該当する有効幅管理テーブル３４のエントリにおいて有効幅の値を更新する。このとき、有効幅が境界幅と等しくなるよう同期が行われる（ステップＢ６）。
【００７９】
次に、データスケジューラ３３１は、入力データを確保したアクセラレータと同一のアクセラレータに出力分割データのためのメモリ領域を確保するようデータ移動部３３２に要求する。データ移動部３３２は、要求されたメモリ確保を行う（ステップＢ７）。
【００８０】
続いて、データスケジューラ３３１は、タスク処理部３２にサブタスクを実行するための入力分割データと出力分割データのメモリ領域の準備が完了したことを通知する（ステップＢ８）。また、データスケジューラ３３１は、必要に応じて準備が完了したアクセラレータや入出力データのアドレス情報等のサブタスクの実行に関する情報をタスク処理部３２に通知する。
【００８１】
次に、図２と図１３を用いてタスク処理部３２の動作を説明する。図１３はタスク処理部３２の動作を例示するフロー図である。
【００８２】
タスクスケジューラ３２１はイベントの発生を待っており、イベントが発生するとそれに対し処理を実行する（ステップＣ１）。
【００８３】
発生したイベントがプログラム解析部３１からのサブタスク実行要求の場合（ステップＣ２のＹｅｓ）、タスクスケジューラ３２１はサブタスクを実行するために必要な入力分割データと出力分割データのメモリ領域をデータ管理部３３に要求する（ステップＣ３）。このとき、タスクスケジューラ３２１は、ユーザＤＡＧを構成する全処理の全サブタスクの実行をプログラム解析部３１から受信する。そのサブタスクについて最も上流の処理を構成するサブタスクに関する要求だけをデータ管理部３３に対し行う。また、上流の処理が含む複数のサブタスクについては、すべてのサブタスクに関する要求が行われる。以後下流の処理を構成するサブタスクは上流の処理を構成するサブタスクがすべて完了し、下流のサブタスクの入力データの準備が完了した後、処理毎にすべてのサブタスクに関する要求が順次行われる（これは後述するステップＣ９に対応する）。
【００８４】
また、タスクスケジューラ３２１は、発生したイベントがデータスケジューラ３３１からのサブタスク実行のための入力分割データの準備と出力分割データのメモリ領域の確保の完了通知である場合（ステップＣ４のＹｅｓ）、タスク実行部３２２にサブタスクの実行を要求する（ステップＣ５）。
【００８５】
タスク実行部３２２は、処理領域計算部３２３に分割データの中で処理すべき領域を問い合わせ、指示された領域に対しサブタスクの処理を行う（ステップＣ６）。ここで、処理領域計算部３２３が指示する処理領域は、分割データが保持する境界データの有効幅からサブタスクが行う処理の参照幅だけ減じた領域と、分割データの区分データとを合わせた領域である。
【００８６】
タスク実行部３２２は、サブタスクの実行後、出力分割データの有効幅管理テーブル３４の該当エントリに入力分割データの有効幅から参照幅を減じた値を有効幅として登録する（ステップＣ７）。
【００８７】
続いて、タスクスケジューラ３２１は、データ管理部３３にサブタスクの実行が完了したことを通知する（ステップＣ８）。
【００８８】
次に、タスクスケジューラ３２１は、まだプログラム解析部３１から実行が要求されたサブタスクのうちの、入力分割データの準備と出力メモリ領域の確保の要求がデータ管理部３３になされていないサブタスクがあるか確認し、さらにそのサブタスクが属する処理より上流の処理に含まれるサブタスクがすべて完了しているか確認する（ステップＣ９）。
【００８９】
すべての条件に合致するサブタスクがある場合（ステップＣ９のＹｅｓ）、タスクスケジューラ３２１はそのサブタスクの入力分割データの準備と出力メモリ領域の確保の要求をデータ管理部３３に行う（ステップＣ１０）。
【００９０】
かかる構成を採用し、本実施形態では各分割データで隣接する分割データの領域を境界データとして冗長に保持し、ユーザプログラムから与えられた処理で参照に使用されるデータの幅だけ減じた境界データと区分データを処理領域として判別して処理を行い、分割データが保持する境界データで区分データと整合が取れている（一貫性（コンシステンシ）がある）幅を有効幅として管理し、ユーザプログラムから与えられた処理の参照幅に対し有効幅が不足する段階に達した時に境界データの同期（区分データからのコピー）を行うよう動作する。これにより、分割データをアクセラレータに保持したまま、ユーザプログラムから与えられる任意の処理を任意の順で連続して行い、かつ、処理の間で必要な分割データ間の境界データの同期に関するＩ／Ｏコストを削減することができる。したがって、本実施形態によると、複数のアクセラレータを用いてデータを分割して処理を行う場合に、任意の処理を任意の順で連続して高速に行うことができる。
【００９１】
＜実施形態２＞
次に、本発明の第２の実施形態について説明する。本実施形態では、コンピュータに対し第１の実施形態のアクセラレータ制御装置１の各部の動作を行わせる。
【００９２】
具体的には、コンピュータが保持するＣＰＵ（Central Processing Unit）とメモリに対し、次の動作を行わせる。すなわち、ユーザプログラム２１、ＤＡＧ作成部２２、プログラム解析部３１、タスクスケジューラ３２１、タスク実行部３２２、処理領域計算部３２３、データスケジューラ３３１、データ移動部３３２、同期判定部３３３、および、境界幅読み込み部３３４の機能をＣＰＵに行わせる。一方、有効幅管理テーブル３４、データ管理テーブル３５、メモリ管理テーブル３６、および、メインメモリ４として、コンピュータのメモリを使用する。
【００９３】
ここで、メモリとは広義の記憶手段であり、半導体メモリおよび一般に二次記憶と呼ばれるハードディスクドライブ（ＨＤＤ：Hard Disk Drive）やフラッシュディスクを含む。また、アクセラレータはコンピュータのＩ／Ｏスロットに挿入する形式でもよい。なお、Ｉ／Ｏデバイス用のインターコネクションを用いて、アクセラレータとコンピュータを接続することもできる。
【００９４】
本発明は、一例として、２つ以上のアクセラレータを含む計算装置における処理の高速化を図るために適用することができる。また、本発明は、例えば、上述の画像処理（フィルタ処理）や、差分法や有限要素法に基づく流体解析や構造解析にも適用することができる。さらに、本発明は、例えば、分子動力学計算（Molecular Dynamics）に基づくダイナミクスの解析や、分子力学計算（Molecular Mechanics）による分子構造の最適化などにも同様に適用することができる。
【００９５】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の態様に係るアクセラレータ制御装置のとおりである。
［形態２］
前記データ管理部は、前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う、
形態１に記載のアクセラレータ制御装置。
［形態３］
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅として保持するテーブルと、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新するタスク処理部と、を備え、
前記データ管理部は、前記テーブルが保持する有効幅を参照して、前記判定を行う、
形態１または２に記載のアクセラレータ制御装置。
［形態４］
前記タスク処理部は、前記少なくとも１つの区分データと、前記境界データのうちの有効幅から参照幅を差し引いた幅のデータとを対象として、前記アクセラレータに処理を実行させる、
形態３に記載のアクセラレータ制御装置。
［形態５］
ユーザプログラムが実行する処理を示すＤＡＧ（Directed Acyclic Graph）を生成するためのＡＰＩ（Application Program Interface）を提供するＤＡＧ作成部を備え、
前記ＡＰＩは、前記処理を示すカーネル関数および前記参照幅を引数とする、
形態１ないし４のいずれか一に記載のアクセラレータ制御装置。
［形態６］
上記第２の態様に係るアクセラレータ制御装置のとおりである。
［形態７］
上記第３の態様に係るアクセラレータ制御方法のとおりである。
［形態８］
前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行うステップを含む、
形態７に記載のアクセラレータ制御方法。
［形態９］
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅としてテーブルに保持するステップと、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新するステップと、を含み、
前記判定は、前記テーブルが保持する有効幅を参照して行われる、
形態７または８に記載のアクセラレータ制御方法。
［形態１０］
前記少なくとも１つの区分データと、前記境界データのうちの有効幅から参照幅を差し引いた幅のデータとを対象として、前記アクセラレータに処理を実行させる、
形態９に記載のアクセラレータ制御方法。
［形態１１］
ユーザプログラムが実行する処理を示すＤＡＧ（Directed Acyclic Graph）を生成するためのＡＰＩ（Application Program Interface）を提供するステップを含み、
前記ＡＰＩは、前記処理を示すカーネル関数および前記参照幅を引数とする、
形態７ないし１０のいずれか一に記載のアクセラレータ制御方法。
［形態１２］
上記第４の態様に係るプログラムのとおりである。
［形態１３］
前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う処理を、前記コンピュータに実行させる、
形態１２に記載のプログラム。
［形態１４］
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅としてテーブルに保持する処理と、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新する処理と、
前記テーブルが保持する有効幅を参照して、前記判定を行う処理と、を前記コンピュータに実行させる、
形態１２または１３に記載のプログラム。
［形態１５］
前記少なくとも１つの区分データと、前記境界データのうちの有効幅から参照幅を差し引いた幅のデータとを対象として、前記アクセラレータに処理を実行させる、
形態１４に記載のプログラム。
［形態１６］
ユーザプログラムが実行する処理を示すＤＡＧ（Directed Acyclic Graph）を生成するためのＡＰＩ（Application Program Interface）を提供する処理を前記コンピュータに実行させ、
前記ＡＰＩは、前記処理を示すカーネル関数および前記参照幅を引数とする、
形態１２ないし１５のいずれか一に記載のプログラム。
【００９６】
なお、上記特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【００９７】
この出願は２０１５年６月２５日に出願された日本出願特願２０１５−１２７９３６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００９８】
１    アクセラレータ制御装置
３    アクセラレータ制御部
４    メインメモリ
１０    マスタコンピュータ
２１    ユーザプログラム
２２    ＤＡＧ作成部
３１    プログラム解析部
３２    タスク処理部
３３    データ管理部
３４    有効幅管理テーブル
３５    データ管理テーブル
３６    メモリ管理テーブル
５１〜５３    アクセラレータ
６１〜６６    データ
７１〜７４    処理
８１    ３×３フィルタ
８２    ５×５フィルタ
９２    境界データ
９３    境界幅
９４    有効幅
１１１〜１１３    スレーブコンピュータ
３２１    タスクスケジューラ
３２２    タスク実行部
３２３    処理領域計算部
３３１    データスケジューラ
３３２    データ移動部
３３３    同期判定部
３３４    境界幅読み込み部
５１１〜５１３    プロセッサ
５２１〜５２３    アクセラレータメモリ
９１１〜９１３    分割データ
１００１    データ分割部
１００２    重複部分取捨選択部
１１１１〜１１１３    図形処理部
Ａ    参照幅
【図１】
2016208178.tif 000003
【図２】
2016208178.tif 000004
【図３】
2016208178.tif 000005
【図４】
2016208178.tif 000006
【図５Ａ】
2016208178.tif 000007
【図５Ｂ】
2016208178.tif 000008
【図６】
2016208178.tif 000009
【図７】
2016208178.tif 000010
【図８】
2016208178.tif 000011
【図９】
2016208178.tif 000012
【図１０】
2016208178.tif 000013
【図１１】
2016208178.tif 000014
【図１２】
2016208178.tif 000015
【図１３】
2016208178.tif 000016
【図１４】
2016208178.tif 000017
【手続補正書】
【提出日】平成29年12月14日(2017.12.14)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定するデータ管理手段と、を備える、
ことを特徴とする、アクセラレータ制御装置。
【請求項２】
前記データ管理手段は、前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う、
請求項１に記載のアクセラレータ制御装置。
【請求項３】
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅として保持するテーブルと、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新するタスク処理手段と、を備え、
前記データ管理手段は、前記テーブルが保持する有効幅を参照して、前記判定を行う、
請求項１または２に記載のアクセラレータ制御装置。
【請求項４】
前記タスク処理手段は、前記少なくとも１つの区分データと、前記境界データのうちの有効幅から前記参照幅を差し引いた幅のデータとを対象として、前記アクセラレータに処理を実行させる、
請求項３に記載のアクセラレータ制御装置。
【請求項５】
ユーザプログラムが実行する処理を示すＤＡＧ（Directed Acyclic Graph）を生成するためのＡＰＩ（Application Program Interface）を提供するＤＡＧ作成手段を備え、
前記ＡＰＩは、前記処理を示すカーネル関数および前記参照幅を引数とする、
請求項１ないし４のいずれか１項に記載のアクセラレータ制御装置。
【請求項６】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとを保持するアクセラレータと、
前記境界データとして、前記アクセラレータが実行する処理で参照されるデータの幅を表す参照幅よりも大きい幅を有するデータを、前記アクセラレータに保持させるデータ管理手段と、を備える、
ことを特徴とする、アクセラレータ制御装置。
【請求項７】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持し、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定する
ことを特徴とする、アクセラレータ制御方法。
【請求項８】
前記一貫性があるデータの幅が前記参照幅より小さいと判定した場合、前記アクセラレータに処理を実行させる前に、前記境界データと前記少なくとも１つの区分データに隣接する区分データとの間で同期を行う
請求項７に記載のアクセラレータ制御方法。
【請求項９】
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅を有効幅としてテーブルに保持し、
前記アクセラレータが処理を実行した後、前記テーブルが保持する有効幅から前記参照幅を差し引いた値によって、前記テーブルが保持する有効幅を更新し、
前記判定は、前記テーブルが保持する有効幅を参照して行われる、
請求項７または８に記載のアクセラレータ制御方法。
【請求項１０】
データを分割して得られた複数の区分データの少なくとも１つの区分データと前記少なくとも１つの区分データに隣接する区分データに含まれるデータである境界データとをアクセラレータに保持させる処理と、
前記境界データのうちの前記少なくとも１つの区分データに隣接する区分データと一貫性があるデータの幅が、前記アクセラレータが実行する処理において参照されるデータの幅を表す参照幅以上であるかどうかを判定する処理と、をコンピュータに実行させる、
ことを特徴とする、プログラム。
【国際調査報告】
2016208178.tif 000018
2016208178.tif 000019