JP6453685B2 - 演算制御装置、演算制御方法及び演算制御プログラム - Google Patents

演算制御装置、演算制御方法及び演算制御プログラム Download PDF

Info

Publication number
JP6453685B2
JP6453685B2 JP2015063957A JP2015063957A JP6453685B2 JP 6453685 B2 JP6453685 B2 JP 6453685B2 JP 2015063957 A JP2015063957 A JP 2015063957A JP 2015063957 A JP2015063957 A JP 2015063957A JP 6453685 B2 JP6453685 B2 JP 6453685B2
Authority
JP
Japan
Prior art keywords
node
accuracy
processing function
processing
graph
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
JP2015063957A
Other languages
English (en)
Other versions
JP2016184273A (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 JP2015063957A priority Critical patent/JP6453685B2/ja
Priority to US15/063,222 priority patent/US10140538B2/en
Publication of JP2016184273A publication Critical patent/JP2016184273A/ja
Application granted granted Critical
Publication of JP6453685B2 publication Critical patent/JP6453685B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/50Extraction of image or video features by performing operations within image blocks; by using histograms, e.g. histogram of oriented gradients [HoG]; by summing image-intensity values; Projection analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Description

本発明は演算制御装置、演算制御方法及び演算制御プログラムに関する。
The Khronos Group(以下、「Khronos」という。)で策定中の画像認識向けAPI(Application Programming Interface)の国際標準規格にOpenVXがある。OpenVXでは、ターゲット・デバイスである演算制御装置上で動作するグラフマネージャが、グラフ形式で記述されたユーザアプリケーションを解釈し、演算制御装置の演算器(アクセラレータ)を用いて効率的に処理を行う(非特許文献1参照)。
図11はOpenVXコード及び当該コードから作成されるグラフの例を示す図である。グラフを図中右上の枠内に示している。
OpenVXコードでは、まずvx〇〇Node()関数群(例えば、処理関数xvThresholdNode(graph,in,thres,thout)など)によりグラフ構造を定義する。また、vxVerifyGraph()関数によりグラフ構造を解析し、グラフ中に表される処理の並列性や処理順序を決定する。そして、vxProcessGraph()関数によりグラフに係る処理を実行する。
図11に示したグラフでは、入力画像inについてvxThresholdノードで二値化処理を行った後、vxSubtractノード、1回目のvxAddノードでそれぞれ減算、加算を行い、最後にそれらの結果を2回目のvxAddノードで加算している。この例では、vxThresholdノードを最初に処理する必要があるが、vxSubtractノードと1回目のvxAddノードとはどちらを先に処理しても良く、並列に処理しても良い。
なお、ここでいうグラフは有向グラフ(Directed Acyclic Graph)である。
グラフ上で使用するノード(Base Node)は、OpenVXコードにおける互換性を保つために、Khronosによって必要精度や挙動などの仕様が厳密に定義されている。例えば、画素毎のエッジ方向を算出するvxPhaseノードは、0〜255の8bit精度で出力するものと定義されている。算出するエッジ方向が8、9方向程度であれば、一般的には3、4bit精度のIf-Then-Elseなどの比較的軽い処理(約20サイクル)で十分に間に合うが、Khronosによって定義された8bit精度の処理には演算量の大きいarctanなどの処理(約1150サイクル)が必要となり、処理時間がかかる。
図12はOpenVXコード及び当該コードから作成されるグラフの別の例を示す図である。やはりグラフを図中右上の枠内に示している。
この例では、X方向及びY方向のエッジ成分を算出するvxSobel3x3ノードの出力sobelx及びsobelyを入力としてvxPhaseノードがエッジ方向を算出する。そして、算出したエッジ方向phaseを入力としてvxHistogramノードが呼び出される。
ここで、例えば、画像認識アプリの一つであるHOG(Histogram Of Gradient)アプリのヒストグラム算出処理(vxHistogramノード)では、通常は8、9方向程度の3、4bit精度で十分である。
このため、ユーザがHOGアプリを実装する際にvxPhaseノードの後続ノードとしてvxHistogramノードを接続した場合に、vxHistogramノードでは3bit程度の精度で十分であるにも拘わらず、vxPhaseノードでは8bit精度の演算を行うことになる。このため、3bit精度のエッジ方向算出ノードを用いた場合と比較して、同じ処理結果を得るのに数倍の処理時間がかかっていた。
また、一般的なC言語やC++言語では処理の並列性を表すことが難しい。例えば、関数Aの出力を利用する関数Bと関数Cとがある場合に、関数Bと関数Cとの間に依存関係がなければ、関数Bと関数Cとを並列に処理することが可能である。ところが、一般的なC言語で逐次的にプログラムを記述すると、この並列性が陽には現れない。
図13はC言語で記述したプログラムの例を示す図である。
例えば、図の左のようにプログラムを書くと関数Bの後に関数Cが実行され、図の右のようにプログラムを書くと関数Cの後に関数Bが実行される。つまり、関数Bと関数Cとを並列に実行して良いかどうかは表現されていない。
このため、複数の演算リソースを有するマルチコアプロセッサなどにおいては、ユーザが関数のfork(分岐)やjoin(合流)を陽に記述する必要があった。しかしながら、ターゲット・デバイス毎に最適な関数の割り当てが異なる場合もあり、コード互換性を保ったままですべてのデバイスに最適なプログラムを記述するのは難しかった。
OpenVXでは、C言語プログラム上でグラフ構造を定義しており、OpenVX対応デバイスが備えるグラフマネージャが上記プログラムを解釈し、プログラム上で定義されているグラフ構造を解析し、並列性を抽出することができる。このため、ユーザがターゲット・デバイスの詳細を知らずに記述したOpenVXコードであっても、グラフマネージャを介することによりターゲット・デバイスに最適な関数の割り当てを実現できる。
Khronos Group,"OpenVX",[online],[平成27年3月26日検索],インターネット<URL:https://www.khronos.org/openvx/>
しかしながら、従来のグラフマネージャは、図12に示したようなOpenVXコードにおいて、ユーザが記述した関数を用いるために、処理時間が長くなってしまうことがあった。
この性能低下の原因は、前述したように、後続する処理で必要な精度が低いにも拘わらず、ユーザが、先行する処理について、高い精度であることが厳密に定義された処理を指定してしまうことにある。
OpenVXでは用意されているノードを用いることが想定されているため、必要以上の精度の処理関数を用いて処理していても、ユーザがそのことに気付かないことがある。このために、ユーザの意図しない性能低下が発生することになる。
そこで、無駄な演算を回避して、ユーザが処理精度のことを気にしなくても処理を効率化して性能向上を享受できる演算制御装置、演算制御方法及びプログラムが望まれていた。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態によれば、演算制御装置は、グラフ中のノード間の接続関係を解析し、後続ノードの必要精度に応じて、先行ノードの処理精度を算出し、先行ノードに処理精度の異なる派生ノードが登録されている場合に、必要十分な処理精度のノードで置き換えて、グラフに係る処理を実行する。
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置または該装置の一部の処理をコンピュータに実行せしめるプログラム、該装置を備えた撮像装置なども、本発明の態様としては有効である。
上記一実施の形態によれば、無駄な演算を回避して、ユーザが処理精度のことを気にしなくても処理を効率化して性能向上を享受できる演算制御装置、演算制御方法及びプログラムを提供することができる。
実施の形態1に係る演算制御装置1の概略構成を示すブロック図である。 実施の形態1に係る演算制御装置1上で動く応用プログラムの処理手順を示すフローチャートである。 実施の形態1に係る想定グラフ及びノード情報を示す図である。 実施の形態1に係るカーネル情報を示す図である。 実施の形態1に係る処理関数情報を示す図である。 実施の形態1に係る処理関数vxVerifyGraph()の詳細な処理手順を示すフローチャートである。 実施の形態1に係る処理関数vxProcessGraph()の詳細な処理手順を示すフローチャートである。 実施の形態2に係る演算制御方法の概要を説明するための図である。 実施の形態3に係る演算制御方法の概要を説明するための図である。 実施の形態4に係る演算制御方法の概要を説明するための図である。 OpenVXコード及び当該コードから作成されるグラフの例を示す図である。 OpenVXコード及び当該コードから作成されるグラフの別の例を示す図である。 C言語で記述したプログラムの例を示す図である。
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、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)
本実施の形態1に係る演算制御装置は、OpenVXデバイスとなるもので、グラフ中のノード間の接続関係を解析し、後続ノードの必要精度に応じて、先行ノードの処理精度を算出し、先行ノードに処理精度の異なる派生ノードが登録されている場合に、必要十分な処理精度のノードで置き換えて、グラフに係る処理を実行する。
まず、本実施の形態1に係る演算制御装置1の構成について説明する。
図1は本実施の形態1に係る演算制御装置1の概略構成を示すブロック図である。
演算制御装置1は、プログラムメモリ10、プロセッサ20、データメモリ30、アクセラレータ40などを備える。
プログラムメモリ10は、main関数から始まる応用プログラム及びグラフマネージャプログラムを記憶する。応用ブログラムは、図11または図12に示したような、プログラマが記述したOpenVXコードをコンパイラがコンパイルして、実行形式(例えば、exe形式)のプログラムとしたものである。
プロセッサ20は、プログラムメモリ10からグラフマネージャプログラムを読み出して実行し、OpenVXデバイスのグラフマネージャとして動作する。また、プロセッサ20は、グラフマネージャとして、プログラムメモリ10から読み出した応用プログラムのグラフ構造を解析して、当該応用ブログラムの動作を実行する。
データメモリ30は、プロセッサ20が解析したグラフ構造を記憶する。また、データメモリ30は、後述するカーネル情報、処理関数情報などを記憶する。
アクセラレータ40は、プロセッサ20が解析し、設定したグラフを実行する。
次に、本実施の形態1に係る演算制御装置1の動作、すなわち、演算制御方法について説明する。
図2は本実施の形態1に係る演算制御装置1上で動く応用プログラムの処理手順を示すフローチャートである。
応用プログラムでは、まず、グラフ構造の定義により、グラフを作成する(ステップS10)。つまり、必要なノードを生成して、それらの間の接続関係を設定する。
図3は本実施の形態1に係る想定グラフ及びグラフ情報を示す図である。グラフ情報は、プロセッサ20がグラフマネージャプログラム及び応用プログラムを実行したときに、グラフマネージャとして、後述するカーネル情報、処理関数情報などを参照して作成するものである。
図中左上の枠内に本実施の形態1に係る応用プログラムで想定するグラフを示す。このグラフでは、入力端子in、出力端子out以外に3つのノードが存在する。グラフ情報には、これらの3つのノードについての、グラフ中でノードを識別するためのIDと、処理内容を示すカーネル名と、カーネルに対応する処理関数と、入出力引数の情報とが含まれる。図3に示したグラフ情報では、入出力引数の情報は、ノードIDとその引数番号とで表されている。例えば、ノードID=1のvxSobel3x3ノードでは、出力引数である2番目の引数が、ノードID=2のvxPhaseノードの1番目の引数に接続されている。また、ノードID=3のvxHistogramノードでは、入力引数である1番目の引数が、ノードID=2のvxPhaseノードの3番目の引数に接続されている。
図4は本実施の形態1に係るカーネル情報を示す図である。カーネル情報は、半導体ベンダなどのユーザがデータメモリ30に予め記憶させておくものである。
カーネル情報には、各カーネルについて、そのカーネルを実現する処理関数が1つ以上登録されている。例えば、vxPhaseカーネルには、処理関数vxPhaseKernel()及び処理関数vxPhaseKernelFast()が登録されている。
図5は本実施の形態1に係る処理関数情報を示す図である。処理関数情報も、ユーザがデータメモリ30に予め記憶させておくものである。
処理関数情報には、各処理関数について、引数毎の引数名、入出力方向及び精度が登録されている。例えば、処理関数vxPhaseKernel()では、3番目の引数は、引数名がoutであり、出力引数であり、その精度は8bitである。また、処理関数vxPhaseKernelFast()では、3番目の引数は、引数名がoutであり、出力引数であり、その精度は3bitである。
応用プログラムでは、ステップS10のグラフ作成時に、カーネルに対応する処理関数が複数登録されている場合には、最初に登録されている処理関数をデフォルトの処理関数として用いる。例えば、図3に示したグラフ情報のノードID=2のvxPhaseノードについては、図4に示した処理関数情報のようにvxPhaseカーネルに対応する処理関数が2つ登録されているが、最初に登録されている処理関数vxPhaseKernel()をデフォルトの処理関数として用いる。
応用プログラムでは、続いて、図2に示した処理関数vxVerifyGraph()、すなわち、グラフ構造の解析を実行する(ステップS20)。
図6は本実施の形態1に係る処理関数vxVerifyGraph()の詳細な処理手順を示すフローチャートである。ステップS20の処理関数vxVerifyGraph()はステップS210〜ステップS230で構成される(ステップS20の後にステップS210〜ステップS230が続くのではない)。
処理関数xvVerifyGraph()では、まず、グラフ中の全ノードについて入出力が定義されているかどうかを調べる(ステップS210)。定義されていないノードがあれば(ステップS210のNo)、エラーメッセージを出力し(ステップS240)、終了するなどの動作を行う。
次に、グラフ中のノードを開始ノードから順にたどり、入出力の型が一致しているかどうか調べる(ステップS220)。入出力の型が一致していないノードがあれば(ステップS220のNo)、やはりエラーメッセージを出力し(ステップS240)、終了するなどの動作を行う。
次に、グラフ中の全てのノードの中から精度の異なる複数の処理関数を持っているノードを探し、そのノードについて、後続するノードの必要精度属性Pを調べる。そして、そのノードが持っている複数の処理関数の中から、必要精度属性P以上で、かつ、最低の精度を有する処理関数を選択し、当該ノードの処理関数として設定する(ステップS230)。
このステップS230について、具体的に説明する。
まず、図3に示したグラフの各ノードについて、出力精度の異なる複数の処理関数を持っているノードを探す。図4に示したカーネル情報のように、ノードID=2のvxPhaseノードが、処理関数vxPhaseKernel()と処理関数vxPhaseKernelFast()とを持っていることが分かる。
次に、vxPhaseノードに後続するvxHistogramノードで必要な入力精度を調べる。図5に示した処理関数情報のように、処理関数vxHistogramKernel()の入力引数dirの精度が3bitであることが分かる。
次に、vxPhaseノードが持っている処理関数vxPhaseKernel()と処理関数vxPhaseKernelFast()との中から、前述の3bit以上で、かつ、最低の出力精度を有する処理関数、すなわち、出力引数outの精度が3bitである処理関数vxPhaseKernelFast()を選択し、vxPhaseノードの処理関数として設定する。これにより、vxPhaseノードの処理関数が処理関数vxPhaseKernel()から演算の効率の良くなる処理関数vxPhaseKernelFast()に置き換わる。
なお、このステップS230において、精度の異なる複数の処理関数を持っているノードについて、デフォルトで設定されている処理関数が必要精度属性P以上で、かつ、最低の精度を有する処理関数であったときには、当然、処理関数を置き換えることはしない。
また、後続するノードの必要精度として、後続するノードの入力精度以外の精度を用いたり、後続するノードの必要精度と比較する先行するノードの精度として、先行するノードの出力精度以外を用いたりすることも可能である。
そして、応用プログラムでは、最後に、図2に示した処理関数xvProcessGraph()、すなわち、グラフで表される処理の実行を行う(ステップS30)。
図7は本実施の形態1に係る処理関数vxProcessGraph()の詳細な処理手順を示すフローチャートである。ステップS30の処理関数vxProcessGraph()はステップS310〜ステップS350で構成される。
まず、ステップS230で一部のノードについて処理関数を置き換えたグラフの全ノードの状態を未実行状態にする(ステップS310)。
そして、グラフ中のノードにおいて、未実行状態で、かつ、実行可能な(入力引数に接続されているノードがすべて実行完了している)ノードを列挙する(ステップS320)。このとき、入力端子inは常に実行完了として扱う。
そして、列挙されたノードについて、列挙された順に対応する処理関数を実行する(ステップS330)。なお、上述したように、応用プログラムの動作は原則としてプロセッサ20が行うが、ステップS330の処理関数の実行は、プロセッサ20が行っても良いし、プロセッサ20がアクセラレータ40に命じて、アクセラレータ40が行っても良い。
そして、ステップS330で処理関数を実行したノードの出力を有効にして、当該ノードの状態を実行完了とする(ステップS340)。
最後に、グラフ中の全ノードが実行完了状態かを判断し(ステップS350)、全ノードが実行完了状態ではないとき(ステップS350のNo)はステップS320に戻り、全ノードが実行完了状態のとき(ステップS350のYes)は処理関数vxProcessGraph()を終了する。
このように、本実施の形態1に係る演算制御装置又は演算制御方法では、必要以上の精度を実現する関数の実行を抑制して、実行時間の削減を実現することができる。
なお、本実施の形態1に係る演算制御方法では、上述したような先行ノードの精度を下げる場合以外に、先行ノードの精度を上げる場合も起こり得る。
以上説明したように、本実施の形態1に係る演算制御装置は、グラフから精度の異なる複数の処理関数を有するノードを抽出し、抽出したノードに後続するノードの必要精度を算出し、抽出したノードが有する複数の処理関数のうち、算出した必要精度以上の精度であって、最低の精度を有する処理関数を選択し、選択した処理関数を抽出したノードの処理関数に設定するものである。
(実施の形態2)
本実施の形態2に係る演算制御装置は、精度の異なる複数の処理関数を持っているノードに後続するノードの必要精度属性Pとして、有効ビット幅(情報として用いることが可能なビットの幅)ではなく、後続するノードが処理する値が取り得る種類の数、つまり、後続するノードが入力する情報が取り得る値の数を用いて、複数の処理関数の中から置き換える処理関数を選択するものである。
本実施の形態2に係る演算制御装置の概略構成は、実施の形態1に係る演算制御装置と同様であり、図示及び説明を省略する。
図8は本実施の形態2に係る演算制御方法の概要を説明するための図である。
対象となるグラフはvxPhaseノードとvxHistogramノードとが連続するものである。そして、vxPhaseノードには値域0〜255の8bit精度の処理関数vxPhaseKernel()が設定されている。また、vxHistogramノードには内部で値域を0〜31、32〜63、・・・、224〜255の8種類に分類して利用する、つまり、8種類の値しか利用しない3bit精度の処理関数xvHistogramKernel()が設定されている。つまり、vxPhaseノードは後続するvxHistogramノードに対して必要以上の精度の処理関数を用いている。また、vxPhaseノードは、処理関数vxPhaseKernel()の他に、値域0〜7の3bit精度の処理関数vxPhase3Kernel()を有している。
このとき、本実施の形態2に係る演算制御方法では、vxPhaseノードの処理関数vxPhaseKernel()を処理関数vxPhase3Kernel()に置き換えると共に、処理関数vxPhase3Kernel()の出力を32倍にスケーリングするvxMultiplyノードを挿入して、値域を0〜255に変更して後続するvxHistogramノードに接続する。
このようにして、本実施の形態2に係る演算制御装置又は演算制御方法では、精度として有効ビット幅以外のものを用いることにより、性能向上を実現できる場合を増やすことができる。
以上説明したように、本実施の形態2に係る演算制御装置は、後続するノードの必要精度を、後続するノードが入力する情報が取り得る値の数に基づいて算出するものである。
また、本実施の形態2に係る演算制御装置は、複数の処理関数を有するノードと後続するノードとの間に、複数の処理関数を有するノードの出力をスケーリングするノードを追加するものである。
(実施の形態3)
本実施の形態3に係る演算制御装置は、精度の異なる複数の処理関数を持っているノードに対して複数の後続するノードがある場合に、複数の後続ノードの中で最も高い必要精度属性Pを有する後続ノードに合わせて、精度の異なる複数の処理関数の中から先行するノードに設定する処理関数を選択するものである。
本実施の形態3に係る演算制御装置の概略構成も、実施の形態1に係る演算制御装置と同様であり、図示及び説明を省略する。
図9は本実施の形態3に係る演算制御方法の概要を説明するための図である。
対象となるグラフはvxPhaseノードに対して、vxAノード、vxBノード、vxCノードが並列的に後続するものである。vxAノード、vxBノード、vxCノードの必要精度はそれぞれ3bit、5bit、4bitである。つまり、後続する3つのノードの中で、vxBノードが最も高い必要精度5bitを有している。
このとき、本実施の形態3に係る演算制御方法では、vxPhaseノードの処理関数を5bit精度の処理関数vxPhase5Kernel()に置き換える。
このようにして、本実施の形態3に係る演算制御装置又は演算制御方法では、先行するノードとして、より適切な精度を用いることにより、性能向上を実現できる場合を増やすことができる。
なお、本実施の形態3に係る演算制御装置又は演算制御方法は、上述したような先行するノードに対して複数の後続ノードが並列する場合に限らず、先行するノードに対して複数の後続ノードが直列する場合についても適用することができる。
以上説明したように、本実施の形態3に係る演算制御装置は、複数の処理関数を有するノードに対して、複数の後続するノードがある場合に、処理関数を選択するときの必要精度として、複数の後続するノードの必要精度の中で最大の必要精度を用いるものである。
(実施の形態4)
本実施の形態4に係る演算制御装置は、コンパイラがOpenVXコードをコンパイルするときに、各ノードの処理内容を解析して必要精度情報を取得するものである。
本実施の形態4に係る演算制御装置の概略構成も、実施の形態1に係る演算制御装置と同様であり、図示及び説明を省略する。
図10は本実施の形態4に係る演算制御方法の概要を説明するための図である。説明を分りやすくするため、参考例としての実施の形態1に係る演算制御方法と、本実施の形態4に係る演算制御方法とを上下に並べて示している。
実施の形態1に係る演算制御方法では、各ノードの必要精度情報と置換可能なノード情報とを半導体ベンダが予め用意して、演算制御装置(OpenVXデバイス)1のデータメモリ(図示せず)に記憶させておく。
これに対して、本実施の形態4に係る演算制御方法では、コンパイラがOpenVXコードをコンパイルして実行形式(例えば、exe形式)のプログラムとするときに、コンパイラが各ノードの処理内容を解析して有効ビット幅などの必要精度情報を取得し、演算制御装置1のデータメモリ(図示せず)に記憶させる。このようにすれば、半導体ベンダは置換可能なノード情報だけを予め用意して、演算制御装置1のデータメモリに記憶させれば良い。
このようにして、本実施の形態4に係る演算制御装置又は演算制御方法では、ユーザが予めノードの精度を登録しなくても、性能向上を享受することができる。
以上説明したように、本実施の形態4に係る演算制御装置は、後続するノードの必要精度として、コンパイラがコード情報をコンパイルしたときに取得したノードの必要精度を用いるものである。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
1 演算制御装置
10 プログラムメモリ
20 プロセッサ
30 データメモリ
40 アクセラレータ

