JP5707265B2 - 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ - Google Patents

演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ Download PDF

Info

Publication number
JP5707265B2
JP5707265B2 JP2011159396A JP2011159396A JP5707265B2 JP 5707265 B2 JP5707265 B2 JP 5707265B2 JP 2011159396 A JP2011159396 A JP 2011159396A JP 2011159396 A JP2011159396 A JP 2011159396A JP 5707265 B2 JP5707265 B2 JP 5707265B2
Authority
JP
Japan
Prior art keywords
block
memory
attribute
read
transfer
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.)
Active
Application number
JP2011159396A
Other languages
English (en)
Other versions
JP2013025547A (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 JP2011159396A priority Critical patent/JP5707265B2/ja
Priority to US13/529,973 priority patent/US9639337B2/en
Priority to KR1020120078952A priority patent/KR20130011961A/ko
Priority to EP12177054.9A priority patent/EP2549379B1/en
Priority to CN201210252648.9A priority patent/CN102890625B/zh
Publication of JP2013025547A publication Critical patent/JP2013025547A/ja
Application granted granted Critical
Publication of JP5707265B2 publication Critical patent/JP5707265B2/ja
Priority to US15/581,222 priority patent/US10114639B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/11Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Operations Research (AREA)
  • Databases & Information Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)

Description

