JP5444784B2 - コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法 - Google Patents

コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法 Download PDF

Info

Publication number
JP5444784B2
JP5444784B2 JP2009080132A JP2009080132A JP5444784B2 JP 5444784 B2 JP5444784 B2 JP 5444784B2 JP 2009080132 A JP2009080132 A JP 2009080132A JP 2009080132 A JP2009080132 A JP 2009080132A JP 5444784 B2 JP5444784 B2 JP 5444784B2
Authority
JP
Japan
Prior art keywords
loop
instruction
data
input
arrival time
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.)
Expired - Fee Related
Application number
JP2009080132A
Other languages
English (en)
Other versions
JP2010231635A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009080132A priority Critical patent/JP5444784B2/ja
Publication of JP2010231635A publication Critical patent/JP2010231635A/ja
Application granted granted Critical
Publication of JP5444784B2 publication Critical patent/JP5444784B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

この発明は、多重ループ処理を含む命令の正確な動作を保証したコンテキストを作成するコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法に関する。
従来、C言語などの高級言語によって作成させたソースプログラムを対象装置によって読み取り可能なオブジェクトコードに変換するコンパイル技術については、様々な機能が提供されている。この変換処理をおこなうソフトウェアもしくはソフトウェアが搭載された装置は、一般的にコンパイラと呼ばれる。そして、コンパイラによる変換処理(コンパイル)は、ソースプログラムの処理速度に大きく影響する。特に、コンパイラによる命令の実行タイミングを設定するスケジューリング処理は、ソースプログラムの処理速度を向上させるための重要な要素となっており、効率的なスケジューリングを実現するための様々な技術が提供されている(たとえば、下記特許文献1参照。)。
また、近年では、動作中に回路内部の演算器命令や演算器間の接続を変更できるという特徴を備えたダイナミックリコンフィギャラブル回路(以下、「動的再構成回路」という)が登場し、利用が広がっている。具体的には、動的再構成回路の内部には複数のPE(Processing Element(プロセッシングエレメント))が配置されている。そして、動的再構成回路を動作させる場合、コンパイラは、ソースプログラムによって提供された各段階の構成内容に応じて、コンテキストと呼ばれる各PEの動作と、PE間の接続との設定をあらわす情報を作成する。動的再構成回路において、回路を再構成する際には、このコンテキストに応じてPEの演算処理内容や接続を変更させる。
また、動的再構成回路では、上述したコンテキストに基づいて回路内部に配置されているPEの処理内容や接続先を順次変更する。すなわち、異なる処理をおこなう場合であっても、時間軸方向に分割して実行させることによって、PEの共用が可能となる。したがって、動的再構成回路全体のハードウェア規模を削減することができるという利点を備えている。このような、コンテキストに基づいた動的再構成回路では、各コンテキストを実行させる際の開始、終了の制御には、カウンタ回路を用いることが一般的である。具体的には、データ駆動型の再構成可能なカウンタが利用されている(たとえば、下記特許文献2参照。)。
特開平6−295246号公報 特表2003−518666号公報
しかしながら、上記特許文献1に挙げたような従来のコンパイラの場合、上記特許文献2をはじめとする動的再構成回路におけるループ命令に対応した適切なスケジューリングを実現できない場合がある。従来のコンパイラでは、複数の入力データを受け付けて処理を実行する命令がある場合、この命令を実行するPEに各入力データが到達するタイミングにズレがあれば、最後に到達する入力データにあわせて、他の入力データの入力線に遅延素子を追加することによって入力データの到達タイミングを調整していた。
動的再構成回路では、カウンタ回路が搭載されることによって、ループ命令の中に他のループ命令が入れ子状に配置された多重ループを実行させることができる。コンパイラによるスケジューリングの際に、上述の多重ループを実行させる命令についても、個々の命令ごとにデータ入力のタイミングを調整した場合、制御依存の関係にある他のループ命令への入力データに遅延が生じてしまう。結果として、ソースプログラムの設計意図通りにループ命令が実行されず、動的再構成回路が正しく動作しない場合があるという問題があった。
本開示技術は、上述した従来技術による問題点を解消するため、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成するコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、本開示技術は、ソースプログラムから動的再構成回路の回路構成を設定するためのコンテキストを作成するコンピュータにおいて、前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定する処理と、前記ソースプログラムに含まれているループ命令のうち、制御依存関係があると特定されたループ命令群を抽出する処理と、前記制御依存関係に基づいて、抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する処理と、算出する処理による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する処理と、選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する処理と、前記ループ命令群の前段に差分を算出する処理によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成する処理と、を含むことを特徴とする。
本開示技術によれば、制御依存関係のある命令同士が命令群として抽出される。そして、これら命令群単位で入力されるデータの到達時間を算出し、命令群の前段に算出した遅延時間を解消するための遅延素子を配置する。したがって、命令群を構成する命令同士の制御依存を生じるデータが入力されるタイミングはソースプログラムの設計意図が保持され、なおかつ、データの入力タイミングが調整されたコンテキストが作成される。
本コンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法によれば、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成することができるという効果を奏する。
本実施の形態にかかるコンテキスト作成処理の概要を示す説明図である。 動的再構成回路の一例を示す回路図である。 カウンタ回路の構成を示す回路図である。 ループ制御部の構成を示すブロック図である。 ループ制御部による多重ループ処理を示す説明図である。 多重ループ処理による入出力値を示すタイミングチャートである。 ループパラメータの書き換え処理の一例を示す説明図である。 プログラムの中間表現の一例を示す説明図である。 制御依存グラフの一例を示す説明図である。 ループ命令を含んだソースプログラムの一例を示す説明図である。 従来のPEの配置例を示す説明図である。 3重ループの入出力値を示すタイミングチャートである。 コンパイラのハードウェア構成を示すブロック図である。 コンパイラの機能的構成を示すブロック図である。 本実施の形態にかかるコンテキスト作成処理によるPEの配置例を示す説明図である。 コンパイラによるコンパイルの手順を示すフローチャートである。 PE割り当て処理の手順を示すフローチャートである。 PE割り当て処理に用いる各種データのデータ構造を示す説明図である。
以下に添付図面を参照して、この発明にかかるコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法の好適な実施の形態を詳細に説明する。
(コンテキスト作成処理の概要)
まず、本実施の形態にかかるコンテキスト作成処理の概要について説明する。図1は、本実施の形態にかかるコンテキスト作成処理の概要を示す説明図である。図1のように、本実施の形態にかかるコンテキスト作成処理は、コンパイラ100によって、ソースプログラム101から、動的再構成回路110を実行させるためのコンフィグレーションデータ102のコンテキストを作成する。
このとき、コンパイラ100では、動的再構成回路110に用意されているPEの情報を取得してソースプログラム101内の命令をPEに割り当てる。このとき、コンパイラ100では、命令の実行タイミングを調整するために、PEの間に遅延素子を挿入する。このとき、コンパイラ100は、ソースプログラム101内の命令のうち制御依存の関係にある命令同士のまとまりを抽出する。図1の場合、破線で囲まれたループ命令群が制御依存のある命令群として抽出されたものとする。
すると、コンパイラ100は、抽出された命令群同士のタイミングを保持するため、命令群内の各ループ命令へ入力されるデータの到達時間を算出し、到達時間が最も遅いデータを選択する。そして、選択されたデータの入力のタイミングにあわせて、各命令の実行時間を遅延させるため、命令群の前段にあらたに遅延素子を設定して、遅延を実行するPEを割り当てる。
このように、本実施の形態にかかるコンテキスト作成処理では、制御依存の関係にある命令同士のタイミング設定をずらすことなく、従来と同様にデータの入力タイミングを調整したスケジューリングが可能となる。したがって、動的再構成回路110のように、多重ループが多用される場合であっても、ソースプログラム101の設計意図に則した正確な動作を保証したコンテキスト102を作成することができる。以下、本実施の形態にかかるコンテキスト作成処理を実現するための具体的な構成について説明する。
(動的再構成回路の構成)
上述したように、本実施の形態にかかるコンテキスト作成処理は、動的再構成回路110によって利用されるコンテキスト102を作成するコンパイラ100に適用される。したがって、ここで、動的再構成回路110とその動作について説明する。図2は、動的再構成回路の一例を示す説明図である。図2のように、動的再構成回路110は、シーケンサ201と、条件分岐信号生成器202と、コンフィグレーションメモリ203と、PEアレー210とを含んで構成されている。
シーケンサ201は、ユーザや上位プログラムからの指示に応じたコンテキストを実行させるためのPC値を出力する。シーケンサ201から出力されたPC値は、コンフィグレーションメモリ203に入力される。また、シーケンサ201は、PC値とともに、PEアレー210にコンフィグレーションデータ読み込み要求信号としてFETCHENを出力する。
さらに、シーケンサ201は、コンテキストの切り替えをトリガに条件分岐信号生成器202に条件分岐信号(predicate信号;以下、「PRDI(入力信号の場合)/PRDO(出力信号の場合)」という)の生成指示を出力する。このPRDIは、2ビットの信号であり、コンテキスト切り替えの開始および終了の指示に利用する。具体的には、PRDIが「11」であれば条件の成立、「10」であれば条件の不成立、「0x」であれば無効をあらわす。
条件分岐信号生成器202は、シーケンサ201から入力されたPRDIの生成指示に応じて、PRDIを生成する。生成されたPRDIは、PEアレー210のネットワーク回路213に出力される。
コンフィグレーションメモリ203には、あらかじめ記述されたコンテキストが格納されており、シーケンサ201から入力されたPC値に応じて、該当するコンテキストを読み出す。そして、コンフィグレーションメモリ203からは、読み出されたコンテキストに記述されたコンフィグレーションデータ(configuration data;CFG)が、後述するPEアレー210に配置されているPE211(PE211a〜PE211c)や、カウンタ回路212(カウンタ回路212a〜212b)に出力される。
PEアレー210は、コンフィグレーションメモリ203によって読み出されたコンテキストに応じた処理を実行させる機能部であり、演算子として複数のPE211(たとえばPE211a〜PE211c)と、カウンタ回路212(たとえばカウンタ回路212a〜212b)が配置されているとともに、各演算子の入出力値(data)の接続を切り替える可変接続部としてネットワーク回路213を備えている。
PE211は、コンテキストの記述に応じて所定の演算をおこなう。動的再構成回路110によってあるコンテキストを実行する場合には、PE211には、コンフィグレーションメモリ203から実行するコンテキストに記述されたコンフィグレーションデータが入力される。その後、PE211は、コンテキストが切り替わるまで、入力されたコンフィグレーションデータに応じた演算処理をおこなう。
カウンタ回路212は、コンテキストの記述に応じて所定のループ処理をおこなうとともに、このループ処理の実行回数をカウントする。このとき、カウンタ回路212によるカウント結果は、PRDIとして、ネットワーク回路213に出力される。また、カウンタ回路212のハードウェア機能として下記の(a),(b),(c),(d)の機能切り替えがコンフィグレーションデータによって設定できる。
(a)カウンタの起動方法
つぎに、タイミングでカウンタ回路212を起動させるかの設定について説明する。具体的には、自動起動と、トリガモードとの2種類の設定をおこなうことができる。自動起動は、シーケンサ201から出力されたCFG読み込み要求信号(FETCHEN)を受け付けてから指定サイクル後に動作を開始させるように設定する方法である。また、トリガモードは、条件分岐信号生成部202から出力されたPRDIが成立をあらわす「11」であった場合に、PRDIの入力をトリガとして動作を開始させる方法である。なお、トリガモードによる起動方法を採用する場合には、後述するカウンタ回路212の内部メモリ「Trigger−mode」を有効状態に設定する。
(b)有効カウンタ出力のインターバル設定
カウンタ回路212によるカウント実行を1クロックごとに実行させるか、もしくは所定のクロックごとに実行させるかの設定である。上述のように、1クロックごとにカウンタを動作させることも可能だが、インターバル設定をおこなうことにより、一定の間隔を置いてカウンタを動作させることもできる。なお、インターバル設定をおこなう場合には、後述するカウンタ回路212の内部メモリ「Interval」に該当するコンフィグレーションデータを格納する。
(c)出力モード設定
カウンタ回路212によって実行するカウント処理において、どのような条件の場合に、カウンタ回路212から外部(他のPE211やカウンタ回路212もしくは他のクラスタ)への出力をおこなうかを設定する。具体的には、ノーマル出力モードとカスケード出力モードとの二つの出力モードが用意されており、後述するカウンタ回路212の内部メモリ「Output−mode」に格納されたコンフィグレーションデータに基づいてモードを切り替える。
[ノーマル出力モード]
ループ処理動作時には成立を示す入力信号PRDI「11」を出力し、ループ条件成立時にはPRDI「10」を出力する。また、ループ処理が停止時にはPRDI「00」を出力する。また、後段に他のカウンタ回路212が接続されている場合には、アドレスカウンタを停止させるため、ループ条件成立時に、PRDI「10」とともに、カスケード信号を1パルスアサートする。
[カスケード出力モード]
カスケード出力モードは、後段に同一のカウンタ回路212がカスケード接続されている場合に使用する。ループ処理動作時にはPRDI「10」を出力し、カウント処理によってカウント数が同カウンタ回路212のループパラメータの初期値に達したとき、PRDI「11」を出力する。また、ループ処理停止時にはPRDI「00」を出力する。
(d)入力モード設定
カウンタ回路212が、どのような入力を受け付けた場合にカウント処理を実行するかを設定する。具体的には、ノーマル入力モードとカスケード入力モードとの二つの入力モードが用意されており、後述するカウンタ回路212の内部メモリ「Input−mode」に格納されたコンフィグレーションデータに基づいてモードを切り替える。
[ノーマル入力モード]
カウンタ回路112にPRDI「11」が入力された場合にカウント処理を開始し、インターバル設定にしたがい、クロックに同期したカウント処理を進める。なお、上述した(a)の設定により自動起動に切り替えることもできる。
[カスケード入力モード]
カウンタ回路にPRDI「11」が入力されると、カウント値を更新する。また、PRDI「10」が入力されるとカウント値の更新を停止する。また、他のカウンタ回路212にカスケード接続されている場合、前段のカウンタ回路212(カスケード出力モードに設定されたカウンタ回路)から出力されるPRDIを受け付けて、アドレスカウンタを進めるために使用する。
(カウンタ回路の構成)
つぎに、カウンタ回路212の構成について説明する。図3は、カウンタ回路の構成を示す回路図である。図3のように、カウンタ回路212は、コンフィグレーションレジスタ部301と、有効サイクル検出部302と、ループ開始値・終了値書き換え部303と、ループ制御部304と、出力レジスタ部305とを含んで構成される。また、カウンタ回路212の各機能部301〜305には下記のような端子が接続されている。
(入力端子)
1−1.PRDI
条件分岐信号(PRDI)の入力を受け付ける端子である。条件分岐信号「11」が入力されると成立と判断し、入力モード設定(後述する内部レジスタの「Input−mode」の設定)にしたがってカウント処理を実行させる。
1−2.DI0/VI0,DI1/VI1
DIはデータ入力を受け付ける端子であり、VIは、DIに入力されたデータの有効/無効を示すvalidデータ(valid信号の出力値)の入力を受け付ける端子である。validデータが「1」のとき、同時に入力されたDIのデータは有効であると判断する。
1−3.CI
カスケード信号の入力を受け付ける端子である。このカスケード信号がアサート(Hi
gh状態の信号入力)されたときループカウントを終了する。また、ループカウントが停止されると、つぎのコンフィグレーションデータが設定されるまでループカウント再開は不可能となる。
1−4.CFG,FETCHEN
CFGはコンフィグレーションデータの入力を受け付ける端子である。また、FETCHENは、CFG読み込み要求信号(FETCHEN)の入力を受け付ける端子であり、起動要求信号がアサートされたときのみ、CFGに入力されたコンフィグレーションデータを後述する内部レジスタに取り込む。
(出力端子)
2−1.PRDO
条件分岐信号(predicate;PRDO)を出力する端子であり、ループ処理の動作中/停止時/ループ条件成立時のそれぞれの状態に応じ、出力モード設定(後述する内部レジスタの「Output−mode」の設定)にしたがって条件分岐信号を出力する。
2−2.DO/VO
DOはカウント値を示すデータを出力する端子である。また、VOはDOから出力されるカウント値の有効/無効を示すvalid信号を出力する端子である。なお、カウント処理の動作時、valid信号は「1」となり、カウンタ停止時、valid信号は「0」となる。
2−3.CO
カスケード信号を出力する端子であり、出力モードがノーマル出力モードに設定されている場合には、ループ条件が成立すると、カスケード信号を1パルスアサートする。また、出力モードがカスケード出力モードに設定されている場合には、後段に接続されているカウンタ回路の入力信号の出力端子となる。なお、カスケード出力モードの際に出力されるカスケード信号は、後段のカウンタ回路のカウント処理を停止させるために使用する。
つぎに、各機能部301〜305について説明する。まず、コンフィグレーションレジスタ部301は、コンテキスト開始時に各PEに供給される1パルスのFETCHEN信号をイネーブル信号として、上述したCFG端子から入力されたコンフィグレーションデータを以下の内部レジスタに取り込む。内部レジスタとは、具体的には、「Input−mode」,「Interval」,「Trigger−mode」,「Step」,「End」,「CMP−mode」,「Output−mode」,「Start」の各レジスタである。なお、これらの内部レジスタは、フリップフロップで構成される。
有効サイクル検出部302は、コンフィグレーションレジスタ部301の内部レジスタのうちの「Input−mode」,「Interval」,「Trigger−mode」に取り込まれたコンフィグレーションデータの設定にしたがって、出力レジスタ部305にレジスタ更新のイネーブル信号(output−enable)を出力する。
具体的には、有効サイクル検出部301は、内部メモリ「Input−mode」から出力された設定内容にしたがって、所定の条件の成立を示すPRDI「11」が入力された場合の動作を下記のように切り替える。なお、「11」以外のPRDIが入力された場合には動作しない。
[ノーマル入力モードの場合]
ノーマル入力モードの場合、有効サイクル検出部302は、シーケンサ201から処理
内容の成立を示すPRDI「11」が入力されると、カウント処理を開始する。カウンタ動作開始後は、クロックに同期し、Intervalに設定されたステップのタイミングでイネーブル信号(output−enable)を出力する。なお、コンフィグレーションレジスタ部301の「Trigger−mode」が自動起動に設定されている場合には、上述した設定は無効となる。
[カスケード入力モードの場合]
カスケード入力モードの場合、有効サイクル検出部302は、上段に接続されているカウンタ回路212から所定の条件の成立を示すPRDI「11」が入力されるとループ変数を更新するためのイネーブル信号(output−enable)を出力する。
ループ開始値・終了値書き換え部303は、カウント処理が停止したときにデータ入力が有効な場合(valid信号=「1」のとき)、そのパラメータを内部レジスタ「Start」と「End」とにそれぞれ書き込む。なお、初期設定ではDI0を内部レジスタ「Start」の書き換えの際に、DI1を内部レジスタ「End」の書き換え用に割り当てているが、コンフィグレーションデータの設定により割り当てを入れ替えることもできる。
ループ制御部304は、コンフィグレーションデータによってコンフィグレーションレジスタ部301の内部レジスタ「Step」に設定された値に応じて、カウント値を次状態に更新する。また、同じく内部レジスタ「CMP−mode」の設定にしたがってループ処理の終了判定をおこなう。この判定処理によってループ処理が終了した場合には、ループエンド信号(loop−end)を出力レジスタ部305に出力する。
ここで、図4は、ループ制御部の構成を示すブロック図である。図4を用いてループ制御部304によって実行されるforループ制御と条件判定について説明する。図4のように、ループ制御部304には、演算子401〜405が配置されている。
演算子401では、ループ変数DOと、インクリメント値Stepとが入力され、加算処理がおこなわれる。演算子401による加算結果は、ループパラメータ信号(loop−param)として出力されるとともに、演算子402にも出力される。演算子402では、演算子401による加算結果と、ループ変数の終了値Endとの加減算がおこなわれ、演算結果は、演算子403および演算子404に出力される。
演算子402による演算結果が「0」の場合には、演算子403からフラグが出力され、演算結果が「0以外」の場合には、演算子404からフラグが出力される。演算子403もしくは演算子404のいずれかから出力されたフラグは、演算子405に入力される。
演算子405では、ループ成立判定モードを指定するCMP−modeに応じて、入力されたフラグがループ成立条件を満足するか否かを判断する。演算子405によってループ成立条件を満足すると判断された場合には、ループエンド信号(loop−end)が出力レジスタ部305に出力される。
図3の説明に戻り、出力レジスタ部305には、内部レジスタ「DO」,「VO」,「CO」,「PRDDO」が用意されている。有効サイクル検出部302からイネーブル信号(output−enable)が入力された場合に、ループ制御部304からのループパラメータ信号(loop−param)を「DO」に格納し、DOとして、「VO」に格納されるvalid信号(VO)とともに外部へ出力される。また、ループパラメータ信号(loop−param)がアサートされていない場合には、「DO」の出力値の更新は停止し、同時に出力されるvalid信号の値も「0」となる。
また出力レジスタ部305は、ループパラメータ信号(loop−param)がアサートされている場合には、「PRDDO」および「CO」に格納されたPRDIおよびCOの出力は、コンフィグレーションレジスタ部301の内部レジスタ「Output−mode」設定に依存する。また、ループパラメータ信号(loop−param)信号がアサートされない場合には、「PRDDO」の出力値はすべてPRDI「00」となる。以下、出力モードの設定ごとの処理について説明する。
[ノーマル出力モード]
ノーマル出力モードの場合、出力レジスタ部305は、ループエンド信号(loop−end)がアサートされると、「PRDDO」よりPRDI「11」を出力するとともに、COをアサートする。また、ループエンド信号(loop−end)がアサートされていない場合には、「PRDDO」よりPRDI「10」を出力する。
[カスケード出力モード]
カスケード出力モードの場合、出力レジスタ部305は、ループエンド信号(loop−end)がアサートされると、出力レジスタ部305の「DO」に格納する値を、コンフィグレーションレジスタ部301の内部レジスタ「Start」の値に初期化する。また、「DO」の格納値をコンフィグレーションレジスタ部301の内部レジスタ「Start」に初期化した場合には、「PRDDO」よりPRDO「11」を出力する。また、上述した動作以外のときには、「PRDDO」よりPRDO「10」を出力する。
(カウンタ回路の動作)
つぎに、カウンタ回路212の入力モード(ノーマル、カスケード)、出力モード(ノーマル、カスケード)それぞれの設定に応じた具体的な動作内容について説明する。
・ノーマル入力モード−ノーマル出力モード
ここでは、ループ処理として「for(i=0;i<1024;i++)」と記述されたシングルループの制御をおこなう場合、すなわち、ノーマル入力モード−ノーマル出力モードの際のカウンタ回路212の動作について説明する。ここで、インターバル設定は、0とすることで毎クロック毎にカウント値が更新される。
カウンタ回路212では、クラスタ内で生成する制御信号である2ビット信号PRDI「2’bxx」が成立をあらわす「11(2b’11)」となった場合にPRDIがトリガとなり、forループカウント動作が開始される。
ノーマル入力モード−ノーマル出力モードに設定されたカウンタ回路212の動作の特徴としては、PRDI「11」でカウント処理の動作を開始させ、カウント値の有効・無効はvalid信号(VO)の値で判断する。具体的にはカウント動作中はVOを「High」状態で出力させる。また、カウント処理の出力のインターバル設定を0とすることで、連続してアドレスカウントを実行させることができる。
また、カウント処理実行中はPRDI「11」を出力し、ループ条件成立時にはPRDI「10」を出力する。さらに、カウント処理の停止タイミングでは、カスケード信号(CO)を1パルスアサートする。
・ノーマル入力モード−カスケード出力モード
つぎに、ループ処理として「for(i=0;i<3; i++){…}」と記述されている場合、すなわち、ノーマル入力モード−カスケード出力モードについて説明する。なお、カスケード出力モードは後段に同じforループ処理をおこなうカウンタ回路212を接続する場合に設定される。すなわち、カスケード出力モードに設定することによって、後段のカウンタ回路212をPRDI「11」によって1ステップ進めることができる。
ノーマル入力モード−カスケード出力モードのカウンタ回路212の動作の特徴としては、ループ処理の動作中はループ初期値のタイミングでPRDI「11」を出力する。ループ処理の動作以外の動作時にはPRDI「10」を出力する。また、動作時にはPRDI「00」を出力する。そして、カスケード信号入力(CI)がアサートされたときにカウント処理を停止させる。
・カスケード入力モード−ノーマル出力モード
つぎに、ループ処理として「for(i=0;i<3;i++){…}」と記述されている、すなわち、カスケード入力モード−ノーマル出力モードについて説明する。なお、カスケード入力モードは、同じforループ処理をおこなうカウンタ回路212のカスケード出力モードに設定されたカウンタから出力されたPRDIを受け付けて外部ループの動作をおこなう場合に設定する。
カスケード入力モード−ノーマル出力モードのカウンタ回路の動作特徴としては、前段に接続されたカウンタ回路212からPRDI「11」が入力されると、カウント値を更新する。また、PRDI「10」が入力されると、カウント値は保持され、PRDI「0x」が入力されるとカウント値は保持される。しかし、PRDI「0x」の入力時はvalid信号(VO)が0となるため無効出力となる。また、ループ条件成立時は、にカスケード信号(CI)を出力する。
以上説明したように、カウンタ回路212では、コンテキストに基づいて、コンフィグレーションレジスタ部301によって出力信号の出力元、出力信号の出力先そして出力信号を前記出力先に出力する条件からなるループ処理の内容が設定される。設定されたループ処理は、ループ制御部304によって実行される。そして、出力レジスタでは、実行されたループ処理の実行回数をカウントし、カウントされた実行回数および前記条件に基づいて、出力信号が前記出力先に出力される。
(多重ループ処理)
つぎに、ソースプログラム101によって多重ループ処理が記述された場合の制御内容について説明する。
(1)多重ループ処理の制御
まず、多重ループ制御を実装する場合について説明する。図5は、ループ制御部による多重ループ処理を示す説明図である。たとえば、3重ループが記述されたソースプログラム510が与えられた場合、図5のような動的再構成回路500が構成される。
動的再構成回路500は、ループ0〜ループ2の3つのループカウンタによって構成されて、ループパラメータ510が設定される。このときループ0にはループ1がカスケード接続され、ループ1にはループ2がカスケード接続されている。これらのループ0〜2の入出力モードは、下記の様な設定になっている。
[各カウンタの入出力モード設定]
ループ0:ノーマル入力モード/カスケード出力モード
ループ1:カスケード入力モード/カスケード出力モード
ループ2:カスケード入力モード/ノーマル出力モード
図6は、多重ループ処理による入出力値を示すタイミングチャートである。なお、図6のタイミングチャートにおいて、ループ0〜ループ2のPRDIおよびPRDOが所定の条件の成立をあらわす「11」の場合は、T(True)を、非成立をあらわす「10」の場合には、F(False)を、無効をあらわす「0x」の場合にはN(Invalid)を示す。
図6のタイミングチャートに示すように、ループ0では、ループ変数kで記述されている最内ループのカウント処理がおこなわれる。ループ変数jで記述されているループ1では、ループ0からTが出力されるとループカウントが開始される。このループ1もループ成立条件を満足すると、ループ変数iで記述されるループ2にTを出力する。このループ2が最外ループとなる。
(2)ループパラメータの書き換え処理
つぎに、ループパラメータの書き換え処理について説明する。図7は、ループパラメータの書き換え処理の一例を示す説明図である。図7の動的再構成回路700は、ループ1およびループ2が配置され、ループ2の出力先にはPEが接続されており、PEによる演算結果は、ループ1に入力される。また、ループ1,2およびPEには、ループパラメータ710が設定される。
したがって、DI0およびDI1に有効データが入力された場合には、ループ1,2の内部で設定されたループパラメータの書き換え処理をカウント処理と連動して実行させることができる。このような書き換え処理を備えることによって、C言語によって記載された汎用性の高い記述をそのまま動的再構成回路700に適用させることができる。
以上説明したように、カウンタ回路212を備えた動的再構成回路110では、特定のアプリケーションに限定されず、高級言語によって記述されたソースプログラムによって設定されたループ処理をPEに適用できることから、汎用性の高いプログラムの実装が可能となる。また、条件分岐信号(PRDIもしくはPRDO)の値をカウント処理の開始/終了に反映させることによってコンテキストの切り替えを適切に実現することができる。
(動的再構成回路用のコンテキストの作成)
本実施の形態では、上述したような構成の動的再構成回路用のコンテキストを作成して、多重ループを含む処理をシームレスに実行させる。したがって、以下は、コンパイラ100によるコンテキストの作成について説明する。通常、多重ループを含むソースプログラム101から、動的再構成回路110のコンテキスト102を作成する際には、下記の4ステップの処理が必要となる。
1.ソースプログラムの中間表現への翻訳
2.制御依存グラフの作成
3.中間表現のリストスケジューリング
4.リストスケジューリング結果をコンテキストとして出力
<1.ソースプログラムの中間表現への翻訳>
まず、C言語プログラムなどの高級言語の状態のソースプログラム101を一般的な構文解析技法を用いてコンパイラ100内部の中間表現に翻訳する。ここで、図8は、プログラムの中間表現の一例を示す説明図である。図8のデータ列800のように、中間表現はコンパイラ内部での操作に適した仮想的なコンピュータの命令の列から成り立っている。
なお、構文解析技法は、公知の技術であるため、詳細な説明は省略するが、たとえば、参考文献1:「Modern Compiler Implementation in Java(Andrew W. Appel, Cambridge University Press,1998)」などに詳しく記載されている(第3章「Parsing」参照)。また、中間表現に関しても公知の技術であるため詳細な説明は省略するが、たとえば、参考文献2:「Advanced Compiler Design and Implementation(Steven S. Muchnick, Morgan Kaufmann Publishing,1997)」などに詳しく記載されている(第4章「Intermediate Representations」参照)。
<2.制御依存グラフの作成>
つぎに、中間表現から制御依存グラフを生成する。制御依存グラフは、ある命令がどのような条件の下で実行されるかの依存関係を示したものである。たとえば、図9は、制御依存グラフの一例を示す説明図である。下記のようなプログラム片が記述されていた場合、中間表現に変換された後、図9に示すような制御依存グラフが生成される。
IF (A) THEN X;
ELSE Y;
上記のプログラム片は、処理X,Yの実行が処理Aの実行結果の真偽によって制御されることをあらわす。動的再構成回路110の場合、処理Aを実行するPEから実行結果に応じて出力されたPRDO信号が2b‘11であるか2b‘10であるかによって、処理X,Yを実行するPE群を制御することができる。すなわち、条件文Aが成立した場合にのみ、Xを実行するという制御依存を、XがAの出力するPRDOデータに依存するというデータ依存に変換できる。したがって、ソースプログラム101内の命令の依存関係をすべてデータ依存にすることができる。この制御依存グラフの情報を中間表現に反映させることによって、制御の流れの変更・分岐のない命令列を構成することができる。
なお、中間表現からの制御依存グラフを生成する技術も広く知られているため、ここでは詳細な説明は省略するが、たとえば、参考文献3:「High Performance Compilers for Parallel Computing(Michael Wolfe, Addison−Wesley Publishing,1996)」などに詳しく記載されている(第3章3節「Control Dependence」参照)。
<3.中間表現のリストスケジューリング>
つぎに、中間表現に基づいて、各命令をどのPEで実行するかを決定するためにリストスケジューリングをおこなう。なお。リストスケジューリングに関しては上記参考文献2の第17章「Code Scheduling」に詳しく記載されているが、簡単に説明すると、下記のような手順によって実行される。
1)中間表現に変換されたソースプログラム101内の命令のうち、依存する入力データがないか、あるいは、すでに生成されているものをREADYと呼ぶ集合に含める。
2)READYから命令を1つ選択して取り除き、この命令を命令Iとする。
3)命令Iを実行可能なPEを1つ選択し、PEIと呼ぶ(選択できるPEがなければ、翻訳失敗として異常終了する)。
4)命令Iが1つ以上の入力データに依存するなら、その入力データの中でもっとも遅くPEIに到着するものを見つけ、その到着時刻をTとする。
5)命令Iの残りの入力データのPEIへの到着時刻がTとなるようにネットワーク配線中に遅延素子を挿入する。
6)PEIが命令Iを実行する時刻をTに設定し、PEIの演算実行時間Cを加算してPEIの出力データの時刻を「T+C」に決定する。
7)命令Iの実行後に、依存する入力データのすべてが生成された命令があれば、その命令をREADYに入れる。
8)上記2)〜7)をREADYに命令が残っている限り繰り返す。
<4.スケジューリング結果としてコンテキストを出力する>
最後に、上記3.のリストスケジューリングの結果を参照して、ソースプログラム101を構成する各命令に対し、必要なPEが決定する。そして、決定したPEについて、それぞれ、他のPEとの接続を設定したコンテキストを作成し、コンフィグレーションデータ120として出力する。
以上説明したリストスケジューリングがコンテキスト102を作成する際の一般的な手順である。上述の手順の場合、PEによってある命令を実行させる実行時刻を算出するには、その命令に入力されるすべてのデータの生成時刻が確定していなければならない。このような制約がある場合、動的再構成回路110のように、多重ループを実行させる回路の場合、制御依存のある命令同士のデータの伝送に問題を起こすことがある。
ここで、図10は、ループ命令を含んだソースプログラムの一例を示す説明図である。図10に示したソースプログラム1000は、図5に示したソースプログラム510を一部改変したプログラムである。ソースプログラム510との最大の違いは、最外ループの終了値(ループiの変数[i_limit])が翻訳時に決定される定数ではなく、実行時の演算の結果決定される変数が設定されている点である。
図8において、中間表現の一例として挙げたデータ列800は、ソースプログラム1000を中間表現に変換したものである。また、図11は、従来のPEの配置例を示す説明図である。ソースプログラム1000の中間表現であるデータ列800によって、図11のような制御依存グラフが作成される。
ただし、多重の完全入れ子状態のループ命令においては、図2に示したカウンタ回路212の構成と合わせるため、最内ループを制御するカウンタ回路がより外側のカウンタ回路を制御するものとする。このために、多重の完全入れ子ループはループ交換をおこなう。なお、完全入れ子ループとループ交換に関しては上記参考文献3の第9章5節「Loop Interchanging」に詳しく記載されている。
図11の制御依存グラフにおいて、“start”は動的再構成回路110をスタートさせる命令であり、通常のプログラムにおける開始ノードである。したがって、グラフ内のすべての命令は“start”に制御依存する。また、“start”は、依存する入力データが不要なので、リストスケジューリング開始時にすでにREADYに入っているため、実行時刻T0としてPEに割り当てられる。
さらに、ループkの開始値・終了値が定数であるため、PEkは“start”がスケジュールされれば、一意的にREADYに入れることができる。したがって、実行時刻T1において実行開始可能となる。また、ループjも開始値・終了値が定数であるため、PEjが依存する入力データはPEkからのループエンド信号のみとなる。したがって、実行時刻T2において実行開始可能となる。
このとき、グラフ内のPEiは、他のPEにデータ依存する。したがって、実行開始可能な実行時刻がT3(PEjの実行時刻T2+1)より遅くなる。したがって、リストスケジューリングによって、PEjからの入力に対して遅延素子(pred−delay)が挿入される。
しかしながら、遅延素子を挿入した場合、動的再構成回路110は、図6のタイミングチャートに示したようなタイミングを構成できず、誤動作を起こす可能性がある。ここで、図12は、3重ループの入出力値を示すタイミングチャートである。たとえば、図6では、ループjを実行するPEから4クロック目、13クロック目、22クロック目に出力されたPRDO信号を、ループiを実行するPEが同じクロックで受け取っている。
ところが、図11のように遅延素子が挿入されてしまうと、図12のタイミングチャートがあらわすように、上記の処理がすべて1サイクル遅れた5クロック目、14クロック目、23クロック目で実行されることになる。このタイミングのズレにあわせて、ループiを実行するPEの最初のデータ出力も、本来5クロック目で出力するように設計していた。ところが、6クロック目に出力されてしまう。このようにデータの出力タイミングにズレが生じることによって、動的再構成回路110は、ソースプログラム101の設計意図通りに動かなくなってしまう恐れがあった。
そこで、本実施の形態にかかるコンパイラ100では、図10のソースプログラム1000を実行させる場合であっても、設計意図に沿ったループ処理を実行させるコンテキスト102を作成する。以下には、本実施の形態にかかるコンパイラ100について詳しく説明する。
(コンパイラのハードウェア構成)
まず、本実施の形態にかかるコンパイラ100のハードウェア構成について説明する。図13は、コンパイラ100のハードウェア構成を示すブロック図である。図13において、コンパイラ100は、CPU(Central Processing Unit)1301と、ROM(Read‐Only Memory)1302と、RAM(Random Access Memory)1303と、磁気ディスクドライブ1304と、磁気ディスク1305と、通信I/F(Interface)1306と、入力デバイス1307と、出力デバイス1308と、を備えている。また、各構成部はバス1310によってそれぞれ接続されている。
ここで、CPU1301は、コンパイラ100の全体の制御を司る。ROM1302は、ブートプログラムや、本実施の形態にかかるコンテスト作成処理を実現するための見積もり支援プログラムなどの各種プログラムを記憶している。RAM1303は、CPU1301のワークエリアとして使用される。磁気ディスクドライブ1304は、CPU1301の制御にしたがって磁気ディスク1305に対するデータの更新/参照を制御する。磁気ディスク1305は、磁気ディスクドライブ1304の制御で書き込まれたデータを記憶する。なお、図13のハードウェア構成では、記録媒体として、磁気ディスク1305を用いているが、光ディスクや、フラッシュメモリなど他の記録媒体を利用してもよい。
通信I/F1306は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク(NET)1309に接続され、このネットワーク1309を介して他のコンパイラ100やその他の外部装置に接続される。そして、通信I/F1306は、ネットワーク1309と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。通信I/F1306の構成例としては、たとえばモデムやLANアダプタなどを採用することができる。
入力デバイス1307は、コンパイラ100に対しての外部からの入力を受け付ける。入力デバイス1307としては、具体的には、キーボード、マウスなどが挙げられる。なお、コンパイラ100によって、コンテキスト102を作成する際の元のソースプログラム101は、ROM1302、RAM1303、磁気ディスク1305などの記憶領域にあらかじめ格納されていてもよいが、入力デバイス1307から入力されて、上述の記憶領域に格納されてもよい。
キーボードの場合、たとえば、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスの場合、たとえば、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。また、ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
出力デバイス1308は、コンパイラ100によって見積もられた各種見積もり結果や、シミュレーションの実行結果などを出力する。出力デバイス1308としては、具体的には、ディスプレイ、プリンタなどが挙げられる。
ディスプレイの場合、たとえば、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイとしてさらに、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。また、プリンタの場合、たとえば、画像データや文書データを印刷する。さらに、レーザプリンタやインクジェットプリンタを採用することができる。
(コンパイラの機能的構成)
つぎに、コンパイラ100の機能的構成について説明する。図14は、コンパイラの機能的構成を示すブロック図である。図14のように、コンパイラ100は、機能部として特定部1401と、抽出部1402と、到達時間算出部1403と、選択部1404と、差分算出部1405と、作成部1406と、受付部1407と、を含む構成である。この制御部となる機能(特定部1401〜受付部1407)は、具体的には、たとえば、図13に示したROM1302、RAM1303、磁気ディスク1305などの記憶領域に記憶された検証支援プログラムをCPU1301に実行させることにより、または、通信I/F1306により、その機能を実現する。
特定部1401は、ソースプログラム101の制御依存グラフからソースプログラム101内の命令の制御依存関係を特定する機能を有する。ソースプログラム101から制御依存グラフを作成するためのツールは、公知のものを適用する。また、制御依存グラフの作成処理は、外部の装置によって実行させてもよい。なお、特定部1401によって特定された制御依存関係に関する情報は、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
抽出部1402は、ソースプログラム101に含まれているループ命令のうち、特定部1401によって制御依存関係があると特定されたループ命令群を抽出する機能を有する。なお、抽出部1402によって抽出された命令群は、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
到達時間算出部1403は、特定部1401によって特定された制御依存関係に基づいて、抽出部1402によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する機能を有する。データの到達時間の算出には、制御依存グラフを利用する。制御依存グラフにおいて、“start”と呼ばれる命令は、動的再構成回路110におけるコンテキスト102ごとの実行開始信号を発生する回路の起動処理に対応する。したがって、“start”の実行時刻T0を基準として、その時刻から入力データに到達するまでの経路上で通過するPEの処理時間を累計することによって到達時間が算出される。なお、ここでは、T0を基準として加算した到達時間を求めているが、到達時刻Txを求めてもよい。この場合は、T0との差分が到達時刻となる。なお、到達時間算出部1403によって算出された到達時間は、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
選択部1404は、到達時間算出部1403による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する機能を有する。なお、選択部1404によって選択されたデータは、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
差分算出部1405は、選択部1404によって選択されたデータの到達時間と、このデータが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する機能を有する。差分算出部1405によって算出された差分は、依存関係のあるループ命令の命令が実行されたタイミングと、選択されたデータが到達するまでの時間のズレをあらわしている。すなわち、現在のタイミング設定では、この差分だけ待機時間が発生してしまうことを意味する。なお、差分算出部1405によって算出された差分に関する情報は、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
作成部1406は、ループ命令群の前段に差分算出部1405によって算出された差分の遅延を発生させる遅延素子を配置したコンテキスト102を作成する機能を有する。ここで配置される遅延素子は、上述した差分によって特定された待機時間を解消するための機構である。また、遅延素子は、命令群の前段に配置されるため、命令群内の制御依存があるループ命令同士のタイミングは変化しない。なお、作成されたコンテキスト102は、RAM1303、磁気ディスク1305などの記憶領域に記憶される。
以上説明した機能部によって、コンパイラ100は、正確な動作を保証するコンテキスト102を作成することができる。また、上述の処理では、制御依存するループ命令同士を特定してタイミング調整をおこなっていたが、利用者や上位システムなど、外部から指定された命令群について、同様に命令群内のタイミングの変化が生じることなく、待機時間を削減させるコンテキスト102を作成してもよい。
この場合、受付部1407を利用する。受付部1407は、ソースプログラム101内の命令のうち、制御依存関係のある命令群の指定を受け付ける機能を有する。受付部1407によって、命令群の指定を受け付けた場合、到達時間算出部1403は、特定部1401によって特定された制御依存関係に基づいて、この命令群の各ループ命令に入力されるデータの到達時間を算出する。以降の処理は、ループ命令による命令群を抽出した場合と同様に扱われる。また、抽出部1402によって、複数の命令群が抽出された場合も、各命令群についてそれぞれ遅延素子を配置したコンテキスト102が作成される。
このように、本実施の形態にかかるコンパイラ100の場合、中間表現のリストスケジューリング時にある命令についてそれぞれ、制御依存する命令群を特定して、これら命令群内の命令間で遅延素子を挟むことなく実行可能なタイミングに調整したコンテキスト102を作成する。
つぎに、上述した構成のコンパイラ100によるコンテキスト102作成のためのリストスケジューリングの手順について具体例を挙げて説明する。以下に説明する手順は、上述した<3.中間表現のリストスケジューリング>を本実施の形態にあわせて一部修正したものである。
1)中間表現中の命令の内、依存する入力データがないか、あるいはすでに生成されているものをREADYに含める。
2)READYから命令を1つ選択する。
3)上記2)において選択した命令(I1)が、ループ構成命令(for−loop)であり、なおかつ、I1に制御依存する別のループ構成命令(I2)が存在する場合、I1に追加してI2も選択する。さらにI2に対して、その出力データを参照する別のループ構成命令等々(I-3…In)が存在する場合が考えられる。その場合にはそれらの命令すべてを選択する。
4)選択した命令I-1…Inを実行可能なPEをそれぞれの命令に対し、1つずつ選択する(選択可能なPEがなければ、翻訳失敗として異常終了する)。
5)命令I-1が1つ以上の入力データに依存する場合、その入力データの中で最も遅くPEI-1に到着するデータの到着時刻をTc1とする。
6)命令I2は命令I1に制御依存するため、PEI2が命令I2を実行する時刻は最も早くてTc1+Cとなる。そして、命令I2が命令I-1の出力データ以外に1つ以上の入力データに依存する場合、その入力データの中で最も遅くPEI-2に到着するデータの到着時刻とTc1+Cとを比較する。この比較結果において、より大きいものをTc2とする。
7)上記6)と同様にして、Tcnを求め、その時刻をTnとする。
8)Tcn−1とTn−Cを比較し、より大きいものをTn−1とする。同様にして、Tn−2からT1までを求める。
9)命令I-1…命令I-nのその他の入力データのPEI-1…PEI-nへの到着時刻がそれぞれT1…Tnとなるように制御依存グラフによってあらわされた配線中に遅延素子を挿入する。
10)PEI-1…PEI-nがそれぞれ命令I-1…命令I-nを実行する時刻をT1…Tnに設定し、PEの演算実行時間Cを加算してPEI-1…PEI-nの出力データの時刻をそれぞれT1+C…Tn+Cに決定する。
11)命令I-1…命令I-nの実行後に、依存する入力データすべてが生成された命令が中間表現の中にあれば、その命令をREADYに入れる。
12)上記2)〜11)の処理をREADYに命令が残っている限り繰り返す。
そして、図15は、本実施の形態にかかるコンテキスト作成処理によるPEの配置例を示す説明図である。以上のように修正した<3.中間表現のリストスケジューリング>によってコンテキスト102を作成する場合、図15のような制御依存グラフが作成される。
図15のように、最初のループ命令「for−loop(k)」をREADYから取り出したところで、この命令に制御依存する他のループ命令「for−loop(j)」、さらにループ命令「for−loop(j)」に制御依存するループ命令「for−loop(i)」があることが分かる。ループ命令「for−loop(i)」は、データ依存する入力データを持ちそのデータの到着時刻はT4である。したがって、ループ命令「for−loop(i)」の実行時刻がT4に決定される。同様にループ命令「for−loop(j)」の実行時刻がT3、ループ命令「for−loop(k)」の実行時刻がT2と決定されるためループ命令群と“start”の間に遅延素子が挿入されている。
(コンパイルの手順)
つぎに、上述したコンテキスト作成処理を含んだコンパイラ100の具体的なコンパイルの手順について説明する。図16は、コンパイラによるコンパイルの手順を示すフローチャートである。図16のフローチャートにおいて、コンパイラ100は、まず、処理対象となるソースプログラム101を読み込む(ステップS1601)。そして、コンパイラ100は、読み込んだソースプログラム101を解析して中間表現に変換する(ステップS1602)。
つぎに、ステップS1602によって変換された中間表現から制御依存グラフを作成し(ステップS1603)、作成した制御依存グラフを利用してリストスケジューリングをおこなう(ステップS1604)。最後に、ステップS1604におけるリストスケジューリング結果に応じてソースプログラム101内の命令をPEに割り当てて(ステップS1605)、一連の処理を終了する。
(PE割り当て処理の手順)
つぎに、図16のステップS1604およびS1605におけるPE割り当て処理について詳しく説明する。図17は、PE割り当て処理の手順を示すフローチャートである。
また、図18は、PE割り当て処理に用いる各種データのデータ構造を示す説明図である。
図17のフローチャートにおいて、まず、READYから命令を1つ取り出す(ステップS1701)。その後、取り出した命令に対する入力データがすべて揃っているか否かを判断する(ステップS1702)。ここで、入力データが揃っていないと判断された場合(ステップS1702:No)、ステップS1701の処理に戻り、入力データが揃うまで待機状態となる。
ステップS1702において、入力データがすべて揃ったと判断された場合(ステップS1702:Yes)、つぎに、処理中の命令がループ構成命令であるか否かを判断する(ステップS1703)。ここで、ループ構成命令でないと判断された場合(ステップS1703:No)、以下の処理をスキップして、ステップS1707に移行する。
ステップS1703において、処理中の命令がループ構成命令であると判断された場合(ステップS1703:Yes)、つぎに、制御依存している他のループ構成命令があるか否かを判断する(ステップS1704)。すなわち、ステップS1704によって、多重ループ構成か否かを判断する。
ステップS1704において、制御依存している他のループ構成命令がないと判断された場合には(ステップS1704:No)、そのまま、ステップS1707の処理に移行する。一方、制御依存している他のループ構成命令があると判断された場合(ステップS1704:Yes)、制御依存しているループ構成命令を処理対象として取り出す(ステップS1705)。
その後、処理中のすべての命令の入力データが揃っているか否かを判断する(ステップS1706)。ここで、データが揃うまでステップS1701に戻り待機状態となる(ステップS1706:Noのループ)。一方、ステップS1706において、すべての入力データが揃ったと判断された場合(ステップS1706:Yes)、入力データのうち、最も遅く入力されるデータを特定する(ステップS1707)。
ステップS1707において、最も遅く入力されるデータが特定されると、特定されたデータにあわせて他のデータの入力にディレイを挿入する(ステップS1708)。最後に、すべての命令がPEに割り当てられたか否かを判断する(ステップS1709)。そして、すべての命令がPEに割り当てられるまで(ステップS1709:No)ステップS1701に戻り、命令の割り当てを繰り返す。そして、すべての命令がPEに割り当て
られたと、判断されると(ステップS1709:Yes)、そのまま一連の処理を終了する。
なお、コンパイラ100は、上述したステップS1605および図7のフローチャートによって命令の割り当てをおこなっているが、このとき、具体的には、図18に示したclass ProcessingElementというデータ構造を参照している。class ProcessingElementには、実際のハードウェアが用意しているPEの個数をあらわしている。また、これらのデータ構造の_kindというメンバはそれぞれ実際のハードウェアの持つPEの種類を反映して設定されている。したがって、たとえば、実際のハードが加減算用のPEを8個、乗算用のPEを2個持っているとすると、コンパイラ100の内部データであるclassProcessingElementも10個のうち8個は_kindにADD_SUBという種別が設定され、残り2個はMULTという種別が設定される。
また、これらの内部データの_instructionはどの命令もあらわさない状態、_used_pはクリアされた状態に初期設定されている。したがって、命令Iを実行可能なPEの選択時に、コンパイラは内部のclassProcessingElementの中で_used_pがクリアされており、かつ、_kindが命令Iを実行可能な種別であるようなものを検索する。そのようなPEが1つ以上見つかれば、そのうちの任意の1個のPEを選択し、_used_pをセットするため、_instructionは命令Iを挿入するように更新することができる。
以上説明したように、本実施の形態にかかるコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法によれば、制御関係のある命令同士が命令群として抽出される。そして、これら命令群単位で入力されるデータの到達時間を算出し、命令群の前段に算出した遅延時間を解消するための遅延素子を配置する。したがって、命令群を構成する命令同士の制御依存を生じるデータが入力されるタイミングはソースプログラム101の設計意図が保持され、なおかつ、データの入力タイミングが調整されたコンテキストが作成される。したがって、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成する
なお、本実施の形態で説明したコンテキスト作成方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本コンテキスト作成プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本コンテキスト作成プログラムは、インターネットなどのネットワークを介して配布してもよい。
また、本実施の形態で説明したコンパイラ100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述したコンパイラ100の機能(特定部1401〜受付部1407)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、コンパイラ100を製造することができる。
100 コンパイラ
110 動的再構成回路
101 ソースプログラム
102 コンフィグレーションデータ(コンテキスト)
1401 特定部
1402 抽出部
1403 到達時間算出部
1404 選択部
1405 差分算出部
1406 作成部
1407 受付部