Claims (6)

  1. グラフから出力精度の異なる複数の処理関数を有するノードを抽出し、
    データメモリに記憶され、ノードが持っている処理関数の引数の入出力方向および入出力精度が登録された処理関数情報を参照して、前記抽出したノードに後続するノードの必要入力精度を調べ
    前記抽出したノードが有する複数の処理関数のうち、前記調べた必要入力精度以上の出力精度であって、最低の出力精度を有する処理関数を選択し、
    前記選択した処理関数を前記抽出したノードの処理関数に設定する
    演算制御装置。
  2. 前記抽出したノードに対して、複数の前記後続するノードがある場合に、
    前記処理関数を選択するときの前記必要入力精度として、前記複数の後続するノードの必要入力精度の中で最大の必要入力精度を用いる
    請求項1記載の演算制御装置。
  3. 前記後続するノードの必要入力精度として、コンパイラがコード情報をコンパイルしたときに取得したノードの必要入力精度を用いる
    請求項1記載の演算制御装置。
  4. グラフマネージャプログラム及び画像処理プログラムを記憶するプログラムメモリと、
    前記グラフマネージャプログラム及び前記画像処理プログラムを実行して、前記画像処理に係るグラフを解析して実行するプロセッサと、
    前記解析したグラフを記憶するデータメモリとを備え、
    前記プロセッサは、前記データメモリに記憶した前記グラフについて、
    出力精度の異なる複数の処理関数を有するノードを抽出し、
    前記データメモリに記憶され、ノードが持っている処理関数の引数の入出力方向および入出力精度が登録された処理関数情報を参照して、前記抽出したノードに後続するノードの必要入力精度を調べ
    前記抽出したノードが有する複数の処理関数のうち、前記調べた必要入力精度以上の出力精度であって、最低の出力精度を有する処理関数を選択し、
    前記選択した処理関数を前記抽出したノードの処理関数に設定する
    演算制御装置。
  5. グラフから出力精度の異なる複数の処理関数を有するノードを抽出するステップと、
    データメモリに記憶され、ノードが持っている処理関数の引数の入出力方向および入出力精度が登録された処理関数情報を参照して、前記抽出したノードに後続するノードの必要入力精度を調べるステップと、
    前記抽出したノードが有する複数の処理関数のうち、前記調べた必要入力精度以上の出力精度であって、最低の出力精度を有する処理関数を選択するステップと、
    前記選択した処理関数を前記抽出したノードの処理関数に設定するステップと
    をコンピュータが実行する演算制御方法。
  6. 請求項記載の演算制御方法の各ステップを、コンピュータに実行させるためのプログラム。