本発明は、並列プロセッサの演算制御技術に関する。
近年、プロセッサの発熱を抑制する必要性から、プロセッサの動作周波数を上げる代わりに、並列に処理を行うプロセッサ・コア(以下、単に「コア」という)の数を増やすことで性能向上を実現する動きが顕著になっている。複数のコアを有するプロセッサは、マルチコアプロセッサと呼ばれており、マルチコアプロセッサの中の、特にコア数が多いものは、メニコアプロセッサと呼ばれる。本明細書の中で、マルチコアプロセッサとメニコアプロセッサの区別を特にせず、並列に処理を行うコアが複数含まれるプロセッサを概して「並列プロセッサ」という。
並列プロセッサは、アクセラレータとして様々な分野で用いられている。しかし、メーカ、分野などによって種々のアクセラレータが製造され、アクセラレータ用の言語やフレームワークも様々開発されているため、アクセラレータ間でプログラムコードの移植が困難である。
この問題を解決するため、並列プロセッサのための標準的なフレームワークとして、OpenCL(Open Computing Language)が定められた(非特許文献1)。ここで、OpenCLの概要を説明する。
図19は、非特許文献1におけるFig3.1に対して符号を追加したものであり、典型的なOpenCLシステムのプラットフォームモデルを示す。
図19に示すように、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側に転送する。
図20を参照して、メモリ空間を含むOpenCLデバイス14の構成を説明する。
図20は、非特許文献1におけるFig3.3に対して符号を追加したものである。前述したように、OpenCLデバイス14は1つ以上のCU16を備え、夫々のCU16は1つ以上のPE18を有する。
上述したステップ2におけるカーネルの実行に際して、OpenCLデバイス14では、4つの異なるメモリへのアクセスが生じ得る。この4つのメモリは、プライベートメモリ20、ローカルメモリ22、グローバルメモリ32、コンスタントメモリ34である。この4つのメモリについて、まず、図21を参照して、アイテムとワークグループの視点から説明する。なお、図21は、非特許文献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デバイスと異なる逐次プロセッサの場合においても、グローバルメモリ空間とプライベートメモリ空間との間でのデータ移動が行われる。図22に示す逐次プロセッサの例を参照して説明する。
図22に示す逐次プロセッサ20は、演算素子であるPE52、プライベートメモリ54、グローバルメモリ56、キャッシュ制御機構58を有する。
図示のように、逐次プロセッサ50の記憶装置は、プライベートメモリ54とグローバルメモリ56に分けられている。プライベートメモリ54は、物理的にオンチップの小容量メモリであり、グローバルメモリ56は、物理的にオフチップの大容量のメモリである。
逐次プロセッサ50では、記憶装置がプライベートメモリ54とグローバルメモリ56に分けられているが、プライベートメモリ54とグローバルメモリ56の間に設けられたキャッシュ制御機構58により、プライベートメモリ54とグローバルメモリ56間のデータ移動は自動的に行われ、逐次プロセッサ50のユーザは、1つの大きなメモリ空間しか見えない。つまり、逐次プロセッサ50のユーザは、グローバルメモリ56とプライベートメモリ54との間でどのようにデータを移動するかを意図しなくても、PE52に演算処理を行わせるユーザプログラムを容易に開発できる。
The OpenCL Specication,Ver:1.0,Document Revision:43,Khronos OpenCL Working Group(2009)
ところで、並列プロセッサ、特に図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デバイスのような並列プロセッサに対して、演算処理に伴う階層の異なる複数のメモリ間でのデータ移動について、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高めることができる。
本発明の実施の形態にかかるOpenCLシステムを示す図である。 ユーザが実現したい処理の具体例を説明するための図である。 リード属性を説明するための図である。 余白属性を説明するための図である。 放送属性を説明するための図である。 割当属性を説明するための図である(その1) 割当属性を説明するための図である(その2)。 依存属性を説明するための図である。 図2に示す各データブロックに対して設定された属性群の例を示す図である。 図1に示すOpenCLシステムにおける演算ユニットの構成を示すパラメータの例である。 階層内での対応付けと階層間での対応付けを示す図である。 図2に示す例に対してシナリオ決定部が決定した内容の一部を示す図である。 図1に示すOpenCLシステムにおいて、ユーザにより指定する必要のある内容を示す図である。 従来の手法により図2に示す演算を実現したい場合のカーネルの例を示す図である(その1)。 従来の手法により図2に示す演算を実現したい場合のカーネルの例を示す図である(その2)。 図1に示すOpenCLシステムにおいて、図2に示す演算を実現したい場合のカーネルの例を示す図である。 従来の手法により、非同期メモリ転送に対応するOpenCLデバイスで図2に示す演算を実現したい場合のカーネルの例を示す図である。 非同期メモリ転送に対応する/対応しないOpenCLデバイスで図2に示す演算を実現したい場合に、図1に示すOpenCLシステムにおけるシナリオ決定部の処理の差異を示す図である。 OpenCLシステムのプラットフォームモデルを示す図である。 OpenCLデバイスの構成を示す図である。 OpenCLデバイスにおける各種メモリを説明するための図である。 逐次プロセッサの例を示す図である。 従来技術の問題点を説明するための図である(その1)。 従来技術の問題点を説明するための図である(その2)。
以下、図面を参照して本発明の実施の形態について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェアとソフトウェア(プログラム)の組合せによっていろいろな形で実現できることは当業者には理解されるところであり、ハードウェアとソフトウェアのいずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(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は、演算制御部130、演算ユニット140を備える。演算制御部130は、属性群格納部132、シナリオ決定部134を有する。演算ユニット140は、デバイスメモリ150、複数のコンピュートユニット(CU)160、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)に示す処理である。
Figure 0005707265
演算対象のデータは、リードブロック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において、リード属性として設定される転送順位は、「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における演算制御部130のシナリオ決定部134により決定されるが、ユーザが、カーネルの作成時に、その最大値と最小値のいずれをとるかを指定することができる。
また、1つのアイテムに割り当てるデータ量も、後にシナリオ決定部134により決定される。ワークグループサイズWGsが最小値をとる場合とは、1アイテムが1PEに対応する場合である。それに対し、PEのプライベートメモリをM(M: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は、割当属性とリード属性が「縦優先」と「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の演算制御部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方向サイズLy (2)
分割サイズ
=サブブロックのX方向のサイズSBsx×Y方向のサイズSBsy (3)
分割数=データブロックのサイズ÷(分割サイズ×ワークグループサイズWGs)(4)
反復回数
={分割数×(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のワークグループサイズ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)でローカルメモリに転送される。
最後に、依存属性が「依存有り」のデータブロックが存在する場合のシナリオ決定部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に示す同一のものを使用することができ、可搬性が優れている。
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述した実施の形態に対してさまざまな変更、増減を行ってもよい。これらの変更、増減が行われた変形例も本発明の範囲にあることは、当業者に理解されるところである。
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 デバイス
130 演算制御部
132 属性群格納部
134 シナリオ決定部
140 演算ユニット
150 デバイスメモリ
152 グローバルメモリ
154 コンスタントメモリ
160 CU
162 PE
164 プライベートメモリ
170 ローカルメモリ
Lx データブロックのX方向サイズ
Ly データブロックのY方向サイズ
SBsx サブブロックのX方向サイズ
SBsy サブブロックのY方向サイズ
SRB サブリードブロック
SWB サブライトブロック
WG ワークグループ
WGs ワークグループサイズ
WI ワークアイテム
R リード転送指示
W ライト転送指示
S 演算実行指示

Claims (8)

  1. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算を制御する演算制御装置であって、

    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、
    前記属性群保持部により保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、
    前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする演算制御装置。
  2. 前記並列プロセッサは、OpenCL((Open Computing Language)デバイスであり、
    各前記属性群は、カーネルの引数として設定されることを特徴とする請求項1に記載の演算制御装置。
  3. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算を制御する演算制御方法であって、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持し、
    保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行い、
    前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする演算制御方法。
  4. 前記並列プロセッサは、OpenCL((Open Computing Language)デバイスであり、
    各前記属性群は、カーネルの引数として設定されることを特徴とする請求項3に記載の演算制御方法。
  5. 複数の演算素子と、該複数の演算素子に対して設けられた階層の異なる複数のメモリとを有する並列プロセッサの前記複数の演算素子による並列演算の制御に際して、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持し、
    保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行う処理をコンピュータに実行させ、
    前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とするプログラム。
  6. 前記並列プロセッサは、OpenCL((Open Computing Language)デバイスであり、
    各前記属性群は、カーネルの引数として設定されることを特徴とする請求項5に記載のプログラム。
  7. 複数の演算素子と、
    該複数の演算素子に対して設けられた階層の異なる複数のメモリと、
    前記複数の演算素子による並列演算を制御する演算制御部とを備える並列プロセッサであって、
    前記演算制御部は、
    前記複数のメモリのうちの最下位階層のメモリに1つ以上格納されたデータブロックであって、前記並列演算の演算対象としてそのデータが前記他の階層のメモリに転送されるリードブロックと、前記並列演算後に前記他の階層のメモリから前記最下位階層のメモリに転送される1つ以上のデータブロックであって、前記1つ以上のリードブロックに対する並列演算の演算結果であるライトブロックとに対して夫々設定された属性群を取得して保持する属性群保持部と、
    前記属性群保持部により保持された各前記属性群と、前記並列プロセッサの構成を示す構成パラメータとに基づいて、夫々の前記リードブロックと前記ライトブロックの転送方式を決定し、決定した転送方式に応じて各前記リードブロックと前記ライトブロックの転送、及び該転送に対応する前記並列演算の制御を行うシナリオ決定部とを有し、
    前記属性群は、前記転送方式を決定するために必要である一方、前記並列プロセッサの構成に依存しない属性を1つ以上含み、
    前記ライトブロックの属性群は、該ライトブロックが既に前記他の階層のメモリに存在し、かつ、前記最下位階層のメモリに転送されると仮定して設定されたものであることを特徴とする並列プロセッサ。
  8. OpenCL((Open Computing Language)デバイスであり、
    各前記属性群は、カーネルの引数として設定されることを特徴とする請求項7に記載の並列プロセッサ。
JP2011159396A 2011-07-20 2011-07-20 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ Active JP5707265B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2011159396A JP5707265B2 (ja) 2011-07-20 2011-07-20 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
US13/529,973 US9639337B2 (en) 2011-07-20 2012-06-21 Arithmetic and control unit, arithmethic and control method, program and parallel processor
KR1020120078952A KR20130011961A (ko) 2011-07-20 2012-07-19 연산 제어 장치, 연산 제어 방법, 프로그램, 및 병렬 프로세서
EP12177054.9A EP2549379B1 (en) 2011-07-20 2012-07-19 Arithmetic and control unit, arithmetic and control method and parallel processor
CN201210252648.9A CN102890625B (zh) 2011-07-20 2012-07-20 运算和控制单元、运算和控制方法、与并行处理器
US15/581,222 US10114639B2 (en) 2011-07-20 2017-04-28 Arithmetic and control unit, arithmetic and control method, program and parallel processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011159396A JP5707265B2 (ja) 2011-07-20 2011-07-20 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ

Publications (2)

Publication Number Publication Date
JP2013025547A JP2013025547A (ja) 2013-02-04
JP5707265B2 true JP5707265B2 (ja) 2015-04-22

Family

ID=46639319

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011159396A Active JP5707265B2 (ja) 2011-07-20 2011-07-20 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ

Country Status (5)

Country Link
US (2) US9639337B2 (ja)
EP (1) EP2549379B1 (ja)
JP (1) JP5707265B2 (ja)
KR (1) KR20130011961A (ja)
CN (1) CN102890625B (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9772864B2 (en) * 2013-04-16 2017-09-26 Arm Limited Methods of and apparatus for multidimensional indexing in microprocessor systems
JP6200824B2 (ja) * 2014-02-10 2017-09-20 ルネサスエレクトロニクス株式会社 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
JP6582367B2 (ja) * 2014-07-18 2019-10-02 富士通株式会社 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
JP6374777B2 (ja) 2014-11-28 2018-08-15 ルネサスエレクトロニクス株式会社 データ処理方法、プログラム及びデータ処理装置
US10621088B2 (en) * 2014-12-08 2020-04-14 Intel Corporation Apparatus and method to improve memory access performance between shared local memory and system global memory
US10083135B2 (en) * 2015-08-28 2018-09-25 Macronix International Co., Ltd. Cooperative overlay
JP6423809B2 (ja) * 2016-02-19 2018-11-14 イーソル株式会社 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法
US10275385B2 (en) 2016-02-25 2019-04-30 SK Hynix Inc. Integrated circuit system
US10223436B2 (en) 2016-04-27 2019-03-05 Qualcomm Incorporated Inter-subgroup data sharing
CN108268931B (zh) * 2016-12-30 2022-10-25 华为技术有限公司 数据处理的方法、装置和系统
CN109583577B (zh) * 2017-09-29 2021-04-23 上海寒武纪信息科技有限公司 运算装置及方法
CN112446004B (zh) * 2019-08-28 2023-07-07 无锡江南计算技术研究所 非结构网格dilu预条件子众核并行优化方法
US12020075B2 (en) * 2020-09-11 2024-06-25 Apple Inc. Compute kernel parsing with limits in one or more dimensions with iterating through workgroups in the one or more dimensions for execution

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3495173B2 (ja) * 1996-02-14 2004-02-09 富士通株式会社 演算処理方法および演算処理装置
US7130963B2 (en) * 2003-07-16 2006-10-31 International Business Machines Corp. System and method for instruction memory storage and processing based on backwards branch control information

Also Published As

Publication number Publication date
KR20130011961A (ko) 2013-01-30
US20130024667A1 (en) 2013-01-24
JP2013025547A (ja) 2013-02-04
CN102890625A (zh) 2013-01-23
US10114639B2 (en) 2018-10-30
EP2549379B1 (en) 2018-11-21
US20170228232A1 (en) 2017-08-10
US9639337B2 (en) 2017-05-02
CN102890625B (zh) 2017-03-01
EP2549379A1 (en) 2013-01-23

Similar Documents

Publication Publication Date Title
JP5707265B2 (ja) 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
JP6200824B2 (ja) 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
US10055257B2 (en) Virtual machine placement in a cloud computing environment based on factors including optimized processor-memory affinity
US11221877B2 (en) Task parallel processing method, apparatus and system, storage medium and computer device
JP5412599B2 (ja) 計算機システム、および、計算機システムにおける仮想計算機の最適配置方法
US10713095B2 (en) Multi-core processor and method of controlling the same using revisable translation tables
JP5911997B2 (ja) 装置、システム及びメモリ管理の方法
CN103914412B (zh) 用于存储设备中的流量优先化的方法,存储设备以及存储系统
JP2010244435A (ja) キャッシュ制御装置及びキャッシュ制御方法
CN105302536A (zh) MapReduce应用的相关参数的配置方法和装置
US9104496B2 (en) Submitting operations to a shared resource based on busy-to-success ratios
US20170083375A1 (en) Thread performance optimization
US11138291B2 (en) Assymetric allocation of SRAM and data layout for efficient matrix multiplication
Chen et al. Data prefetching and eviction mechanisms of in-memory storage systems based on scheduling for big data processing
US9594859B1 (en) Apparatus and associated methods for parallelizing clustering and placement
JP2016103154A (ja) データ処理方法、プログラム及びデータ処理装置
JP6445876B2 (ja) リソース割当装置、リソース割当システム、および、リソース割当方法
KR20240007354A (ko) 가속기를 분할하는 전자 장치, 배치를 할당하는 전자 장치 및 그 동작 방법
KR20240103607A (ko) 통합 가상 메모리 관리 방법 및 장치
JP2023059847A (ja) リソース再設定可能な深層ニューラルネットワーク加速器、システムおよび方法
Zheng et al. Massive Indexed Directories in DeltaFS

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140417

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141226

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: 20150203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150302

R150 Certificate of patent or registration of utility model

Ref document number: 5707265

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350