JP2007041796A - コード生成装置 - Google Patents

コード生成装置 Download PDF

Info

Publication number
JP2007041796A
JP2007041796A JP2005224431A JP2005224431A JP2007041796A JP 2007041796 A JP2007041796 A JP 2007041796A JP 2005224431 A JP2005224431 A JP 2005224431A JP 2005224431 A JP2005224431 A JP 2005224431A JP 2007041796 A JP2007041796 A JP 2007041796A
Authority
JP
Japan
Prior art keywords
code
loop
processing
unit
list
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
Application number
JP2005224431A
Other languages
English (en)
Inventor
Teruaki Tanaka
輝明 田中
Kanenaga Seto
謙修 瀬戸
Masahiro Fujita
昌宏 藤田
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.)
Mitsubishi Electric Corp
University of Tokyo NUC
Original Assignee
Mitsubishi Electric Corp
University of Tokyo NUC
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 Mitsubishi Electric Corp, University of Tokyo NUC filed Critical Mitsubishi Electric Corp
Priority to JP2005224431A priority Critical patent/JP2007041796A/ja
Publication of JP2007041796A publication Critical patent/JP2007041796A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】 ループ処理に対するユーザの習熟度を問わず、実行性能が高いコード変換を速やかに実現することができるコード生成装置を得ることを目的とする。
【解決手段】 アルゴリズムが記述されているコードリスト1を解析し、そのコードリスト1の中でループ処理を実施している記述部分を識別するループ識別部11と、そのループ識別部11により識別された記述部分のパイプライン化を実現するコード変換処理を実施するコード変換部13とを設け、そのコード変換部13によるコード変換処理後のコードリストからハードウェアに実装可能なHDL言語のコード19を生成する。
【選択図】 図1

Description

