説明

データ処理装置、データ処理方法およびプログラム

【課題】 リングバス上のデータを動作基準信号(クロック)毎に次のモジュールに転送しながらリングバス上を周回させ、単一あるいは複数のモジュールで単一あるいは複数ストリーム処理を行うシステムにおいて、特定の処理モジュールにおけるリングバスの占有率を考慮していなかった。
【解決手段】 各処理モジュールの処理コアから出力したデータを格納しているパケットで、出力した処理モジュール以外の処理モジュールに処理されていない可能性のあるパケットの個数を推定し、この推定に基づいて処理コアからの出力を制御する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は複数の処理モジュールによって一連の処理を行うデータ処理装置、データ処理方法およびプログラムに関する。
【背景技術】
【0002】
従来、複数のプロセッサで画像処理を並列に処理するため、データに制御コードを付けてリングバスに送出し、制御コードに従ってデータの取り込むことでオーバーラップしているデータを複数のプロセッサで受信する方法がある(特許文献1)。
【0003】
各プロセッサによる処理の順番の変更を可能にし、バス競合による処理速度の低下を少なくするため、複数画像処理手段と(入出力)制御手段をリング状に接続し、データをパケット化して該リング状に接続したバス上を単方向に転送する方法もある(特許文献2)。
【0004】
また、処理要素をリングバスで結合し、それぞれの処理要素がクロック信号、タイプ・フィールド信号および情報フィールド信号を一方向に送り、情報準備信号およびビジー信号を逆方向に送ることで通信帯域幅を確保している方法もある。(特許文献3)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開昭63−247858号公報
【特許文献2】特許第03907471号公報
【特許文献3】特許第03880724号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、特許文献1−3の方法では、他の処理モジュールによってリングバスが占有されてしまう状況に陥りやすい。この状況になってしまうと、処理モジュールからリングバス上にデータを出力できる場所(以下、空きスロットと記す)がなくなり、データ転送効率が落ちてしまう。特に、画像を拡大する処理のように、1画素の入力から複数の画素を出力するようなモジュールの1つがリングバス上の空きスロットを一度に使い果たしてしまうと、他の処理モジュールがリングバス上にデータを出力できなくなることもある。こうなるとデータ転送ができなくなる状態(デッドロック)が発生してしまう。
【0007】
そこで、リングバス上のデータ量の管理を行って資源(スロット)を有効活用し、処理の高速化、およびデッドロックの発生を抑制する装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
この課題を解決するために本発明のデータ処理装置は、リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置であって、前記処理モジュールの少なくとも1つは、他の処理モジュールと通信可能に接続されている記憶手段と、前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、前記処理手段の出力したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段とを有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、複数の処理モジュールについて、ある処理モジュールの処理したデータが複数の処理モジュールにどれくらい残っているかを推定して、その推定に基づいてこの処理モジュールの出力を調節できる。従って、複数の処理モジュール全体(リングバス)における、自身のモジュールの占有率を推定することができ、スロットの有効利用及びリングバスのデッドロック発生の抑制をすることができる。
【図面の簡単な説明】
【0010】
【図1】画像処理装置の全体構成を示すブロック図である。
【図2】画像処理部の回路構成を示すブロック図である。
【図3】リングバス制御の動作を示す図である。
【図4】パケットのフォーマットと出力制御部の挙動を示す図である。
【図5】画像処理モジュールA210の他の構成を示すブロック図である。
【発明を実施するための形態】
【0011】
<実施例1>
本発明の一形態である実施例1の画像処理装置の構成について図1のブロック図を参照して説明する。
【0012】
画像読取部120は、CCDセンサ124、アナログ信号処理部126等を有し、レンズ122を介しCCDセンサ124に結像された原稿100の画像を、CCDセンサ124によりR(Red),G(Green),B(Blue)のアナログ信号に変換する。変換された画像情報は、アナログ信号処理部126に入力され、R,G,Bの色毎に補正等が行われた後にアナログ・デジタル変換(A/D変換)される。デジタル化されたフルカラー信号(以下、多値デジタル画像信号という)は、画像処理部130に入力される。画像処理部130はデジタル画像信号に対し、入力補正処理、空間フィルタ処理、色空間変換、濃度補正処理、中間調処理を施し、画像出力部140へ処理後のデジタル画像信号を出力する。画像出力部140は、たとえば、インクジェットヘッドやサーマルヘッド等を使用した印刷出力部(図示せず)を有し、入力されたデジタル画像信号により紙上に画像を記録する。
【0013】
また、システム制御部110は、演算制御用のCPU112、固定データやプログラムを格納するROM114、データの一時保存やプログラムのロードに使用されるRAM116等を有する。そして、画像読取部120、画像処理部130、画像出力部140等を制御し、本装置のシーケンスを統括的に制御する。外部記憶装置118は、本装置が使用するパラメータやプログラムを記憶する媒体であり、RAM116はデータやプログラム等を、ROM114や外部記憶装置118からロードできる構成となっている。
【0014】
図2は、本実施例の画像処理部130の回路構成を示すブロック図である。アナログ信号処理部126から送られるデジタル画像信号はバス205を経由して画像処理コントローラ200に入力される。さらに、画像処理コントローラ200がデータを処理し、処理したデータを、バス295を経由して画像出力部140へ出力する。
【0015】
画像処理コントローラ200は1段以上のバッファと画像処理コアを持つ画像処理モジュールA(210)〜H(280)を有している。バッファA211の出力がバッファB221(他の処理モジュール)の入力に接続され、同様にバッファB〜Hの間とバッファH〜バッファAの間も接続されることで、各画像処理モジュールはリング状に接続されている。各画像処理モジュール210〜280はバスからの入力を画像処理コアとバッファの夫々で受信する。また、画像処理コア212〜282は処理したデータをバッファに出力し、バッファ211〜281はリングバスからの入力と画像処理コアからの出力を状況に応じて選択的に受信する。
【0016】
図に示す、モジュールAとモジュールHは処理によってデータ数を増加させるモジュール(受け取るデータ数<出力するデータ数)であり、それぞれ管理レジスタA213、管理レジスタH263を有している。管理レジスタA213と管理レジスタF263はシフトレジスタであって、リングバスを構成するバッファの総段数と等しい8ビットのビット数を有する。ここでは説明を簡単にするために各モジュールのバッファ段数は1段、リングバスを構成するモジュール数はAからHの8個、管理レジスタのビット数は8ビットとしているが、必要に応じてこれらの構成数は変更できる。但し、管理レジスタのビット数をリングバスに接続されるバッファ総段数と一致させる必要がある。
【0017】
図4(a)は本実施例の画像処理部で用いるパケットの構成を示す。図中、フィールド401はパケットが有効であることを示す有効フラグ(validフラグ、 “1”で有効 “0”で無効)を格納する。また、フィールド402はパケットの格納するデータがある処理モジュールで処理を保留されたことを示す保留フラグ(stallフラグ、“1”で保留状態にあり、“0”で保留状態にはないとする)を格納する。フィールド403はパケットが格納しているデータを送信元(最も直前にデータに処理を加えたモジュールに相当する)を示す送信元ID(識別信号)を格納する。フィールド404はデータの送信順(1つのモジュールに着目した場合には処理順に相当する)を示すカウント値を格納し、フィールド405は送信するデータを格納する。
【0018】
以下、画像処理モジュールA210に着目しリングバスとバッファの動作を説明する。リングバスに画像処理コアAの処理したデータを出力する際は、まずバッファA211に入力される入力パケットのvalidフラグ401を画像処理コアAが監視し、validフラグ401が“0”の無効パケット(空スロット)が格納されているスロットを探す。入力パケットのvalidフラグ401が有効を示す“1”の場合、画像処理コアAはバッファA211に入力される入力パケットを、次のクロックで画像処理モジュールB220にそのまま出力するように制御する。ここで、スロットとは一定時間幅(サイクルタイム)で区切られたリングバスの状態を示し、パケットはスロットに載せる(入出力する)データを示す。従って、1つのスロットには1つのパケット(無効パケットを含む)が存在する。
【0019】
一方、入力パケットのvalidフラグ401が無効を示す“0”(以降、0:無効、の様に表記する)の場合(空スロット)、バッファA211に格納されるパケットの、validフラグ401を“1:有効”に変更し、stallフラグ402を“0:無効”に変更する。更に、画像処理モジュールAのモジュールID(送信元ID)と、出力カウンタ(不図示)の値と、画像処理コアAの処理したデータとをバッファA211に格納しパケットを生成する。このように、空スロットにパケットを格納する際、バッファAのパケットの値を変更したりデータを上書きしたりしてもよいし、画像処理コアAからのデータと各フィールド値とを有するパケットを生成してパケット単位で上書きしてもよい。なお、画像処理モジュールAの処理したデータを格納するパケットは、次のクロックで画像処理モジュールB220に出力するように出力制御A214が制御する。この際に、出力カウンタをインクリメントして、次に処理するデータの識別に用いる。
【0020】
次に画像処理モジュールHを例に挙げてデータ受信側の挙動を説明する。画像処理コアHは、バッファH281に入力される入力パケットのvalidフラグ401、送信元ID403、カウント値404を監視する。そして、validフラグ401が“1:有効”で、送信元ID403が予め画像処理モジュールHの入力ID設定レジスタ(不図示)に設定されている入力IDと一致し、カウント値404が入力カウンタ値と一致するパケットであるか判定する。これらの条件を満たすパケットは、画像処理モジュールHが次に処理すべきデータを格納するパケットである。
【0021】
そして、処理すべきパケットを検出し、画像処理コアがデータを受信可能であるなら、入力パケットからデータを取り込む。データを取り込んだパケットは無効化して空パケットとするために、画像処理コアAがvalidフラグをクリア(“0:無効”に変更)してバッファHからバスへ送信させる。また、画像処理コアHがパケットを取り込み、validフラグ401を無効にして次のバッファへ出力してもよい。なお、データをパケットから取り込む際には、入力カウンタ(不図示)をインクリメントし、入力カウンタ値を更新する。
【0022】
一方、画像処理コアがデータを受信不可能であるなら、画像処理コアHは入力パケットのstallフラグ402を“1:有効”に変更し(即ち、データの取り込みを保留)次のバッファへ出力する。なお、入力カウンタと出力カウンタは、同期を取るため、データ転送開始前に同じ値に初期化される。
【0023】
次に本実施例で使用する、出力データ管理方法について図3を用いて説明する。図3はA⇒Hの順番でパイプライン処理をする場合について、状態(a)〜(h)におけるリングバスのバッファA〜Hと管理レジスタA(BIT0〜7の8段のレジスタ)の格納する情報を示している。
【0024】
図3(a)に示すように初期状態ではバッファ及び管理レジスタ、入力カウンタ、出力カウンタをクリアする。
【0025】
図3(b)は、画像処理モジュールA210に外部入力I/F205よりデータが入力され画像処理コアA212にて処理が実行された状態を示す。この時、画像処理モジュールA210の画像処理コアA212はバッファA211へパケット301を出力する。これによってバッファAにパケット301がセットされる。同時に、管理レジスタA213は、最上位ビット(BIT:7)に1をセットする。
【0026】
図3(c)は、図3(b)の状態から次のクロック(又は次のサイクルタイム、以下同様)が入った状態を示す。図に示すように、バッファA211のパケット301はバッファBに移動し、管理レジスタA213はパケット301に対応するビットを右に1ビットだけシフトする(BIT7のビットをBIT6に移動させる)。また、画像処理コアA212は次の出力データを出力し、パケット302がバッファAにセットされる。ここで、管理レジスタA213はパケット302に対応するように、最上位ビットに1をセットする。なお、ここでは説明の簡略のため、画像処理モジュールA210が出力する出力パケットは、リングバス上に同時に2つまで存在するように制限するものとする。
【0027】
図3(d)は、図3(c)の状態から次のクロックが入った状態を示す。クロックに応じて、パケット302とパケット301はそれぞれバッファB221およびバッファC231(不図示)に移動する。また、クロックに応じて、管理レジスタA213は管理するビットをリングバスのデータ転送方向と同じ方向に1ビットずつシフトさせる。ここで、画像処理コアA212からの次のパケットの入力が無かったので(前述の制限によって出力されない場合も同様)、バッファA211にはバッファHから移動してきた無効パケットをセットし、管理レジスタA213の最上位ビットを0とする。
【0028】
以下同様に処理を繰り返して図3(d)の状態から4クロック後の状態を図3(e)に示す。図3(d)の状態で、バッファBとバッファCにあったパケット302とパケット301は、バッファFとバッファGに移動する。さらに、管理レジスタA213はパケット302とパケット301に対応するように、ビット2およびビット1にそれぞれ1がセットされた状態となる。
【0029】
図3(f)は、図3(e)の状態から次のクロックが入った状態を示す。パケット301はバッファHに送られて、画像処理モジュールH280の画像処理コアH282に取り込まれる。ここで、データ取り込まれた際にバッファH281のパケットを無効パケット(入力パケットのvalidフラグ401を“0:無効”としたもの)にする。同時に、バッファF(不図示)のパケット302はバッファGに移動している。また、管理レジスタA213はBIT0〜7に格納している値をリングバスのデータ転送方向と同じ方向に1ビットシフトさせる。これにより管理レジスタAのBIT1とBIT0にそれぞれ1がセットされた状態となっている。ここで管理レジスタAのBIT0〜BIT7の “1”という情報は、画像処理コアAが出力したパケットのリングバス上の位置を示している。この“1”の個数の合計は画像処理コアAの出力したパケットで画像処理モジュールB〜Hに処理されずに残っている可能性のあるパケットの推定値となる。実際は他の処理モジュールがパケットを受信して処理しているため、消滅している場合もあるが、BIT0〜BIT7の“1”の数は、実際に画像処理モジュールA〜H(又はリングバス)に処理されずに残っているパケットの総数(真値)を越えない。
【0030】
このとき、管理レジスタA213のBIT0は“1”を格納している。バッファA211はパケット301を格納したスロットが次のクロックでバッファAに戻ってくる事を検知できる。よって、BIT0が“1”の場合は次のクロックが入ったときにバッファA211に入力されるパケットを調べることで、モジュールA210の出力したパケットに格納したデータが他のモジュールに受信されたかどうかを検出できる。例えば管理レジスタA213のBIT7に対応するパケットが無効パケットとなっている場合や、パケットの送信元ID403が自身の出力したデータに格納されるべきIDと異なる場合は、他のモジュールにてパケットの格納するデータが正常に取り込まれたと判断できる。
【0031】
図3(g)は図3(f)の状態から次のクロックが入った状態を示す。
【0032】
前述したように、入力されるパケットを調べてモジュールA210のパケットに格納するデータが他のモジュールに取り込まれたかどうかを判定する。この例では、画像処理モジュールH280にてパケットが取り込まれバッファH281からバッファA211に格納されるパケットは無効パケットとなっているので、パケット301のデータは他のモジュールに取り込まれたと判断できる。即ち、リングバス上のデータ数が1つであることが分かる。
【0033】
また、画像処理コアA212がデータ出力待ちである場合、バッファA211には次の出力パケット303が格納される。そして、バッファH281にはバッファG271のパケット302が移動する。さらに、管理レジスタA213は格納している値を1ビットシフトさせて、最上位ビット(BIT7)と最下位ビット(BIT0)に1をセットする。なお、ここでは画像処理モジュールH280は、受信したパケット302を処理できない状態(又は、取り込みをしない状態)にあるものとしてパケット302のstallフラグ402をセットする(即ち、データの取り込みを保留した状態)。一方で、画像処理コアA212がデータ出力待ちでない場合は管理レジスタのBIT7に“0”を格納することで、処理されていないパケットに対応するビットをリセットする。
【0034】
また、管理レジスタA213の最下位ビットに“1”が格納されているので、次のクロックで再びモジュールA210が出力したパケットを格納するスロットがバッファAに戻ってくることが判る。
【0035】
図3(h)は図3(g)の状態から次のクロックが入った状態を示す。ここで、バッファH281でパケット302のstallフラグ402には“1:保留有効”がセットされている為、パケット302のデータは他のモジュールに取り込まれなかったと判断する。そして、パケット302はそのままバッファA211に移動し、管理レジスタA213は格納している値を1ビットシフトさせ、BIT7とBIT6に1が格納された状態となる。
【0036】
以降、このパケット302は画像処理モジュールH280の画像処理コアH282に取り込まれるまでリングバスを周回する。
【0037】
そして、パケット302が画像処理コアH282に取り込まれると、次のクロックで、バッファAの格納するパケットのvalidフラグ401が“0:無効”、または、このパケットの送信元ID403がバッファAの出力するデータに格納されるIDと異なることになる。この時、管理レジスタA213の最下位ビットが1になっているので、これらによってモジュールAは、パケット302の格納するデータが他のモジュールに取り込まれたことを検知できる。よって、リングバスに出力したデータは正常に受信されたと判定できるので、以降、モジュールAは空スロットにデータを出力できる。
【0038】
次に図4(b)を用いて出力制御部の動作を説明する。以下、画像処理モジュールA210を例に説明すると、図4(b)は管理レジスタA213の最下位ビットが1の場合に、次のクロックでバッファAに入力されるパケットの各フィールドの値と、それに応じた出力制御部Aの挙動を示すものとなる。
【0039】
まず、管理レジスタA213(例えば、BIT0〜7)の“1”が格納されている個数が設定値未満の場合、画像処理モジュールA210は空スロットにバケットを出力できる。一方、管理レジスタA213上で“1”が格納されている数が設定値の場合、自身がパケットを出力したスロットが空スロットとなっているか、または、他の画像処理モジュールによってパケットが上書きされている場合のみ、データ出力が可能である。ここで、設定値は、画像処理モジュールAの出力するパケットがリングバスに同時に存在できる最大数であって、予め管理レジスタを有する各モジュールのレジスタ(不図示)に設定される。
【0040】
画像処理モジュールA210は、自身が出力したパケットが取り込まれるタイミングは受け取る画像処理モジュールの状態によるため、通常は知ることはできない。しかしなから、管理レジスタAを参照すると画像処理モジュールAがパケットを出力したスロットがバッファAに戻ってくるタイミングが判定でき、そのスロットに画像処理モジュールAの出力したパケットがなければ、パケットが受信されたことが推定できる。
【0041】
つまり、管理レジスタA213の最下位ビットが1の時は、次のクロックで自身がパケットを出力したスロットがリングバス上を一周してきたことになる。従って、このときの入力パケットのvalidフラグ401が無効である(受信され、空スロットとなっている)か、送信元ID403が自身のIDでないならば、パケットが受信され、リングバス上から消滅していることが推定できる。
【0042】
図4(b)では、Vの項はvalidフラグ401を、Sの項はstallフラグ402を、IDの項は送信元ID403の値を示す。各フラグの定義は図4(a)で説明したとおりである。
【0043】
バッファAに入力されるパケットのvalidフラグ401が0なら、パケットの格納するデータは他のモジュールに受信され空スロットとなっているので、正常受信と判定し、この空スロットに画像処理コアA212のデータを格納して送信可能であると判断する。
【0044】
また、validフラグ401が1であっても、送信元ID403が自身のIDでないなら、パケットに格納したデータは他のモジュールに受信され、さらに他のモジュールの出力パケットが上書きされたと推定されるので、正常受信と判定し、送信を可能とする。
【0045】
また、validフラグ401が1で、stallフラグが0で、送信元ID403が自身のIDの場合は、パケットを受信するモジュールが見つからずにリングバスを1周してきたことになるので、受信なし(エラー)と判定し、送信を可能とする。なお、validフラグ401が1で、送信元ID403が自身のIDの場合で、該スロットに新たにパケットを出力しない場合は、validフラグ401を無効にし空スロットとする。
【0046】
また、validフラグ401が1で、stallフラグも1なら、他のモジュールが処理をするデータなので、モジュールA210によってこのパケットを上書きすることはでき。よって、送信は不可とする。
【0047】
また、モジュールA210は管理レジスタA213上でビット“1”が格納されている数をカウントすることで、リングバスに存在する自身が出力したデータがそのまま処理されずに存在するパケットの数(最大数)を推定できる。また、このカウントした数が設定値以下になるように制御することにより、リングバス上のスロット占有率の最大値を確実に制御できるため、デットロックを抑制することが可能となる。
【0048】
なお、設定値(自身が出力したパケットがリングバス上に同時に存在できる上限)をリングバスのノード数(モジュールA〜Hの場合8個)以上にするとデッドロック抑制効果は弱い(但し、各モジュールがパケットを1つ保持する条件下で、他にバッファ等を持たない場合)。従って、各モジュールに設定する設定値は少なくともノード数より小さい値であることが好ましい。
【0049】
また、管理レジスタは本実施形態のモジュールA、Hのようなデータ数を増やすモジュール(受け取るデータ数<出力するデータ数)だけに設けることが好ましい。あるいは、モジュールの処理内容を自由に設定でき、設定によってデータ数の増減が変わるモジュールにも設けるとよい。他に例えば、全てのモジュールに管理レジスタを設けて、データ数を増やす処理内容を割り当てたモジュールの管理レジスタだけ動作させ、他はOFFするようにしてもよい。一方で、パイプライン処理の最終段に該当する事が予め設定されているモジュールは、自身の出力したパケットは順次リングバスから出力されるので、管理レジスタを設ける必要はない。
【0050】
また、各モジュールの管理レジスタの設定値の総和をモジュール総数(但し、各モジュールがパケットを1つ保持する条件下で、他にバッファ等を持たない場合のみ)以下にすれば、リングバスの各モジュールの占有率の最大値が100%を越えないので、デッドロックを抑制できる。
【0051】
以上の説明では画像処理モジュールAと管理レジスタAについて説明したが、画像処理モジュールHと管理レジスタHの処理も同様である。
【0052】
以上説明したように、管理レジスタの最下位ビットの値と次のクロックでバッファに入力されるパケットのフラグ及びID情報を確認しながらデータの出力制御を行うことで、リングバスに出力したデータの数(占有率)を制御することが可能となる。
【0053】
本実施例では8番目の画像処理モジュールHが画像処理モジュールAの出力したデータを処理することとしたが、所望の順番で各モジュールに処理をさせたい場合、各モジュールのID設定レジスタを調節することで実現できる。また、画像処理モジュールAの出力したデータを画像処理モジュールB220が処理する場合、画像処理モジュールB220が受信して無効パケットとなったスロットに画像処理モジュールB220自身がそのまま新たなデータを出力することもできる。
【0054】
また、管理レジスタの最下位ビットで“1”を検出して次のクロックで入力されるパケットの情報(validフラグや接続ID)を確認する換わりに、クロックが入ってから最上位ビットの“1”を検出すると同時にパケットの情報を確認するようにしてもよい。
【0055】
また、処理モードに応じて、出力制御部が設定値を変更してもよい。
【0056】
<実施例2>
本実施例は、実施例1で説明した画像処理モジュールの画像処理コアの入出力部にFIFOをつけ、リングバッファの状態によらず、画像処理コア部が滞りなく動作するようにしたものである。
【0057】
図5は実施例2における画像処理モジュールA210の構成を示すブロック図である。図中、実施例1における図2の構成と同じ機能を有するものには同じ符号を付し、詳細な説明は省略する。本実施例では画像処理モジュールは入力FIFO215、出力FIFO216を有する。
【0058】
実施例1の構成では、画像処理コアA212がデータの受信を保留(入力パケットにstallフラグ“1”を設定)すると、次に同じデータが画像処理コアAに供給されるのは、リングバスを1周回ってきた時となる。実施例2では、リングバスを1周回ってくる時間、入力FIFOにデータをためることができる。また、上記入力FIFOをつけた場合、データの受信を保留する(入力パケットにstallフラグ“1”を設定する)のは、入力FIFOの空がなくなった時である。従って、画像処理コアA212の入力データの消費サイクル数をC(Cクロックに1回データを消費)、リングバス上のバッファ数をNとすると、入力FIFOの段数Sが
S≧N/C (式1)
を満たせば保留したデータがリングバスを1周回ってくる間、画像処理コアA212に滞りなくデータを供給することができる。同様に、画像処理モジュールA210の入力パケットが、N/C以上の個数だけ、リングバス上に存在していれば、前記入力FIFOが空になることはない。つまり、(式1)を満たすS段以上のFIFOを持ち、S個以上の入力パケットがリングバス上に存在するように制御すれば、画像処理コアA212に滞りなくデータを供給することができる。
【0059】
一方、出力FIFOにおいては、画像処理コアA212の出力データのサイクルをC’(C’クロックに1回データを出力)、出力FIFOの段数S’は、
S’≧N/C’ (式2)
を満たし、かつ、リングバス上にN/C’以上の個数の空スロットが存在するように制御すれば、画像処理コアA212の出力データを滞りなく出力可能となる。
【0060】
また、入力FIFOや出力FIFOの段数に応じて、リングバス全体のパケットの論理的な総量が変わるため、実施例1で説明した設定値もそれに応じて変えるようにしてもよい。実施例2では、実施例1に比べると各モジュールの設定値をノード総数以下にする必要性は低い。
【0061】
前述の各実施例で説明した画像処理装置は、画像読取部や画像処理部、又は画像出力部をそれぞれ別の装置で実現してもよいし、いずれかまたは全てが一体となった装置で実現しても良い。また、画像読取部はスキャナ装置であってもよいし、デジタルカメラやデジタルビデオカメラなどの撮像装置であってもよい。さらに画像出力部はプリンタなどの印刷装置であってもよいし、ディスプレイモニタなどの表示装置であってもよい。それぞれ別の装置で構成される場合は、互いに通信可能なようにLocal Area Network(LAN)などで接続されている。また、前述の各実施例では画像処理装置を例に説明しているが、本発明は画像処理に限られるものではない、複数の処理モジュールに処理を分割するようなデータ処理装置で、パイプライン処理などの一連の処理を実行させる際に適用すると好ましい効果が得られる。
【0062】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をコンピュータ等の処理装置(CPU、プロセッサ)にて実行することで実現できる。
【0063】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。

【特許請求の範囲】
【請求項1】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置であって、
前記処理モジュールの少なくとも1つは、
他の処理モジュールと通信可能に接続されている記憶手段と、
前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、
前記処理手段の出力したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、
前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段と
を有することを特徴とするデータ処理装置。
【請求項2】
前記管理手段は、前記複数の処理モジュールについてリング状に接続されているバッファの総数と等しいビット数を有するシフトレジスタを有することを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記管理手段の管理する個数は、前記処理手段の処理したデータのうち、前記複数の処理モジュールに処理されずに残っている可能性のあるデータの個数であることを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記処理手段は処理したパケットにデータを格納して記憶手段に出力し、当該パケットはパケットの格納するデータの有効フラグ、保留フラグ、格納しているデータを出力した処理手段の識別信号を格納することを特徴とする請求項1乃至3のいずれか1項に記載のデータ処理装置。
【請求項5】
前記管理手段は前記処理手段が処理したデータを前記記憶手段に出力する際に、出力したデータに対応するビットを設定し、当該ビットの合計を前記個数として、前記出力制御手段は当該個数が設定値以下になるように前記処理手段の出力を制御することを特徴とする請求項1乃至4のいずれか1項に記載のデータ処理装置。
【請求項6】
前記管理手段は、前記処理手段の出力したデータが他のモジュールから前記記憶手段に入力される可能性がある場合に、前記処理手段の出力したデータが他の処理モジュールによって処理されていることを検出すると、前記管理手段の対応するビットをリセットすることを特徴とする請求項5に記載のデータ処理装置。
【請求項7】
前記処理モジュールは、入力FIFO及び出力FIFOを更に有し、前記処理モジュールが入力データを受け取るサイクル数をC、リングバス上のバッファ数をNとしたとき、入力FIFOの段数SをN/C以上とすることを特徴とする請求項1乃至6のいずれか1項に記載のデータ処理装置。
【請求項8】
前記処理モジュールがデータを出力するサイクル数をC’、リングバス上のバッファ数をNとしたとき、前記出力FIFOの段数S’をN/C’以上とする請求項7に記載のデータ処理装置。
【請求項9】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置を制御するプログラムであって、コンピュータを、
他の処理モジュールと通信する記憶手段と、
前記記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理手段と、
前記処理手段の処理したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理手段と、
前記管理手段の管理する個数に応じて、前記処理手段が処理したデータを前記記憶手段に出力することを制御する出力制御手段として機能させることを特徴とするプログラム。
【請求項10】
リング状に接続されている複数の処理モジュールの夫々によってデータを処理するデータ処理装置を制御するデータ処理方法であって、
前記処理モジュールの少なくとも1つについて、
他の処理モジュールと通信する通信工程と、
記憶手段からデータを取り込んで処理し、処理したデータを前記記憶手段に出力する処理工程と、
前記処理工程で処理したデータのうち、前記複数の処理モジュールに処理されずに残っているデータの個数を管理する管理工程と、
前記管理工程で管理する個数に応じて、前記処理工程で処理したデータを前記記憶手段に出力することを制御する出力制御工程と
を有することを特徴とするデータ処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2010−287175(P2010−287175A)
【公開日】平成22年12月24日(2010.12.24)
【国際特許分類】
【出願番号】特願2009−142534(P2009−142534)
【出願日】平成21年6月15日(2009.6.15)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】