(57)【要約】【課題】データ駆動型プロセッサとノイマン型プロセッサが協調動作するためのプログラムを開発する。【解決手段】拡張Ｃ言語を用いて記述されたＤＦＣ記述アプリケーションソース３は、コンパイル処理４およびリンク処理５によりデータ駆動型プロセッサおよびノイマン型プロセッサのそれぞれにおいて実行可能な形式のモジュール６と７に変換される。この変換に際して、結合情報に従いデータフローグラフを結合してアセンブラソースコードに変換して、アセンブルしてモジュール６が出力される。また、結合情報を含むＤＦＣ記述アプリケーションソース３の構造情報を用いて、中間モジュールからデータフローグラフの記述を削除して実行制御モジュールを生成して、これからモジュール７を生成する。【選択図】図１
2007128343.tif 000002
【特許請求の範囲】
【請求項１】
Ｃ言語に対してデータ駆動型プロセッサ用のデータフローを記述するための関数が定義された拡張Ｃ言語を用いて記述されたソースプログラムを入力してコンパイルして、中間コードからなる中間モジュールと、当該ソースプログラムにおいて記述された前記関数で示されるデータフローグラフ間の結合を指示する結合情報を含み、且つ当該ソースプログラムの構造を示す構造情報とを出力するコンパイル手段と、
前記データ駆動型プロセッサで実行可能な形式のデータ駆動型モジュールを生成するデータ駆動型モジュール生成手段と、
ノイマン型プロセッサで実行可能な形式のノイマン型モジュールを生成するノイマン型モジュール生成手段とを備えて、
前記データ駆動型モジュール生成手段は、
前記構造情報を入力して、入力した前記構造情報の前記結合情報に従い、予め準備されたグラフライブラリからデータフローグラフを読出し、且つ読出された前記データフローグラフを結合するデータフローグラフ生成手段と、
前記データフローグラフ生成手段により生成された前記データフローグラフをアセンブラソースコードに変換して出力するアセンブラソース処理手段と、
前記アセンブラソース処理手段により出力された前記アセンブラソースコードをアセンブルして前記データ駆動型モジュールに変換して出力するアセンブル手段とを含み、
前記ノイマン型モジュール生成手段は、
前記中間モジュールと前記構造情報とを入力して、前記構造情報に基づき前記中間モジュールから前記データフローグラフの記述を削除して、前記ノイマン型プロセッサでの前記Ｃ言語のプログラムの実行を制御するための実行制御モジュールを生成する実行制御モジュール生成手段と、
前記実行制御モジュール生成手段により生成された前記実行制御モジュールから、前記構造情報に基づき前記ノイマン型モジュールを生成する手段とを含む、情報処理装置。
【請求項２】
前記コンパイル手段は、
前記ソースプログラム中の全ての前記関数それぞれについて、他の関数と接続が可能か否か判定する判定手段と、
前記判定手段により接続可能と判定された関数の組それぞれについて、当該組の関数が示すデータフローグラフどうしの前記結合情報を生成して出力する手段とを含む、請求項１に記載の情報処理装置。
【請求項３】
前記拡張Ｃ言語は、さらに、前記Ｃ言語に対して前記データ駆動型プロセッサをフローするデータのための所定の型が予め規定されており、
前記判定手段は、
前記ソースプログラム中の全ての前記関数それぞれについて、当該関数の前記所定型である出力変数のうち、その変数名が前記他の関数の前記所定型である入力の変数名と一致するか否か判定する判定手段と、
前記判定手段により一致すると判定されたとき、前記接続が可能と判定することを特徴とする、請求項２に記載の情報処理装置。
【請求項４】
前記コンパイル手段は、さらに、
前記データフローグラフどうしの結合によって生じる前記関数における重複した処理または不要となる処理を削除する手段を含む、請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
Ｃ言語に対してデータ駆動型プロセッサ用のデータフローを記述するための関数が定義された拡張Ｃ言語を用いて記述されたソースプログラムを入力してコンパイルして、中間コードからなる中間モジュールと、当該ソースプログラムにおいて記述された前記関数で示されるデータフローグラフ間の結合を指示する結合情報を含み、且つ当該ソースプログラムの構造を示す構造情報とを出力するコンパイルステップと、
前記データ駆動型プロセッサで実行可能な形式のデータ駆動型モジュールを生成するデータ駆動型モジュール生成ステップと、
ノイマン型プロセッサで実行可能な形式のノイマン型モジュールを生成するノイマン型モジュール生成ステップとを備えて、
前記データ駆動型モジュール生成ステップは、
前記構造情報を入力して、入力した前記構造情報の前記結合情報に従い、予め準備されたグラフライブラリからデータフローグラフを読出し、且つ読出された前記データフローグラフを結合するデータフローグラフ生成ステップと、
前記データフローグラフ生成ステップにより生成された前記データフローグラフをアセンブラソースコードに変換して出力するアセンブラソース処理ステップと、
前記アセンブラソース処理ステップにより出力された前記アセンブラソースコードをアセンブルして前記データ駆動型モジュールに変換して出力するアセンブルステップとを含み、
前記ノイマン型モジュール生成ステップは、
前記中間モジュールと前記構造情報とを入力して、前記構造情報に基づき前記中間モジュールから前記データフローグラフの記述を削除して、前記ノイマン型プロセッサでの前記Ｃ言語のプログラムの実行を制御するための実行制御モジュールを生成する実行制御モジュール生成ステップと、
前記実行制御モジュール生成ステップにより生成された前記実行制御モジュールから、前記構造情報に基づき前記ノイマン型モジュールを生成するステップとを含む、情報処理方法。
【請求項６】
請求項５に記載の情報処理方法をコンピュータに実行させるためのプログラム。
【請求項７】
請求項５に記載の情報処理方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は情報処理装置、情報処理方法、プログラムおよびコンピュータ読取り可能な記録媒体に関し、特に、データ駆動型プロセッサとノイマン型プロセッサが協調動作するためのソフトウェアの開発を容易化する情報処理装置、情報処理方法、プログラムおよび当該プログラムを記録したコンピュータ読取り可能な記録媒体に関する。
【背景技術】
【０００２】
プログラムカウンタを持たずに自律的に処理を実行するデータ駆動型プロセッサ用の言語およびソースプログラムを実行形式に変換するためのツール（以下、実行形式変換ツールという）は従来、特許文献１で示されるようにデータ駆動型プロセッサ単独での動作、または複数のデータ駆動型プロセッサ間の協調動作を前提として作られていた。このため、同一アーキテクチャ内でのソースコードの最適化とソースコードの再利用を可能とするコンパイラが提供されてきた。尚、データ駆動型プロセッサ自体については、特許文献２などに詳細が記載されているので、ここでは詳細は略す。
【特許文献１】特開平７−２１９７８２号公報
【特許文献２】特開平５−１５９０８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
データ駆動型プロセッサ用のソースコードは専用のプログラム開発言語およびプログラム実行形式変換ツールで実行形式に変換することが可能である。一方、データ駆動型プロセッサとは異なるアーキテクチャを採用しているプロセッサ、すなわちプログラムカウンタに従い指定される命令を順次に実行するノイマン型プロセッサ用の開発言語および実行形式変換ツールは既にプロセッサ毎に用意されているのが常である。
【０００４】
このため、両プロセッサ間でデータをやり取りしながら動作（以下、協調動作という）させる場合には、データ駆動型プロセッサ用およびノイマン型プロセッサ用各々の実行形式変換ツールを使用し、各々独立にソースプログラムをコーディングしかつソースコードを実行形式に変換する必要があった。従って、ソースコードの改変により、例えばあるデータ駆動型プロセッサのソースコードの出力がノイマン型プロセッサのソースコードの入力になっている場合、各々独立にコーディングしかつソースコードを実行形式に変換し直さない限り、データ駆動型プロセッサ用およびノイマン型プロセッサ各々のソースコードで記載された機能を、両プロセッサを協調動作させながら実現することができなかった。
【０００５】
そこで、データ駆動型プロセッサおよびノイマン型プロセッサを協調動作させることが容易かつ効率的なプログラムを開発するための環境の提供が望まれていた。このようなプログラムはＣ言語など一般に認知されている言語で記述することが可能であり、かつ、記述したプログラムから動作の並列性を抽出したデータフローグラフの生成を実行するコンパイラが必要とされていた。
【０００６】
また、データフローグラフを機能単位のモジュールとしてライブラリ化した場合、従来は単体モジュールの動作を保証すると、モジュール同志を結合した機能を必要とする場合には、個々のモジュールから、結合した場合に不要となるコードを削除した上で結合させる必要があった。
【０００７】
それゆえにこの発明の目的は、データ駆動型プロセッサとノイマン型プロセッサが協調動作するためのプログラムを容易に開発できる情報処理装置、情報処理方法、プログラムおよびコンピュータ読取り可能な記録媒体を提供することである。
【課題を解決するための手段】
【０００８】
この発明のある局面に従う情報処理装置は、Ｃ言語に対してデータ駆動型プロセッサ用のデータフローを記述するための関数が定義された拡張Ｃ言語を用いて記述されたソースプログラムを入力してコンパイルして、中間コードからなる中間モジュールと、当該ソースプログラムにおいて記述された前記関数で示されるデータフローグラフ間の結合を指示する結合情報を含み、且つ当該ソースプログラムの構造を示す構造情報とを出力するコンパイル手段と、前記データ駆動型プロセッサで実行可能な形式のデータ駆動型モジュールを生成するデータ駆動型モジュール生成手段と、ノイマン型プロセッサで実行可能な形式のノイマン型モジュールを生成するノイマン型モジュール生成手段とを備える。
【０００９】
前記データ駆動型モジュール生成手段は、前記構造情報を入力して、入力した前記構造情報の前記結合情報に従い、予め準備されたグラフライブラリからデータフローグラフを読出し、且つ読出された前記データフローグラフを結合するデータフローグラフ生成手段と、前記データフローグラフ生成手段により生成された前記データフローグラフをアセンブラソースコードに変換して出力するアセンブラソース処理手段と、前記アセンブラソース処理手段により出力された前記アセンブラソースコードをアセンブルして前記データ駆動型モジュールに変換して出力するアセンブル手段とを含む。
【００１０】
前記ノイマン型モジュール生成手段は、前記中間モジュールと前記構造情報とを入力して、前記構造情報に基づき前記中間モジュールから前記データフローグラフの記述を削除して、前記ノイマン型プロセッサでの前記Ｃ言語のプログラムの実行を制御するための実行制御モジュールを生成する実行制御モジュール生成手段と、前記実行制御モジュール生成手段により生成された前記実行制御モジュールから、前記構造情報に基づき前記ノイマン型モジュールを生成する手段とを含む。
【００１１】
本発明によれば、Ｃ言語に対してデータ駆動型プロセッサ用のデータフローを記述するための関数を定義した拡張Ｃ言語を準備して、拡張Ｃ言語を用いて記述されたソースプログラムは、コンパイル手段と、データ駆動型モジュール生成手段と、ノイマン型モジュール生成手段とによりデータ駆動型プロセッサおよびノイマン型プロセッサのそれぞれにおいて実行可能なモジュールに変換される。この変換に際して、コンパイル手段から出力された結合情報に従い、データ駆動型モジュール生成手段はデータフローグラフを結合してアセンブラソースコードに変換して、アセンブラソースコードをアセンブルしてデータ駆動型モジュールを出力する。また、実行可能モジュールへの変換に際して、ノイマン型モジュール生成手段はコンパイル手段から与えられる結合情報を含む構造情報と中間モジュールを用いて、中間モジュールからデータフローグラフの記述を削除して実行制御モジュールを生成して、実行制御モジュールからノイマン型モジュールを生成する。
【００１２】
したがって、同一のソースプログラムで示される複数の手続のうち、結合されたデータフローグラフで示される手続はデータ駆動型プロセッサで実行可能なモジュールに変換されて、それ以外の手続はノイマン型プロセッサで実行可能なモジュールに変換される。その結果、同一のソースプログラムにより、データ駆動型プロセッサとノイマン型プロセッサを協調動作させるための各プロセッサで実行可能なモジュールを得ることができる。
【００１３】
好ましくは、コンパイル手段は、前記ソースプログラム中の全ての前記関数それぞれについて、他の関数と接続が可能か否か判定する判定手段と、前記判定手段により接続可能と判定された関数の組それぞれについて、当該組の関数が示すデータフローグラフどうしの前記結合情報を生成して出力する手段とを含む。
【００１４】
したがって、結合情報はソースプログラム中に記述された全ての関数を対象にして得ることができる。
【００１５】
好ましくは、拡張Ｃ言語は、さらに、前記Ｃ言語に対して前記データ駆動型プロセッサをフローするデータのための所定の型が予め規定されており、前記判定手段は、前記ソースプログラム中の全ての前記関数それぞれについて、当該関数の前記所定型である出力変数のうち、その変数名が前記他の関数の前記所定型である入力の変数名と一致するか否か判定する判定手段と、前記判定手段により一致すると判定されたとき、前記接続が可能と判定する。
【００１６】
したがって、関数が示すデータフローグラフの接続の可否を判定を、関数の入力変数名、出力変数名およびこれら入出力変数のデータの型に基づき容易に判定できる。
【００１７】
好ましくは、前記コンパイル手段は、さらに、前記データフローグラフどうしの結合によって生じる前記関数における重複した処理または不要となる処理を削除する。
【００１８】
したがって、データ駆動型プロセッサおよびノイマン型プロセッサのそれぞれにおいて、重複した処理または不要な処理を実行することによるオーバヘッドが生じるのを未然に防止できる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を参照して説明する。各図中、同一部分には同一符号を付している。各図中の‘＿’は本文中では便宜的に‘−’に変更しているので、例えば図中のpc＿sub2は本文中ではpc‐sub2と記載している。
【００２０】
本実施の形態では、データ駆動型プロセッサとノイマン型プロセッサどうしがデータ交換しながら動作する手順を示すプログラムをソースコードで記述して開発できる環境を提供する。
【００２１】
図１に本発明の動作環境１を例示する。図１の動作環境１はパーソナルコンピュータ（以下、パソコンという）上で構築される。図１において四角で囲んだもの、すなわちＤＦＣ−ＣＯＭＰ(DataFlow-C COMPiler)４１、ＤＦＣ−ＬＩＮＫ（(DataFlow-C LINKer)５１、ノイマン型プロセッサ用コンパイラ４３、データ駆動型プロセッサ用アセンブラ５３およびノイマン型プロセッサ用コンパラ・リンカ５５はパソコン上において実行可能なプログラム形式で存在するファイルである。ＤＦＣ−ＣＯＭＰ４１およびＤＦＣ−ＬＩＮＫ５１それぞれは本発明が示す手続き、すなわちツールＤＦＣＣのコンパイル処理４における後述の［１］コンパイル処理、ツールＤＦＣＣのリンク処理５における後述の［２］リンク処理をそれぞれ実行する。ノイマン型プロセッサ用コンパイラ４３は図１のＤＦＣ−ＣＯＭＰ４１がその処理の中で実行するプログラムであり、ノイマン型プロセッサ用コンパイラ・リンカ５５およびデータ駆動型プロセッサ用アセンブラ５３は図１中のＤＦＣ−ＬＩＮＫ５１がその処理の中で実行するプログラムである。ノイマン型プロセッサ用コンパイラ・リンカ５５は、ノイマン型プロセッサのためのＣ言語プログラムのためのコンパイル機能とリンカ機能とを有する。
【００２２】
本実施の形態では、Ｃ言語をデータ駆動型プロセッサ向けに拡張した言語を用いる。ここでは拡張言語ＤＦＣと称する。拡張言語ＤＦＣにより記述されたソースプログラムをコンパイルしリンクして実行形式のモジュールに変換するツールの総称を‘ツールＤＦＣＣ’と称する。拡張言語ＤＦＣはＡＮＳＩ準拠のＣ言語に対して専用の予約語を付加したノイマン型プロセッサ用のＣ言語である。
【００２３】
図１中の円柱で示すＤＦＣ記述アプリケーションソース３、Ｃソース４２、プログラム構造ファイル１０、ノイマン型プロセッサ用コンパイラ中間形式モジュール１１（以下、単にモジュール１１という）、ライブラリ８、Ｃソース５４、データ駆動型プロセッサ用アセンブラソース５２、ＦＳ（Flowgraph Source）ライブラリ９１およびオブジェクトライブラリ８１は実行可能な形式ではないファイルに格納されたデータである。これらファイルはパソコンにメモリに格納されている。Ｃソース５４は後述のＣソースファイル７０に対応する。
【００２４】
モジュール１１は中間コードのモジュールである。つまり、ＤＦＣ記述アプリケーションソース３という高級言語モジュールは、コンパイルの際には一旦中間モジュールに置換えられた後に、中間モジュールから機械語モジュール（データ駆動型プロセッサ用実行形式モジュール６とノイマン型プロセッサ用実行形式モジュール７）に変換される。中間モジュールへの変換は、高級言語モジュールを機械語モジュールへ変換する際の効率を考慮して行なわれる。
【００２５】
ＤＦＣ記述アプリケーションソース３は原始（ソース）プログラムであり、かつ拡張言語ＤＦＣで記述されたプログラムソースコード群である。プログラマは、パソコンに予め準備されたテキストエディタ２等を用いて所定の処理単位、たとえばタスク単位でＤＦＣ記述アプリケーションソース３を作成する。作成されたＤＦＣ記述アプリケーションソース３はパソコンのメモリに格納される。
【００２６】
作成されたＤＦＣ記述アプリケーションソース３のそれぞれは、メモリから読出されて、ツールＤＦＣＣのコンパイル処理４でコンパイルされて、続いてツールＤＦＣＣリンク処理５はコンパイル結果のデータに各種の他のデータをリンクして、データ駆動型プロセッサ用実行形式モジュール６およびノイマン型プロセッサ用実行形式モジュール７を出力する。
【００２７】
図１で示す動作環境１はデータ駆動型プロセッサ用実行形式モジュール６とノイマン型プロセッサ用実行形式モジュール７を、図２で例示する動作環境に搭載する手段を講じれば、必ずしも図１と図２の環境は同じでなくて良い。
【００２８】
図２にはデータ駆動型プロセッサ用実行形式モジュール６とノイマン型プロセッサ用実行形式モジュール７に従いデータ駆動型プロセッサとノイマン型プロセッサが協調動作する環境をターゲットシステム１２として例示する。図２のターゲットシステム１２は、本発明の協調動作のためのコンパイラの機能を有することが可能なノイマン型プロセッサ搭載システム１２ＢをＰＣ／ＡＴ（Personal Computer/Advanced Technology）互換機として、データ駆動型プロセッサ搭載システム１２ＡをＰＣ／ＡＴ互換機のアドオンボード（ＰＣＩ（Peripheral Components Interconnect）バスインターフェース）としてそれぞれ実現した場合を例示している。
【００２９】
図２においてノイマン型プロセッサ搭載システム１２Ｂは、ノイマン型プロセッサ１２０およびノイマン型プロセッサ１２０がデータ駆動型プロセッサ搭載システム１２Ａと通信するためのホストＰＣＩバス１４０を備える。ノイマン型プロセッサ１２０は、他の各部を集中的に制御し監視するためのＣＰＵ（Central Processing Unit）１４１、各種のプログラムおよびデータを格納するためのＲＯＭ（Read Only Memory）１４２およびＲＡＭ（Random Access Memory）１４３、各種データを出力するためのプリンタおよびディスプレイなどの出力部１４４、ならびにキーボードおよびマウスなどのユーザにより操作されて各種データを入力するための入力部１４５を備える。ＣＰＵ１４１は図示されないがプログラムカウンタを有し、プログラムカウンタにより指示される次に実行されるべき命令コードのアドレスに基づき、ＲＯＭ１４２などのメモリに格納されたプログラムをアクセスして命令コードを読出し、実行する。
【００３０】
また、データ駆動型プロセッサ搭載システム１２Ａは、データ駆動型プロセッサ１３０、データ駆動型プロセッサ１３０がアクセスする外部メモリ１３１、ノイマン型プロセッサ搭載システム１２Ｂと通信するためのＰＣＩバスブリッジ１３３、およびＰＣＩバスブリッジ１３３と内部のローカルバス１３４との通信を制御するローカルバスコントロール１３２を備える。データ駆動型プロセッサ１３０は、ローカルバス１３４に接続される割込処理部１３５、制御レジスタ１３６およびデータ入出力部１３７を含む。割込処理部１３５はローカルバス１３４を介して与えられる割込信号を処理する。
【００３１】
データ駆動型プロセッサ１３０の構成が図３（Ａ）と（Ｂ）に示される。図示される構成は特許文献２に開示された構成に従うものである。
【００３２】
データ駆動型プロセッサ１３０は、プログラムカウンタによる逐次的な命令の実行という概念を持たない非ノイマン型計算機の一種である。データ駆動型プロセッサ１３０においては、パイプライン処理が行なわれており、演算の対象となるデータが揃い次第、命令の実行が可能となる。このように、データによって複数の命令が並列的に実行されるため、大幅に演算の実行時間が短縮されるという利点を有する。
【００３３】
図３（Ａ）のデータ駆動型プロセッサ１３０は、図３（Ｂ）のデータパケットＰＡが与えられる合流部２３２、合流部２３２の出力端に接続されるプログラム記憶部２３３、プログラム記憶部２３３の出力端に接続される対データ検出部２３４、対データ検出部２３４の出力端に接続される演算処理部２３５、演算処理部２３５の出力端に接続される分岐部２３６、および分岐部２３６の一方の出力端に接続される内部データバッファ部２３７を有する。分岐部２３６の他方の出力端はデータ駆動型プロセッサ１３０の外部にながる。合流部２３２はその入力端に接続される外部および内部データバッファ部２３７からのデータパケットＰＡを入力し、プログラム記憶部２３３に導出する。分岐部２３６はたとえばレジスタなどからなる記憶領域３６Ａを有する。記憶領域３６Ａには、分岐部２３６に与えられるデータパケットＰＡを内部データバッファ２３７および外部のいずれに出力するかを指示するための分岐条件データが予め格納される。
【００３４】
図３（Ｂ）には、データ駆動型プロセッサ１３０を巡回するデータパケットＰＡのフィールド構成が示される。データパケットＰＡは、行先情報を格納するための行先フィールドＦ３、命令情報を格納するための命令フィールドＦ４およびデータを格納するためのデータフィールドＦ５を含む。
【００３５】
行先フィールドＦ３には当該データパケットＰＡが処理されるべきプロセッサを示すプロセッサ番号およびノード番号を含む。ノード番号は、プログラム記憶部２３３にストアされるデータフロープログラムを読出す際のアドレス指定に用いられる情報である。命令フィールドＦ４の命令情報は、演算内容（命令コード）を指示する。データフィールドＦ５のデータはフィールドＦ４に格納される命令情報に従い演算されるオペランドデータを示す。図２の割込処理部１３５は演算処理部２３５が有する機能に相当し、制御レジスタ１３６は図３（Ａ）の各部が有する図示のないレジスタを指し、データ入出力部１３７は合流部２３２と分岐部２３６それぞれの機能に対応する。
【００３６】
データ駆動型プロセッサ１３０の動作において、データ駆動型プロセッサ１３０に与えられるデータパケットＰＡは、まず合流部２３２に与えられる。合流部２３２は、外部から与えられるデータパケットＰＡと内部データバッファ２３７から与えられるデータパケットＰＡを入力して、順次にプログラム記憶部２３３に出力する。
【００３７】
プログラム記憶部２３３は図示されないが予めデータフロープログラムを格納する。データフロープログラムはデータフローグラフを示し、行先情報と命令情報からなる組を複数個有する。プログラム記憶部２３３は、与えられるデータパケットＰＡの行先フィールドＦ３の行先情報に基づくアドレス指定により、データフロープログラムをアクセスして、次位の行先情報と次位の命令情報からなる１つの組を読出す。なお、１回のアドレス指定により複数の組を読出すことも可能であるが、ここでは、その説明は略す。
【００３８】
読出された次位の行先情報と次位の命令情報は、入力データパケットＰＡのフィールドＦ３とＦ４のそれぞれ格納されて、その後、当該データパケットＰＡは対データ検出部２３４に与えられる。
【００３９】
対データ検出部２３４は、プログラム記憶部２３３から与えられるデータパケットＰＡの待合わせを行なう。すなわち、対データ検出部２３４は、行先情報が一致する異なる２つのデータパケットＰＡの検出を行ない、行先情報が一致する２つのデータパケットＰＡのうち、一方のデータパケットＰＡのフィールドＦ５の内容を他方のデータパケットＰＡのデータフィールドＦ５に追加して格納し、その他方のデータパケットＰＡを演算処理部２３５に出力する（一方のデータパケットＰＡは消去される）。したがって、この出力されるデータパケットＰＡにはデータフィールドＦ５にデータが２種類格納されていることになる。
【００４０】
演算処理部２３５は、対データ検出部２３４から与えられるデータパケットＰＡを入力し、入力データパケットＰＡのフィールドＦ４の命令情報に従いデータフィールドＦ５のデータを演算処理し、その演算結果を当該入力データパケットＰＡのデータフィールドＦ５に格納して、当該入力データパケットＰＡを分岐部２３６に出力する。
【００４１】
分岐部２３６は、演算処理部２３５から与えられたデータパケットＰＡを入力して、入力データパケットＰＡの行先フィールドＦ３の行先情報に基づいて、当該入力データパケットＰＡを内部データバッファ部２３７および外部のいずれか一方に出力する。つまり、分岐部２３６は、記憶領域３６Ａに格納された分岐条件と入力データパケットＰＡの行先フィールドＦ３の行先情報とに基づき、該入力データパケットＰＡを外部および内部データバッファ部２３７のいずれか一方に出力する。具体的には、行先情報が当該データパケットＰＡが処理されるべきプロセッサを特定するためのプロセッサ番号を有し、分岐条件３６Ａが当該データ駆動型プロセッサ１３０に割当てられたプロセッサ番号を示すとき、分岐条件３６Ａが示すプロセッサ番号と入力データパケットＰＡの行先情報が示すプロセッサ番号とを比較照合し、照合一致に応じて入力されたデータパケットＰＡを内部データバッファ部２３７に出力し、照合不一致に応じて、入力されたデータパケットＰＡを外部に出力するよう動作する。
【００４２】
以上の処理手順に基づき、プログラム記憶部２３３に記憶されたデータフロープログラムに基づく処理が進行する。
【００４３】
図１のデータ駆動型プロセッサ用実行形式モジュール６を図３のプログラム記憶部２３３にデータフロープログラムとして格納し、ノイマン型プロセッサ用実行形式モジュール７を図２のＲＡＭ１４３またはＲＯＭ１４２に格納しておき、データ駆動型プロセッサ１３０とノイマン型プロセッサ１２０それぞれにより格納されたモジュールに従う処理が実行されるとき、両プロセッサ間ではプログラムに従いローカルバスコントロール１３２、ＰＣＩバスブリッジ１３３およびホストＰＣＩバス１４０を介してデータ転送がされる。これにより、データ駆動型プロセッサ１３０とノイマン型プロセッサ１２０とは相互にデータ転送をしながらＤＦＣ記述アプリケーションソース３に従う処理を実行できる（協調動作できる）。
【００４４】
図４には、図１の動作環境１が構築されるパソコンのブロック構成が示される。図４を参照して、パソコンはＣＲＴ（陰極線管）や液晶などからなるディスプレイ６１０、該パソコン自体を集中的に管理し制御するためのＣＰＵ６２２、ＲＯＭまたはＲＡＭを含んで構成されるメモリ６２４、固定ディスク６２６、ＦＤ（フレキシブルディスク）６３２が着脱自在に装着されて、装着されたＦＤ６３２をアクセスするＦＤ駆動装置６３０、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）６４２が着脱自在に装着されて、装着されたＣＤ−ＲＯＭ６４２をアクセスするＣＤ−ＲＯＭ駆動装置６４０、通信ネットワーク３００と、該パソコンとを通信接続するための通信インターフェィス６８０、およびキーボード６５０およびマウス６６０を有する入力部７００を含む。これらの各部はバスを介して通信接続される。パソコンには、カセット形式の磁気テープが着脱自在に装着されて磁気テープをアクセスする磁気テープ装置が設けられてもよい。
【００４５】
本実施の形態では図１の動作環境１は図４のパソコン上に構築される。言換えると、図１に示される各種プログラムはメモリ６２４または固定ディスク６２６に格納されて、ＣＰＵ６２２により読出されて実行される。またプログラム実行時に参照されるライブラリなどの各種データもメモリ６２４または固定ディスク６２６に格納されて、ＣＰＵ６２２により読出されると想定する。なお、動作環境１は図４のパソコンで構築されるのに限定されず、図２のノイマン型プロセッサ１２０上に構築されてもよい。
【００４６】
［拡張言語ＤＦＣ］
本実施の形態では、データ駆動型プロセッサ１３０とノイマン型プロセッサ１２０の協調動作を行う為の拡張されたＣ言語である拡張言語ＤＦＣを規定する。
【００４７】
（拡張Ｃ言語で記述できる関数）
拡張言語ＤＦＣにより記述できる関数として、ＰＣ（Personal Computer）関数、拡張関数、ＤＤＭＰ（data driven media processor）マクロ関数およびデータフローグラフの４種類がある。データフローグラフはデータ駆動型プロセッサ１３０用のソースコードで書かれた１種の関数である。ＰＣ関数は従来通りのノイマン型プロセッサ１２０用のＣ言語で記述された関数である。拡張関数はＰＣ関数、拡張関数（但し再帰呼出しは不可）およびＤＤＭＰマクロ関数をコール（呼出し）できる種類の関数である。
【００４８】
ＤＤＭＰマクロ関数はＰＣ関数およびデータ駆動型プロセッサ１３０のソースコードであるデータフローグラフをコールできる種類の関数である。したがってＤＤＭＰマクロ関数において、異なるアーキテクチャのプロセッサ用のソースコード、すなわちノイマン型プロセッサ１２０用のソースコードとデータ駆動型プロセッサ１３０用のデータフローグラフ(ソースコード)とを同時に記述することができる。
【００４９】
各々の種類の関数の入出力（引数）には属性が設定されている。コンパイル処理４では、関数名と引数の属性に基づきデータフローグラフどうしの接続が可能か否かを判定し、判定結果に基づきデータ駆動型プロセッサ１３０およびノイマン型プロセッサが協調動作するためのソースコードを生成して出力する。
【００５０】
このように、本実施の形態では、データ駆動型プロセッサ１３０とノイマン型プロセッサ１２０の協調動作を行う為に拡張言語ＤＦＣを規定し、拡張言語ＤＦＣを用いてノイマン型プロセッサ１２０用のＤＤＭＰマクロ関数からデータ駆動型プロセッサ１３０の関数（データフローグラフ）をコールすることを可能としている。
【００５１】
［ＤＤＭＰマクロ関数について］
ＤＤＭＰマクロ関数は、データ駆動型プロセッサのソースコードであるデータフローグラフとノイマン型プロセッサ用Ｃ言語のソースコードを混在し表記する関数として定義される。
【００５２】
図５にＤＤＭＰマクロ関数の記述例が示される。ＤＤＭＰマクロ関数は図５に示すように、Ｅｎｔｒｙセッション９５、Ｆｕｎｃｔｉｏｎセッション９６、Ｔｅｒｍセッション９７およびＳｔａｒｔセッション９８の４つのセッションからなる。ここではセッションは処理の単位を示し、同一種類の手続からなる。
【００５３】
Ｅｎｔｒｙセッション９５にはＤＤＭＰマクロ関数で入力の引数に指定したデータ型［Ｃ］の変数に、メモリまたはレジスタなどからデータを読出して設定し、そして該変数をデータ駆動型プロセッサ１３０に入力する命令コードが記述されている。図５ではデータ型［Ｃ］が定義文ＤＴで宣言されている。
【００５４】
Ｔｅｒｍセッション９７にはデータフローグラフの出力をＤＤＭＰマクロ関数の出力として定義したデータ型［Ｃ］の変数のデータを、メモリまたはレジスタへ書込む処理が記述されている。Ｆｕｎｃｔｉｏｎセッション９６にはＤＤＭＰマクロ関数により本来行われるべき機能（演算処理などの処理手順）が記述される。
【００５５】
Ｓｔａｒｔセッション９８にはデータフローグラフに対してデータをどのようにして入力するかが記述されている。データ駆動型プロセッサ１３０の制御レジスタ１３６へのデータの書込み手順、またはデータ駆動型プロセッサ１３０の入出力部１３７への何らかのデータの供給手順はこのセッションに記述される。
【００５６】
図５では矢印‘→’で示す箇所において、予約語‘call’の後にデータフローグラフ名を記述する。このように記述することで、ＤＤＭＰマクロ関数に対しデータフローグラフを対応づけることができる。その結果、ＤＦＣ記述アプリケーションソース３に複数のＤＤＭＰマクロ関数が記述されている場合には、ＤＤＭＰマクロ関数の記述されている順番により、各ＤＤＭＰマクロ関数で記述されているデータフローグラフ間の接続の順序を決定する情報を明示することができる。
【００５７】
図５において予約語‘call’を用いて記述されていないＣ言語の関数により、同一セッション内のデータフローグラフを実行するにあたって必要な処理が記述される。このことによって、データフローグラフを接続された順に従いＣ言語のソースコードとして出力できるので、接続したデータフローグラフについて、データ駆動型プロセッサ１３０における実行順とＣＰＵ１４１による実行順とを一致させることが可能となる。なお、Ｃ言語の文法に関しては「プログラミング言語 Ｃ 第２版ANSI規格準拠  The C Programming Language 2/e：共立出版株式会社」に詳しい解説がなされている。
【００５８】
（拡張Ｃ言語で記述できるデータ型）
拡張言語ＤＦＣには、Ｃ言語に従来から定義されている固有のデータ型と、新たに定義されたデータ駆動型プロセッサ１３０用のデータ型［Ｃ］とを用いる。データ型［Ｃ］の引数はデフォルトでは、データ駆動型プロセッサ１３０のアクセス可能なメモリ（外部メモリ１３１など）およびレジスタ（制御レジスタ１３６など）などを示すが、同時に、データフローグラフの入力あるいは出力を示す。
【００５９】
ＤＤＭＰマクロ関数に属性がデータ型［Ｃ］である変数を引数として用いる場合、プログラマは、ＤＦＣ記述アプリケーションソース３の記述に際して、該引数に対応の変数に関して、当該変数はＤＤＭＰマクロ関数の入力の変数および出力の変数のいずれであるかを指示する情報を記述する。コンパイル処理４では、ＤＦＣ記述アプリケーションソース３の構文解析時にプログラム中に記述された該情報を参照する。したがって、該情報を用いた構文解析がなされる。
【００６０】
コンパイル処理４により、ＤＦＣ記述アプリケーションソース３の全ソースコードについてコンパイルがされて、モジュール１１が出力される。リンク処理５により、モジュール１１中の新たに生成されたデータフローグラフはデータ駆動型プロセッサ用実行形式モジュール６に変換されて、モジュール１１のノイマン型プロセッサ用Ｃソースコードはノイマン型プロセッサ用実行形式モジュール７に変換される。以上の手順により、異なるアーキテクチャを採用しているデータ駆動型プロセッサ１３０とノイマン型プロセッサ１２０間で協調動作を行うための実行形式モジュールを得ることが可能となる。
【００６１】
［フレームについて］
ここで図２のターゲットシステムの処理で取扱う‘フレーム’について説明する。フレームは図２のターゲットシステムで画像処理をする場合に、外部メモリ１３１またはＲＡＭ１４３により構成される画像メモリの画像１枚分を記憶するための領域を指している。各領域（フレーム）に一意に識別する情報、たとえば番号データを割当てる。当該番号データと各領域のアドレスを対応付けた管理情報が予め作成されて外部メモリ１３１またはＲＡＭ１４３に格納される。プログラムに管理情報をアクセス（参照）するための命令コードを記述しておくことで、プログラム側から各領域（フレーム）を区別しながらアクセスすることができる。
【００６２】
ＤＤＭＰマクロ関数により通常、「フレームからデータ読込み→読込んだデータの処理（加工）→処理（加工）後のデータをフレームへ書込み」という手順を実行することができる。ここでは、加工は画像データの加算処理、テーブル変換などである。たとえば、「フレーム０からデータ読出し→読出したデータの処理（加工）Ａ→処理（加工）Ａ後のデータをフレーム１へ書込む」という手順を実行するための第１のＤＤＭＰマクロ関数と、「フレーム１からデータ読出し→読出したデータの処理（加工）Ｂ→処理（加工）Ｂ後のデータをフレーム２へ書込む」という手順を実行するための第２のＤＤＭＰマクロ関数とを想定する。この場合、フレーム１の番号データを両方のＤＤＭＰマクロ関数においてデータ型[Ｃ]と宣言しておくことで、第１と第２のＤＤＭＰマクロ関数はコンパイル処理４により接続できると判定される。したがって、第１と第２のＤＤＭＰマクロ関数が接続される場合には、接続後のＤＤＭＰマクロ関数により、「フレーム０からデータ読込み→処理（加工）Ａ→処理（加工）Ｂ→フレーム２へデータ書込み」という手順が実行される。これにより、前述の２つの手順における‘フレーム１へのデータの書込み’と‘フレーム１からのデータの読出し’とを省略することができる。ここでは、実際にデータが読出し、または書込みされるフレームを実フレームと称する。
【００６３】
なお、画像をテーブル変換処理するとは、白黒画像が、各点の明るさを０〜２５５で表されている時、各明るさに対応して、対応する値を格納した変換表を用意し、その変換表にしたがって、画像の明るさを変更する。その変換表のことをテーブルと呼び、変換することをテーブル変換処理と呼ぶ。
【００６４】
白黒反転を行なうための変換表は、明るさ０に対して２５５、１に対して２５４、・・・、２５５に対して０の値を対応させる。求める処理の効果によってテーブルに格納される値は変更される。
【００６５】
［システムにおける動作の概要］
図１を参照して、ツールＤＦＣＣはプログラマが作成したＤＦＣ記述アプリケーションソース３（ソースプログラム）に記述された複数のコードをデータ駆動型プロセッサ用の言語（ソースコード）群とノイマン型プロセッサ用のＣ言語(ＡＮＳＩ準拠)のソースコード群に分離する機能、および分離した後の各々のソースコード群をデータ駆動型プロセッサ用アセンブラ５３とノイマン型プロセッサ用コンパイラ４３にて処理して各々に用意したライブラリとリンクする機能を持つ。
【００６６】
ツールＤＦＣＣ用のライブラリ８、ＦＳライブラリ９１およびＰＣ用のライブラリであるオブジェクトライブラリ８１は、拡張言語ＤＦＣの文法によって記述された拡張Ｃ言語のソースコードとデータ駆動型プロセッサ用のデータフローグラフおよびその両者の入出力仕様を定める為のインデックスファイル、そしてノイマン型プロセッサ用コンパイラ４３のライブラリを含む。
【００６７】
ツールＤＦＣＣのコンパイル処理４の後述の［１］コンパイル処理とツールＤＦＣＣリンク処理５の後述の［２］リンク処理の流れを後述の図８と図１７に示す。
【００６８】
図６と図７は［１］コンパイル処理と［２］リンク処理を通じ、拡張言語ＤＦＣにより記述したＤＦＣ記述アプリケーションソース３中のソースコードが、ノイマン型プロセッサ用ソースコードとデータ駆動型プロセッサ用のソースコードであるデータフローグラフとに分離していく様子を模式的に示したものである。図６ではＤＦＣ記述アプリケーションソース３のソースコードを解析し、解析結果に基づきＤＦＣ記述アプリケーションソース３に記述された関数の名称に基づき、ライブラリ８を検索して、ライブラリ８に予め登録された対応の関数（ソースコード）を特定し、特定した関数をＤＦＣ記述アプリケーションソース３中に入力する。これにより、ＤＦＣ記述アプリケーションソース３に記述されたライブラリ８の関数が展開される。ここで、関数を展開するとは該関数を対応のソースプログラム（ソースコード）で置換えることを指す。その結果、Ｃ言語のソースプログラムであるＣソース４２が得られる。Ｃソース４２は物理的に連続するＤＤＭＰマクロ関数呼出し文をひとつのブロックとして（ブロックを検出して）、ブロックＢＬＫｉ（ｉ＝１、２、３、…）が検出される。物理的に連続するとは、Ｃ言語または拡張言語ＤＦＣの文法に従い連続して関数が呼出されている状態を指す。たとえば、拡張言語ＤＦＣに従う関数Ａと関数Ｂを用いて、“Ａ();Ｂ();”と記述する場合には物理的に連続しているが、“Ａ();Ｃ＝Ｄ＋Ｅ;Ｂ();”と記述する場合には、関数Ａと関数Ｂの間に“Ｃ＝Ｄ＋Ｅ;”というＤＤＭＰマクロ関数以外の関数や実行文が記述されているために物理的に連続していない。
【００６９】
ここでは、各ブロックＢＬＫｉには、例えばＢＬＫ１、ＢＬＫ２、…、ＢＬＫ７と順番に名称が割当てされる。ＤＤＭＰマクロ関数がコールされているブロックＢＬＫｉにおいては、当該ＤＤＭＰマクロ関数は、一律に“ＧＰＢ−ＳＴＡＲＴ（“usr−sub,-ＢＬＫｉ）”と“ＧＰＢ−ＳＹＮＣ（）”と置換されている。
【００７０】
図６のＤＦＣ記述アプリケーションソース３において記述された変数‘ａ’、‘ｂ’、‘ｃ’、‘ｄ’、‘ｅ’および‘ｆ’それぞれは、データ型の定義の記述が省略されているが、データ型[Ｃ]で予め定義されていると想定する。
【００７１】
図７では図６のＣソース４２がメインデータ４２１とサブデータ４２２とからなることが示される。メインデータ４２１はブロックＢＬＫｉを用いてソース４２の概略構造を示すものであり、サブデータ４２２は、メインデータ４２１で示される各ブロックＢＬＫｉでコールされている関数名を示している。具体的には、各ブロックＢＬＫｉの“ＧＰＢ−ＳＴＡＲＴ（“usr−sub,-ＢＬＫｉ）”と“ＧＰＢ−ＳＹＮＣ（）”はＤＤＭＰマクロ関数のｅｎｔｒｙセッションにより置換されて、当該ブロックＢＬＫｉでコールされるＤＤＭＰマクロ関数の名称が記載される。
【００７２】
図７では、サブデータ４２２のブロックＢＬＫｉのそれぞれについて、対応するフローグラフをＦＳライブラリ９１から、同様に対応するノイマン型プロセッサ用オブジェクトをオブジェクトライブラリ８１から、それぞれ取得する様子を模式的に示している。ブロックＢＬＫ３〜ＢＬＫ６のそれぞれはｅｎｔｒｙセッションを含むので、すなわち当該ブロックＢＬＫｉにはＤＤＭＰマクロ関数を含むので、含まれているＤＤＭＰマクロ関数をデータフローグラフに変換する。具体的には、ＦＳライブラリ９１にはＤＤＭＰマクロ関数の名称のそれぞれに対応してデータフローグラフＤＦＧ＃０ｊ（ｊ＝１，２，３,・・・）が予め格納されている。そこで、ブロックＢＬＫｉでコールされているＤＤＭＰマクロ関数名に基づきをＦＳライブラリ９１を検索することで対応するデータフローグラフＤＦＧ＃０ｊを読出すことができる。
【００７３】
このようにして、ブロックＢＬＫ３〜ＢＬＫ６のそれぞれについて、ＦＳライブラリ９１から読出されたデータフローグラフＤＦＧ＃０１〜ＤＦＧ＃０４はＣソース４２中のブロックＢＬＫｉ毎に一旦統合される。統合されたものは、データ駆動型プロセッサ用ソースアセンブラ（データ駆動型プロセッサ用アセンブラソース）５２を指す。
【００７４】
Ｃソースファイル７０は、Ｃソース４２から生成されるＣソース４２のプログラムの実行を制御するためのモジュールのファイルである。Ｃソース４２のプログラムがノイマン型プロセッサ１２０において実行されるとき、ノイマン型プロセッサ１２０においては該プログラムの構造が参照されるので、該プログラム構造を示すＣソースファイル７０が生成される。Ｃソースファイル７０のＣソースは、Ｃソース４２のブロックＢＬＫｉおよび拡張言語ＤＦＣで記述した変数名に対して、ノイマン型プロセッサ１２０用のＣ言語のソースコード向けにユニークな名前と値を定義するモジュールである。
【００７５】
オブジェクトライブラリ８１には、ＰＣ関数（ノイマン型プロセッサ関数）の名称のそれぞれに対応して、当該ＰＣ関数のオブジェクトのＣソースコードが予め格納されている。したがって、ＰＣ関数名に基づきオブジェクトライブラリ８１を検索することで、対応するオブジェクトのＣソースコードを読出すことができる。
【００７６】
Ｃソースファイル７０をコンパイルしたコンパイル結果と、オブジェクトライブラリ８１を検索して読出したＣソース４２でコールしている各ＰＣ関数のＣソースコードとに基づきノイマン型プロセッサ関数オブジェクト７１というモジュールが生成される。ノイマン型プロセッサ関数オブジェクト７１で参照されている関数のオブジェクトのＣソースコードは、オブジェクトライブラリ８１から読出されて、ノイマン型プロセッサ関数オブジェクト７１中に展開されている。Ｃソースファイル７０とノイマン型プロセッサ関数オブジェクト７１は図１のモジュール１１に相当する。
【００７７】
［１］コンパイル処理（図８）
図８を参照してツールＤＦＣＣのコンパイル処理４の手順を説明する。図中、円柱のものはメモリ６２４に格納されるデータを示し、矩形のもはメモリ６２４に予め格納されたプログラムに従う処理を示す。処理１５〜１９、２２および２６はＤＦＣ−ＣＯＭＰ４１の処理に相当する。当該プログラムはＣＰＵ６２２によりメモリ６２４から読出されて実行されることで、対応する処理が実現される。
【００７８】
図８を参照して、ＤＦＣソースライブラリ２７には拡張言語ＤＦＣ用の複数種類の関数それぞれについて関数名と該関数を展開したソースコード（Ｃ言語コード）とが対応付けて格納されている。
【００７９】
インデックスファイル３７は、複数種類の関数それぞれに対応してその関数名が索引（インデックス）として登録されているファイルである。
【００８０】
データフローグラフライブリ２８には、複数種類のデータフローグラフのそれぞれについて、そのデータフローグラフ名（関数名）とデータフローグラフのソースコード（Ｃ言語コード）とが格納される。
【００８１】
コンパイル処理４においては、まず、ＤＦＣ記述アプリケーションソース３各々を入力して、入力した各ＤＦＣ記述アプリケーションソース３について、以降の（１−１）〜（１−８）の処理を実行する。
【００８２】
（１−１）プリプロセッサ処理１５
一般にノイマン型プロセッサ用Ｃ言語を用いることでプログラムにおいてプリプロセス用の記述をすることができる。本実施の形態ではＤＦＣ記述アプリケーションソース３の作成においてプリプロセス用の記述をサポートする場合には一般的なプリプロセス用の記述と、これとは異なった独自のプリプロセス用の記述とをすることが許容されている。本実施の形態ではＤＦＣ記述アプリケーションソース３をＣ言語のソースコードに変換した後にノイマン型プロセッサ用コンパイラにより処理するので、これらの記述は、ツールＤＦＣＣのコンパイル処理４の最初の段階で処理する。例えば次のようである。
【００８３】
ＤＦＣ記述アプリケーションソース３には予めプログラマが“#define  ABC  DEF”と定義する独自の記述をしたと想定する。プリプロセッサ処理１５は、入力したＤＦＣ記述アプリケーションソース３を解析して該独自の定義の記述を検出すると、以降の解析においてＤＦＣ記述アプリケーションソース３中に“ABC”という記述を検出すると、該記述は全て“DEF”の記述であるとみなす。これにより、“ABC”という記述は“DEF”と言う記述に（自動的に）書換えられる。これ以外のプリプロセスの手順はＣ言語のそれに準ずる。プリプロセッサ処理１５が施されたＤＦＣ記述アプリケーションソース３は構文・構造解析処理１６に与えられる。
【００８４】
（１−２）構文・構造解析処理１６（図９を参照）
プリプロセッサ処理１５を実行後に図９の手順で構文・構造解析処理１６を実行する。構文・構造解析処理１６は、ＤＦＣ記述アプリケーションソース３をメモリ６２４に格納して、該メモリ６２４のＤＦＣ記述アプリケーションソース３のソースコードを字句解析して複数のトークンを抽出して、抽出したトークンが登録されたトークンリスト１６０を作成して、トークンリスト１６０をメモリ６２４に格納する（ステップＳ１）。
【００８５】
続く処理（ステップＳ３）では、メモリ６２４のＤＦＣ記述アプリケーションソース３の構文をチェックして使用しているライブラリ関数や変数名の抽出を行う。また文識別子をトークンリスト１６０に追加する。また、画像処理関数を参照している場合には画像ライブラリインデックス、すなわち図８のインデックスファイル３７中の該関数に対応のインデックスのフラグをセットする。
【００８６】
インデックスファイル３７は、具体的には関数名のそれぞれに対応して、該関数が参照されているとセットされて参照されないとリセットされるフラグ、該関数のソースコードが記述されているファイル、ならびに該関数の入力数および出力数などが登録されていて、ＤＦＣ記述アプリケーションソース３のコンパイルおよびリンク時に該関数を参照するファイルの特定や、関数どうしの結合（統合）の可否の判定などのために参照される。異なる関数どうしの間で入出力の種類や入出力数が一致しないとき、該関数どうしは結合（統合）できないと判定される。
【００８７】
続く処理（ステップＳ５）では、ＤＦＣ記述アプリケーションソース３で参照されている画像処理関数とＤＤＭＰマクロ関数についてのソースコードへの展開処理が行われる。
【００８８】
本発明ではＤＦＣ記述アプリケーションソース３で参照されている関数の変数名に基づき、データ駆動型プロセッサ上で扱うデータの流れを示す。そのために、Ｃ言語に対し、データ駆動型プロセッサ上のデータを表すデータ型を拡張し、拡張したデータ型の変数を追跡することで構造を解析する。例えば通常のＣ言語で扱う整数型‘int’対応してデータ駆動型プロセッサ上では整数型‘ddmp−int’と表す。ＤＦＣ記述アプリケーションソース３に記述されている整数型‘ddmp−int’の変数を追跡して構造解析を行う。具体的には、拡張言語ＤＦＣ用のライブラリの関数の呼出しタイミングや条件などデータ駆動型プロセッサの制御に必要となるプログラム構造を解析する。その解析の結果、参照されている画像処理関数の関数名に基づきＤＦＣソースライブラリ２７を検索して対応のソースコードを読出して展開し構文解析する。また、ＤＤＭＰマクロ関数については、関数名に基づきデータフローグラフライブラリ２８を検索して対応のフローグラフのソースコードを読出して展開し構文解析する。
【００８９】
図９の構文・構造解析処理１６の各処理ステップ毎にエラーの有無が検出される（ステップＳ２、Ｓ４、Ｓ６）。ある処理にエラーがあったことが検出されると、以降の処理は省略してツールＤＦＣＣのコンパイル処理４は終了する。
【００９０】
（１−３）ライブラリ展開処理１７
構文・構造解析処理１６を実行終了後に、ライブラリ展開処理１７を実行する。
【００９１】
ライブラリ展開処理１７では、構文・構造解析処理１６で解析した結果を用い、ＤＦＣ記述アプリケーションソース３で使用されている拡張言語の関数をＤＦＣ記述アプリケーションソース３中に展開する。ここで、関数を展開するとは該関数を対応のソースプログラム（ソースコード）で置換えることを指す。つまり、該関数のソースコードを、ＤＦＣソースライブラリ２７から検索して読出してＤＦＣ記述アプリケーションソース３中に該関数に代替して入力する。拡張言語ＤＦＣ用のライブラリの関数はネスト構造を許可する。
【００９２】
また、このときインデックスファイル３７も参照される。インデックスファイル３７にはＤＦＣソースライブラリ２７の各関数について、入力および出力の変数の数、順序および種類が定義されている。インデックスファイル３７は、文法のチェック（インデックスファイル３７に定義したとおりにＤＦＣソースライブラリ２７のソースコードが記述されているかのチェック）と入出力を組合せてブロックとできるかどうかのチェックのために使用される。
【００９３】
（１−４）データフローグラフ統合解析処理１８
ライブラリ展開処理１７が実行された後に、データフローグラフ統合解析処理１８が実行される。データフローグラフ統合解析処理１８は、ＤＦＣ記述アプリケーションソース３中の、ライブラリ展開処理１７により展開されたソースコードを、所定のブロックＢＬＫｉ単位で解析し、解析結果に基づきデータフローグラフの統合を行う。ＤＤＭＰマクロ関数のソースコード中でコールされたＰＣ関数は結合のパターンに従いＤＦＣ記述アプリケーションソース３の展開データ中にそのまま残す。その後、データフローグラフパラメータ解析処理１９に移行する。ここで、データフローグラフ統合解析処理１８の詳細を以下の（Ａ）ブロック検出と（Ｂ）フローグラフ結合に分けて説明する。
【００９４】
（Ａ）ブロック検出
図６で示したように、展開データのＤＤＭＰマクロ関数呼出し文を抽出し、ブロックＢＬＫｉを検出する。
【００９５】
次に、検出された各ブロックＢＬＫｉについて、該ブロックＢＬＫｉ内の各ＤＤＭＰマクロ関数の入出力引数名を検出して、検出結果に基づき異なるＤＤＭＰマクロ関数間の呼出に係る結合情報を得る。得た結合情報に基づいて、必要ならば該ブロックをさらに細分化する。
【００９６】
（Ｂ）フローグラフ結合
図７に示したように、検出された各ブロックＢＬＫｉについて、異なるフローグラフどうしを結合する。つまり、異なるＤＤＭＰマクロ関数間でメモリやレジスタを介さずにデータパケットを介してデータの受渡しが可能と判断するときは、データ駆動型プロセッサ１３０用には両ＤＤＭＰマクロ関数のデータフローグラフＤＦＧ＃０ｊどうしを結合し、ノイマン型プロセッサ用には両ＤＤＭＰマクロ関数のセッションを削除して対応のＣ言語のソースコードに展開する。他方、データパケットを介してデータの受渡しが可能でないと判断するときは、ＤＤＭＰマクロ関数中のノイマン型プロセッサ用のソースコード部分はそのまま残し、データフローグラフとしては、/*Entry*/セッション、/*Function*/セッション、/*Term*/セッションそれぞれに記述したコードを出力する。
【００９７】
データフローグラフの結合について図１０を参照して説明する。図１０の処理フローチャートは、予めプログラムとしてメモリ６２４に格納されてＣＰＵ６２２により読出されて実行される。また、ブロックＢＬＫｉを有するＤＦＣ記述アプリケーションソース３もメモリ６２４に予め格納されていると想定する。
【００９８】
まず、ＣＰＵ６２２はメモリ６２４からＤＦＣ記述アプリケーションソース３を前述したブロックＢＬＫｉ毎に読出す（ステップＣ１）。読出したブロックＢＬＫｉ中にＤＤＭＰマクロ関数が含まれているか否か判定する（ステップＣ４）。この判定は、関数の名称に‘ddmp’が含まれている関数が含まれているか否かに基づきなされる。ＤＤＭＰマクロ関数は含まれていないと判定されると（ステップＣ４でＮＯ）、当該ブロックＢＬＫｉは通常のＣ言語で記載されたソースコードのみからなるので、そのまま（処理しない）出力される（ステップＣ５）。
【００９９】
一方、ＤＤＭＰマクロ関数が含まれていると判定されると（ステップＣ４でＹＥＳ）、当該ブロックＢＬＫｉに記載された順番に従いＤＤＭＰマクロ関数のそれぞれについて以降の処理が同様に繰返される。
【０１００】
まず、あるＤＤＭＰマクロ関数について、その出力の引数として使用されている変数がデータ型［Ｃ］であるかが判定される（ステップＣ７）。データ型[Ｃ]であると判定されると（ステップＣ７でＹＥＳ）、当該変数が入力の引数として使用されている他のＤＤＭＰマクロ関数が、該ブロックＢＬＫｉ中の当該ＤＤＭＰマクロ関数よりも後に記述されているかを判定する（ステップＣ９）。該当する他のＤＤＭＰマクロ関数が記述されていると判定された場合（ステップＣ９でＹＥＳ）、それは、両ＤＤＭＰマクロ関数の間では該変数に係るデータをメモリやレジスタを介さず、データ駆動型プロセッサ１３０のデータパケットＰＡとして受渡しができるケースに該当する。そして、その判定結果に基づき、ＤＦＣ記述アプリケーションソース３において両方のＤＤＭＰマクロ関数それぞれ中のデータフローグラフＤＦＧ＃０ｊどうしの入力と出力を接続して１つの新たなデータフローグラフを生成して出力する（ステップＣ１７）。その際、ノイマン型プロセッサ１２０用には両ＤＤＭＰマクロ関数のうちデータフローグラフの出力が他のＤＤＭＰマクロ関数のデータフローグラフの入力に接続されたＤＤＭＰマクロ関数からは、Ｔｅｒｍセッションの部分を削除し、そのデータフローグラフの入力が他のＤＤＭＰマクロ関数のデータフローグラフの出力に接続されたＤＤＭＰマクロ関数からはＥｎｔｒｙセッションを削除する（ステップＣ１９）。
【０１０１】
他方、データの受渡しができないケースである場合には（ステップＣ７でＮＯ、またはステップＣ９でＮＯ）、当該ＤＤＭＰマクロ関数のノイマン型プロセッサ用ソースコードの部分はそのままとし（ステップＣ１１）、データフローグラフＤＦＧ＃０ｊは、Ｅｎｔｒｙセッション、ＦｕｎｃｔｉｏｎセッションおよびＴｅｒｍセッションそれぞれに記述したデータフローグラフの入力と出力とが結合される（ステップＣ１３）。
【０１０２】
ステップＣ５、Ｃ１９およびＣ１３の各処理を終了後は、次のブロックＢＬＫｉが有るか否か判別される（ステップＣ２１）。次のブロックＢＬＫｉがなければ（ステップＣ２１でＹＥＳ）、これらフローグラフＤＦＧ＃０ｊどうしの結合を示す情報（ＦＳ結合情報１６１）を生成して出力し（ステップＣ２２）、処理は終了するが、あれば（ステップＣ２１でＮＯ）、ステップＣ１の処理に戻り当該ブロックＢＬＫｉについて以降の処理が同様に繰返される。
【０１０３】
ＦＳ結合情報１６１は、後述のプログラム構造ファイル１０に出力される。
このように、ＤＦＣ記述アプリケーションソース３のＤＤＭＰマクロ関数に相当のデータフローグラフどうしの入出力の接続の可否が判定されて（ステップＣ４、Ｃ７、Ｃ９）、接続が可能なデータフローグラフどうしは接続（結合）されて１つのデータフローグラフとして生成されて（ステップＣ１７）、生成されたデータフローグラフはデータ駆動型プロセッサ１３０用のモジュールを構成する。また、ＤＦＣ記述アプリケーションソース３においては接続（結合）されたデータフローグラフの一部の記述コード（TermセッションとEntryセッション）は削除される（ステップＣ１９）。
【０１０４】
上述のステップＣ１７のデータフローグラフＤＦＧ＃０ｊどうしの結合に際しては、図１０には示されないが、次の（ａ）〜（ｃ）の手順に示すように、ＤＤＭＰマクロ関数を統合（結合）して実行する場合に重複する処理または不要になる処理を削除している（ステップＣ２０）。この削除処理より、機能単位のデータフローグラフＤＦＧ＃０ｊを、それが予め格納されたデータフローグラフライブラリ２８から読出して、読出したデータフローグラフＤＦＧ＃０ｊどうしを組合せて実行する場合のオーバヘッドを軽減することができる。
【０１０５】
具体的には、（ａ）ブロックＢＬＫｉ先頭のＤＤＭＰマクロ関数の/*Term*/および/*Start*/セッションは削除する。（ｂ）ブロックＢＬＫｉ中間のＤＤＭＰマクロ関数の/*Entry*/、/*Term*/および/*Start*/セッションは削除する。（ｃ）ブロックＢＬＫｉ最後のＤＤＭＰマクロ関数の/*Entry*/および/*Start*/セッションは削除する。
【０１０６】
またブロックＢＬＫｉについて次の処理を行う。ブロックＢＬＫｉ先頭のＤＤＭＰマクロ関数の/*Start*/セッションは削除されているので、ブロックＢＬＫｉの最後にブロックＢＬＫｉ先頭のＤＤＭＰマクロ関数の/*Start*/セッションを実行するための関数の呼出し文を挿入する。また、ＦＳエントリ番号解決用の外部名を生成する。また、該ブロックＢＬＫｉのＤＤＭＰマクロ関数中の%変数を従来から知られている手順で解決する。また、該ブロックＢＬＫｉのＤＤＭＰマクロ関数のひとつの出力変数が該ブロックＢＬＫｉの複数の入力エントリで参照されている場合には、当該出力変数を複数の入力エントリそれぞれに与えるために、当該出力変数をコピーするためのコピー関数(ddmp−copyn)が挿入される。当該コピー関数はＤＦＣソースライブラリ２７から読出されて当該ブロックＢＬＫｉ中に展開される。
【０１０７】
（１−５）データフローグラフパラメータ解析処理１９
データフローグラフ統合解析処理１８から出力されたＤＦＣ記述アプリケーションソース３についてデータフローグラフパラメータ解析処理１９が実行される。データフローグラフパラメータ解析処理１９では、ＤＦＣ記述アプリケーションソース３中で参照（展開）しているデータフローグラフについて、データフローグラフ起動用パラメータの設定値をライブラリ８を検索して読出し当該データフローグラフに割当て、また、当該データフローグラフにエントリ番号を割当てる。具体的には、「ユーザ関数名＋連番」でキーワードを生成して、生成したキーワードをエントリ番号として当該データフローグラフに割当てる。つまり、ＤＦＣ記述アプリケーションソース３中のユーザ関数名のそれぞれについて、エントリ番号と、生成されたキーワードとを対応付けて格納したキーワードファイル１６３を生成してメモリ６２４に格納する。
【０１０８】
なお、ユーザ関数名は、ユーザ（プログラマ）が作成した関数についてユーザがつけた名称をいう。これに対してＣ言語に標準で提供されている関数は標準関数という。標準関数名はメモリ６２４に予め登録されているので、登録されていない関数名は全てユーザ関数の名称と判定できる。
【０１０９】
ライブラリ８には、データフローグラフのそれぞれについて、その名称（関数名）と起動用パラメータの設定値とが対応付けて予め格納されている。したがって、データフローグラフ名（関数名）に基づきライブラリ８を検索することで対応する設定値を読出すことができる。
【０１１０】
（１−６）Ｃソース出力処理２２
データフローグラフパラメータ解析処理１９を実行終了後に、Ｃソース出力処理２２にはＤＦＣ記述アプリケーションソース３が与えられる。Ｃソース出力処理２２は、ＤＦＣ記述アプリケーションソース３に基づき、ライブラリ関数の起動処理や変数の受渡しなどの同期情報を埋込んだＣ言語ソースコードであるＣソース４２をメモリ６２４に生成（格納）する。その後、ノイマン型プロセッサ用コンパイラ・リンカ５５のノイマン型プロセッサ用コンパイラ起動２５を実行する。Ｃソース出力処理２２の処理内容を次の（Ａ）〜（Ｆ）にて説明する。
【０１１１】
（Ａ）トークンリスト１６０の各トークンについて、所定基準情報に照らして変更の必要のないトークンを特定する。ＤＦＣ記述アプリケーションソース３中の該特定されたトークンについては、該トークンに対応のソースコードをそのまま、メモリ６２４のＣソース４２の記憶領域に格納する。なお、複数のトークンそれぞれとＣソースコードとを対応付けて格納したテーブルはメモリ６２４に予め格納されており、該テーブルをトークンに基づき検索することで対応のＣソースコードを読出すことができる。所定基準情報は予めメモリ６２４に登録されていると想定する。
【０１１２】
（Ｂ）ＤＦＣ記述アプリケーションソース３においてトークンリスト１６０に登録されていないトークン、すなわち削除されたトークンのＣソースコードはＣソース４２中に出力しない。
【０１１３】
（Ｃ）トークンリスト１６０の各トークンについて、所定基準に照らして対応する置換文字コードが存在するトークンを特定する。ＤＦＣ記述アプリケーションソース３中の該特定されたトークンについては、そのトークンの代わりに対応の置換文字コードをＣソース４２中に出力する。なお、メモリ６２４には、複数のトークンのそれぞれに対応して置換文字コードが登録されたテーブルが予め格納されており、このテーブルをトークンに基づき検索することで対応の置換文字コードを特定できる。
【０１１４】
（Ｄ）ＤＦＣ記述アプリケーションソース３中の変数のうち対応する置換名コードがある変数は、その変数名の代わりに対応する置換名コードをＣソース４２中に出力する。
【０１１５】
Ｃソース出力処理２２では、データフローグラフパラメータ解析処理１９で生成したキーワードファイル１６３のエントリ番号のキーワードは、Ｃソース４２中のＤＤＭＰマクロ関数で記述した予約語（‘call’）の位置に該予約語の替わりに挿入される。具体的には、当該キーワードに対応のキーワードファイル１６３中のユーザ関数名で指示されるＣソース４２中のＤＤＭＰマクロ関数の当該予約語の位置に、該予約語の替わりに当該キーワードが挿入される。挿入されたキーワードを、キーワードファイル１６３の対応のエントリ番号を示す値を初期値に持つ変数として、図７のＣソースファイル７０中に宣言するためのコードを生成してＣソース４２に出力する。この宣言された変数により、ノイマン型プロセッサ１２０側で実行されるべきＣソース４２に従うプログラムにおいてデータ駆動型プロセッサ１３０の入力を明示することができる。
【０１１６】
ＤＦＣ記述アプリケーションソース３中のエントリ番号は後述のプログラム構造ファイル１０を経由し、図１７のデータフローグラフ生成・統合処理３０、割付処理３１およびアセンブラソース出力処理３２を経て、例えば図１９のデータ駆動型プロセッサ用アセンブラソース５２に渡される（出力される）。渡し方はデータ駆動型プロセッサ用アセンブラ５３の仕様にもよるが、好ましくは次の方法である。
【０１１７】
つまり、図１９のデータ駆動型プロセッサ用アセンブラソース５２中の「input  nd001」という文５２１がＤＦＣ記述アプリケーションソース３中のひとつのエントリ番号に対応しており、エントリ番号の値の昇順に「input  XXXX」を記述していくというものである。
【０１１８】
（Ｅ）‘extern’文を出力する。つまり、ＤＦＣ記述アプリケーションソース３中のＤＤＭＰマクロ関数に対する外部名、およびＤＤＭＰマクロ関数中の%変数に対する外部名に対する‘extern’文をＣソース４２中に出力する。
【０１１９】
（Ｆ）ＤＤＭＰマクロ関数の関数本体を出力する。つまり、ＤＦＣ記述アプリケーションソース３中のＤＤＭＰマクロ関数のソースコードから‘call’文を取り除き、%変数を解決した後のソースコードをＣソース４２の最後に出力する。また、ＤＤＭＰマクロ関数のプロトタイプ宣言文をＣソース４２中に出力する。
【０１２０】
（１−７）ノイマン型プロセッサ用コンパイラ起動処理２５
ノイマン型プロセッサ用コンパイラ起動処理２５により、ノイマン型プロセッサ用コンパイラ４３を呼出して起動する。そして、Ｃソース出力処理２２により出力されたＣソース４２は起動されたノイマン型プロセッサ用コンパイラ４３に与えられるので、ノイマン型プロセッサ用コンパイラ４３は与えられたＣソース４２をメモリ６２４に予め格納されている‘Include’ファイル等２３を参照してコンパイルする。コンパイル結果、図１のモジュール１１に対応のオブジェクトファイルが出力される。ノイマン型プロセッサ用コンパイラ４３によるコンパイル手順は、ターゲットシステム１２のノイマン型プロセッサ搭載システム１２Ｂのノイマン型プロセッサ１２０の種別により異なる。その後、後述のプログラム構造出力処理２６を実行する。
【０１２１】
ここで、ノイマン型プロセッサ用コンパイラ起動処理２５の処理手順を次の（Ａ）〜（Ｅ）を参照して説明する。
【０１２２】
（Ａ）まず、ユーザはノイマン型プロセッサ用コンパイラ４３を起動させるための命令情報であるコマンドラインパラメータをキーボード６５０を介して入力するので、入力されたコマンドラインパラメータはＣＰＵ６２２によりメモリ６２４の所定領域に格納される。
【０１２３】
（Ｂ）ＣＰＵ６２２は、ノイマン型プロセッサ用コンパイラ４３を、（Ａ）で作成したコマンドラインパラメータに従い起動する。ノイマン型プロセッサ用コンパイラ４３の起動に失敗した場合は、その旨の終了コードを返却値として呼出し元であるノイマン型プロセッサ用コンパイラ起動処理２５に戻る。起動に成功した場合は、ノイマン型プロセッサ用コンパイラ４３によるコンパイル処理が終了するのを待つ。
【０１２４】
（Ｃ）ノイマン型プロセッサ用コンパイラ４３の終了コード、およびリダイレクトした標準出力および標準エラー出力の内容に基づき、終了状態がＣＰＵ６２２により判断される。
【０１２５】
（Ｄ）標準出力または標準エラー出力にVisualC＋＋（登録商標）に従うメッセージが含まれる場合には、そのメッセージをツールＤＦＣＣのエラー出力先、例えばプリンタ６９０またはディスプレイ６１０などに出力する。当該エラーメッセージは、メモリ６２４に予め格納されており、ＣＰＵ６２２はノイマン型プロセッサ用コンパイラ４３による処理結果に基づきメモリ６２４からメッセージを読出して出力する。
【０１２６】
（Ｅ）最後に、ノイマン型プロセッサ用コンパイラ４３によるコンパイル終了状態に応じた終了コードを返却値として呼出し元であるノイマン型プロセッサ用コンパイラ起動２５の処理に戻る。
【０１２７】
（１−８）プログラム構造出力処理２６
プログラム構造出力処理２６は、前述の処理１５〜１９を経たＤＦＣ記述アプリケーションソース３を入力して、入力したＤＦＣ記述アプリケーションソース３に基づきプログラム構造ファイル１０を生成して出力する。プログラム構造ファイル１０はツールＤＦＣＣ内のコンパイル処理４とリンク処理５との間をインタフェースするためのファイルであり、ＤＦＣ記述アプリケーションソース３毎に１個ずつ生成されて出力される。プログラム構造ファイル１０は画像ライブラリのインデックスを格納している。なお、画像ライブラリは、ライブラリ８、ＦＳライブラリ９１およびオブジェクトライブラリ８１と等価のものである。
【０１２８】
プログラム構造ファイル１０はテキストファイルであり、ＤＦＣ記述アプリケーションソース３の構造を示すために図１１に示すように変数情報１０１とブロック構成情報１０２を含む。
【０１２９】
（Ａ）変数情報１０１について
変数情報１０１は、ＤＦＣ記述アプリケーションソース３中で使用されている変数であって、リンカであるＤＦＣ−ＬＩＮＫ５１で解決すべき１つ以上の変数の情報を示す。変数情報１０１の例が図１２に示される。
【０１３０】
図１２の変数情報１０１では、各変数について、その有効範囲を指定するためにスコープ指定１０１Ａがなされる。たとえば、各変数について‘g’：グローバル型の変数または‘l’：ローカル型の変数のいずれであるかが指定される。また‘int−plane#’型の変数１０２Ａは、プログラム構造ファイル１０毎に１個のみ指定する。‘ddmp−frame’型の変数１０３Ａまたは‘ddmp−int’型の変数１０４Ａは、ＤＦＣ記述アプリケーションソース３において使用している対応する型の変数分だけ繰返し設定する。配列数は、１０進形式表記で１以上の数値を設定可能である。‘ddmp−frame’型の変数１０３Ａの固定値は、１０進形式表記の数値(負の値可)を設定可能である。負の値を指定する場合には、頭に符号‘−’(マイナス)を指定する(正の値を示す符号‘＋’(プラス)は使用不可である。)。
【０１３１】
‘ddmp−int’型の変数１０４Ａの固定値としては、１０進形式表記で０以上の数値を設定可能である。リンカであるＤＦＣ−ＬＩＮＫ５１においては、変数情報１０１の各々の項目に対し以下の処理を行う。
【０１３２】
‘int−plane#’型の変数１０２Ａについては、‘最終フレーム番号＋１’のフレームアドレスを解決する。ＤＤＭＰ実行可能ファイルの分割指定時には、各組合せにおける最大値を最終フレーム番号とする。
【０１３３】
‘ddmp−frame’型の変数１０３Ａについては、該型の変数に該当する実フレーム番号(０〜)を解決する。なお、実フレーム番号として固定値を設定済みの場合、その変数に対しては設定されたフレーム番号をそのまま使用し、同一スコープの他の変数に対しては、このフレーム番号を使用しない。
【０１３４】
以上のように変数１０２Ａと１０３Ａについて、対応のフレーム番号により指示されるＲＡＭ１４３または外部メモリ１３１の領域（アドレス空間）が割当て（確保）される。
【０１３５】
‘ddmp−int’型の変数１０４Ａについては、該型の変数を格納するＲＡＭ１４３または外部メモリ１３１のアドレス(ワード位置)を解決（決定）する。配列数を指定した場合、ＲＡＭ１４３または外部メモリ１３１におけるその変数の先頭アドレスを解決し、配列数分の領域を予約（当該変数に割当て）する。固定値を設定した場合、その変数に対しては設定されたアドレスをそのまま使用し、同一スコープの他の変数に対しては、このアドレスを使用しない。また、配列に対して固定値を指定した場合、その値はその変数の先頭アドレスとして使用し、ＲＡＭ１４３または外部メモリ１３１の当該アドレスから配列数分を変数のための記憶領域として予約（確保）する。
【０１３６】
（Ｂ）ブロック構成情報１０２について
ＤＦＣ記述アプリケーションソース３を解析して得たブロック構成情報１０２を図１３に示す。ＤＦＣ記述アプリケーションソース３中に複数のブロックＢＬＫｉが存在する場合には、図１３のブロック記述(‘Block{'〜‘}’)が各ブロックＢＬＫｉに対応して設定される。各ブロック記述においてはブロック入力情報１０３、ＤＤＭＰマクロ関数情報１０４およびＤＤＭＰマクロ関数接続情報１０５が記述される。
【０１３７】
（Ｂ−１）ブロック入力情報１０３について
ブロック入力情報１０３は図１４に示す形式を有する。図１４を参照するとわかるように、対応のブロックＢＬＫｉが複数の入力を持つ場合には、図１４のブロック記述(‘Input{’〜‘}’)を各入力毎に設定し、ブロックＢＬＫｉの入力の記述順で該ブロックＢＬＫｉの入力エントリが決定される。
【０１３８】
（Ｂ−２）ＤＤＭＰマクロ関数情報１０４について
ＤＤＭＰマクロ関数情報１０４は、対応のブロックＢＬＫｉで使用するＤＤＭＰマクロ関数の情報を図１５に示す形式で有する。対応のブロックＢＬＫｉが複数のＤＤＭＰマクロ関数を参照している場合には、参照している各ＤＤＭＰマクロ関数毎に図１５のブロック記述(‘DDMP-FS{'〜‘}’)が設定される。図１４と図１６に記載のDDMP-FSセクションは、図１５の情報に相当する。
【０１３９】
（Ｂ−３）ＤＤＭＰマクロ関数接続情報１０５について
ＤＤＭＰマクロ関数接続情報１０５は、対応のブロックＢＬＫｉ内で異なるＤＤＭＰマクロ関数を接続する場合に、ＤＤＭＰマクロ関数間の接続を示す情報を、図１６に示す形式で有する。複数の接続がある場合には、図１６の最上位(Link)のブロック記述(‘Link{’〜‘}’)を各接続毎に設定する。
【０１４０】
以上のＤＦＣ−ＣＯＭＰ４１の処理が実行されることにより、ＤＦＣ記述アプリケーションソース３のそれぞれについて、コンパイル結果としてのオブジェクトモジュールであるモジュール１１とプログラム構造ファイル１０が生成されて出力される。
【０１４１】
［２］リンク処理（図１７参照）
次に、ＤＦＣＣリンク処理５におけるＤＦＣ−ＬＩＮＫ５１の処理手順を図１７を参照して説明する。
【０１４２】
上述の［１］コンパイル処理で生成して出力されたデータについてＤＦＣ−ＬＩＮＫ５１は以下の処理（２−１）〜（２−７）を順次実行する。
【０１４３】
（２−１）プログラム構造読込処理２９
プログラム構造読込処理２９では、後段のデータフローグラフ生成・統合処理３０、ＰＣライブラリ取込情報生成処理３３および実行モジュール生成処理３４の各プログラムが該プログラム構造ファイル１０を参照できるようにするために、プログラム構造ファイル１０を入力して、入力したプログラム構造ファイル１０毎に、その内容に基づきプログラム構造テーブル１１０を作成して出力する。データフローグラフ生成・統合処理３０、ＰＣライブラリ取込情報生成処理３３および実行モジュール生成処理３４はプログラム構造ファイル１０に代替してプログラム構造テーブル１１０を参照する。
【０１４４】
プログラム構造テーブル１１０には、ＤＦＣ記述アプリケーションソース３において関数またはブロックＢＬＫｉの名称の定義または入力が、他のいずれの関数またはブロックＢＬＫｉの名称の定義または出力に繋がるかを指示したり、または出力が、他のいずれの関数またはブロックＢＬＫｉの入力に繋がるかを指示する、ＦＳ結合情報（データフローグラフ統合情報）１６１が含まれる。
【０１４５】
（２−２）データフローグラフ生成・統合処理３０
データフローグラフ生成・統合処理３０は、プログラム構造読込処理２９から出力されたプログラム構造テーブル１１０により示されるＦＳ結合情報１６１に基づき、ＦＳライブラリ９１を検索して複数のＦＳを読出して、読出したＦＳどうしを結合してアセンブラソース５２のためのメモリ６２４の所定記憶領域に格納する。具体的には、ＦＳライブラリ９１は複数の関数それぞれについて該関数の識別子（関数名）と、該関数の処理手順を示すデータフローグラフ、すなわちアセンブラソースコードであるＦＳとを対応付けて格納している。したがって、ＦＳ結合情報１６１の関数名に基づきＦＳライブラリ９１を検索することで、対応のＦＳを読出すことができる。
【０１４６】
ＦＳライブラリ９１中の各ＦＳのノード名は同一ＦＳにおいて、または異なるＦＳ間で重複している可能性があるので、この結合時点で重複を解消するようにノード名を変更する。たとえば、「元のノード名＋関数名」などのユニークな名前に付け替える。
【０１４７】
ＦＳとＤＦＧ（データフローグラフ）は１対１に対応するものであって、ＤＦＧにはＦＳを図で表現するための情報が付加されている。
【０１４８】
プログラム構造ファイル１０と展開済みアセンブラソースコード５２の関連を図１８に示す。図１８では、プログラム構造ファイル１０中のＤＤＭＰマクロ関数間の接続情報すなわちＦＳ結合情報１６１が示される。ＦＳ結合情報１６１では、ＤＤＭＰ−ＦＳインデックスの値が‘０’と値が‘１’の２つのＤＤＭＰマクロ関数が接続されていることが示される。また当該値が‘０’は‘From’側に記載されて当該値が‘１’は‘To’側に記載されているので、ＤＤＭＰマクロ関数[０]の出力は、ＤＤＭＰマクロ関数[１]の入力に与えられることが示される。ＦＳどうしの結合は、プログラム構造ファイル１０中のＤＤＭＰマクロ関数間の接続情報に基づき、すなわちＦＳ結合情報１６１に基づき行なわれる。
【０１４９】
まず、図中‘From’のＤＤＭＰ−ＦＳインデックスの値‘０’に基づきＦＳライブラリ９１を検索して、ＤＤＭＰマクロ関数［０］に対応のアセンブラソースコード（ＦＳ）を読出して、データ駆動型プロセッサ用アセンブラソース（以下、単にアセンブラソースという）５２に出力する。次に読出したアセンブラソースコードを、‘From’のエントリ番号の値‘２’に基づき検索して、２番目の出力である‘gout(PE、2)’の変数‘２’を読出す（図１８の→参照）。そして、出力の変数‘２’の値を入力する変数を検索する。つまり、該接続情報（ＦＳ結合情報１６１）の‘To’側のＤＤＭＰ−ＦＳインデックスの値‘１’に基づきＦＳライブラリ９１を検索して、関数［１］に対応のアセンブラソースコードを読出してアセンブラソース５２に出力する。次に‘To’のエントリ番号の値‘１’に基づき、読出した関数［１］のアセンブラソースコードを検索して、１番目の入力である‘input−nd002’を読出す。この結果、ＤＤＭＰマクロ関数[０]の２番目の出力変数の値は、ＤＤＭＰマクロ関数［１］の１番目の入力変数‘input−nd002’に与えられると判定される。このようにして、ＦＳ結合情報１６１によりＦＳ間のデータの入出力関係が指示されるながら、アセンブラソース５２の生成がされる。
【０１５０】
データフローグラフ生成・統合処理３０の手順を模式的に図１９に示す。図１９のように、アセンブラソース５２において接続情報（ＦＳ結合情報１６１）の‘From’に相当する‘Out’命令（“gout（PE,2）”）を‘To’に相当する‘input’命令の行先ノードラベル（“-nd002”）で置換する（図１９の矢印ＡＲの「置換」に対応)。次に‘To’に相当するエントリの‘input’文を削除する。
【０１５１】
（２−３）割付処理３１
上述のデータフローグラフ生成・統合処理３０の実行後、割付処理３１が実行される。割付処理３１ではデータフローグラフ生成・統合処理３０により生成されたデータフローグラフ、すなわち結合されたデータフローグラフ（アセンブラソースコード）をメモリ６２４の所定領域から読出す。そして、読出したデータフローグラフの各ノードに付された名称（ノード名）を、先頭のノードから順番に、例えば‘−nd001’、‘−nd002’、‘−nd003’、・・・と置き換えていく。この置き換え処理は、かならずしも必要な処理ではないが、この処理により、データフローグラフ統合（結合）後のアセンブラソース５２のサイズが必要以上に大きくなるのが防止される。また、アセンブラソース５２において、ＦＳ結合情報１６１で示されるエントリ番号順に対応する‘input’文を整列させる。
【０１５２】
また、割付処理３１により、統合されているデータフローグラフ毎にノード番号の割付けと‘PEｎ’の割付がされる。‘PEｎ’の割付は、データ駆動型プロセッサ１３０を複数個接続したターゲットシステムを想定した場合に必要とされる。接続された各プロセッサ１３０をPE（PE：Processor Element）ｎ（ｎ＝１、２、３、…）と呼ぶ。‘PEｎ’の割付により、データ駆動型プロセッサ１３０を複数個接続した場合に各プロセッサ１３０に対して実行すべき命令数（または命令の種類）を均等に割付ることが可能となる。データパケットＰＡのフィールドＦ３の行先情報に相当するノード番号とPEｎとの割付け（各プロセッサに対する命令の割付け）は予め定められた手順に従い行なわれる。PEｎの割付にはデータ駆動型プロセッサ１３０の図示のない内蔵メモリの使用状況も考慮される。内蔵メモリの使用状況は、データフローグラフにおける内蔵メモリをアクセスする回数（当該アクセスのための命令の使用回数）に基づき判定される。
【０１５３】
このようなターゲットシステムでは、個々のプロセッサPEｎは同様の機能と構成を有するので、ある演算命令はどのプロセッサPEｎでも実行することができる。ターゲットシステムにおいて、もし、ある１つのプロセッサPEｎに演算命令を集中的に割当てると、該プロセッサPEｎがボトルネックとなり、ターゲットシステムでは十分な処理性能を発揮できない。これを回避するために、たとえばプロセッサPE1とPE2を備えるターゲットシステムにおいて、演算命令A、B、C、D、Eを実行すると想定した場合は、割付処理３１は、プロセッサPE1に演算命令AおよびBを有するデータフローグラフを割付け、プロセッサ‘PE2’に演算命令C、DおよびEを有するデータフローグラフを割付け割付けるように処理する。
【０１５４】
割付処理３１による処理後の各データフローグラフ（アセンブラソースコード）はメモリ６２４の所定記憶領域に格納される。
【０１５５】
（２−４）アセンブラソース出力処理３２
アセンブラソース出力処理３２は、割付処理３１によりノード番号および‘PEｎ’の割付済み各データフローグラフ（アセンブラソースコード）をメモリ６２４の所定記憶領域から読出して、処理し、１つのアセンブラソース５２に統合して出力する（または、メモリ６２４の所定記憶領域に格納する）。
【０１５６】
データ駆動型プロセッサ用アセンブラ５３は、アセンブラソース出力処理３２から出力されたアセンブラソース５２を入力してアセンブルして、アセンブル結果をデータ駆動型プロセッサ用実行形式モジュール６のファイルとして出力する（または、メモリ６２４の所定記憶領域に格納する）。具体的には次のようである。
【０１５７】
まず、アセンブラソース出力処理３２は、フローグラフ生成・統合処理３０および割付処理３１が完了後のデータフローグラフを入力して、図示のないＤＤＭＰマクロ関数ソース展開情報(ＧＬ−ＤＤＭＰＬＩＢ)を参照し、次のようなセクションを順次、アセンブラソース５２に展開する。つまり、（Ａ）メモリへの初期値情報記述部、（Ｂ）PE情報記述部→先頭ブロックのPE情報記述部の内容を出力、（Ｃ）入力情報記述部および（Ｄ）ノード情報記述部の順に、アセンブラソースコードをアセンブラソース５２において展開する。
【０１５８】
出力するアセンブラソースコードのソースパスは、次のように生成する。つまり、作業ディレクトリ＋‘\’＋プログラム名“.fs”、作業ディレクトリ：コマンドライン引数の-tオプション指定、プログラム名：コマンドライン引数のリンク対象ファイルの中、先頭のプログラム構造ファイルから拡張子を除いた名称で生成する。
【０１５９】
（２−５）ＰＣライブラリ取込情報生成処理３３
ＰＣライブラリ取込情報生成処理３３では、与えられるプログラム構造テーブル１１０を入力して、入力したプログラム構造テーブル１１０中に示される関数呼出し情報に基づき、呼出される画像処理関数を含む各種のＰＣ関数の名称を列挙したリスト９４を生成して、ＰＣ実行ファイル生成処理３５に出力する。
【０１６０】
（２−６）実行制御モジュール生成処理３４
実行制御モジュール生成処理３４はプログラム構造読込処理２９から出力されたプログラム構造テーブル１１０とモジュール１１を入力して、入力したプログラム構造テーブル１１０に基づきモジュール１１から、ノイマン型プロセッサ搭載システム１２Ｂのノイマン型プロセッサ１２０の実行を制御するために必要なソースコード群であるＰＣプログラムを自動生成する。ＰＣプログラムはデータフローグラフ記述のコードを削除したＣ言語ソースコードで記述されたものであり、Ｃソースファイル７０としてノイマン型プロセッサ用コンパイラ起動処理３６に出力される。
【０１６１】
ノイマン型プロセッサ用コンパイラ起動処理３６により起動されるノイマン型プロセッサ用コンパイラ・リンカ５５のコンパイラ機能はＣソースファイル７０を入力して、入力したＣソースファイル７０中のソースプログラムをオブジェクトライブラリ８１を参照しながらコンパイルして、コンパイル結果であるノイマン型プロセッサ関数オブジェクト７１を出力する。ノイマン型プロセッサ関数オブジェクト７１でコールされている各種ＰＣ関数は、オブジェクトライブラリ８１を検索して読出された各種のオブジェクトが取り込まれた（展開された）後のモジュールである。このＰＣプログラムの自動生成手順およびオブジェクトモジュールへの変換手順は周知の技術であるから説明は略す。
【０１６２】
Ｃソースファイル７０とノイマン型プロセッサ関数オブジェクト７１それぞれは、図１のモジュール１１に相当するものであり、Ｃソースファイル７０とノイマン型プロセッサ関数オブジェクト７１のうちノイマン型プロセッサ関数オブジェクト７１のみがリンカに与えられる。Ｃソースファイル７０は図１のＣソース５４に対応する。
【０１６３】
また、実行制御モジュール生成処理３４はコンパイル時に解決できなかったGPB-M型変数(ddmp−frame、ddmp−int)、プレーン変数および入力エントリ変数を、プログラム構造テーブル１１０の情報に基づき、リンク時に解決できるようにＣソースファイル７０に出力する。コンパイル時の未解決変数を解決するためのモジュール生成方法を以下のステップ１〜５で示す。
【０１６４】
ステップ１：メモリ６２４に予め準備した記憶領域である作業フォルダにモジュール記述用の一時ファイル(番号付加)を作成する。作成したファイルはＣソースファイル７０に相当し、他のファイル名と重複しない名称を有する。
【０１６５】
ステップ２：プログラム構造テーブル１１０に格納されているddmp_frame型の変数を解決するために、ddmp_frame型の各変数に、分割毎にフレーム番号がユニークになるように０以上の値(負数リテラルを除く)を割当てる。図２０に示すように、ユニークな値を割当てるために、ddmp_frame型の変数をそれぞれを、グローバルリテラル値、ローカルリテラル値、グローバル変数、共通部のローカル変数、分割部のローカル変数に分類する。分類結果、リテラル値の変数にはその値を割当てる。また、その他の変数は０以上で未使用の値をテーブル７３から検索し、検索した値を実フレーム番号として割当てるとともに、テーブル７３に使用済み値として登録する。各変数についての割当て結果は、‘int<変数名>＝<実フレーム番号>;’の書式に従いＣソースファイル７０に出力する。
【０１６６】
ステップ３：プログラム構造テーブル１１０に格納されている‘int−plane#’型の変数を解決するために、図２０に示すように、‘int’型（整数型）の変数名に０以上の未使用フレーム番号の最小値をフレームアドレスとして割当てる。割当て結果は、書式‘int<変数名>＝<未使用フレーム番号最小値>;’に従いＣソースファイル７０に出力される。
【０１６７】
ステップ４：プログラム構造テーブル１１０に格納されている‘ddmp−int’型の変数を解決するために、該変数に、分割されたフレーム毎に変数を格納するアドレス(ワード位置)がユニークになるように０以上の値を割当てる。
【０１６８】
ユニークな値を割当てるために、図２１に示すように、‘ddmp−int’型の各変数をグローバルリテラル値、ローカルリテラル値、グローバル変数、共通部のローカル変数、分割部のローカル変数に分類し、分類結果、リテラル値である変数にはその値を割当てる。また、その他の型の変数には０以上で未使用の値(配列の場合は配列要素数分連続する未使用値)をテーブル７４から検索し、検索した値を当該変数を格納するアドレス(ワード位置)として割当てる。またテーブル７４に使用済み値として登録する。割当ての結果は、‘int<変数名>＝<変数を格納するアドレス(ワード位置)>;’に従いＣソースファイル７０に出力される。
【０１６９】
ステップ５：プログラム構造テーブル１１０に格納されている入力エントリ変数を解決するために、各入力エントリ変数について共通フレーム部は０から順に値を割当て、分割フレーム部は共通フレーム部で割当てられた最大番号＋１から順に値を割当てる。割当て結果は、‘int<変数名>＝<入力エントリ番号>;’の書式に従いＣソースファイル７０に出力される。入力エントリ変数の値割当て手順を模式的に図２２に示す。
【０１７０】
（２−７）ＰＣ実行ファイル生成処理３５
ＰＣ実行ファイル生成処理３５は、ノイマン型プロセッサ用コンパイラ・リンカ５５（コンパイラとリンカが区別されている場合はリンカ）を起動する。起動したノイマン型プロセッサ用コンパイラ・リンカ５５は、ノイマン型プロセッサ関数オブジェクト７１を入力して、入力したノイマン型プロセッサ関数オブジェクト７１に画像ライブラリ９２およびオブジェクトライブラリ８１を含むその他の各種ライブラリ９３をリンクすることにより、ノイマン型プロセッサ実行形式モジュール７のファイルを生成して出力する。
【０１７１】
リンク時には、ＰＣ実行ファイル生成処理３５は、ＰＣライブラリ取込情報生成処理３３から受理したリスト９４に登録されたＰＣオブジェクト名のＰＣオブジェクトを優先してノイマン型プロセッサ関数オブジェクト７１にリンクさせる。つまり、複数のＰＣオブジェクトをオブジェクト名とオブジェクトの本体（オブジェクトコード）とを対応付けて予めオブジェクトライブラリ８１に登録しておくと、オブジェクトライブラリ８１中のあるＰＣオブジェクトと同じ名前の関数が他のライブラリに存在する場合であっても、ＰＣ実行ファイル生成処理３５は、他のライブラリ優先してオブジェクトライブラリ８１に登録されたＰＣオブジェクトが読出されてノイマン型プロセッサ関数オブジェクト７１にリンクされる。
【０１７２】
（実施の形態の効果）
本実施の形態によれば、プログラマは、複数のＤＤＭＰマクロ関数をライブラリとして予め用意し、またプログラマは、ＤＤＭＰマクロ関数をコールする関数をＤＦＣ記述アプリケーションソース３中に記述し、かつＤＤＭＰマクロ関数間のつながりを両ＤＤＭＰマクロ関数間で引数の名称の対応を取るように記述することで、複雑なデータフローグラフをＣ言語という高級言語で記述することができる。したがって、データ駆動型プロセッサ１３０およびノイマン型プロセッ１２０のＣＰＵ４１それぞれは、ＤＦＣ記述アプリケーションソース３を実行することにより他方のプロセッサで実現しているアルゴリズムを極めて容易に実施できる。
【０１７３】
また、モジュール化したＤＤＭＰマクロ関数を組合わせる際に、単に１つの関数の実行が終了した後に次の関数を実行する、ということを指示するようなソースコードの記述をしなくてもよい。これを図２３（Ａ）〜（Ｃ）を参照して説明する。データフローグラフで示される図２３（Ａ）と（Ｂ）の関数Ｆ１と関数Ｆ２を、ＤＤＭＰマクロ関数で記述すして、ＦＳ結合情報１６１に従うことで、ノードＮ１１とノードＮ３どうしは結合することが判明して、図２３（Ｃ）の結合結果が得られることを示している。つまり、図２３（Ｃ）によれば、図２３（Ａ）と（Ｂ）のノードＮ３とノードＮ１１における一旦何らかの記憶装置にデータを待避させる処理を省略することができるので、図２３（Ｃ）のデータフローグラフに従えば一度のデータ入力で図２３（Ａ）と（Ｂ）の最終結果を得ることができる。
【０１７４】
図２３（Ａ）では、ノードＮ１とノードＮ２に与えられる入力データをノードＮ６で処理し、処理結果をノードＮ１１を介して出力データとして得ている。その後、該出力データを図２３（Ｂ）のノードＮ３に入力データとして与えて、ノードＮ７にて該入力データを処理し、ノードＮ１２において処理結果を得ている。これに対して図２３（Ｃ）では、ノードＮ４とノードＮ５に与えられる入力データはノードＮ８で処理されて、処理結果はノードＮ９に与えられる。ノードＮ９では、ノードＮ８から与えられる処理結果を入力して処理して、処理結果はノードＮ１３に与えられる。したがって、ノードＮ１３を介してノードＮ９の処理結果を得ることができる。
【０１７５】
図２３（Ａ）と（Ｂ）のフローグラフを個別に実行する処理と、図２３（Ｃ）の図２３（Ａ）と（Ｂ）を接続（結合）した場合の処理とを比較すると、ノードＮ１２の出力データとノードＮ１３の出力データは等価であるが、後者の処理の方がノードＮ１１およびＮ３の処理が省略されている分、結果を得る為に要する時間およびプロセッサにかかる負荷は前者よりも少ない。
【０１７６】
なお、ＦＳ結合情報１６１に従い結合されるフローグラフは２つに限らず３つ以上であってもよい。
【０１７７】
本実施の形態によって、図２３（Ａ）と（Ｂ）の２つのＤＤＭＰマクロ関数を拡張言語ＤＦＣを用いて記述したＤＦＣ記述アプリケーションソース３を、コンパイルしリンクして実行形式モジュール（データ駆動型プロセッサ用実行形式モジュール６）に変換すると、実行形式モジュールにおいては２つのＤＤＭＰマクロ関数を実行するデータフローグラフは、図２３（Ｃ）のように１つに結合される。その結果、複数のＤＤＭＰマクロ関数に従う処理を、データ駆動型プロセッサ１３０特有のパイプライン処理に適合できる形式にして出力でき、両プロセッサによる協調動作に従う処理を高速化できる。
【０１７８】
（他の実施の形態）
以上説明したツールＤＦＣＣ中の各種処理機能は、プログラムで実現される。本実施の形態では、このプログラムは図４のパソコンで読取可能な記録媒体に格納される。
【０１７９】
本実施の形態では、この記録媒体として、図４のパソコンで処理が行なわれるために必要なメモリ、たとえばメモリ６２４のようなそのものがプログラムメディアであってもよいし、また外部記憶装置として図示のない磁気テープ装置およびＣＤ−ＲＯＭ駆動装置６４０などのプログラム読取装置が設けられ、そこに記憶媒体である磁気テープまたはＣＤ−ＲＯＭ６４２が挿入されることで読取可能なプログラムメディアであってもよい。いずれの場合においても、格納されているプログラムはＣＰＵ６２２がアクセスして実行させる構成であってもよいし、あるいはいずれの場合もプログラムが一旦読出されて、読出されたプログラムは、図４のパソコンの所定のプログラム記憶エリア、たとえばメモリ６２４のプログラム記憶エリアにロードされて、ＣＰＵ６２２により読出されて実行される方式であってもよい。このロード用のプログラムは、予め当該パソコンに格納されているものとする。
【０１８０】
ここで、上述したプログラムメディアはパソコン本体と分離可能に構成される記録媒体であり、固定的にプログラムを担持する媒体であってもよい。たとえば、磁気テープやカセットテープなどのテープ系、フレキシブルディスク６３２や固定ディスク６２６などの磁気ディスクやＣＤ−ＲＯＭ６４２／ＭＯ（Magnetic  Optical  Disc）／ＭＤ（Mini  Disc）／ＤＶＤ（Digital  Versatile  Disc）などの光ディスクのディスク系、ＩＣカード（メモリカードを含む）／光カードなどのカード系、あるいはマスクＲＯＭ、ＥＰＲＯＭ（Erasable  and  Programmable  ＲＯＭ）、ＥＥＰＲＯＭ(Electrically  ＥＰＲＯＭ)、フラッシュＲＯＭなどによる半導体メモリなどである。
【０１８１】
また、本実施の形態においては、図４のパソコンはインターネットを含む通信ネットワーク３００と通信インターフェィス６８０を介して接続可能な構成が採用されているから、これら通信ネットワーク３００からプログラムがダウンロードされることで流動的にプログラムを担持する媒体であってもよい。なお、このように通信ネットワーク３００からプログラムがダウンロードされる場合には、ダウンロード用プログラムは予め当該パソコン本体に格納しておくか、あるいは別の記録媒体から予め当該パソコン本体にインストールされるものであってもよい。
【０１８２】
なお記録媒体に格納されている内容としてはプログラムに限定されず、データであってもよい。
【０１８３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１８４】
【図１】本発明の実施の形態に従う動作環境を示すブロック図である。
【図２】本発明の実施の形態に従うターゲットシステムの構成図である。
【図３】（Ａ）と（Ｂ）は本発明の実施の形態に従うデータ駆動型プロセッサの構成を説明する図である。
【図４】本発明の実施の形態に従う動作環境が構築されるパソコンのブロック構成図である。
【図５】本発明の実施の形態に従うＤＤＭＰマクロ関数の記述例を示す図である。
【図６】本発明の実施の形態に従うＤＦＣ記述アプリケーションソースの展開例を示す図である。
【図７】図６のＣソースがノイマン型プロセッサ用ソースコードとデータ駆動型プロセッサ用のソースコードとに分離していく様子を模式的に示す図である。
【図８】本発明の実施の形態に従うツールＤＦＣＣの前半処理手順を模式的に示す図である。
【図９】本発明の実施の形態に従う構文・構造解析処理のフローチャートである。
【図１０】本発明の実施の形態に従うデータフローグラフ統合・解析のフローチャートである。
【図１１】本発明の実施の形態に従うプログラム構造ファイルの内容例を示す図である。
【図１２】図１１の変数情報の一例を示す図である。
【図１３】図１１のブロック構成情報の一例を示す図である。
【図１４】図１３のブロック入力情報の一例を示す図である。
【図１５】図１３のＤＤＭＰマクロ関数情報の一例を示す図である。
【図１６】図１３のＤＤＭＰマクロ関数接続情報の一例を示す図である。
【図１７】本発明の実施の形態に従うツールＤＦＣＣの後半処理手順を模式的に示す図である。
【図１８】本発明の実施の形態に従うデータフローグラフ生成・統合処理を説明するための図である。
【図１９】本発明の実施の形態に従うデータフローグラフ生成・統合処理を説明するための図である。
【図２０】本発明の実施の形態に従う実行制御モジュール生成処理を説明するための図である。
【図２１】本発明の実施の形態に従う実行制御モジュール生成処理を説明するための図である。
【図２２】本発明の実施の形態に従う実行制御モジュール生成処理を説明するための図である。
【図２３】（Ａ）〜（Ｃ）はデータフローグラフの統合の具体例を説明する図である。
【符号の説明】
【０１８５】
１  動作環境、３  ＤＦＣ記述アプリケーションソース、４  コンパイル処理、５  リンク処理、６  データ駆動型プロセッサ用実行形式モジュール、７  ノイマン型プロセッサ用実行形式モジュール、１０  プログラム構造ファイル、１１  ノイマン型プロセッサ用コンパイラ中間形式モジュール、４２  Ｃソース、５２  データ駆動型プロセッサ用アセンブラソース、７０  Ｃソースファイル、１２０  ノイマン型プロセッサ、１３０  データ駆動型プロセッサ。
【図１】
2007128343.tif 000003
【図２】
2007128343.tif 000004
【図３】
2007128343.tif 000005
【図４】
2007128343.tif 000006
【図５】
2007128343.tif 000007
【図６】
2007128343.tif 000008
【図７】
2007128343.tif 000009
【図８】
2007128343.tif 000010
【図９】
2007128343.tif 000011
【図１０】
2007128343.tif 000012
【図１１】
2007128343.tif 000013
【図１２】
2007128343.tif 000014
【図１３】
2007128343.tif 000015
【図１４】
2007128343.tif 000016
【図１５】
2007128343.tif 000017
【図１６】
2007128343.tif 000018
【図１７】
2007128343.tif 000019
【図１８】
2007128343.tif 000020
【図１９】
2007128343.tif 000021
【図２０】
2007128343.tif 000022
【図２１】
2007128343.tif 000023
【図２２】
2007128343.tif 000024
【図２３】
2007128343.tif 000025