JP6200824B2 - 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス - Google Patents

演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス Download PDF

Info

Publication number
JP6200824B2
JP6200824B2 JP2014023044A JP2014023044A JP6200824B2 JP 6200824 B2 JP6200824 B2 JP 6200824B2 JP 2014023044 A JP2014023044 A JP 2014023044A JP 2014023044 A JP2014023044 A JP 2014023044A JP 6200824 B2 JP6200824 B2 JP 6200824B2
Authority
JP
Japan
Prior art keywords
block
attribute
kernel
sub
read
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014023044A
Other languages
English (en)
Other versions
JP2015149038A (ja
Inventor
昭倫 京
昭倫 京
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2014023044A priority Critical patent/JP6200824B2/ja
Priority to US14/600,959 priority patent/US9495213B2/en
Priority to CN201510069844.6A priority patent/CN104834630B/zh
Publication of JP2015149038A publication Critical patent/JP2015149038A/ja
Application granted granted Critical
Publication of JP6200824B2 publication Critical patent/JP6200824B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は並列プロセッサ、具体的にはOpenCLデバイスの演算制御技術に関する。
近年、プロセッサの発熱を抑制する必要性から、プロセッサの動作周波数を上げる代わりに、並列に処理を行うプロセッサ・コア(以下、単に「コア」という)の数を増やすことで性能向上を実現する動きが顕著になっている。複数のコアを有するプロセッサは、マルチコアプロセッサと呼ばれており、マルチコアプロセッサの中の、特にコア数が多いものは、メニコアプロセッサと呼ばれる。本明細書の中で、マルチコアプロセッサとメニコアプロセッサの区別を特にせず、並列に処理を行うコアが複数含まれるプロセッサを概して「並列プロセッサ」という。
並列プロセッサは、アクセラレータとして様々な分野で用いられている。しかし、メーカ、分野などによって種々のアクセラレータが製造され、アクセラレータ用の言語やフレームワークも様々開発されているため、アクセラレータ間でプログラムコードの移植が困難である。
この問題を解決するため、並列プロセッサのための標準的なフレームワークとして、OpenCL(Open Computing Language)が定められた(非特許文献1)。ここで、OpenCLの概要を説明する。
図17は、非特許文献1におけるFig3.1に対して符号を追加したものであり、典型的なOpenCLシステムのプラットフォームモデルを示す。
図17に示すように、OpenCLシステム10は、Host(ホスト)12、1つ以上のCompute Device(以下「OpenCLデバイス」という)14を備える。OpenCLデバイス14は、上述したアクセラレータに該当する。
夫々のOpenCLデバイス14は、1つ以上のCompute Unit(以下「CU」と略す)16を有し、夫々のCU16は、1つ以上の演算素子(Processing Element。以下「PE」と略す)18を有する。なお、演算素子PE18は、前述したコアに該当する。
OpenCLのアプリケーションは、ホスト12側で動作するプログラムコードと、OpenCLデバイス14、すなわちアクセラレータ側で動作するプログラムコードとで構成される。ホスト12側で動作するプログラムコードは「ホストコード」と呼ばれ、OpenCLデバイス14側で動作するプログラムコードは「カーネル」と呼ばれる。
ホスト12は、API(Application Program Interface)をコールして演算を指示する。OpenCLデバイス14は、指示された演算を実行する。ホスト12は、リソースを管理するコンテキストの生成、さらに、OpenCLを通じてデバイス動作を調停するためのコマンドキューの生成を行う。「デバイス動作」は、演算を実行すること、メモリを操作すること、同期をとることなどが含まれる。
OpenCLにおいて、カーネルは、work−item(以下、略して「アイテム」とも呼ぶ)として、N次元(1≦N≦3)のインデックス空間(Index Space)で実行される。例えば、2次元のインデックス空間として(4,6)が指定されれば、「4×6」の計24個のアイテムが実行される。
1アイテムを実行するには、1PEが利用される。したがって、並列に実行されるアイテムの数と、実在するPEの数とが同一の場合、カーネルは、4列6行計24個のPE上で実行されることになる。
なお、並列に実行されるアイテム数に対して実際に存在するPE数が少ない場合には、実際に存在するPE上でアイテムの並列実行を繰り返すことが行われる。例えば、2列3行計6個のPEしかないときに、上述した(4,6)のインデックス空間が指定された場合には、該6個のPEにより、6個のアイテムの並列実行を4回繰り返す必要がある。
また、OpenCLでは、work−group(ワークグループ)という概念も導入されている。ワークグループは、同一のCU16上で実行され、かつ、互いに関連するアイテムの集合である。同一のワークグループ内の各アイテムは、同一のカーネルを実行し、該CU16の後述するローカルメモリをシェアする。
各ワークグループは、ユニックなグループIDが割り当てられ、各ワークグループ内のアイテムは、該ワークグループ内においてユニックなローカルIDが割り当てられる。また、アイテムは、ユニックなグローバルIDも割り当てられる。アイテムは、グローバルID、または、グループIDとローカルIDの組合せによって識別できる。
OpenCLデバイス14に演算処理を行わせるプロセスは、下記のステップ順でAPIをコールすることにより構成される。
<ステップ1>:演算処理の参照用のデータ(以下「参照データ」という)やカーネルをホスト12からOpenCLデバイス14へ転送する。
<ステップ2>:「カーネル起動コマンド」によりOpenCLデバイス14上でカーネルの実行を開始させる。
<ステップ3>:OpenCLデバイス14におけるカーネルの実行完了後、OpenCLデバイス14のメモリ空間から演算処理の結果データをホスト12側に転送する。
図18を参照して、メモリ空間を含むOpenCLデバイス14の構成を説明する。
図18は、非特許文献1におけるFig3.3に対して符号を追加したものである。前述したように、OpenCLデバイス14は1つ以上のCU16を備え、夫々のCU16は1つ以上のPE18を有する。
上述したステップ2におけるカーネルの実行に際して、OpenCLデバイス14では、4つの異なるメモリへのアクセスが生じ得る。この4つのメモリは、プライベートメモリ20、ローカルメモリ22、グローバルメモリ32、コンスタントメモリ34である。この4つのメモリについて、まず、図19を参照して、アイテムとワークグループの視点から説明する。なお、図19は、非特許文献1におけるTable3.1である。
プライベートメモリ20は、1つのアイテムに対応し、該アイテムの実行にのみ用いられる。1つのアイテムに対応するプライベートメモリ20に対して定義された変数は、他のアイテムに対して使用できない。
ローカルメモリ22は、1つのグループに対応し、該グループ内の各アイテムによりシェアすることができる。そのため、ローカルメモリ22の用途としては、例えば、該グループ内の各アイテムによりシェアされる変数をローカルメモリ22に割り当てることが挙げられる。
グローバルメモリ32とコンスタントメモリ34は、全てのグループの全てのアイテムからアクセスできる。なお、グローバルメモリ32は、アイテムからリードとライトのいずれからもアクセスできるが、コンスタントメモリ34は、アイテムからリードアクセスのみができる。以下、グローバルメモリ32とコンスタントメモリ34をまとめてデバイスメモリ30という。
アイテムとPE18の1対1の対応関係から、上記4つのメモリと、CU16及びPE18との対応関係は、以下のようになる。
プライベートメモリ20は、PE18と1対1で対応し、相対応するPE18によりのみアクセス可能である。
ローカルメモリ22は、CU16と1対1で対応し、相対応するCU16内の全てのPE18によりアクセス可能である。
デバイスメモリ30は、全てのCU16内の全てのPE18、すなわちOpenCLデバイス14内の全てのPEによりアクセス可能である。
また、OpenCLデバイス14によっては、デバイスメモリ30のキャッシュメモリとして機能するキャッシュ24がさらに設けられる場合もある。
このように、OpenCLデバイス14には、階層の異なる複数のメモリが設けられている。これらのメモリは、上位階層にあるほど、PEからのアクセスが高速にできる。デバイスメモリ30(最下位)、ローカルメモリ22(中位)、プライベートメモリ20(最上位)の順で階層が上位になり、同様の順でPEからのアクセスもより高速になる。
OpenCLデバイス14の性能を充分に引き出すためには、例えば、利用頻度の高いデータを、なるべくより高速なメモリ空間に移動してから参照するようにするなど、デバイスメモリ30と、プライベートメモリ20/ローカルメモリ22との間でのデータ移動について工夫する必要がある。
制御方式がOpenCLデバイスと異なる逐次プロセッサの場合においても、グローバルメモリ空間とプライベートメモリ空間との間でのデータ移動が行われる。図20に示す逐次プロセッサの例を参照して説明する。
図20に示す逐次プロセッサ20は、演算素子であるPE52、プライベートメモリ54、グローバルメモリ56、キャッシュ制御機構58を有する。
図示のように、逐次プロセッサ50の記憶装置は、プライベートメモリ54とグローバルメモリ56に分けられている。プライベートメモリ54は、物理的にオンチップの小容量メモリであり、グローバルメモリ56は、物理的にオフチップの大容量のメモリである。
逐次プロセッサ50では、記憶装置がプライベートメモリ54とグローバルメモリ56に分けられているが、プライベートメモリ54とグローバルメモリ56の間に設けられたキャッシュ制御機構58により、プライベートメモリ54とグローバルメモリ56間のデータ移動は自動的に行われ、逐次プロセッサ50のユーザは、1つの大きなメモリ空間しか見えない。つまり、逐次プロセッサ50のユーザは、グローバルメモリ56とプライベートメモリ54との間でどのようにデータを移動するかを意図しなくても、PE52に演算処理を行わせるユーザプログラムを容易に開発できる。
ところで、並列プロセッサ、特に図18に示すOpenCLデバイス14のように多数のコア(PE)を搭載した場合には、コアの数と同数のプライベートメモリ20が存在し、さらに、CU16の数と同数のローカルメモリ22が存在する。これらのメモリを全て1つのキャッシュ制御機構で統一的に管理するのは、ハードウェアのコストが高く、一般的には実現困難である。
他方、キャッシュ制御機構が無いと、OpenCLシステム10のユーザ(以下、単に「ユーザ」と呼ぶ)には、複数のメモリ空間が見えてしまう。前述したように、利用頻度の高いデータを、なるべくより高速なメモリ空間(すなわちより上位階層のメモリ空間)に移動してから参照するようにするなど、より良い性能を追求するためには、演算処理に伴う階層の異なるメモリ間でのデータ移動について、ユーザプログラムで明示的に指示するする必要がある。これを正しく実現するためには、ユーザには、上述した各メモリ同士間の速度差、容量差、機能差等に関する知識を持つ必要がある。図21を参照して具体例を説明する。
図21は、複数のデータブロック(データブロックA〜D)から、データブロックA’〜B’を得る演算処理を実行する場合を説明するための図である。なお、図21において、ホストからデバイスへのカーネル転送の図示を省略している。また、データブロック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の構成に依存し、一方、サブブロックの対応付け方法は演算処理の内容に依存する。分割が必要になると、データブロックを分割しない場合より、さらに指定が複雑である。
図22は、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デバイスの構成を念頭に入れつつ、ユーザコードを作成することが考えられる。しかし、そうした作業は、演算処理の設計者からみれば本質的でない作業のために多大な負担に感じる上に、コードの可読性の低下、そして煩雑度の増大等を引き起こす要因にもなる。
特許文献1には、OpenCLデバイスに対して、演算処理に伴う階層の異なる複数のメモリ間でのデータ移動について、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高める技術を開示している。
該技術では、ユーザコードの開発者は、カーネルの引数として、OpenCLデバイスの演算対象及び演算結果の各データブロック(リードブロックとライトブロック)の夫々について複数の属性を含む属性群を設定し、OpenCLデバイスの演算制御部は、ホストから転送されたカーネルの引数が示す演算対象及び演算結果の各データブロックの属性群と、OpenCLデバイスの構成を示すパラメータとに基づいて、自動的に転送方式を決定すると共に、決定した転送方式でデータの転送と、OpenCLデバイスによる演算を制御する。
なお、転送方式は、主に、デバイスメモリと、ローカルメモリ及びプライベートメモリとの間でどのようにしてデータブロックを転送するかに関するものである。
図23は、特許文献1の技術を適用したOpenCLシステムにおいて、ユーザがカーネルを開発する際に指定する必要のある内容を示す。図示のように、これらの内容は、属性群の指定とユーザ処理の指定のみであり、いずれも、デバイスの構成に依存しないものである。
図23に示すように、属性群は、固有属性、演算属性、ポリシ属性のグループに分けられており、各グループの属性は、転送方式を決定するために必要である一方、OpenCLデバイスの構成に依存しないものである。例えば、ポリシ属性には、当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示す割当属性や、当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示す余白属性や、当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、依存関係がある場合における全ての依存方向を示す依存属性が含まれる。
なお、ライトブロックの属性群は、該ライトブロックが既にローカルメモリまたはプライベートメモリに存在し、かつ、デバイスメモリに転送されると仮定して設定されたものである。
特許文献1に開示された技術によれば、ユーザコード(カーネル)の開発者は、OpenCLデバイスの構成を知らなくても、カーネルが使用するデータブロック毎に属性群さえ指定すれば、高性能なカーネルを可搬性の高い形で実現できる。それは、OpenCLデバイスの演算制御部は、カーネルが参照する各データブロックの属性群と、OpenCLデバイスの構成とに基づいて、データブロックを該デバイスにとって最適なサイズに適宜に分割して、「リード転送→カーネルによる演算処理→ライト転送」をボディとする反復処理を、分割数に等しい回数だけ繰り返すよう制御可能である。デバイス側の演算制御部の設計については、OpenCLデバイスの構成を熟知した専門家、例えば該OpenCLデバイスのメーカの開発者により行えばよい。
特開2013−025547号公報
The OpenCL Specication,Ver:1.0,Document Revision:43,Khronos OpenCL Working Group(2009)
ここで、連続して実行される2つのカーネルの間に関連性がある場合を考える。例えば、第1のカーネルXは、先に実行され、その演算結果のデータブロックが、後に実行される第2のカーネルYの入力データとして使用されるとする。なお、各データブロックは、サブブロックに分割して転送されるとする。
特許文献1のOpenCLシステムの場合、下記の流れになると考える。
<ステップX1>
ホーストは、第1のカーネルXをデバイスに転送する。
該第1のカーネルXの引数には、第1のカーネルXによる演算処理に使用される各データブロック(リードブロック)毎に、上述した属性群が含まれている。
<ステップX2>
デバイスの演算制御部は、第1のカーネルXの引数に基づいて、グローバルメモリに格納された各リードブロック、及び演算結果となるライトブロックの分割方式を含む転送方式を決定する。そして、各リードブロックをサブリードブロックに分割して、ローカルメモリまたはプライベートメモリへ転送すると共に、PEに演算を行わせる。
<ステップX3>
デバイスの各PEは、演算制御部の制御に従って演算を行い、サブライトブロックを得る。これらのサブライトブロックは、ローカルメモリまたはプライベートメモリに格納された後、演算制御部の制御に従って、PEからグローバルメモリに転送される。
<ステップ4>
全ての処理が終わるまで、演算制御部の制御の元で、ステップX2〜ステップX3の処理が繰り返される。最後に、第1のカーネルXの演算結果となるデータブロック(ライトブロック)が得られ、グローバルメモリに格納される。
第1のカーネルXの処理が完了すると、下記の流れで第2のカーネルYの処理が行われる。
<ステップY1>
ホーストは、第2のカーネルYをデバイスに転送する。
該第2のカーネルYの引数には、第2のカーネルYによる演算処理に使用される各データブロック(リードブロック)毎に、上述した属性群が含まれている。
第1のカーネルXのライトブロックのうちのあるライトブロックが、第2のカーネルYの演算処理に使用される場合に、第2のカーネルYの引数には、該ライトブロックに対応する、第2のカーネルYのリードブロックについても、属性群が指定されている。以下において、先に実行されるカーネルのライトブロックであって、後に実行されるカーネルのリードブロックになるデータブロックを「継続ライトブロック」といい、後に実行されるカーネルのリードブロックであって、先に実行されるカーネルのライトブロックになるデータブロックを「継続リードブロック」という。
<ステップY2>
デバイスの演算制御部は、第2のカーネルYの引数に基づいて、グローバルメモリに格納された各リードブロック(継続リードブロックを含む)、及び演算結果となるライトブロックの分割方式を含む転送方式を決定する。そして、各リードブロックをサブリードブロックに分割して、ローカルメモリまたはプライベートメモリへ転送すると共に、PEに演算を行わせる。
<ステップY3>
デバイスの各PEは、演算制御部の制御に従って演算を行い、サブライトブロックを得る。これらのサブライトブロックは、ローカルメモリまたはプライベートメモリに格納された後、演算制御部の制御に従って、PEからグローバルメモリに転送される。
<ステップ4>
全ての処理が終わるまで、演算制御部の制御の元で、ステップY2〜ステップY3の処理が繰り返される。最後に、第2のカーネルYの演算結果となるデータブロック(ライトブロック)が得られ、グローバルメモリに格納される。
上述した流れから分かるように、継続ライトブロックがある場合、該継続ライトブロックのサブライトブロックのグローバルメモリへの転送(ライト転送)と、該継続ライトブロックに対応する継続リードブロックのサブリードブロックのローカルメモリ/プライベートモリへの転送(リード転送)が行わっている。
継続ライトブロックのサブライトブロックが、既にプライベートメモリ/ローカルメモリにリード転送されたサブリードブロックとして次のカーネルに使用可能であれば、継続ライトブロックをサブリードブロックのローカルメモリ/プライベートモリからグローバルメモリへ転送せず、そのまま次のカーネルに供するようにすれば、ライト転送もリード転送も削減でき、OpenCLデバイスの処理効率の向上を図ることができる。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態は、OpenCLデバイスの複数の演算素子による並列演算を制御する演算制御方法であり、第1のステップと第2のステップを有する。
第1のステップは、OpenCLデバイスの最下位階層のメモリ(例えばグローバルメモリ)に1つ以上格納されたリードブロックと、他の階層のメモリ(例えばプライベートメモリやローカルメモリ)から最下位階層のメモリに転送される1つ以上のライトブロックとに対して夫々設定された属性群を取得して保持するステップである。
第2のステップは、第1のステップにより保持された各前記属性群と、前記OpenCLデバイスの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うステップである。
リードブロックは、並列演算の演算対象として最下位階層のメモリから他の階層のメモリに転送されるデータブロックである。ライトブロックは、並列演算後に他の階層のメモリから最下位階層のメモリに転送されるデータブロックであり、前記1つ以上のリードブロックに対する並列演算の演算結果である。
前記属性群は、前記転送方式を決定するために必要である一方、前記OpenCLデバイスの構成に依存しない属性を複数含むものであり、例えば割当属性、余白属性、依存属性を有する。
割当属性は、当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示すものである。
余白属性は、当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示すものである。
依存属性は、当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、前記依存関係がある場合における全ての依存方向を示す依存属性を有する。
なお、ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものである。
第2のステップは、第1のカーネルに続いて第2のカーネルをOpenCLデバイスに実行させ、かつ、第1のカーネルに対応する並列演算の各ライトブロックのうちに、第2のカーネルに対応する並列演算のリードブロックとして使用される継続ライトブロックが含まれており、かつ、第1のカーネルに対して設定された継続ライトブロックの割当属性と、第2のカーネルに対して設定された、継続ライトブロックに対応するリードブロック(継続リードブロック)の割当属性とが一致する場合において、該継続ライトブロックが最下位階層へ転送されず、他の階層のメモリを介して第2のカーネルの実行に供されることにより、前記第1のカーネルと前記第2のカーネルの実行をパイプライン化するパイプライン化制御を行うステップをさらに含む。
該パイプライン化制御ステップにおいて、第1のカーネルに対応する各リードブロックの夫々に対して、該リードブロックに対して設定された余白属性と依存属性に、第2のカーネルに対して設定された、継続ライトブロックに対応する継続リードブロックの余白属性と依存属性を夫々論理和加算する。
なお、上記実施の形態の方法を装置やシステムに置き換えて表現したもの、該方法を実行するOpenCLデバイス、該方法をコンピュータに実行せしめるプログラムなども、実施の態様としては有効である。
前記一実施の形態によれば、OpenCLデバイスの処理効率を向上させることができる。
一実施の形態にかかるOpenCLシステムを示す図である。 単独カーネルの場合を説明するための具体例を示す図である。 リード属性を説明するための図である。 余白属性を説明するための図である。 放送属性を説明するための図である。 割当属性を説明するための図である(その1) 割当属性を説明するための図である(その2)。 依存属性を説明するための図である。 図2に示す各データブロックに対して設定された属性群の例を示す図である。 図1に示すOpenCLシステムにおける演算ユニットの構成を示すパラメータの例である。 階層内での対応付けと階層間での対応付けを示す図である。 図2に示す例に対してシナリオ決定部が決定した内容の一部を示す図である。 関連性のある2つのカーネルを連続して実行する際に行われるパイプライン化制御を説明するための図である(その1)。 関連性のある2つのカーネルを連続して実行する際に行われるパイプライン化制御を説明するための図である(その2)。 パイプライン化制御なしとパイプライン化制御ありの場合における各データブロックの転送態様を比較するための図である。 パイプライン化制御なしとパイプライン化制御ありの場合におけるカーネルの実行態様を比較するための図である。 OpenCLシステムのプラットフォームモデルを示す図である。 OpenCLデバイスの構成を示す図である。 OpenCLデバイスにおける各種メモリを説明するための図である。 逐次プロセッサの例を示す図である。 特許文献1に開示された技術が解決しようとする課題を説明するための図である(その1)。 特許文献1に開示された技術が解決しようとする課題を説明するための図である(その2)。 特許文献1のOpenCLシステムにおいて、ユーザにより指定する必要のある内容を示す図である。
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
図1は、一実施の形態にかかるOpenCLシステム100を示す。OpenCLシステム100は、OpenCLホスト(以下、単に「ホスト」という)110、OpenCLデバイス(以下、単に「デバイス」という)120を備える。
デバイス120は、演算制御部200、演算ユニット140を備える。演算制御部200は、属性群格納部210、カーネル間情報格納部220、シナリオ決定部230を有する。演算ユニット140は、デバイスメモリ150、複数のコンピュートユニット(CU)160、CU160毎に設けられたローカルメモリ170を有する。
デバイスメモリ150は、グローバルメモリ152、コンスタントメモリ154を有する。また、夫々のCU160は、複数のPE162と、PE162毎に設けられたプライベートメモリ164を有する。
なお、グローバルメモリ152、コンスタントメモリ154、CU160、PE162、プライベートメモリ164、ローカルメモリ170は、通常のOpenCLデバイスにおける同一名称のものと同様であり、ここで詳細な説明を省略する。
ホスト110は、デバイス120に演算を行わせる際に、ユーザにより引数の指定がなされた、該演算に対応するカーネルをデバイス120に転送する。
デバイス120において、カーネル間情報格納部220は、連続して実行される複数のカーネル間のデータブロックの依存関係を示す情報(「カーネル間データブロック依存情報」という)を格納している。この情報は、ユーザにより直接カーネル間情報格納部220に入力されるようにしてもよいし、上記複数のカーネルのうちの1つ(例えば最も先に実行されるカーネル)の引数に含まれるようにして、該カーネルと共にホスト110からデバイス120に転送され、カーネル間情報格納部220に格納されるようにしてもよい。
上記カーネル間データブロック依存情報は、例えば、先に実行されるカーネルのライトブロックのうちに、後に実行されるカーネルのリードブロックとして使用されるものかあるか否か、及びある場合における、継続ライトブロックと継続リードブロックとの対応関係を示すものである。
なお、単独カーネルの場合には、カーネル間データブロック依存情報は、「依存なし」を示すことになる。単独カーネルは、他のカーネルと関連性が無く、その演算対象となるリードブロックが、他のカーネルの演算結果となるライトブロックでもなければ、そのライトブロックが他のカーネルのリードブロックとしても使用されないカーネルを意味する。
演算制御部200は、ホスト110からのカーネルが示す演算内容、属性群格納部210に格納された各属性群と、カーネル間情報格納部220に格納されたカーネル間データブロック依存情報とにに基づいて、演算ユニット140を制御する。演算ユニット140は、演算制御部200の制御に従って演算を行い、演算結果を得る。演算ユニット140が行う演算は、演算対象のデータをデバイスメモリ150からプライベートメモリ164/ローカルメモリ170への転送(リード転送)と、演算結果のデータをデバイスメモリ150への転送(ライト転送)が伴う。
通常、演算対象のデータと演算結果のデータのいずれもグローバルメモリ152に格納されるため、以下において、「リード転送」と「ライト転送」がグローバルメモリ152と、プライベートメモリ164/ローカルメモリ170との間の転送であるとして説明をする。演算対象のデータがコンスタントメモリ154にも格納される場合には、「リード転送」がコンスタントメモリ154からプライベートメモリ164/ローカルメモリ170への転送も含むことを理解されたい。
<単独カーネルの場合>
分かりやすいように、まず、図2に示す具体例を参照しながら、単独カーネルを実行する場合について説明する。
この場合、カーネル間情報格納部220には、「依存なし」を示すカーネル間データブロック依存情報が格納されることになる、OpenCLシステム100における処理は、特許文献1に開示されたOpenCLシステムの処理と同様である。
なお、以下の説明における用語「次元」は、前述したインデックス空間の次元に対応する。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システム100は、演算処理の内容と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において、リード属性として設定される転送順位は、「TOP LEFT」、「BOTTOM RIGHT」、「ランダム」が指定可能である。なお、「ランダム」が指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。
「TOP LEFT」は、左上端のサブブロックから転送することを示し、「BOTTOM RIGHT」は、右下端のサブブロックから転送することを示す。図3は、リード属性として「「TOP LEFT」が指定された場合のサブブロックの転送順位を示す。
図3に示すように、この場合、グローバルメモリ152に格納されたデータブロック(リードブロック)は、転送順位が、左上端のサブブロック1、サブブロック1の右隣のサブブロック2、サブブロック3の右隣のサブブロック3、・・・となっている。
図2に示す各データブロックのリード属性を説明する。
式(1)に示す演算処理の内容に基づいて、リードブロックPとリードブロックQは、リード転送されるデータであるため、リード属性として、転送順位が「TOP LEFT」に指定される。
一方、ライトブロックRは、リード転送されるデータではないため、リード属性が「NONE」に指定される。
<ライト属性>
この属性は、まず、該データブロックが演算結果のデータ(つまり、ライト転送されるデータ)であるか否か、及び演算結果のデータである場合の転送順位を示す。転送順位は、各サブライトブロックSWBを、どのような順位で転送するかを指定するパラメータである。
リードブロックは、ライト転送されないので、ライト転送されないことを示す「NONE」が指定される。ライトブロックは、ライト転送されるデータブロックであるので、「ライト転送される」として、転送順位が指定される。
本実施の形態のOpenCLシステム100において、ライト属性として設定される転送順位は、「TOP LEFT」、「BOTTOM RIGHT」、「ランダム」が指定可能である。なお、「ランダム」が指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。
リードブロックは、ライト転送されないので、ライト転送されないことを示す「NONE」が指定される。そのため、図2に示すリードブロックPとリードブロックQは、ライト属性として「NONE」が指定される。
ライトブロックは、ライト転送されるデータブロックであるので、「ライト転送される」として、上記転送順位が指定される。この転送順位は、該データブロックの各サブブロックを、どのような順位で転送するかを指定するパラメータである。
本実施の形態のOpenCLシステム100において、ライト属性として設定される転送順位は、リード属性として設定される転送順位と同様に、「TOP LEFT」と、「BOTTOM RIGHT」と、「ランダム」が指定可能である。「ランダム」が指定された場合に限り、別途、転送順位を示す情報を格納した領域へのポインタが指定される。
ライト属性として設定される転送順位の夫々のパラメータの意義は、リード属性として設定される転送順位の相対応するパラメータと同一であるので、ここで詳細な説明を省略する。
図2に示す各データブロックのライト属性を説明する。
式(1)に示す演算処理の内容に基づいて、ライトブロックRは、ライト転送されるデータであるため、ライト属性として、転送順位が「TOP LEFT」に指定される。
一方、リードブロック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における演算制御部200のシナリオ決定部230により決定されるが、ユーザが、カーネルの作成時に、その最大値と最小値のいずれをとるかを指定することができる。
また、1つのアイテムに割り当てるデータ量も、後にシナリオ決定部230により決定される。ワークグループサイズWGsが最小値をとる場合とは、1アイテムが1PEに対応する場合である。それに対し、PEのプライベートメモリをM(M:2以上の整数)分割してMアイテムを1PEに対応させることで、ワークグループサイズWGsを最大M倍大きく指定できるOpenCLデバイスの場合、最大値は最小値のM倍となる。一方、最大値のワークグループサイズWGsを利用する場合、1PE当たりのプライベートメモリは最小値のワークグループサイズWGsを利用する場合のM分の1となるだけである。以下、説明を簡単にするため、シナリオ決定部230は、常に、ワークグループサイズ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は、後にシナリオ決定部230により決定される。
割当属性として「横優先」が指定されたデータブロック内の各サブブロックは、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は、割当属性とリード属性が「縦優先」と「TOP LEFT」に夫々指定されている場合の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の演算制御部200における属性群格納部210は、これらの各属性群を格納して、シナリオ決定部230に供する。
シナリオ決定部230は、属性群格納部210に格納された各属性群に基づいて、後述する転送シナリオ(以下、単に「シナリオ」ともいう)を決定すると共に、決定されたシナリオに基づいて、演算ユニット140による演算、及び演算に伴うデータの転送を制御する。なお、シナリオ決定部230は、上記制御に際して、指示セットを演算ユニット140に送信することを繰り返す。指示セットは、リード転送指示R、演算実行指示S、ライト転送指示Wを含む。また、指示セットの1回の送信は、リード転送指示R、演算実行指示S、ライト転送指示Wの順にこれらの指示を送信することを意味する。
演算ユニット140において、演算制御部200からのリード転送指示Rに応じて、リード転送が行われる。
次いで、演算制御部200からの演算実行指示Sに応じて、演算ユニット140のPE162により、リード転送指示Rに応じたリード転送でプライベートメモリ164/ローカルメモリ170に格納されたデータに対して演算処理が行われる。演算結果となる各々のデータは、夫々のPE162の対応するプライベートメモリ164/ローカルメモリ170に格納される。
そして、演算制御部200からのライト転送指示Wに応じて、プライベートメモリ164/ローカルメモリ170に格納されているデータ(演算結果)は、ライト転送によりグローバルメモリ152へ転送される。
ここで、シナリオ決定部230によるシナリオの決定処理を説明する。
シナリオ決定部230は、属性群格納部210に格納された各属性群と、演算ユニット140の構成を示すパラメータとに基づいて、シナリオを決定する。このシナリオは、転送方式に該当する。
シナリオ決定部230の動作を説明する。説明に当たって、演算処理及びデータブロックについては、図2に示す例を使用する。なお、図2に示す各データブロックは、図9に示すように属性群が設定され、属性群格納部210に格納されたとする。また、演算ユニット140の構成を示すパラメータの例を、図10に示す。
また、上記において各属性を説明する際に、分かりやすいように、1アイテムが1PEに対応するとした。以下の説明においては、1PEが1以上のアイテムに対応可能であるとする。
シナリオ決定部230は、下記の規則に従って転送方式の決定と、決定した転送方式に応じた演算処理の制御を行う。
<規則1>
シナリオ決定部230は、まず、全てのデータブロックに対して、共通のワークグループサイズWGsを設定すると共に、階層属性が同一である複数のデータブロックが共通の分割数でサブブロックに分割されるように、データブロックの分割サイズ、反復回数を決定する。
「分割サイズ」とは、サブブロックのサイズを意味し、「分割数」は、1つのデータブロックを分割して得たサブブロックの数を意味する。1となる分割数は、分割しないことを意味する。また、「反復回数」は、該データブロックの全てのサブブロックの転送に必要な転送回数を意味する。
データブロックのサイズ、分割サイズ、分割数、ワークグループサイズWGs、反復回数などは、下記の式(2)〜(5)に示す関係を有する。
データブロックのサイズ=X方向サイズLx×Y方向サイズLy (2)
分割サイズ
=サブブロックのX方向のサイズSBsx×Y方向のサイズSBsy (3)
分割数=データブロックのサイズ÷(分割サイズ×ワークグループサイズWGs)(4)
反復回数
={分割数×(X方向サイズLx÷ワークグループサイズWGs)/WG数 (5)
シナリオ決定部230は、放送属性が「OFF」であるデータブロックのうちの、リード属性が「NONE」でないデータブロック(リードブロック)またはライト属性が「NONE」でないデータブロック(ライトブロック)のそれぞれに対して、分割サイズと、余白属性が指定されている場合の余白分の総量(余白属性が指定されていない場合には「0」)との和が、個々のアイテムのプライベートメモリの利用可能容量の合計値を上回らない、かつ、同一の階層属性を持つデータブロックが同一の分割数に分割される制約を満たすように、ワークグループサイズWGsと分割サイズ(正確にはサブブロックのY方向サイズSBsy)を決定する。なお、上記制約を満たす前提の下、ターゲットOpenCLデバイスの推奨ワークグループサイズWGsがあれば、該ワークグループサイズWGsを採用し、ワークグループサイズWGsの上限と下限が定められていれば、上限と下限により決められる範囲内にワークグループサイズWGsを決定する。
<規則2>
階層属性が同一であるリードブロックの相対応するサブリードブロックSRBを含むサブリードブロックSRB群毎を、同時にプライベートメモリまたはローカルメモリ空間へ転送すると共に、ユーザ指定処理を起動する。なお、転送されるサブリードブロックSRBに対して余白属性により余白が指定される場合に、該余白分のデータも転送する。
<規則3>
階層属性が異なるデータブロックの分割数の掛け算となる回数だけ、相対応するサブリードブロックSRBのサブリードブロックSRB群をプライベートメモリまたはローカルメモリ区間に転送した後、ユーザ指定処理を起動する。
例えば、階層属性が「1」であるリードブロックの分割数をN、階層属性が「2」であるリードブロックの分割数をMとすると、シナリオ決定部230は、ユーザ指定処理をN×M回だけ呼び出すように動作する。また、各回の呼出しに先立ち、サブリードブロックSRBの1種類の組合せをプライベートメモリまたはローカルメモリ区間に転送する。
シナリオ決定部230は、サブブロックの対応付け方法(上述した転送方式における分配方式及び統合方式)を決定してから転送を行う。図12に示すように、同一の階層のデータブロック同士のサブブロック間と、異なる階層のデータブロック同士のサブブロック間とでは対応付け方法が異なる。
<規則4>
ユーザ指定処理の各回の起動後に、演算処理の結果となるサブライトブロックSWBをグローバルメモリ区間に転送する。サブライトブロックSWBの転送は、ユーザ指定処理の起動後に行われ、転送方向が「プライベートメモリ及び/またはローカルメモリ空間からグローバルメモリ空間へ」である点を除き、サブリードブロックSRBのときと同様である。
図11は、図9に示すリードブロックP、リードブロックQ、ライトブロックRに対して指定された属性群と、図10に示す演算ユニット140の構成を示すパラメータとに基づいて、シナリオ決定部230により決定されたワークグループサイズWGs、縦分割サイズ(サブブロックのY方向のサイズSBsy)、反復回数の例を示す。
シナリオ決定部230は、まず、演算ユニット140のワークグループサイズWGs(32)を仮決定する。階層属性が「1」である各データブロックの分割数を4とすると、リードブロックQによるプライベートメモリ占有量は、アイテム毎に、「129×2B」の0.258KBとなる。なお、129は、「リードブロックQのY方向サイズLy(480)/分割数(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)でローカルメモリに転送される。
最後に、依存属性が「依存有り」のデータブロックが存在する場合のシナリオ決定部230の動作をまとめる。以下の説明が分かりやすいように、ここで、各データブロックを夫々の分割サイズに分割した上で対応付けされたサブブロック群のことを、「サブブロック集合」と呼ぶ。
シナリオ決定部230は、サブブロック集合間でサブブロック同士が依存関係にある場合は、依存元のサブブロック集合に対する処理が行われてから、依存先のサブブロック集合を処理対象とするように、反復の順序を制御する。ここで、サブブロック集合M0内のある一つのサブブロックMXが、サブブロック集合M1内のある一つのサブブロックMYと依存関係にあり、かつMXが定義元であるとすると、サブブロック集合M0とM1は依存関係にあると呼び、M0がM1の依存元、M1がM0の依存先と呼ぶ。
このようにして、OpenCLシステム100は、単独カーネルについての処理を行う。なお、単独カーネルが複数続いた場合には、OpenCLシステム100は、上述した処理をカーネル毎に繰り返す。
<関連性のある2つのカーネルの場合>
この2つのカーネルを夫々第1のカーネルXと第2のカーネルYとする。該2つのカーネルに関連性があるとは、先に実行される第1のカーネルXの演算結果となるライトブロックのうちに継続ライトブロックがあり、該継続ライトブロックが、後続の第2のカーネルYの演算対象となるリードブロックとして使用されることを意味する。すなわち、第2のカーネルYのリードブロックのうちに、継続リードブロックが含まれている。
図13は、この2つのカーネルのリードブロックとライトブロックを示す。これらのデータブロックのうちに、データブロックRは継続ライトブロックであり、データブロックSは継続ライトブロックRに対応する継続リードブロックである。継続ライトブロックRと継続リードブロックSは、同様のデータブロックであるが、第1のカーネルXのライトブロックと第2のカーネルYのリードブロックとして異なる属性群が設定されているため、分かりやすいように、別々のデータブロックとして図示すると共に、異なる符号を付与している。
演算制御部200の属性群格納部210には、図13に示す各データブロックの夫々の属性群が格納されている。これらの属性群は、単独カーネルの場合に説明した属性群と同様である。
また、演算制御部200のカーネル間情報格納部220には、カーネル間データブロック依存情報として、第1のカーネルXの後に第2のカーネルYが実行されること、第1のカーネルXのライトブロックRが、第2のカーネルYのリードブロックSとして使用されることを示す情報が格納される。
例として、第1のカーネルXが、図2に示す例の演算を行うためのカーネルであるとする。そのため、第1のカーネルXのリードブロックは、データブロックP及びQであり、第1のカーネルXのライトブロックは、データブロックRであり、該データブロックRは、後続の第2のカーネルYに使用される継続ライトブロックである。
また、独立カーネルのときに説明した通りに、リードブロックPの属性群のうちに、割当属性が「縦優先」であり、余白属性が「X:0,Y:0」(余白なし)であり、依存属性が「NONE」(サブリードブロック間に依存性なし)である。
また、第2のカーネルYが、第1のカーネルXのライトブロックRと同様のデータブロックであるデータブロックSを演算して、データブロックUとVを得るものとする。そのため、第2のカーネルYのリードブロックは、データブロックSであり、該データブロックSは、継続リードブロックである。また、第2のカーネルYのライトブロックは、データブロックU及びVである。
図示の例では、継続リードブロックSの属性群のうちに、、割当属性が「縦優先」であり、余白属性が「X:1,Y:2」であり、依存属性が「R2型」(左のサブブロックと、左上のサブブロックと、上のサブブロックに依存する)である。
すなわち、継続リードブロックSをサブブロックに分割して転送する際に、該サブブロックと共に、指定されたその左隣の1列のデータと右隣の1列のデータ、及び上隣の2行のデータと下隣の2行のデータも転送するよう、余白属性により規定されている。また、継続リードブロックSの各サブブロックの転送及び演算の順序については、ターゲットのサブブロックの処理の前に、その依存元の各サブブロック(ここでは、ターゲットのサブブロックの左と、左上と、上との3つのサブブロック)の処理が行われるよう、依存属性により規定されている。
第2のカーネルYのライトブロックUとVについても属性群が設定されており、それらは、第2のカーネルYの演算内容などに応じてユーザにより設定されたものであり、ここで詳細な説明と図示を省略する。
本実施の形態において、演算制御部200のシナリオ決定部230は、継続ライトブロックRの割当属性と、継続リードブロックSの割当属性とに基づいて、パイプライン化制御を行うか否かを決定する。具体的には、継続ライトブロックRと継続リードブロックSの割当属性が同一であれば、パイプライン化制御を行うと決定し、継続ライトブロックRと継続リードブロックSの割当属性が異なれば、パイプライン化制御を行わないと決定する。
「パイプライン化制御」とは、継続ライトブロックRがグローバルメモリ152に転送されず、プライベートメモリ164またはローカルメモリ170を介して第2のカーネルYの実行に供されることにより、第1のカーネルXと第2のカーネルYの実行をパイプライン化することである。
パイプライン化制御を行わないと決定した場合に、シナリオ決定部230は、第1のカーネルXと第2のカーネルYを夫々単独カーネルとして、まず第1のカーネルXを実行させ、ライトブロックRの全てのデータが得られてグローバルメモリ152に格納された後に、該ライトブロックRを第2のカーネルYのリードブロックSとして、第2のカーネルYを実行させる。
パイプライン化制御を行うと決定した場合に、シナリオ決定部230は、パイプライン化制御を実現するために、先に実行される第1のカーネルXの各データブロックの余白属性と依存属性を変更する。
具体的には、シナリオ決定部230は、第1のカーネルXのリードブロックPに対して、その余白属性と依存属性に、継続リードブロックSの余白属性と依存属性を夫々論理和加算して新たな余白属性と依存属性とする。
また、リードブロックQに対しても同様に、シナリオ決定部230は、その余白属性と依存属性に、継続リードブロックSの余白属性と依存属性を夫々論理和加算して新たな余白属性と依存属性とする。
図14は、シナリオ決定部230により変更後のリードブロックPとリードブロックQの属性群を示す。図示のように、変更後、リードブロックPは、余白属性が元の「X:0,Y0」から「X:1,Y:2」になり、依存属性が元の「NONE」から「R2型」になっている。
また、リードブロックQも、上記変更後、余白属性が元の「X:0,Y9」から「X:1,Y:11」になり、依存属性が元の「NONE」から「R2型」になっている。
そして、シナリオ決定部230は、第1のカーネルXの各ライトブロックについては余白属性と依存属性が変更された属性群を使用し、他の各データブロックについては元の属性群を使用して、各データブロックの転送方式を決定すると共に、決定した転送方式に応じて各リードブロックとライトブロックの転送、及び該転送に対応する並列演算の制御を行う。この際、継続ライトブロックRの各サブブロックをグローバルメモリ152に転送せず、プライベートメモリ164またはローカルメモリ170を介して第2のカーネルYの実行に供する点と、第1のカーネルXと第2のカーネルYの実行を並列させる点とを除き、単独カーネルの場合と同様である。
図15の上部は、第1のカーネルXと第2のカーネルYの実行に際して、パイプライン化制御が行われない場合における各データブロックの転送態様を示し、図15の下部は、第1のカーネルXと第2のカーネルYの実行に際して、パイプライン化制御が行われた場合における各データブロックの転送態様を示す。図中実線矢印は、グローバルメモリ152を介したデータの受渡しを意味し、点線矢印は、プライベートメモリ164またはローカルメモリ170を介したデータの受渡しを意味する。
図15に示すように、パイプライン化制御が行われない場合において、第1のカーネルXの演算結果となるライトブロックR(継続ライトブロック)は、グローバルメモリ152に格納された後に、第2のカーネルYのリードブロックS(継続リードブロック)としてグローバルメモリ152からプライベートメモリ164またはローカルメモリ170に転送され、第2のカーネルYの実行に供する。
一方、パイプライン化制御が行われた場合には、継続ライトブロックRは、グローバルメモリ152に転送されず、プライベートメモリ164またはローカルメモリ170を介して第2のカーネルYの実行に供されるようになっている。
なお、プライベートメモリ164またはローカルメモリ170を介したデータの受渡しについては、例えば、該データを生成する処理と、該データを用いて演算を行う処理とを同一のPEに割り当て、該PEは、前の演算により生成してプライベートメモリ164またはローカルメモリ170に格納したデータをそのまま読み出して後の演算に使えばよい。
また、OpenCLデバイスの各PEがリング状に接続され、各PEが該リング上の隣接するPEとデータの受渡しが可能である場合には、前の演算を行ったPEは、次の演算を行うPEとの間の各PEを介して、前の演算で生成したデータを渡せばよい。
図16の上部は、パイプライン化制御が行われない場合における第1のカーネルXと第2のカーネルYの実行態様を示し、図16の下部は、パイプライン化制御が行われた場合における第1のカーネルXと第2のカーネルYの実行態様を示す。
図16において、斜線で塗り潰された枠は、第1のカーネルXのためのリード転送の期間を示し、点で塗り潰された枠は、第1のカーネルXのためのライト転送の期間を示す。また、縦線で塗り潰された枠は、第2のカーネルYのためのリード転送の期間を示し、網状に塗り潰された枠は、第2のカーネルYのためのライト転送の期間を示す。
また、白い枠は、第1のカーネルXの実行期間を示し、波線で塗り潰された枠は、第2のカーネルYの実行期間を示す。
図16に示すように、パイプライン化制御が行われない場合において、第1のカーネルXと第2のカーネルYは、夫々独立カーネルとして実行され、実行される度に、サブリードブロックのリード転送(グローバルメモリからプライベートメモリ/ローカルメモリへの転送)と、サブライトブロックのライト転送(プライベートメモリ/ローカルメモリからグローバルメモリへの転送)が生じている。
一方、パイプライン化制御が行われた場合には、第1のカーネルXの各回の実行により生成されたサブライトブロックのライト転送が行われず、第2のカーネルYの各回の実行の演算対象となるサブリードブロック(第1のカーネルXにより生成されたサブライトブロック)のリード転送が行われない。
さらに、第2のカーネルYの実行の演算対象となるサブリードブロックのリード転送が行われないため、第2のカーネルYの実行に並行して、第1のカーネルXの次の実行のためのリード転送を行うことができる。
このように、本実施の形態のOpenCLシステム100におけるデバイス120の演算制御部200は、第1のカーネルXと第2のカーネルYを連続して実行させる際に、第1のカーネルXの各ライトブロックのうちに、第2のカーネルYリードブロックとして使用される継続ライトブロックが含まれており、かつ、上記継続ライトブロックの割当属性と、第2のカーネルYの、該継続ライトブロックに対応するリードブロック(継続リードブロック)割当属性とが一致する場合において、継続ライトブロックのサブブロックがそのまま継続リードブロックのサブブロックとして用いることができるため、パイプライン化制御を行うことにより、第1のカーネルXと第2のカーネルYの実行のパイプライン化を実現している。
具体的には、シナリオ決定部230は、シナリオ決定部230は、パイプライン化制御に際して、まず、第1のカーネルXの各リードブロックの余白属性に、第2のカーネルYの継続リードブロックの余白属性を論理和加算して、第1のカーネルXの各リードブロックの余白属性を変更すると共に、第1のカーネルXの各リードブロックの依存属性に、第2のカーネルYの継続リードブロックの依存属性を論理和加算することにより、第1のカーネルXの各リードブロックの属性群を変更する。
そして、第1のカーネルXと第2のカーネルYの各データブロックの属性群(第1のカーネルXのリードブロックについては、変更後の属性群)に基づいて、各データブロックの転送方式を決定し、決定した転送方式に応じて各データブロックの転送、及び該転送に対応する並列演算の制御を行う。この際、継続ライトブロックの各サブブロックをグローバルメモリに転送せず、プライベートメモリまたはローカルメモリを介して第2のカーネルYの実行に供すると共に、第1のカーネルXと第2のカーネルYの実行を並列させることにより、第1のカーネルXと第2のカーネルYのパイプライン化を実現する。
図16に示すように、シナリオ決定部230のパイプライン化制御の結果、第1のカーネルXと第2のカーネルYの実行完了までの時間は、パイプライン化制御が行われない場合より「T」の分短縮されており、OpenCLデバイスの処理が高速になっている。
なお、第1のカーネルXと第2のカーネルYの実行をパイプライン化するために、第1のカーネルXの各リードブロックの余白属性に、第2のカーネルYの継続リードブロックの余白属性を論理和加算しているため、第1のカーネルXのサブリードブロックのサイズと、該サブリードブロックと共に転送されるデータのサイズとの総和が、プライベートメモリまたはローカルメモリの容量を超える可能性がある。
これを回避するために、シナリオ決定部230は、第1のカーネルXの継続ライトブロックの割当属性と、第2のカーネルYの継続リードブロックの割当属性とが一致し、かつ、変更後の余白属性に基づいて決定した第1のカーネルXのサブリードブロックの転送時のサイズが予め設定された閾値以下であることを条件に、パイプライン化制御を行うと決定するようにすればよい。なお、この閾値は、プライベートメモリ及び/またはローカルメモリのサイズに応じて予め定めればよい。
また、分かりやすいように、上記において、関連性のある2つのカーネルのパイプライン化について説明したが、同様の原理で、3以上の関連性のあるカーネルのパイプライン化もできる。
すなわち、連続して実行されるN個(N:2以上の正数)のカーネルがあり、実行順が2番目以降の各カーネルは、そのリードブロックに、直前に実行されるカーネルのライトブロックが含まれているときに、シナリオ決定部230は、各K番目のカーネル(1≦K≦N−1)の継続ライトブロックの割当属性と、該継続ライトブロックに対応する、(K+1)番目のカーネルの継続リードブロックの割当属性とが一致する場合にのみ、パイプライン化制御を行うと決定する。
パイプライン化制御を行うと決定した場合に、シナリオ決定部230は、1番目のカーネルの各リードブロックの余白属性に、2番目以降の各カーネルの継続リードブロックの余白属性を論理和加算すると共に、1番目のカーネルの各リードブロックの依存属性に、2番目以降の各カーネルの継続リードブロックの依存属性を論理和加算する。
その後、シナリオ決定部230は、各データブロックの転送方式の決定、及び決定した転送方式に応じて各データブロックの転送、及び該転送に対応する並列演算の制御に際して、継続ライトブロックの各サブブロックをグローバルメモリに転送せず、プライベートメモリまたはローカルメモリを介して次のカーネルの実行に供すると共に、各カーネルの実行を並列させることにより、これらのカーネルのパイプライン化を実現する。
パイプライン化制御の対象となるカーネルの数が多いほど、1番目のカーネルのサブリードブロックの転送時のサイズが大きくなる。1番目のカーネルのサブリードブロックの転送時のサイズがプライベートメモリまたはローカルメモリの容量を超えることを避けるために、シナリオ決定部230は、上記N個のカーネルを、連続して実行される1つ以上のカーネルにより構成された複数のグループに分け、グループ毎にパイプライン化制御を行うようにすればよい。グループ分けに際しては、変更後の余白属性に基づいて決定した、該グループ内に最も先に実行されるカーネルのサブリードブロックの転送時のサイズが予め設定された閾値以下になるようにすればよい。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
10 OpenCLシステム
12 ホスト
14 OpenCLデバイス
16 CU
18 PE
20 プライベートメモリ
22 ローカルメモリ
24 キャッシュ
30 デバイスメモリ
32 グローバルメモリ
34 コンスタントメモリ
50 逐次プロセッサ
52 PE
54 プライベートメモリ
56 グローバルメモリ
58 キャッシュ制御機構
100 OpenCLシステム
110 ホスト
120 デバイス
140 演算ユニット
150 デバイスメモリ
152 グローバルメモリ
154 コンスタントメモリ
160 CU
162 PE
164 プライベートメモリ
170 ローカルメモリ
200 演算制御部
210 属性群格納部
220 カーネル間情報格納部
230 シナリオ決定部
Lx データブロックのX方向サイズ
Ly データブロックのY方向サイズ
SBsx サブブロックのX方向サイズ
SBsy サブブロックのY方向サイズ
SRB サブリードブロック
SWB サブライトブロック
WG ワークグループ
WGs ワークグループサイズ
WI ワークアイテム
R リード転送指示
W ライト転送指示
S 演算実行指示

Claims (4)

  1. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有するOpenCL(Open Computing Language)デバイスの前記複数の演算素子による並列演算を制御する演算制御装置であって、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、
    前記属性群保持部により保持された各前記属性群と、前記OpenCLデバイスの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、
    前記属性群は、
    前記転送方式を決定するために必要である一方、前記OpenCLデバイスの構成に依存しない属性を複数含むものであり、
    当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示す割当属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示す余白属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、前記依存関係がある場合における全ての依存方向を示す依存属性とを有し、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであり、
    前記シナリオ決定部は、
    第1のカーネルに続いて第2のカーネルを前記OpenCLデバイスに実行させ、かつ、前記第1のカーネルに対応する並列演算の各前記ライトブロックのうちに、前記第2のカーネルに対応する並列演算の前記リードブロックとして使用される継続ライトブロックが含まれており、かつ、前記第1のカーネルに対して設定された前記継続ライトブロックの前記割当属性と、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記割当属性とが一致する場合において、該継続ライトブロックが前記最下位階層へ転送されず、前記他の階層のメモリを介して前記第2のカーネルの実行に供されることにより、前記第1のカーネルと前記第2のカーネルの実行をパイプライン化するパイプライン化制御を行い、
    前記パイプライン化制御に際して、
    前記第1のカーネルに対応する各前記リードブロックの夫々に対して、該リードブロックに対して設定された前記余白属性と前記依存属性に、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記余白属性と前記依存属性を夫々論理和加算する、
    演算制御装置。
  2. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有するOpenCL(Open Computing Language)デバイスの前記複数の演算素子による並列演算を制御する演算制御方法であって、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する第1のステップと、
    保持された各前記属性群と、前記OpenCLデバイスの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行う第2のステップとを有し、
    前記属性群は、
    前記転送方式を決定するために必要である一方、前記OpenCLデバイスの構成に依存しない属性を複数含むものであり、
    当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示す割当属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示す余白属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、前記依存関係がある場合における全ての依存方向を示す依存属性とを有し、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであり、
    前記第2のステップにおいて、
    第1のカーネルに続いて第2のカーネルを前記OpenCLデバイスに実行させ、かつ、前記第1のカーネルに対応する並列演算の各前記ライトブロックのうちに、前記第2のカーネルに対応する並列演算の前記リードブロックとして使用される継続ライトブロックが含まれており、かつ、前記第1のカーネルに対して設定された前記継続ライトブロックの前記割当属性と、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記割当属性とが一致する場合において、該継続ライトブロックが前記最下位階層へ転送されず、前記他の階層のメモリを介して前記第2のカーネルの実行に供されることにより、前記第1のカーネルと前記第2のカーネルの実行をパイプライン化するパイプライン化制御を行い、
    前記パイプライン化制御に際して、
    前記第1のカーネルに対応する各前記リードブロックの夫々に対して、該リードブロックに対して設定された前記余白属性と前記依存属性に、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記余白属性と前記依存属性を夫々論理和加算する、
    演算制御方法。
  3. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有するOpenCL(Open Computing Language)デバイスの前記複数の演算素子による並列演算を制御する際に、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する第1のステップと、
    保持された各前記属性群と、前記OpenCLデバイスの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行う第2のステップとをコンピュータに実行させ、
    前記属性群は、
    前記転送方式を決定するために必要である一方、前記OpenCLデバイスの構成に依存しない属性を複数含むものであり、
    当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示す割当属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示す余白属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、前記依存関係がある場合における全ての依存方向を示す依存属性とを有し、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであり、
    前記第2のステップにおいて、
    第1のカーネルに続いて第2のカーネルを前記OpenCLデバイスに実行させ、かつ、前記第1のカーネルに対応する並列演算の各前記ライトブロックのうちに、前記第2のカーネルに対応する並列演算の前記リードブロックとして使用される継続ライトブロックが含まれており、かつ、前記第1のカーネルに対して設定された前記継続ライトブロックの前記割当属性と、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記割当属性とが一致する場合において、該継続ライトブロックが前記最下位階層へ転送されず、前記他の階層のメモリを介して前記第2のカーネルの実行に供されることにより、前記第1のカーネルと前記第2のカーネルの実行をパイプライン化するパイプライン化制御を行い、
    前記パイプライン化制御に際して、
    前記第1のカーネルに対応する各前記リードブロックの夫々に対して、該リードブロックに対して設定された前記余白属性と前記依存属性に、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記余白属性と前記依存属性を夫々論理和加算する、
    プログラム。
  4. 複数の演算素子と、
    該複数の演算素子に対して設けられた階層の異なる複数のメモリと、
    前記複数の演算素子による並列演算を制御する演算制御部とを備えるOpenCLデバイスであって、
    前記演算制御部は、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、
    前記属性群保持部により保持された各前記属性群と、前記OpenCLデバイスの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、
    前記属性群は、
    前記転送方式を決定するために必要である一方、前記OpenCLデバイスの構成に依存しない属性を複数含むものであり、
    当該データブロックを複数のサブブロックに分割して転送するか否か、及び、分割して転送する場合における分割方式を示す割当属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックと共に転送される、該サブブロックの周辺のデータのサイズを示す余白属性と、
    当該データブロックを複数のサブブロックに分割して転送する場合における、該サブブロックがその周辺の他のサブブロックと依存関係が有るか否か、及び、前記依存関係がある場合における全ての依存方向を示す依存属性とを有し、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであり、
    前記シナリオ決定部は、
    第1のカーネルに続いて第2のカーネルを前記OpenCLデバイスに実行させ、かつ、前記第1のカーネルに対応する並列演算の各前記ライトブロックのうちに、前記第2のカーネルに対応する並列演算の前記リードブロックとして使用される継続ライトブロックが含まれており、かつ、前記第1のカーネルに対して設定された前記継続ライトブロックの前記割当属性と、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記割当属性とが一致する場合において、該継続ライトブロックが前記最下位階層へ転送されず、前記他の階層のメモリを介して前記第2のカーネルの実行に供されることにより、前記第1のカーネルと前記第2のカーネルの実行をパイプライン化するパイプライン化制御を行い、
    前記パイプライン化制御に際して、
    前記第1のカーネルに対応する各前記リードブロックの夫々に対して、該リードブロックに対して設定された前記余白属性と前記依存属性に、前記第2のカーネルに対して設定された、前記継続ライトブロックに対応する前記リードブロックの前記余白属性と前記依存属性を夫々論理和加算する、
    OpenCLデバイス。
JP2014023044A 2014-02-10 2014-02-10 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス Expired - Fee Related JP6200824B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014023044A JP6200824B2 (ja) 2014-02-10 2014-02-10 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
US14/600,959 US9495213B2 (en) 2014-02-10 2015-01-20 Arithmetic control apparatus, arithmetic control method, non-transitory computer readable medium storing program, and open CL device
CN201510069844.6A CN104834630B (zh) 2014-02-10 2015-02-10 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014023044A JP6200824B2 (ja) 2014-02-10 2014-02-10 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス

Publications (2)

Publication Number Publication Date
JP2015149038A JP2015149038A (ja) 2015-08-20
JP6200824B2 true JP6200824B2 (ja) 2017-09-20

Family

ID=53775041

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014023044A Expired - Fee Related JP6200824B2 (ja) 2014-02-10 2014-02-10 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス

Country Status (3)

Country Link
US (1) US9495213B2 (ja)
JP (1) JP6200824B2 (ja)
CN (1) CN104834630B (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102269271B1 (ko) * 2014-09-12 2021-06-28 삼성전자주식회사 오픈 컴퓨팅 언어 기반의 애플리케이션 실행 방법 및 장치
WO2017074377A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Boosting local memory performance in processor graphics
US10223436B2 (en) 2016-04-27 2019-03-05 Qualcomm Incorporated Inter-subgroup data sharing
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
CN108317130B (zh) * 2018-01-12 2021-01-22 湖南中联重科智能技术有限公司 用于电液控制系统的智能终端、远程调用方法及工程机械
CN108897630B (zh) * 2018-06-06 2021-11-09 郑州云海信息技术有限公司 一种基于OpenCL的全局内存缓存方法、系统及装置
CN109992413B (zh) * 2019-03-01 2021-09-24 中国科学院计算技术研究所 一种面向宽度优先搜索算法的加速装置、方法及存储介质
JP7251416B2 (ja) * 2019-09-06 2023-04-04 富士通株式会社 情報処理プログラムおよび情報処理方法
CN110806942B (zh) * 2019-11-08 2024-05-07 广州华多网络科技有限公司 数据处理的方法和装置
CN113992660A (zh) * 2021-10-29 2022-01-28 维沃移动通信有限公司 文件传输方法、装置、电子设备及存储介质
CN114201154B (zh) * 2021-12-10 2023-01-31 北京百度网讯科技有限公司 算子生成方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US20110289519A1 (en) * 2010-05-21 2011-11-24 Frost Gary R Distributing workloads in a computing platform
JP5707265B2 (ja) * 2011-07-20 2015-04-22 ルネサスエレクトロニクス株式会社 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
US8689233B2 (en) * 2012-01-25 2014-04-01 International Business Machines Corporation Distributed function execution for hybrid systems
US8959469B2 (en) * 2012-02-09 2015-02-17 Altera Corporation Configuring a programmable device using high-level language
US9218289B2 (en) * 2012-08-06 2015-12-22 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US9146870B2 (en) * 2013-07-24 2015-09-29 Arm Limited Performance of accesses from multiple processors to a same memory location

Also Published As

Publication number Publication date
JP2015149038A (ja) 2015-08-20
CN104834630A (zh) 2015-08-12
CN104834630B (zh) 2019-08-16
US9495213B2 (en) 2016-11-15
US20150227466A1 (en) 2015-08-13

Similar Documents

Publication Publication Date Title
JP6200824B2 (ja) 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
JP5707265B2 (ja) 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
JP7430744B2 (ja) 機械学習モデルを改良して局所性を改善させること
US20230176907A1 (en) Dynamic task allocation for neural networks
US9244629B2 (en) Method and system for asymmetrical processing with managed data affinity
JP7545211B2 (ja) 多重経路ニューラルネットワークの複数のレイヤにリソースを割り当てる方法
EP3388940B1 (en) Parallel computing architecture for use with a non-greedy scheduling algorithm
US20230297425A1 (en) Allocation of memory resources to simd workgroups
US9442696B1 (en) Interactive partitioning and mapping of an application across multiple heterogeneous computational devices from a co-simulation design environment
US11733983B2 (en) Method and apparatus for generating metadata by a compiler
Wang et al. Bubble budgeting: Throughput optimization for dynamic workloads by exploiting dark cores in many core systems
CN109308191A (zh) 分支预测方法及装置
JP2010244435A (ja) キャッシュ制御装置及びキャッシュ制御方法
JP6374777B2 (ja) データ処理方法、プログラム及びデータ処理装置
JP2016071886A (ja) スケジューラコンピューティング装置、それを含む分散コンピューティングシステムのデータノード、及びその方法
US10120970B2 (en) Global routing framework of integrated circuit based on localized routing optimization
KR20240007354A (ko) 가속기를 분할하는 전자 장치, 배치를 할당하는 전자 장치 및 그 동작 방법
JP6445876B2 (ja) リソース割当装置、リソース割当システム、および、リソース割当方法
US20240248764A1 (en) Efficient data processing, arbitration and prioritization
WO2023004347A1 (en) Run-time configurable architectures
KR20230001132A (ko) 중요 경로 기반 스케줄링 및 후처리를 통한 리소스 활용을 극대화할 수 있는 multi-GPU 기반 딥러닝 모델 추론 기법
JP2005346290A (ja) 自動高位合成方法及び高位合成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161003

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170822

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170823

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170828

R150 Certificate of patent or registration of utility model

Ref document number: 6200824

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees