JPWO2011096016A1 - コンパイラ装置 - Google Patents
コンパイラ装置 Download PDFInfo
- Publication number
- JPWO2011096016A1 JPWO2011096016A1 JP2011552581A JP2011552581A JPWO2011096016A1 JP WO2011096016 A1 JPWO2011096016 A1 JP WO2011096016A1 JP 2011552581 A JP2011552581 A JP 2011552581A JP 2011552581 A JP2011552581 A JP 2011552581A JP WO2011096016 A1 JPWO2011096016 A1 JP WO2011096016A1
- Authority
- JP
- Japan
- Prior art keywords
- data
- node
- edge
- unit
- hardware resource
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
コンパイラ装置10は、ノードとエッジの集合を含むデータフローグラフと、各エッジに流れるデータが取り得る値の範囲を示す情報とを入力する入力部と、第1ノードの種類と、前記第1ノードと接続する第1エッジに流れるデータが取り得る値の範囲を示す情報とに基づいて、種類の異なる複数のハードウェア資源のうち、前記第1ノードを割り当て可能なハードウェア資源を判定する判定部とを備える。コンパイラ装置10によれば、データの精度を失うことなしに、ハードウェア資源の効率的な利用ができる。
Description
本発明は、コンパイルの分野に関し、特に演算マッピングに関する。
コンパイルは、人間がプログラミング言語を用いて作成したソースコードを計算機上で実行可能な形式(オブジェクトコード)に変換する技術である。
計算機の処理の効率化を達成する技術として特許文献1の技術がある。特許文献1の技術では、オブジェクトコードの表現を最適化することにより計算機の処理の効率化を図っている。この技術は、演算を演算結果が桁あふれしない範囲で演算精度の最も小さな命令に一意に割り当てを行い、メモリ利用効率を最適化するものである。この技術の背景には、Java(登録商標)のようなスタックマシンを利用したとき、演算の精度と演算の利用するスタックサイズ(利用メモリ量)が比例関係にあるという事実が存在する。しかしながら、異なる特徴を持つハードウェア資源が複数存在していると、演算精度の小さなハードウェア資源に割り当てることが計算機の処理の効率化に結び付くとは限らない等の問題があった。
計算機の処理の効率化を達成する技術として非特許文献1の技術がある。非特許文献1の技術では、オブジェクトコードの表現を最適化することにより計算機の処理の効率化を図っている。この技術は、ある演算群をSIMD(Single Instruction Multiple Data)命令で実現する時、演算結果の精度を許容できる範囲で演算精度の小さなSIMD命令にまとめることにより、演算の実行効率を最適化するものである。この技術の背景には、演算精度の小さなSIMD命令の方が同時に演算可能な演算数が多いという事実が存在する。しかしながら、異なる特徴を持つハードウェア資源が複数存在していると、命令数を削減することが計算機の処理の効率化に結び付くとは限らない等の問題があった。
Aart J.C. Bik. The Software Vectorization Handbook, Chapter 5, Intel Press, 2004.
本発明のコンパイラ装置によれば、データの精度を失うことなしに、ハードウェア資源の効率的な利用をすることを目的とする。
本発明の一観点のコンパイラ装置は、ノードとエッジの集合を含むデータフローグラフと、各エッジに流れるデータが取り得る値の範囲を示す情報とを入力する入力部と、第1ノードの種類と、前記第1ノードと接続する第1エッジに流れるデータが取り得る値の範囲を示す情報とに基づいて、種類の異なる複数のハードウェア資源のうち、前記第1ノードを割り当て可能なハードウェア資源を判定する判定部とを備える。
本発明によれば、データの精度を失うことなしに、ハードウェア資源の効率的な利用ができる。
以下、本発明の実施形態について、図面を参照して説明する。
図1は、実施形態に係るコンパイラシステムの構成例を示す図である。コンパイラシステムは、コンパイラ装置10と入力装置15と出力装置17とを備える。コンパイラ装置10は、ソースプログラムのコンパイルを行い、オブジェクトコードを生成、出力する。入力装置15は、情報を入力できる装置であって、例えば、マウスやキーボードである。出力装置17は、例えばモニタである。ハードウェア資源16は、コンパイラ装置10がソースプログラムをコンパイルして出力するオブジェクトコードを実行する装置である。コンパイラ装置10と入力装置15とハードウェア資源16と出力装置17とは、一体の装置であってもよく、それぞれ別個の装置でなくともよい。
コンパイラ装置10は、演算処理装置(CPU11)と、主メモリ(RAM12)と、読み出し専用メモリとを具備している。演算処理装置(CPU11)、主メモリ(RAM12)、及び読み出し専用メモリ(ROM13)はバス14を介して互いにデータの受け渡しが可能に接続されている。ROM13に、演算処理装置(CPU11)をコンパイラ装置10として機能させるためのプログラムが記憶されており、このプログラムを主メモリ(RAM12)上に載せ、CPU11がこれを実行することによりコンパイラ装置10が実現される。
次に、以上のように構成されたコンパイラ装置10の機能構成を説明する。図2は、コンパイラ装置10の概略構成を機能ブロックで示したものである。コンパイラ装置10は、ソースプログラム入力部101、データ依存解析部102、データ範囲解析部103、判定部104、割当部105を備える。
コンパイラ装置10の動作の概略を説明する。図3は、コンパイラ装置10の動作を示すフローチャートである。
コンパイラ装置10は、まず、ソースプログラム入力部101にソースプログラムを入力する(S101)。次に、データ依存解析部102が、ソースプログラムからデータフローグラフを生成する(S102)。データフローグラフは、ノードとノード間を接続するエッジを要素として含むグラフである。次に、データ範囲解析部103が、エッジに流れるデータのデータ範囲を解析して求める(S103)。次に、判定部104が、ノードの種類とハードウェア資源が処理可能なプロセスの種類との比較結果、および、そのノードに接続されたエッジに流れるデータが取り得る範囲とハードウェア資源の処理可能なデータ範囲との比較結果とを用いて、ノードに対応付け(割り当て)可能なハードウェア資源を判定する(S104)。各ノードに対応付け可能なハードウェア資源は複数あっても良い。次に、割当部105が、判定部104がノードに対応付け可能と判定したハードウェア資源から少なくとも1つのハードウェア資源をノードに対して割り当てる(S105)。
以下の説明では、コンパイラ装置10の各機能部品を図2の順番で直列に接続した最も基本的な実施の形態での各機能ブロックの説明を行っていく。しかしながら、実施の形態はこれに限られない。例えば、複数の機能ブロックが協調しながら動作を行う構成、一部の機能ブロックの順番を入れ替える構成、ある機能ブロックを複数の機能ブロックに分割する構成、前記3つの形態を組み合わせる構成等で実施することもできる。また、機能ブロックを複数のモジュールに分割して実施することもできる。
ソースプログラム入力部101は、ソースプログラムをコンパイラ装置10に入力する。図5にソースプログラムの例を示す。図5のソースプログラムはvalue “a”、“b”、“c”、“d”が“d=a+b−c”の関係にあることを示す。また、ソースプログラムの「#pragma value_bound(a,“[−10、10]”)」は、aの取り得るデータ範囲が[−10、10]であることを示す。また、「#pragma value_bound(b,“[5、10]”)」は、bの取り得るデータ範囲が[5、10]であることを示す。また、また、「#pragma value_bound(c,“[−5、10]”)」は、cの取り得るデータ範囲が[−5、10]であることを示す。
ソースプログラムは、例えば、C言語やJava(登録商標)のようなプログラミング言語である。コンパイラ装置独自のプログラミング言語であってもよい。ソースプログラムは、単に演算や依存関係をデータとして並べたデータ構造であってもよい。また、ソースプログラムは、人が見て構造を容易に理解できるテキストファイルである必要はなく、バイナリファイルであってもよい。また、ソースプログラムは、1つのファイルに全ての情報が入っている必要はなく、情報が分割されて複数のファイルになっているものであっても良い。
ソースプログラム入力部101の入力の方法は、例えば、一般に広く行われているファイルシステムからの方法を用いる。また、ネットワークを介して既にメモリに読み込んだものを入力する方法であってもよい。また、そのほかの方法としては、例えば、コンパイラ装置10にソースプログラムを組み込んでおく方法、GUI(Graphical User Interface)を利用してインタラクティブに入力させる方法、装置の外部にある様々なセンサを利用してインタラクティブに入力させる方法などがある。
データ依存解析部102は、ソースプログラムを解析してデータフローグラフを生成する。ノード(節点、頂点)の集合とエッジ(枝、辺)の集合で構成されるグラフを生成し、ノードがどのようにエッジで結ばれているかを明らかにする。データフローグラフの一例を図6に示す。
データ依存解析部102は、ソースプログラムを解析することにより、データフローグラフと合わせてエッジのデータ範囲を出力する。図7に、データ依存解析部が出力するデータフローグラフとエッジのデータ範囲を含む情報を示す。また、図8に、図7と等価の情報を表にして示す。
以下では、データ依存解析部102が、図5のソースプログラムを解析して図7のデータフローグラフとエッジのデータ範囲を合わせた情報を出力する方法を説明する。
データ依存解析部102が、図5のソースプログラムから図6のデータフローグラフを生成する例を説明する。ここで、図5のソースプログラムの演算“+”と演算”−”の優先順位が等しく左結合であり、かつ演算“=”の優先順位は他の演算子(演算“+”と演算”−”)よりも低いとする。この場合、図5のソースプログラムから図6のデータフローグラフを生成することができる。図6のデータフローグラフは、まず、ノード“a”の値とノード“b”の値をノード“+”で加算する。また、ノード“+”の加算の結果からノード“c”の値をノード“−”で減算する。次に、その結果を“d”に代入する。
図6のデータフローグラフは、複数のノード(ノード“a”、ノード“b”、ノード“+”、ノード“c”、ノード”−”、ノード“d”)と複数のエッジ(エッジ“a”→“+”、エッジ“b”→“+”、エッジ“+”→“−”、エッジ“c”→“−”、エッジ“−”→“d”)を含む情報である。ここで、エッジ“a”→“+”とは、ノード“a”とノード“+”との間を接続するエッジであるとして説明する。
次に、データ依存解析部102が、図7のエッジのデータ範囲を出力する方法を説明する。前述したように、ソースプログラムは、aの取り得るデータ範囲が[−10、10]であることを示している。また、bの取り得るデータ範囲が[5、10]であることを示している。また、cの取り得るデータ範囲が[−5、10]であることを示している。したがって、データ依存解析部102は、データフローグラフと合わせて、エッジ“a”→“+”に流れるデータのデータ範囲[−10、10]と、エッジ“b”→“+”に流れるデータのデータ範囲[5、10]と、エッジ“c”→“−”に流れるデータのデータ範囲[−5、10]とを出力する。ここで、例えば[−10、10]とは、−10から10の範囲を取り得るということを表している。逆にその範囲外の値となることはないことを示している。
以上より、データ依存解析部102が、図5のソースプログラムから図7のデータフローグラフとエッジのデータ範囲を合わせた情報を出力する方法を説明した。
なお、本実施例では、ノードを演算“+”、“−”とする例を説明した。また、エッジを演算間の依存関係として説明した。しかしながら、データフローグラフは、他の情報を保持してもよい。
データ依存解析部102が解析する部分は、ソースプログラム全体でなくてもよい。例えば、データ依存解析部102は、指定された関数の中だけを解析してもよい。また、データ依存解析部102が解析する部分を自動で選択してもよい。データ依存解析部102は、指定されたコードの部分だけを解析してもよい。これらの方法を組み合わせてもよい。
データ範囲解析部103は、データ依存解析部102が生成したデータフローグラフの各エッジに流れるデータが取り得る値の範囲を解析して出力する。データ範囲解析部103は、入力部によって入力された各エッジに流れるデータの取り得る値の範囲を示す情報を用いて、各エッジに流れるデータが取り得る値の範囲を出力しても良い。
各エッジに流れるデータの取り得る値の範囲を示す情報は、各エッジに流れるデータの取り得る値の範囲を示すことができればどのような情報であってもよく、たとえば、エッジに流れうるデータの値の範囲や、エッジに流れうるデータを表現するビットの幅であっても良い。データ範囲解析部103は、データ依存解析部102からエッジに流れるデータのデータ範囲が入力された場合、入力されたエッジ以外のエッジに流れるデータのデータ範囲を求めても良い。
以下では、データ依存解析部102が、図7に示すデータフローグラフとエッジのデータ範囲を含む情報を出力した場合に、データ範囲解析部103が、その情報を解析することにより、全てのエッジのデータ範囲を求める例を説明する。図9は、データ範囲解析部103が解析を行った結果出力する、データフローグラフと全てのエッジのデータ範囲とを合わせた情報である。図10は、図9の情報と等価な情報を表で表した。図8と図10を比較すると、データ範囲解析部103は、図8の情報に加えて、エッジ“+”→“−”のデータ範囲と、エッジ“−”→“d”のデータ範囲を出力することがわかる。
以下では、図7の情報から図9の情報を出力するために行ったデータ範囲解析部103の解析方法について説明する。
図7の情報から、エッジ“+”→“−”に流れるデータのデータ範囲は、[−10、10]と[5、10]を足したときの小値−10+5=−5、最大値10+10=20となる。また、エッジ“−”→“d”に流れるデータのデータ範囲は、[−5、20]から[−5、10]を引いたときの最小値−5−10=−15、最大値20−(−5)=25となる。したがって、図9及び図10に示すように、エッジ“+”→“−”がデータ範囲[−5、20]であり、エッジ“−”→“d”がデータ範囲[−15、25]であることを求めることができる。
なお、この例では、エッジのデータ範囲が割当てられていない部分のみを解析したが、既にエッジのデータ範囲が割当てられている部分を解析してもよい。
例えば、図7のデータフローグラフにおいて、すでにエッジ“−”→“d”のデータ範囲を[-100, 200]として割り当てられていたとする。この場合、データ範囲解析部103が、解析によりエッジ“−”→“d”を求めることにより、エッジのデータ範囲は[−15、25]で十分であることが分かる。一方、図7のデータフローグラフにおいて、すでにエッジ“−”→“d”のデータ範囲が[−1、5]として与えられていたとする。この場合、データ範囲解析部103が、解析により[−15、20]と求めることにより、与えられていたエッジのデータ範囲が解析により求めたエッジのデータ範囲より小さいことがわかり、割り当てられていたデータ範囲と解析により求めたデータ範囲とが矛盾することがわかる。
割り当てられていたエッジのデータ範囲が解析の結果求めたエッジのデータ範囲より大きなデータ範囲である場合、解析の結果求めたエッジのデータ範囲で更新するかしないかを指定できるとしても良い。
割り当てられていたエッジのデータ範囲が解析の結果求めたエッジのデータ範囲より小さな範囲の値が割り当てられていたときは、例えば、割り当てられていたエッジのデータ範囲から解析の結果求めたエッジのデータ範囲へと更新を行わなくても良い。また、結果が矛盾することをユーザに警告を発してもよい。また、割り当てられていたエッジのデータ範囲から解析結果のエッジのデータ範囲に更新するとしても良い。割り当てられていたエッジのデータ範囲と求めたデータ範囲とが矛盾する場合に備えて、エッジのデータ範囲に優先順位をつけてもよい。
また、エッジのデータ範囲を割り当てられていたデータ範囲から解析結果のデータ範囲に更新をできるか否かオプションで指定できるようにしてもよい。
また、データ範囲解析部に入力されたデータフローグラフのエッジのデータ範囲が全て予め指定されている場合、データ範囲解析部は全く解析を行わなくても良いし、エッジのデータ範囲の更新や矛盾発見を期待して解析を行っても良い。
以上の例では、データフローグラフの上から下に向かってエッジのデータ範囲を解析したが、任意の順序で解析してもよい。
エッジのデータ範囲は、図9のように全てエッジについて解析できる必要はなく、解析できないエッジや解析しないエッジがあってもよい。エッジのデータ範囲を解析できないときや解析しないときは、コンパイラ装置利用者に対して警告を発してもよい。単に解析できないということを伝えるだけではなく、データフローグラフのどのエッジがどのような原因で解析できないという詳細な情報を示してもよい。エッジのデータ範囲を解析できないとき、データフローグラフのどこかの入力で解析できない原因を取り除いてもよいし、解析しないまま先に進めてもよい。以降の処理において、解析できなかったエッジをどのように処理するかは、後述する。
エッジのデータ範囲は、エッジのデータ範囲になりうる情報であれば、図5のようにエッジに直接対応していなくても良い。例えば、各ノードにノードの入出力のデータ範囲を結びつけることは、エッジにエッジのデータ範囲を結び付けていることと等価である。
エッジの解析を行うためには解析の起点となるエッジのデータ範囲を持った1つ以上のエッジを必要とする。図7の例では,図5のプラグマで指定されたデータを起点としている。すなわち、図5のプラグマでは、ノードa、ノードb、ノードcそれぞれのデータ範囲をそれぞれ[−10、10]、[5、10]、[−5、10]と指定している。尚、起点の情報は、ソースプログラムに埋め込んでも良いし、ソースプログラムとは別に入力しても良い。
また、起点となるエッジのデータ範囲は、データ範囲解析部103が自動的に決定しても良い。
エッジのデータ範囲をソースプログラムに埋め込む方法としては、16bit整数型や32bit整数型などの変数の型を利用した方法、変数の命名規則にデータ範囲の記述方法を含める方法、エッジのデータ範囲を直接的に記述できる記述方法を利用する方法、プラグマとしてエッジのデータ範囲を記述しておいて解析する方法、既存の記述方法の上にエッジのデータ範囲を記述してプリプロセス時に処理する方法、バイナリファイル中にエッジのデータ範囲を記録しておく方法などがある。
エッジのデータ範囲をソースプログラムとは別に入力する方法としては、エッジのデータ範囲を別のファイルに記述しておいて入力する方法、GUI(Graphical User Interface)を通してユーザにエッジのデータ範囲をインタラクティブに指定させる方法などがある。
データ範囲解析部103が自動的に決定する方法としては、メモリからの入力部は全て16bitであるとハードウェア資源の特徴から決めておく方法、ある演算を行ったときはエッジのデータ範囲が限定されると推定する方法、複数の演算の依存関係を見て決める方法などがある。
判定部104は、データ範囲解析部103から入力された情報(データフローグラフとエッジを流れるデータの取り得る範囲)を受け取り、その情報からデータフローグラフの要素(ノード、又はエッジ)を対応付け可能なハードウェア資源を判定する。判定部104は、図2に示すように第1記憶部104Aを備える。第1記憶部104Aは、図12に示すように、コンパイラ装置10が生成するオブジェクトコードを実行させるハードウェア資源と当該ハードウェア資源の演算の種類と当該演算の演算可能なデータ範囲を記憶する。図11に、コンパイラ装置10が生成するオブジェクトコードを実行させるハードウェア資源群の例を示す。判定部104は、ハードウェア資源群のハードウェア資源のうち、データフローグラフのノードの演算の種類と一致し、かつノードに入力されるエッジのデータ範囲とノードから出力されるエッジのデータ範囲を全て含むデータ範囲を処理可能なハードウェア資源をノードと対応付け可能なハードウェア資源と判定する。判定部104は、データフローグラフの各要素に対応付け可能なハードウェア資源を全て対応付け可能と判定する。したがって、データフローグラフの各要素に対して対応付けるハードウェア資源は1つである必要はない。
どの要素について対応付けの判定を行うか否かは、ハードウェア資源の性質やコンパイラ装置10への要求によって異なる。例えば、演算器はヘテロジニアスでデータパスはホモジニアスであるならば、データパスの判定は行わずに演算器の判定のみを行うということもできる。
データフローグラフの要素をハードウェア資源に対応付けられるかどうかの判定は、ハードウェア資源が、各データフローグラフの要素を正しく実行できるかによって判断される。各データフローグラフの要素を正しく実行できるためには、例えば、目的の演算を実現できること、データの精度を失うことなく演算することが条件となる。目的の演算を実現できることは、例えば、ノードが“+”(足し算を行う演算子)であるときは、ハードウェア資源は加算器を含む演算器に割当てる必要があることである。
また、データの精度を失うことなく演算することとは、例えば、ハードウェア資源の演算の演算可能なデータ範囲が、ノードに入力されるエッジのデータのデータ範囲と、ノードが出力するエッジのデータ範囲すべてのデータ範囲を含むデータ範囲であることが必要である。例えば、図9の演算ノード“+”に対応する加算器がデータの精度を失わないための条件は、演算ノード“+”に入力されるエッジ“a”→“+”のデータ範囲[−10、10]とエッジ“b”→“+”のデータ範囲[5、10]のデータを入力することができて、かつこの入力に対する演算を行った結果の出力であるエッジ“+”→“−”のデータ範囲[−5、20]を出力とすることができる加算器である必要がある。すなわち、加算器は、データ範囲[−10、20]が演算可能である必要がある。また、データの精度を失うことなく演算することができる演算器とは、例えば、ノードが32bitでの足し算を行う必要があればそれ以上の精度(32bitより高いbit数)をもつ演算器であっても良い。
ここで、データの精度を失うとは、結果が数学的に正しくないという意味ではなく、求められた精度に収まればよい。例えば、0.005/100が0になってしまっていても、小数点第三位まで正しければよいという性質であるならば、この結果は正しい精度で演算を行えているということである。
エッジをデータパスに割当てる際には、エッジに流れるデータのデータ範囲をデータパスで流せることが必要である。
図9と図10と図11と図12とを利用して判定部104の動作を説明する。
図11のハードウェア資源群は、加算器と減算器がまとまった演算器群AからDを含む。また、このハードウェア資源群は、4つの演算器群とLoad/Store演算器が相互接続されている。Load/Store演算器からのデータパスと演算器群間のデータパスは、演算器群内の演算器のどちらにも接続されているとする。演算器群Aは、演算の種類が“+”(加算)でありかつ処理可能なデータ範囲が[−105、105]であるハードウェア資源A1と、演算の種類が”−”(減算)でありかつ処理可能なデータ範囲が[−105、105]であるハードウェア資源A2とを備える。演算器群Bは、演算の種類が“+”(加算)でありかつ処理可能なデータ範囲が[−100、100]であるハードウェア資源B1と、演算の種類が”−”(減算)でありかつ処理可能なデータ範囲が[−1、2]であるハードウェア資源B2とを備える。演算器群Cは、演算の種類が“+”(加算)でありかつ処理可能なデータ範囲が[−1、2]であるハードウェア資源C1と、演算の種類が”−”(減算)でありかつ処理可能なデータ範囲が[−1、2]であるハードウェア資源C2とを備える。演算器群Dは、演算の種類が“+”(加算)でありかつ処理可能なデータ範囲が[−1、2]であるハードウェア資源D1と、演算の種類が”−”(減算)でありかつ処理可能なデータ範囲が[−100、100]であるハードウェア資源D2とを備える。また、Load/Store演算器はハードウェア資源Eである。ハードウェア資源Eのデータ範囲は、[−128、127]である。
尚、本実施形態では各データパスは、どのようなサイズのデータも通すことができることとする。すなわち、本実施形態では、各エッジに流れるデータのデータ範囲からデータパスを選ぶ必要がない。なお、データパスに通すことができるデータサイズに制限がある場合、判定部104は、エッジのデータ範囲から当該データ範囲のデータサイズを通すことができるデータパスを判定する機能を設けても良い。
ここで、演算器群という概念は、短い時間でデータ転送可能な演算器の集合を表現するものである。演算器群とは、ハードウェア資源として特別な機構を備えている必要は無い。たとえば、演算器群内においてハードウェア資源間のデータパスは1クロックでデータを転送できるとする。一方、演算器群間のデータパスは、例えばデータ転送に5クロック係るものとする。
各演算器は1クロックで演算を実行することが可能であるとする。Load/Store演算器は、メモリアクセス時間とデータ転送時間を合わせて10クロックでデータを他のハードウェア資源へ転送できるとする。
図9のデータフローグラフの各要素が図11のハードウェア資源群のうちどのハードウェア資源に対応付け可能かを判定する方法の例を示す。本実施形態では、各データパスにはどのようなデータも通すことができると仮定したため、データフローグラフのエッジのデータパスの対応付け可能か否かの判定を行う必要はない。
判定は、各ノードの目的の演算を実現できること、データの精度を失うことなく演算することの2つの条件を満たすか否かで判定する。本実施形態では、データの精度は、ハードウェア資源の処理可能なデータ範囲が、ノードに入力されるエッジと出力されるエッジのデータ範囲を含むか否かで判定する。例えば、図4のようなステップで判定する。すなわち、判定するノードを選択し(S1401)、次に、データ範囲解析部103から入力された図10の情報と第1記憶部104Aが記憶する図12の情報とを比較することにより、各ハードウェア資源が、ノードの目的の演算を実現可能かを判定し(S1402)、次に、ハードウェア資源が、データの精度を失わない演算をすることが可能か否かを判定する(S1403)。
図9のメモリアクセスの演算ノードa、b、c、dは、Load/Store演算器であるハードウェア資源Eによって演算を実現可能である。また、ノードa、b、cから出力されるエッジのデータ範囲及びノードdに入力されるエッジのデータ範囲は、それぞれLoad/Store演算器の読み書き可能データ範囲[−128、127に含まれている。したがって、ノードa、b、c、dは、Load/Store演算器に対応付け可能であると判定される。
図9のノード“+”は、足し算を行う演算子である。したがって、図12の表からハードウェア資源A1、B1、C1、D1で演算を実現可能であると判定する。また、ノード“+”に入力されるエッジは“a”→“+”(データ範囲は[−10、10])と“b”→“+”(データ範囲は[5、10])である。ノード“+”から出力されるエッジは、“−”→“d”(データ範囲は[−5、20])である。したがって、ハードウェア資源は、データ範囲[−10、20]の処理可能な演算器である必要がある。したがって、表12から、ハードウェア資源A1、B1を対応付け可能なハードウェア資源であることと判定することができる。また、同様に、図9のノード“−”に対応付け可能なハードウェア資源は、ハードウェア資源A2とハードウェア資源D2であると判定する。判定部104が判定して出力する各ノードと各ノードそれぞれに対応する対応付け可能なハードウェア資源を含む情報を図13に示す
なお、ノードの種類は、変数ノード、足し算には限られない。例えば、ノードの種類は、足し算と掛け算の複合、FFT(Fast Fourier Transform)、H.264デコードなど、低レベルの演算から高レベルの演算がある。データフローグラフは、低レベルの演算と高レベルの演算を1つのデータフローグラフに含んでいても良い。また、ノードの種類は、算術演算だけではなく、論理演算、メモリ操作、条件分岐、複素演算、スタック操作、データ転送、関数呼び出し、関数リターンなどでも良い。
なお、ノードの種類は、変数ノード、足し算には限られない。例えば、ノードの種類は、足し算と掛け算の複合、FFT(Fast Fourier Transform)、H.264デコードなど、低レベルの演算から高レベルの演算がある。データフローグラフは、低レベルの演算と高レベルの演算を1つのデータフローグラフに含んでいても良い。また、ノードの種類は、算術演算だけではなく、論理演算、メモリ操作、条件分岐、複素演算、スタック操作、データ転送、関数呼び出し、関数リターンなどでも良い。
ハードウェア資源も、加算器に限られない。ハードウェア資源は、例えば、乗算器、SIMD(Single Instruction Multiple Data)で複数のデータの足し算を行う演算器、SIMDで複数のデータの足し算を行う演算器の中にある各加算器、ALU(Arithmetic Logic Unit)のように複数種類の演算が可能で演算を選択可能な演算器、複数のALUが結合しているALUアレイのような演算器、FFT(Fast Fourier Transform)のような特定の演算を行う演算器、H.264デコードを行う演算器、複数のプロセッサコアが結合するマルチコア、複数のプロセッサが結合するマルチプロセッサなどがある。ハードウェア資源は、低レベルの演算器であっても高レベルの演算器であっても良い。ハードウェア資源は、1まとまりのハードウェア資源の中に低レベルの演算器から高レベルの演算器が入り混じってもよい。また、演算器だけではなく演算器間を結ぶデータパスもハードウェア資源に含まれる。
ハードウェア資源は、コンパイラ装置から階層的に見えていてもよい。例えば、高レベルの演算器の中に低レベルの演算器が含まれるという情報を保持して判定に利用してもよい。例えば、加算してから減算する演算器を1つの演算器としてみるとき、その演算器の中に加算器と減算器があるということを利用してもよく、10を足したいときに10加算して0減算するということを行えば同じことを実現できるため、対応付け可能と判定してもよい。このようにすることにより、対応付け可能と判定される演算器の数が増える。
対応付け可能性の判定は、1箇所もしくは1箇所以上のハードウェア資源に対して行う。ハードウェア資源の対応付け可能性の判定を1箇所のハードウェア資源に対して行うのであれば、判定結果は対応付け可能か否かということになる。1箇所のハードウェア資源に対して判定を行うとき、判定を行う1箇所のハードウェア資源の選択することには様々な方法が考えられる。例えば、ランダムに1箇所を選ぶ方法、メモリに近いハードウェア資源を優先的に選ぶ方法、アルゴリズムに従って選ぶ方法、既に割当てられているハードウェア資源があるならそこに近いハードウェア資源を選ぶ方法、強力な演算を行えるハードウェア資源を優先的に選ぶ方法、太いデータパスに近いハードウェア資源を選ぶ方法、各ハードウェア資源へのパスを最小化できるように論理的に中心に近いハードウェア資源を選ぶ方法、それらを組み合わせた方法などが考えられる。1箇所以上のハードウェア資源に対して行うのであれば、判定結果は対応付け可能なハードウェア資源の集合、対応付け可能なハードウェア資源の部分集合などが考えられる。
判定部104は、外部からあるデータフローグラフのノードを特定のハードウェア資源に対応付け可能もしくは不可能という情報を受け取ってもよい。例えば、外部から、あるハードウェア資源をデータフローグラフのノードの演算とは異なる処理のために利用したいとの情報を受け取った場合、判定部104は、データフローグラフのノード全てに対してそのハードウェア資源を対応付け可能と判定しない。判定部が外部から情報を受け取る方法は、例えば、外部のファイルから入力される方法、GUI(Graphical User Interface)からノードのプロパティとしてインタラクティブに指定される方法などがある。尚、外部からの情報は、データフローグラフの全てのノードとハードウェア資源の関係を指定するものであっても、一部のノードとハードウェア資源の関係を指定するものであっても良い。
尚、判定部104は、対応付け可能と判定できるハードウェア資源がなかったときには、コンパイラ装置10利用者や他の装置に対して警告を行ってもよい。例えば、ハードウェア資源を割当てられないノードやエッジの情報をコンソールに表示したり、プロセス間通信を利用して通知したりしてもよい。警告を行うかどうかをオプションで指定したり、警告の情報詳細度を指定したりしてもよい。
判定部104に入力される情報として、エッジのデータ範囲を与えられていない部分がある場合、判定部104での対応には様々な方法が考えられる。例えば、判定部104は、エラーとして処理を進めない方法、ノードに対して演算を実現可能なハードウェア資源のうち最も処理可能なデータ範囲が大きいハードウェア資源を対応付け可能と判定する方法、ノードの演算を実現可能なハードウェア資源の中からランダムに対応付け可能と判定する方法、ノードの演算を実現可能なハードウェア資源の中から一定以上のデータ範囲を持つハードウェア資源を対応付け可能と判定する方法などがある。
割当部105は、データフローグラフの各要素に判定部104が対応付け可能と判断したハードウェア資源のうち少なくとも一つのハードウェア資源を割り当てる。割当部105は、ハードウェア資源管理情報を記憶する第2記憶部105Aを有する。第2記憶部105Aが記憶するハードウェア資源管理情報の1例を図14に示す。図14に示すように、第2記憶部105Aは、ハードウェア資源管理情報としてハードウェア資源がどの演算器群に属するかを記憶する。
割当部105は、データフローグラフの各要素にハードウェア資源の割り当てを行う際に、データフローグラフの依存関係とハードウェア資源管理情報を基に行う。
データフローグラフの依存関係とは、例えば、各ノード間の依存関係である。例えば、図7において、ノード“+”は、ノード“−”の前に処理を行う依存関係がある。また、依存関係とは、各ノードに対応付け可能なハードウェア資源に関する依存関係を含んでもよい。
図13と図14と図15を利用して割当部105の動作を説明する。図15は、割当部105が各ノードに対して割り当てるハードウェア資源を示す表である。
ノードaとbとcとdは、図13に示すとおり、判定部104によって1つのLoad/Store演算器(ハードウェア資源E)に対応付け可能であると判定されている。したがって、割当部105は、ノードaとbとcとdに対してLoad/Store演算器(ハードウェア資源E)を割当てる。
図13に示すとおり、ノード“+”は、判定部104によってハードウェア資源A1とハードウェア資源B1に対応付け可能と判定されている。ノード“−”は、図13に示すとおり、判定部104によってハードウェア資源A2、D2と対応付け可能と判定されている。そして、図14のハードウェア資源管理情報からハードウェア資源A1とA2は同じ演算器群に属することがわかる。また、データフローグラフからわかるようにノード“+”の処理はノード“−”の処理の前に行うという依存関係がある。
本実施形態では、割当部105は、ノードに対するハードウェア資源を割り当てる際に、処理の実行時間が早くできることを基準として割り当てる。割当部105は、ハードウェア資源の属する演算器群の情報と、ノードの依存関係を基に、ノードに対するハードウェア資源を割り当てる。ここで、ハードウェア資源が同じ演算器群内であればハードウェア資源間のデータパスを1クロックで移動できる。また、ハードウェア資源が異なる演算器群にある場合、ハードウェア資源間のデータパスを5クロックで移動する。
前述したとおり、演算に必要なクロック数は、加算器へのメモリ読み込みに10クロックであり、加算に1クロック、減算に1クロック、減算器からのメモリの書き込みに10クロック必要である。
したがって、ノード“+”とノード“−”を同一の演算器群内にあるハードウェア資源に割り当てた場合、データフローグラフ全体を処理するためには、合計23クロックかかる。
一方、ノード“+”とノード“−”を異なる演算器群にあるハードウェア資源を割り当てた場合、例えば、ノード“+”にハードウェア資源B1を割り当てて、ノード“−”にハードウェア資源D2を割り当てた場合、ハードウェア資源B1からハードウェア資源D2へのデータ受け渡しに5クロック必要となるため、データフローグラフ全体を処理するためには、合計27クロックかかる。
割当部105は、ノード“+”にはハードウェア資源A1を割り当て、ノード“−”にはハードウェア資源A2を割り当てる。
尚、本実施形態では、ハードウェア資源管理情報としてハードウェア資源の属する演算器群の情報を用いて、割当部105は、最も実行時間が早いハードウェア資源を割り当てた。しかしながら、ハードウェア資源管理情報は演算器群に限られない。また、ノードに対するハードウェア資源の割当も最も早くなるハードウェア資源を割り当てる場合に限られない。
ハードウェア資源管理情報には様々な種類の情報がある。例えば、ハードウェア資源の接続状況、アルゴリズムによって既に割当てられているノードとハードウェア資源の情報、アルゴリズムによってこれから割当てられるノードとノードに対応付け可能なハードウェア資源の情報、ハードウェア資源間のデータパスの遅延に関する情報、ハードウェア資源の実行時間に関する情報、ハードウェア資源の消費電力に関する情報、ハードウェア資源の熱分布に関する情報など、ハードウェア資源そのものの情報に加えて割当状況などの割当アルゴリズムに関する情報などを幅広く含んだ情報である。
割当部105は、ハードウェア資源の割当の指定を外部から受け取って、ノードに対するハードウェア資源の割当を行っても良い。例えば、あるノード“+”を特定の加算器に割当てたいとき、その情報を外部から入力してもよい。入力の方法は、例えば、外部のファイルから入力する方法、GUI(Graphical User Interface)からノードのプロパティとしてインタラクティブに指定する方法がある。また、ハードウェア資源割当の外部からの指定は、ノードに対して1つのハードウェア資源への割当ての指定である必要はなく、ノードに対して複数のハードウェア資源の候補のどれかを割り当てるという指定であってもよい。また、ある演算器の下位階層にある演算器のどれかという指定でもよい。また、外部からのハードウェア資源割当の指定に強制力を持たせることもできるし、希望という指定を行うこともできる。希望という指定を行ったとき、割当部105は可能な限りそのハードウェア資源に割り当てようとするが、割当てられないときや求める効果を満たせないときには他のハードウェア資源に割当を行ってもよい。
割当部105は、割当てられるハードウェア資源がないときに警告を行ってもよい。例えば、データ幅[200, 300]同士の加算を行うノード“+”を図11のハードウェア資源に割当てることはできないという情報を示す。このとき、割当部105は、エラーとして処理を実行しても良いし、処理可能なデータ幅の大きいハードウェア資源に割当ててもよいし、ランダムにハードウェア資源を選択して割り当ててもよい。
割当部105は、割当てられるようなハードウェア資源をプログラマブルデバイス上に作成してもよい。例えば、加算器のような専用ハードウェア資源とFPGAのようなプログラマブルデバイスが結合しているとき、専用ハードウェア資源として存在している加算器の演算可能な範囲が不十分であるときは、FPGA上に演算可能な範囲を満たす加算器を作成してもよい。割当部105は、割当てられるハードウェア資源があるときにでも新しいハードウェア資源を作成してもよい。前述のハードウェア資源の例では、用意されている専用ハードウェア資源の加算器でも十分であるが、専用ハードウェア資源の加算器を他の加算のために利用したい場合や、他の演算との依存関係やハードウェア資源管理情報から前の演算に近いFPGAに割当てたい場合など、様々な理由が考えられる。プログラマブルデバイスがあるとき、判定部104は常にプログラマブルデバイスに対応付け可能と割当部105に伝達してもよいし、自由に演算器を作れるのだから明示的に割当部105に伝達しないという手段をとってもよい。
本実施形態のコンパイラ装置10によれば、オブジェクトコードを実行するハードウェア資源が複数ある場合に、データの精度を失うことなくハードウェア資源の効率的な利用を行うことができる。
尚、割当部105が、ノードに対してハード資源の割当を行うその他の方法として、下記の方法がある。
コンパイラ装置10が出力するオブジェクトコードを実行するハードウェア資源群がSIMD(Single Instruction Multiple Data)の演算器を有するハードウェア資源を含む場合を説明する。この場合、判定部104が、複数のノードをSIMDユニットに対応付け可能と判定した場合、割当部105は、それらノードを複数まとめてSIMDの演算器に割当を行う。これにより、複数のデータをまとめて処理できるため、別々に演算を行ったときよりも処理時間を短縮できる。
また、割当部105は、例えばオブジェクトサイズの削減を目的としてハードウェア資源割当を行ってもよい。例えば、ハードウェア資源A1、A2は、様々な演算をサポートするため、演算の指定に32bit必要であったとする。それ以外のハードウェア資源は、加算と減算のみをサポートするため、演算の指定に1bit必要であったとする。この場合、ノード“+”にハードウェア資源A1を割り当てて、ノード“−”に演算器A2を割り当てた場合、合計64bitを演算の指定に利用する。一方、ノード“+”にハードウェア資源B1を割り当てて、ノード“−”にハードウェア資源D2を割り当てた場合、合計2bitで十分である。この場合、オブジェクトサイズの削減を達成することができる。
また、割当部105は、例えば利用メモリ量の削減を目的としてハードウェア資源割り当てを行っても良い。例えば、ハードウェア資源A1、A2はスタックマシンであり、演算に必要なデータをメモリに格納する必要があるとする。それ以外のハードウェア資源は、レジスタを有しており、演算に必要なデータをレジスタから持ってくることができるとする。この場合、ノード“+”にハードウェア資源B1を割り当てて、ノード“−”にハードウェア資源D2を割り当てた場合、ハードウェア資源A1、A2を割り当てた場合と比べて利用メモリ量を削減できる。
また、割当部105は、例えば消費現力の削減を目的としてハードウェア資源割り当てを行っても良い。例えば、ハードウェア資源A1、A2は強力な演算器であり消費電力が大きいとする。一方、他のハードウェア資源はハードウェア資源A1、A2よりも消費電力が小さいとする。この場合、ハードウェア資源A1、A2に割当てないことにより、ハードウェア資源A1、A2に対してクロックゲーティングなどの技術を使って消費電力を削減することができる可能性がある。
また、割当部105は、例えば発生する熱の低減を目的としてハードウェア資源割当てを行ってもよい。例えば、特定のハードウェア資源ばかりを利用していると熱が集中するのに対して、色々なハードウェア資源を利用することにより、熱を分散することができる可能性がある。したがって、割当部105は、例えば、いろいろなハードウェア資源を割り当てることにより、熱の低減を達成することができる。
また、割当部105は、例えば利用ハードウェア資源量の削減を目的として割当てを行ってもよい。例えば、複数の処理があったときに、それらの処理を同時に行いたいという状況を想定する。それらの処理を時分割すると、処理に求められている時間制約を満たせない場合などである。この場合、割当部105は、データフローグラフのノード+とノード−の処理をハードウェア資源A1とA2のみに割当てて、他のハードウェア資源を他の処理のために空けておくことにより、異なる処理を同時に実行することができる可能性がある。
また、データフローグラフの各要素が1つのハードウェア資源に割り当てられる例を説明したが、判定部104は、データフローグラフの各要素を複数のハードウェア資源に割り当て可能と判定しても良い。
例えば、64bitの精度が必要なデータフローグラフのエッジをハードウェア資源のデータパスに割り当てることを考える。ここで、判定部104は、このデータフローグラフのエッジが表現する64bitのデータの上位32bitと下位32bitのデータを別のエッジと考えることによって、2つの32bitデータパスに割り当て可能と判定しても良い。
このように、データフローグラフの1つのエッジを、複数のエッジと考えることで、判定部104は、データフローグラフの各要素を複数のハードウェア資源に割り当て可能と判定することができる。これは、データパスだけではなく演算器の場合にも適用可能である。たとえば、2つの64bitのデータ同士のビット単位の論理和を計算するとき、上位32bitと下位32bitとを異なる2つの32bit演算器に割り当て可能と判定してもよい。割当部105は、判定部104によってデータフローグラフの一つの要素が複数のハードウェア資源に割り当て可能と判定されたとき、その割り当て方法も候補に含め、割り当てを行う。
本発明は、上記実施形態に限られない。エッジに流れるデータの取り得る範囲を示す情報は、1つのデータ範囲を示す情報に限られない。たとえば、エッジに流れるデータの取り得る範囲を示す情報は、エッジに流れうる値の集合で表しても良い。例えば、エッジに流れうる値を(1, 2, 5, 8)と表現してもよい。この場合、エッジは、1か2か5か8の値を取り得ることを表す。エッジに流れるデータの取り得る範囲を示す情報は、複数のデータ範囲の集合で表現されても良い。例えば、[12, 20][50, 75]と表す。この場合、エッジに流れる値は、12から20の範囲又は50から75の範囲にある。
エッジに流れる値は、図7では全て整数として示したが、整数以外でも良い。例えば、小数や行列や複素数などで表現しても良い。
また、エッジに流れる値はビット幅を用いて表現しても良い。以下では、エッジに流れる値をビット幅で表現する場合について説明する。
この場合、図5のソースコードの変数a、b、c、dはデータ範囲でなく、ビット幅で表す。また、図7、図8、図9、図10のエッジに流れる値として、データ範囲の代わりにビット幅を用いる。また、ハードウェア資源の処理量もデータ範囲でなく、ビット幅で表す。このとき、判定部104の第1記憶部104Aは、各ハードウェア資源について、図17のようなビット幅との対応表を記憶している。また、図16に、図9のデータフローグラフにおいて、各エッジに流れる値をビット幅で表した場合のデータフローグラフの要素とエッジのビット幅との対応表を示す。
判定部104は、各ノードについて入力のビット幅と出力のビット幅と各ハードウェア資源の処理可能なビット幅とを比較して、ハードウェア資源の処理可能なビット幅が大きい場合に、当該ハードウェア資源を対応付け可能なハードウェア資源と判定する。例えば、図16においては、ノードaの出力のエッジである“a”→“+”、ノードbの出力のエッジである“b”→“+”、ノードcの出力のエッジである“c”→“−”、ノードdの入力のエッジであるエッジ“−”→“d”のビット幅がそれぞれ、16、16、16、18である。またハードウェア資源Eは、ビット幅64である。したがって、判定部104は、ノードa、b、c、dは、ハードウェア資源Eで対応付け可能と判定する。また、ノード“+”の入力のエッジである“a”→“+”と“b”→“+”は、それぞれのビット幅が16である。また、ノード“+”の出力のエッジである“+”→“−”のビット幅は、17である。したがって、判定部104は、図17よりノード“+”は、ハードウェア資源A1とハードウェア資源B1と対応付け可能と判定する。また、ノード“−”の入力のエッジである“c”→“−”のビット幅とは16ビットである。また、ノード“−”の入力のエッジである“+”→“−”のビット幅は、17である。また、ノード“−”の出力のエッジである“−”→“d”のビット幅は18である。したがって、判定部104は、ノード“−”は、図17よりハードウェア資源A2、D2と対応付け可能であると判定する。
尚、本実施形態は、コンパイラ装置10のうちソースプログラム入力部101、データ依存解析部102、データ範囲解析部103、割当部105を備えない構成である判定装置20としても良い。判定装置20は、入力部201と判定部104を備える構成である。入力部201は、データフローグラフ(ノードとエッジ)とエッジに流れるデータ範囲を入力する。判定部104は、コンパイラ装置10の判定部104の動作と同じである。尚、判定装置20は、ソースプログラム入力部101、データ依存解析部102、データ範囲解析部103、判定部104それぞれを備える構成であってもよい。
また、本実施形態は、コンパイラ装置10のうちソースプログラム入力部101、データ依存解析部102、データ範囲解析部103を備えない構成である割当装置30としても良い。割当装置30は、入力部201と判定部104と割当部105を備える構成である。入力部201は、判定装置20の動作と同じである。判定部104、割当部105は、コンパイラ装置10の判定部104、割当部105の動作と同じである。
判定装置20、割当装置30によれば、データの精度を失わない範囲で効率的にハードウェア資源を利用することができる。
なお、コンパイラ装置10は、例えば、汎用のコンピュータ装置を基本ハードウェア資源として用いることでも実現することが可能である。すなわち、ソースプログラム入力部101、データ依存解析部102、データ範囲解析部103、判定部104、割当部105は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、コンパイラ装置10は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また第1記憶部104A、第2記憶部105Aは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現することができる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
10・・・コンパイラ装置、11・・・CPU、12・・・RAM、13・・・ROM、14・・・バス、15・・・入力装置、16・・・ハードウェア資源、17・・・出力装置、101・・・ソースプログラム入力部、102・・・データ依存解析部、103・・・データ範囲解析部、104・・・判定部、104A・・・第1記憶部、105・・・割当部、105A・・・第2記憶部、20・・・判定装置、30・・・割当装置、201・・・入力部
Claims (5)
- ノードとエッジの集合を含むデータフローグラフと、各エッジに流れるデータが取り得る値の範囲を示す情報とを入力する入力部と、
第1ノードの種類と、前記第1ノードと接続する第1エッジに流れるデータが取り得る値の範囲を示す情報とに基づいて、種類の異なる複数のハードウェア資源のうち、前記第1ノードを割り当て可能なハードウェア資源を判定する判定部とを備える
コンパイラ装置。 - 前記判定部は、各ハードウェア資源が実行可能なプロセスの種類と、前記各ハードウェア資源が処理可能なデータの値の範囲とを記憶する記憶部を備え、
前記判定部は、前記第1ノードに対応するプロセスの種類を処理可能であって、かつ、処理可能なデータ範囲が前記第1エッジに流れるデータが取り得る値の範囲を包含するハードウェア資源を、前記第1ノードに割り当て可能なハードウェア資源と判定することを特徴とする
請求項1記載のコンパイラ装置。 - 前記判定部によって、前記第1ノードに割り当て可能と判定されたハードウェア資源のうち、ノード間の依存関係とハードウェア資源間のデータの受け渡しにかかる時間とを用いて、前記第1ノードを割り当てるハードウェア資源を決定し、前記第1ノードを割り当てる割当部とを備えることを特徴とする
請求項2記載のコンパイラ装置。 - 前記エッジに流れるデータが取り得る値の範囲と前記ハードウェア資源の処理可能なデータの範囲とは、ビット幅で表現されることを特徴とする
請求項1記載のコンパイラ装置。 - ソースプログラムを入力するソースプログラム入力部と、
前記ソースプログラムをノードとエッジの集合を含むデータフローグラフで解析する第1解析部と、
前記エッジに流れるデータが取り得る値の範囲を解析する第2解析部と、
第1ノードの種類と、前記第1ノードと接続する第1エッジに流れるデータが取り得る値の範囲を示す情報とに基づいて、前記第1ノードに割り当て可能なハードウェア資源を判定する判定部と、
前記第1ノードを割り当て可能なハードウェア資源を、前記第1ノードに割り当てる割当部とを備えることを特徴とする
コンパイラ装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2010/000710 WO2011096016A1 (ja) | 2010-02-05 | 2010-02-05 | コンパイラ装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2011096016A1 true JPWO2011096016A1 (ja) | 2013-06-06 |
Family
ID=44355046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011552581A Pending JPWO2011096016A1 (ja) | 2010-02-05 | 2010-02-05 | コンパイラ装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20120192168A1 (ja) |
JP (1) | JPWO2011096016A1 (ja) |
WO (1) | WO2011096016A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5950285B2 (ja) * | 2013-12-19 | 2016-07-13 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム |
US10915324B2 (en) * | 2018-08-16 | 2021-02-09 | Tachyum Ltd. | System and method for creating and executing an instruction word for simultaneous execution of instruction operations |
US11023273B2 (en) * | 2019-03-21 | 2021-06-01 | International Business Machines Corporation | Multi-threaded programming |
US11204745B2 (en) | 2019-05-23 | 2021-12-21 | Xilinx, Inc. | Dataflow graph programming environment for a heterogenous processing system |
CN113094030A (zh) * | 2021-02-09 | 2021-07-09 | 北京清微智能科技有限公司 | 一种可重构芯片的易编译方法及系统 |
US20230229514A1 (en) * | 2022-01-14 | 2023-07-20 | Dell Products L.P. | Intelligent orchestration of classic-quantum computational graphs |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04257928A (ja) * | 1991-02-13 | 1992-09-14 | Hitachi Ltd | 並列計算機におけるプロセッサ割り当て方法、及び装置 |
JP2000339172A (ja) * | 1999-05-28 | 2000-12-08 | Toshiba Corp | メモリ効率化方法 |
JP2001175619A (ja) * | 1999-12-22 | 2001-06-29 | Univ Waseda | シングルチップマルチプロセッサ |
JP2003067195A (ja) * | 2001-08-28 | 2003-03-07 | Nec Microsystems Ltd | 最適化コンパイル方法及び最適化コンパイル装置 |
JP2003150386A (ja) * | 2001-11-14 | 2003-05-23 | Matsushita Electric Ind Co Ltd | コンパイラ装置及びコンパイル方法 |
JP2005078518A (ja) * | 2003-09-02 | 2005-03-24 | Renesas Technology Corp | マイクロコントローラユニットおよびそのコンパイラ |
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
-
2010
- 2010-02-05 JP JP2011552581A patent/JPWO2011096016A1/ja active Pending
- 2010-02-05 WO PCT/JP2010/000710 patent/WO2011096016A1/ja active Application Filing
-
2012
- 2012-03-14 US US13/419,657 patent/US20120192168A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04257928A (ja) * | 1991-02-13 | 1992-09-14 | Hitachi Ltd | 並列計算機におけるプロセッサ割り当て方法、及び装置 |
JP2000339172A (ja) * | 1999-05-28 | 2000-12-08 | Toshiba Corp | メモリ効率化方法 |
JP2001175619A (ja) * | 1999-12-22 | 2001-06-29 | Univ Waseda | シングルチップマルチプロセッサ |
JP2003067195A (ja) * | 2001-08-28 | 2003-03-07 | Nec Microsystems Ltd | 最適化コンパイル方法及び最適化コンパイル装置 |
JP2003150386A (ja) * | 2001-11-14 | 2003-05-23 | Matsushita Electric Ind Co Ltd | コンパイラ装置及びコンパイル方法 |
JP2005078518A (ja) * | 2003-09-02 | 2005-03-24 | Renesas Technology Corp | マイクロコントローラユニットおよびそのコンパイラ |
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2011096016A1 (ja) | 2011-08-11 |
US20120192168A1 (en) | 2012-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6939132B2 (ja) | アプリケーション・プロファイリング・ジョブ管理システム、プログラム、及び方法 | |
JPWO2011096016A1 (ja) | コンパイラ装置 | |
Chen et al. | Fast identification of custom instructions for extensible processors | |
Liu et al. | OverGen: Improving FPGA usability through domain-specific overlay generation | |
JP4959774B2 (ja) | アプリケーション生成システム、方法及びプログラム | |
CN113031954A (zh) | 代码编译方法、装置、电子设备、存储介质及异构系统 | |
CN111061485A (zh) | 任务处理方法、编译器、调度服务器和介质 | |
JP2007034888A (ja) | 機能ユニットにおいて不必要な電力消費を最小限に抑えるためのデータ経路の割振りのための方法および装置 | |
Corporaal et al. | Code generation for transport triggered architectures | |
CN116048521A (zh) | 一种多阵列粗粒度可重构架构的多层级并行性开发方法 | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
KR102512704B1 (ko) | 매트릭스 연산 방법 및 그 장치 | |
Chandraiah et al. | Code and data structure partitioning for parallel and flexible MPSoC specification using designer-controlled recoding | |
Voss et al. | On predictable reconfigurable system design | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
Melnyk et al. | Automatic generation of ASICs | |
Mohtavipour et al. | GCN-RA: A graph convolutional network-based resource allocator for reconfigurable systems | |
CN114327643B (zh) | 机器指令预处理方法、电子设备及计算机可读存储介质 | |
KR20130099351A (ko) | 디스크 캐쉬 효과를 극대화하는 워크플로우 작업 스케줄링 장치 및 방법 | |
JPWO2011090032A1 (ja) | 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置 | |
Cattaneo et al. | A framework for effective exploitation of partial reconfiguration in dataflow computing | |
EP4227795A1 (en) | A computer-implemented method and a computer-readable medium | |
JP5245727B2 (ja) | 設計支援プログラム、設計支援装置、および設計支援方法 | |
US20160077877A1 (en) | Information processing system and information processing method | |
Carling et al. | Utilizing heterogeneity to allocate ML tasks for increased efficiency |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130709 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20131105 |