(57)【要約】【課題】多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成すること。【解決手段】コンパイラ１００では、動的再構成回路１１０に用意されているＰＥの情報を取得してソースプログラム１０１内の命令をＰＥに割り当てる。このとき、コンパイラ１００では、命令の実行タイミングを、調整するためＰＥの間に遅延素子を挿入するため、まずソースプログラム１０１内の命令のうち制御依存の関係にある命令同士のまとまりを抽出する。さらに、抽出された命令群同士のタイミングを保持するため、命令群内の各ループ命令へ入力されるデータの到達時間を算出し、到達時間が最も遅いデータを選択する。そして、選択されたデータの入力のタイミングにあわせて、各命令の実行時間を遅延させるために、命令群の前段にあらたに遅延素子を設定して、遅延を実行するＰＥを割り当てる。【選択図】図１
2010231635.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムから動的再構成回路の回路構成を設定するためのコンテキストの作成処理を行うコンピュータを、
前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定する特定手段、
前記ソースプログラムに含まれているループ命令のうち、前記特定手段によって制御依存関係があると特定されたループ命令群を抽出する抽出手段、
前記制御依存関係に基づいて、前記抽出手段によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出手段、
前記到達時間算出手段による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する選択手段、
前記選択手段によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出手段、
前記ループ命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成手段、
として機能させるコンテキスト作成プログラム。
【請求項２】
前記選択手段は、前記抽出手段によって複数の命令群が抽出された場合、命令群ごとにループ命令への到達時間が最も長いデータを選択し、
前記差分算出手段は、前記ループ命令群ごとに、前記選択手段によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出し、
前記作成手段は、各命令群の前段に前記ループ命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成することを特徴とする請求項１に記載のコンテキスト作成プログラム。
【請求項３】
前記コンピュータを、さらに、
前記ソースプログラム内の命令のうち、制御依存関係のある命令群の指定を受け付ける受付手段、として機能させ、
前記到達時間算出手段は、前記制御依存関係に基づいて、前記受付手段によって受け付けられた命令群の各命令に入力されるデータの到達時間を算出し、
前記選択手段は、前記到達時間算出手段による算出結果に基づいて、各命令に入力されるデータのうち、命令への到達時間が最も長いデータを選択し、
前記差分算出手段は、前記選択手段によって特定されたデータの到達時間と、当該データが入力される命令と依存関係のある命令の実行が終了するまでの時間との差分を算出し、
前記作成手段は、前記命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成することを特徴とする請求項１または２に記載のコンテキスト作成プログラム。
【請求項４】
ソースプログラムから動的再構成回路の回路構成を設定するためのコンテキストを作成するコンパイラであって、
前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定する特定手段と、
前記ソースプログラムに含まれているループ命令のうち、前記特定手段によって制御依存関係があると特定されたループ命令群を抽出する抽出手段と、
前記制御依存関係に基づいて、前記抽出手段によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出手段と、
前記到達時間算出手段による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する選択手段と、
前記選択手段によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出手段と、
前記ループ命令群の前段に前記差分算出手段によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成手段と、
を備えることを特徴とするコンパイラ。
【請求項５】
ソースプログラムから動的再構成回路の回路構成を設定するためのコンテキストを作成するコンピュータが、
前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定する特定工程と、
前記ソースプログラムに含まれているループ命令のうち、前記特定工程によって制御依存関係があると特定されたループ命令群を抽出する抽出工程と、
前記制御依存関係に基づいて、前記抽出工程によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する到達時間算出工程と、
前記到達時間算出工程による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する選択工程と、
前記選択工程によって選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する差分算出工程と、
前記ループ命令群の前段に前記差分算出工程によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成する作成工程と、
を実行することを特徴とするコンテキスト作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、多重ループ処理を含む命令の正確な動作を保証したコンテキストを作成するコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法に関する。
【背景技術】
【０００２】
従来、Ｃ言語などの高級言語によって作成させたソースプログラムを対象装置によって読み取り可能なオブジェクトコードに変換するコンパイル技術については、様々な機能が提供されている。この変換処理をおこなうソフトウェアもしくはソフトウェアが搭載された装置は、一般的にコンパイラと呼ばれる。そして、コンパイラによる変換処理（コンパイル）は、ソースプログラムの処理速度に大きく影響する。特に、コンパイラによる命令の実行タイミングを設定するスケジューリング処理は、ソースプログラムの処理速度を向上させるための重要な要素となっており、効率的なスケジューリングを実現するための様々な技術が提供されている（たとえば、下記特許文献１参照。）。
【０００３】
また、近年では、動作中に回路内部の演算器命令や演算器間の接続を変更できるという特徴を備えたダイナミックリコンフィギャラブル回路（以下、「動的再構成回路」という）が登場し、利用が広がっている。具体的には、動的再構成回路の内部には複数のＰＥ（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ（プロセッシングエレメント））が配置されている。そして、動的再構成回路を動作させる場合、コンパイラは、ソースプログラムによって提供された各段階の構成内容に応じて、コンテキストと呼ばれる各ＰＥの動作と、ＰＥ間の接続との設定をあらわす情報を作成する。動的再構成回路において、回路を再構成する際には、このコンテキストに応じてＰＥの演算処理内容や接続を変更させる。
【０００４】
また、動的再構成回路では、上述したコンテキストに基づいて回路内部に配置されているＰＥの処理内容や接続先を順次変更する。すなわち、異なる処理をおこなう場合であっても、時間軸方向に分割して実行させることによって、ＰＥの共用が可能となる。したがって、動的再構成回路全体のハードウェア規模を削減することができるという利点を備えている。このような、コンテキストに基づいた動的再構成回路では、各コンテキストを実行させる際の開始、終了の制御には、カウンタ回路を用いることが一般的である。具体的には、データ駆動型の再構成可能なカウンタが利用されている（たとえば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−２９５２４６号公報
【特許文献２】特表２００３−５１８６６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１に挙げたような従来のコンパイラの場合、上記特許文献２をはじめとする動的再構成回路におけるループ命令に対応した適切なスケジューリングを実現できない場合がある。従来のコンパイラでは、複数の入力データを受け付けて処理を実行する命令がある場合、この命令を実行するＰＥに各入力データが到達するタイミングにズレがあれば、最後に到達する入力データにあわせて、他の入力データの入力線に遅延素子を追加することによって入力データの到達タイミングを調整していた。
【０００７】
動的再構成回路では、カウンタ回路が搭載されることによって、ループ命令の中に他のループ命令が入れ子状に配置された多重ループを実行させることができる。コンパイラによるスケジューリングの際に、上述の多重ループを実行させる命令についても、個々の命令ごとにデータ入力のタイミングを調整した場合、制御依存の関係にある他のループ命令への入力データに遅延が生じてしまう。結果として、ソースプログラムの設計意図通りにループ命令が実行されず、動的再構成回路が正しく動作しない場合があるという問題があった。
【０００８】
本開示技術は、上述した従来技術による問題点を解消するため、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成するコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本開示技術は、ソースプログラムから動的再構成回路の回路構成を設定するためのコンテキストを作成するコンピュータにおいて、前記ソースプログラムの制御依存グラフから前記ソースプログラム内の命令の制御依存関係を特定する処理と、前記ソースプログラムに含まれているループ命令のうち、制御依存関係があると特定されたループ命令群を抽出する処理と、前記制御依存関係に基づいて、抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する処理と、算出する処理による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する処理と、選択されたデータの到達時間と、当該データが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する処理と、前記ループ命令群の前段に差分を算出する処理によって算出された差分の遅延を発生させる遅延素子を配置したコンテキストを作成する処理と、を含むことを特徴とする。
【００１０】
本開示技術によれば、制御依存関係のある命令同士が命令群として抽出される。そして、これら命令群単位で入力されるデータの到達時間を算出し、命令群の前段に算出した遅延時間を解消するための遅延素子を配置する。したがって、命令群を構成する命令同士の制御依存を生じるデータが入力されるタイミングはソースプログラムの設計意図が保持され、なおかつ、データの入力タイミングが調整されたコンテキストが作成される。
【発明の効果】
【００１１】
本コンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法によれば、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態にかかるコンテキスト作成処理の概要を示す説明図である。
【図２】動的再構成回路の一例を示す回路図である。
【図３】カウンタ回路の構成を示す回路図である。
【図４】ループ制御部の構成を示すブロック図である。
【図５】ループ制御部による多重ループ処理を示す説明図である。
【図６】多重ループ処理による入出力値を示すタイミングチャートである。
【図７】ループパラメータの書き換え処理の一例を示す説明図である。
【図８】プログラムの中間表現の一例を示す説明図である。
【図９】制御依存グラフの一例を示す説明図である。
【図１０】ループ命令を含んだソースプログラムの一例を示す説明図である。
【図１１】従来のＰＥの配置例を示す説明図である。
【図１２】３重ループの入出力値を示すタイミングチャートである。
【図１３】コンパイラのハードウェア構成を示すブロック図である。
【図１４】コンパイラの機能的構成を示すブロック図である。
【図１５】本実施の形態にかかるコンテキスト作成処理によるＰＥの配置例を示す説明図である。
【図１６】コンパイラによるコンパイルの手順を示すフローチャートである。
【図１７】ＰＥ割り当て処理の手順を示すフローチャートである。
【図１８】ＰＥ割り当て処理に用いる各種データのデータ構造を示す説明図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかるコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法の好適な実施の形態を詳細に説明する。
【００１４】
（コンテキスト作成処理の概要）
まず、本実施の形態にかかるコンテキスト作成処理の概要について説明する。図１は、本実施の形態にかかるコンテキスト作成処理の概要を示す説明図である。図１のように、本実施の形態にかかるコンテキスト作成処理は、コンパイラ１００によって、ソースプログラム１０１から、動的再構成回路１１０を実行させるためのコンフィグレーションデータ１０２のコンテキストを作成する。
【００１５】
このとき、コンパイラ１００では、動的再構成回路１１０に用意されているＰＥの情報を取得してソースプログラム１０１内の命令をＰＥに割り当てる。このとき、コンパイラ１００では、命令の実行タイミングを調整するために、ＰＥの間に遅延素子を挿入する。このとき、コンパイラ１００は、ソースプログラム１０１内の命令のうち制御依存の関係にある命令同士のまとまりを抽出する。図１の場合、破線で囲まれたループ命令群が制御依存のある命令群として抽出されたものとする。
【００１６】
すると、コンパイラ１００は、抽出された命令群同士のタイミングを保持するため、命令群内の各ループ命令へ入力されるデータの到達時間を算出し、到達時間が最も遅いデータを選択する。そして、選択されたデータの入力のタイミングにあわせて、各命令の実行時間を遅延させるため、命令群の前段にあらたに遅延素子を設定して、遅延を実行するＰＥを割り当てる。
【００１７】
このように、本実施の形態にかかるコンテキスト作成処理では、制御依存の関係にある命令同士のタイミング設定をずらすことなく、従来と同様にデータの入力タイミングを調整したスケジューリングが可能となる。したがって、動的再構成回路１１０のように、多重ループが多用される場合であっても、ソースプログラム１０１の設計意図に則した正確な動作を保証したコンテキスト１０２を作成することができる。以下、本実施の形態にかかるコンテキスト作成処理を実現するための具体的な構成について説明する。
【００１８】
（動的再構成回路の構成）
上述したように、本実施の形態にかかるコンテキスト作成処理は、動的再構成回路１１０によって利用されるコンテキスト１０２を作成するコンパイラ１００に適用される。したがって、ここで、動的再構成回路１１０とその動作について説明する。図２は、動的再構成回路の一例を示す説明図である。図２のように、動的再構成回路１１０は、シーケンサ２０１と、条件分岐信号生成器２０２と、コンフィグレーションメモリ２０３と、ＰＥアレー２１０とを含んで構成されている。
【００１９】
シーケンサ２０１は、ユーザや上位プログラムからの指示に応じたコンテキストを実行させるためのＰＣ値を出力する。シーケンサ２０１から出力されたＰＣ値は、コンフィグレーションメモリ２０３に入力される。また、シーケンサ２０１は、ＰＣ値とともに、ＰＥアレー２１０にコンフィグレーションデータ読み込み要求信号としてＦＥＴＣＨＥＮを出力する。
【００２０】
さらに、シーケンサ２０１は、コンテキストの切り替えをトリガに条件分岐信号生成器２０２に条件分岐信号（ｐｒｅｄｉｃａｔｅ信号；以下、「ＰＲＤＩ（入力信号の場合）／ＰＲＤＯ（出力信号の場合）」という）の生成指示を出力する。このＰＲＤＩは、２ビットの信号であり、コンテキスト切り替えの開始および終了の指示に利用する。具体的には、ＰＲＤＩが「１１」であれば条件の成立、「１０」であれば条件の不成立、「０ｘ」であれば無効をあらわす。
【００２１】
条件分岐信号生成器２０２は、シーケンサ２０１から入力されたＰＲＤＩの生成指示に応じて、ＰＲＤＩを生成する。生成されたＰＲＤＩは、ＰＥアレー２１０のネットワーク回路２１３に出力される。
【００２２】
コンフィグレーションメモリ２０３には、あらかじめ記述されたコンテキストが格納されており、シーケンサ２０１から入力されたＰＣ値に応じて、該当するコンテキストを読み出す。そして、コンフィグレーションメモリ２０３からは、読み出されたコンテキストに記述されたコンフィグレーションデータ（ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｄａｔａ；ＣＦＧ）が、後述するＰＥアレー２１０に配置されているＰＥ２１１（ＰＥ２１１ａ〜ＰＥ２１１ｃ）や、カウンタ回路２１２（カウンタ回路２１２ａ〜２１２ｂ）に出力される。
【００２３】
ＰＥアレー２１０は、コンフィグレーションメモリ２０３によって読み出されたコンテキストに応じた処理を実行させる機能部であり、演算子として複数のＰＥ２１１（たとえばＰＥ２１１ａ〜ＰＥ２１１ｃ）と、カウンタ回路２１２（たとえばカウンタ回路２１２ａ〜２１２ｂ）が配置されているとともに、各演算子の入出力値（ｄａｔａ）の接続を切り替える可変接続部としてネットワーク回路２１３を備えている。
【００２４】
ＰＥ２１１は、コンテキストの記述に応じて所定の演算をおこなう。動的再構成回路１１０によってあるコンテキストを実行する場合には、ＰＥ２１１には、コンフィグレーションメモリ２０３から実行するコンテキストに記述されたコンフィグレーションデータが入力される。その後、ＰＥ２１１は、コンテキストが切り替わるまで、入力されたコンフィグレーションデータに応じた演算処理をおこなう。
【００２５】
カウンタ回路２１２は、コンテキストの記述に応じて所定のループ処理をおこなうとともに、このループ処理の実行回数をカウントする。このとき、カウンタ回路２１２によるカウント結果は、ＰＲＤＩとして、ネットワーク回路２１３に出力される。また、カウンタ回路２１２のハードウェア機能として下記の（ａ），（ｂ），（ｃ），（ｄ）の機能切り替えがコンフィグレーションデータによって設定できる。
【００２６】
（ａ）カウンタの起動方法
つぎに、タイミングでカウンタ回路２１２を起動させるかの設定について説明する。具体的には、自動起動と、トリガモードとの２種類の設定をおこなうことができる。自動起動は、シーケンサ２０１から出力されたＣＦＧ読み込み要求信号（ＦＥＴＣＨＥＮ）を受け付けてから指定サイクル後に動作を開始させるように設定する方法である。また、トリガモードは、条件分岐信号生成部２０２から出力されたＰＲＤＩが成立をあらわす「１１」であった場合に、ＰＲＤＩの入力をトリガとして動作を開始させる方法である。なお、トリガモードによる起動方法を採用する場合には、後述するカウンタ回路２１２の内部メモリ「Ｔｒｉｇｇｅｒ−ｍｏｄｅ」を有効状態に設定する。
【００２７】
（ｂ）有効カウンタ出力のインターバル設定
カウンタ回路２１２によるカウント実行を１クロックごとに実行させるか、もしくは所定のクロックごとに実行させるかの設定である。上述のように、１クロックごとにカウンタを動作させることも可能だが、インターバル設定をおこなうことにより、一定の間隔を置いてカウンタを動作させることもできる。なお、インターバル設定をおこなう場合には、後述するカウンタ回路２１２の内部メモリ「Ｉｎｔｅｒｖａｌ」に該当するコンフィグレーションデータを格納する。
【００２８】
（ｃ）出力モード設定
カウンタ回路２１２によって実行するカウント処理において、どのような条件の場合に、カウンタ回路２１２から外部（他のＰＥ２１１やカウンタ回路２１２もしくは他のクラスタ）への出力をおこなうかを設定する。具体的には、ノーマル出力モードとカスケード出力モードとの二つの出力モードが用意されており、後述するカウンタ回路２１２の内部メモリ「Ｏｕｔｐｕｔ−ｍｏｄｅ」に格納されたコンフィグレーションデータに基づいてモードを切り替える。
【００２９】
［ノーマル出力モード］
ループ処理動作時には成立を示す入力信号ＰＲＤＩ「１１」を出力し、ループ条件成立時にはＰＲＤＩ「１０」を出力する。また、ループ処理が停止時にはＰＲＤＩ「００」を出力する。また、後段に他のカウンタ回路２１２が接続されている場合には、アドレスカウンタを停止させるため、ループ条件成立時に、ＰＲＤＩ「１０」とともに、カスケード信号を１パルスアサートする。
【００３０】
［カスケード出力モード］
カスケード出力モードは、後段に同一のカウンタ回路２１２がカスケード接続されている場合に使用する。ループ処理動作時にはＰＲＤＩ「１０」を出力し、カウント処理によってカウント数が同カウンタ回路２１２のループパラメータの初期値に達したとき、ＰＲＤＩ「１１」を出力する。また、ループ処理停止時にはＰＲＤＩ「００」を出力する。
【００３１】
（ｄ）入力モード設定
カウンタ回路２１２が、どのような入力を受け付けた場合にカウント処理を実行するかを設定する。具体的には、ノーマル入力モードとカスケード入力モードとの二つの入力モードが用意されており、後述するカウンタ回路２１２の内部メモリ「Ｉｎｐｕｔ−ｍｏｄｅ」に格納されたコンフィグレーションデータに基づいてモードを切り替える。
【００３２】
［ノーマル入力モード］
カウンタ回路１１２にＰＲＤＩ「１１」が入力された場合にカウント処理を開始し、インターバル設定にしたがい、クロックに同期したカウント処理を進める。なお、上述した（ａ）の設定により自動起動に切り替えることもできる。
【００３３】
［カスケード入力モード］
カウンタ回路にＰＲＤＩ「１１」が入力されると、カウント値を更新する。また、ＰＲＤＩ「１０」が入力されるとカウント値の更新を停止する。また、他のカウンタ回路２１２にカスケード接続されている場合、前段のカウンタ回路２１２（カスケード出力モードに設定されたカウンタ回路）から出力されるＰＲＤＩを受け付けて、アドレスカウンタを進めるために使用する。
【００３４】
（カウンタ回路の構成）
つぎに、カウンタ回路２１２の構成について説明する。図３は、カウンタ回路の構成を示す回路図である。図３のように、カウンタ回路２１２は、コンフィグレーションレジスタ部３０１と、有効サイクル検出部３０２と、ループ開始値・終了値書き換え部３０３と、ループ制御部３０４と、出力レジスタ部３０５とを含んで構成される。また、カウンタ回路２１２の各機能部３０１〜３０５には下記のような端子が接続されている。
【００３５】
（入力端子）
１−１．ＰＲＤＩ
条件分岐信号（ＰＲＤＩ）の入力を受け付ける端子である。条件分岐信号「１１」が入力されると成立と判断し、入力モード設定（後述する内部レジスタの「Ｉｎｐｕｔ−ｍｏｄｅ」の設定）にしたがってカウント処理を実行させる。
【００３６】
１−２．ＤＩ０／ＶＩ０，ＤＩ１／ＶＩ１
ＤＩはデータ入力を受け付ける端子であり、ＶＩは、ＤＩに入力されたデータの有効／無効を示すｖａｌｉｄデータ（ｖａｌｉｄ信号の出力値）の入力を受け付ける端子である。ｖａｌｉｄデータが「１」のとき、同時に入力されたＤＩのデータは有効であると判断する。
【００３７】
１−３．ＣＩ
カスケード信号の入力を受け付ける端子である。このカスケード信号がアサート（Ｈｉ
ｇｈ状態の信号入力）されたときループカウントを終了する。また、ループカウントが停止されると、つぎのコンフィグレーションデータが設定されるまでループカウント再開は不可能となる。
【００３８】
１−４．ＣＦＧ，ＦＥＴＣＨＥＮ
ＣＦＧはコンフィグレーションデータの入力を受け付ける端子である。また、ＦＥＴＣＨＥＮは、ＣＦＧ読み込み要求信号（ＦＥＴＣＨＥＮ）の入力を受け付ける端子であり、起動要求信号がアサートされたときのみ、ＣＦＧに入力されたコンフィグレーションデータを後述する内部レジスタに取り込む。
【００３９】
（出力端子）
２−１．ＰＲＤＯ
条件分岐信号（ｐｒｅｄｉｃａｔｅ；ＰＲＤＯ）を出力する端子であり、ループ処理の動作中／停止時／ループ条件成立時のそれぞれの状態に応じ、出力モード設定（後述する内部レジスタの「Ｏｕｔｐｕｔ−ｍｏｄｅ」の設定）にしたがって条件分岐信号を出力する。
【００４０】
２−２．ＤＯ／ＶＯ
ＤＯはカウント値を示すデータを出力する端子である。また、ＶＯはＤＯから出力されるカウント値の有効／無効を示すｖａｌｉｄ信号を出力する端子である。なお、カウント処理の動作時、ｖａｌｉｄ信号は「１」となり、カウンタ停止時、ｖａｌｉｄ信号は「０」となる。
【００４１】
２−３．ＣＯ
カスケード信号を出力する端子であり、出力モードがノーマル出力モードに設定されている場合には、ループ条件が成立すると、カスケード信号を１パルスアサートする。また、出力モードがカスケード出力モードに設定されている場合には、後段に接続されているカウンタ回路の入力信号の出力端子となる。なお、カスケード出力モードの際に出力されるカスケード信号は、後段のカウンタ回路のカウント処理を停止させるために使用する。
【００４２】
つぎに、各機能部３０１〜３０５について説明する。まず、コンフィグレーションレジスタ部３０１は、コンテキスト開始時に各ＰＥに供給される１パルスのＦＥＴＣＨＥＮ信号をイネーブル信号として、上述したＣＦＧ端子から入力されたコンフィグレーションデータを以下の内部レジスタに取り込む。内部レジスタとは、具体的には、「Ｉｎｐｕｔ−ｍｏｄｅ」，「Ｉｎｔｅｒｖａｌ」，「Ｔｒｉｇｇｅｒ−ｍｏｄｅ」，「Ｓｔｅｐ」，「Ｅｎｄ」，「ＣＭＰ−ｍｏｄｅ」，「Ｏｕｔｐｕｔ−ｍｏｄｅ」，「Ｓｔａｒｔ」の各レジスタである。なお、これらの内部レジスタは、フリップフロップで構成される。
【００４３】
有効サイクル検出部３０２は、コンフィグレーションレジスタ部３０１の内部レジスタのうちの「Ｉｎｐｕｔ−ｍｏｄｅ」，「Ｉｎｔｅｒｖａｌ」，「Ｔｒｉｇｇｅｒ−ｍｏｄｅ」に取り込まれたコンフィグレーションデータの設定にしたがって、出力レジスタ部３０５にレジスタ更新のイネーブル信号（ｏｕｔｐｕｔ−ｅｎａｂｌｅ）を出力する。
【００４４】
具体的には、有効サイクル検出部３０１は、内部メモリ「Ｉｎｐｕｔ−ｍｏｄｅ」から出力された設定内容にしたがって、所定の条件の成立を示すＰＲＤＩ「１１」が入力された場合の動作を下記のように切り替える。なお、「１１」以外のＰＲＤＩが入力された場合には動作しない。
【００４５】
［ノーマル入力モードの場合］
ノーマル入力モードの場合、有効サイクル検出部３０２は、シーケンサ２０１から処理
内容の成立を示すＰＲＤＩ「１１」が入力されると、カウント処理を開始する。カウンタ動作開始後は、クロックに同期し、Ｉｎｔｅｒｖａｌに設定されたステップのタイミングでイネーブル信号（ｏｕｔｐｕｔ−ｅｎａｂｌｅ）を出力する。なお、コンフィグレーションレジスタ部３０１の「Ｔｒｉｇｇｅｒ−ｍｏｄｅ」が自動起動に設定されている場合には、上述した設定は無効となる。
【００４６】
［カスケード入力モードの場合］
カスケード入力モードの場合、有効サイクル検出部３０２は、上段に接続されているカウンタ回路２１２から所定の条件の成立を示すＰＲＤＩ「１１」が入力されるとループ変数を更新するためのイネーブル信号（ｏｕｔｐｕｔ−ｅｎａｂｌｅ）を出力する。
【００４７】
ループ開始値・終了値書き換え部３０３は、カウント処理が停止したときにデータ入力が有効な場合（ｖａｌｉｄ信号＝「１」のとき）、そのパラメータを内部レジスタ「Ｓｔａｒｔ」と「Ｅｎｄ」とにそれぞれ書き込む。なお、初期設定ではＤＩ０を内部レジスタ「Ｓｔａｒｔ」の書き換えの際に、ＤＩ１を内部レジスタ「Ｅｎｄ」の書き換え用に割り当てているが、コンフィグレーションデータの設定により割り当てを入れ替えることもできる。
【００４８】
ループ制御部３０４は、コンフィグレーションデータによってコンフィグレーションレジスタ部３０１の内部レジスタ「Ｓｔｅｐ」に設定された値に応じて、カウント値を次状態に更新する。また、同じく内部レジスタ「ＣＭＰ−ｍｏｄｅ」の設定にしたがってループ処理の終了判定をおこなう。この判定処理によってループ処理が終了した場合には、ループエンド信号（ｌｏｏｐ−ｅｎｄ）を出力レジスタ部３０５に出力する。
【００４９】
ここで、図４は、ループ制御部の構成を示すブロック図である。図４を用いてループ制御部３０４によって実行されるｆｏｒループ制御と条件判定について説明する。図４のように、ループ制御部３０４には、演算子４０１〜４０５が配置されている。
【００５０】
演算子４０１では、ループ変数ＤＯと、インクリメント値Ｓｔｅｐとが入力され、加算処理がおこなわれる。演算子４０１による加算結果は、ループパラメータ信号（ｌｏｏｐ−ｐａｒａｍ）として出力されるとともに、演算子４０２にも出力される。演算子４０２では、演算子４０１による加算結果と、ループ変数の終了値Ｅｎｄとの加減算がおこなわれ、演算結果は、演算子４０３および演算子４０４に出力される。
【００５１】
演算子４０２による演算結果が「０」の場合には、演算子４０３からフラグが出力され、演算結果が「０以外」の場合には、演算子４０４からフラグが出力される。演算子４０３もしくは演算子４０４のいずれかから出力されたフラグは、演算子４０５に入力される。
【００５２】
演算子４０５では、ループ成立判定モードを指定するＣＭＰ−ｍｏｄｅに応じて、入力されたフラグがループ成立条件を満足するか否かを判断する。演算子４０５によってループ成立条件を満足すると判断された場合には、ループエンド信号（ｌｏｏｐ−ｅｎｄ）が出力レジスタ部３０５に出力される。
【００５３】
図３の説明に戻り、出力レジスタ部３０５には、内部レジスタ「ＤＯ」，「ＶＯ」，「ＣＯ」，「ＰＲＤＤＯ」が用意されている。有効サイクル検出部３０２からイネーブル信号（ｏｕｔｐｕｔ−ｅｎａｂｌｅ）が入力された場合に、ループ制御部３０４からのループパラメータ信号（ｌｏｏｐ−ｐａｒａｍ）を「ＤＯ」に格納し、ＤＯとして、「ＶＯ」に格納されるｖａｌｉｄ信号（ＶＯ）とともに外部へ出力される。また、ループパラメータ信号（ｌｏｏｐ−ｐａｒａｍ）がアサートされていない場合には、「ＤＯ」の出力値の更新は停止し、同時に出力されるｖａｌｉｄ信号の値も「０」となる。
【００５４】
また出力レジスタ部３０５は、ループパラメータ信号（ｌｏｏｐ−ｐａｒａｍ）がアサートされている場合には、「ＰＲＤＤＯ」および「ＣＯ」に格納されたＰＲＤＩおよびＣＯの出力は、コンフィグレーションレジスタ部３０１の内部レジスタ「Ｏｕｔｐｕｔ−ｍｏｄｅ」設定に依存する。また、ループパラメータ信号（ｌｏｏｐ−ｐａｒａｍ）信号がアサートされない場合には、「ＰＲＤＤＯ」の出力値はすべてＰＲＤＩ「００」となる。以下、出力モードの設定ごとの処理について説明する。
【００５５】
［ノーマル出力モード］
ノーマル出力モードの場合、出力レジスタ部３０５は、ループエンド信号（ｌｏｏｐ−ｅｎｄ）がアサートされると、「ＰＲＤＤＯ」よりＰＲＤＩ「１１」を出力するとともに、ＣＯをアサートする。また、ループエンド信号（ｌｏｏｐ−ｅｎｄ）がアサートされていない場合には、「ＰＲＤＤＯ」よりＰＲＤＩ「１０」を出力する。
【００５６】
［カスケード出力モード］
カスケード出力モードの場合、出力レジスタ部３０５は、ループエンド信号（ｌｏｏｐ−ｅｎｄ）がアサートされると、出力レジスタ部３０５の「ＤＯ」に格納する値を、コンフィグレーションレジスタ部３０１の内部レジスタ「Ｓｔａｒｔ」の値に初期化する。また、「ＤＯ」の格納値をコンフィグレーションレジスタ部３０１の内部レジスタ「Ｓｔａｒｔ」に初期化した場合には、「ＰＲＤＤＯ」よりＰＲＤＯ「１１」を出力する。また、上述した動作以外のときには、「ＰＲＤＤＯ」よりＰＲＤＯ「１０」を出力する。
【００５７】
（カウンタ回路の動作）
つぎに、カウンタ回路２１２の入力モード（ノーマル、カスケード）、出力モード（ノーマル、カスケード）それぞれの設定に応じた具体的な動作内容について説明する。
【００５８】
・ノーマル入力モード−ノーマル出力モード
ここでは、ループ処理として「ｆｏｒ（ｉ＝０；ｉ＜１０２４；ｉ＋＋）」と記述されたシングルループの制御をおこなう場合、すなわち、ノーマル入力モード−ノーマル出力モードの際のカウンタ回路２１２の動作について説明する。ここで、インターバル設定は、０とすることで毎クロック毎にカウント値が更新される。
【００５９】
カウンタ回路２１２では、クラスタ内で生成する制御信号である２ビット信号ＰＲＤＩ「２’ｂｘｘ」が成立をあらわす「１１（２ｂ’１１）」となった場合にＰＲＤＩがトリガとなり、ｆｏｒループカウント動作が開始される。
【００６０】
ノーマル入力モード−ノーマル出力モードに設定されたカウンタ回路２１２の動作の特徴としては、ＰＲＤＩ「１１」でカウント処理の動作を開始させ、カウント値の有効・無効はｖａｌｉｄ信号（ＶＯ）の値で判断する。具体的にはカウント動作中はＶＯを「Ｈｉｇｈ」状態で出力させる。また、カウント処理の出力のインターバル設定を０とすることで、連続してアドレスカウントを実行させることができる。
【００６１】
また、カウント処理実行中はＰＲＤＩ「１１」を出力し、ループ条件成立時にはＰＲＤＩ「１０」を出力する。さらに、カウント処理の停止タイミングでは、カスケード信号（ＣＯ）を１パルスアサートする。
【００６２】
・ノーマル入力モード−カスケード出力モード
つぎに、ループ処理として「ｆｏｒ（ｉ＝０；ｉ＜３；  ｉ＋＋）｛…｝」と記述されている場合、すなわち、ノーマル入力モード−カスケード出力モードについて説明する。なお、カスケード出力モードは後段に同じｆｏｒループ処理をおこなうカウンタ回路２１２を接続する場合に設定される。すなわち、カスケード出力モードに設定することによって、後段のカウンタ回路２１２をＰＲＤＩ「１１」によって１ステップ進めることができる。
【００６３】
ノーマル入力モード−カスケード出力モードのカウンタ回路２１２の動作の特徴としては、ループ処理の動作中はループ初期値のタイミングでＰＲＤＩ「１１」を出力する。ループ処理の動作以外の動作時にはＰＲＤＩ「１０」を出力する。また、動作時にはＰＲＤＩ「００」を出力する。そして、カスケード信号入力（ＣＩ）がアサートされたときにカウント処理を停止させる。
【００６４】
・カスケード入力モード−ノーマル出力モード
つぎに、ループ処理として「ｆｏｒ（ｉ＝０；ｉ＜３；ｉ＋＋）｛…｝」と記述されている、すなわち、カスケード入力モード−ノーマル出力モードについて説明する。なお、カスケード入力モードは、同じｆｏｒループ処理をおこなうカウンタ回路２１２のカスケード出力モードに設定されたカウンタから出力されたＰＲＤＩを受け付けて外部ループの動作をおこなう場合に設定する。
【００６５】
カスケード入力モード−ノーマル出力モードのカウンタ回路の動作特徴としては、前段に接続されたカウンタ回路２１２からＰＲＤＩ「１１」が入力されると、カウント値を更新する。また、ＰＲＤＩ「１０」が入力されると、カウント値は保持され、ＰＲＤＩ「０ｘ」が入力されるとカウント値は保持される。しかし、ＰＲＤＩ「０ｘ」の入力時はｖａｌｉｄ信号（ＶＯ）が０となるため無効出力となる。また、ループ条件成立時は、にカスケード信号（ＣＩ）を出力する。
【００６６】
以上説明したように、カウンタ回路２１２では、コンテキストに基づいて、コンフィグレーションレジスタ部３０１によって出力信号の出力元、出力信号の出力先そして出力信号を前記出力先に出力する条件からなるループ処理の内容が設定される。設定されたループ処理は、ループ制御部３０４によって実行される。そして、出力レジスタでは、実行されたループ処理の実行回数をカウントし、カウントされた実行回数および前記条件に基づいて、出力信号が前記出力先に出力される。
【００６７】
（多重ループ処理）
つぎに、ソースプログラム１０１によって多重ループ処理が記述された場合の制御内容について説明する。
【００６８】
（１）多重ループ処理の制御
まず、多重ループ制御を実装する場合について説明する。図５は、ループ制御部による多重ループ処理を示す説明図である。たとえば、３重ループが記述されたソースプログラム５１０が与えられた場合、図５のような動的再構成回路５００が構成される。
【００６９】
動的再構成回路５００は、ループ０〜ループ２の３つのループカウンタによって構成されて、ループパラメータ５１０が設定される。このときループ０にはループ１がカスケード接続され、ループ１にはループ２がカスケード接続されている。これらのループ０〜２の入出力モードは、下記の様な設定になっている。
【００７０】
［各カウンタの入出力モード設定］
ループ０：ノーマル入力モード／カスケード出力モード
ループ１：カスケード入力モード／カスケード出力モード
ループ２：カスケード入力モード／ノーマル出力モード
【００７１】
図６は、多重ループ処理による入出力値を示すタイミングチャートである。なお、図６のタイミングチャートにおいて、ループ０〜ループ２のＰＲＤＩおよびＰＲＤＯが所定の条件の成立をあらわす「１１」の場合は、Ｔ（Ｔｒｕｅ）を、非成立をあらわす「１０」の場合には、Ｆ（Ｆａｌｓｅ）を、無効をあらわす「０ｘ」の場合にはＮ（Ｉｎｖａｌｉｄ）を示す。
【００７２】
図６のタイミングチャートに示すように、ループ０では、ループ変数ｋで記述されている最内ループのカウント処理がおこなわれる。ループ変数ｊで記述されているループ１では、ループ０からＴが出力されるとループカウントが開始される。このループ１もループ成立条件を満足すると、ループ変数ｉで記述されるループ２にＴを出力する。このループ２が最外ループとなる。
【００７３】
（２）ループパラメータの書き換え処理
つぎに、ループパラメータの書き換え処理について説明する。図７は、ループパラメータの書き換え処理の一例を示す説明図である。図７の動的再構成回路７００は、ループ１およびループ２が配置され、ループ２の出力先にはＰＥが接続されており、ＰＥによる演算結果は、ループ１に入力される。また、ループ１，２およびＰＥには、ループパラメータ７１０が設定される。
【００７４】
したがって、ＤＩ０およびＤＩ１に有効データが入力された場合には、ループ１，２の内部で設定されたループパラメータの書き換え処理をカウント処理と連動して実行させることができる。このような書き換え処理を備えることによって、Ｃ言語によって記載された汎用性の高い記述をそのまま動的再構成回路７００に適用させることができる。
【００７５】
以上説明したように、カウンタ回路２１２を備えた動的再構成回路１１０では、特定のアプリケーションに限定されず、高級言語によって記述されたソースプログラムによって設定されたループ処理をＰＥに適用できることから、汎用性の高いプログラムの実装が可能となる。また、条件分岐信号（ＰＲＤＩもしくはＰＲＤＯ）の値をカウント処理の開始／終了に反映させることによってコンテキストの切り替えを適切に実現することができる。
【００７６】
（動的再構成回路用のコンテキストの作成）
本実施の形態では、上述したような構成の動的再構成回路用のコンテキストを作成して、多重ループを含む処理をシームレスに実行させる。したがって、以下は、コンパイラ１００によるコンテキストの作成について説明する。通常、多重ループを含むソースプログラム１０１から、動的再構成回路１１０のコンテキスト１０２を作成する際には、下記の４ステップの処理が必要となる。
【００７７】
１．ソースプログラムの中間表現への翻訳
２．制御依存グラフの作成
３．中間表現のリストスケジューリング
４．リストスケジューリング結果をコンテキストとして出力
【００７８】
＜１．ソースプログラムの中間表現への翻訳＞
まず、Ｃ言語プログラムなどの高級言語の状態のソースプログラム１０１を一般的な構文解析技法を用いてコンパイラ１００内部の中間表現に翻訳する。ここで、図８は、プログラムの中間表現の一例を示す説明図である。図８のデータ列８００のように、中間表現はコンパイラ内部での操作に適した仮想的なコンピュータの命令の列から成り立っている。
【００７９】
なお、構文解析技法は、公知の技術であるため、詳細な説明は省略するが、たとえば、参考文献１：「Ｍｏｄｅｒｎ  Ｃｏｍｐｉｌｅｒ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｉｎ  Ｊａｖａ（Ａｎｄｒｅｗ  Ｗ．  Ａｐｐｅｌ，  Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ，１９９８）」などに詳しく記載されている（第３章「Ｐａｒｓｉｎｇ」参照）。また、中間表現に関しても公知の技術であるため詳細な説明は省略するが、たとえば、参考文献２：「Ａｄｖａｎｃｅｄ  Ｃｏｍｐｉｌｅｒ  Ｄｅｓｉｇｎ  ａｎｄ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ（Ｓｔｅｖｅｎ  Ｓ．  Ｍｕｃｈｎｉｃｋ，  Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｉｎｇ，１９９７）」などに詳しく記載されている（第４章「Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｐｒｅｓｅｎｔａｔｉｏｎｓ」参照）。
【００８０】
＜２．制御依存グラフの作成＞
つぎに、中間表現から制御依存グラフを生成する。制御依存グラフは、ある命令がどのような条件の下で実行されるかの依存関係を示したものである。たとえば、図９は、制御依存グラフの一例を示す説明図である。下記のようなプログラム片が記述されていた場合、中間表現に変換された後、図９に示すような制御依存グラフが生成される。
【００８１】
ＩＦ  （Ａ）  ＴＨＥＮ  Ｘ；
ＥＬＳＥ  Ｙ；
【００８２】
上記のプログラム片は、処理Ｘ，Ｙの実行が処理Ａの実行結果の真偽によって制御されることをあらわす。動的再構成回路１１０の場合、処理Ａを実行するＰＥから実行結果に応じて出力されたＰＲＤＯ信号が２ｂ‘１１であるか２ｂ‘１０であるかによって、処理Ｘ，Ｙを実行するＰＥ群を制御することができる。すなわち、条件文Ａが成立した場合にのみ、Ｘを実行するという制御依存を、ＸがＡの出力するＰＲＤＯデータに依存するというデータ依存に変換できる。したがって、ソースプログラム１０１内の命令の依存関係をすべてデータ依存にすることができる。この制御依存グラフの情報を中間表現に反映させることによって、制御の流れの変更・分岐のない命令列を構成することができる。
【００８３】
なお、中間表現からの制御依存グラフを生成する技術も広く知られているため、ここでは詳細な説明は省略するが、たとえば、参考文献３：「Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｉｌｅｒｓ  ｆｏｒ  Ｐａｒａｌｌｅｌ  Ｃｏｍｐｕｔｉｎｇ（Ｍｉｃｈａｅｌ  Ｗｏｌｆｅ，  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ，１９９６）」などに詳しく記載されている（第３章３節「Ｃｏｎｔｒｏｌ  Ｄｅｐｅｎｄｅｎｃｅ」参照）。
【００８４】
＜３．中間表現のリストスケジューリング＞
つぎに、中間表現に基づいて、各命令をどのＰＥで実行するかを決定するためにリストスケジューリングをおこなう。なお。リストスケジューリングに関しては上記参考文献２の第１７章「Ｃｏｄｅ  Ｓｃｈｅｄｕｌｉｎｇ」に詳しく記載されているが、簡単に説明すると、下記のような手順によって実行される。
【００８５】
１）中間表現に変換されたソースプログラム１０１内の命令のうち、依存する入力データがないか、あるいは、すでに生成されているものをＲＥＡＤＹと呼ぶ集合に含める。
【００８６】
２）ＲＥＡＤＹから命令を１つ選択して取り除き、この命令を命令Ｉとする。
【００８７】
３）命令Ｉを実行可能なＰＥを１つ選択し、ＰＥＩと呼ぶ（選択できるＰＥがなければ、翻訳失敗として異常終了する）。
【００８８】
４）命令Ｉが１つ以上の入力データに依存するなら、その入力データの中でもっとも遅くＰＥＩに到着するものを見つけ、その到着時刻をＴとする。
【００８９】
５）命令Ｉの残りの入力データのＰＥＩへの到着時刻がＴとなるようにネットワーク配線中に遅延素子を挿入する。
【００９０】
６）ＰＥＩが命令Ｉを実行する時刻をＴに設定し、ＰＥＩの演算実行時間Ｃを加算してＰＥＩの出力データの時刻を「Ｔ＋Ｃ」に決定する。
【００９１】
７）命令Ｉの実行後に、依存する入力データのすべてが生成された命令があれば、その命令をＲＥＡＤＹに入れる。
【００９２】
８）上記２）〜７）をＲＥＡＤＹに命令が残っている限り繰り返す。
【００９３】
＜４．スケジューリング結果としてコンテキストを出力する＞
最後に、上記３．のリストスケジューリングの結果を参照して、ソースプログラム１０１を構成する各命令に対し、必要なＰＥが決定する。そして、決定したＰＥについて、それぞれ、他のＰＥとの接続を設定したコンテキストを作成し、コンフィグレーションデータ１２０として出力する。
【００９４】
以上説明したリストスケジューリングがコンテキスト１０２を作成する際の一般的な手順である。上述の手順の場合、ＰＥによってある命令を実行させる実行時刻を算出するには、その命令に入力されるすべてのデータの生成時刻が確定していなければならない。このような制約がある場合、動的再構成回路１１０のように、多重ループを実行させる回路の場合、制御依存のある命令同士のデータの伝送に問題を起こすことがある。
【００９５】
ここで、図１０は、ループ命令を含んだソースプログラムの一例を示す説明図である。図１０に示したソースプログラム１０００は、図５に示したソースプログラム５１０を一部改変したプログラムである。ソースプログラム５１０との最大の違いは、最外ループの終了値（ループｉの変数［ｉ＿ｌｉｍｉｔ］）が翻訳時に決定される定数ではなく、実行時の演算の結果決定される変数が設定されている点である。
【００９６】
図８において、中間表現の一例として挙げたデータ列８００は、ソースプログラム１０００を中間表現に変換したものである。また、図１１は、従来のＰＥの配置例を示す説明図である。ソースプログラム１０００の中間表現であるデータ列８００によって、図１１のような制御依存グラフが作成される。
【００９７】
ただし、多重の完全入れ子状態のループ命令においては、図２に示したカウンタ回路２１２の構成と合わせるため、最内ループを制御するカウンタ回路がより外側のカウンタ回路を制御するものとする。このために、多重の完全入れ子ループはループ交換をおこなう。なお、完全入れ子ループとループ交換に関しては上記参考文献３の第９章５節「Ｌｏｏｐ  Ｉｎｔｅｒｃｈａｎｇｉｎｇ」に詳しく記載されている。
【００９８】
図１１の制御依存グラフにおいて、“ｓｔａｒｔ”は動的再構成回路１１０をスタートさせる命令であり、通常のプログラムにおける開始ノードである。したがって、グラフ内のすべての命令は“ｓｔａｒｔ”に制御依存する。また、“ｓｔａｒｔ”は、依存する入力データが不要なので、リストスケジューリング開始時にすでにＲＥＡＤＹに入っているため、実行時刻Ｔ０としてＰＥに割り当てられる。
【００９９】
さらに、ループｋの開始値・終了値が定数であるため、ＰＥｋは“ｓｔａｒｔ”がスケジュールされれば、一意的にＲＥＡＤＹに入れることができる。したがって、実行時刻Ｔ１において実行開始可能となる。また、ループｊも開始値・終了値が定数であるため、ＰＥｊが依存する入力データはＰＥｋからのループエンド信号のみとなる。したがって、実行時刻Ｔ２において実行開始可能となる。
【０１００】
このとき、グラフ内のＰＥｉは、他のＰＥにデータ依存する。したがって、実行開始可能な実行時刻がＴ３（ＰＥｊの実行時刻Ｔ２＋１）より遅くなる。したがって、リストスケジューリングによって、ＰＥｊからの入力に対して遅延素子（ｐｒｅｄ−ｄｅｌａｙ）が挿入される。
【０１０１】
しかしながら、遅延素子を挿入した場合、動的再構成回路１１０は、図６のタイミングチャートに示したようなタイミングを構成できず、誤動作を起こす可能性がある。ここで、図１２は、３重ループの入出力値を示すタイミングチャートである。たとえば、図６では、ループｊを実行するＰＥから４クロック目、１３クロック目、２２クロック目に出力されたＰＲＤＯ信号を、ループｉを実行するＰＥが同じクロックで受け取っている。
【０１０２】
ところが、図１１のように遅延素子が挿入されてしまうと、図１２のタイミングチャートがあらわすように、上記の処理がすべて１サイクル遅れた５クロック目、１４クロック目、２３クロック目で実行されることになる。このタイミングのズレにあわせて、ループｉを実行するＰＥの最初のデータ出力も、本来５クロック目で出力するように設計していた。ところが、６クロック目に出力されてしまう。このようにデータの出力タイミングにズレが生じることによって、動的再構成回路１１０は、ソースプログラム１０１の設計意図通りに動かなくなってしまう恐れがあった。
【０１０３】
そこで、本実施の形態にかかるコンパイラ１００では、図１０のソースプログラム１０００を実行させる場合であっても、設計意図に沿ったループ処理を実行させるコンテキスト１０２を作成する。以下には、本実施の形態にかかるコンパイラ１００について詳しく説明する。
【０１０４】
（コンパイラのハードウェア構成）
まず、本実施の形態にかかるコンパイラ１００のハードウェア構成について説明する。図１３は、コンパイラ１００のハードウェア構成を示すブロック図である。図１３において、コンパイラ１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１３０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１３０３と、磁気ディスクドライブ１３０４と、磁気ディスク１３０５と、通信Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１３０６と、入力デバイス１３０７と、出力デバイス１３０８と、を備えている。また、各構成部はバス１３１０によってそれぞれ接続されている。
【０１０５】
ここで、ＣＰＵ１３０１は、コンパイラ１００の全体の制御を司る。ＲＯＭ１３０２は、ブートプログラムや、本実施の形態にかかるコンテスト作成処理を実現するための見積もり支援プログラムなどの各種プログラムを記憶している。ＲＡＭ１３０３は、ＣＰＵ１３０１のワークエリアとして使用される。磁気ディスクドライブ１３０４は、ＣＰＵ１３０１の制御にしたがって磁気ディスク１３０５に対するデータの更新／参照を制御する。磁気ディスク１３０５は、磁気ディスクドライブ１３０４の制御で書き込まれたデータを記憶する。なお、図１３のハードウェア構成では、記録媒体として、磁気ディスク１３０５を用いているが、光ディスクや、フラッシュメモリなど他の記録媒体を利用してもよい。
【０１０６】
通信Ｉ／Ｆ１３０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク（ＮＥＴ）１３０９に接続され、このネットワーク１３０９を介して他のコンパイラ１００やその他の外部装置に接続される。そして、通信Ｉ／Ｆ１３０６は、ネットワーク１３０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。通信Ｉ／Ｆ１３０６の構成例としては、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【０１０７】
入力デバイス１３０７は、コンパイラ１００に対しての外部からの入力を受け付ける。入力デバイス１３０７としては、具体的には、キーボード、マウスなどが挙げられる。なお、コンパイラ１００によって、コンテキスト１０２を作成する際の元のソースプログラム１０１は、ＲＯＭ１３０２、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域にあらかじめ格納されていてもよいが、入力デバイス１３０７から入力されて、上述の記憶領域に格納されてもよい。
【０１０８】
キーボードの場合、たとえば、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスの場合、たとえば、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。また、ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【０１０９】
出力デバイス１３０８は、コンパイラ１００によって見積もられた各種見積もり結果や、シミュレーションの実行結果などを出力する。出力デバイス１３０８としては、具体的には、ディスプレイ、プリンタなどが挙げられる。
【０１１０】
ディスプレイの場合、たとえば、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイとしてさらに、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。また、プリンタの場合、たとえば、画像データや文書データを印刷する。さらに、レーザプリンタやインクジェットプリンタを採用することができる。
【０１１１】
（コンパイラの機能的構成）
つぎに、コンパイラ１００の機能的構成について説明する。図１４は、コンパイラの機能的構成を示すブロック図である。図１４のように、コンパイラ１００は、機能部として特定部１４０１と、抽出部１４０２と、到達時間算出部１４０３と、選択部１４０４と、差分算出部１４０５と、作成部１４０６と、受付部１４０７と、を含む構成である。この制御部となる機能（特定部１４０１〜受付部１４０７）は、具体的には、たとえば、図１３に示したＲＯＭ１３０２、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶された検証支援プログラムをＣＰＵ１３０１に実行させることにより、または、通信Ｉ／Ｆ１３０６により、その機能を実現する。
【０１１２】
特定部１４０１は、ソースプログラム１０１の制御依存グラフからソースプログラム１０１内の命令の制御依存関係を特定する機能を有する。ソースプログラム１０１から制御依存グラフを作成するためのツールは、公知のものを適用する。また、制御依存グラフの作成処理は、外部の装置によって実行させてもよい。なお、特定部１４０１によって特定された制御依存関係に関する情報は、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１３】
抽出部１４０２は、ソースプログラム１０１に含まれているループ命令のうち、特定部１４０１によって制御依存関係があると特定されたループ命令群を抽出する機能を有する。なお、抽出部１４０２によって抽出された命令群は、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１４】
到達時間算出部１４０３は、特定部１４０１によって特定された制御依存関係に基づいて、抽出部１４０２によって抽出されたループ命令群の各ループ命令に入力されるデータの到達時間を算出する機能を有する。データの到達時間の算出には、制御依存グラフを利用する。制御依存グラフにおいて、“ｓｔａｒｔ”と呼ばれる命令は、動的再構成回路１１０におけるコンテキスト１０２ごとの実行開始信号を発生する回路の起動処理に対応する。したがって、“ｓｔａｒｔ”の実行時刻Ｔ０を基準として、その時刻から入力データに到達するまでの経路上で通過するＰＥの処理時間を累計することによって到達時間が算出される。なお、ここでは、Ｔ０を基準として加算した到達時間を求めているが、到達時刻Ｔｘを求めてもよい。この場合は、Ｔ０との差分が到達時刻となる。なお、到達時間算出部１４０３によって算出された到達時間は、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１５】
選択部１４０４は、到達時間算出部１４０３による算出結果に基づいて、各ループ命令に入力されるデータのうち、ループ命令への到達時間が最も長いデータを選択する機能を有する。なお、選択部１４０４によって選択されたデータは、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１６】
差分算出部１４０５は、選択部１４０４によって選択されたデータの到達時間と、このデータが入力されるループ命令と依存関係のあるループ命令の実行が終了するまでの時間との差分を算出する機能を有する。差分算出部１４０５によって算出された差分は、依存関係のあるループ命令の命令が実行されたタイミングと、選択されたデータが到達するまでの時間のズレをあらわしている。すなわち、現在のタイミング設定では、この差分だけ待機時間が発生してしまうことを意味する。なお、差分算出部１４０５によって算出された差分に関する情報は、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１７】
作成部１４０６は、ループ命令群の前段に差分算出部１４０５によって算出された差分の遅延を発生させる遅延素子を配置したコンテキスト１０２を作成する機能を有する。ここで配置される遅延素子は、上述した差分によって特定された待機時間を解消するための機構である。また、遅延素子は、命令群の前段に配置されるため、命令群内の制御依存があるループ命令同士のタイミングは変化しない。なお、作成されたコンテキスト１０２は、ＲＡＭ１３０３、磁気ディスク１３０５などの記憶領域に記憶される。
【０１１８】
以上説明した機能部によって、コンパイラ１００は、正確な動作を保証するコンテキスト１０２を作成することができる。また、上述の処理では、制御依存するループ命令同士を特定してタイミング調整をおこなっていたが、利用者や上位システムなど、外部から指定された命令群について、同様に命令群内のタイミングの変化が生じることなく、待機時間を削減させるコンテキスト１０２を作成してもよい。
【０１１９】
この場合、受付部１４０７を利用する。受付部１４０７は、ソースプログラム１０１内の命令のうち、制御依存関係のある命令群の指定を受け付ける機能を有する。受付部１４０７によって、命令群の指定を受け付けた場合、到達時間算出部１４０３は、特定部１４０１によって特定された制御依存関係に基づいて、この命令群の各ループ命令に入力されるデータの到達時間を算出する。以降の処理は、ループ命令による命令群を抽出した場合と同様に扱われる。また、抽出部１４０２によって、複数の命令群が抽出された場合も、各命令群についてそれぞれ遅延素子を配置したコンテキスト１０２が作成される。
【０１２０】
このように、本実施の形態にかかるコンパイラ１００の場合、中間表現のリストスケジューリング時にある命令についてそれぞれ、制御依存する命令群を特定して、これら命令群内の命令間で遅延素子を挟むことなく実行可能なタイミングに調整したコンテキスト１０２を作成する。
【０１２１】
つぎに、上述した構成のコンパイラ１００によるコンテキスト１０２作成のためのリストスケジューリングの手順について具体例を挙げて説明する。以下に説明する手順は、上述した＜３．中間表現のリストスケジューリング＞を本実施の形態にあわせて一部修正したものである。
【０１２２】
１）中間表現中の命令の内、依存する入力データがないか、あるいはすでに生成されているものをＲＥＡＤＹに含める。
【０１２３】
２）ＲＥＡＤＹから命令を１つ選択する。
【０１２４】
３）上記２）において選択した命令（Ｉ１）が、ループ構成命令（ｆｏｒ−ｌｏｏｐ）であり、なおかつ、Ｉ１に制御依存する別のループ構成命令（Ｉ２）が存在する場合、Ｉ１に追加してＩ２も選択する。さらにＩ２に対して、その出力データを参照する別のループ構成命令等々（Ｉ-３…Ｉｎ）が存在する場合が考えられる。その場合にはそれらの命令すべてを選択する。
【０１２５】
４）選択した命令Ｉ-１…Ｉｎを実行可能なＰＥをそれぞれの命令に対し、１つずつ選択する（選択可能なＰＥがなければ、翻訳失敗として異常終了する）。
【０１２６】
５）命令Ｉ-１が１つ以上の入力データに依存する場合、その入力データの中で最も遅くＰＥＩ-１に到着するデータの到着時刻をＴｃ１とする。
【０１２７】
６）命令Ｉ２は命令Ｉ１に制御依存するため、ＰＥＩ２が命令Ｉ２を実行する時刻は最も早くてＴｃ１＋Ｃとなる。そして、命令Ｉ２が命令Ｉ-１の出力データ以外に１つ以上の入力データに依存する場合、その入力データの中で最も遅くＰＥＩ-２に到着するデータの到着時刻とＴｃ１＋Ｃとを比較する。この比較結果において、より大きいものをＴｃ２とする。
【０１２８】
７）上記６）と同様にして、Ｔｃｎを求め、その時刻をＴｎとする。
【０１２９】
８）Ｔｃｎ−１とＴｎ−Ｃを比較し、より大きいものをＴｎ−１とする。同様にして、Ｔｎ−２からＴ１までを求める。
【０１３０】
９）命令Ｉ-１…命令Ｉ-ｎのその他の入力データのＰＥＩ-１…ＰＥＩ-ｎへの到着時刻がそれぞれＴ１…Ｔｎとなるように制御依存グラフによってあらわされた配線中に遅延素子を挿入する。
【０１３１】
１０）ＰＥＩ-１…ＰＥＩ-ｎがそれぞれ命令Ｉ-１…命令Ｉ-ｎを実行する時刻をＴ１…Ｔｎに設定し、ＰＥの演算実行時間Ｃを加算してＰＥＩ-１…ＰＥＩ-ｎの出力データの時刻をそれぞれＴ１＋Ｃ…Ｔｎ＋Ｃに決定する。
【０１３２】
１１）命令Ｉ-１…命令Ｉ-ｎの実行後に、依存する入力データすべてが生成された命令が中間表現の中にあれば、その命令をＲＥＡＤＹに入れる。
【０１３３】
１２）上記２）〜１１）の処理をＲＥＡＤＹに命令が残っている限り繰り返す。
【０１３４】
そして、図１５は、本実施の形態にかかるコンテキスト作成処理によるＰＥの配置例を示す説明図である。以上のように修正した＜３．中間表現のリストスケジューリング＞によってコンテキスト１０２を作成する場合、図１５のような制御依存グラフが作成される。
【０１３５】
図１５のように、最初のループ命令「ｆｏｒ−ｌｏｏｐ（ｋ）」をＲＥＡＤＹから取り出したところで、この命令に制御依存する他のループ命令「ｆｏｒ−ｌｏｏｐ（ｊ）」、さらにループ命令「ｆｏｒ−ｌｏｏｐ（ｊ）」に制御依存するループ命令「ｆｏｒ−ｌｏｏｐ（ｉ）」があることが分かる。ループ命令「ｆｏｒ−ｌｏｏｐ（ｉ）」は、データ依存する入力データを持ちそのデータの到着時刻はＴ４である。したがって、ループ命令「ｆｏｒ−ｌｏｏｐ（ｉ）」の実行時刻がＴ４に決定される。同様にループ命令「ｆｏｒ−ｌｏｏｐ（ｊ）」の実行時刻がＴ３、ループ命令「ｆｏｒ−ｌｏｏｐ（ｋ）」の実行時刻がＴ２と決定されるためループ命令群と“ｓｔａｒｔ”の間に遅延素子が挿入されている。
【０１３６】
（コンパイルの手順）
つぎに、上述したコンテキスト作成処理を含んだコンパイラ１００の具体的なコンパイルの手順について説明する。図１６は、コンパイラによるコンパイルの手順を示すフローチャートである。図１６のフローチャートにおいて、コンパイラ１００は、まず、処理対象となるソースプログラム１０１を読み込む（ステップＳ１６０１）。そして、コンパイラ１００は、読み込んだソースプログラム１０１を解析して中間表現に変換する（ステップＳ１６０２）。
【０１３７】
つぎに、ステップＳ１６０２によって変換された中間表現から制御依存グラフを作成し（ステップＳ１６０３）、作成した制御依存グラフを利用してリストスケジューリングをおこなう（ステップＳ１６０４）。最後に、ステップＳ１６０４におけるリストスケジューリング結果に応じてソースプログラム１０１内の命令をＰＥに割り当てて（ステップＳ１６０５）、一連の処理を終了する。
【０１３８】
（ＰＥ割り当て処理の手順）
つぎに、図１６のステップＳ１６０４およびＳ１６０５におけるＰＥ割り当て処理について詳しく説明する。図１７は、ＰＥ割り当て処理の手順を示すフローチャートである。
また、図１８は、ＰＥ割り当て処理に用いる各種データのデータ構造を示す説明図である。
【０１３９】
図１７のフローチャートにおいて、まず、ＲＥＡＤＹから命令を１つ取り出す（ステップＳ１７０１）。その後、取り出した命令に対する入力データがすべて揃っているか否かを判断する（ステップＳ１７０２）。ここで、入力データが揃っていないと判断された場合（ステップＳ１７０２：Ｎｏ）、ステップＳ１７０１の処理に戻り、入力データが揃うまで待機状態となる。
【０１４０】
ステップＳ１７０２において、入力データがすべて揃ったと判断された場合（ステップＳ１７０２：Ｙｅｓ）、つぎに、処理中の命令がループ構成命令であるか否かを判断する（ステップＳ１７０３）。ここで、ループ構成命令でないと判断された場合（ステップＳ１７０３：Ｎｏ）、以下の処理をスキップして、ステップＳ１７０７に移行する。
【０１４１】
ステップＳ１７０３において、処理中の命令がループ構成命令であると判断された場合（ステップＳ１７０３：Ｙｅｓ）、つぎに、制御依存している他のループ構成命令があるか否かを判断する（ステップＳ１７０４）。すなわち、ステップＳ１７０４によって、多重ループ構成か否かを判断する。
【０１４２】
ステップＳ１７０４において、制御依存している他のループ構成命令がないと判断された場合には（ステップＳ１７０４：Ｎｏ）、そのまま、ステップＳ１７０７の処理に移行する。一方、制御依存している他のループ構成命令があると判断された場合（ステップＳ１７０４：Ｙｅｓ）、制御依存しているループ構成命令を処理対象として取り出す（ステップＳ１７０５）。
【０１４３】
その後、処理中のすべての命令の入力データが揃っているか否かを判断する（ステップＳ１７０６）。ここで、データが揃うまでステップＳ１７０１に戻り待機状態となる（ステップＳ１７０６：Ｎｏのループ）。一方、ステップＳ１７０６において、すべての入力データが揃ったと判断された場合（ステップＳ１７０６：Ｙｅｓ）、入力データのうち、最も遅く入力されるデータを特定する（ステップＳ１７０７）。
【０１４４】
ステップＳ１７０７において、最も遅く入力されるデータが特定されると、特定されたデータにあわせて他のデータの入力にディレイを挿入する（ステップＳ１７０８）。最後に、すべての命令がＰＥに割り当てられたか否かを判断する（ステップＳ１７０９）。そして、すべての命令がＰＥに割り当てられるまで（ステップＳ１７０９：Ｎｏ）ステップＳ１７０１に戻り、命令の割り当てを繰り返す。そして、すべての命令がＰＥに割り当て
られたと、判断されると（ステップＳ１７０９：Ｙｅｓ）、そのまま一連の処理を終了する。
【０１４５】
なお、コンパイラ１００は、上述したステップＳ１６０５および図７のフローチャートによって命令の割り当てをおこなっているが、このとき、具体的には、図１８に示したｃｌａｓｓ  ＰｒｏｃｅｓｓｉｎｇＥｌｅｍｅｎｔというデータ構造を参照している。ｃｌａｓｓ  ＰｒｏｃｅｓｓｉｎｇＥｌｅｍｅｎｔには、実際のハードウェアが用意しているＰＥの個数をあらわしている。また、これらのデータ構造の＿ｋｉｎｄというメンバはそれぞれ実際のハードウェアの持つＰＥの種類を反映して設定されている。したがって、たとえば、実際のハードが加減算用のＰＥを８個、乗算用のＰＥを２個持っているとすると、コンパイラ１００の内部データであるｃｌａｓｓＰｒｏｃｅｓｓｉｎｇＥｌｅｍｅｎｔも１０個のうち８個は＿ｋｉｎｄにＡＤＤ＿ＳＵＢという種別が設定され、残り２個はＭＵＬＴという種別が設定される。
【０１４６】
また、これらの内部データの＿ｉｎｓｔｒｕｃｔｉｏｎはどの命令もあらわさない状態、＿ｕｓｅｄ＿ｐはクリアされた状態に初期設定されている。したがって、命令Ｉを実行可能なＰＥの選択時に、コンパイラは内部のｃｌａｓｓＰｒｏｃｅｓｓｉｎｇＥｌｅｍｅｎｔの中で＿ｕｓｅｄ＿ｐがクリアされており、かつ、＿ｋｉｎｄが命令Ｉを実行可能な種別であるようなものを検索する。そのようなＰＥが１つ以上見つかれば、そのうちの任意の１個のＰＥを選択し、＿ｕｓｅｄ＿ｐをセットするため、＿ｉｎｓｔｒｕｃｔｉｏｎは命令Ｉを挿入するように更新することができる。
【０１４７】
以上説明したように、本実施の形態にかかるコンテキスト作成プログラム、コンパイラおよびコンテキスト作成方法によれば、制御関係のある命令同士が命令群として抽出される。そして、これら命令群単位で入力されるデータの到達時間を算出し、命令群の前段に算出した遅延時間を解消するための遅延素子を配置する。したがって、命令群を構成する命令同士の制御依存を生じるデータが入力されるタイミングはソースプログラム１０１の設計意図が保持され、なおかつ、データの入力タイミングが調整されたコンテキストが作成される。したがって、多重ループ命令などタイミング設定の厳格な命令を含んだソースプログラムであっても、正確な動作を保証するコンテキストを作成する
【０１４８】
なお、本実施の形態で説明したコンテキスト作成方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本コンテキスト作成プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本コンテキスト作成プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１４９】
また、本実施の形態で説明したコンパイラ１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したコンパイラ１００の機能（特定部１４０１〜受付部１４０７）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、コンパイラ１００を製造することができる。
【符号の説明】
【０１５０】
１００  コンパイラ
１１０  動的再構成回路
１０１  ソースプログラム
１０２  コンフィグレーションデータ（コンテキスト）
１４０１  特定部
１４０２  抽出部
１４０３  到達時間算出部
１４０４  選択部
１４０５  差分算出部
１４０６  作成部
１４０７  受付部
【図１】
2010231635.tif 000003
【図２】
2010231635.tif 000004
【図３】
2010231635.tif 000005
【図４】
2010231635.tif 000006
【図５】
2010231635.tif 000007
【図６】
2010231635.tif 000008
【図７】
2010231635.tif 000009
【図８】
2010231635.tif 000010
【図９】
2010231635.tif 000011
【図１０】
2010231635.tif 000012
【図１１】
2010231635.tif 000013
【図１２】
2010231635.tif 000014
【図１３】
2010231635.tif 000015
【図１４】
2010231635.tif 000016
【図１５】
2010231635.tif 000017
【図１６】
2010231635.tif 000018
【図１７】
2010231635.tif 000019
【図１８】
2010231635.tif 000020