JP2015063957A 2015-03-26 2015-03-26 演算制御装置、演算制御方法及び演算制御プログラム Active JP6453685B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015063957A JP6453685B2 (ja) 2015-03-26 2015-03-26 演算制御装置、演算制御方法及び演算制御プログラム
US15/063,222 US10140538B2 (en) 2015-03-26 2016-03-07 Computing control device, computing control method, and computer readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015063957A JP6453685B2 (ja) 2015-03-26 2015-03-26 演算制御装置、演算制御方法及び演算制御プログラム

Publications (2)

Publication Number Publication Date
JP2016184273A JP2016184273A (ja) 2016-10-20
JP6453685B2 true JP6453685B2 (ja) 2019-01-16

Family

ID=56976459

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015063957A Active JP6453685B2 (ja) 2015-03-26 2015-03-26 演算制御装置、演算制御方法及び演算制御プログラム

Country Status (2)

Country Link
US (1) US10140538B2 (ja)
JP (1) JP6453685B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111107274B (zh) * 2018-10-26 2021-01-08 北京图森智途科技有限公司 一种图像亮度统计方法及成像设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005092855A (ja) * 2003-09-12 2005-04-07 Kanazawa Inst Of Technology ソフトウエア開発支援装置およびソフトウエア開発支援方法
US10025603B2 (en) * 2013-02-26 2018-07-17 Nec Corporation Parallel processing device, parallel processing method, and parallel processing program storage medium
US9569221B1 (en) * 2014-09-29 2017-02-14 Amazon Technologies, Inc. Dynamic selection of hardware processors for stream processing
US9710876B2 (en) * 2015-01-16 2017-07-18 Intel Corporation Graph-based application programming interface architectures with equivalency classes for enhanced image processing parallelism

