JP3617851B2 - パイプライン化データ処理方法 - Google Patents

パイプライン化データ処理方法 Download PDF

Info

Publication number
JP3617851B2
JP3617851B2 JP12526794A JP12526794A JP3617851B2 JP 3617851 B2 JP3617851 B2 JP 3617851B2 JP 12526794 A JP12526794 A JP 12526794A JP 12526794 A JP12526794 A JP 12526794A JP 3617851 B2 JP3617851 B2 JP 3617851B2
Authority
JP
Japan
Prior art keywords
pipeline
data
task
host application
data processing
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
JP12526794A
Other languages
English (en)
Other versions
JPH07105020A (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.)
Xerox Corp
Original Assignee
Xerox Corp
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 Xerox Corp filed Critical Xerox Corp
Publication of JPH07105020A publication Critical patent/JPH07105020A/ja
Application granted granted Critical
Publication of JP3617851B2 publication Critical patent/JP3617851B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors

Description

【0001】
【産業上の利用分野】
本発明は、多重処理環境をエミュレートすることによって単一アプリケーション環境において画像ヘッダ及び画像データを有する画像処理に係り、特に、所定のオブジェクト又はデータストラクチュアのライブラリを用いたオブジェクト指向システムに関しており、当該オブジェクト指向システムは、ユニックス(登録商標)のようなパイプラインデータストラクチュアをエミュレートするストリーム指向のデータ処理ストラクチュアを生成するため、ホストアプリケーションとデータソース(源)の間でリンクされ得る。
【0002】
【従来の技術】
真の多重処理環境でのデータ処理パイプラインの使用は周知である。公知の多重処理環境の例は、単一プロセッサが真の多重処理を支援することができる多重プロセッサシステム及び高水準(レベル)システムの両方を含む。ユニックス(登録商標)オペレーティングシステムはこのような多重処理システムにおいてしばしば使用される。
【0003】
このような多重処理環境において、データ処理パイプラインは、画像処理、データベース処理、又はスプレッドシート(表計算)処理と対応するデータブロックのような大容量の高水準で構造化されたデータブロックを処理するのに極めて有用である。このようなデータブロックにおいて、種々のデータ処理動作は、データブロックの各データ要素上で実行されなければならない。さらに、種々のデータ処理動作は特定の順序で実行される。
【0004】
多重処理環境において、データ処理パイプラインは、データブロックを処理するために非常に効率的な方法を提供する。これらのデータ処理パイプラインにおいて、各個別のデータ処理動作はパイプラインの一部分として定義される。各部分は、それが隣接する複数の部分(上流部分及び下流部分)の内の一つ又は両方へリンクされる。従って、データ処理動作は、データソースとホストアプリケーションの間でリンクされたパイプラインの部分同士の連鎖を形成する。多数の独立プロセッサを有するコンピュータにおいては、各パイプライン部分がこれらのプロセッサの内の一つと対応している。この場合、各プロセッサは独立して動作し、且つコンピュータオペレーティングシステムはプロセッサとメモリアロケーション(割り当て)間でデータの流れを制御する。これは、データを効率的に処理するが、プロセッサとメモリを制御するために必要なオーバーヘッドは、相当な割合でシステム資源を消費する。
【0005】
同様に、多数の異なる独立した処理動作又は処理(プロセス)を同時に実行することができる単一プロセッサを有するコンピュータにおいて、各パイプライン部分は独立型実行処理の内の一つに対応している。この場合、オペレーティングシステムは、各処理のランタイム、各処理とメモリ間のデータのフロー、及びメモリアロケーションを割り当てる。この場合において、コンピュータを制御するために必要なオーバーヘッドは、各処理とそのデータが、プロセッサが実行される度にそのプロセッサへ、そしてそのプロセッサから、スワップ(交換)されなければならないので、より一層大きな割合でシステム資源を消費することになる。さらに、これらの処理はオペレーティングシステムを介して通信するので、それが可能であっても、ダイナミック(動的)にパイプラインを変えるのは困難である。
【0006】
一般に、パイプラインに対するデータのソース(源)は、例えば、1)金融情報を提供するスプレッドシート、2)データベース情報を提供するデータベースファイル内の記録、及び3)オリジナル文書、コンピュータ作成画像、他から従来の画像スキャナによって生成された画像データであってもよい。これに対して、ホストアプリケーションは、処理された金融データからパイチャート、バーチャート、他を生成するためのグラフィックスプログラムか、処理されたデータベースデータを使用する棚卸し(在庫管理)、会計、又は併合プログラムか、又は処理された画像データから画像を形成するための画像形成装置であってもよい。
【0007】
データの特別なソース又は最終的なホストアプリケーションにかかわらず、データ処理パイプラインの第1の又は最上流の部分は、一般に、パイプラインのためのデータソースである。或いは、この第1のパイプラインのためのデータソースは第2のパイプラインであってもよい。この場合、第2のパイプラインの特別なブランチング(分岐化)又は「ファンアウト(fan−out )」パイプライン部分が、第1のパイプラインと、第2のパイプラインの下流部分の両方へデータを供給するために使用され得る。両ケースにおいて、第1のパイプライン部分は、データのソースからパイプラインに対するデータ要素を得て、且つこのデータ要素を直ぐ下流の又は第2のパイプライン部分に使用可能とする。第2のパイプライン部分は第1のパイプライン部分からデータ要素をシーケンシャル(順次)に受け取り、このデータ要素を処理し、且つそれを直ぐ次の下流又は第3のパイプライン部分へ渡す。同時に、真の多重処理環境において、第1のパイプライン部分はデータのソースから次のデータ要素を得て、且つそれを第2のパイプライン部分へ出力すると共に、データパイプラインの第2又は下流の隣接部分が第1のパイプライン部分から受け取られたデータ要素を処理し、且つそれをデータ処理パイプラインの第3の部分へ出力する。従って、各データ要素がパイプライン部分の内の一つによって処理されると、そのデータ要素はそれがホストアプリケーションへ出力されるまで次の下流部分へ出力される。
【0008】
このように、データは、一つの処理動作又はプロセッサをパイプラインの各部分と対応させることによって、多重処理環境において効率的且つ迅速に処理され得る。これは、パイプラインが、最も効率の悪いパイプライン部分及びオーバーヘッドによって生じる非効率性によってのみ限定されるにすぎないデータスループット(処理能力)でデータブロックを処理することが可能であることを確実とする。
【0009】
これに対して、単一処理環境においては、全ての方法が非常に非効率的であるにもかかわらず、データを処理するために様々な方法が利用可能である。例えば、各データ処理動作は、任意の他のデータ処理動作がデータブロックの任意のデータ要素へ適用されるよりも前に、データブロックの全てのデータ要素へ適用される。即ち、データブロックの全ての要素は、次のデータ処理動作が前もって処理されたデータ要素のいづれかに実行される前に処理されなければならない。従って、単一タスキングデータ処理動作の効率は、各データ処理動作の効率に比例する。
【0010】
従って、データ要素は多重処理環境でのパイプラインの或るデータ処理部分から連続的に移動するので、データブロックのメモリアロケーション(割り当て)を管理する為に求められる必要オーバーヘッドは、各データ要素が何度もメモリから読み取られ、また何度もメモリへ書き込まれなければならない単一処理環境と比べると小さい。即ち、必要なメモリを管理するために要求されるオーバーヘッドは単一処理環境においては絶対に不可欠である。
【0011】
【発明が解決しようとする課題】
従って、本発明は、単一処理プロセッサを用いて多重処理画像処理パイプラインをエミュレートすることによって画像を処理するための制御システムを提供する。
【0012】
【課題を解決するための手段】
本発明の一つの方法においては画像処理動作のライブラリが提供されている。このライブラリにおける各画像処理動作、又は関数は、オブジェクト指向システム内のクラス又はサブクラスである。パイプラインの各部分は具体化(インスタンシェート)された関数又はタスクであり、且つタスクの状態を自己定義するために一つ又はそれより多くの画像処理関数と充分なデータストラクチュアを有する。動作上、ホストアプリケーションがスキャナ又は画像データファイルのようなデータのソースからの処理された画像入力を必要とする時、画像処理パイプラインがそのソースからホストアプリケーションへ形成される。画像処理パイプラインは、画像処理ライブラリにおける関数のうちの一つを呼び出し且つタスクを形成するためにその呼び出された関数を初期化することによって形成される。このタスクはパイプラインの第1の又は最上流の部分となる。第1のパイプラインソースから処理されるべき画像のデータ要素を得る。データ要素は、好ましくは、画像のラスタ走査の単一走査ラインである。このソースは、好ましくは、スキャナ、ファクシミリ装置、遠隔コンピュータ、直列又は並列データ信号を出力するセンサ他、又はROM、RAMの一部、若しくはディスクドライブ内のディスクに記憶されたデータのブロックである。このデータ要素はまた、第1のパイプライン部分それ自体によって直接発生されることができる。この最後のケースにおいて、データ要素は、初期化された変数の値や第1のパイプライン部分の状態などから得られることが可能である。最初に初期化される時、ホストアプリケーションの逆方向又は上流のリンクが第1のパイプライン部分へセットされる。
【0013】
第2のパイプライン部分は、第1のパイプライン部分によって得られたデータ要素を処理するために必要とされる。従って、ホストアプリケーションはライブラリにおける関数の内の一つを初期化することによって他のタスクを生成する。この第2のパイプライン部分が作成されると、この部分は、自動的に第1のパイプライン部分へリンクされる。さらに、ホストアプリケーションのリンクは第2のパイプライン部分へセットされる。他の画像処理動作が全く要求されない場合、ホストアプリケーションの逆方向リンクは、処理されたデータを要求するホストアプリケーションの部分と第2のパイプライン部分の間に残る。
【0014】
或いは、パイプラインが追加の部分を要求するならば、ホストアプリケーションが関数ライブラリに対して追加の呼出しを行ない、より多くのタスク又はパイプライン部分を作り出す。新しく作成されたタスクは、データ処理パイプラインの第3の、第4の、と順に続くパイプライン部分となる。各追加のパイプライン部分が作成されると、各追加のパイプライン部分と直ぐ上流のパイプライン部分間で逆方向リンクが形成される。再び、パイプラインの最後の部分が作成された後、ホストアプリケーションの逆方向リンクはパイプラインの最後の部分へセットされたままである。このように、各パイプライン部分へのアクセスは、オペレーティングシステムよりもむしろ直接下流のパイプライン部分(又は最後のパイプラインに対するホストアプリケーション)によって制御され且つ保持される。従って、メモリを保持するために必要なオーバーヘッドは最小であり、且つタスクの実行を計画するために必要なオーバーヘッドは存在していない。それゆえ、本発明の制御システムは、多重処理環境からの効率的な処理の利点を単一処理環境からの最小オーバーヘッドの利点と結び付けると共に、これらの環境の欠点を回避したのである。
【0015】
さらに、これによって、単一処理アプリケーションは、単一タスキングプロセッサ、単一プロセッサ、自動時分割を用いて多重タスキングシステム、又は真の多重タスキングシステムにおいて実行され得るだけでなく、上記の利点を維持することができる。即ち、オペレーティングシステムよりもホストアプリケーションが、パイプラインを作成し、保持し、制御し、且つ終了するので、パイプラインストラクチュアは、処理のタイプ又はホストアプリケーションを実行することとは無関係である。従って、ホストアプリケーションは、単一プロセッサ多重タスキングシステムにおいて実行される多数の独立したアプリケーションの内の一つとなることができる。同時に、このホストは、パイプラインをスケジュールし、このパイプラインに対するメモリを割り当て、保持し、且つ割り当て解除したりする為に、オペレーティングシステムを使用せずに、パイプラインシステムを用いることによって、スキャナからパイプラインを実行することができる。このようにして、オペレーティングシステムを用いてパイプラインを実行する際に通常は付きまとう欠点が回避され得る。
【0016】
画像処理を始めるにあたって、ホストアプリケーションはパイプラインの最後の部分から画像のヘッダを要求する。パイプラインの各部分はまた、それがリンクされる上流のパイプライン部分からヘッダを要求する。これは、上流のパイプライン部分を呼び出すために下流のパイプライン部分から手順呼出しを行なうことによって実行される。これは、下流のパイプライン部分をスタックへプッシュ(付け足すこと)することに類似している。ヘッダが各上流のパイプライン部分から要求されると、プロセッサは下流のパイプライン部分の処理を停止し且つ上流パイプライン部分の処理を開始する。一旦第1のパイプライン部分に達すると、第1のパイプライン部分はヘッダを入手して(又は生成して)、且つそのヘッダをデータ要素として第2のパイプライン部分へリターンする。一旦第1のパイプライン部分がヘッダをリターンすると、CPUは第1のパイプライン部分の実行を停止し、且つ第2のパイプライン部分の実行を開始する。即ち、下流のパイプライン部分は上流のパイプライン部分を呼び出した手順呼出しからリターンされる。これは、下流のパイプライン部分をスタックからポップオフすることに類似している。一度、第2のパイプライン部分がヘッダを処理すると、ヘッダは第3のパイプライン部分へリターンされる。
【0017】
次いで、第3のパイプラインは、そのデータ処理動作を、第2のパイプライン部分から受け取られた処理されたヘッダ上で実行し、この処理されたヘッダを、第4のパイプライン部分へリターンし、且つ動作を停止する。このヘッダは、各パイプライン部分において同じように処理される。最後のパイプライン部分がヘッダを処理した後で、この最後のパイプライン部分は、完全に処理されたヘッダをホストアプリケーションへリターンする。次いで、ホストアプリケーションは処理された走査ラインを、この最後のパイプライン部分から要求する。上記に概説された処理は、ホストアプリケーションからの走査ラインの要求ごとに繰り返される。ホストが全体の画像を入力しなかった場合、当該ホストは他の走査ラインを要求する。この要求は、再び、上流から第1のパイプライン部分まで移動し、且つ処理された走査ラインは下流からホストアプリケーションまで移動する。このように、パイプラインの下で処理された走査ラインは、効率の高い低オーバーヘッド方式で行なわれる。さらに、画像処理パイプラインの効率はパイプラインの最低の効率のリンクのみに依存する。
【0018】
本発明の一つの態様は、シングル・タスク環境においてデータ・アイテムをパイプライン処理するパイプライン化処理方法であって、該データ・アイテムはヘッダ及び少なくとも1つのデータ・セットを有し、プロセッサ上のホストアプリケーションを実行するステップと、リンクされたタスクのパイプラインを形成するために複数のデータ処理タスクを生成するステップであって、各データ処理タスクはライブラリ関数を起動することにより生成され、各データ処理タスクはデータ処理を実行するために前記プロセッサを制御し、各データ処理タスクは、前記データ処理タスクと、パイプラインの少なくとも1つの他のデータ処理タスク及び前記ホストアプリケーションとの間でデータ・アイテムのヘッダの受け渡しを行うためのヘッダ・チャンネルと、少なくとも1つのデータ処理チャンネルと、前記データ処理タスクをパイプラインの少なくとも1つの他のデータ処理タスク及び前記ホストアプリケーションにリンクさせるための少なくとも1つのリンクとを有する、複数のデータ処理タスクを生成するステップと、前記データ処理タスクに前記データ・アイテムの少なくとも1つのデータ・セットを前記データ・アイテムのヘッダに基づき処理させるために前記ホストアプリケーションを用いてパイプラインを呼び出すステップとを有するパイプライン化処理方法である。
【0019】
【実施例】
図1に示されているように、コンピュータ100は単一処理コントローラ(CPU−中央処理装置)20を有する。コンピュータ100は入力/出力(I/O)インターフェース22、ROM24、及びRAM26も有する。CPU20は制御信号を制御ライン28を介してI/Oインターフェース22、ROM24、及びRAM26へ送り、且つデータバス30を通してI/Oインターフェース、ROM24、RAM26へデータを送ったり、I/Oインターフェース、ROM24、RAM26からデータを受け取ったりする。タスクライブラリ10、データソース12、ディスプレイ14、キーボード16、マウス18、及びディスクドライブ19は、I/Oインターフェース22を介してCPU20と接続されている。マウス18は、マウス、トラックボール、ライトペン、タッチスクリーン、タッチパッド、又はその他同種のもののようなあらゆる第2のポインティング装置を示す。ディスクドライブ19は、ハードドライブ、ハードカード、フロッピーディスク及びフロッピーディスクドライブ、CD−ROM及びCD−RAMディスクドライブ、フラッシュメモリ、又はその他同種のもののようなあらゆる非揮発性の記憶装置を示す。
【0020】
CPU20は単一処理プロセッサである。即ち、CPUは、多くても一回に一つのアプリケーションのためにデータをアクティブに処理することが可能であり、且つ前もって作動し且つ一回で単一のデータ処理動作のみを実行することが可能である。I/Oインターフェース22は、CPU20を、直列データポート(図示されてない)及び並列データポート(図示されてない)のいずれかを介して直列又は並列のデータ入力ソース又はデータ出力ソースへ接続する。データのこれらのソースは、当然、キーボード16及びデータソース12だけでなく、ディスクドライブ19及びマウス18も含む。上記のように、データソース12は、スキャナ、ファクシミリ装置又はその他同種のもの、遠隔コンピュータ、センサ又はその他同種のものを含む。I/Oインターフェース22は、ディスプレイ14を駆動し且つキーボード16、マウス18、及びディスクドライブ19からの信号を入力するために必要なハードウェアも有する。
【0021】
ROM24は、CPU20に対する全ての基本的なオペレーティングプログラムを記憶し、且つブートストラップ又はその他同種のものを含む。RAM26は、非常に多くのランダムアクセス可能なメモリ位置を備える。RAM26はブロック26a、26b、26c、26d、26e、及び26fのような割り当て可能なメモリのブロックへ分割されることができる。割り当て可能なメモリ26a乃至26fのブロックは、ホストアプリケーションと、タスクを形成するデータ処理データストラクチュア(即ちデータ処理パイプラインの部分)の一つ又はそれより多くの具体例を記憶する。ディスプレイ14は目に見える情報を出力するが、キーボード16は情報をコンピュータ100へ入力するために使用される。
【0022】
関数ライブラリ10は、CPU20によって呼び出されるデータ処理関数を形成する初期化されないデータ処理ストラクチュア又はオブジェクトのライブラリを記憶する。関数ライブラリ10は、I/Oインターフェース22を介してアクセスされる独立した要素として示されているが、関数ライブラリ10がROM24内又はディスクドライブ19を介してアクセスされる不揮発性メモリ装置上で格納される得ることが理解されよう。さらに、ディスクドライブ19内の非揮発性メモリ装置又は関数ライブラリ10へまだ格納されてなかった新しく書き込まれたデータ処理オブジェクト又は関数はRAM26内に格納され得る。
【0023】
同様に、データソース12はコンピュータ100の外部にあるのが示されており、且つI/Oインターフェース22を介してアクセスされる。しかしながら、データソース12は、ROM24若しくはRAM26内、ディスクドライブ19内の非揮発性メモリ装置上、又はCPU20のレジスタカウンタ若しくは内部メモリ内に格納されるデータであることができる。データソース12は、キーボード16を介してデータ入力を有することができる。上記のように、最後には、第1のパイプライン部分は、いくつかの外部ソースからデータ要素を得るのではなく、データ要素それ自体を発生することができる。
【0024】
16に示されているように、本発明のコントローラ20は、ホストアプリケーション手段50、ライブラリ手段10、メモリ管理手段56、最後のタスク手段60、少なくとも一つの中間タスク手段62、及び第1のタスク手段64を備える。コントローラはデータソース手段66を含んでいてもよいが、含む必要もない。この場合において、第1のタスク手段64もデータソース手段66の関数を実行する。複数のリンク70は、リンク70によってホストアプリケーション手段に接続されたデータ処理パイプライン80内の第1のタスク手段64、少なくとも一つの中間手段62、及び最後のタスク手段60を接続させる。当然、簡単なパイプライン80が、第1のタスク手段64と最後のタスク手段60だけを含んでもよいことは理解されるべきである。最後に、データ入力リンク72はデータソース手段66を第1のタスク手段64と接続させる。
【0025】
ホストアプリケーション手段50は、データ処理パイプライン80から受け取られたデータをさらに処理するためのデータ処理手段58を含む。まず、コントローラ20は、ホストアプリケーション手段50、ライブラリ手段10、及びメモリ管理手段56を含むにすぎない。ホストアプリケーション手段50は当該ホストアプリケーション50内に含まれた命令によってコントローラ20を操作する。コントローラ20は、単一タスキングコントローラ、単一CPU、多重タスキングコントローラ又は真の多重CPUであり得る。いづれの場合においても、ホストアプリケーション手段50自体がコントローラ20内で単一タスキング環境を生成する。
【0026】
ホストアプリケーション手段50は、それがデータソース66から処理されたデータを必要とすると決定する時、当該ホストアプリケーション手段50は、データ処理パイプライン80を作成し且つ呼び出す。従って、ホストアプリケーション手段50は初期化手段52及び呼出し手段54を含む。この初期化手段52は、関数を取り且つタスクを生成する為にその関数を初期化するためにライブラリ手段10へアクセスする。即ち、ライブラリ手段10は多数のデータ処理関数を記憶する。データ処理関数は、ライブラリにおいて関数が初期化されなかった時、オブジェクト指向システム内のオブジェクトのクラス又はサブクラスである。
【0027】
初期化手段52は、初期化されない関数の内の一つを得るためにライブラリ手段10へアクセスする。次いで、初期化手段52は、得られた関数を初期化して、具体化された関数又はタスクをコントローラ20内に生成する。具体化された関数又はタスクは、ホストアプリケーション手段50又は他の前もって生成されたタスクへリンクされる。タスクがホストアプリケーション手段へリンクされている場合、それは最後のタスク60である。タスクが他のタスクへリンクされ、他のタスクもそのタスクへリンクされている場合、それは中間タスク62である。タスクが他のタスクへリンクされ且つデータソース手段66からデータを受け取るか、又はそれ自体がデータを発生する場合、それは第1のタスク64である。
【0028】
タスクを生成するために関数を初期化するにあたって、初期化手段52は、タスクを記憶するためにメモリ26のメモリブロック26a乃至26fの内の一つを割り当てるため、コントローラのメモリ管理手段56と共に動作する。所望されるタスクの全てが初期化手段52によって初期化された後で、呼出し手段54が最後のタスク手段60からデータを要求することによってパイプライン80を呼び出す。呼出し手段54からの要求は、パイプライン80の上流方向へ第1のタスク手段64へ向けて流れる(リップルする)。その要求が第1のタスク手段64に達した時、第1のタスク手段はデータソース66からデータを得るか又はそれ自体がデータを発生する。次いで、第1のタスキング手段64はデータを下流方向で中間タスク手段62へリターンする。中間タスク手段62はそのデータを処理し且つそれを最後のタスキング手段60へリターンする。最後のタスク手段60はそのデータを処理し且つそれをホストアプリケーション手段へリターンする。次いで、より多くのデータがホストアプリケーション手段によって必要とされる場合、呼出し手段54は再びパイプライン80を呼び出す。
【0029】
一旦ホストアプリケーション50が全ての所望されるデータを有すると、呼出し手段54は、パイプライン80からエラーコードを要求することによって、当該パイプライン80から発生するいづれのエラーをも閉じ込め(シャットダウン)且つクリーンアップ(浄化)するために再びパイプライン80を呼び出す。前と同じようにこの要求は上流へリップルする。各タスキング手段は、それがエラーコードを発生したかを決定し、それらのエラーコードをリターンする。これらのエラーコードが一旦リターンされると、初期化手段52は、パイプライン80のタスク手段60乃至64に割り当てられたメモリを解放するため、メモリ管理手段56へ信号を送る。
【0030】
図17は、汎用化されたタスク手段68を示し、これはタスク手段60乃至64のいづれかを表す。この汎用化されたタスク手段68は、リンク手段82、少なくとも一つのチャネル手段84(84a、84b、84c)、データ処理手段86、データ分析手段88、タスク状態手段90、エラーコード発生手段92、外部ポート手段94、及び再構成手段96を備える。実際のタスク手段60乃至64が、一つより多くの要素を欠いた、これらの要素の異なる組み合わせを有してもよいことは当然理解されよう。さらに、汎用化されたタスク手段68は、パイプライン80のためにデータを受け取ったり発生したりするためのデータ受取り及び/又は発生手段98も含む。
【0031】
リンク手段82は、順方向リンクが使用される時、汎用化されたタスク手段68を次の又は上流のタスク手段68とリンクするか、又は逆方向リンクが使用される時、汎用化されたタスク手段68を前の又は下流のタスク手段68とリンクする。両リンクとも一度に使用されることができる。汎用化されたタスク手段68は、チャネル手段84を介して次のタスク手段68からリターンされたデータを受け取る。そのデータは、次いで、それがチャネル84を介して前のタスク手段68へリターンされる前にデータ処理手段86を用いて処理される。
【0032】
タスク状態手段90はタスク手段68の状態を保持する。タスク状態手段90はまたタスク手段68の全ての他の手段を制御する。
【0033】
データ分析手段88は次のタスク手段68から受け取られたデータがデータ処理手段86に適しているかを決定する。データが適していない場合、データ分析手段が二つの異なる可能な応答を持っている。第1のタイプの応答においては、簡単化されたタスク手段68は、データの代わりに、エラーコード発生手段92によって発生されたエラーコードを前のタスク手段へリターンするだけである。ホストアプリケーション手段50がデータの代わりにエラーコードを受け取った時、アプリケーション手段50は、そのエラーの性質(及び原因)を決定するためにエラー処理システムを使用する。次いで、ホストアプリケーション手段50は、グレースフルに出るか又はパイプライン80を再構成且つ/又は再初期化するとによってエラーから回復するように試みることができる。
【0034】
第2のタイプの応答において、複雑なタスク手段68は、エラーから回復するためにパイプライン80をダイナミックに再構成しようとする再構成手段96を含む。この再構成手段96は、追加のタスク手段68をダイナミックに初期化し且つそれらをパイプライン80へ挿入するとによってこれを行なう。再構成手段は外部ポート手段94を介して他のタスキング手段68へアクセスすることによってこれを行なう。この外部ポート手段はタスキング手段68への様々なアクセスモードを許容する。これらのモードはタスク状態手段90を検査及び/又は変更し、エラーコード発生手段92を検査し、即ちリンク手段82を変更したりすることも含まれる。
【0035】
たとえタスク手段68が洗練された再構成手段96有していたとしても、回復不可能又はハードエラーはまだ発生する可能性がある。この場合、タスク手段はエラーコードを発生するため、再びエラーコード発生手段92を使用する。
【0036】
最後に、第2の実施例において、リンク手段82は、タスク手段68自体でなくて、チャネル手段84をリンクする。リンク手段82はチャネルを次の又は前のタスク手段68へ直接リンクする。従って、タスク手段68が多数のチャネル手段84a、84b、及び84cを有する場合、各チャネル手段84a乃至84cは異なる次の又は前のタスク手段68へリンクされ得る。一方、第1の実施例において、リンク手段82はタスク手段68をリンクしたので、タスク手段68のすべてのチャネル手段84a乃至84cは同じ次のタスク手段68とリンクされることになる。
【0037】
図2に示されているように、各初期化関数又はタスクはデータソース12とホストアプリケーション120の間で実行されるパイプライン40の部分40a、40b、及び40cとしてビジュアル化され得る。ホストアプリケーションはCPU20によって現在実行されている(且つRAM26に格納される)アプリケーションである。パイプライン40の各部分40a、40b、及び40cは、一つ又はそれより多くのデータ処理チャネル42と、パイプライン部分の状態を定義するデータストラクチュア44、及びゼロ、一つ又はそれより多くの外部ポート46を備える。各パイプライン部分40b及び40c並びにホストアプリケーション120のそれぞれが、パイプライン部分40b及び40c又はホストアプリケーション120を直ぐ上流のパイプライン部分40a、40b、及び40cのそれぞれへリンクする逆方向リンク48を有する。或いは、各パイプライン部分40a、40b、及び40cは、直ぐ下流のパイプライン部分40b及び40c又はホストアプリケーション120への順方向リンク48’を有する。最後には、逆方向リンク48と順方向リンク48’の両方が提供されてもよい。
【0038】
制御システムの好ましい実施例において、パイプラインは「知的な」パイプライン部分を有する。これらの知的なパイプライン部分は、それがホストコンピュータから操作される時、ホストアプリケーションによるいかなる割り込みも必要とせずに、パイプラインをダイナミックに再構成することが可能である。例えば、パイプライン40bは、パイプライン部分40aによってリターンされたデータ要素を処理することが可能である。パイプライン40bがデータ要素を処理することが不可能な場合、パイプライン部分40bは、関数ライブラリ10をダイナミックに呼び出し、且つ新たなパイプライン部分40dを作成する。パイプライン部分40dはパイプライン部分40aにリンクされる。次いで、パイプライン部分40bはそれ自体のリンクを変えて、パイプライン部分40aよりもむしろパイプライン部分40dを指し示す。
【0039】
或いは、パイプライン部分40bがそれがデータを処理することが不可能であることを決定した場合(例え、それがそのパイプラインを再構成しようとする場合でも)、当該パイプライン部分40bはハードエラーを示すエラーコードをリターンする。ホストアプリケーションにおけるエラー処理システムは、ライブラリからエラーの性質を決定する。一つの実施例においては、ホストアプリケーションはそれがエラーから回復するためにパイプラインを再生することができるかを決定する。再生できる場合、ホストアプリケーションはパイプラインを再初期化する。しかしながら、ホストアプリケーションがエラーから回復することが不可能である場合又はこの能力を備えていない場合、ホストアプリケーションはグレースフルに出る。
【0040】
この様な回復不可能エラーは、例えば、画像を処理するにあたって発生し得る。ヘッダが1000の走査ラインが画像内にあるが、走査ライン画像データ要素が第998回目の呼び出しでも第1のパイプライン部分へリターンされなかったことを示した場合、システムはハードエラーへ出会う。単に処理できるデータがないために、パイプラインがそれ自体で再構成しようとする能力に関わらず、このエラーは回復することができない。この場合において、第1のパイプライン部分は”ERR” エラーコードをリターンする。ホストアプリケーションは、次いで、エラーコードに対する理由を決定するためにエラー処理システムを使用する。このエラーの性質を決定した後、ホストアプリケーションは、システムのいかなる再構成又は再初期化も的を得てないので、グレースフルに出る。
【0041】
パイプラインが再構成される場合、パイプライン部分40bはパイプライン部分40dからデータを要求する。パイプライン部分40dは、データ要素を再リターンするパイプライン部分40aからデータを要求する。しかしながら、ここで、パイプライン部分40aは、データ要素を、パイプライン部分40bではなくパイプライン部分40dへリターンする。あるいは、関数ライブラリ10を呼び出す時、パイプライン部分はデータ要素を提供することができ、これによってパイプライン部分40dはこの部分が作成されるや否や、データ要素を有することができる。従ってパイプライン部分40bがパイプライン40dからデータを要求する時、パイプライン部分40dはすぐに処理を行ない、且つそのデータ要素をリターンすることができる。
【0042】
さらに、順方向リンク48’が提供される場合、知的なパイプライン部分は、それらのデータストラクチュアにおいて、データ要素がこのパイプライン部分によって処理されるのを必要とするかを決定するための手段を含むことができる。必要としない場合、パイプライン部分は、それ自体をパイプラインラインから取り去るため、ホストアプリケーションに全く割り込まれることなく、パイプラインをダイナミックに再構成することができる。順方向リンクは必要であり、これによって、パイプラインがどの下流のパイプライン部分を変えるかを知り、これによってパイプライン部分が適切な上流のパイプライン部分とリンクされる。
【0043】
外部ポート46は、パイプライン部分の現在状態を検査するため、パイプライン部分のデータ構造44へデータを書き込むため、そのパイプライン部分の現在状態を変えるか若しくはダイナミックに部分を追加するためにパイプライン部分(又は複数のパイプライン部分)の連結部分48をダイナミックに変えるため、又はパイプライン40から複数の部分をデリート(削除)するために使用される。一般に、外部ポート46は、データ要素を処理するにすぎないデータチャネル42から独立して、パイプラインを制御するために使用される。要するに、データチャネル42は、上流のパイプライン部分から受け取られたデータを処理し、且つこの処理されたデータを下流のパイプライン部分へ出力するためだけに使用される。外部ポート46は、データチャネル42の動作に影響を与えずにパイプライン部分のデータストラクチュア44へのアクセスを可能とする。
【0044】
従って、他の実施例においては、例えば、パイプライン40が作成された後で、パイプライン部分40aとパイプライン部分40bの間にパイプライン部分40dを追加することが必要となった場合、これは外部ポート46を用いて達成される。この実施例において、パイプライン部分40cは、そのデータストラクチュアの一部として、チャネル内でデータをテストするためのストラクチュアを有する。データの形式が、例えば、パイプライン部分40cの適切な動作に必要とされる形式と互換性を持たないが、データが、例えば、パイプライン部分40bの前に変更されなればならない場合、パイプライン部分40cは、新しいパイプライン部分40dをダイナミックに初期化し且つそれをパイプライン部分40aとパイプライン部分40bの間に挿入する。このパイプライン部分40cは、パイプライン部分40bにおける外部ポート46を介して、パイプライン部分40bのデータストラクチュア44にアクセスすることによってこれを行なう。パイプライン部分40cがパイプライン部分40bのリンク48を変え、これによりパイプライン部分40aからのリンク48が新しいパイプライン部分40dへ変えられる。同様に、新しいパイプライン部分40dのデータストラクチュア44は、このストラクチュアが適切に初期化され且つパイプライン部分40aへリンクされることを確実とするためにアクセスされる。
【0045】
動作上、図7に示されているアプリケーションのようなホストアプリケーションがデータをデータソース12から要求する時、ホストアプリケーションは、最初、関数ライブラリ10から関数を呼出し且つ初期化することによってパイプライン40を形成する。図7に示されている実施例において、変数 ”i” 、” n” 、”add value”、及び”mul value”がホストアプリケーションの5行目で初期化される。6行目では、第1のタスク40aが「ヌル」タスクとして定義されている。第1のタスクは、データソース12からデータ要素を得るために接続されることができると共に、「ヌル」コマンドを用いて第1のタスク40aがデータソース12として作用するのを示すことが可能である。図7の7行目において、パイプライン40におけるタスクの数は、図8に示されるホストアプリケーションを開始したコマンドラインによって決定される。一般に、ホストアプリケーションを実行すると、パイプライン40のレングス(長さ)及び構成素(constituents)はダイナミックに決定される。或いは、パイプライン40のレングス及び構成素はホストアプリケーションにおいて明白に説明される。最後に、パイプライン40の初期のレングス及び構成素がダイナミックに決定された時又は明白に説明された時のいづれであっても、パイプライン40はデータソース12から受け取られたデータによってそれ自体をダイナミックに再構成することができる。
【0046】
図7に示されている実施例において、7行目に示されているように、パイプライン40のレングスはプログラムを開始するコマンドラインにおいて明白に説明される。この場合において、パイプラインのレングスは図8が示すように5である。図7の8行目と9行目に示されているように、各関数が呼び出され且つ初期化され、且つデータソースからホストアプリケーションへ拡張される。この場合、図7の6行目に示されているように、第1のタスク40aもデータソースのように動作する。さらに、9行目に示されているように、パイプライン40における各タスクは同じ関数の異なる具体化(インスタンシェーション)又はタスクである。図7の9行目と図5のの17行目に示されているように、この例における関数”Math Task” が初期化されると、そのデータストラクチュアは、各々が現在値” i” にセットされる二つのチャネルデータバッファと、パイプライン内の上流タスクを指し示すポインタを含む。さらに、パイプライン内に上流タスクが全くない場合、ポインタは「ヌル」にセットされる。
【0047】
関数ライブラリ10における関数がオブジェクト指向言語においてはオブジェクトとして定義されるので、図7に示されている実施例において関数が初期化される度に、同じ関数の異なる具体化が事実上行なわれる。これによって、単一パイプライン40はあらゆる単一関数の複数のコピーを有していてもよい。従って、関数の各コピーはライブラリ内に格納されたベース関数の異なる具体化であり且つパイプライン40の異なるタスク又は部分として動作する。これにより、関数ライブラリ10における関数は、それらがあらゆる単一パイプラインにおいて一回以上使用されることができるので、再帰的である。
【0048】
8行目及び9行目においてパイプライン内の各タスクが作成された後、初期化されたタスクのチャネル(この場合は二つ)が10行目と11行目で実行される。一旦、図6に示されたホストアプリケーションが、10行目と11行目で実行された複数のチャネルを介して、タスクから最後のデータを受け取ると、図8に示された出力は、図7の12行目と13行目に説明されているようにプリントされる。
【0049】
図7のホストアプリケーションにおいては、上記に示されているように、8行目及び9行目において、パイプラインは、多数の関数”MathTask”の独立した具体化を有する。図5及び図6は、図7に示されているように、ホストアプリケーションによって形成されるパイプラインのために必要な各具体化を形成するため、図7の8行目及び9行目においてホストアプリケーションによって呼び出されるライブラリオブジェクト”MathTask”を示す。
【0050】
図5に示されている”MathTask”関数の1乃至6行目において、主要データストラクチュアが定義される。1乃至6行目に示されているように、データストラクチュアは、二つのチャネル即ちチャネル1及びチャネル2並びに逆方向又は上流リンクを含む。次に、7行目乃至12行目において、第1及び第2のチャネルのそれぞれに対するこの関数に特定のデータストラクチュア、”aval”及び”mval”が定義される。
【0051】
次に、17行目で、チャネル1に対するデータ要求、”avalue”及びチャネル2に対するデータ要求、”mvalue”、並びに上流リンク「リンク」で、タスク”MathTask”に対して具体化手順が定義される。18乃至20行目において、チャネル1及びチャネル2のそれぞれに対する変数”avalue”及び”mvalue”並びにリンクが定義される。最後に、21行目において、関数”MathTask”のタスクを作成し且つRAM26のメモリブロックを割り当てるための手順が定義される。
【0052】
次に、図6の28乃至37行目に示されているように、チャネル1に対応するデータ処理手順とデータストラクチュアが定義される。チャネル1のデータ処理手順は、タスクの直ぐ上流のタスクから番号を得る。さらに、図7の6行目に示されているように、パイプラインにおける第1のタスクは「ヌル」タスクである。第1のタスクに対する「ヌル」状態から生じる結果は、”val” の初期値をゼロに定義する32行目で定義される。33行目では、逆方向リンクが存在している場合、34行目で値”val” はチャネル1の上流タスクの出力へセットされる。次いで、35行目では、値”val” は、現在パイプライン部分のチャネル1の加数値”aval”をその値へ追加することによって更新される。各パイプライン部分に対するチャネル1の加数値”aval”は、25行目で、図7の9行目でセットされたパイプライン部分の状態パラメータ”avalue”へセットされた。最後に、チャネル1のデータ処理手順は、新しい値”val” を直ぐ下流のパイプライン部分へリターンすることによって終了する。
【0053】
同様に、図6の38乃至47行目において、チャネル2のデータ処理手順が定義される。唯一の差は、図5の22行目で初期化されたチャネル1の処理手順よりもむしろ図5の23行目で初期化されたチャネル2の手順を使用する39行目で発生する。さらに、42行目では、値”val” は第1のパイプライン部分に対する「ヌル」データソースを補償するため、1にプリセットされる。45行目では、新しい値”val” は、図7の9行目においてセットされた、図5の26行目で状態パラメータ”mvalue”にセットされたチャネル2の被乗数によって乗算される古い値”val” に等しい。
【0054】
動作上、図7の8行目と9行目に示されているホストアプリケーションは指示された回数だけ関数”MathTask”を呼び出す。関数”MathTask”の第1の具体化はデータソースに接続されないヌルタスクとしてセットアップされる。再び、8行目と9行目をループすることによって、関数”MathTask”の第2の具体化がタスク”MathTask”の先の具体化との逆方向リンクによって形成される。その後、図7の8行目と9行目を介して各ループごとに、関数”MathTask”のさらなる具体化が形成される。図7に示されているホストアプリケーションの8行目と9行目を介して最後のループが一旦完了すると、ホストアプリケーションからのタスク”MathTask”の最後の一つへの逆方向リンクはセットされたままとなる。図4は、このようにして初期化された3−セクションパイプラインを示す。
【0055】
次いで、10行目と11行目において、ホストアプリケーションは、関数”MathTask”の最後の具体化のチャネル1とチャネル2からデータを要求する。最後のタスクは回転し且つその直ぐ上流のタスクからデータを要求する。これは、その”MathTask”の第1の具体化がチャネル1とチャネル2を通してのデータに対する要求を受け取るまで続く。図3はこのタイプのデータフローの例を示す。ホストアプリケーションは図7の10行目及び11行目でパイプラインを呼び出した後、最後のパイプライン部分はそれがリンクされるパイプライン部分の図6の34行目と44行目で各チャネルを呼び出す。次いで、最後のパイプライン部分は、各々の呼び出されたパイプライン部分が、その部分がリンクされる上流のパイプライン部分を呼び出す。第1のパイプライン部分に達すると、この第1のパイプライン部分はデータソース12からデータ要素を受け取るか、又はこの場合、データ要素を自己発生する。第1のパイプライン部分は、次いで、上記のようにそれを呼び出したパイプライン部分へそのデータ要素をリターンする。
【0056】
関数”MathTask”の第1の具体化は、次いで、チャネル1とチャネル2に対して定義されたデータ処理手順を実行する。第1の具体化は、チャネル1に対しては0+1に等しい値1及びチャネル2に対しては1×1に等しい値1を関数”MathTask”の第2又は具体化へリターンする。関数”MathTask”の各具体化は、引き続いて、第1の数をチャネル1で保持された値へ加算し、次いでチャネル2で保持された数を第2の数によって乗算する。図5及び図6に示されている例において、第1と第2の数は、図7の9行目でパイプラインが作成された時に初期化された加数と被乗数である。しかしながら、数はダイナミックに発生されることもできた。従って、チャネル1及びチャネル2において処理されたデータは、ホストアプリケーションへ向けて下流へリップルする。これによって、関数”MathTask”の最下流の具体化は、要求されたデータをホストアプリケーションへ提供する。
【0057】
CPU20が図7に示されているホストアプリケーションを実行する時、それはホストアプリケーションをRAM26のメモリブロック26aに格納する。ホストアプリケーションは、事実上、割り当て可能なメモリブロック26a内に格納されたデータストラクチュアである。データストラクチュア自体は指定されたメモリの位置にわたるテンプレートを有しており、このテンプレートはCPU20の制御動作のフロー(流れ)を定義する。割り当てられたメモリブロック26aの第1の部分において、種々のメモリ位置が定義され且つ/又は変数として割り当てられる。データブロック26aはまたホストアプリケーションの状態を定義する種々のメモリ位置、及びホストアプリケーションによって要求されたデータ又はホストアプリケーションによって処理されたデータを記憶するためのバッファとして動作する種々のメモリ位置を含む。
【0058】
同様に、ホストアプリケーションが、例えば、関数”MathTask”の具体化を初期化するために関数ライブラリ10を呼び出す時、他のデータブロック26bがそのタスク又はパイプライン部分へ割り当てられる。ホストアプリケーションのように、初期化されたパイプライン部分は、実際に、割り当てられたメモリブロック26bに対するテンプレートを備える割り当てられたメモリブロック26b内のデータストラクチュアである。割り当てられたメモリブロックは、処理されるデータ、データのタイプを定義するための種々のメモリ位置、このタスクがそのデータを受け取る場所を示す手順ポインタ、そのタスクの状態を定義するデータを記憶する種々のメモリ位置、及び関数”MathTask”の直ぐ上流の具体化から受け取られた処理されたデータを記憶するための一つ又はそれより多くのデータバッファを記憶するためのバッファを有する。
【0059】
割り当てられたデータブロック26bはチャネル1とチャネル2に対するデータ処理動作を定義するデータストラクチュアも含む。それとは別に、割り当てられたデータブロック26b内のデータストラクチュアは、データ処理を実行するための、又は関数ライブラリ10における他の関数へのポインタルックアップテーブルとしての、ルックアップ(検索)テーブルを含む。一般に、各タスクは、それがデータブロック26a乃至26fの内の一つへ初期化され且つ割り当てられると、データ入力、データ出力、タスク状態、及びそのタスクによって実行される種々のデータ処理手順に充分なバッファを自動的に割り当てる。
【0060】
図9乃至図11は、この方法を実施する制御ルーチンに対して汎用化されたフローチャートを示す。図9に示されているように、スタートしてから、ステップS10において、ホストアプリケーションは単一処理CPU20によって実行される。ステップS20においては、コントローラが、一つのデータ処理パイプラインがコンピュータ100の現在動作に必要とされるか否かをチェックする。必要とされない場合、制御ルーチンはステップS10へ戻る。
【0061】
しかしながら、パイプラインが必要とされる場合、制御ルーチンはステップS30へ進み、このステップにおいて、関数ライブラリから関数を呼び出す。次いで、ステップS40において、呼び出された関数は第1のタスク又は第1のパイプラインを形成するために初期化される。次いで、ステップS50においては、コントローラは追加のパイプライン部分のいづれかが必要とされるか否かをチェックする。必要とされる場合、制御ルーチンは、ライブラリから次の関数を呼び出すためにステップS30へ戻る。従って、制御ルーチンは、追加のタスクが要求されなくなるまで、ステップS30乃至S50をループする。この時点で制御ルーチンはステップS60へ進む。
【0062】
ステップS60において、パイプラインが呼び出される。ステップS70において、パイプラインは処理されたデータ要素をホストアプリケーションへリターンする。次いで、ステップS80において、コントローラは追加のデータが必要か否かを決定する。追加のデータが必要な場合、制御ルーチンはパイプラインを再び呼び出すためにステップS60へリターンする。
【0063】
しかしながら、追加データが必要とされない場合、制御ルーチンはステップS90へ進み、種々のパイプライン部分へ割り当てられたメモリを割り当て解除することによって初期化解除される。ステップS100において、ホストアプリケーションの次のコマンドが実行される。次いで、ステップS110において、コントローラはホストアプリケーションの追加のパイプラインが実行される必要があるかを決定する。実行される必要がある場合、制御ルーチンはステップS30へリターンする。
【0064】
しかしながら、この時点でパイプラインが必要とされない場合、制御ルーチンはステップS120へ進み、コントローラがホストアプリケーションが完了したか否かを決定する。完了した場合、制御ルーチンはストップする。そうでない場合(完了していない場合)、制御ルーチンはステップS100へ戻る。
【0065】
図10は初期化ステップS40に対するフローチャートを示す。ステップS40で初期化ルーチンへエンターした後、制御ルーチンは、タスクに対する主要データストラクチュアが作成されるステップS200へ進む。次いで、ステップS210において、このタスクに対して特定であるデータストラクチュアの部分が作成される。次いで、ステップS220においては、チャネルデータストラクチュアが作成され、且つステップS230においては、逆方向リンクが作成される。順方向リンクが必要とされる場合、そのデータストラクチュアは定義されるが、順方向リンクがリンクする下流タスクがまだ作成されていないので、それはパイプラインが呼び出されるまで終了されない。リンクはリンクされたパイプライン部分を呼び出すための手順ポインタを有する。次いで、ステップS240において、制御ルーチンはステップS40へ戻る。
【0066】
図11はステップS60の呼出しルーチンに対するフローチャートを示す。ステップS60からスタートして、制御ルーチンはホストアプリケーションが最後のパイプライン部分からデータを要求するステップS300へ進む。次いで、ステップS310において、現在のパイプライン部分は次の上流パイプライン部分からデータを要求する。ステップS320においては、コントローラは次のパイプライン部分が最初パイプライン部分であるか否かを決定する。そうでない場合、制御ルーチンはステップS310へ戻る。
【0067】
しかしながら、次のパイプライン部分が最初パイプライン部分である場合、制御ルーチンはステップS330へ進む。ステップS330において、コントローラは第1のパイプライン部分が「ヌル」部分であるか否かを決定する。そうでない場合、制御ルーチンは最初パイプライン部分が外部ソースからデータ要素を得るステップS340へ進む。第1のパイプライン部分が「ヌル」部分である場合、制御ルーチンは、第1のパイプライン部分がデータ要素を自己発生するステップS350へ進む。
【0068】
両ケースにおいて、ステップS340又はステップS350のいづれかを経て、制御ルーチンはステップS360へ進み、ここで第1のパイプライン部分はデータを第2即ち次のパイプライン部分へ下流へリターンする。ステップS370において、次のパイプライン部分はデータを処理する。次いでステップS380において、次のパイプライン部分が最後のパイプライン部分である場合、処理されたデータはステップS390でホストアプリケーションへリターンされる。しかしながら、次のパイプライン部分が最後のパイプライン部分でない場合、データは新しい次のパイプライン部分へリターンされ、且つステップS360へのループバックにより示されるように、データ要素が処理される。この「ルーピング」は、最後のパイプライン部分へ至り、且つステップS390でデータがホストアプリケーションへリターンされるまで行なわれる。次いで制御ルーチンはステップS60へ戻る。
【0069】
本発明のデータ処理パイプラインの第1の実施例において、前もって定義された逆方向リンクを置換するか又はこの逆方向リンクに付け加えられる順方向リンクが提供される。この場合、タスクライブラリのタスクの内の一つの現在最下流具体化から逆方向リンクが定義された後で、直ぐ上流のタスクから最下流タスクへの順方向リンクが定義される。或いは、順方向リンクのみが提供されなければならない。しかしながら、この場合において、パイプライン部分は、ホストアプリケーションから上流へ、存在していれば、データのデータソースへ向かって初期化され、次いで下流へのデータソースからホストアプリケーションへ呼び出される。
【0070】
さらなる実施例において、各タスクが二つ又はそれより多くのデータ処理チャネルを有する時、単一の順方向リンク又は単一の逆方向リンクをタスク間へ提供するよりも、これらのチャネル自体が複数の順方向及び/又は逆方向リンクによって共にリンクされる。この場合において、各チャネルは、タスクライブラリからのタスクの具体化の内のいづれか一つのどれか他の対応チャネルと逆方向又は順方向リンクされることができる。従って、第1のパイプライン部分のチャネルの内の一つは第2のパイプライン部分の対応チャネルとリンクされるが、第1のパイプライン部分の他のチャネルは第3のパイプライン部分の対応チャネルとリンクされる。
【0071】
本発明のまた他の実施例において、特別な「ファンイン(fan−in)」及び「ファンアウト(fan−out )」のパイプライン部分が提供される。これらのパイプライン部分において、二つ又はそれより多くの上流のパイプライン部分がファンイン分岐パイプライン部分を用いて単一の下流のパイプライン部分とリンクされる。同様に、単一上流パイプライン部分がファンアウト分岐パイプライン部分を用いて二つ又はそれより多くの下流パイプライン部分と接続される。
【0072】
図12乃至図15に示されているように、このシステムのアプリケーションにおいて、システムは、走査ライン×走査ラインを基本にして画像を非常に効率的に処理するストリーム指向のユニックス(登録商標)パイプラインをエミュレートするために作成される。ユニックス(登録商標)パイプラインは、保持されなければならないモジュラー性と容易なメンテナンスを含むなど多数の利点を有する。しかしながら、ユニックス(登録商標)パイプラインは、多重処理プロセッサを必要としたり、携帯性の欠如、ダイナミックな再構成のそれ自体の能力の欠如、及びタスクスケジューリング及びデータフロー処理におけるシステムオーバーヘッドの必要性などを含む多くの欠点も有している。
【0073】
本発明の画像処理パイプラインにおいては、画像は、二つの主要部分、ヘッダと画像本体に分割される。ヘッダは、そこに表示されるカラースペース、配向、走査ラインのレングスのようなその寸法、走査ラインの数、インタレースファクタ、ピッチその他のような画像の状態を定義する。画像本体は、ラスタ出力スキャナ形式等で、各走査ラインがパイプラインに対する一つのデータ要素である走査ラインデータを備える。本発明を用いた画像処理パイプラインにおいて、同じ画像ストラクチュアはデータブロックとして使用される。
【0074】
従って、パイプライン部分はそれぞれ少なくとも三つのチャネルを有する。第1のチャネルはヘッダ情報を処理するために使用される。第2のチャネルは、走査ライン×走査ラインベースでデータブロックとして画像本体を処理するために使用される。一つ又はそれより多くの第2のチャネルタイプのチャネルがパイプラインによって提供される画像処理のタイプに従って提供される。第3のチャネルは、要求されたクリーンアップ動作を実行し、且つ一度画像が完全に処理されると、パイプライン部分を備えるデータストラクチュアへ割り当てられるメモリを解除するために使用される。本質的に、画像処理はこの第3のチャネルが呼び出される時まで完了するので、チャネルを介したデータフローイングのみがエラー処理情報となる。実際、第3のチャネルは、各上流のパイプライン部分に、画像処理から発生したあらゆるエラーコードをリターンさせ、且つこの情報が一度リターンされると、受け取る下流パイプライン部分に、上流のパイプライン部分をダイナミッックにデリートさせる。さらに、あらゆる必要な外部ポート手順ポインタはこの画像処理パイプラインのパイプライン部分のデータストラクチュア内に含まれる。
【0075】
即ち、図12乃至図15に示された画像処理システムにおいて、図17の汎用化されたタスク手段68は、ヘッダチャネルとして第1のチャネル手段84aと、画像処理チャネルとして第2のチャネル手段84bと、エンドチャネルとして第3のチャネル手段84cを備える。
【0076】
上記のように、ホストアプリケーションが処理された画像データが必要とされると決定した時、画像処理パイプラインが作成される。パイプラインは関数ライブラリ10から種々のライブラリ関数を初期化することによって作成される。これらの関数は、画像のカラーを反転する「反転(invert)」、白黒画像をカラー化する「カラー化(colorize)」、例えば、画像内のエッジをソフトにするために重畳フィルタかけるフィルタ、画像本体を拡大する「拡大(enlarge )」、及び画像本体を縮小する「縮小(reduce)」を含む。これは例示を目的としており、全てを網羅してはいない。例えば、「反転(invert)」は黒を白へ、又はその逆へ変換することができる。さらに、反転は、カラー画素を、例えば、赤からシアンへ、緑をマゼンタへ、及び青を黄へ変換することもできる。
【0077】
初期のパイプラインは例えば、3色のフォトタイオードスキャナ、及びホストアプリケーションに接続された種々の他のパイプライン部分からの画像を生成する第1のパイプライン部分を提供することによって形成される。ホストアプリケーションは、例えば、4色のタンデムプリンタで印刷するために走査された画像を準備する。次いで、パイプラインは、スキャナからヘッダを入力するため、ホストアプリケーションによって呼び出される。ヘッダに対する要求は、第1の(最新の)パイプライン部分までパイプラインのチャネル1まで移動する。第1のパイプライン部分は、スキャナからヘッダを得て、且つそれをチャネル1の下流へリターンする。
【0078】
各パイプライン部分がヘッダを受け取ると、各パイプライン部分は、それが画像本体を正確に処理することができるかを確実とするためにこのヘッダをチェックし、このパイプライン部分が画像本体に対して行なうことを反映するためにヘッダを変更し、次いでそれを下流へリターンする。しかしながら、パイプライン部分が画像が適切に処理されることが不可能であると決定した場合、このパイプライン部分は、その欠点を補正するため、そのパイプラインをダイナミックに再構成する。
【0079】
例えば、上記のように、スキャナから受け取られた画像は3色画像である。しかしながら、例えば、パイプラインが、3色スキャナと3色プリンタが、画像を作成するにあたって同じカラースペースを使用すると仮定して、元々、セットアップされた場合、このスキャナとプリンタは実際には異なるカラースペースを使用するので、エラーが生じる。この場合、可能性のあるエラーはヘッダを処理する時に発見される。エラーを検出したこのパイプライン部分40xは、そのパイプラインの直ぐ上流に新しいパイプライン部分40yを初期化し且つ追加することにより自動的にパイプラインを再構成する。同時に、このパイプライン部分40xは、新しいパイプライン部分40yの位置を反映するためにリンクを変更する。次いで、ヘッダは再実行される。ここで、パイプライン部分40yがそれが画像のカラースペースを変えることを反映するためにヘッダを変更した後、パイプライン部分40xは、それが画像本体を正確に処理することができると決定する。
【0080】
一度、ヘッダが完全に処理され且つホストアプリケーションへリターンされると、ホストアプリケーションは画像本体を入力するためにパイプラインを繰り返し呼び出す。このヘッダから、ホストアプリケーションはいくつの走査ラインが画像本体内にあるかも知っており、これによって、画像本体全体を入力し且つ処理するために呼出しサイクルがどれだけ必要かをも知ることになる。パイプラインが繰り返し呼び出されると、画像本体の一つの走査ラインが得られ、処理され且つ各呼出しごとにデータ要素としてホストアプリケーションへリターンされる。他のすべての点において、パイプラインは概して上記のように動作する。一旦、全体の画像本体が得られ、処理され、且つホストアプリケーションへリターンされると、ホストアプリケーションはパイプラインを停止(シャットダウン)するために第3のチャネルを呼び出す。図2は、このパイプラインの実行を示すフローチャートを示す。
【0081】
図14に示されているように、この画像処理パイプラインの他の実施例において、第2と第3のチャネルだけが初期化され且つ呼び出される。この場合、第1の又はヘッダチャネルよりもむしろ、ヘッダを分析するためには外部ポート又は外部手順が使用される。この外部手順は、初期化の間、ヘッダを受け取り、処理し、且つ出力するために使用される。即ち、第1のパイプライン分が初期化される時、ヘッダを得る。次いで、各下流のパイプライン部分が初期化されると、ヘッダは外部ポートを用いて外部手順によってそのパイプラインへ出力される。図15はこの実施例のパイプラインの実行を示すフローチャートを示す。
【0082】
【発明の効果】
単一処理プロセッサを用いて多重処理画像処理パイプラインをエミュレートすることにより画像を処理するための制御システムを提供する。
【図面の簡単な説明】
【図1】本発明のシステムのブロック図を示す図である。
【図2】本発明のパイプラインのブロック図を示す図である。
【図3】本発明のパイプライン内のデータの流れを示す図である。
【図4】適例となるデータ処理プログラムのためにリンクされたパイプラインを示す図である。
【図5】サンプルタスクのための適例となるコードリスティングを示す図である。
【図6】サンプルタスクのための適例となるコードリスティングを示す図である。
【図7】パイプラインを形成するためにライブラリからタスクを呼び出す適例となるホストアプリケーションにためのコードリスティングを示す図である。
【図8】図4に示され且つ図5及び6並びに図8にリストされているパイプラインの出力のリスティングを示す図である。
【図9】主要ルーチンのフローチャートを示す図である。
【図10】機能初期化ルーチンを示す図である。
【図11】呼出し及び処理ルーチンのフローチャートを示す図である。
【図12】画像処理パイプラインを示す図である。
【図13】図12のパイプラインを形成し且つ実行するためのフローチャートを示す図である。
【図14】図12の画像処理パイプラインの第2の実施例を示す図である。
【図15】図14の第2の実施例の画像処理パイプラインを形成し且つ実行するためのフローチャートを示す図である。
【図16】本発明のコントローラを示すブロック図である。
【図17】本発明の汎用化されたタスクを示すブロック図である。
【符号の説明】
10 タスクライブラリ
12 データソース
13 ディスプレイ
16 キーボード
18 マウス
19 ディスクドライブ
20 単一処理コントローラ
22 I/Oインターフェース
24 ROM
26 RAM
100 コンピュータ

