複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算を制御する演算制御装置であって、前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、前記属性群保持部により保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする演算制御装置。前記並列プロセッサは、OpenCLOpenComputingLanguageデバイスであり、各前記属性群は、カーネルの引数として設定されることを特徴とする請求項1に記載の演算制御装置。複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算を制御する演算制御方法であって、前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持し、保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行い、前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする演算制御方法。前記並列プロセッサは、OpenCLOpenComputingLanguageデバイスであり、各前記属性群は、カーネルの引数として設定されることを特徴とする請求項3に記載の演算制御方法。複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算の制御に際して、前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持し、保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行う処理をコンピュータに実行させ、前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とするプログラム。前記並列プロセッサは、OpenCLOpenComputingLanguageデバイスであり、各前記属性群は、カーネルの引数として設定されることを特徴とする請求項5に記載のプログラム。複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリと、前記複数の演算素子による並列演算を制御する演算制御部とを備える並列プロセッサであって、前記演算制御部は、前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、前記属性群保持部により保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする並列プロセッサ。OpenCLOpenComputingLanguageデバイスであり、各前記属性群は、カーネルの引数として設定されることを特徴とする請求項7に記載の並列プロセッサ。ところで、並列プロセッサ、特に図20に示すOpenCLデバイス14のように多数のコアPEを搭載した場合には、コアの数と同数のプライベートメモリ20が存在し、さらに、CU16の数と同数のローカルメモリ22が存在する。これらのメモリを全て1つのキャッシュ制御機構で統一的に管理するのは、ハードウェアのコストが高く、一般的には実現困難である。他方、キャッシュ制御機構が無いと、OpenCLシステム10のユーザ以下、単にユーザと呼ぶには、複数のメモリ空間が見えてしまう。前述したように、利用頻度の高いデータを、なるべくより高速なメモリ空間すなわちより上位階層のメモリ空間に移動してから参照するようにするなど、より良い性能を追求するためには、演算処理に伴う階層の異なるメモリ間でのデータ移動について、ユーザプログラムで明示的に指示するする必要がある。これを正しく実現するためには、ユーザには、上述した各メモリ同士間の速度差、容量差、機能差等に関する知識を持つ必要がある。図23を参照して具体例を説明する。図23は、複数のデータブロックデータブロックA~Dから、データブロックA~Bを得る演算処理を実行する場合を説明するための図である。なお、図23において、ホストからデバイスへのカーネル転送の図示を省略している。また、データブロックA~Dは、上述したステップ1でホスト12からOpenCLデバイス14に転送された参照データであり、グローバルメモリ32に格納される。データブロックA~Bは、上述したステップ2にいてデータブロックA~Dに対して行われた演算の結果であり、グローバルメモリ32に書き込まれ、後に、上述したステップ3でホスト12に転送される。ここで、ステップ2の処理、すなわちカーネルを実行する演算処理を説明する。なお、本明細書において、以下、プライベートメモリについて、複数が有り得る場合には、プライベートメモリ群という。演算処理の性能を追求しなければ、演算において、プライベートメモリ群/ローカルメモリ22を使わずに、グローバルメモリ32のみを使用する手法が考えられる。この場合、グローバルメモリ32と、プライベートメモリ群/ローカルメモリ22間のデータ転送が無い。この手法は、制御が単純であるが、性能が良くない。演算処理をより良い性能で行うために、上述したように、演算対象のデータをグローバルメモリ32からプライベートメモリ群/ローカルメモリ22に転送してから演算を行い、演算の結果をプライベートメモリ群/ローカルメモリ22に格納してからグローバルメモリ32に転送する手法が用いられる。この手法を用いる場合について、まず、全てのアイテムが同時に並行して実行可能なときの手順ステップA~Cを説明する。なお、全てのアイテムが同時に並行して実行可能とは、PE数が総アイテム数以上であり、かつ、プライベートメモリ群とローカルメモリの容量は、演算対象の全てのデータを格納可能できることなどを意味し、この場合、演算対象のデータをグローバルメモリ32からプライベートメモリ群/ローカルメモリ22への転送、各PE18による演算の並列実行、演算結果をプライベートメモリ群/ローカルメモリ22からグローバルメモリ32への転送が一度しか行われない。<ステップA>:グローバルメモリ32に格納されたデータブロックA~Dをプライベートメモリ群/ローカルメモリ22に転送する。この転送は、例えば、演算対象のデータのうちの、PE18によりのみ使用されるデータをPE18のプライベートメモリに転送し、複数のPE18により共有されるデータをローカルメモリ22に転送することである。なお、以下において、グローバルメモリ32からプライベートメモリ群/ローカルメモリ22へのデータ転送をリード転送という。また、データブロックA~Dのような、リード転送されるデータブロックをリードブロックRBという。<ステップB>:各PE18上で演算処理を実行し、演算処理の結果を該PE18がアクセスできるプライベートメモリ/ローカルメモリ22に格納する。<ステップC>:ステップBの演算処理により得られ、プライベートメモリ群/ローカルメモリ22に格納されたデータブロックA~Bをグローバルメモリ32に転送する。なお、以下において、プライベートメモリ群/ローカルメモリ22からグローバルメモリ32へのデータ転送をライト転送という。また、データブロックA~Bのような、プライベートメモリ群/ローカルメモリ22に格納され、ライト転送されるデータブロックをライトブロックWBという。該3つのステップの全てについて、ユーザにより作成されたカーネルの中で明示的に指定される必要がある。これらの指定は、演算処理の内容や、OpenCLデバイス14の構成PE数=プライベートメモリ数や、個々のプライベートメモリの容量、ローカルメモリの容量などに依存する内容が含まれる。例えば、演算対象となるリードブロックRBが複数あり、かつ全てが一度に一つのワークグループ内のプライベートメモリ群/ローカルメモリ22に入りきらないため、それぞれのリードブロックRBをサブブロックに分割しなければならない場合に、該複数のリードブロックRBに対して、ステップAにおいて、サブブロック間の対応付け方法を指定する必要がある。リードブロックRBのサブブロック間の対応付け方法は、上記複数のリードブロックRBのサブブロック同士で、どのリードブロックRBのサブブロック同士を、同一のワークグループ内のプライベートメモリ群、または同一ワークグループ内のローカルメモリ22に転送するかを意味する。これは、演算処理の内容、またどのように分割すべきかは、OpenCLデバイス14の構成に依存する。同様に、演算結果として複数のライトブロックWBがある場合には、該複数のライトブロックWBのそれぞれのサブブロックが、どのようなリードブロックRBのサブブロック同士の組合せの下で、演算結果として求められることになるか、という意味での対応付け方法も指定する必要がある。なお、ライトブロックWBの各サブブロックの内容とは、すなわち各ワークグループのプライベートメモリ群またはローカルメモリ22に演算結果として格納されたデータである。そしてライトブロックWBをローバルメモリ32へ転送するとは、該データをグローバルメモリ32内のライトブロックWBの各サブブロック位置に書き込むことを意味する。リードブロックRBの対応付け方法と同様に、ライトブロックWBの対応付け方法も、演算処理の内容と、OpenCLデバイス14の構成に依存する。上記のように所要のデータブロック全体がワークグループ内のメモリに入りきらない場合以外、PEの総数が、インデックス空間のサイズより小さいなどのときにおいても、全てのアイテムが同時に並行して実行することができないため、PEによるアイテムの並列実行を複数回繰り返す必要がある。当然ながら、並列実行の繰り返しに合わせてリード転送とライト転送も繰り返す必要がある。この場合、演算処理の内容とOpenCLデバイス14の構成に応じて、データブロックの分割方法、データブロックを分割して得たサブブロック間の対応付け方法を指定する必要がある。データブロックの分割方法は、該データブロックをどのようにしてサブブロックに分割するかを意味する。サブブロックSBは、リード転送とライト転送の転送単位である。以下において、リードとライトを区別する必要がある場合については、リードブロックRBを分割して得たサブブロックをサブリードブロックSRBといい、ライトブロックWBを分割して得たサブブロックサブライトブロックSWBという。サブブロックSB間の対応付け方法とは、異なるリードブロックあるいはライトブロックに夫々含まれるどのサブブロックSB同士を、同時に同一のプライベートメモリ群、または同一のローカルメモリ22上に存在させるかを意味する。データブロックの分割方法はOpenCLデバイス14の構成に依存し、一方、サブブロックの対応付け方法は演算処理の内容に依存する。分割が必要になると、データブロックを分割しない場合より、さらに指定が複雑である。図24は、OpenCLデバイス14に演算処理を行わせるために、ユーザにより指定する必要のある内容をまとめて示す。図示のように、第1の部分は、リード転送用の指定であり、演算処理の内容とOpenCLデバイス14の構成に依存する部分が含まれる。演算処理の内容とOpenCLデバイス14の構成に依存する部分は、例えば、リードブロックRBを分割するか否かの指定例1や、分割する場合における分割方法の指定例2とサブリードブロックSRB間の対応付け方法の指定例3がある。第2の部分は、リードブロックRBまたはサブリードブロックSRBに対する演算処理の指定である。演算処理を指定するための内容であるため、当然演算処理の内容に依存する。さらに、この部分は、リード転送用の指示に合わせる必要があるため、アイテムの並行実行の回数の指定例4など、OpenCLデバイス14の構成に依存する内容が含まれる。第3の部分は、ライト転送用の指定であり、リード転送用の指示に合わせる必要があるため、必然的に、演算処理の内容とOpenCLデバイス14の構成に依存する部分例5が含まれる。このように、より良い性能を追求するために、ユーザは、演算処理の内容と、OpenCLデバイス14の構成に合わせてカーネルユーザコードを開発する必要がある。しかし、OpenCLに準拠したデバイスであっても、メーカが異なれば、各メモリ空間の容量、アクセス速度、アクセス遅延、キャッシュ制御の有無などの点において、千差万別である。そのため、あるOpenCLデバイスにとって、階層の異なるメモリ間のデータ移動が理想的に開発されたユーザコードであっても、他のOpenCLデバイスや、同一シリーズであるものの世代が違うOpenCLデバイスなどにとっては、反って性能劣化を引き起こすものになってしまう可能性がある。つまり、ユーザコードの性能上の可搬性が低い。ある程度の性能可搬性を実現するために、特定のOpenCLデバイスを対象にユーザコードを開発するのではなく、なるべく、既存の多くの種類のOpenCLデバイスの構成を念頭に入れつつ、ユーザコードを作成することが考えられる。しかし、そうした作業は、演算処理の設計者からみれば本質的でない作業のために多大な負担に感じる上に、コードの可読性の低下、そして煩雑度の増大等を引き起こす要因にもなる。本発明は、上記事情を鑑みてなされたものであり、OpenCLデバイスのような並列プロセッサに対して、演算処理に伴う階層の異なる複数のメモリ間でのデータ移動について、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高める技術を提供する。本発明の1つの態様は、複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算を制御する演算制御方法である。該方法は、2つの工程を有する。1つ目の工程は、前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する工程である。2つ目の工程は、保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行う工程である。前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない1つ以上の属性を含む。前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものである。なお、上記態様の方法を装置に置換えて表現したものや該装置を含むシステム、該方法を実行する並列プロセッサ、該方法をコンピュータに実行せしめるプログラムなども、本発明の態様としては有効である。本発明にかかる技術によれば、OpenCLデバイスのような並列プロセッサに対して、演算処理に伴う階層の異なる複数のメモリ間でのデータ移動について、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高めることができる。以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェアとソフトウェアプログラムの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、ハードウェアとソフトウェアのいずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体non-transitorycomputerreadablemediumを用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体tangiblestoragemediumを含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ、光磁気記録媒体例えば光磁気ディスク、CD-ROMReadOnlyMemoryCD-R、CD-R/W、半導体メモリ例えば、マスクROM、PROMProgrammableROM、EPROMErasablePROM、フラッシュROM、RAMRandomAccessMemoryを含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体transitorycomputerreadablemediumによってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。図1は、本発明の実施の形態にかかるOpenCLシステム100を示す。OpenCLシステム100は、OpenCLホスト以下、単にホストという110、OpenCLデバイス以下、単にデバイスという120を備える。デバイス120は、演算制御部130、演算ユニット140を備える。演算制御部130は、属性群格納部132、シナリオ決定部134を有する。演算ユニット140は、デバイスメモリ150、複数のコンピュートユニットCU160、CU160毎に設けられたローカルメモリ170を有する。デバイスメモリ150は、グローバルメモリ152、コンスタントメモリ154を有する。また、夫々のCU160は、複数のPE162と、PE162毎に設けられたプライベートメモリ164を有する。なお、グローバルメモリ152、コンスタントメモリ154、CU160、PE162、プライベートメモリ164、ローカルメモリ170は、通常のOpenCLデバイスにおける同一名称のものと同様であり、ここで詳細な説明を省略する。ホスト110は、デバイス120に演算を行わせる際に、ユーザにより引数の指定がなされた、該演算に対応するカーネルをデバイス120に転送する。デバイス120において、演算制御部130は、ホスト110からのカーネルに基づいて演算ユニット140を制御する。演算ユニット140は、演算制御部130の制御に従って演算を行い、演算結果を得る。演算ユニット140が行う演算は、演算対象のデータをデバイスメモリ150からプライベートメモリ164/ローカルメモリ170への転送リード転送と、演算結果のデータをデバイスメモリ150への転送ライト転送が伴う。通常、演算対象のデータと演算結果のデータのいずれもグローバルメモリ152に格納されるため、以下において、リード転送とライト転送がグローバルメモリ152と、プライベートメモリ164/ローカルメモリ170との間の転送であるとして説明をする。演算対象のデータがコンスタントメモリ154にも格納される場合には、リード転送がコンスタントメモリ154からプライベートメモリ164/ローカルメモリ170への転送も含むことを理解されたい。分かりやすいように、図2に示す具体例を参照しながら、本実施の形態のOpenCLシステム100を詳細に説明する。なお、以下の説明における用語次元は、前述したインデックス空間の次元に対応する。OpenCLでは、インデックス空間は、3次元まで指定することができるが、説明上の便宜のため、2次元を例にする。図2に示すように、ユーザが実現したい処理は、式1に示す処理である。演算対象のデータは、リードブロックPとリードブロックQに含まれる各データである。演算結果のデータは、ライトブロックRに含まれる各データである。図2に示す例では、ライトブロックは、ライトブロックRの1つのみである。式1に示す処理を実現するためのカーネルは、当然ながら、ユーザにより作成される。カーネルの作成は、デバイス120の各PE162により実行されるプログラムコード以下、ユーザ指定処理というの作成処理と、引数の指定処理を含む。本実施の形態のOpenCLシステム100では、OpenCLで定められた各引数以外に、さらに、8つの属性を含む属性群がサポートされている。これらの8つの属性は、サイズ属性、リード属性、ライト属性、余白属性、放送属性、割当属性、階層属性、依存属性であり、ユーザにより、カーネルの引数として、全てのリードブロックとライトブロックに対して指定される。なお、属性の指定に際して、必ずしも8つの属性の全てを指定する必要があるとは限らない。上記属性群に含まれる8つの属性は、グローバルメモリ152と、プライベートメモリ164及び/またはローカルメモリ170との間で転送される方式転送方式を決定するために参照する必要があるパラメータである。以下、特別な説明が無い限り、転送は、グローバルメモリ152と、プライベートメモリ164及び/またはローカルメモリ170との間の転送を意味する。転送方式は、下記の内容が含まれる。1転送方式1:分割の有無該転送方式1は、分割無し方式と分割有り方式のいずれかである。リードブロックについて、分割無しとは、該リードブロックの全てのデータを一度のリード転送により転送することを意味し、分割有りとは、該リードブロックを複数のサブリードブロックSRBに分割し、一度のリード転送により一つのワークグループへ1つのサブリードブロックSRBのみを転送することを意味する。ライトブロックについて、分割無しとは、該ライトブロックの全てのデータ演算結果を一度のライト転送によりグローバルメモリ152に転送することを意味し、分割有りとは、該ライトブロックを複数のサブライトブロックSWBに分割し、一度のライト転送により一つのワークグループから1つのサブライトブロックSWBのみを転送することを意味する。2転送方式2:分割方式該転送方式2は、該データブロックを複数のサブブロックに分割する場合に、どのように分割するかを意味する。3転送方式3:分配方式サブリードブロックSRBの対応付け方法該転送方式3は、リードブロックを対象として、上記転送方式1が分割有りの場合に指定される。すなわち分配方式は、リードブロックが複数あるときには、同じ回のリード転送により転送される、各リードブロックからの1つずつのサブリードブロックSRBをどのようにしてプライベートメモリ164/ローカルメモリ170に分配するかを意味する。リードブロックが1つしか無い場合には、分割方式は、該サブリードブロックSRBをプライベートメモリ164/ローカルメモリ170に均等に分配する方式になる。4転送方式4:統合方式サブライトブロックSWBの対応付け方法該転送方式4は、ライトブロックを対象として、上記転送方式1が分割有りの場合に指定される。なお、統合するとは、グローバルメモリ152における、該ライトブロックの個々のサブライトブロックSWBに割り当てられた領域に書き込むことを意味する。統合方式は、ライトブロックが複数あるときには、同じ回のライト転送により転送される、プライベートメモリ群/ローカルメモリ170に格納されている複数のサブライトブロックSWBを、どのようにして夫々のライトブロックに統合するかを意味する。ライトブロックが1つしか無い場合には、統合方式は、プライベートメモリ群/ローカルメモリ170に格納された該ライトブロックの各サブライトブロックSWBのデータを、上記1つのライトブロックに統合する方式になる。上記した転送方式は、従来では、この転送方式は、ユーザコードにより指定される必要がある。演算処理の内容、及びデバイス120具体的には演算ユニット140の構成に依存するため、ユーザコードが煩雑であり、可搬性を維持するのは極めて困難と言ってよい。こうした状況の下、本願発明の発明者が鋭意研究模索した結果、演算処理の内容とOpenCLデバイスの構成の双方を考慮しつつその都度、個々のユーザが時間を費やして場当たり的に転送方式を決定してきた処理を、OpenCLデバイスの構成に依存する処理と依存しない処理とに分け、さらに、OpenCLデバイスに依存する処理については、OpenCLデバイスに依存しない処理により指定したパラメータと、OpenCLデバイスの構成を示すパラメータとに基づいて自動的に決定することに成功し、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高める技術を確立した。本実施の形態のOpenCLシステム100では、OpenCLデバイスに依存しない処理は、データブロックに対する上記属性群の指定に該当する。これらの属性群は、転送方式を決定する上で必要なパラメータであるものの、OpenCLデバイスの構成に依存しないものである。以下、詳細に説明する。なお、以下において、各属性が転送方式を決定する上で必要であるものの、OpenCLデバイスの構成に依存しないものであることを繰り返せず、このこと以外の要素についてのみを説明する。上記8つの属性は、さらに、固有属性、演算属性、ポリシ属性の3種類に分けられる。図2に示す各データブロックの例を参照しながら説明する。固有属性は、演算処理の内容及びユーザの意志に関係なく、当該データブロックが持つ固有の属性である。本実施の形態において、固有属性は、下記のサイズ属性である。<サイズ属性>この属性は、データブロックのサイズを示すパラメータであり、例えば、次元毎のワード数、及びワード毎のバイト数やビット数である。この属性は、全てのデータブロックに対して必ず指定される。そのため、図2に示すリードブロックP、リードブロックQ、及びライトブロックRのサイズ属性は、下記のようになる。リードブロックPは、2次元のデータブロックであり、X方向サイズLxとY方向サイズLyが、共に3ワードである。なお、リードブロックPは、1ワードのビット数が、8ビットである。そのため、サイズ属性として、リードブロックPに対して、X方向サイズLx:3、Y方向サイズLy:3、ビット数/ワード:8が指定される。同様に、リードブロックQに対して、X方向サイズLx:640、Y方向サイズLy:480、ビット数/ワード:16が指定される。また、ライトブロックRに対して、X方向サイズLx:640、Y方向サイズLy:480、ビット数/ワード:32が指定される。演算属性は、ユーザの意志には関係しないものの、演算処理の内容に関係する属性である。本実施の形態において、演算属性は、下記のリード属性、ライト属性、を含む。演算属性は、各データブロックが1つ以上のサブブロックに分割される仮定の元で指定される。ライトブロックについては、さらに、リードブロックが既にプライベートメモリ群/ローカルメモリ上に存在する仮定が加えられる。なお、データブロックが1つのサブブロックに分割されることは、分割されないことである。<リード属性>この属性は、まず、該データブロックが演算対象のデータつまり、リード転送されるデータであるか否か、及び演算対象のデータである場合の転送順位を示す。転送順位は、該データブロックの各サブブロックを、どのような順位で転送するかを指定するパラメータである。ライトブロックは、リード転送されないので、リード転送されないことを示すNONEが指定される。リードブロックは、リード転送されるデータブロックであるので、リード転送されるとして、転送順位が指定される。本実施の形態のOpenCLシステム100において、リード属性として設定される転送順位は、TOPLEFT、BOTTOMRIGHT、ランダムが指定可能である。なお、ランダムが指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。TOPLEFTは、左上端のサブブロックから転送することを示し、BOTTOMRIGHTは、右下端のサブブロックから転送することを示す。図3は、リード属性としてTOPLEFTが指定された場合のサブブロックの転送順位を示す。図3に示すように、この場合、グローバルメモリ152に格納されたデータブロックリードブロックは、転送順位が、左上端のサブブロック1、サブブロック1の右隣のサブブロック2、サブブロック3の右隣のサブブロック3、となっている。図2に示す各データブロックのリード属性を説明する。式1に示す演算処理の内容に基づいて、リードブロックPとリードブロックQは、リード転送されるデータであるため、リード属性として、転送順位がTOPLEFTに指定される。一方、ライトブロックRは、リード転送されるデータではないため、リード属性がNONEに指定される。<ライト属性>この属性は、まず、該データブロックが演算結果のデータつまり、ライト転送されるデータであるか否か、及び演算結果のデータである場合の転送順位を示す。転送順位は、各サブライトブロックSWBを、どのような順位で転送するかを指定するパラメータである。リードブロックは、ライト転送されないので、ライト転送されないことを示すNONEが指定される。ライトブロックは、ライト転送されるデータブロックであるので、ライト転送されるとして、転送順位が指定される。本実施の形態のOpenCLシステム100において、ライト属性として設定される転送順位は、TOPLEFT、BOTTOMRIGHT、ランダムが指定可能である。なお、ランダムが指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。リードブロックは、ライト転送されないので、ライト転送されないことを示すNONEが指定される。そのため、図2に示すリードブロックPとリードブロックQは、ライト属性としてNONEが指定される。ライトブロックは、ライト転送されるデータブロックであるので、ライト転送されるとして、上記転送順位が指定される。この転送順位は、該データブロックの各サブブロックを、どのような順位で転送するかを指定するパラメータである。本実施の形態のOpenCLシステム100において、ライト属性として設定される転送順位は、リード属性として設定される転送順位と同様に、TOPLEFTと、BOTTOMRIGHTと、ランダムが指定可能である。ランダムが指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。ライト属性として設定される転送順位の夫々のパラメータの意義は、リード属性として設定される転送順位の相対応するパラメータと同一であるので、ここで詳細な説明を省略する。図2に示す各データブロックのライト属性を説明する。式1に示す演算処理の内容に基づいて、ライトブロックRは、ライト転送されるデータであるため、ライト属性として、転送順位がTOPLEFTに指定される。一方、リードブロックPとリードブロックQは、ライト転送されるデータではないため、ライト属性がNONEに指定される。ポリシ属性は、演算処理の内容と共に、ユーザがどのように転送及び演算処理を実行したいかの意志に関係する属性である。本実施の形態のOpenCLシステム100において、ポリシ属性は、余白属性、放送属性、割当属性、階層属性、依存属性を含む。ポリシ属性も、各データブロックが1つ以上のサブブロックに分割される仮定の元で指定される。ライトブロックについては、さらに、ライトブロックが既にプライベートメモリ20/ローカルメモリ22上に存在する仮定が加えられる。なお、データブロックが1つのサブブロックに分割されることは、分割されないことである。<余白属性>この属性は、リードブロックを対象とするパラメータであり、サブリードブロックSRB内のデータと共に転送される、該サブリードブロックSRBの境界と隣接する該サブリードブロックSRB外のデータの量を示すパラメータである。また、余白属性は、次元毎に指定される。余白属性のパラメータの単位は、ワードである。なお、ライトブロックについては、余白属性を指定できない、または指定したとしても無視されるようになっている。図4は、余白属性として、X方向に1、Y方向に2が指定された場合に該データブロックリードブロックの各サブリードブロックSRBの転送時の転送範囲を示す。この場合、該サブリードブロックSRBの転送時の転送範囲は、該サブリードブロックSRB内のデータに加え、該サブリードブロックSRBの左右両側の境界に隣接する1列ずつのデータと、上下両端の境界に隣接する2行ずつのデータが含まれる。なお、図4では、データブロックの上端に位置するサブリードブロックSRBを例としており、該サブリードブロックSRBの上端の境界に隣接するデータが無いため、該サブリードブロックSRBの転送時の転送範囲には、上端の境界に隣接するデータが含まれない。後に詳細に説明するが、本実施の形態のOpenCLシステム100では、各リードブロックについて、1度のリード転送時に1つのCU160に対して1つのサブリードブロックSRBが転送され、1度のリード転送により該CU160のプライベートメモリ/ローカルメモリに転送された各サブブロックサブリードブロックSRBを対象として該CU160により演算が行われる。そして、演算の結果は、夫々のライトブロックの1つのサブブロックとして該CU160からグローバルメモリに転送される。例えば、2次元画像に対して3×3のコンボリューション演算を行う場合、注目画素と上下左右の4つの方向において、該注目画素に隣接する1画素が必要である。サブリードブロックSRB内のデータのみが転送されるのでは、該サブリードブロックSRBの最も外側に位置する各画素に対する演算ができない。そのため、この場合、余白属性として、X方向とY方向に共に1を指定する必要がある。図2に示す各データブロックの余白属性を説明する。なお、余白属性の指定は、他の属性の指定と関係するため、余白属性のみでは説明しにくい。そのため、ここでは、図2に示す各データブロックに対して指定された余白属性の値のみを示し、それらの意義の詳細については後述する。リードブロックPとリードブロックQは、余白属性の指定対象であるが、リードブロックPに対しては、X方向とY方向のいずれについても余白が0に設定される。また、リードブロックQに対しては、X方向の余白が0、Y方向の余白が9に指定される。従って、リードブロックPの転送時には、サブリードブロックSRB内のデータのみが転送される。一方、リードブロックQの転送時には、サブリードブロックSRB内のデータに加え、該サブリードブロックSRBと下端で隣接する9行のデータも転送される。ライトブロックRは、ライト転送されるデータであるため、余白属性の指定対象ではない。すなわち、ライトブロックRの転送時には、当該サブライトブロックSWB内のデータのみが転送される。<放送属性>この属性は、各リードブロックについてはサブリードブロックSRBの転送先、各ライトブロックについてはサブライトブロックSWBの転送元が、プライベートメモリとローカルメモリのいずれになるかを指定するパラメータであり、ONとOFFのいずれである。例えば、図5に示すように、放送属性のONは、上記転送先または転送元としてローカルメモリを指定し、放送属性のOFFは、上記転送先または転送元としてプライベートメモリを指定する。図2に示す各データブロックの放送属性を説明する。なお、放送属性の指定も、他の属性と関係するため、放送属性のみでは説明しにくい。そのため、ここでは、図2に示す各データブロックに対して指定された放送属性の値のみを示し、それらの意義の詳細については後述する。リードブロックPは、放送属性がONに指定される。そのため、リードブロックPの転送時に、各サブリードブロックSRBは、ローカルメモリ170に転送される。リードブロックQとライトブロックRは、放送属性が0FFに指定される。そのため、リードブロックQの転送時には、各サブリードブロックSRBは、プライベートメモリ164に転送される。また、ライトブロックRのサブライトブロックSWBは、プライベートメモリ群からグローバルメモリ152に転送される。<割当属性>この属性は、サブリードブロックSRBとサブライトブロックSWBをどのようにしてCU160のプライベートメモリ群/ローカルメモリに割り当てる割当方式を示すパラメータである。本実施の形態のOpenCLシステム100では、縦優先と横優先の2つの割当方式がサポートされる。割当属性を詳細に説明する前に、まず、ワークグループサイズWGsと、1つのアイテムに割り当てるデータ量を説明する。放送属性がOFFのデータブロックに対応するワークグループサイズWGsは、1つのワークグループ内のアイテム数により表されるデータ量であり、例えばアイテム数がNであれば、ワークグループサイズWGsはNワードになる。一方、放送属性がONのデータブロックに対応するワークグループサイズWGsは、常に1と見なされる。以降、放送属性がOFFのデータブロックに対応するワークグループサイズWGsを単にワークグループサイズWGsと呼ぶ。このワークグループサイズWGsは、後にデバイス120における演算制御部130のシナリオ決定部134により決定されるが、ユーザが、カーネルの作成時に、その最大値と最小値のいずれをとるかを指定することができる。また、1つのアイテムに割り当てるデータ量も、後にシナリオ決定部134により決定される。ワークグループサイズWGsが最小値をとる場合とは、1アイテムが1PEに対応する場合である。それに対し、PEのプライベートメモリをMM:2以上の整数分割してMアイテムを1PEに対応させることで、ワークグループサイズWGsを最大M倍大きく指定できるOpenCLデバイスの場合、最大値は最小値のM倍となる。一方、最大値のワークグループサイズWGsを利用する場合、1PE当たりのプライベートメモリは最小値のワークグループサイズWGsを利用する場合のM分の1となるだけである。以下、説明を簡単にするため、シナリオ決定部134は、常に、ワークグループサイズWGsとしてその最小値を採用するものとし、その結果、1アイテムが1PEに対応するので、以降、アイテムという表現の代わりにPEという表現を用いる。縦優先は、サブブロックのX方向のサイズSBsxがワークグループサイズWGsであり、Y方向のサイズSBsyが1つのアイテムに割り当てるデータ量、すなわち1PEに割り当てるデータ量であるようにデータブロックを割り当てる方式である。割当属性として縦優先が指定されたデータブロック内の各サブブロックは、1サブブロックが1ワークグループに対応し、かつ、該サブブロック内の1列のデータが該ワークグループ内の1つのPE162のプライベートメモリ164に対応するように、グローバルメモリ152とプライベートメモリ164間で転送される。図6は、割当属性として縦優先が指定されたリードブロックの場合の例を示す。この場合、夫々のサブリードブロックSRBは、該サブリードブロックSRB内の全てのデータが同一のワークグループ内のPE162のプライベートメモリ164に格納され、かつ、該サブブロック内の同列のデータが同一のPE162のプライベートメモリ164に格納されるように、グローバルメモリ152からプライベートメモリ164に転送される。横優先は、サブブロックのX方向のサイズSBsxがワークグループサイズWGsの整数倍になるようにデータブロックを分割する方式である。なお、サブブロックのY方向のサイズSBsyは、後にシナリオ決定部134により決定される。割当属性として横優先が指定されたデータブロック内の各サブブロックは、1サブブロックが1つのワークグループに対応し、該サブブロック内の全てのデータが、同一のワークグループに含まれるPE162のプライベートメモリ164に転送される。さらに、サブブロックの各行は、該行をワークグループサイズWGsの量毎に区切って得た整数個の区切りブロックのデータが、区切りブロック毎に、該ワークグループ内のWGs個のPE162のプライベートメモリ164に均等に分配される。図7は、割当属性として横優先が指定されたリードブロックの場合の例を示す。なお、該例では、サブライトブロックSWBのY方向のサイズSBsyが1ワードとされている。つまり、該リードブロックは、サブリードブロックSRBのX方向のサイズSBsxがワークグループサイズWGsの整数倍であり、行数が1であるように分割される。図示のように、この場合、該リードブロックの夫々のサブリードブロックSRBサは、該サブリードブロックSRB内の全てのデータが同一のワークグループ内のPE162のプライベートメモリ164に格納されるように転送される。さらに、該サブリードブロックSRBを行方向にワークグループサイズWGsの量毎に区切って得た整数個の区切りブロックのデータが、区切りブロック毎に、該ワークグループ内のWGs個のPE162のプライベートメモリ164に均等に分配されるように転送される。例えば、データ1から、データaの前のデータまでの複数のデータは、1つの区切りブロックを構成しており、同一のワークグループの複数のPE162のプライベートメモリ164に夫々格納されるように転送される。また、データaから、データjの前のデータまでの複数のデータも、1つの区切りブロックを構成しており、ワークグループの複数のPE162のプライベートメモリ164に夫々格納されるように転送される。図2に示す各データブロックの割当属性を説明する。なお、割当属性の指定も、他の属性と関係するため、割当属性のみでは説明しにくい。そのため、ここでは、図2に示す各データブロックに対して指定された割当属性の値のみを示し、それらの意義の詳細については後述する。リードブロックPは、割当属性として縦優先が指定されたとする。リードブロックQとライトブロックRも、割当属性が縦優先に指定されたとする。<階層属性>この属性は、1以上の自然数で指定される階層数である。同一の階層数が指定された複数のリードブロックは、1度のリードあるいはライト転送により、夫々1つのサブブロックSBが転送される。図2に示す各データブロックの階層属性を説明する。なお、階層属性の指定も、他の属性と関係するため、階層属性のみでは説明しにくい。そのため、ここでは、図2に示す各データブロックに対して指定された階層属性の値のみを示し、それらの意義の詳細については後述する。リードブロックPとリードブロックQは、階層属性が2と1に夫々指定される。また、ライトブロックRの階層属性が1に指定される。<依存属性>この属性は、当該データブロックに対して、サブブロックと、該サブブロックと隣接する8つの他のサブブロックとのデータ依存関係を示すパラメータであり、依存有り、依存無しを指定可能である。また、依存有りについては、さらに、3種類の依存関係を指定可能である。依存有りは、R1型、R2型、R3型の3種類がある。図8を参照して説明する。なお、図8において、点線により囲まれる枠は、サブブロックSBを示し、数字は、転送順位を示す。図8は、割当属性とリード属性が縦優先とTOPLEFTに夫々指定されている場合のR1型~R3型依存関係を示す。図示のように、この場合、R1型依存は、注目サブブロックSB視点から見て上のサブブロックSBと依存関係を有する場合に指定される。R2型依存は、注目サブブロックSBから見て上、斜め左上、左のサブブロックSBと依存関係を有する場合に指定される。また、R3型依存は、注目サブブロックSBから見て、隣接する8つのサブブロックSBのうちの、下、斜め右下の2つを除いた6つとデータ依存関係を有する場合に指定される。図2に例示したデータブロックの依存属性を説明する。なお、依存属性の指定も、他の属性と関係するため、依存属性のみでは説明しにくい。そのため、ここでは、図2に示す各データブロックに対して指定された依存属性の値のみを示し、それらの意義の詳細については後述する。該例において、リードブロックP、リードブロックQ、ライトブロックRのいずれも、依存属性がNONEに指定される。以上、本実施の形態のOpenCLシステム100でサポートされる8つの属性を説明した。これらの8つの属性は、いずれもデバイス120における演算ユニット140の構成に依存しない。後の説明時に分かりやすいように、図2に示す3つのデータブロックに対して夫々設定された属性群を図9にまとめて示す。本実施の形態のOpenCLシステム100において、ホスト110からデバイス120に転送したカーネルの引数には、演算対象と演算結果の夫々のデータブロックに対して指定した上記の属性群が含まれる。デバイス120の演算制御部130における属性群格納部132は、これらの各属性群を格納して、シナリオ決定部134に供する。シナリオ決定部134は、属性群格納部132に格納された各属性群に基づいて、後述する転送シナリオ以下、単にシナリオともいうを決定すると共に、決定されたシナリオに基づいて、演算ユニット140による演算、及び演算に伴うデータの転送を制御する。なお、シナリオ決定部134は、上記制御に際して、指示セットを演算ユニット140に送信することを繰り返す。指示セットは、リード転送指示R、演算実行指示S、ライト転送指示Wを含む。また、指示セットの1回の送信は、リード転送指示R、演算実行指示S、ライト転送指示Wの順にこれらの指示を送信することを意味する。演算ユニット140において、演算制御部130からのリード転送指示Rに応じて、リード転送が行われる。次いで、演算制御部130からの演算実行指示Sに応じて、演算ユニット140のPE162により、リード転送指示Rに応じたリード転送でプライベートメモリ164/ローカルメモリ170に格納されたデータに対して演算処理が行われる。演算結果となる各々のデータは、夫々のPE162の対応するプライベートメモリ164/ローカルメモリ170に格納される。そして、演算制御部130からのライト転送指示Wに応じて、プライベートメモリ164/ローカルメモリ170に格納されているデータ演算結果は、ライト転送によりグローバルメモリ152へ転送される。ここで、シナリオ決定部134によるシナリオの決定処理を説明する。シナリオ決定部134は、属性群格納部132に格納された各属性群と、演算ユニット140の構成を示すパラメータとに基づいて、シナリオを決定する。このシナリオは、転送方式に該当する。シナリオ決定部134の動作を説明する。説明に当たって、演算処理及びデータブロックについては、図2に示す例を使用する。なお、図2に示す各データブロックは、図9に示すように属性群が設定され、属性群格納部132に格納されたとする。また、演算ユニット140の構成を示すパラメータの例を、図10に示す。また、上記において各属性を説明する際に、分かりやすいように、1アイテムが1PEに対応するとした。以下の説明においては、1PEが1以上のアイテムに対応可能であるとする。シナリオ決定部134は、下記の規則に従って転送方式の決定と、決定した転送方式に応じた演算処理の制御を行う。<規則1>シナリオ決定部134は、まず、全てのデータブロックに対して、共通のワークグループサイズWGsを設定すると共に、階層属性が同一である複数のデータブロックが共通の分割数でサブブロックに分割されるように、データブロックの分割サイズ、反復回数を決定する。分割サイズとは、サブブロックのサイズを意味し、分割数は、1つのデータブロックを分割して得たサブブロックの数を意味する。1となる分割数は、分割しないことを意味する。また、反復回数は、該データブロックの全てのサブブロックの転送に必要な転送回数を意味する。データブロックのサイズ、分割サイズ、分割数、ワークグループサイズWGs、反復回数などは、下記の式2~5に示す関係を有する。データブロックのサイズ=X方向サイズLx×Y方向サイズLy2分割サイズ=サブブロックのX方向のサイズSBsx×Y方向のサイズSBsy3分割数=データブロックのサイズ÷分割サイズ×ワークグループサイズWGs4反復回数={分割数×X方向サイズLx÷ワークグループサイズWGs/WG数5シナリオ決定部134は、放送属性がOFFであるデータブロックのうちの、リード属性がNONEでないデータブロックリードブロックまたはライト属性がNONEでないデータブロックライトブロックのそれぞれに対して、分割サイズと、余白属性が指定されている場合の余白分の総量余白属性が指定されていない場合には0との和が、個々のアイテムのプライベートメモリの利用可能容量の合計値を上回らない、かつ、同一の階層属性を持つデータブロックが同一の分割数に分割される制約を満たすように、ワークグループサイズWGsと分割サイズ正確にはサブブロックのY方向サイズSBsyを決定する。なお、上記制約を満たす前提の下、ターゲットOpenCLデバイスの推奨ワークグループサイズWGsがあれば、該ワークグループサイズWGsを採用し、ワークグループサイズWGsの上限と下限が定められていれば、上限と下限により決められる範囲内にワークグループサイズWGsを決定する。<規則2>階層属性が同一であるリードブロックの相対応するサブリードブロックSRBを含むサブリードブロックSRB群毎を、同時にプライベートメモリまたはローカルメモリ空間へ転送すると共に、ユーザ指定処理を起動する。なお、転送されるサブリードブロックSRBに対して余白属性により余白が指定される場合に、該余白分のデータも転送する。<規則3>階層属性が異なるデータブロックの分割数の掛け算となる回数だけ、相対応するサブリードブロックSRBのサブリードブロックSRB群をプライベートメモリまたはローカルメモリ区間に転送した後、ユーザ指定処理を起動する。例えば、階層属性が1であるリードブロックの分割数をN、階層属性が2であるリードブロックの分割数をMとすると、シナリオ決定部134は、ユーザ指定処理をN×M回だけ呼び出すように動作する。また、各回の呼出しに先立ち、サブリードブロックSRBの1種類の組合せをプライベートメモリまたはローカルメモリ区間に転送する。シナリオ決定部134は、サブブロックの対応付け方法上述した転送方式における分配方式及び統合方式を決定してから転送を行う。図12に示すように、同一の階層のデータブロック同士のサブブロック間と、異なる階層のデータブロック同士のサブブロック間とでは対応付け方法が異なる。<規則4>ユーザ指定処理の各回の起動後に、演算処理の結果となるサブライトブロックSWBをグローバルメモリ区間に転送する。サブライトブロックSWBの転送は、ユーザ指定処理の起動後に行われ、転送方向がプライベートメモリ及び/またはローカルメモリ空間からグローバルメモリ空間へである点を除き、サブリードブロックSRBのときと同様である。図11は、図9に示すリードブロックP、リードブロックQ、ライトブロックRに対して指定された属性群と、図10に示す演算ユニット140の構成を示すパラメータとに基づいて、シナリオ決定部134により決定されたワークグループサイズWGs、縦分割サイズサブブロックのY方向のサイズSBsy、反復回数の例を示す。シナリオ決定部134は、まず、演算ユニット140のワークグループサイズWGs32を仮決定する。階層属性が1である各データブロックの分割数を4とすると、リードブロックQによるプライベートメモリ占有量は、アイテム毎に、129×2Bの0.258KBとなる。なお、129は、リードブロックQのY方向サイズLy480/分割数4縦分割サイズに、余白属性により指定されたY方向の9を加算して求められた値である。同様に、ライトブロックRによるプライベートメモリ占有量は、ワークアイテムWI毎に、480/4×4Bの0.738KBに求められる。リードブロックQとライトブロックRによるアイテム毎のプライベートメモリ占有量の和が、演算ユニット140の構成を示すパラメータ図10におけるアイテム毎のプライベートメモリ容量1KBより小さいので、規則1が満たされているとして、リードブロックQとライトブロックRのワークグループサイズWGs、分割サイズが決まる。また、反復回数は、上記式6に従って5と算出される。また、階層属性が2のリードブロックPについては、放送属性がONであるため、ローカルメモリへ割り当てられる。また、そのサイズ3×3=9は、演算ユニット140のワークグループWG毎のローカルメモリ容量4KBより小さいので、分割無し反復回数:1でローカルメモリに転送される。最後に、依存属性が依存有りのデータブロックが存在する場合のシナリオ決定部134の動作をまとめる。以下の説明が分かりやすいように、ここで、各データブロックを夫々の分割サイズに分割した上で対応付けされたサブブロック群のことを、サブブロック集合と呼ぶ。シナリオ決定部134は、サブブロック集合間でサブブロック同士が依存関係にある場合は、依存元のサブブロック集合に対する処理が行われてから、依存先のサブブロック集合を処理対象とするように、反復の順序を制御する。ここで、サブブロック集合M0内のある一つのサブブロックMXが、サブブロック集合M1内のある一つのサブブロックMYと依存関係にあり、かつMXが定義元であるとすると、サブブロック集合M0とM1は依存関係にあると呼び、M0がM1の依存元、M1がM0の依存先と呼ぶ。このように、本実施の形態のOpenCLシステム100では、シナリオ決定部134は、デバイス120に設けられたおり、ホスト110からのカーネルの引数が示す演算対象及び演算結果の各データブロックの属性群と、演算ユニット140の構成を示すパラメータとに基づいて、自動的に転送方式を決定すると共に、決定した転送方式でデータの転送と、演算ユニット140による演算を制御する。そのため、ユーザがカーネルを開発する際に指定する必要のある内容は、図13に示すように、属性群の指定とユーザ処理の指定のみである。図13と図24を比較すると、本実施の形態OpenCLシステム100では、ユーザによる指定内容のいずれもデバイスの構成に依存せず、単純である。そのため、ユーザが演算処理の内容の指定に重心をおいて開発することができ、演算処理に伴うデータ転送の設計の重荷から解放される。シナリオ決定部134の設計について、デバイス120の構成の専門家、例えばデバイス120のメーカの開発者により行えばよい。なお、OpenCLについて、ソフトウェア開発者の中には、ハードウェアの演算性能を究極まで引き出そうとするエキスパートがいることを前提に、そうしたエキスパートにハードウェアを自在に制御できる自由を与えるポリシの元で、敢えて抽象的なAPIのみを用意したと思われている部分がある。その一方、抽象的なAPIしかないと、利用できるのはハードウェアに詳しいエキスパートのみに限定されてしまい、折角定められた規格の利用人口が増えない恐れがある。本発明にかかる技術は、上述したようにユーザの負担を軽減し、規格の利用人口の拡大が期待できるようにすると共に、演算に必ず必要な固有属性、演算属性に加え、ポリシ属性をユーザに設定させることにより、ユーザに有る程度の自由を当与えることができる。さらに、例えば、カーネルの引数の中でスタンダードモードとエキスパートモードのいずれかを示すモード属性を設定できるようにし、デバイス120は、設定されたモード属性を参照して、スタンダードモードである場合には上述したシナリオ決定部134により転送方式の決定を含む制御を行う一方、エキスパートモードである場合には従来のOpenCLデバイスの動作をすればよい。こうすることにより、ハードウェアの構成に詳しい所謂エキスパートは、エキスパートモードを設定して従来通りに抽象的なAPIのみを利用してカーネルを開発することができる。OpenCLシステム100の得られる効果をより具体的に説明する。まず、本発明にかかる技術を使用せず、従来の場合を説明する。図14は、図2に示す例の演算処理を実現するために、プライベートメモリとローカルメモリを使用せずに、PEが直接グローバルメモリをアクセスすることによりデータ転送が行われる場合のカーネルのプログラムコードである。図14に示すプログラムコードは、グローバルメモリ空間と、プライベートメモリ及び/またはローカルメモリ区間との間のデータ転送が無いため、内容が単純であり、コード数も少ない。しかし、これでは、演算処理の性能が良くないので、性能向上を図るために、リード転送によりグローバルメモリからプライベートメモリ及び/またはローカルメモリへ演算対象のデータを転送し、ライト転送によりプライベートメモリ及び/またはローカルメモリから演算結果のデータをグローバルメモリへ転送する必要がある。このような転送が伴う演算処理を実現するための従来のカーネルのプログラムコードの例は、図15に示す。図15から分かるように、図14と比べると、プログラムのコードが増え、構成が複雑になっている。図16は、OpenCLシステム100において図2に示す処理を実現するためのカーネルのプログラムコードを示す。図中関数get_acl_local_sizeは、シナリオ決定部134によるシナリオの決定及び実行を実現するために追加した、分割サイズを戻すシステム関数の例である。このカーネルは、同等の機能を実現する図15に示す例と比べると、コード数が少なく、構成が簡単であることが一目瞭然である。本発明にかかる技術によれば、カーネルの開発を容易にすることができると共に、ユーザによる指定内容がデバイスの構成に依存しないため、優れた可搬性を有する。ここで、ターゲットのOpenCLデバイスが非同期メモリ転送に対応する場合と対応しない場合を比較する。本発明にかかる技術を使用しない場合に、ターゲットが非同期メモリ転送に対応しないデバイスから非同期メモリ転送に対応するデバイスに変ったときに、図15に示すプログラムコードを図17に示すプログラムコードに変更する必要がある。図15と図17を比較すると分かるように、プログラムコードの数も、構成も大きく変っている。図18は、本発明の技術を適用した場合に、非同期メモリ転送に対応するデバイスと非同期メモリ転送に対応しないデバイスにおけるシナリオ決定部134の処理フローの例を示す。図中において、点線枠は、非同期メモリ転送に対応するデバイスの場合に、非同期メモリに対応しないデバイスの場合における処理フローに対して追加した処理を示す。図示のように、デバイスの構成の変更があっても、シナリオ決定部134に対してある程度の変更を加えれば対応できるため、シナリオ決定部134の開発者の負担も少ない。さらに、本発明にかかる技術によれば、デバイスの構成の違いがシナリオ決定部134により吸収されるので、非同期メモリ転送に対応するデバイスの場合と、非同期メモリに対応しないデバイスの場合とで、図2に示す演算処理を実現するためのカーネルは、図16に示す同一のものを使用することができ、可搬性が優れている。以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した実施の形態に対してさまざまな変更、増減を行ってもよい。これらの変更、増減が行われた変形例も本発明の範囲にあることは、当業者に理解されるところである。