Claims (7)

  1. ソースプログラムからコンテキストの作成処理を行うコンピュータを、
    記ソースプログラム内の命令の制御依存関係を特定する特定手段、
    前記ソースプログラムに含まれているループ命令のうち、前記特定手段によって制御依存関係があると特定されたループ命令群を抽出する抽出手段、
    前記制御依存関係に基づいて、前記抽出手段によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出手段、
    前記到達時間算出手段によって算出された各ループ命令に入力されるデータのループ命令への到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出手段、
    前記差分算出手段によって算出された差分がある場合に、前記ループ命令群の前段に当該差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成手段、
    として機能させることを特徴とするコンテキスト作成プログラム。
  2. 前記特定手段は、前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定することを特徴とする請求項1に記載のコンテキスト作成プログラム。
  3. 前記コンピュータを、前記到達時間算出手段による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する選択手段として機能させ、
    前記差分算出手段は、前記選択手段によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出することを特徴とする請求項1または2に記載のコンテキスト作成プログラム。
  4. 前記選択手段は、前記抽出手段によって複数の命令群が抽出された場合、命令群ごとにループ命令への到達時間が最も長いデータを選択し、
    前記差分算出手段は、前記ループ命令群ごとに、前記選択手段によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出し、
    前記作成手段は、各命令群の前段に前記ループ命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成することを特徴とする請求項に記載のコンテキスト作成プログラム。
  5. 前記コンピュータを、さらに、
    前記ソースプログラム内の命令のうち、制御依存関係のある命令群の指定を受け付ける受付手段、として機能させ、
    前記到達時間算出手段は、前記制御依存関係に基づいて、前記受付手段によって受け付けられた命令群の各命令に入力されるデータの到達時間を算出し、
    前記選択手段は、前記到達時間算出手段による算出結果に基づいて、各命令に入力されるデータのうち、命令への到達時間が最も長いデータを選択し、
    前記差分算出手段は、前記選択手段によって特定されたデータの到達時間と、当該データが入力される命令と依存関係のある命令の実行が終了するまでの時間との差分を算出し、
    前記作成手段は、前記命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成することを特徴とする請求項3または4に記載のコンテキスト作成プログラム。
  6. ソースプログラムからコンテキストを作成するコンパイラ装置であって、
    記ソースプログラム内の命令の制御依存関係を特定する特定手段と、
    前記ソースプログラムに含まれているループ命令のうち、前記特定手段によって制御依存関係があると特定されたループ命令群を抽出する抽出手段と、
    前記制御依存関係に基づいて、前記抽出手段によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出手段と、
    前記到達時間算出手段によって算出された各ループ命令に入力されるデータのループ命令への到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出手段と、
    前記差分算出手段によって算出された差分がある場合に、前記ループ命令群の前段に当該差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成手段と、
    を備えることを特徴とするコンパイラ装置
  7. ソースプログラムからコンテキストを作成するコンピュータが、
    記ソースプログラム内の命令の制御依存関係を特定する特定工程と、
    前記ソースプログラムに含まれているループ命令のうち、前記特定工程によって制御依存関係があると特定されたループ命令群を抽出する抽出工程と、
    前記制御依存関係に基づいて、前記抽出工程によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出工程と、
    前記到達時間算出工程によって算出された各ループ命令に入力されるデータのループ命令への到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出工程と、
    前記差分算出工程によって算出された差分がある場合に、前記ループ命令群の前段に当該差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成工程と、
    を実行することを特徴とするコンテキスト作成方法。