Claims (1)

  1. シングル・タスク環境においてデータ・アイテムをパイプライン処理するパイプライン化処理方法であって、該データ・アイテムはヘッダ及び少なくとも1つのデータ・セットを有し、
    プロセッサ上のホストアプリケーションを実行するステップと、
    リンクされたタスクのパイプラインを形成するために複数のデータ処理タスクを生成するステップであって、各データ処理タスクはライブラリ関数を起動することにより生成され、各データ処理タスクはデータ処理を実行するために前記プロセッサを制御し、各データ処理タスクは、
    前記データ処理タスクと、パイプラインの少なくとも1つの他のデータ処理タスク及び前記ホストアプリケーションとの間でデータ・アイテムのヘッダの受け渡しを行うためのヘッダ・チャンネルと、
    少なくとも1つのデータ処理チャンネルと、
    前記データ処理タスクをパイプラインの少なくとも1つの他のデータ処理タスク及び前記ホストアプリケーションにリンクさせるための少なくとも1つのリンクと、
    を有する、複数のデータ処理タスクを生成するステップと、
    前記データ処理タスクに前記データ・アイテムの少なくとも1つのデータ・セットを前記データ・アイテムのヘッダに基づき処理させるために前記ホストアプリケーションを用いてパイプラインを呼び出すステップと、
    を有するパイプライン化処理方法。
JP12526794A 1993-06-15 1994-06-07 パイプライン化データ処理方法 Expired - Fee Related JP3617851B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/076,678 US5557795A (en) 1993-06-15 1993-06-15 Pipelined image processing system for a single application environment
US076678 1993-06-15

Publications (2)

Publication Number Publication Date
JPH07105020A JPH07105020A (ja) 1995-04-21
JP3617851B2 true JP3617851B2 (ja) 2005-02-09

Family

ID=22133553

Family Applications (1)

Application Number Title Priority Date Filing Date
JP12526794A Expired - Fee Related JP3617851B2 (ja) 1993-06-15 1994-06-07 パイプライン化データ処理方法

Country Status (5)

Country Link
US (1) US5557795A (ja)
EP (1) EP0629967B1 (ja)
JP (1) JP3617851B2 (ja)
CA (1) CA2121161C (ja)
DE (1) DE69428396T2 (ja)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701479A (en) * 1993-06-15 1997-12-23 Xerox Corporation Pipelined image processing system for a single application environment
US5995996A (en) * 1993-06-15 1999-11-30 Xerox Corporation Pipelined image processing system for a single application environment
US5689684A (en) * 1995-06-07 1997-11-18 Motorola, Inc. Method and apparatus for automatically reconfiguring a host debugger based on a target MCU identity
US5809286A (en) * 1996-05-01 1998-09-15 Mci Communications Corporation Method and apparatus for emulating a dynamically configured digital cross-connect switch network
US5850536A (en) * 1996-05-01 1998-12-15 Mci Communications Corporation Method and system for simulated multi-tasking
US5867689A (en) * 1996-05-01 1999-02-02 Mci Communications Corporation Method and apparatus for emulating a digital cross-connect switch network using a flexible topology to test MCS network management
WO1997041657A1 (en) * 1996-05-01 1997-11-06 Mci Communications Corporation Method and apparatus for emulating a digital cross-connect switch network
US5748617A (en) * 1996-05-01 1998-05-05 Mci Corporation Method and apparatus for emulating a digital cross-connect switch network
US5812826A (en) * 1996-06-27 1998-09-22 Mci Communications Corporation Method and apparatus for emulating a network of state monitoring devices
FR2752071B1 (fr) * 1996-07-30 1998-12-18 Thomson Csf Lecteur pour cartes a puce a interface homme-machine amelioree
US5854930A (en) * 1996-12-30 1998-12-29 Mci Communications Corporations System, method, and computer program product for script processing
US5954829A (en) * 1996-12-30 1999-09-21 Mci Communications Corporation System, method, and computer program product for digital cross connect testing
US5966515A (en) * 1996-12-31 1999-10-12 Unisys Corporation Parallel emulation system and method
US6141012A (en) * 1997-03-31 2000-10-31 Xerox Corporation Image processing code generation based on structured image (SI) techniques
US5991765A (en) * 1997-05-06 1999-11-23 Birdstep Technology As System and method for storing and manipulating data in an information handling system
US5974532A (en) * 1997-12-09 1999-10-26 Mci Communications Corporation System and method for generating responses for inputs using a hybrid state engine table
US6256659B1 (en) 1997-12-09 2001-07-03 Mci Communications Corporation System and method for performing hybrid preemptive and cooperative multi-tasking in a computer system
US7013467B1 (en) 1997-12-09 2006-03-14 Mci Communications Corporation System and method for managing computer system resources using command control vectors
US6286026B1 (en) * 1998-08-17 2001-09-04 Xerox Corporation Method and apparatus for integrating pull and push tasks in pipeline data processing
US6880122B1 (en) * 1999-05-13 2005-04-12 Hewlett-Packard Development Company, L.P. Segmenting a document into regions associated with a data type, and assigning pipelines to process such regions
US6728419B1 (en) 2000-02-17 2004-04-27 Xerox Corporation Multi-tasking multi-threaded image processing system and method for image capture devices
JP4045823B2 (ja) * 2002-03-19 2008-02-13 富士ゼロックス株式会社 画像処理装置および画像処理方法
JP4082051B2 (ja) * 2002-03-19 2008-04-30 富士ゼロックス株式会社 画像処理装置および画像処理方法
JP4051974B2 (ja) 2002-03-20 2008-02-27 富士ゼロックス株式会社 画像処理装置および画像処理方法
JP4407231B2 (ja) * 2003-10-16 2010-02-03 セイコーエプソン株式会社 印刷装置、印刷処理方法およびそのプログラム
US7478402B2 (en) * 2004-02-12 2009-01-13 Microsoft Corporation Configurable message pipelines
JP4694267B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694269B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694266B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP2006338507A (ja) * 2005-06-03 2006-12-14 Fujifilm Holdings Corp 処理装置及び処理方法
JP4619868B2 (ja) * 2005-06-03 2011-01-26 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694268B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694265B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694264B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP4694270B2 (ja) 2005-06-03 2011-06-08 富士ゼロックス株式会社 画像処理装置、方法及びプログラム
JP2006338506A (ja) * 2005-06-03 2006-12-14 Fujifilm Holdings Corp コネクタ
JP4979287B2 (ja) 2006-07-14 2012-07-18 富士ゼロックス株式会社 画像処理装置及びプログラム
US8385971B2 (en) * 2008-08-19 2013-02-26 Digimarc Corporation Methods and systems for content processing
JP2011128909A (ja) * 2009-12-17 2011-06-30 Toshiba Corp 画像処理装置及び画像処理方法
US8983632B2 (en) * 2011-03-29 2015-03-17 Honeywell International Inc. Function block execution framework
JP6213169B2 (ja) * 2013-11-12 2017-10-18 富士通株式会社 ジョブ管理プログラム、ジョブ管理方法及びジョブ管理装置
CN111726592B (zh) * 2020-06-30 2022-06-21 北京市商汤科技开发有限公司 获取图像信号处理器的架构的方法和装置

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5617437A (en) * 1979-07-23 1981-02-19 Fujitsu Ltd Loading system for nonresident program
US4493019A (en) * 1980-05-06 1985-01-08 Burroughs Corporation Pipelined microprogrammed digital data processor employing microinstruction tasking
JPS58207152A (ja) * 1982-05-28 1983-12-02 Nec Corp パイプライン演算装置テスト方式
JPS5960651A (ja) * 1982-09-30 1984-04-06 Fujitsu Ltd モジユ−ル間の制御遷移管理方式
US4541114A (en) * 1983-05-05 1985-09-10 Research Environmental/Institute of Michigan Routing techniques using serial neighborhood image analyzing system
JPS6238060A (ja) * 1985-08-12 1987-02-19 Matsushita Graphic Commun Syst Inc 通信制御装置
US4949390A (en) * 1987-04-16 1990-08-14 Applied Vision Systems, Inc. Interconnect verification using serial neighborhood processors
US4845663A (en) * 1987-09-03 1989-07-04 Minnesota Mining And Manufacturing Company Image processor with free flow pipeline bus
JPS6491260A (en) * 1987-10-01 1989-04-10 Nec Corp Communication control system
US4811413A (en) * 1987-10-22 1989-03-07 International Business Machines Corp. System of reconfigurable pipelines of generalized neighborhood function morphic image processors
JPH01193935A (ja) * 1988-01-28 1989-08-03 Nec Software Ltd サブコマンド実行形式によるプログラム制御方式
JP2792559B2 (ja) * 1988-05-12 1998-09-03 キヤノン株式会社 カラー画像処理装置
JPH02120988A (ja) * 1988-09-02 1990-05-08 Tektronix Inc データ処理パイプライン装置
US4982402A (en) * 1989-02-03 1991-01-01 Digital Equipment Corporation Method and apparatus for detecting and correcting errors in a pipelined computer system
JPH0766334B2 (ja) * 1989-05-11 1995-07-19 松下電送株式会社 画像表示装置
US5020115A (en) * 1989-07-10 1991-05-28 Imnet Corporation Methods and apparatus for dynamically scaling images
EP0410045A1 (en) * 1989-07-27 1991-01-30 Koninklijke Philips Electronics N.V. Image audio transformation system, particularly as a visual aid for the blind
US5007100A (en) * 1989-10-10 1991-04-09 Unisys Corporation Diagnostic system for a parallel pipelined image processing system
US5317718A (en) * 1990-03-27 1994-05-31 Digital Equipment Corporation Data processing system and method with prefetch buffers
JP2834837B2 (ja) * 1990-03-30 1998-12-14 松下電工株式会社 プログラマブルコントローラ
JPH04130928A (ja) * 1990-09-21 1992-05-01 Fuji Xerox Co Ltd 情報処理システムにおける例外処理方法
US5289577A (en) * 1992-06-04 1994-02-22 International Business Machines Incorporated Process-pipeline architecture for image/video processing
JPH0696212A (ja) * 1992-09-14 1994-04-08 Nippon Telegr & Teleph Corp <Ntt> マルチプロセスを用いた動物体認識処理方法
US5396616A (en) * 1993-06-15 1995-03-07 Xerox Corporation System for emulating multi-tasking pipelines in a single tasking environment

Also Published As

Publication number Publication date
EP0629967A3 (en) 1995-10-11
US5557795A (en) 1996-09-17
CA2121161A1 (en) 1994-12-16
DE69428396D1 (de) 2001-10-31
CA2121161C (en) 2000-06-27
DE69428396T2 (de) 2002-02-07
EP0629967B1 (en) 2001-09-26
EP0629967A2 (en) 1994-12-21
JPH07105020A (ja) 1995-04-21

Similar Documents

Publication Publication Date Title
JP3617851B2 (ja) パイプライン化データ処理方法
JP3617852B2 (ja) 多重処理パイプラインデータ処理エミュレート方法
US5752068A (en) Mesh parallel computer architecture apparatus and associated methods
US5995996A (en) Pipelined image processing system for a single application environment
US6658564B1 (en) Reconfigurable programmable logic device computer system
US7257816B2 (en) Digital data processing apparatus and methods with dynamically configurable application execution on accelerated resources
US8074211B2 (en) Computer program, multiprocessor system, and grouping method
US20090271784A1 (en) Executing A Distributed Java Application On A Plurality Of Compute Nodes
KR970008527B1 (ko) 고급 인스트럭션 처리 장치 및 방법
JPH06266683A (ja) 並列処理装置
US5701479A (en) Pipelined image processing system for a single application environment
US5987259A (en) Functional unit switching for the allocation of registers
US6684395B2 (en) Multiple image dynamic bind and load procedure for a multi-processor
Di Cosmo et al. Skeletal parallel programming with ocamlp3l 2.0
Blochinger et al. An object-oriented platform for distributed high-performance symbolic computation
JPH08263306A (ja) パイプラインデータ処理用データ処理システムとパイプラインデータ処理方法
JPH10222381A (ja) データ処理システム
Ligon et al. Evaluating multigauge architectures for computer vision
Orlando et al. COLTHPF, a Coordination Layer for HPF Tasks
VanderWiel et al. Performance and program complexity in contemporary network-based parallel computing systems
Lauwereins et al. KUL ESAT 3030 Heverlee Belgium
Guzman et al. MCC Technical Report Number: PP-163-87
Siege SIMULATION BASED PERFORMANCE MEASURES FOR SIMD/MIMD PROCESSINGl
Nichols Language, compiler, and architectural modeling aspects of reconfigurable parallel processing systems
Gross et al. An Introduction to CLiP and its Symbolism

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040608

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040825

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040913

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041105

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071119

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081119

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091119

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091119

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101119

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees