(57)【要約】処理回路は、データ生成プロセス及びデータ消費プロセスを実行する。前記データ生成プロセスはデータのストリームを生成し、前記データ消費プロセスは前記ストリームの生成と並行して前記データのストリームを消費する。先入れ先出しバッファは、前記データ生成プロセスと前記データ消費プロセスとの間の前記ストリームからデータを渡す。前記バッファはバッファメモリを備え、前記バッファは前記ストリームからデータ項目を循環式に前記バッファメモリ内に書き込む。消費プロセスインターフェイスは、前記データ消費プロセスが前記ストリームからのデータグレーンを使用すること、を可能にするためのコマンドを処理するように配置される。前記インターフェイスは、アクセスされるべき前記グレーン内のデータのアドレスが前記循環ＦＩＦＯバッファ内でラップアラウンドするかどうかをテストすることにより前記コマンドに応答する。前記インターフェイスは、もし前記アドレスがラップアラウンドするならば、前記ＦＩＦＯバッファから前記補助メモリ領域に前記グレーンを、コピーされたグレーン内で前記ラップアラウンドが除去されることになるようにコピーする。前記インターフェイスは、前記アドレスが前記グレーン内でラップアラウンドしないときに、前記ＦＩＦＯバッファから前記グレーンを読み取るよう前記消費プロセスに指示を返し、又は前記アドレスがラップアラウンドするときに、前記補助メモリ領域から読み取るよう指示を返す。
2006523884.tif 000002
【特許請求の範囲】
【請求項１】
データ生成プロセス及びデータ消費プロセスを実行するように配置されている処理回路であって、前記データ生成プロセスがデータのストリームを生成し、前記データ消費プロセスが前記ストリームの生成と並行して前記データのストリームを消費するような処理回路と、
前記データ消費プロセスにアクセス可能な処理メモリと、
前記データ生成プロセスと前記データ消費プロセスとの間の前記ストリームからデータを渡すための先入れ先出し循環バッファユニットであって、当該循環バッファユニットがバッファメモリを備え、当該循環バッファユニットが前記ストリームからデータ項目を循環式に前記バッファメモリ内に書き込むような循環バッファユニットと、
前記データ消費プロセスに特有のグレーンサイズ選択及び補助バッファ領域選択を使用するように配置されている前記循環バッファユニットの消費プロセスインターフェイスであって、当該消費プロセスインターフェイスが、前記データ消費プロセスが前記ストリームからのデータグレーンを使用すること、を可能にするためのコマンドを処理するように配置されており、当該消費プロセスインターフェイスが、
アクセスされるべき前記グレーン内のデータのアドレスが前記バッファメモリ内でラップアラウンドするかどうかをテストすることにより前記コマンドに応答し、
前記アドレスがラップアラウンドすることの検出に応答して、前記バッファメモリから前記補助メモリ領域に前記グレーンを、コピーされたグレーン内で前記ラップアラウンドが除去されることになるようにコピーし、
前記アドレスが前記グレーンの内部でラップアラウンドしないときに、前記バッファメモリから前記グレーンを読み取るよう前記消費プロセスに指示を返し、又は前記アドレスがラップアラウンドするときに、前記補助メモリ領域から読み取るよう指示を返すように配置されているような消費プロセスインターフェイスとを備えるデータ処理装置。
【請求項２】
前記消費プロセスインターフェイスが、前記コマンドに応答して、前記グレーン内のアドレスデータ内での使用のために前記バッファメモリ又は前記補助メモリ領域のアドレス指定を行うためのポインタを、前記バッファメモリ内の前記グレーン内の前記データの前記アドレスがラップアラウンドするかどうかに応じて返すように配置されている請求項１に記載のデータ処理装置。
【請求項３】
前記消費プロセスが、前記コマンドの一部として前記補助メモリのアドレス及び前記グレーンサイズを選択するように配置されている請求項１に記載のデータ処理装置。
【請求項４】
前記データ生成プロセス及び前記データ消費プロセスがそれぞれ、前記循環バッファユニットにデータを送信するため及び前記循環バッファユニットからデータを受信するために第１及び第２のグレーンサイズを使用するように配置されており、前記第１及び第２のグレーンサイズが互いに異なっている請求項１に記載のデータ処理装置。
【請求項５】
前記データ生成プロセスが、データを送信するために可変グレーンサイズを使用するように配置されている請求項５に記載のデータ処理装置。
【請求項６】
前記第１のグレーンサイズ及び前記循環バッファユニットのサイズは、前記循環バッファユニットのデータのアドレスが常に前記第１のグレーンサイズの連続するグレーン間でラップアラウンドするように選択される請求項２に記載のデータ処理装置。
【請求項７】
前記データストリームを生成するためのデータ生成プロセスにアクセス可能な更なる処理メモリと、
前記データ生成プロセスのための更なる補助メモリ領域選択を受信するように配置されている前記循環バッファユニットの生成プロセスインターフェイスであって、当該生成プロセスインターフェイスが、前記ストリームから出力データグレーンを出力するための更なるコマンドを処理するように配置されており、当該生成プロセスインターフェイスが、
前記出力グレーン内のデータのアドレスが前記バッファメモリ内でラップアラウンドすることになるかどうかをテストすることにより前記更なるコマンドに応答し、
前記アドレスが前記グレーンの内部でラップアラウンドしないときに、前記バッファメモリに前記グレーンを書き込むよう前記生成プロセスに指示を返し、又は前記アドレスがラップアラウンドするときに、前記補助メモリ領域に書き込むよう指示を返し、
前記アドレスがラップアラウンドすることの検出に応答して、補助メモリ領域から前記バッファメモリに前記グレーンを、コピーされたグレーン内で前記ラップアラウンドが生成されるようにコピーするように配置されているような生成プロセスインターフェイスとを備える請求項１に記載のデータ処理装置。
【請求項８】
データ生成プロセス及びデータ消費プロセスを実行するように配置されている処理回路であって、前記データ生成プロセスがデータのストリームを生成し、前記データ消費プロセスが前記ストリームの生成と並行して前記データのストリームを消費するような処理回路と、
前記データ生成プロセスにアクセス可能な処理メモリと、
前記データ生成プロセスと前記データ消費プロセスとの間の前記ストリームからデータを渡すための先入れ先出し循環バッファユニットであって、当該循環バッファユニットがバッファメモリを備え、当該循環バッファユニットが前記ストリームからデータ項目を循環式に前記バッファメモリ内に書き込むような循環バッファユニットと、
前記データ生成プロセスに特有のグレーンサイズ選択及び補助バッファ領域選択を使用するように配置されている前記循環バッファユニットの生成プロセスインターフェイスであって、当該生成プロセスインターフェイスが、前記データ生成プロセスが生成されたグレーンを書き込むためにメモリを使用すること、を可能にするためのコマンドを処理するように配置されており、当該生成プロセスインターフェイスが、
メモリを使用可能にすべき前記グレーン内のデータのアドレスが前記循環バッファメモリ内でラップアラウンドするかどうかをテストすることにより前記コマンドに応答し、
前記アドレスが前記グレーンの内部でラップアラウンドしないときに、前記バッファメモリに前記グレーンを書き込むよう前記生成プロセスに指示を返し、又は前記アドレスがラップアラウンドするときに、補助メモリ領域に書き込むよう指示を返すように配置されているような生成プロセスインターフェイスとを備えるデータ処理装置。
【請求項９】
信号処理タスクのマシン実装を生成するマシン実装の方法であって、前記信号処理タスクが、複数のプロセスとして、当該プロセス間でデータストリームが循環バッファメモリを介して通信されるような複数のプロセスを並行して実行する段階を備え、当該方法が、
前記バッファメモリ内に格納されたデータのグレーンにアクセスするために、前記複数のプロセスの内のデータ消費プロセスによって呼び出される関数を含むアプリケーションプログラムインターフェイスを提供する段階であって、前記アプリケーションプログラムインターフェイスが、前記複数のプロセスの内の前記データ消費プロセスに前記グレーンのサイズ及び補助メモリ領域の選択可能な定義を提供し、前記関数が、アクセスされるべき前記グレーンのアドレスが前記バッファメモリ内でラップアラウンドするかどうかをテストし、前記アドレスが前記グレーン内でラップアラウンドするときに、前記バッファメモリから補助メモリ領域に前記グレーンを、コピーされたグレーン内で前記ラップアラウンドが除去されることになるようにコピーし、前記呼び出しの結果として、前記アドレスが前記グレーンの内部でラップアラウンドしないときには、前記グレーンからのデータを前記バッファメモリから読み取るように前記複数のプロセスの内の前記消費プロセスに指示を返し、又は前記アドレスが前記グレーン内でラップアラウンドするときには、前記補助メモリ領域から読み取るよう指示を返すように配置されているようなアプリケーションプログラムインターフェイスを提供する段階と、
前記信号処理タスクの指定を受信する段階と、
前記指定内の前記関数の呼び出しを識別する段階と、
前記アプリケーションプログラムインターフェイスからの前記関数を使用して前記呼び出しを実装する段階とを備えるマシン実装の方法。
【請求項１０】
前記アプリケーションプログラムインターフェイスが、前記処理タスクの前記指定から処理要素上のプロセスの分散を隠し、前記関数の前記実装が前記分散に従って選択される請求項９に記載のマシン実装の方法。
【請求項１１】
当該方法は、前記マシン実装を実装するための集積回路製作制御情報を生成する段階と、前記集積回路製作制御情報の制御のもとに集積回路を製造する段階とを備える請求項１０に記載のマシン実装の方法。
【請求項１２】
循環ＦＩＦＯバッファにアクセスするためのアプリケーションプログラムインターフェイスを備え、前記アプリケーションプログラムインターフェイスが、前記循環ＦＩＦＯバッファからデータにアクセスするアプリケーションプログラムのためのグレーンサイズの選択と前記アプリケーションプログラムの補助メモリ領域の定義とを提供し、前記アプリケーションプログラムインターフェイスが、前記循環ＦＩＦＯバッファからグレーンにアクセスするための前記アプリケーションプログラムから呼び出されるような関数を備え、前記関数が、
アクセスされるべき前記グレーン内のデータのアドレスが前記循環ＦＩＦＯバッファ内でラップアラウンドするかどうかをテストし、
前記アドレスが前記グレーンの内部でラップアラウンドするときに、前記ＦＩＦＯバッファから補助メモリ領域にグレーンを、コピーされるグレーン内で前記ラップアラウンドが除去されることになるようにコピーし、
前記呼び出しの結果として、前記アドレスが前記グレーン内でラップアラウンドしないときには、前記ＦＩＦＯバッファから読み取るよう指示を返し、又は前記アドレスが前記グレーンの内部でラップアラウンドするときには、前記補助メモリ領域から読み取るよう指示を返すように配置されているコンピューター可読媒体。
【請求項１３】
請求項８に記載の方法を実行するための命令のプログラムを備えるコンピューター可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理に関し、特に、並行して実行されるプロセスがＦＩＦＯバッファを介して通信するデータ処理に関する。
【背景技術】
【０００２】
並行して実行されるプロセス間でデータを通信する方法については、題「Ｅｃｌｉｐｓｅ：Ａ  Ｈｅｔｅｒｏｇｅｎｅｏｕｓ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｆｌｅｘｉｂｌｅ  Ｍｅｄｉａ  Ｐｒｏｃｅｓｓｉｎｇ」、Ｍ．Ｊ．Ｒｕｔｔｅｎ、Ｊ．Ｔ．Ｊ．ｖａｎ  Ｅｉｊｎｄｈｏｖｅｎ、Ｅ．Ｊ．Ｄ．Ｐｏｌ、Ｅ．Ｇ．Ｔ  Ｊａｓｐｅｒｓ、Ｐ．ｖａｎ  ｄｅｒ  Ｗｏｌｆ、Ｏ．Ｐ．ＧａｎｇｗａｌおよびＡ．Ｔｉｍｍｅｒ著、およびＩＥＥＥ  Ｄｅｓｉｇｎ  ａｎｄ  Ｔｅｓｔ  ｏｆ  Ｃｏｍｐｕｔｅｒｓ版、Ｓｐｅｃｉａｌ  Ｉｓｓｕｅ  ｏｎ  Ｅｍｂｅｄｄｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｂａｓｅｄ  Ｄｅｓｉｇｎｓ、Ｐ．Ｍａｒｗｅｄｅｌ編、２００２年、という文献に説明されている。この文献を「Ｅｃｌｉｐｓｅ」と呼ぶことにする。
【０００３】
Ｅｃｌｉｐｓｅはメディア処理（例えば、ビデオ画像処理）に関係しており、当該メディア処理ではデータのストリームが１のプロセスから他のプロセスに渡される。Ｅｃｌｉｐｓｅの１つの重要な側面は、Ｅｃｌｉｐｓｅが、異なるプロセス間の通信および同期化のための汎用インターフェイスモデルの効率的に実装可能な定義を提供することである。当該インターフェイスモデルは、通信および同期化を行うために使用する必要のあるアプリケーションプログラムインターフェイス（ＡＰＩ）のプリミティブ関数の限定セットを定義する。このＡＰＩのプリミティブ関数に関して、信号処理タスクは、（同じまたは異なる処理要素上で、または専用ハードウェアプロセッサまたはその組合せ上で実行するコンピュータプログラムにより、）どのように多様なプロセスが実装されることになるかをオープンにしておくという方法で関数的に記述することができる。その結果、当該インターフェイスモデルは信号処理タスク記述の再使用性を高める。
【０００４】
この結果を達成するため、通信および同期化のためのＡＰＩのプリミティブ関数は、当該プリミティブ関数を効率的に実装できるように慎重に選択される必要がある。上記インターフェイスモデルは、ストリーム内のデータを生成する生成側プロセスと、当該ストリームからのデータを使用する消費側プロセスであって、当該生成プロセスがまだ当該ストリーム内のデータをさらに生成する必要があるときに当該消費プロセスが当該ストリームからのデータを使用するという意味において、並行して実行する事ができるような消費側プロセスとを前提としている。
【０００５】
上記プロセスは、典型的には、グレーン単位でデータを生成および消費する。最小サイズのグレーンは例えば画像の単一ピクセル値であり、より大きいサイズのグレーンの例は画像のラインまたは８×８ピクセルブロックである。異なるプロセスは、異なるグレーンサイズを使用してもよい。例えば、処理のために完全なラインを必要とするが８×８ブロックを受け取るプロセスは、８ラインのグレーンを使用しなければならないことになる。処理中に、上記消費プロセスは１のグレーンから次のグレーンへと進み、ステップ間で、上記消費プロセスは現在のグレーン内からのデータのみを処理する。
【０００６】
Ｅｃｌｉｐｓｅは、上記生成プロセスと上記消費プロセスとの間の上記ストリームからのデータを通信するために、ＦＩＦＯバッファインターフェイスを使用する。上記生成プロセスは、一度に１グレーンずつデータをＦＩＦＯバッファメモリに書き込み、当該データは、各グレーンが書き込まれた順序で、上記消費プロセスによる使用のために一度に１グレーンずつ当該ＦＩＦＯバッファから読み取られる。このメカニズムのために、Ｅｃｌｉｐｓｅは、どの通信および同期化が信号処理タスクで表される必要があるかに関して、以下のプリミティブコマンドを定義する。
Ｗｒｉｔｅ，Ｒｅａｄ，ＧｅｔＳｐａｃｅおよびＰｕｔｓｐａｃｅ
【０００７】
ＦＩＦＯバッファの書き込みコマンドは、出力データのグレーン（を指すポインタ）と書き込みグレーンのサイズ（サイズは黙示の場合もある）をパラメータとして要求する。読み取りコマンドは、当該データのメモリ領域を指すポインタと読み取りグレーンのサイズをパラメータとしてとる。読み取りコマンドの実行後、読み取りグレーンからの当該データは、上記ＦＩＦＯバッファから当該ポインタが指し示す当該メモリ領域にコピーされていることになる。ＧｅｔＳｐａｃｅコマンドは、次のグレーンが読み取りまたは書き込みされることを示すために使用される。ＧｅｔＳｐａｃｅコマンドは、グレーンのサイズをパラメータとしてとり、要求された空間が使用可能であるかどうか示すフラグを返す。このフラグは、プロセスが一時停止すべきかどうかを決定するために使用してもよい。ＧｅｔＳｐａｃｅコマンドに応答して、その空間が呼び出しプロセスのために予約される。ＰｕｔＳｐａｃｅコマンドは、グレーンの読み取りまたは書き込みが終了したこと、および、もはや当該グレーンのための上記ＦＩＦＯバッファ領域を呼び出しプロセスのために予約しておく必要がないことを示すために使用される。
【０００８】
再使用性は、タスク記述における通信および同期化の記述をこのコマンドのセットに基づかせることによって、および、タスク記述の種々の実施態様をこのコマンドのセットの種々の実施態様に実装することによって実現される。
【０００９】
ＦＩＦＯバッファインターフェイスの典型的な実施態様では、循環式にアドレス指定されるメモリを使用する。各々次のグレーンからのデータは、バッファメモリのアドレス範囲の終端に達するまで、隣接するより高位の一連のアドレスに書き込まれる。バッファメモリのアドレス範囲の終端に達した場合には、次のグレーンからのデータは、メモリ内の最下位の一連のアドレスに書き込まれる。しかしながら、そのようなＦＩＦＯバッファインターフェイスは、異なるグレーンサイズが使用される場合には複雑さをもたらすことになる。上記消費プロセスのグレーンサイズが上記生成プロセスのグレーンサイズよりも大きい場合には、例えば、一部のグレーンにおいてグレーン内のアドレスが「ラップアラウンド」する（バッファアドレス範囲の一方の境界から他方の境界にジャンプする）可能性がある。このことが、上記消費プロセスによるグレーン単位のデータのアドレス指定を複雑にする。
【００１０】
Ｅｃｌｉｐｓｅは、上記ＦＩＦＯバッファからのデータがコピーされる事になるメモリを指すポインタをパラメータとして持つ読み取りコマンド、を使用する事で、この問題を解決した。上記消費プロセスは、この領域からデータを読み取る事になる。この解決策において、上記ＦＩＦＯバッファのグレーンからのすべてのデータは、アドレスのラップアラウンドを除去するために、上記消費プロセスのグレーンのためのローカルメモリにコピーされる。したがって、ラップアラウンドによるアドレスの複雑さは、コピーすること、上記消費プロセスが最大の効率でグレーン内のデータを自由にアドレス指定できるようにしておくことに限定される。しかしながら、コピー動作は、処理にオーバヘッドコストをもたらす。
【００１１】
もう１つの可能な解決策は、ＥｃｌｉｐｓｅのＡＰＩでは使用されていないが、ラップアラウンドが必要とされるときにアドレスが確実に適合するように各アドレスのアドレス変換を使用して、上記消費プロセスが上記ＦＩＦＯバッファメモリから直接グレーン内のデータにアクセスするというものである。これは、コピー動作のオーバヘッドを解消するのだが、データがアドレス指定されるごとにオーバヘッドをもたらす。上記消費プロセスが上記バッファメモリに適合しないときには、上記消費プロセスは、データがアドレス指定されるごとに、グレーン内のデータのアドレスを、変換のためにＡＰＩ呼び出しに供給する必要がある。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
したがって、本発明の目的は、信号処理タスク記述に使用するためのアプリケーションプログラムインターフェイス定義を提供すること、及び、ラップアラウンドするアドレスを持つＦＩＦＯバッファメモリを介してデータのグレーンを通信するプロセス、の実行中のオーバヘッドを最小化できるようにするアプリケーションプログラムインターフェイス定義の実施態様を提供することである。
【００１３】
とりわけ特に、本発明の目的は、互いに異なるグレーンサイズを使用する複数プロセスに起因するようなオーバヘッドを最小化できるようにすることである。
【課題を解決するための手段】
【００１４】
本発明によるデータ処理装置は、請求項１に示されている。消費プロセスは、グレーンからのデータにアクセスするためのアプリケーションプログラムインターフェイス関数を介して循環バッファにアクセスすることができる。本発明によれば、当該関数は、当該消費プロセスがデータを直接循環ＦＩＦＯバッファから読み取るべきか補助メモリから読み取るべきかを示す指示を返し、当該関数は、当該グレーン内のアドレスがいつ上記循環ＦＩＦＯバッファ内でラップアラウンドするのかを示すような後者の指示を返す。当該グレーン内のアドレスがＦＩＦＯバッファ内でラップアラウンドするときには、当該グレーンからのデータは上記補助メモリにコピーされる。
【００１５】
グレーンサイズおよび補助バッファは上記消費プロセスに固有に定義されるので、その結果、上記消費プロセスのグレーンサイズは上記ＦＩＦＯバッファに書き込みを行う上記生成プロセスのグレーンサイズとは異なることがある。上記補助バッファは、当該補助バッファがストリームから１つのグレーンを書き込むための十分な空間を含むように選択される。上記補助バッファは、上記消費プロセスに固有であるため、可能性のある全てのグレーンサイズを処理できるように過剰な大きさにする必要はない。好ましくは、上記消費プロセス自体が、上記アプリケーションプログラムインターフェイスへのコマンドを使用して（例えば当該コマンドの引数として）上記グレーンサイズおよび上記補助バッファを設定する。
【００１６】
このタイプのコマンドがアプリケーションプログラムインターフェイスに含まれているときには、当該コマンドは、上記循環ＦＩＦＯバッファからの読み取りのためのすべてのアクセスがこのコマンドによって表現されるように、信号処理タスクのプログラムを書くことを可能にする。これにより、上記ＦＩＦＯバッファの実施態様は、当該信号処理タスクを指定するプログラムに透過的になる。その結果、同一のプログラムが、当該信号処理タスクを構成する上記プロセスが様々なプロセッサ上に様々に分散される各種の実施態様に使用され得る。そのような様々な分散の実施態様は、上記プロセスを適切なプロセッサ内に実装し、且つ、上記プロセスを実行するプロセッサの場所に応じて適切に、上記循環ＦＩＦＯバッファへのアクセスを処理するために使用されるアプリケーションプログラムインターフェイスコマンドを交換することによって実現される。したがって、当該分散は上記信号処理タスクの指定において透過的である。
【００１７】
上記アプリケーションプログラムインターフェイスコマンドは、直接上記循環ＦＩＦＯバッファから得られる又は補助メモリから得られるグレーンからのデータの択一的な使用を提供するので、この透過性は上記ＦＩＦＯバッファへの高度に効果的なアクセスと共に実現される。
【００１８】
本発明のこれらおよびその他の目的およびその他の有利な側面については、図面の簡単な説明の記載欄に掲げた図面を使用して説明されることになる。
【発明を実施するための最良の形態】
【００１９】
図１は、第１のプロセス１、第２のプロセス４、ＦＩＦＯバッファメモリ２、およびＦＩＦＯバッファメモリ２とプロセス１、４それぞれとの間のアプリケーションプログラムインターフェイス１ａ、４ａを使用するデータ処理の機構構成を示している。稼動中、第１のプロセス１は、データのストリームを生成し、このストリームからＦＩＦＯバッファメモリ２にデータを書き込む。データはグレーン単位で生成および消費されるが、各グレーンは典型的には個別にアドレス指定可能なワードを多数含んでいる。ＦＩＦＯバッファメモリ２は、１のグレーンからのデータを、次の１のグレーンからのデータが第１のプロセス１から受信される前に受信し、且つ、ＦＩＦＯバッファメモリ２は、第２のプロセス４が、一度に１グレーンからのデータずつを、各グレーン又は各グレーンの各グループが第１のプロセス１から受信された順序で、連続して使用できるようにする。
【００２０】
プロセス１、４は典型的には、アプリケーションプログラムインターフェイス１ａ、４ａを介してＦＩＦＯバッファ１１へのインターフェイスを取るソフトウェア実装プロセスである。すなわち、プロセス１、４は、ＦＩＦＯバッファリングプロセスの詳細を直接管理するのではなく、これらの詳細を管理するアプリケーションプログラムインターフェイス関数を呼び出す。図１の構造では明瞭にするために２つのプロセス１、４のみを示しているが、実際の適用においては、多数のＦＩＦＯバッファを介してデータを通信する更に多くのプロセスが関与してもよいことを理解されたい。
【００２１】
図２は、図１の構成を実装するための、典型的な処理装置を示している。当該処理装置は、第１の処理要素１０、第２の処理要素１６、及び通信インフラストラクチャ１４ａ、１４ｂ経由で結合されたメモリ１８を含んでいる。バスは、例えば通信インフラストラクチャとして使用され得る。第１の処理要素１０は、第１のプロセス１およびアプリケーションインターフェイス１ａの関数を実行するようにプログラムされる。第２の処理要素１６は、第２のプロセス４およびアプリケーションインターフェイス４ａの関数を実行するようにプログラムされる。典型的には、当該装置は、少なくとも処理要素およびバスを、好ましくは更にメモリを含む集積回路デバイスとして実装される。
【００２２】
稼動中、メモリ１８からのストレージロケーションが、ＦＩＦＯバッファメモリ２用に使用される。最小アドレスＡｍｉｎから最大アドレスＡｍａｘまでのアドレスの領域は、ＦＩＦＯバッファデータを格納するために使用される。ＦＩＦＯバッファメモリにアクセスするためのアプリケーションインターフェイスは、関数Ｒｅａｄ、Ｗｒｉｔｅ、ＧｅｔＳｐａｃｅおよびＰｕｔｓｐａｃｅを定義する。
【００２３】
ＧｅｔＳｐａｃｅ呼び出しおよびＷｒｉｔｅ呼び出しを使用して、第１のプロセス１はデータのグレーンをアプリケーションプログラムインターフェイス１ａの関数に供給するが、当該関数は当該データをＡｍｉｎからＡｍａｘの範囲のアドレスＡ１．Ａｎのｎ個のメモリロケーションに書き込む（整数ｎは当該グレーン内のアドレス指定可能データ項目の個数を表す）。第１のプロセスが次のグレーンを供給するとき、そのデータは、Ａｍａｘに達するまでアドレスＡｎ＋１．．Ａ２ｎ等のロケーションに書き込まれる。Ａｍａｘが達成された場合、アプリケーションプログラムインターフェイス１ａは次のグレーンからのデータをアドレスＡｍｉｎ．．．Ａｍｉｎ＋ｎ−１のロケーションに書き込む、又は、もしグレーンの内部のどこかでアドレスＡｍａｘが達成されたならば、アプリケーションプログラムインターフェイス１ａはグレーンの後続の部分をＡｍｉｎから始まるアドレスのロケーションに書き込む。これは、ラッピングアラウンド、または循環式の書き込みと呼ばれる。そのような書き込みによって、以前のグレーンからのデータが第２のプロセス４により使用される前に上書きされる事になるときには、アプリケーションインターフェイス１ａは、ＦＩＦＯバッファメモリ２が「満杯」であることを信号で知らせて、第２のプロセス４が上書きされる事になるそのデータの読み取りを完了するまで、第１のプロセスの実行を一時停止させる。
【００２４】
第２のプロセス４は、ＧｅｔＳｐａｃｅ呼び出しおよびＲｅａｄ呼び出しを使用して、一度に１グレーンからのデータずつにアクセスする。一度、処理中の第２のプロセス４がグレーンからのデータのアドレス指定を終了すると、第２のプロセス４は次のグレーンを受信するためにアプリケーションインターフェイス４ａを呼び出す。第２のプロセス４によってアクセスされるグレーンのサイズは、第１のプロセス４のグレーンのサイズと異なっていてもよい。例えば、第２のプロセス４の各グレーンは、第１のプロセス１のグレーンの整数値ｍから成っていてもよい。第２のプロセス４は、次のグレーンのデータを処理する準備が整うと、アプリケーションプログラムインターフェイス４ａを呼び出す。Ｒｅａｄ呼び出し
Ｐｏｉｎｔｅｒ  ｔｏ  ｄａｔａ  ｂｕｆｆｅｒ
＝Ｒｅａｄ（．．．，ｐｏｉｎｔｅｒ  ｔｏ  ａｄｄｉｔｉｏｎａｌ  ｍｅｍｏｒｙ）
は、追加のバッファメモリの領域を引数として指すポインタを持ち、バッファを指すポインタを返す。他の引数は本質的ではないため示されていないが、これらの引数はグレーンサイズ、処理タスク識別情報およびＦＩＦＯ識別情報を含んでもよい。第２のプロセス４は、メモリ１８内の追加のバッファメモリの領域を指すポインタをインターフェイス４ａに供給する。この領域は少なくとも、第２のプロセス４の１つのグレーンのデータを格納するために必要なサイズを備えている。
【００２５】
図３は、アプリケーションインターフェイス４ａが次のグレーンをＦＩＦＯバッファメモリから受信するために第２のプロセス４から呼び出しを受信するときのアプリケーションインターフェイス４ａの動作、のフローチャートを示している。第１のステップ３１において、アプリケーションプログラムインターフェイス４ａは、データグレーンが読み取りに使用可能であるときには、この次のグレーンを受信するために呼び出しを受け入れる（そのときまで第１のプロセス４は一時停止する必要がある）。第２のステップ３２において、アプリケーションプログラムインターフェイス４ａは、このグレーンからのデータのアドレスがそのグレーンの内部でラップアラウンドするかどうかをテストする。もしそうならば、アプリケーションプログラムインターフェイス４ａは、アプリケーションプログラムインターフェイス４ａが、この次のグレーンのデータを、呼び出しを供給されたポインタによって指し示される追加領域にコピーするような第３のステップ３３を実行する。アドレスのコピー中にラップアラウンドが除去される、即ち、ＦＩＦＯバッファ領域内のアドレスＡｍｉｎから格納されるグレーンのデータの一部は、ＦＩＦＯバッファ領域の終わりのグレーンからのデータのアドレスに続くアドレスで追加領域に格納される。第４のステップ３４において、アプリケーションプログラムインターフェイス４ａは、追加領域を指すポインタを第２のプロセス４に返す。
【００２６】
もし、アプリケーションプログラムインターフェイス４ａが第２のステップ３２にて、データがＦＩＦＯバッファ領域でラップアラウンドしないことを認識したならば、アプリケーションプログラムインターフェイス４ａは、第５のステップ３５を実行し、グレーンのデータが格納されているＦＩＦＯバッファ領域のロケーションを指すポインタを返す。
【００２７】
したがって、第２のプロセス４は、アプリケーションプログラムインターフェイス４ａを指すポインタを供給し且つ受け取る。アプリケーションプログラムインターフェイス４ａは、次のグレーンが格納される方法に応じて、供給されたポインタまたはＦＩＦＯバッファの部分を指すポインタを、第２のプロセス４に返す。供給されたポインタは、ラップアラウンドによる分割アドレス指定を避けるために必要なときにだけ返される。再使用性を保証するために使用されるアプリケーションプログラムインターフェイスは、このことを示すプリミティブ関数Ｒｅａｄを含んでいる。
【００２８】
Ｐｏｉｎｔｅｒ  ｔｏ  ｄａｔａ  ｂｕｆｆｅｒ
＝Ｒｅａｄ（．．．，ｐｏｉｎｔｅｒ  ｔｏ  ａｄｄｉｔｉｏｎａｌ  ｍｅｍｏｒｙ）
高水準プログラムに関して、Ｒｅａｄ関数は例えば以下のように実装することができる。
ＢｕｆｆｅｒＰｏｉｎｔｅｒ  Ｒｅａｄ（ＢｕｆｆｅｒＰｏｉｎｔｅｒ  Ｐ）
｛              ｉｎｔ  ｅｎｄ＿ｏｆ＿ｇｒａｉｎ＝ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ＋ｇｒａｉｎ＿ｓｉｚｅ；
ｉｆ（ｅｎｄ＿ｏｆ＿ｇｒａｉｎ＜ｍａｘ）ｒｅｔｕｒｎ  ｂａｓｅ＿ａｄｄｒｅｓｓ＿ｏｆ＿ＦＩＦＯ＿ｂｕｆｆｅｒ＋ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ；
ｆｏｒ（ｉｎｔ  ｉ＝０；ｉ＜ｍａｘ−ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ；ｉ＋＋）
Ｐ［ｉ］＝ＦＩＦＯ＿ｂｕｆｆｅｒ［ｉ＋ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ］；
ｆｏｒ（ｉｎｔ  ｉ＝ｍａｘ−ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ；ｉ＜ｇｒａｉｎ＿ｓｉｚｅ；ｉ＋＋）
Ｐ［ｉ］＝ＦＩＦＯ＿ｂｕｆｆｅｒ［ｉ＋ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ−ｍａｘ］；
ｒｅｔｕｒｎ  Ｐ；
｝
【００２９】
ここで、ｍａｘ、ｃｕｒｒｅｎｔ＿ｏｆｆｓｅｔ、及びｇｒａｉｎ＿ｓｉｚｅは、それぞれＦＩＦＯバッファのサイズ、ＦＩＦＯバッファ内のグレーンの開始位置、及びグレーンのサイズを表すパラメータである。これらのパラメータの値は、他の所で定義されたと仮定されている。オプションで、これらのパラメータの内の１つまたは複数のパラメータは、関数Ｒｅａｄの引数として渡されるようにしてもよい。いくつかの理由のため（例えばＦＩＦＯバッファへの書き込みの際のラップアラウンドを避けるため）に、パラメータｍａｘが時間の関数として自律的に変化してもよいことに留意されたい。
【００３０】
本発明について、引数として追加メモリ領域を指し消費プロセス４により渡されるポインタ、をとる「Ｒｅａｄ」関数に関して説明してきた。代替として、消費プロセス４は、このポインタを一度に一連のＲｅａｄ動作に対して設定するようにしてもよい。もう１つの代替として、アプリケーションプログラムインターフェイスにより定義されているようにして、予め定められたポインタを使用するようにしてもよい。消費プロセス４によって定義されたポインタを使用する事には、追加メモリ領域に予約される必要のある空間の量を、消費プロセス４によって使用されるグレーンサイズに適合させる事ができるという利点がある。したがって、ＦＩＦＯバッファサイズの重複を伴う可能性のある「最悪の場合の」サイズを予約する必要はない。Ｒｅａｄ関数の引数として定義されたポインタの使用には、グレーンサイズをＲｅａｄ関数の各呼び出し用に、オーバヘッドなしで動的に改変できるという利点がある。
【００３１】
データが様々な領域に確実に格納されることを目的として、様々な追加領域値を指すポインタを、引数として連続Ｒｅａｄ関数呼び出しに供給する事には、意味がない事に留意されたい。これは、実装先は、データが追加領域にコピーされるという前提に依存しなくてもよいためである。このようになるのは、例外的な場合だけである。
【００３２】
本発明については、それぞれ第１の処理要素１０および第２の処理要素１６により実行されるプログラムとして実装されるアプリケーションプログラムインターフェイス１ａ、４ａに関して説明してきたが、これらのアプリケーションプログラムインターフェイスの１つまたは両方は、様々な処理要素上で動作し得ることが理解されるであろう。実際、第１および第２のプロセス１、４は、アプリケーションプログラムインターフェイス１ａ、４ａと共に同じ処理要素上で動作し得る。もう１つの実施形態において、ＦＩＦＯバッファメモリ２およびアプリケーションプログラムインターフェイス１ａ、４ａの一部または全部は、専用ハードウェアとして実装され得る。
【００３３】
図４は、ＦＩＦＯバッファメモリ２および第２のプロセス４へのインターフェイスのハードウェア実施態様の例を示している。当該ハードウェア実施態様においてＦＩＦＯバッファユニット１２は、第１の処理要素１０とバス１４ａ、１４ｂとの間に結合される。ＦＩＦＯバッファユニット１２は、バッファメモリ１２０、ＦＩＦＯ入力ポインタレジスタ１２２、ＦＩＦＯ出力ポインタレジスタ１２４、アプリケーション呼び出しプロセッサ１２６、追加バッファポインタレジスタ１２７、戻りポインタマルチプレクサ１２８、およびＦＩＦＯ出力アドレスマルチプレクサ１２９を含んでいる。当該ハードウェア実施態様は好ましくは、外付けでもよいメモリはなるべく除いて、すべてのコンポーネントを含む集積回路内に実現される。
【００３４】
稼動中、第１の処理要素１０は、新しいグレーンが書き込まれることになるときには、アプリケーション呼び出しプロセッサ１２６への呼び出し信号を生成する。バッファメモリ１２０内でメモリ空間が使用可能であるときには、アプリケーション呼び出しプロセッサ１２６は、ＦＩＦＯ入力ポインタレジスタ１２２をバッファメモリ１２０内のグレーンの開始アドレスに設定すると共に、書き込みを開始してもよいことを第１の処理要素１０に応答する。第１の処理要素１０は、開始アドレスをＦＩＦＯ入力ポインタレジスタ１２２から読み取ると共に、グレーンからのデータを開始アドレスから始まるバッファメモリ１２０に書き込む。
【００３５】
バッファメモリ１２０およびメモリ１８は、バス１４ａ、１４ｂを介して第２の処理要素１６によりアドレス指定され得る。アドレスデータに応じて、第２の処理要素１６は、バッファメモリ１２０またはメモリ１８から読み取りを行う。新しいグレーンが読み取られることになるとき、第２の処理要素１０は、アプリケーション呼び出しプロセッサ１２６への呼び出し信号を生成する。当該呼び出しは、メモリ１２内の追加領域のアドレスを伴っている。当該呼び出しに応じて、アプリケーション呼び出しプロセッサ１２６は、そのグレーンが完全に使用可能であるかどうかテストすると共に、そのグレーンが完全に使用可能であるときには、ＦＩＦＯ出力ポインタレジスタ１２２をバッファメモリ１２０内のグレーンの開始アドレスに設定する。
【００３６】
しかしながら、呼び出しに応答する前に、アプリケーション呼び出しプロセッサ１２６はグレーンのアドレスがラップアラウンドするかどうかをテストする。もしそうならば、アプリケーション呼び出しプロセッサ１２６は、グレーンからのデータを出力するようにバッファメモリのアドレス指定を行い、アプリケーション呼び出しプロセッサ１２６は、追加領域のアドレスからのアドレスを使用して、バッファメモリ１２０のグレーンからのデータを格納するようにメモリ１８のアドレス指定を行う。アプリケーション呼び出しプロセッサ１２６は、戻りポインタマルチプレクサ１２８が、追加領域のアドレスかＦＩＦＯ出力ポインタレジスタ１２２からの開始アドレスかのいずれかを出力するように制御する。最後に、アプリケーション呼び出しプロセッサ１２６は呼び出しに応答する。
【００３７】
呼び出しが応答されているときには、ＦＩＦＯ出力アドレスマルチプレクサ１２９は、第２の処理要素に、バッファメモリ１２０からデータを読み取ることを許可する。第２の処理要素１０は、戻りポインタマルチプレクサ１２８から受信した開始アドレスを読み取り、それにより返されるポインタに従って、グレーン内のデータのアドレス指定を行う。
【００３８】
図４はポインタ間の選択を明示的にする模範的な実施形態を示しているに過ぎないことが理解されよう。正しいポインタを第２のプロセス４に供給するために多数の代替手段が存在する。例えば、ポインタの代わりに、２つのロケーションのどちらから当該ポインタが読み取られなければならないかを示すフラグ信号が供給されるようにしてもよいし、又は、要求されたポインタが、アプリケーション呼び出しプロセッサ１２６内で内部的に生成されると共に、マルチプレクサ１２８によって選択されたレジスタ内にそれを保持しておく代わりに、返答としてそこから供給されるようにしてもよい。レジスタおよびマルチプレクサ１２８の代わりに、アプリケーション呼び出しプロセッサ１２６の制御のもとに適切なポインタ情報が書き込まれるメモリロケーションが使用されるようにしてもよい。ソフトウェア実施態様に関連して述べられているように、処理要素１６は個々の呼び出しにメモリ１８内の追加領域のアドレスを提供する必要はない。その代わり、任意の数の呼び出し中に後の使用のためにレジスタ１２７内にアドレスを格納すべく、アドレスは別個のトランザクション内に提供されるようにしてもよい。さらには、追加領域は、ＦＩＦＯバッファメモリ１２０を含むより大きいメモリの一部であってもよい。メモリ１８およびバッファメモリ１２０は実際には、同一のより大きいメモリの一部であってもよい。
【００３９】
グレーン内部のアドレスがラップアラウンドされるときには補助メモリ内に書き込み、且つ、アドレスがラップアラウンドされないときにはＦＩＦＯバッファ内に直接書き込むように生成プロセスが作成される事になるように、ＦＩＦＯバッファへの書き込みは同様に補助メモリを利用してもよいことが理解されよう。この場合、生成プロセスは最初に、グレーンからのデータの書き込みのためのポインタを受け取るために、アプリケーションプログラムインターフェイス呼び出しを作成する。当該呼び出しは、補助メモリポインタを引数として備えている。当該呼び出しに応答して、アプリケーションプログラムインターフェイスは、ＦＩＦＯメモリ内のグレーンのための空間を予約する。当該呼び出しへの返答として、アプリケーションプログラムインターフェイスは、引数として受け取ったポインタ、またはグレーンのアドレスがＦＩＦＯメモリ内でラップアラウンドするかどうかに応じて選択されたＦＩＦＯメモリ内へのポインタを返す。生成プロセスはそして、グレーンのデータを、その返されたポインタが指し示すメモリ内に書き込む。グレーンの完了が信号で伝えられると、アプリケーションプログラムインターフェイスは、もしＦＩＦＯバッファ内のアドレスがラップアラウンドするならば、補助メモリ領域からそのデータをコピーする。
【００４０】
これは、ＦＩＦＯバッファの生成側のオーバヘッドを軽減する。しかしながら、データが一般に１回だけ書き込まれてより頻繁に読み取られるとき、またはすべてのデータが消費プロセスによって読み取られる必要はないときには、この軽減は消費側の場合ほど有意ではない可能性があることが理解されよう。したがって、有意な改善は、本発明が出力側のみに適用されるときには、本発明を入力側に適用するために必要とされるオーバヘッドなしですでに達成されている。
【００４１】
いずれにせよ、ＦＩＦＯバッファのサイズが消費側のグレーンサイズの整数倍であるときには、入力に対してのそのような改良は必要ない。同様に、アプリケーションインターフェイスが、書き込み時にグレーンの終端がバッファメモリの終端と確実に一致するように、ＦＩＦＯバッファのサイズを一時的に減少又は増加させるときには、そのような改良は必要ない。
【００４２】
本発明については、連続するグレーンの増加アドレスと共に説明してきたが、代わりに減少アドレスを使用してもよいことが理解されよう。この場合、グレーンがＦＩＦＯバッファの最下位アドレスに到達すると、補助メモリ領域が使用される。同様に、バスはプロセスを実行するプロセッサと補助メモリとＦＩＦＯバッファとの間の通信構造として示されているが、バスアドレスの代わりにネットワークアドレスが使用されることになるように、これらの要素の一部または全部の間での通信のために、例えばネットワークのような他のタイプの通信構造を使用してもよいことを理解されたい。
【００４３】
従来の方法においては、Ｅｃｌｉｐｓｅについて説明されているように、信号処理タスクの設計の際に、例えば高水準言語プログラム（例えばＣプログラムコード）を使用して多くのプロセスが指定される。データストリームはプロセス間で通信されると共に、プロセスはデータストリームを並行して生成および消費するように設計される。プロセス間の通信および同期化は、ＦＩＦＯバッファへのインターフェイスを取るためのインターフェイス関数の呼び出しによって実現される。
【００４４】
図５は、プログラムをコンパイルするマシンを示している。当該マシンは、プロセッサ５０、プログラムを入力するための入力装置５２、関数の複数のライブラリ５４ａ乃至ｃを格納する記憶装置５４、およびターゲットプログラミングユニット５６を含んでいる。ライブラリ５４ａ乃至ｃの各々は、上述のＲｅａｄ関数のようなインターフェイス関数を実行するための実装命令を含んでおり、ライブラリの各々はターゲットマシンのそれぞれのタイプに対応している。１つの実施態様では例えば、ライブラリ関数は、生成および消費プロセスとＦＩＦＯバッファの両方のための単一のメモリを使用するソフトウェア実装をサポートするが、別のライブラリでは、当該関数は、ＦＩＦＯバッファリングのハードウェア実装および／または異なるプロセッサ間でのＦＩＦＯバッファデータの通信をサポートする。
【００４５】
稼動中、第１のステップにおいて、プロセッサ５０は、入力装置５２からプログラムを読み取る（当該プログラムは中間で（例えば記憶装置５４内に）格納されるようになっていてもよい）。当該プログラムは、ライブラリ関数への呼び出しとして、ＦＩＦＯバッファからのデータにアクセスするための呼び出しであって、当該プログラム内の後続の命令が直接ＦＩＦＯバッファから又はＦＩＦＯバッファに又は追加バッファ（好ましくは、当該プログラム内の命令により指定された追加バッファ内）から又は追加バッファに読み取りまたは書き込みを行うかどうか、を制御するために当該呼び出しの結果を利用するための呼び出しを含んでいる。
【００４６】
第２のステップにおいて、プロセッサ５０は、プログラムを解析し、プログラムを実装するために実行される必要のある命令を含むオブジェクトコードを生成する。第２のステップにおいて、プロセッサ５０はさらに、プログラムが先述の「Ｒｅａｄ」関数のタイプのライブラリ関数とインターフェイスを取るための呼び出しを含むかどうかを判別する。第３のステップにおいて、プロセッサ５０は、ライブラリ５４ａ乃至ｃの内のどれを使用すべきかを判別するが、これは例えば、ターゲットマシンのタイプを示すリンキングオプションのように信号に依存して行われる。第３のステップにおいて、プロセッサ５０は、オブジェクトコード内のＲｅａｄ関数の呼び出しによって、Ｒｅａｄ関数を実装する選択されたライブラリからの命令が実行される事になるように、オブジェクトコードを、インターフェイスライブラリ５４ａ乃至ｃの内の選択された１のライブラリからの命令とリンクさせる。第４のステップ５４において、プロセッサ１０は、そのリンクされたコードをターゲットプログラミングユニット５６に送信するが、ターゲットプログラミングユニット５６は例えば、そのリンクされたコードを実行のためにターゲットプロセッサ内にロードする（または、プログラムを実行するようにプログラムされた集積回路の製品のコード制御部分を使用する）。同じプログラムが異なるタイプのマシンにリンクされ得る事になるように、好ましくは様々なライブラリがＲｅａｄ関数の様々な実施態様と共に提供されるが、もしプロセッサ１０が１つのタイプのターゲットマシン上のみで実行するためのものとなっているならば、１つのライブラリで十分であることが理解されよう。
【００４７】
各ステップは、使用物がインターフェイス関数の新規な１のライブラリ又は複数のライブラリからなる点を除いては従来型であり、インタフェイス関数には、ＦＩＦＯバッファにアクセスするためのライブラリＲｅａｄ関数が含まれており、Ｒｅａｄ関数は、プログラムに対して生成された命令が直接ＦＩＦＯバッファメモリから又はＦＩＦＯバッファメモリに又は追加バッファ（好ましくは、当該プログラム内の命令により指定された追加バッファ内）から又は追加バッファメモリに読み取りまたは書き込みを行うべきかどうか、を示す指示をＦＩＦＯバッファに返す、ことが理解されよう。また、この関数は必ずしも第３のステップ内にリンクされる必要がないことが理解されよう。代わりに、実行時にサポートされるシステム関数の呼び出しが使用されるようにしてもよいし、又はＦＩＦＯバッファリング用のハードウェアに命じる指示が当該呼び出しの結果として含まれるようにしてもよい。
【００４８】
本発明によれば、インターフェイス関数は、読み取りのためのバッファの選択を返すＲｅａｄ関数を含んでおり、当該選択は、ＦＩＦＯバッファメモリが直接使用されるべきか補助メモリ領域が使用されるべきかのいずれかを示している。次に、タスク指定は、Ｅｃｌｉｐｓｅについて説明されたように、説明されたようなアーキテクチャ又はその等価物内にＲｅａｄコマンドが実装される場合を除き、ハードウェアの製品および／または当該指定を実装するためのマシン命令のプログラムを制御するために使用される。実施態様のタイプに応じて、そして特にプロセスのハードウェア分散の選択に応じて、Ｒｅａｄ関数の実施態様は選択される。
【図面の簡単な説明】
【００４９】
【図１】データ処理の機構構成を示す。
【図２】データ処理装置を示す。
【図３】インターフェイスプログラムのフローチャートを示す。
【図４】ＦＩＦＯバッファを備えるデータ処理装置を示す。
【図５】コンパイル処理のフローチャートを示す。
【図１】
2006523884.tif 000003
【図２】
2006523884.tif 000004
【図３】
2006523884.tif 000005
【図４】
2006523884.tif 000006
【図５】
2006523884.tif 000007
【国際調査報告】
2006523884.tif 000008
2006523884.tif 000009
2006523884.tif 000010