JP2009080132A 2009-03-27 2009-03-27 コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法 Expired - Fee Related JP5444784B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009080132A JP5444784B2 (ja) 2009-03-27 2009-03-27 コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009080132A JP5444784B2 (ja) 2009-03-27 2009-03-27 コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法

Publications (2)

Publication Number Publication Date
JP2010231635A JP2010231635A (ja) 2010-10-14
JP5444784B2 true JP5444784B2 (ja) 2014-03-19

Family

ID=43047365

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009080132A Expired - Fee Related JP5444784B2 (ja) 2009-03-27 2009-03-27 コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法

Country Status (1)

Country Link
JP (1) JP5444784B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6025482B2 (ja) 2012-09-28 2016-11-16 富士ゼロックス株式会社 表示制御装置、画像表示装置、およびプログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06295246A (ja) * 1993-04-08 1994-10-21 Toshiba Corp 命令スケジューリング方式
JPH1167920A (ja) * 1997-08-22 1999-03-09 Matsushita Electric Ind Co Ltd 半導体集積回路装置の設計方法および半導体集積回路装置
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US20050283743A1 (en) * 2004-06-07 2005-12-22 Mulholland Philip J Method for generating hardware information

Also Published As

Publication number Publication date
JP2010231635A (ja) 2010-10-14

