特許第6374777号(P6374777)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ルネサスエレクトロニクス株式会社の特許一覧

特許6374777データ処理方法、プログラム及びデータ処理装置
<>
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000002
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000003
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000004
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000005
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000006
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000007
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000008
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000009
  • 特許6374777-データ処理方法、プログラム及びデータ処理装置 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6374777
(24)【登録日】2018年7月27日
(45)【発行日】2018年8月15日
(54)【発明の名称】データ処理方法、プログラム及びデータ処理装置
(51)【国際特許分類】
   G06F 15/80 20060101AFI20180806BHJP
   G06F 9/38 20060101ALI20180806BHJP
【FI】
   G06F15/80
   G06F9/38 370C
【請求項の数】6
【全頁数】19
(21)【出願番号】特願2014-241102(P2014-241102)
(22)【出願日】2014年11月28日
(65)【公開番号】特開2016-103154(P2016-103154A)
(43)【公開日】2016年6月2日
【審査請求日】2017年5月24日
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【弁理士】
【氏名又は名称】家入 健
(72)【発明者】
【氏名】田中 克典
【審査官】 大桃 由紀雄
(56)【参考文献】
【文献】 特開2013−025547(JP,A)
【文献】 特開平09−167242(JP,A)
【文献】 特開2003−224853(JP,A)
【文献】 特開2012−221131(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/80
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プロセッサと、複数階層のメモリとを有するプログラム実行部と、
前記プロセッサが前記メモリからリードブロックを読み出してデータ処理を行い、前記メモリへ前記データ処理の結果であるライトブロックを書き出す複数のサブルーチンを含むプログラムと、前記リードブロック及び前記ライトブロックに対してそれぞれ設定された属性とが入力される演算制御部と、
メモリアクセス監視部と
を備えたデータ処理装置のデータ処理方法であって、
前記プログラム実行部が
前記プログラムを実行するステップと、
前記メモリアクセス監視部が、
形状属性が非矩形であるデータブロックまたはサブデータブロックの前記サブルーチン間に行われるメモリ転送を監視して、当該メモリ転送に係るメモリアクセス情報を前記演算制御部へ出力するステップと、
前記演算制御部が、
前記メモリアクセス情報に基づき当該データブロックの読出しまたは書込みアドレスの変換を行って形状情報を算出して前記形状属性に追加し
少なくとも前記形状情報を追加した前記形状属性を含む属性を前記プログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性を修正し、
前記サブルーチン間で受け渡されるデータブロックの各々について、属性と、前記プロセッサ及び前記メモリの性能・構成情報とが所定の条件を満たすときには当該データブロックをサブデータブロックに分割し、
前記複数階層のメモリから前記サブデータブロックの読出し元あるいは書出し先となるメモリを選択して、
前記プロセッサによる前記データブロックまたは前記サブデータブロックへのメモリアクセス及び当該データブロックに係るサブルーチンの実行を制御するステップと
を有するデータ処理方法。
【請求項2】
前記演算制御部が、
少なくとも前記形状情報を追加した前記形状属性を含む属性を前記プログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性を修正するのは、
前記サブルーチン間で受け渡されるデータブロックの各々について、属性と、前記プロセッサ及び前記複数階層のメモリの性能・構成情報とが前記所定の条件を満たさないときである
請求項1記載のデータ処理方法。
【請求項3】
前記プログラムは第1のサブルーチンと、前記第1のサブルーチン後に実行される第2のサブルーチンとを有し、
前記第1のサブルーチンのデータブロックには第1の属性が設定され、
前記第2のサブルーチンのデータブロックには前記第1の属性と同じ属性に係る第2の属性が設定されており、
属性を修正するときに、
前記第1の属性と前記第2の属性との論理和または論理積を算出して、前記論理和または論理積を新たな第1の属性とする
請求項1記載のデータ処理方法。
【請求項4】
属性には、更に、形状依存属性が含まれており、
前記形状依存属性は、前記形状依存属性が設定された第1のデータブロックが形状を依存する第2のデータブロックを指し示し、
前記メモリアクセス監視部が
前記第2のデータブロックの更新を監視して、前記更新に係る情報を前記演算制御部へ出力するステップと、
前記演算制御部が、
前記更新に係る情報に基づき、少なくとも前記第1のデータブロックを含むデータブロックの前記形状属性をリセットするステップと
を更に有する請求項1記載のデータ処理方法。
【請求項5】
請求項1記載のデータ処理方法の各ステップを前記データ処理装置に実行させるためのプログラム。
【請求項6】
プロセッサと、複数階層のメモリとを有するプログラム実行部と、
前記プロセッサが前記メモリからリードブロックを読み出してデータ処理を行い、前記メモリへ前記データ処理の結果であるライトブロックを書き出す複数のサブルーチンを含むプログラムと、前記リードブロック及び前記ライトブロックに対してそれぞれ設定された属性とが入力される演算制御部と、
メモリアクセス監視部と
を備え、
前記プログラム実行部が
前記プログラムを実行し、
前記メモリアクセス監視部が、
形状属性が非矩形であるデータブロックまたはサブデータブロックの前記サブルーチン間に行われるメモリ転送を監視して、当該メモリ転送に係るメモリアクセス情報を前記演算制御部へ出力し、
前記演算制御部が、
前記メモリアクセス情報に基づき当該データブロックの読出しまたは書込みアドレスの変換を行って形状情報を算出して前記形状属性に追加し
少なくとも前記形状情報を追加した前記形状属性を含む属性を前記プログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性を修正し、
前記サブルーチン間で受け渡されるデータブロックの各々について、属性と、前記プロセッサ及び前記メモリの性能・構成情報とが所定の条件を満たすときには当該データブロックをサブデータブロックに分割し、
前記複数階層のメモリから前記サブデータブロックの読出し元あるいは書出し先となるメモリを選択して、
前記プロセッサによる前記データブロックまたは前記サブデータブロックへのメモリアクセス及び当該データブロックに係るサブルーチンの実行を制御する
データ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理方法、プログラム及びデータ処理装置に関する。
【背景技術】
【0002】
近年、プロセッサの発熱を抑制する必要性から、プロセッサの動作周波数を上げる代わりに、並列に処理を行うプロセッサ・コアの数を増やすことで性能向上を実現する動きが顕著になっている。
【0003】
特許文献1には、並列プロセッサにおいて、各データブロックに対してそれぞれ設定された属性群と、並列プロセッサの構成を示す構成パラメータとに基づいて、最下位階層のメモリ(グローバルメモリ)と、他の階層のメモリ(プライベートメモリまたはローカルメモリ)との間での各データブロックの転送方式を決定し、各データブロックの転送及び該転送に対応する並列演算の制御を行うことが記載されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2013−025547号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記並列プロセッサによれば、演算処理に伴う階層の異なる複数のメモリ間でのデータ移動について、ユーザコードの開発者の負担を減らすと共に、ユーザコードの可搬性を高めることができる。
【0006】
しかしながら、上記並列プロセッサにおいては、並列演算前にデータブロックをグローバルメモリからプライベートメモリまたはローカルメモリに転送するリード転送、及び、並列演算後にデータブロックをプライベートメモリまたはローカルメモリからグローバルメモリに転送するライト転送をそれぞれ行い、処理時間が長くなることから、更なる処理効率の向上が望まれていた。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
一実施の形態によれば、データ処理方法は、プロセッサと、複数階層のメモリとを有するプログラム実行部と、前記プロセッサが前記メモリからリードブロックを読み出してデータ処理を行い、前記メモリへ前記データ処理の結果であるライトブロックを書き出す複数のサブルーチンを含むプログラムと、前記リードブロック及び前記ライトブロックに対してそれぞれ設定された属性値とが入力される演算制御部と、メモリアクセス監視部とを備えたデータ処理装置のデータ処理方法であって、前記プログラム実行部が前記プログラムを実行するステップと、前記メモリアクセス監視部が、形状属性値が非矩形であるデータブロックまたはサブデータブロックの前記サブルーチン間に行われるメモリ転送を監視して、当該メモリ転送に係るメモリアクセス情報を前記演算制御部へ出力するステップと、前記演算制御部が、前記メモリアクセス情報に基づき当該データブロックの読出しまたは書込みアドレスの変換を行って形状属性値を算出し、少なくとも前記算出した形状属性値を含む属性値を前記プログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性値を修正し、前記サブルーチン間で受け渡されるデータブロックの各々について、属性値と、前記プロセッサ及び前記メモリの性能・構成情報とが所定の条件を満たすときには当該データブロックをサブデータブロックに分割し、前記複数階層のメモリから前記サブデータブロックの読出し元あるいは書出し先となるメモリを選択して、前記プロセッサによる前記データブロックまたは前記サブデータブロックへのメモリアクセス及び当該データブロックに係るサブルーチンの実行を制御するステップとを有する。
なお、上記一実施の形態の方法を装置やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本発明の態様としては有効である。
【発明の効果】
【0008】
上記一実施の形態によれば、処理効率の向上を図ることができるデータ処理方法、プログラム及びデータ処理装置を提供することができる。
【図面の簡単な説明】
【0009】
図1】プログラムを表現した有向グラフと当該プログラムへの資源割り当てとを示す図である。
図2】実施の形態1に係るOpenCLシステム100の概略構成を示す図である。
図3】実施の形態1に係るデータ処理方法の処理手順を示すフローチャートである。
図4】実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの当初の対応関係を示す図である。
図5】実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの変更された対応関係を示す図である。
図6】実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの更に変更された対応関係を示す図である。
図7】実施の形態2に係るサブルーチン、データブロック及び複数階層メモリの当初の対応関係を示す図である。
図8】実施の形態2に係るデータ処理方法の処理手順を示すフローチャートである。
図9】実施の形態2に係るサブルーチン、データブロック及び複数階層メモリの変更された対応関係を示す図である。
【発明を実施するための形態】
【0010】
説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。
【0011】
したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0012】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。
【0013】
非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。
【0014】
また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0015】
(実施の形態1)
本実施の形態1のデータ処理方法は、各データブロックに設定する属性群に形状属性を追加し、データ処理装置の構成にデータブロックの形状属性を求めるためのメモリアクセス監視部を追加し、プログラムを試行して非矩形に分割されるデータブロックの形状属性を求め、この形状属性をプログラム中でのデータまたは処理の流れとは逆方向に伝搬させることにより、サブデータブロックの格納先を高速で小容量な上位階層のメモリに変更して、プログラムの実行時間を短縮するものである。
【0016】
以下、本実施の形態1に係るデータ処理方法について、当該処理方法が適用される技術の一つである画像認識技術と関連付けながら説明する。
画像認識とは画像から物体の有無などの様々な情報を抽出する技術であり、通常は複数の基本的な画像処理を組み合わせて実現される。各画像処理はサブルーチンとして処理される。画像は多数の画素と呼ばれる単位データの2次元配列として表現され、画像処理の多くは画像中の各画素に対して同様の演算を適用することで行われる。例えば、画像処理の一つにフィルタ処理と呼ばれる処理がある。フィルタ処理は画像を変換する処理で、元画像からノイズを除去するなどの効果を得るために用いられる。
【0017】
フィルタ処理では、ある座標の画素を中心とする縦横3〜5画素程度の正方形領域を参照して、正方形領域内の画素に対してその相対位置に基づく係数を乗じて積和演算を行い、変換後の当該ある座標の画素の画素値を得るような処理を行う。画像全体を変換するためには、画素の変換を画像全体に対して適用する。画素毎に座標及び画素値は異なるが、適用される演算は同一である。この特徴は多くの画像処理に共通している。
【0018】
画像処理を行う場合に、画像は2次元配列のデータブロックとして表現され、サブデータブロックとよばれる領域に分割されて、サブデータブロック単位で処理が適用される。ブロック分割の利点は、データ転送の効率化による処理時間の短縮である。
【0019】
画像をはじめとする多次元配列データブロックに対するデータ処理システムを実現する技術として、グラフマネージャを用いた並列プロセッサと並列プロセッサの制御方法がある。画像認識処理をはじめとする多次元配列処理プログラムもまた、一般のプログラムと同様に1つ以上のサブルーチンから成る。
【0020】
サブルーチンはメモリから多次元配列データブロックを読み出して処理を行い、メモリに多次元配列データブロックを書き出して処理を終了する。サブルーチンが読み出すデータブロックがリードブロック、サブルーチンが書き出すデータブロックがライトブロックである。
【0021】
グラフマネージャは、プログラムを、サブルーチンをノードとし、ノード間のデータブロック転送をエッジとする有向グラフにより表現する。
図1は、プログラムを表現した有向グラフと当該プログラムへの資源割り当てとを示す図である。この有向グラフは、「データ入力」から「処理結果出力」までの間の6つのサブルーチンSR11〜SR16をノードとし、「データ入力」、「処理結果出力」及びサブルーチンSR11〜SR16間のデータ転送をエッジとする。
【0022】
エッジの終点・起点には、リードブロック・ライトブロックの性質を示す属性群(サイズ属性、リード属性、ライト属性、余白属性、放送属性、割当属性、階層属性、依存属性)の属性値が与えられる。プログラムをハードウェア上に割り当てる、つまり、マッピングするときは、ノードはプロセッサに割り当てられ、ノード間のデータ転送として実装されるエッジはメモリに割り当てられる。
【0023】
グラフマネージャは、プロセッサ及び複数階層メモリの構成と、ノードへ入出力されるリードブロック及びライトブロックの属性値とから、ブロック分割及び資源割り当てを行う。
ブロック分割では、エッジでつながれたライトブロック及びリードブロックの属性値を照合して、サブライトブロックがサブリードブロックに含まれるように、つまり、リード側のノードが参照するデータ要素についてライト側のノードが提供できるように、また、分割後のサブリードブロック及びサブライトブロックの大きさが高位階層のメモリの容量内となるようにライトブロックとリードブロックとを分割する。
【0024】
資源割り当てでは、ノードが示す、サブルーチンを実行するプロセッサと、エッジが示す、データブロックあるいはサブデータブロックの転送に用いるメモリとを決定する。図1に示した矢印付きの各破線はエッジへの資源割り当てを示す例である。例えば、「データ入力」には第n階層のメモリを割り当て、「データ転送13→15」には第1階層のメモリを割り当てることを示している。当該プログラムへの入力データブロックはまず最下位階層(第n階層)のメモリに格納され、最後に最下位階層のメモリへ書き出される。なお、図1ではノードへの資源割り当てを示す線を省略している。
【0025】
最も単純な資源割り当ては、各エッジに最も大容量の最下位階層のメモリを割り当てることであるが、データ転送速度が遅くなり、プログラムの実行時間が長くなってしまう。そこで、各エッジについて、データブロックをサブデータブロックへ分割することにより、できるだけ上位階層のメモリを割り当てることを考える。
【0026】
例えば、図1に示した例では、ノードSR13からノードSR15へのエッジにおける転送データブロックが、最上位階層の第1階層のメモリの容量に収まるように分割可能であるとすると、第1階層のメモリをそのサブデータブロックの転送用メモリとして資源割り当てを行うことが可能となる。
また、ノードSR11からノードSR13へのエッジにおける転送データブロックが、第1階層のメモリの容量よりも大きかったとしても、第2階層のメモリの容量よりも小さければ、第2階層のメモリをそのサブデータブロックの転送用メモリとして資源割り当てを行うことが可能となる。
【0027】
このとき、分割されて非矩形となるデータブロックへのリードあるいはライトのアクセスは、当該データブロック全体へのランダムアクセスと見なされる。そのため、当該データブロックはサブデータブロックに分割されず、当該データブロックの転送のために大容量で低速なメモリを使わざるを得ない。
【0028】
データブロックを非矩形のサブデータブロックに分割する処理の例として、画像の歪み補正処理がある。この処理は、リードブロックとして歪んだ画像と歪んだ画像に含まれる各画素の座標の補正値の配列とが与えられ、ライトブロックとして補正後の画像を出力する処理である。その後のサブルーチンでの処理のためにライトブロックを矩形に分割できるようにする必要があり、リードブロックを非矩形のサブリードブロックに分割し、サブリードブロックの各画素を歪み補正処理で変位させて、矩形のサブライトブロックが得られるようにする。
【0029】
そこで、本実施の形態1に係るデータ処理方法は、上記した属性群に非矩形のサブデータブロックを表現する属性である形状属性を追加して、グラフマネージャがデータブロックを非矩形のサブデータブロックに分割できるようにするものである。
また、本実施の形態1に係るデータ処理方法は、実際はサブデータブロックに分割可能であるがそのサブデータブロックが非矩形で具体的な形状が不明なときに、プログラムを試行して、メモリアクセス情報を得る。そして、メモリアクセス情報から求められるサブデータブロックの具体的な形状に基づいてアドレス変換を行い、サブデータブロックへの分割を可能にし、当該サブデータブロックの転送用に高速なメモリを利用するものである。
【0030】
つぎに、本実施の形態1に係るデータ処理方法を、データ処理装置であるOpenCLデバイスを用いて実現する場合について説明する。
なお、本実施の形態1に係るデータ処理方法は、プロセッサと、複数階層のメモリとを有するプログラム実行部を備えるデータ処理装置を用いて実現することができ、例えば、マルチコアあるいはマルチスレッドあるいはSIMD(Single Instruction Multi Data)型のプロセッサを含むマイクロコントローラ、SoCなどを用いて実現することができる。すなわち、本実施の形態1に係るデータ処理方法を実現するデータ処理装置は、OpenCLデバイスに限定されるものではない。
【0031】
図2は、本実施の形態1に係るOpenCLシステム100の概略構成を示す図である。OpenCLシステム100は、OpenCLホスト(以下、単に「ホスト」という)110、OpenCLデバイス(以下、単に「デバイス」という)120などを備える。
デバイス120は、演算制御部200、演算ユニット(プログラム実行部)140、メモリアクセス監視部300などを有する。演算制御部200は、属性群格納部210、カーネル間情報格納部220、シナリオ決定部230などを有する。演算ユニット140は、デバイスメモリ150、複数のコンピュートユニット(CU)160、CU160毎に設けられたローカルメモリ170などを有する。
【0032】
また、デバイスメモリ150は、グローバルメモリ152、コンスタントメモリ154などを有する。また、それぞれのCU160は、複数の演算素子(プロセッサ、PE)162と、PE162毎に設けられたキャッシュなどのプライベートメモリ164などを有する。複数の演算素子162は基本的に同じプログラムを並列処理するもので、各演算素子162が画像データを分割したデータブロックをそれぞれ分担して処理する。
なお、グローバルメモリ152、コンスタントメモリ154、CU160、PE162、プライベートメモリ164、ローカルメモリ170などは、通常のOpenCLデバイスにおける同一名称のものと同様であり、ここでは詳細な説明を省略する。
【0033】
また、カーネル間情報格納部220を除くOpenCLシステム100の構成やデータ処理方法などについては、特許文献1記載のものと共通する点もあり、特許文献1を参考にされたい。
ホスト110は、デバイス120に演算を行わせる際に、ユーザにより引数の指定がなされた、該演算に対応するカーネル、つまり、プログラムをデバイス120に転送する。
【0034】
カーネル間情報格納部220は、連続して実行される複数のカーネル、つまり、複数のサブルーチン間のデータブロックの依存関係を示す情報(以下、「カーネル間データブロック依存情報」という)を格納している。この情報は、ユーザにより直接、カーネル間情報格納部220に入力されるようにしてもよいし、上記複数のサブルーチンのうちの1つ、例えば、最も先に実行されるサブルーチンの引数に含まれるようにして、該サブルーチンと共にホスト110からデバイス120に転送され、カーネル間情報格納部220に格納されるようにしてもよい。
【0035】
カーネル間データブロック依存情報は、例えば、先に実行されるサブルーチンのライトブロックのうちに、後に実行されるサブルーチンのリードブロックとして使用されるものがあるか否か、また、使用されるものがある場合における当該ライトブロックと当該リードブロックとの対応関係を示すものである。
なお、他のサブルーチンと関連性が無く、その演算対象とするリードブロックが他のサブルーチンの演算結果であるライトブロックではなく、その演算結果であるライトブロックが他のサブルーチンのリードブロックとならないサブルーチンの場合には、カーネル間データブロック依存情報は、「依存なし」を示す。
【0036】
演算制御部200は、ホスト110からのプログラムが示す演算内容、属性群格納部210に格納された属性群と、カーネル間情報格納部220に格納されたカーネル間データブロック依存情報とに基づいて、演算ユニット140を制御する。このために、シナリオ決定部230は、属性群格納部210に格納された属性群に基づいて、転送方式を決定すると共に、決定された転送方式に基づいて、演算ユニット140による演算及び演算に伴うデータの転送を制御する。
【0037】
演算ユニット140は、演算制御部200の制御に従って演算を行い、演算結果を得る。演算ユニット140が行う演算には、演算対象のデータをデバイスメモリ150からプライベートメモリ164またはローカルメモリ170へ転送するリード転送と、演算結果のデータをプライベートメモリ164またはローカルメモリ170からデバイスメモリ150へ転送するライト転送とを伴う。
このため、演算制御部200には、ホスト110からのプログラムと、プログラムに含まれるサブルーチンにより読み出されるリードブロック及びサブルーチンにより書き出されるライトブロックに対してそれぞれ設定された属性値とが入力される。
【0038】
属性値として設定されるデータブロックの属性には、リード属性、ライト属性、余白属性、放送属性、割当属性、階層属性、依存属性及び本実施の形態1に係るデータ処理方法で新たに追加した形状属性(形状情報)が含まれる。形状属性には、矩形、平行四辺形などのサブデータブロックの形状に関する情報と、XY座標の一次元配列、矩形または平行四辺形の頂点のXY座標などのサブデータブロックの座標に関する情報とが含まれる。
【0039】
演算制御部200は、サブルーチン間で受け渡されるデータブロックについて、リード側とライト側の属性値などが分割可能条件を満たせば、上位階層のメモリ(プライベートメモリ164またはローカルメモリ170)の容量に合わせてデータブロックを分割して、分割で得られたサブデータブロックの書込み先あるいは読出し元を上位階層のメモリとするように演算ユニット140を制御する。分割可能条件には、上述した属性値と、演算素子162及びグローバルメモリ152、ローカルメモリ170、プライベートメモリ164などの複数階層メモリの性能・構成情報(メモリ容量、アクセスに必要な時間など)とが含まれる。
【0040】
通常は、演算対象のデータ及び演算結果のデータがグローバルメモリ152に格納されるため、以下において、「リード転送」と「ライト転送」がグローバルメモリ152と、プライベートメモリ164またはローカルメモリ170との間の転送であるとして説明をする。演算対象のデータがコンスタントメモリ154にも格納されているときは、コンスタントメモリ154からプライベートメモリ164またはローカルメモリ170への転送も「リード転送」に含まれる。
【0041】
メモリアクセス監視部300は、形状属性値が非矩形を示すデータブロックまたはそのサブデータブロックのリード転送及びライト転送をグローバルメモリ152において監視して、当該転送時のメモリアクセス情報を演算制御部200に出力する。
【0042】
つぎに、本実施の形態1に係るデータ処理方法を、OpenCLデバイス120を用いて実現する場合の処理手順について、サブルーチン前後の画像データブロックなどと対応付けて説明する。
図3は、本実施の形態1に係るデータ処理方法の処理手順を示すフローチャートである。演算制御部200には、あらかじめホスト110からプログラム及び属性群が入力されている。なお、図面スペースの関係上、図3以降、各図面では「サブデータブロック」を「サブブロック」と記している。
【0043】
処理を開始する(ステップS100)と、演算制御部200はプログラムを解析し、サブルーチン(SR)をノード、サブルーチン間のデータブロック(DB)転送をエッジとする有向グラフを得る(ステップS110)。そして、プログラム内のサブルーチン間で受け渡されるデータブロックの格納先をグローバルメモリ(GM)とする(ステップS120)。
【0044】
図4は、本実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの当初の対応関係を示す図である。ステップS120において、プログラム内のサブルーチン間で受け渡される画像データブロック711、712、721、722、731、732の格納先をグローバルメモリ(GM)152としたときの有向グラフを示している。
【0045】
データブロック711〜732内の白丸はデータブロック711〜732を構成する画素(配列要素)を示す。また、データブロック711、712、721、722、731、732内部のハッチングはサブデータブロックを示すが、後述するように、データブロックに設定された属性によっては、参照領域などを含むようにしてサブデータブロックに分割されることもある。
【0046】
各サブルーチンSRから延びる点線、これらの点線に接続された楕円形の点線、及び、楕円形の点線内の矢印付きの点線は、サブルーチンSRとリードブロックとライトブロックとの対応関係を示す。例えば、サブルーチンSR1から延びる点線に接続された楕円形の点線内部のリードブロック711及びライトブロック712は、リードブロック711がサブルーチンSR1で処理されてライトブロック712になることを示している。
【0047】
このプログラムは3つのサブルーチンSR1、SR2、SR3で構成されている。プログラムはホスト110からデータブロック711を与えられ、処理開始(ステップS100)前にはデータブロック711はグローバルメモリ152に格納されている。
サブルーチンSR1はグローバルメモリ152からリードブロック711を読み出して(リードして)処理し、ライトブロック712をグローバルメモリ152に書き出す(ライトする)。同様に、サブルーチンSR2、SR3はそれぞれグローバルメモリ152からリードブロック721、731を読み出して処理し、ライトブロック722、732をグローバルメモリ152に書き出す。
【0048】
各データブロック711〜732には、属性群として、サイズ属性、リード属性、ライト属性、余白属性、放送属性、割当属性、階層属性、依存属性に加えて、形状属性が与えられている。
また、データブロック711〜732は2次元配列データであり、X方向とY方向の2次元を有する。また、データブロック711〜732には同一のサイズ属性値が与えられている。
【0049】
サブルーチンSR1は、ライトブロック712の1つの配列要素を得るために当該要素と同一座標のリードブロック711の配列要素を参照する。このため、リードブロック711の余白属性値はX方向及びY方向の両方向について0である。ライトブロック712に対しての余白属性は無効であり設定されていない。また、リードブロック711及びライトブロック712の形状属性値は矩形である。
【0050】
サブルーチンSR2は、ライトブロック722の1つの配列要素を得るために、その配列要素と同一座標のリードブロック721の配列要素と、当該配列要素の上下左右、左上、右上、右下、左下の周囲8つの配列要素とを参照する。図4では、この参照する領域をハッチングの周囲の点線で示す。このため、リードブロック721の余白属性値は両方向について1である。つまり、リードブロック721をサブリードブロックに分割するときには当該サブリードブロックに参照領域が含まれるようにして分割しなければならない。また、リードブロック721及びライトブロック722の形状属性値は矩形である。
【0051】
サブルーチンSR3は、画像処理における歪み補正と同様の処理で、矩形のライトブロック732の配列要素を得るために、当該配列要素から座標に応じた所定の変位ベクトルだけ異なる座標を有する、歪んだ形状のリードブロック731の配列要素を参照する。このとき、リードブロック731の形状属性値は非矩形で、具体的な形状は不明であり、形状情報は未設定である。
【0052】
このため、サブルーチンSR2のライトブロック722をグローバルメモリ152にいったん書き出し、サブルーチンSR3のリードブロック731をグローバルメモリ152から改めて読み出す必要がある。なお、ライトブロック732の形状属性値は矩形である。リードブロック731の余白属性値は両方向に対して0である。
【0053】
つぎに、演算制御部200は、サブルーチンSR間で受け渡されるライトブロック及びリードブロックの属性値を有向グラフ中の有向エッジと逆方向に伝搬させて(ステップS130)、伝搬で得られた属性値と演算ユニット140の構成情報とから、各データブロックの分割の可否を判定し、分割が可能であればサブデータブロックの格納先としてプライベートメモリ(PMn)164あるいはローカルメモリ(LMn)170を割り当てる(ステップS140)。分割が不可能であれば当該データブロックの格納先をグローバルメモリ152のままとする。
【0054】
このステップS130及びステップS140に係る処理について、より詳細に説明する。
まず、サブルーチンSR1のリードブロック711をプライベートメモリ164に格納可能なサイズに分割して、サブリードブロック毎に複数の演算素子(PE)162でサブルーチンSR1の処理を並列実行して、処理結果のライトブロック712をプライベートメモリ164経由でサブルーチンSR2に渡すことを考える。これを行った場合、複数のプライベートメモリ164に格納されたライトブロック712のサブライトブロックの間に共通の配列要素はない。
【0055】
つぎに、リードブロック721の分割を考える。リードブロック721の余白属性値は(X,Y)=(1,1)であるため、ライトブロック712のサブライトブロックに対してサブルーチンSR2を実行するためには、そのサブライトブロック周辺の配列要素が必要である。例えば、演算素子162はサブルーチンSR2を実行するために、自演算素子162に属するプライベートメモリ164に格納されたサブデータブロックだけでなく、他演算素子162に属するプライベートメモリ164に格納されたサブデータブロックの配列要素にもアクセスしなければならない。ところが、そのようなアクセスは不可能である。仮にライトブロック712のサブライトブロックの書出し先をローカルメモリ170にしても、同様の問題が発生する。
【0056】
以上のように、リードブロック721の余白属性値が(X,Y)=(1,1)であるため、ライトブロック712の書出し先をプライベートメモリ164にすることができず、この時点では書出し先をグローバルメモリ152とする。
しかし、データブロックの属性値が分割条件を満たさない場合に、プログラム中のデータまたは処理の流れとは逆方向に属性値の伝搬を行った結果、分割条件を満たす場合がある。このとき、データブロックを分割してサブデータブロックの格納先をプライベートメモリ164やローカルメモリ170に変更する。
【0057】
図5は、本実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの変更された対応関係を示す図である。ライトブロック712の書出し先、リードブロック721の読出し元をプライベートメモリ164に変更した後の有向グラフである。
本実施の形態1のデータ処理方法では、データ及び処理はサブルーチンSR1からサブルーチンSR3の方向へ進行するが、属性値の伝搬はその逆の方向に行う。演算制御部200は、リードブロック721の余白属性値(X,Y)=(1,1)を伝搬させて、リードブロック711の余白属性値(X,Y)=(0,0)との論理和を算出し、リードブロック711の余白属性値を(X,Y)=(1,1)にする。これにより、リードブロック721とリードブロック711との間の余白属性のミスマッチを解消することができる。図5に余白属性による参照領域をハッチングの周囲の点線で示す。
【0058】
そして、サブルーチンSR1のライトブロック712は、リードブロック721のサブリードブロックと同一の配列要素のサブライトブロックに分割されて、そのサブライトブロックの格納先をプライベートメモリ164に変更することが可能となる。そして、ライトブロック712の書出し及びリードブロック721の読出しの時間が短縮されて、プログラム実行時間を短縮することができる。
【0059】
なお、属性値の伝搬は、余白属性値に限られるものではなく、全ての属性値の伝搬が可能である。つまり、属性値の伝搬は、先に実行されるサブルーチンSR_XのリードブロックPの各属性値と、サブルーチンSR_Xに続いて実行されるサブルーチンSR_YのリードブロックSの各属性値とについて属性毎に論理和または論理積を算出し、当該属性毎の論理和または論理積をサブルーチンSR_XのリードブロックPの新しい属性値とするものである。
【0060】
このような属性値の伝搬は、具体的には、演算制御部200内のシナリオ決定部230が実行する。シナリオ決定部230は、演算素子162がどのようにデータブロックに対してアクセスするかなどのデータの転送方式を規定したプログラムを変更することにより、属性値の伝搬を行う。
なお、シナリオ決定部230は、サブルーチンSR_XのリードブロックPの属性値と、サブルーチンSR_YのリードブロックSの属性値とを属性毎に比較して、または差分を取って、リードブロックPの属性値に足りないものがあると判断したとき、例えば、余白属性の余白部分に当たる画素の画素値のデータが足りないと判断したときに、属性値の伝搬を行うと判断する。
【0061】
また、シナリオ決定部230は、カーネル間情報格納部220が格納するカーネル間データブロック依存情報に基づいて、属性値の伝搬を行うと判断しても良い。
また、シナリオ決定部230は、サブルーチンSR_Xのライトブロックの割当属性と、サブルーチンSR_Yのリードブロックの割当属性とが同一であるときに、属性値の伝搬を行うと判断しても良い。
【0062】
ところで、本実施の形態1に係るデータ処理方法では、サブデータブロックが非矩形であるデータブロックの分割と格納先の変更とを可能とするための形状属性が属性群に追加され、具体的なサブデータブロック形状情報を取得するためのメモリアクセス監視部300がデバイス120に追加されており、形状属性値もまた前述の余白属性値と同様に伝搬させて、更なるプログラムの実行時間の短縮する効果を得ることができる。
【0063】
演算制御部200は、形状属性値が非矩形で、形状情報、例えば、座標情報が不明のデータブロックが存在するか否かを判断する(ステップS150)。リードブロック731は形状属性値が非矩形であり、形状情報がまだ得られていないので(ステップS150のYes)、ライトブロック722及びライトブロック732の格納先をグローバルメモリ152としたまま、演算制御部200は演算ユニット140を制御してプログラムを実行する(ステップS160)。
【0064】
その際、メモリアクセス監視部300は、形状属性値が矩形であるデータブロック711、712、721、722、732の読出し及び書込みのメモリアクセスを監視せず、形状属性値が非矩形であるリードブロック731のグローバルメモリ152へのアクセスを監視して、アクセス元の演算素子162とアクセスするメモリアドレスとの組をメモリアクセス情報として取得して、演算制御部200へ出力する。
【0065】
演算制御部200は、このメモリアクセス情報から形状情報が不明であったリードブロック731の形状情報を算出して形状属性値に形状情報を追加する(ステップS170)。そして、リードブロック731の形状属性値をサブルーチンSR3からサブルーチンSR1への方向へ伝搬させて(ステップS130)、データブロック711、712、721、722の形状属性値を変更する。
【0066】
データブロック711、712、721、722については、それらの形状属性値がリードブロック731の形状属性値と同一となるように変更する。これにより、データブロック間の形状属性値のミスマッチが解消する。また、データブロック711、712、721については、それらの余白属性値がライトブロック722の形状属性値に対して設定される。そして、サブデータブロックに分割可能となったデータブロック711、712、721、722、731を分割して、データブロック712、721、722、731のサブデータブロックの格納先をプライベートメモリ164とする(ステップS140)。
【0067】
図6は、本実施の形態1に係るサブルーチン、データブロック及び複数階層メモリの更に変更された対応関係を示す図である。ライトブロック712、722の書出し先、リードブロック721、731の読出し元をプライベートメモリ164に変更した後の有向グラフである。余白属性による参照領域をハッチングの周囲の点線で示す。
【0068】
以上の処理により形状属性値が非矩形で具体的な形状情報が不明であるサブデータブロックはなくなっており(ステップS150のNo)、演算制御部200は、上記で設定した属性値に基づいて演算ユニット140を制御して、プログラムを実行する(ステップS180)。
そして、本実施の形態1に係るデータ処理方法の処理を終了する(ステップS190)。
なお、非矩形のサブデータブロックを容量の小さいプライベートメモリ164に格納するために、サブデータブロック内の配列要素の座標を変換して格納メモリアドレスを一連の領域になるようにプログラムを変更することもできる。
【0069】
また、本実施の形態1に係るデータ処理方法では、形状属性値に形状情報を追加した(ステップS170)後であって、形状属性値をサブルーチンSR3からサブルーチンSR1への方向へ伝搬させる(ステップS130)前に、サブルーチン間で受け渡されるデータブロックの各々について、属性値と、演算素子及び複数階層メモリの性能・構成情報とが所定の条件を満たすか否かを判断するステップを追加し、所定の条件を満たさないと判断したときに、形状属性値をサブルーチンSR3からサブルーチンSR1への方向へ伝搬させる(ステップS130)ようにしても良い。この場合に、所定の条件を満たすと判断したときは、サブデータブロックに分割可能となったデータブロックを分割して、当該サブデータブロックの格納先をプライベートメモリとする(ステップS140)。
【0070】
以上説明したように、本実施の形態1に係るデータ処理方法は、プロセッサ162と、複数階層のメモリ152、154、170、164とを有するプログラム実行部140と、プロセッサ162がメモリ152、154、170、164からリードブロック711、721、731を読み出してデータ処理を行い、メモリ152、154、170、164へデータ処理の結果であるライトブロック712、722、732を書き出す複数のサブルーチンSR1、SR2、SR3を含むプログラムと、リードブロック711、721、731及びライトブロック712、722、732に対してそれぞれ設定された属性値とが入力される演算制御部200と、メモリアクセス監視部300とを備えたデータ処理装置120のデータ処理方法であって、プログラム実行部140がプログラムを実行するステップS160と、メモリアクセス監視部300が、形状属性値が非矩形であるデータブロック731またはサブデータブロックのサブルーチンSR2、SR3間に行われるメモリ転送を監視して、当該メモリ転送に係るメモリアクセス情報を演算制御部200へ出力するステップS170と、演算制御部200が、メモリアクセス情報に基づき当該データブロック731の読出しまたは書込みアドレスの変換を行って形状属性値を算出し(ステップS170)、少なくとも算出した形状属性値を含む属性値をプログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性値を修正し(ステップS130)、サブルーチンSR1、SR2、SR3間で受け渡されるデータブロック711、712、721、722、731、732の各々について、属性値と、プロセッサ162及びメモリ152、154、170、164の性能・構成情報とが所定の条件を満たすときには当該データブロック711、712、721、722、731、732をサブデータブロックに分割し(ステップS140)、複数階層のメモリ152、154、170、164からサブデータブロックの読出し元あるいは書出し先となるメモリ170、164を選択して(ステップS140)、プロセッサ162によるデータブロック711、712、721、722、731、732またはサブデータブロックへのメモリアクセス及び当該データブロック711、712、721、722、731、732に係るサブルーチンの実行を制御するステップS180とを有するものである。
【0071】
また、本実施の形態1に係るデータ処理方法は、演算制御部200が、少なくとも算出した形状属性値を含む属性値をプログラム中でのデータまたは処理の流れとは逆方向に伝搬させて属性値を修正するのは、サブルーチンSR1、SR2、SR3間で受け渡されるデータブロック711、712、721、722、731、732の各々について、属性値と、プロセッサ162及び複数階層のメモリ152、154、170、164の性能・構成情報とが所定の条件を満たさないときであることが好ましい。
【0072】
また、本実施の形態1に係るデータ処理方法は、プログラムは第1のサブルーチンSR2と、第1のサブルーチン後に実行される第2のサブルーチンSR3とを有し、第1のサブルーチンSR2のデータブロック721には第1の属性値が設定され、第2のサブルーチンSR3のデータブロック731には第1の属性値と同じ属性に係る第2の属性値が設定されており、属性値を修正するときに、第1の属性値と第2の属性値との論理和または論理積を算出して、論理和または論理積を新たな第1の属性値とすることが好ましい。
【0073】
また、本実施の形態1に係るプログラムは、本実施の形態1に係るデータ処理方法の各ステップをデータ処理装置120に実行させるためのものである。
本実施の形態1に係るデータ処理方法またはプログラムは、上記の構成により、サブルーチンSR1、SR2、SR3間のメモリ転送時に、データブロック711、712、721、722、731、732またはサブデータブロックを複数階層のメモリ152、154、170、164のできるだけ上位階層のメモリ170、164で受け渡して、プログラムの実行時間を短縮し、処理効率の向上を図ることができる。
【0074】
(実施の形態2)
本実施の形態2に係るデータ処理方法は、ホストから各データブロックに与えられる属性群に更に形状依存属性を追加し、メモリアクセス監視部が形状依存属性により指定された形状決定データブロックの変更を監視し、演算制御部が、形状決定データブロックが変更されたときに形状属性値を計算し直すことにより、サブデータブロックの形状を他のデータブロックに依存するようなデータブロックを高速なメモリで受け渡して、プログラム実行時間を更に短縮するものである。
【0075】
本実施の形態2に係るデータ処理装置の構成は、図2に示した実施の形態1に係るデータ処理装置120の構成と同様であり、図示を省略する。属性群に追加された形状依存属性は、リードブロックの形状属性値が非矩形である場合にその具体的な形状情報、例えば、座標情報が他のリードブロックに依存しているか、依存している場合はどのリードブロックに依存しているかを示すもので、依存するリードブロックへのポインタが、形状属性値が非矩形であるリードブロックの形状依存属性として与えられる。
【0076】
図7は、本実施の形態2に係るサブルーチン、データブロック及び複数階層メモリの当初の対応関係を示す図である。図4に示した実施の形態1に係る当初の対応関係と比較すると、サブルーチンSR3がサブルーチンSR4に変更になっている。サブルーチンSR4は、データブロック831及びデータブロック833をリードブロックとし、データブロック832をライトブロックとする演算である。また、リードブロック831、833は、グローバルメモリ152から読み出される。リードブロック833は、実施の形態1に係るリードブロック731の形状属性内部で表現されていた変位ベクトル情報に対応するものである。つまり、リードブロック831の歪みはリードブロック833に依存する。また、リードブロック833はプログラムを実行する度に異なる可能性がある。
【0077】
本実施の形態2に係るデータ処理方法では、リードブロック831を分割した時のサブリードブロックの形状は変位ベクトル情報に依存するため、変位ベクトル情報を与えるリードブロック833が変更されると、リードブロック831の形状属性値に含まれるサブリードブロックの具体的な形状情報が変更される。そこで、リードブロック831にリードブロック833へのポインタを形状依存属性値として与える。
【0078】
図8は、本実施の形態2に係るデータ処理方法の処理手順を示すフローチャートである。ステップS200〜ステップS280に係る処理は、図3に示した実施の形態1に係るデータ処理方法のステップS100〜ステップS180に係る処理と同様であり、詳細な説明は省略する。
【0079】
メモリアクセス監視部300は、形状依存属性値としてのポインタで示された形状決定データブロックであるリードブロック833へのアクセスを監視して、リードブロック833の更新の有無を演算制御部200へ出力する(ステップS290)。
【0080】
演算制御部200は、更新があったとき(ステップS290のYes)に、データブロック811、812、821、822、831の形状属性値をリセットして、データブロックの形状が非矩形で、具体的な形状情報を含まないものに戻す(ステップS300)。これらの形状属性値は、実施の形態1に係る図5に示したデータブロック711、712、721、722の形状属性値と同じである。
【0081】
つぎに、演算制御部200は、ステップS250〜ステップS270及びステップS230の処理を行って、データブロック811、812、821、822、831のサブデータブロックの具体的な形状情報を得て、これらのデータブロックの形状属性値を更新する。
そして、演算制御部200は、プログラム中のサブルーチン間で受け渡されるデータブロックの格納先のメモリを再計算して、各データブロックをできるだけ上位階層のメモリに割り当てる(ステップS240)。
なお、演算制御部200は、リードブロック833の更新がなかったとき(ステップS290のNo)は、本実施の形態2に係るデータ処理方法の処理を終了する(ステップS310)。
【0082】
図9は、本実施の形態2に係るサブルーチン、データブロック及び複数階層メモリの変更された対応関係を示す図である。ライトブロック812、822の書出し先、リードブロック821、831の読出し元をプライベートメモリ164に変更した後の有向グラフである。
【0083】
以上、説明したように、本実施の形態2に係るデータ処理方法は、属性値には、更に、形状依存属性値が含まれており、形状依存属性値は、形状依存属性値が設定された第1のデータブロック831が形状を依存する第2のデータブロック833を指し示し、メモリアクセス監視部300が第2のデータブロック833の更新を監視して、更新に係る情報を演算制御部200へ出力するステップと、演算制御部200が、更新に係る情報に基づき、少なくとも第1のデータブロック831を含むデータブロック811、812、821、822、831の形状属性値をリセットするステップとを更に有することが好ましい。
【0084】
本実施の形態2に係るデータ処理方法は、上記構成により、サブデータブロックの形状を他のデータブロック833に依存するようなデータブロック831を上位階層のメモリ170、164で受け渡して、プログラムの実行時間を更に短縮することができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【0085】
110 ホスト
120 デバイス(データ処理装置)
140 演算ユニット(プログラム実行部)
150 デバイスメモリ
152 グローバルメモリ(GM)
154 コンスタントメモリ
160 コンピュートユニット(CU)
162 演算素子(PE)
164 プライベートメモリ(PM)
170 ローカルメモリ(LM)
200 演算制御部
210 属性群格納部
220 カーネル間情報格納部
230 シナリオ決定部
711、712、721、722、731、732、811、812、821、822、831、832、833 データブロック
SR1、SR2、SR3、SR4、SR11、SR12、SR13、SR14、SR15、SR16 サブルーチン
図1
図2
図3
図4
図5
図6
図7
図8
図9