Also Published As

Publication number Publication date
US10140538B2 (en) 2018-11-27
US20160283810A1 (en) 2016-09-29
JP2016184273A (ja) 2016-10-20

Similar Documents

Publication Publication Date Title
US10540350B2 (en) Source code search engine
US9424006B2 (en) Execution optimization of mobile applications
KR102036392B1 (ko) 스크립트 파일 의존관계 및 로드 시점 관리 기법
CN113703775B (zh) 一种编译方法、装置、设备及存储介质
US10269087B2 (en) Language translation using preprocessor macros
JP2017062767A5 (ja)
JP2017517821A5 (ja)
CN109791492B (zh) 流水线相关树查询优化器和调度器
CN106547520B (zh) 一种代码路径分析方法及装置
JP6903755B2 (ja) データ統合ジョブ変換
JP6003699B2 (ja) テストデータ生成プログラム、方法及び装置
JP2015194881A (ja) コンパイル装置、コンパイラプログラム、コンパイル方法
US10521209B2 (en) Machine-based normalization of machine instructions
KR20200046078A (ko) 미디어 아이템들에 대해 커스텀 알고리즘들을 실행하기 위한 스케일러블 기술들
JP2017538996A5 (ja)
US20110225570A1 (en) Program flow route constructor
CN113468534B (zh) 针对安卓应用程序的漏洞检测方法及相关装置
CN105653271B (zh) 行为树的静态解析、执行以及优化方法和装置
US11068463B2 (en) System and method for managing log data
JP6453685B2 (ja) 演算制御装置、演算制御方法及び演算制御プログラム
US10990073B2 (en) Program editing device, program editing method, and computer readable medium
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
JP2016051367A (ja) データ解析装置、データ解析方法、および、プログラム。
JP5093508B2 (ja) ループ最適化システム、ループ最適化方法、及びループ最適化用プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171127

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181128

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181213

R150 Certificate of patent or registration of utility model

Ref document number: 6453685

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150