この発明は、例えば、C言語のようなプログラミング言語でアルゴリズムが記述されたコードリストからハードウェアに実装可能なHDL言語のコードを生成するコード生成装置に関するものである。
従来のコード生成装置では、例えば、C言語のようなプログラミング言語でアルゴリズムが記述されたコードリストからハードウェアに実装可能なHDL言語のコードを生成する際、ユーザがコードリストの中でループ処理を実施している記述部分を指定するとともに、ユーザがループ・アンロールやループ・パイプラインなどの変換方法を指定すると、それらの変換方法によるループ処理の実行時間を見積もる処理を実施する。
そして、ユーザがその見積もり結果を見て、変換方法を最終的に決定すると、コード生成装置が、その変換方法にしたがってループ処理を実施している記述部分のコード変換を実施する(例えば、特許文献1参照)。
なお、以下の非特許文献1には、ループ変換におけるループ融合(loop fusion)の実施方法が開示されている。
US20030005404 (FIG.3) Antoine Fraboulet, Karen Godary, and Anne Mignotte. Loop Fusion for Memory Space Optimization. In International Symposium on System Synthesis (ISSS 2001), Montre'al, Canada, pages 95-100, October 2001. IEEE Press.
従来のコード生成装置は以上のように構成されているので、ユーザがループ処理を実施している記述部分とループ処理の変換方法を指定すれば、そのループ処理を実施している記述部分のコード変換を実施することができるが、ユーザがループ処理に対する習熟度が低い場合、実行性能が高いコード変換を実現することができず、また、多くの時間を必要とする課題があった。
また、ループ融合のように、ループ間に跨る変換処理は、ユーザが処理の依存関係を満足させながらコードを修正しなければならない。そのため、多くの時間を要するとともに、不具合を挿入してしまう可能性が高まる課題もあった。
この発明は上記のような課題を解決するためになされたもので、ループ処理に対するユーザの習熟度を問わず、実行性能が高いコード変換を速やかに実現することができるコード生成装置を得ることを目的とする。
この発明に係るコード生成装置は、アルゴリズムが記述されているコードリストを解析し、そのコードリストの中でループ処理を実施している記述部分を識別するループ処理識別手段と、そのループ処理識別手段により識別された記述部分のパイプライン化を実現するコード変換処理を実施するコード変換手段とを設け、そのコード変換手段によるコード変換処理後のコードリストからハードウェアに実装可能な言語のコードを生成するようにしたものである。
この発明によれば、アルゴリズムが記述されているコードリストを解析し、そのコードリストの中でループ処理を実施している記述部分を識別するループ処理識別手段と、そのループ処理識別手段により識別された記述部分のパイプライン化を実現するコード変換処理を実施するコード変換手段とを設け、そのコード変換手段によるコード変換処理後のコードリストからハードウェアに実装可能な言語のコードを生成するように構成したので、ループ処理に対するユーザの習熟度を問わず、実行性能が高いコード変換を速やかに実現することができる効果がある。
実施の形態1.
図1はこの発明の実施の形態1によるコード生成装置を示す構成図であり、図において、コードリスト1はC言語のようなプログラミング言語でアルゴリズムが記述されているリストである。
入出力仕様2はループ処理におけるデータの入出力関係を示す仕様書である。
要求仕様3はハードウェアの回路面積の制約や、ハードウェアの処理時間の制約などが記述されているハードウェアの仕様書である。
ループ識別部11はコードリスト1を入力すると、そのコードリスト1を解析して、そのコードリスト1の中でループ処理を実施している記述部分を識別する処理を実施する。また、ループ識別部11はループ処理を実施している記述部分が複数存在する場合、それらのループ処理間のデータ入出力の依存関係を把握し、データ入出力の依存関係がある記述部分をグループ化する処理を実施する。なお、ループ識別部11はループ処理識別手段を構成している。
ループ選択部12はループ識別部11から1以上のグループを受けると、いずれかのグループを選択して、そのグループをコード変換部13に出力する処理を実施する。
コード変換部13は第1の変換処理部14と第2の変換処理部15から構成されており、ループ選択部12から出力されたグループに含まれているループ処理の記述部分のパイプライン化を実現するコード変換処理を実施する。なお、コード変換部13はコード変換手段を構成している。
コード変換部13の第1の変換処理部14はループ選択部12からデータ入出力の依存関係がある複数のループ処理の記述部分を含むグループを受けると起動し、各々の記述部分に対してコード変換処理を実施して、それらの変換結果を接続する処理を実施する。
第1の変換処理部14のループ・パイプライン部14aは入出力仕様2を満足するように、グループに含まれている各々の記述部分に対してコード変換処理を実施する
第1の変換処理部14のループ間バッファ生成・接続部14bはループ・パイプライン部14aによるコード変換処理後のループ処理を相互に接続する処理を実施する。
コード変換部13の第2の変換処理部15はループ選択部12からデータ入出力の依存関係がないループ処理の記述部分を受けると起動し、それらの記述部分を融合して、融合後の記述部分に対してコード変換処理を実施し、それらの変換結果を接続する処理を実施する。
第2の変換処理部15のループ融合部15aはデータ入出力の依存関係がない複数のループ処理の記述部分を融合する処理を実施する。
第2の変換処理部15のループ・パイプライン部15bは入出力仕様2を満足するように、ループ融合部15aによる融合後の記述部分に対してコード変換処理を実施する。
第2の変換処理部15のループ間バッファ生成・接続部15cは融合後の記述部分が複数存在する場合、ループ・パイプライン部15bによるコード変換処理後のループ処理を相互に接続する処理を実施する。
コードリスト選択部16はコード変換部13からコード変換処理後のコードリストが複数出力された場合、ハードウェアの要求仕様3に応じて最適のコードリストを選択し、そのコードリストをループ処理確定部17に出力する処理を実施する。なお、コードリスト選択部16はコードリスト選択手段を構成している。
ループ処理確定部17はコードリスト選択部16により選択されたコードリストを受けると、そのコードリストをコード生成部18に出力する処理などを実施する。
コード生成部18はループ処理確定部17から出力されたコード変換処理後のコードリストからハードウェアに実装可能なHDL言語のコード19を生成する処理を実施する。
なお、コード生成部18はコード生成手段を構成している。
次に動作について説明する。
コード生成装置には、例えば、C言語のようなプログラミング言語でアルゴリズムが記述されているコードリスト1が入力される。なお、コードリスト1には、ループ処理を実施する記述部分が含まれている。
ここでは、説明の便宜上、C言語のようなプログラミング言語でアルゴリズムが記述されているコードリスト1が入力されるものについて示しているが、これに限るものではなく、他の言語でアルゴリズムが記述されているコードリスト1が入力されるものであってもよい。
図2はコードリスト1の一例を示す説明図である。
図2において、左辺にある“1”から“7”までの数字は、コードの説明を容易にするために便宜上付けている行番号であり、実際のコードリスト1には記述されていない。
図2の例では、行番号3及び行番号4にループ処理(行番号3には、このループ処理の名称「LOOP L1」がコメントとして付記されている)が記述されており、また、行番号5及び行番号6にもループ処理(行番号5には、このループ処理の名称「LOOP L2」がコメントとして付記されている)が記述されている。
「LOOP L1」のループ処理では、インデックス変数“i”を使用して、ループ回数が規定されており、そのループ処理中で使用されるデータは、a[],b[]の配列変数で表されている。
同様に、「LOOP L2」のループ処理でも、インデックス変数“i”を使用して、ループ回数が規定されており、そのループ処理中で使用されるデータは、b[],c[]の配列変数で表されている。
また、コード生成装置には、ループ処理におけるデータの入出力関係を示す入出力仕様2が入力される。
即ち、入出力仕様2は、コード生成装置がコードリスト1からハードウェアに実装可能な最終的なコードであるHDLコード19を生成するに際して、ハードウェアとして実行されるコードが、外部のデータを入出力する際に規定される通信仕様を表しているものである。
このような通信仕様としては、生成するハードウェアが接続されるバスの通信仕様である場合がある。
バスの仕様としては、例えば、非特許文献 “ARMプロセッサ”(CQ出版社)における“8.5 AMBA(Advanced Microcontroller Bus Architecture)”のようなものがある。
ここでは、説明の便宜上、下記に示すようなバスの通信仕様が、入出力仕様2として入力されるものとする。
バスの通信仕様
・バス・クロック → バスの動作周波数
・バス転送サイズ → 転送するデータのデータ幅
・バス・トランザクション → データの転送モード(バーストモードの可否)
なお、バーストモード(burst mode)は、データを転送する際、最初の一回目だけアドレスを指定し、二回目以降のデータ転送時にはアドレスを指定しないで、データを連続的に送信するモードのことである。
バーストモードは、アドレス指定を省略する分だけ、データの転送速度が速くなる特徴を有しており、例えば、配列データのように、アドレス順に複数のデータが並んでいるような場合には、バーストモードを使用すれば、非常に高速なデータ転送を実施することが可能になる。
一般的なバスにおいては、バス転送サイズがバイト、半ワード又はワードであり、ワードにおける単発のリードアクセスやライトアクセスは通常可能な仕様であるため、ここでは、パイプライン合成において重要となる情報「どのバス転送サイズ(データ幅)で、バースト転送が可能か」が仕様として提供されているとする。
したがって、この実施の形態1では、下記に示すような入出力仕様2が入力されるものとする。
入出力仕様2の一例
CLOCK_FREQ: 50 MHz / バス・クロック /
SIZE: 32 BIT / バス転送サイズ /
TRANSACTION: BURST / バス・トランザクション /
また、コード生成装置には、ハードウェアの回路面積の制約や、ハードウェアの処理時間の制約などが記述されている要求仕様3が入力される。
要求仕様3に記述されている回路面積の制約としては、回路を実現するターゲット・デバイスが、例えば、ゲートアレーのようなASIC(Application Specific Integrated Circuit)で実現する場合には“最大ゲート数”などの制約が相当し、ターゲット・デバイスがFPGAである場合には“最大LE(Logic Element)数”などの制約が相当する。
また、要求仕様3に記述されている処理時間の制約としては、ハードウェアが“処理を開始してから、処理を終了するまでの時間が、何ms以内でなければならない”などの時間的な制約が相当する。
したがって、この実施の形態1では、下記に示すような要求仕様3が入力されるものとする。
要求仕様3の一例
MAX_AREA: 10000 LE / 面積制約 /
MAX_PROC_TIME: 33 MS / 処理時間 /
PRIORITY: AREA / 面積重視か時間重視か /
ERROR: FINISH / エラー時 /
なお、上記の「PRIORITY」は、回路面積と処理時間の両方の制約を満足する変換処理後のコードリストが複数存在する場合、どちらの制約を優先的に判断して、どちらのコードリストを選択するかを決定するための指標である。
例えば、「PRIORITY」で「AREA」が指定されていれば、面積重視であるため、より回路面積が小さくなるコードリストを選択する。
一方、「PRIORITY」で「PROC_TIME」が指定されていれば、処理時間重視であるため、より処理時間が短くなるコードリストを選択する。
上記の「ERROR」は、要求仕様を満足するコードリストが存在しない場合の処理内容を記述している。
例えば、「ERROR」で「FINISH」が指定されている場合、要求仕様を満足するコードリストが存在しなければ、コードの生成処理を終了する。
また、「ERROR」で「SELECT」が指定されている場合、要求仕様を満足するコードリストが存在しなければ、最も要求仕様に近いコードリストを選択する。
コード生成装置のループ識別部11は、図2に示すようなコードリスト1を入力すると、そのコードリスト1を解析して、そのコードリスト1の中でループ処理を実施している記述部分を識別する処理を実施する。
図2の例では、「LOOP L1」のループ処理が記述されている行番号3,4が識別されるとともに、「LOOP L2」のループ処理が記述されている行番号5,6が識別される。
なお、ループ処理を実施している記述部分の識別処理は、例えば、for()などのループ処理を実施する関数を検出することにより行う。
また、ループ識別部11は、ループ処理を実施している記述部分が複数存在する場合、それらのループ処理間のデータ入出力の依存関係を把握し、データ入出力の依存関係がある記述部分をグループ化する処理を実施する。
即ち、どのループ処理にも依存関係が存在しなければ、各々のループ処理を並列に独立して実行することが可能であり、各々のループ処理を独立にパイプライン化することが可能であるため、複数のループ処理間のデータ入出力の依存関係を把握する。
そして、コードリスト1に含まれている1以上のループ処理の中で、データ入出力を依存しているループ処理同士を同一のグループの分類し、データ入出力の依存関係がないループ処理は異なるグループに分類する。
図2の例では、「LOOP L1」のループ処理(以下、ループ処理L1という)と「LOOP L2」のループ処理(以下、ループ処理L2という)が存在し、ループ処理L1におけるb[i]が、ループ処理L2の入力であるため、ループ処理L1とループ処理L2は、データ入出力の依存関係がある。
したがって、ループ処理L1とループ処理L2は、同一のグループに分類される。
図2の例では、コードリスト1にはループ処理L1とループ処理L2だけが含まれており、他のループ処理が含まれていないので、生成されるグループの個数は1個である。
ループ選択部12は、ループ識別部11から1以上のグループを受けると、いずれかのグループを選択して、そのグループをコード変換部13に出力する処理を実施する。
図2の例では、ループ識別部11からループ処理L1とループ処理L2を含むグループだけが出力されるので、そのグループをコード変換部13の第1の変換処理部14とコード変換部13の第2の変換処理部15とに出力する。
ループ選択部12では、ループ識別部11から受け取った複数のグループに対して、各々コード変換部13以降の処理を実施し、HDLコード19を入手する。
最初に第1の変換処理部14について説明を行う。第1の変換処理部14のループ・パイプライン部14aは、ループ選択部12からループ処理L1とループ処理L2を含むグループを受けると、入出力仕様2を満足する条件の下で、ループ処理L1のパイプライン化を実現するコード変換処理を実施する。同様に、
ループ処理L2のパイプライン化を実現するコード変換処理を実施する。
ここで、ループ処理のパイプライン化は、ループ処理における複数のイタレーションをオーバーラップさせながら、同時に実行することにより、処理の性能を高める(実行時間を短縮する)技術である。
例えば、図3に示すようなループ処理をパイプライン化すると、このループ処理は、図4に示すような実行形態になる。
図4において、開始間隔は、あるイタレーションiの実行を開始してから、次のイタレーションi+1の実行を開始するまでのサイクル数である。
また、レイテンシは、一つのイタレーションを開始してから終了するまでのサイクル数である。なお、図3においてA(),B(),C()は各々同じ開始間隔を持つ関数であり、それらがfor文の中で、iを引数としてコール(呼び出される)事を表している。
例えば、ループ処理をパイプライン化したときの全実行サイクルがPc、開始間隔がI、ループ実行回数がN、レイテンシがLである場合、全実行サイクルPcは、下記の式(1)に示すようになる。
Pc=I×(N−1)+L (1)
一方、ループ処理がパイプライン化されない場合の全実行サイクルNcは、一般的に、下記の式(2)に示すようになる。
Nc=N×L (2)
したがって、ループ処理をパイプライン化することにより、処理サイクル数の減少割合Pc/Ncは、下記の式(3)に示すようになる。
Pc/Nc=I/L×(1−1/N)+1/N (3)
式(3)から明らかなように、ループ回数Nが増えれば増えるほど、減少割合Pc/Ncが大きく減少するため、ループ処理の実現ではパイプライン化がなされることが多い。
なお、ループ処理のパイプライン化に関しては、例えば、特開平8−44773号公報や、特開2004−326463号公報などに詳述されている。
ループ・パイプライン部14aがループ処理L1,L2のパイプライン化を実現するに際して、ループ処理L1,L2が必要とする入力データと、ループ処理L1,L2が生成する出力データとが、どのような時系列で取り込まれ(READ)、もしくは、どのような時系列で書き出される(WRITE)かが重要となる。
例えば、図2の関数filter()の場合、入力データが配列変数a[]になり、出力データが配列変数c[]になるが、この配列変数a[]とc[]のREAD/WRITEアクセスに対して、どのような入出力仕様が与えられるかが重要になる。
何ら入出力仕様が与えられなければ、ターゲット・デバイス上で実現可能な回路の動作周波数や、パイプラインの開始間隔や、レイテンシの中で、任意のパイプラン動作としての実現を選択することが可能であるが、一般的には、少なくとも、入力データか、出力データが入出力仕様2として与えられる。
例えば、入出力仕様2として、「50MHz + 32bit + BURST」がループ・パイプライン部14aに入力された場合、ループ・パイプライン部14aは、ループ処理L1の入力データである配列変数a[]と、ループ処理L2の出力データである配列変数c[]が入出力仕様2を満足するように、ループ処理L1,L2に対してコード変換処理を実施する。
即ち、配列変数a[]が「50MHz + 32bit + BURST」の入力仕様を満足し、配列変数c[]が「50MHz + 32bit + BURST」の出力仕様を満足するように、ループ処理L1,L2に対してコード変換処理を実施する。ここで
、入力仕様を満足するという事は、50MHz毎に配列a[i]の値がインデックスiの順番通り、順次filter()に取り込まれる、という事を表しており、出力仕様を満足するという事は50MHz毎に配列c[i]の値がインデックスiの順番通り、順次filter()から出力されるという事を表している。
ただし、ループ処理L1の出力であり、かつ、ループ処理L2の入力データである配列変数b[]には、入出力仕様が規定されていない。そのため、ループ処理L1における配列変数b[]に対する書き込み(WRITE)仕様と、ループ処理L2における配列変数b[]からの読み込み(READ)仕様は、配列変数a[],c[]に対する入出力仕様を満足する形態で適当に規定するものとする。
図2の例では、ループ処理L1のパイプライン化を実現するに際して、a[0],a[1],a[2],・・・という入力シーケンスに対して、出力データであるb[]は、次のように、順次確定することができる。
a[0]: 確定出来るb[]なし
a[1]: 確定出来るb[]なし
a[2]: b[1]
a[3]: b[2]
a[4]: b[3]
そのため、ループ処理L1における出力データであるb[]に対しては、a[]の取り込みタイミング、即ち、a[]の入出力仕様である「50MHz + 32bit + BURST」と同じタイミングで、b[]がb[1]からb[9998]まで順次生成される。
また、ループ処理L2のパイプライン化を実現するに際して、c[100],c[101],・・・の出力値を順次確定するために、ループ処理L2への入力データであるb[]が、下記のように取り込めなければ、出力仕様を満足することができるc[]の出力シーケンスを生成することができない。
c[100] : b[0],b[100],b[200]
c[101] : b[1],b[101],b[201]
c[102] : b[2],b[102],b[202]

c[9898]: b[9798],b[9898],b[9998]
そのため、出力サイクル(50MHz)毎に、b[i−100],b[i],b[i+100]がアクセスできる事を前提に、ループ処理L2のパイプライン化が行われる。
第1の変換処理部14のループ間バッファ生成・接続部14bは、上記のようにして、ループ・パイプライン部14aがループ処理L1,L2のパイプライン化を行うと、パイプライン化されたループ処理L1とループ処理L2を接続するために、b[]の接続処理を実施する。
即ち、ループ間バッファ生成・接続部14bは、ループ処理L1,L2の間で必要となるデータのハンドリングを行うための信号線の接続や、データ一時保持用のバッファの生成や、ループ処理L1,L2の間の開始・終了制御信号の生成を行う。
図2の例では、ループ処理L1のパイプライン出力b[]を200個分(b[0]〜b[199])バッファリングし、サイクル毎に、ループ処理L2のパイプライン入力に対して、(b[i−100],b[i],b[i+100])を出力するとともに、b[]が200個分のバッファリングが終わると、ループ処理L2のパイプラインの動作開始信号を生成する接続回路を生成する。
これにより、第1の変換処理部14から、ループ処理L1,L2のパイプライン実行形態を内包しているコードリストが生成される。
第2の変換処理部15は、ループ選択部12から複数のループ処理を含むグループを受け取り、グループ内の各ループ処理に対し、1つのループ処理に纏める処理である。例えば、図5に示すような3つのループ処理を1つのループ処理に纏めると、図3のようなループ処理になる。
このように、複数のループ処理の融合を行うことにより、処理の並列度が高まり、より短い時間で処理を完了することが可能になる。ループ融合に関しては、上記の非特許文献1に詳述されている。
ただし、コードリスト1に記述されているコードからループ融合を行うには、それらのコードの変換前後で、ループ処理間における全ての依存関係(例えば、フロー依存、逆依存、出力依存)が保存される必要があるため、ループ融合部15aでは、最初に依存関係が保存されるかを判断し、保存されるのであればループ融合を行うようにする。
その際、ループアライメント、ループピーリングやスカラーリプレースメントのようなループ融合に必要となる各種前処理も実施する。これら前処理に関しても、上記の非特許文献1に詳述されている。
例えば、図2のコードリスト1に対して各種の前処理を実施して、ループ融合を実施すると、図6のようになる。
ただし、依存関係の問題からループ融合が出来なかった場合には、ループ融合が出来るループのみを選択し、ループ融合を行う。
第2の変換処理部15のループ・パイプライン部15bは、ループ融合部15aが複数のループ処理の記述部分を融合すると、入出力仕様2を満足するように、ループ融合部15aによる融合後の記述部分に対してコード変換処理を実施する。
ループ・パイプライン部15bにおけるコード変換処理は、第1の変換処理部14のループ・パイプライン部14aにおけるコード変換処理と同様であるため、詳細な説明を省略する。
第2の変換処理部15のループ間バッファ生成・接続部15cは、融合後の記述部分が複数存在する場合、ループ・パイプライン部15bによるコード変換処理後のループ処理を相互に接続する処理を実施する。
ループ間バッファ生成・接続部15cにおける接続処理は、第1の変換処理部14のループ間バッファ生成・接続部14bにおける接続処理と同様であるため、詳細な説明を省略する。
コードリスト選択部16は、第1の変換処理部14からコード変換処理後のコードリストが出力され、第2の変換処理部15からコード変換処理後のコードリストが出力されると、ハードウェアの要求仕様3に応じて最適のコードリストを選択し、そのコードリストをループ処理確定部17に出力する処理を実施する。
即ち、コードリスト選択部16は、双方のコードリストが要求仕様3に記述されている回路面積の制約と、処理時間の制約とを満足しているか否かを判断し、例えば、第1の変換処理部14から出力されたコードリストが両方の制約を満足しているが、第2の変換処理部15から出力されたコードリストがいずれかの制約を満足していなければ、第1の変換処理部14から出力されたコードリストを選択して、そのコードリストをループ処理確定部17に出力する処理を実施する。
逆に、第2の変換処理部15から出力されたコードリストが両方の制約を満足しているが、第1の変換処理部14から出力されたコードリストがいずれかの制約を満足していなければ、第2の変換処理部15から出力されたコードリストを選択して、そのコードリストをループ処理確定部17に出力する処理を実施する。
また、両方のコードリストが両方の制約を満足している場合、要求仕様3に記述されている優先度(AREA or PROC_TIME) を基準にして、より適切なコードリストを選択する。
例えば、回路面積の制約の点では、第1の変換処理部14から出力されたコードリストが第2の変換処理部15から出力されたコードリストより優れているが、処理時間の制約の点では、第2の変換処理部15から出力されたコードリストが第1の変換処理部14から出力されたコードリストより優れている場合において、「PRIORITY」で「AREA」が指定されていれば、面積重視であるため、第1の変換処理部14から出力されたコードリストを選択する。
一方、「PRIORITY」で「PROC_TIME」が指定されていれば、処理時間重視であるため、第2の変換処理部15から出力されたコードリストを選択する。
また、両方のコードリストが共に、制約を満足していない場合には(両方の制約を満足していない場合の他、片方の制約を満足していない場合も含む)、「ERROR」で「SELECT」が指定されていれば、上記のように、要求仕様3に記述されている優先度(AREA or PROC_TIME) を基準にして、より適切なコードリストを選択する。
「ERROR」で「FINISH」が指定されていれば、いずれのコードリストも選択せずに、適切なコードリストが存在しない旨をループ処理確定部17に通知する。
ループ処理確定部17は、コードリスト選択部16により選択されたコードリストを受けると、そのコードリストをコード生成部18に出力する。
ただし、コードリスト選択部16から適切なコードリストが存在しない旨の通知を受けると、一連のコード生成処理を終了する。
コード生成部18は、ループ処理確定部17からコード変換処理後のコードリストを受けると、そのコードリストからハードウェアに実装可能なHDL言語のコード19を生成する処理を実施する。
C言語などで記述されたコードリストからHDL言語のコード19を生成する処理自体は、公知の技術であるため詳細な説明は省略する。
以上で明らかなように、この実施の形態1によれば、アルゴリズムが記述されているコードリスト1を解析し、そのコードリスト1の中でループ処理を実施している記述部分を識別するループ識別部11と、そのループ識別部11により識別された記述部分のパイプライン化を実現するコード変換処理を実施するコード変換部13とを設け、そのコード変換部13によるコード変換処理後のコードリストからハードウェアに実装可能なHDC言語のコード19を生成するように構成したので、ループ処理に対するユーザの習熟度を問わず、実行性能が高いコード変換を速やかに実現することができる効果を奏する。
また、この実施の形態1によれば、データ入出力の依存関係がない複数のループ処理の記述部分を融合するように構成したので、更なる処理の高速化を図ることができる効果を奏する。
また、この実施の形態1によれば、第1の変換処理部14からコード変換処理後のコードリストが出力され、第2の変換処理部15からコード変換処理後のコードリストが出力されると、ハードウェアの要求仕様3に応じて最適のコードリストを選択するように構成したので、実行性能の最適化を図ることができる効果を奏する。
さらに、この実施の形態1によれば、ハードウェアの要求仕様が回路面積の制約を示している場合、回路面積が最小になるコードリストを選択するように構成したので、回路面積を重視したコード変換を実現することができる効果を奏する。
また、この実施の形態1によれば、ハードウェアの要求仕様が処理時間の制約を示している場合、処理時間が最小になるコードリストを選択するように構成したので、処理時間を重視したコード変換を実現することができる効果を奏する。
この発明の実施の形態1によるコード生成装置を示す構成図である。 C言語のようなプログラミング言語でアルゴリズムが記述されているコードリストの一例を示す説明図である。 ループ処理のパイプライン化を説明するためのC言語記述のコードリストの一例を示す説明図である。 パイプライン化されたループ処理の実行動作を示す説明図である。 ループ処理の融合を説明するためのコードリストの一例を示す説明図である。 ループ処理の融合を説明するためのコードリストの一例を示す説明図である。
符号の説明
1 コードリスト、2 入出力仕様、3 要求仕様、11 ループ識別部(ループ処理識別手段)、12 ループ選択部、13 コード変換部(コード変換手段)、14 第1の変換処理部、14a ループ・パイプライン部、14b ループ間バッファ生成・接続部、15 第2の変換処理部、15a ループ融合部、15b ループ・パイプライン部、15c ループ間バッファ生成・接続部、16 コードリスト選択部(コードリスト選択手段)、17 ループ処理確定部、18 コード生成部(コード生成手段)。