Similar Documents

Publication Publication Date Title
US9912610B2 (en) Data-plane stateful processing units in packet processing pipelines
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
Canis et al. Modulo SDC scheduling with recurrence minimization in high-level synthesis
US9223921B1 (en) Compilation of HLL code with hardware accelerated functions
US9075624B2 (en) Compilation of system designs
JP2009535718A (ja) 同期回路設計の表現から非同期回路設計の表現へおよび非同期回路設計の表現から同期回路設計の表現への自動変換を実行するためのシステムおよび方法
JPH10116302A (ja) 集積回路の設計方法及びそれによって設計された集積回路
US20130139137A1 (en) Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies
Ren A brief introduction on contemporary high-level synthesis
Josipović et al. Invited tutorial: Dynamatic: From C/C++ to dynamically scheduled circuits
Parrot et al. Timed Petri nets with reset for pipelined synchronous circuit design
Li et al. Fluid: An asynchronous high-level synthesis tool for complex program structures
Elakhras et al. Unleashing parallelism in elastic circuits with faster token delivery
JP5444784B2 (ja) コンテキスト作成プログラム、コンパイラ装置およびコンテキスト作成方法
JPH113367A (ja) デジタルシステムのインプリメント可能な記述を生成する設計環境および方法
US20080120497A1 (en) Automated configuration of a processing system using decoupled memory access and computation
US9223910B1 (en) Performance and memory efficient modeling of HDL ports for simulation
Gill et al. Bottleneck analysis and alleviation in pipelined systems: A fast hierarchical approach
Bergamaschi et al. A system for production use of high-level synthesis
US8443344B1 (en) Methods for identifying gating opportunities from a high-level language program and generating a hardware definition
Bensaid et al. Work in progress: Automatic construction of pipeline datapaths from high-level HDL code
US8176451B2 (en) Behavioral synthesis apparatus, behavioral synthesis method, and computer readable recording medium
Ulmann Multi-level rewriting for stream processing to RTL compilation
US20240202522A1 (en) Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler
Westerlund et al. Time aware system refinement

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130319

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130520

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131209

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees