JP3617852B2 - 多重処理パイプラインデータ処理エミュレート方法 - Google Patents
多重処理パイプラインデータ処理エミュレート方法 Download PDFInfo
- Publication number
- JP3617852B2 JP3617852B2 JP12526894A JP12526894A JP3617852B2 JP 3617852 B2 JP3617852 B2 JP 3617852B2 JP 12526894 A JP12526894 A JP 12526894A JP 12526894 A JP12526894 A JP 12526894A JP 3617852 B2 JP3617852 B2 JP 3617852B2
- Authority
- JP
- Japan
- Prior art keywords
- pipeline
- data
- task
- host application
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Description
【産業上の利用分野】
本発明は、多重処理環境をエミュレートすることによる単一処理環境でのデータ処理に係り、特に、所定のオブジェクト又はデータストラクチュアのライブラリを用いたオブジェクト指向システムに関しており、当該オブジェクト指向システムは、ユニックス(登録商標)のようなパイプラインデータストラクチュアをエミュレートするストリーム指向のデータ処理ストラクチュアを作成するため、ホストアプリケーションとデータソース(源)の間でリンクされ得る。
【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のパイプライン部分へリターンし、且つ動作を停止する。このデータ要素は、各パイプライン部分において同じように処理される。最後のパイプライン部分がデータ要素を処理した後で、この最後のパイプライン部分は、完全に処理されたデータ要素をホストアプリケーションへリターンする。次いで、ホストアプリケーションが、他の処理されたデータ要素を望む(又は必要とする)場合、このホストアプリケーションは処理されたデータ要素を再びこの最後のパイプライン部分から要求する。このように、処理されたデータは、高い効率の低オーバーヘッド方式でパイプラインの下をリップルする。さらに、データ処理パイプラインの効率性はパイプラインの最小効率リンクのみに依存する。
【0018】
本発明の一つの態様は、単一処理プロセッサを用いて多重処理パイプラインデータ処理をエミュレートするための方法であって、前記単一処理プロセッサ上でホストアプリケーションを実行するステップと、データソースから処理されたデータを前記ホストアプリケーションへ供給するためにデータ処理パイプラインを作成するステップと、前記パイプラインを呼び出すステップと、前記パイプラインを削除するステップとを備え、前記パイプラインを作成するステップが、(a)複数の所定の関数から選択された第1の関数を第1のタスクとして具体化するステップと、(b)前記ホストから前記第1のタスクへのリンクを定義するステップと、(c)前記複数の所定の関数から選択された第2の関数を第2のタスクとして具体化するステップと、(d)前記第1のタスクから前記第2のタスクへのリンクを定義し且つ該リンクを前記ホストから前記第2のタスクへと再定義するステップとを有し、引き続くタスクに対してステップ(c)と(d)を繰り返すステップであって、前記ホストアプリケーションが最後のタスクへリンクされており、且つ各タスクがメモリ内に記憶され、且つ前記各タスクが前記プロセッサを制御することよりなるステップとをさらに備え、前記パイプラインを呼び出すステップが、(e)前記最後のタスクからデータ要素を要求し、各タスクは各タスクがリンクされるタスクから前記データ要素を要求するステップと、(f)前記第1のタスクによって前記データ要素を得るステップと、(g)前記データ要素を前記要求タスクへリターンするステップと、(h)前記リターンされたデータを処理するステップと、(i)前記データが前記ホストアプリケーションへリターンされるまで、ステップ(g)と(h)を反復するステップとを有し、前記ステップ(e)乃至(i)が前記ホストアプリケーションによって要求されるデータごとに反復されることよりなる前記多重処理パイプラインデータ処理エミュレート方法である。
【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】
図12に示されているように、本発明のコントローラ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】
図13は、汎用化されたタスク手段68を示し、これはタスク手段60乃至64のいづれかを表す。この汎用化されたタスク手段68は、リンク手段82、少なくとも一つのチャネル手段84(84a、84b、84c)、データ処理手段86、データ分析手段88、タスク状態手段90、エラーコード発生手段92、外部ポート手段94、及び再構成手段96を備える。実際のタスク手段60乃至64が、一つより多くの要素を欠いた、これらの要素の異なる組み合わせを有してもよいことは当然理解されよう。さらに、第1のタスク手段64は、パイプライン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】
本発明のまた他の実施例において、特別な「ファンイン」及び「ファンアウト」のパイプライン部分が提供される。これらのパイプライン部分において、二つ又はそれより多くの上流にパイプライン部分がファンイン分岐パイプライン部分を用いて単一の下流のパイプライン部分とリンクされる。同様に、単一上流パイプライン部分がファンアウト分岐パイプライン部分を用いて二つ又はそれより多くの下流パイプライン部分と接続される。
【0072】
【発明の効果】
単一処理プロセッサを用いて多重処理データ処理パイプラインをエミュレートするための制御システムを提供する。
【図面の簡単な説明】
【図1】本発明のシステムのブロック図を示す図である。
【図2】本発明のパイプラインのブロック図を示す図である。
【図3】本発明のパイプライン内のデータの流れを示す図である。
【図4】適例となるデータ処理プログラムのためにリンクされたパイプラインを示す図である。
【図5】サンプルタスクのための適例となるコードリスティングを示す図である。
【図6】サンプルタスクのための適例となるコードリスティングを示す図である。
【図7】パイプラインを形成するためにライブラリからタスクを呼び出す適例となるホストアプリケーションにためのコードリスティングを示す図である。
【図8】図4に示され且つ図5及び6並びに図8にリストされているパイプラインの出力のリスティングを示す図である。
【図9】主要ルーチンのフローチャートを示す図である。
【図10】機能初期化ルーチンを示す図である。
【図11】呼出し及び処理ルーチンのフローチャートを示す図である。
【図12】本発明のコントローラを示す図である。
【図13】本発明の汎用化されたタスク手段を示す図である。
【符号の説明】
10 タスクライブラリ
12 データソース
13 ディスプレイ
16 キーボード
18 マウス
19 ディスクドライブ
20 単一処理コントローラ
22 I/Oインターフェース
24 ROM
26 RAM
100 コンピュータ
Claims (1)
- 単一処理プロセッサを用いて多重処理パイプラインデータ処理をエミュレートするための方法であって、
前記単一処理プロセッサ上でホストアプリケーションを実行するステップと、 データソースから処理されたデータを前記ホストアプリケーションへ供給するためにデータ処理パイプラインを作成するステップと、
前記パイプラインを呼び出すステップと、
前記パイプラインを削除するステップと、
を備え、
前記パイプラインを作成するステップが、
(a)複数の所定の関数から選択された第1の関数を第1のタスクとして具体化するステップと、
(b)前記ホストから前記第1のタスクへのリンクを定義するステップと、
(c)前記複数の所定の関数から選択された第2の関数を第2のタスクとして具体化するステップと、
(d)前記第1のタスクから前記第2のタスクへのリンクを定義し且つ該リンクを前記ホストから前記第2のタスクへと再定義するステップと、
を有し、
引き続くタスクに対してステップ(c)と(d)を繰り返すステップであって、前記ホストアプリケーションが最後のタスクへリンクされており、且つ各タスクがメモリ内に記憶され、且つ前記各タスクが前記プロセッサを制御することよりなるステップと、
をさらに備え、
前記パイプラインを呼び出すステップが、
(e)前記最後のタスクからデータ要素を要求し、各タスクはそれがリンクされるタス
クから前記データ要素を要求するステップと、
(f)前記第1のタスクによって前記データ要素を得るステップと、
(g)前記データ要素を前記要求タスクへリターンするステップと、
(h)前記リターンされたデータを処理するステップと、
(i)前記データが前記ホストアプリケーションへリターンされるまで、ステップ(g)と(h)を反復するステップと、
を有し、前記ステップ(e)乃至(i)が前記ホストアプリケーションによって要求されるデータごとに反復される
ことよりなる前記多重処理パイプラインデータ処理エミュレート方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US076679 | 1993-06-15 | ||
US08/076,679 US5396616A (en) | 1993-06-15 | 1993-06-15 | System for emulating multi-tasking pipelines in a single tasking environment |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07105021A JPH07105021A (ja) | 1995-04-21 |
JP3617852B2 true JP3617852B2 (ja) | 2005-02-09 |
Family
ID=22133561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP12526894A Expired - Fee Related JP3617852B2 (ja) | 1993-06-15 | 1994-06-07 | 多重処理パイプラインデータ処理エミュレート方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US5396616A (ja) |
EP (1) | EP0629945B1 (ja) |
JP (1) | JP3617852B2 (ja) |
CA (1) | CA2121154C (ja) |
DE (1) | DE69408601T2 (ja) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5995996A (en) * | 1993-06-15 | 1999-11-30 | Xerox Corporation | Pipelined image processing system for a single application environment |
US5701479A (en) * | 1993-06-15 | 1997-12-23 | Xerox Corporation | Pipelined image processing system for a single application environment |
US5557795A (en) * | 1993-06-15 | 1996-09-17 | Xerox Corporation | Pipelined image processing system for a single application environment |
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US5724555A (en) * | 1995-03-23 | 1998-03-03 | Canon Kabushiki Kaisha | Network interface board for digital copier |
US5732269A (en) * | 1995-04-21 | 1998-03-24 | International Business Machines Corporation | Data adapter transparent to application I/O path |
US5937415A (en) * | 1995-12-13 | 1999-08-10 | Sybase, Inc. | Data base development system with methods facilitating copying of data from one data source to another |
US5809286A (en) * | 1996-05-01 | 1998-09-15 | Mci Communications Corporation | Method and apparatus for emulating a dynamically configured 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 |
WO1997041657A1 (en) * | 1996-05-01 | 1997-11-06 | Mci Communications Corporation | Method and apparatus for emulating a digital cross-connect switch network |
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 |
US5850536A (en) * | 1996-05-01 | 1998-12-15 | Mci Communications Corporation | Method and system for simulated multi-tasking |
US5812826A (en) * | 1996-06-27 | 1998-09-22 | Mci Communications Corporation | Method and apparatus for emulating a network of state monitoring devices |
US6035297A (en) * | 1996-12-06 | 2000-03-07 | International Business Machines Machine | Data management system for concurrent engineering |
US6088693A (en) * | 1996-12-06 | 2000-07-11 | International Business Machines Corporation | Data management system for file and database management |
US5826265A (en) * | 1996-12-06 | 1998-10-20 | International Business Machines Corporation | Data management system having shared libraries |
US5954829A (en) * | 1996-12-30 | 1999-09-21 | Mci Communications Corporation | System, method, and computer program product for digital cross connect testing |
US5854930A (en) * | 1996-12-30 | 1998-12-29 | Mci Communications Corporations | System, method, and computer program product for script processing |
US5966515A (en) * | 1996-12-31 | 1999-10-12 | Unisys Corporation | Parallel emulation system and method |
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 |
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 |
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 |
JP4082051B2 (ja) * | 2002-03-19 | 2008-04-30 | 富士ゼロックス株式会社 | 画像処理装置および画像処理方法 |
JP4407231B2 (ja) * | 2003-10-16 | 2010-02-03 | セイコーエプソン株式会社 | 印刷装置、印刷処理方法およびそのプログラム |
US8054487B2 (en) * | 2004-12-16 | 2011-11-08 | International Business Machines Corporation | Mechanism to create a reservation against a future scheduling object instantiation |
JP2006338506A (ja) * | 2005-06-03 | 2006-12-14 | Fujifilm Holdings Corp | コネクタ |
JP2006338507A (ja) * | 2005-06-03 | 2006-12-14 | Fujifilm Holdings Corp | 処理装置及び処理方法 |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
US9008464B2 (en) * | 2009-06-16 | 2015-04-14 | University-Industry Cooperation Group Of Kyung Hee University | Media data customization |
US8983632B2 (en) * | 2011-03-29 | 2015-03-17 | Honeywell International Inc. | Function block execution framework |
US20160328279A1 (en) * | 2015-05-07 | 2016-11-10 | Ebay Inc. | Method and System for Providing a Framework as a Service |
US20170163732A1 (en) * | 2015-12-04 | 2017-06-08 | Vmware, Inc. | Inter-task communication within application-release-management pipelines |
US11868206B2 (en) * | 2021-05-11 | 2024-01-09 | Sap Se | Automated mass message processing |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3909797A (en) * | 1973-12-13 | 1975-09-30 | Honeywell Inf Systems | Data processing system utilizing control store unit and push down stack for nested subroutines |
US4296470A (en) * | 1979-06-21 | 1981-10-20 | International Business Machines Corp. | Link register storage and restore system for use in an instruction pre-fetch micro-processor interrupt system |
JPS5617437A (en) * | 1979-07-23 | 1981-02-19 | Fujitsu Ltd | Loading system for nonresident program |
GB2060225B (en) * | 1979-09-29 | 1983-05-25 | Plessey Co Ltd | Multi-programming data processing system process suspension |
JPS5960651A (ja) * | 1982-09-30 | 1984-04-06 | Fujitsu Ltd | モジユ−ル間の制御遷移管理方式 |
US4488227A (en) * | 1982-12-03 | 1984-12-11 | Honeywell Information Systems Inc. | Program counter stacking method and apparatus for nested subroutines and interrupts |
JPS6238060A (ja) * | 1985-08-12 | 1987-02-19 | Matsushita Graphic Commun Syst Inc | 通信制御装置 |
JPS6491260A (en) * | 1987-10-01 | 1989-04-10 | Nec Corp | Communication control system |
JPH01193935A (ja) * | 1988-01-28 | 1989-08-03 | Nec Software Ltd | サブコマンド実行形式によるプログラム制御方式 |
JP2792559B2 (ja) * | 1988-05-12 | 1998-09-03 | キヤノン株式会社 | カラー画像処理装置 |
EP0357444A3 (en) * | 1988-09-02 | 1991-12-18 | Tektronix, Inc. | Dynamically configurable, demand driven data processing pipeline |
JPH0766334B2 (ja) * | 1989-05-11 | 1995-07-19 | 松下電送株式会社 | 画像表示装置 |
US5175854A (en) * | 1989-06-19 | 1992-12-29 | Digital Equipment Corporation | Inter-applicataion interface system |
EP0433472B1 (de) * | 1989-12-18 | 1996-04-17 | Siemens Aktiengesellschaft | Verfahren zum gepufferten Datenaustausch zwischen Programmen einer Datenverarbeitungsanlage |
JPH04130928A (ja) * | 1990-09-21 | 1992-05-01 | Fuji Xerox Co Ltd | 情報処理システムにおける例外処理方法 |
JPH0797323B2 (ja) * | 1991-09-30 | 1995-10-18 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 名前付きパイプを用いるプロセス間通信の方法及びプロセス |
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> | マルチプロセスを用いた動物体認識処理方法 |
-
1993
- 1993-06-15 US US08/076,679 patent/US5396616A/en not_active Expired - Lifetime
-
1994
- 1994-04-13 CA CA002121154A patent/CA2121154C/en not_active Expired - Fee Related
- 1994-06-07 JP JP12526894A patent/JP3617852B2/ja not_active Expired - Fee Related
- 1994-06-14 DE DE69408601T patent/DE69408601T2/de not_active Expired - Fee Related
- 1994-06-14 EP EP94304303A patent/EP0629945B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69408601D1 (de) | 1998-04-02 |
EP0629945A3 (en) | 1995-05-24 |
CA2121154C (en) | 1999-03-09 |
JPH07105021A (ja) | 1995-04-21 |
US5396616A (en) | 1995-03-07 |
CA2121154A1 (en) | 1994-12-16 |
EP0629945A2 (en) | 1994-12-21 |
EP0629945B1 (en) | 1998-02-25 |
DE69408601T2 (de) | 1998-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3617852B2 (ja) | 多重処理パイプラインデータ処理エミュレート方法 | |
JP3617851B2 (ja) | パイプライン化データ処理方法 | |
USRE42444E1 (en) | Method for managing resources in a reconfigurable computer having programmable logic resources where automatically swapping configuration data between a secondary storage device and the programmable logic resources | |
US7257816B2 (en) | Digital data processing apparatus and methods with dynamically configurable application execution on accelerated resources | |
JPH06266683A (ja) | 並列処理装置 | |
US20080244507A1 (en) | Homogeneous Programming For Heterogeneous Multiprocessor Systems | |
KR970008527B1 (ko) | 고급 인스트럭션 처리 장치 및 방법 | |
JPH0922362A (ja) | コンピュータシステムおよびコンピュータ制御方法 | |
JPH02188833A (ja) | アプリケーションとデータベース管理システム間の相互通信システム及び方法 | |
EP1763774A1 (en) | Multiple computer architecture with replicated memory fields | |
US5701479A (en) | Pipelined image processing system for a single application environment | |
CN106445656A (zh) | 一种实现线程本地存储的方法及装置 | |
US6684395B2 (en) | Multiple image dynamic bind and load procedure for a multi-processor | |
Gonzalez et al. | Parallel task execution in a decentralized system | |
US8561077B1 (en) | Binder for a multi-threaded process to access an un-shareable resource | |
JPH08263306A (ja) | パイプラインデータ処理用データ処理システムとパイプラインデータ処理方法 | |
JPH10222381A (ja) | データ処理システム | |
JPH07306837A (ja) | 分散処理のための装置、方法、及びプログラム製品 | |
Machine et al. | Checkpoint & Migration of UNIX Processes in the Condor Distributed Processing System | |
Bakkers et al. | Automatic generation of scheduling and communication code in real-time parallel programs | |
Guzman et al. | MCC Technical Report Number: PP-163-87 | |
Vankeerberghen et al. | Dynamic link libraries II. Development | |
Kedem et al. | The Milan Project: A New Method for High-Assurance and High-Performance Computing on Large-Scale Distributed Platforms | |
Hoecker | A Distributed Threads Package for Solaris 2.4 | |
Hernandez | Parallel Programming Models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040608 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040825 |
|
A521 | Request for written amendment filed |
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 |