Claims (7)

  1. アルゴリズムが記述されているコードリストを解析し、そのコードリストの中でループ処理を実施している記述部分を識別するループ処理識別手段と、上記ループ処理識別手段により識別された記述部分のパイプライン化を実現するコード変換処理を実施するコード変換手段と、上記コード変換手段によるコード変換処理後のコードリストからハードウェアに実装可能な言語のコードを生成するコード生成手段とを備えたコード生成装置。
  2. コード変換手段は、ループ処理識別手段によりループ処理を実施している記述部分が複数識別された場合、各々の記述部分に対してコード変換処理を実施することを特徴とする請求項1記載のコード生成装置。
  3. コード変換手段は、ループ処理識別手段によりループ処理を実施している記述部分が複数識別された場合、複数の記述部分を融合し、融合後の記述部分に対してコード変換処理を実施することを特徴とする請求項1記載のコード生成装置。
  4. コード変換手段は、ループ処理におけるデータの入出力関係を示す入出力仕様を満足するようにコード変換処理を実施することを特徴とする請求項1から請求項3のうちのいずれか1項記載のコード生成装置。
  5. コード変換手段から複数のコードリストが出力された場合、ハードウェアの要求仕様に応じて最適のコードリストを選択し、そのコードリストをコード生成手段に出力するコードリスト選択手段を設けたことを特徴とする請求項1から請求項4のうちのいずれか1項記載のコード生成装置。
  6. コードリスト選択手段は、ハードウェアの要求仕様が回路面積の制約を示している場合、回路面積が最小になるコードリストを選択することを特徴とする請求項5記載のコード生成装置。
  7. コードリスト選択手段は、ハードウェアの要求仕様が処理時間の制約を示している場合、処理時間が最小になるコードリストを選択することを特徴とする請求項5記載のコード生成装置。
JP2005224431A 2005-08-02 2005-08-02 コード生成装置 Pending JP2007041796A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005224431A JP2007041796A (ja) 2005-08-02 2005-08-02 コード生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005224431A JP2007041796A (ja) 2005-08-02 2005-08-02 コード生成装置

Publications (1)

Publication Number Publication Date
JP2007041796A true JP2007041796A (ja) 2007-02-15

Family

ID=37799721

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005224431A Pending JP2007041796A (ja) 2005-08-02 2005-08-02 コード生成装置

Country Status (1)

Country Link
JP (1) JP2007041796A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018029377A (ja) * 2013-03-01 2018-02-22 アクシオンリサーチ株式会社 データ処理装置およびその制御方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030005404A1 (en) * 2001-04-20 2003-01-02 Mentor Graphics Graphical loop profile analysis
JP2003223473A (ja) * 1996-09-12 2003-08-08 Sharp Corp 集積回路の設計方法及びそれによって設計された集積回路
JP2004062909A (ja) * 2002-07-30 2004-02-26 Hewlett-Packard Development Co Lp 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法
WO2004042568A1 (en) * 2002-10-31 2004-05-21 Src Computers, Inc. System and method for conveting control flow graph representations to control-dataflow graph representations
JP2004326463A (ja) * 2003-04-24 2004-11-18 Sharp Corp 動作合成システム、動作合成方法、制御プログラム、可読記録媒体、論理回路の製造方法および論理回路

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003223473A (ja) * 1996-09-12 2003-08-08 Sharp Corp 集積回路の設計方法及びそれによって設計された集積回路
US20030005404A1 (en) * 2001-04-20 2003-01-02 Mentor Graphics Graphical loop profile analysis
JP2004062909A (ja) * 2002-07-30 2004-02-26 Hewlett-Packard Development Co Lp 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法
WO2004042568A1 (en) * 2002-10-31 2004-05-21 Src Computers, Inc. System and method for conveting control flow graph representations to control-dataflow graph representations
JP2004326463A (ja) * 2003-04-24 2004-11-18 Sharp Corp 動作合成システム、動作合成方法、制御プログラム、可読記録媒体、論理回路の製造方法および論理回路

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018029377A (ja) * 2013-03-01 2018-02-22 アクシオンリサーチ株式会社 データ処理装置およびその制御方法

Similar Documents

Publication Publication Date Title
TWI515668B (zh) 用於一狀態機中偵測之方法及系統
US5710902A (en) Instruction dependency chain indentifier
TWI489779B (zh) 狀態機晶格中之布林邏輯
TWI569206B (zh) 用於狀態機引擎之結果產生
US9329866B2 (en) Methods and apparatus for adapting pipeline stage latency based on instruction type
JP2010532063A (ja) 条件命令を無条件命令および選択命令へと拡張する方法およびシステム
JP5209933B2 (ja) データ処理装置
US8677102B2 (en) Instruction fusion calculation device and method for instruction fusion calculation
TW201333838A (zh) 用於狀態機中資料分析之系統與方法
JPH1165844A (ja) パイプラインバイパス機能を有するデータ処理装置
US5253349A (en) Decreasing processing time for type 1 dyadic instructions
JP2002163127A (ja) トレース制御回路
KR100371686B1 (ko) 제한실행분기예측방법
US6587940B1 (en) Local stall/hazard detect in superscalar, pipelined microprocessor to avoid re-read of register file
US20070028077A1 (en) Pipeline processor, and method for automatically designing a pipeline processor
JP2007041796A (ja) コード生成装置
JPH04215129A (ja) 連続指令実行方法及び装置
JP2009507292A (ja) 分離したシリアルモジュールを備えるプロセッサアレイ
US20060248320A1 (en) Data processing apparatus and method for executing a sequence of instructions including a multiple iteration instruction
US6449763B1 (en) High-level synthesis apparatus, high level synthesis method, and recording medium carrying a program for implementing the same
CN113779755A (zh) 一种硅基多光谱集成电路芯片的设计方法和集成电路芯片
JP2001051845A (ja) アウトオブオーダー実行方式
Rohde et al. Improving HLS generated accelerators through relaxed memory access scheduling
JPH09305401A (ja) コンピュータ及びコンパイラ
KR101118593B1 (ko) Vliw 명령어 처리 장치 및 방법

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20071004

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080424

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080821

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100419

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110308

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110506

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110524