リングバスを用いたデータ処理装置、データ処理方法およびプログラム
【課題】 リングバスに接続されたデータ処理装置において、複数のデータ処理ストリームを投入した場合や、処理回路内部でデータ量が増減してしまうケースが存在する際に発生し得る、デッドロックや、リングバスの実効効率の低下を軽減する必要がある。
【解決手段】 リングバスの動作速度を、データ処理にかかる動作速度よりも早くすることにより、リングバスを周回するデータによるデータ出力抑制の機会を減らし、処理効率の低下を抑制する。
【解決手段】 リングバスの動作速度を、データ処理にかかる動作速度よりも早くすることにより、リングバスを周回するデータによるデータ出力抑制の機会を減らし、処理効率の低下を抑制する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はリングバスを用いたデータ処理を行うデータ処理装置、その制御方法およびプログラムに関する。
【背景技術】
【0002】
処理回路を並列に処理させ効率よくデータ処理を行う方法として、処理回路をリング型のバスで接続する方法(特許文献1)が提案されている。また、画像のフィルタ処理を並列処理するため、データに制御コードを添付し、制御コードに従ってデータをプロセッサに取り込むことでオーバーラップするデータを複数のプロセッサで受信できるようにする方法がある(特許文献2)。
【0003】
複数の処理回路の処理順番を簡単に変更できるようにしつつ、バスの競合を低減するため、複数の処理回路と(入出力)制御回路をリング状に接続し、リング状に接続した処理回路上にパケット化したデータを周回させる方法もある(特許文献3)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第2522952号公報
【特許文献2】特開昭63−247858号公報
【特許文献3】特許第3907471号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の方法では、入力端において外部メモリがI/Fなどから入力したデータを、実際に接続された順番で処理回路(以下、モジュール)が処理し、出力端において外部メモリ等へ出力する。そのため、複数のモジュールの処理の順序は、ハードウェアを実装する段階で接続された順序に制限される。ここで、処理回路の順番を任意に入れ替えようとすると、複雑な構成が必要とし回路規模を増大させたり、複雑な処理が増えて処理性能の著しい低下をもたらしたりする。
【0006】
特許文献2、3の方法では、ある処理モジュールによってリングバス上のパケットが占有されてしまうと、データ転送効率が落ちてしまうことがある。例えば、他の処理モジュールがリングバス上にデータを出力できなくなってデッドロックが発生してしまうこともある。
【0007】
本発明はリングバス上の複数のモジュールが順番に処理を行うシステムにおいて、処理を効率化できるデータ処理装置、データ処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を達成するために、本発明に係る情報処理装置は、処理手段を有する複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段とを有することを特徴とする。
【発明の効果】
【0009】
本発明により、各モジュールが処理済のデータをリングバス上に放出できなくなる可能性を低減し、画像処理装置の処理性能が低下することを抑制することが可能となる。
【図面の簡単な説明】
【0010】
【図1】バスに接続するモジュールの概略構成を示すブロック図である。
【図2】パケットのフォーマットを示す図である。
【図3】リングバスを有するデータ処理部の概略構成を示すブロック図である。
【図4】データ処理装置の概略構成を示すブロック図である。
【図5】モジュール毎に2つのバッファを備えているデータ処理装置の概略構成を示す図である。
【図6】通信部の動作速度を処理部の2倍に設定した場合の各通信部をパケットが流れる挙動を示す図である。
【図7】データ処理部の起動処理を示すフローチャートである。
【図8】モジュール外にデータ保持部を設ける場合のモジュールの構成を示すブロック図である。
【図9】通信部と処理部の間にFIFOを設けた場合のモジュールの構成を示すブロック図である。
【図10】通信部と処理部の間にFIFOを設けたモジュールを有するデータ処理装置の概略構成を示すブロック図である。
【発明を実施するための形態】
【0011】
<実施例1>
図1は、本発明の一実施例であるデータ処理装置の有する処理モジュール(以下、モジュール)の概略構成を示す図である。モジュール100は、バス110によってリング状に接続されているモジュールの1つである。ここで、リングバスとはバスと複数のノード(モジュール)によって形成されるリング状のネットワーク(データが流れる経路)を示すものであり、以下の説明ではモジュール間を円環状に接続するバスはリングバスと区別して単純にバスと称する。通信部120は、モジュール間におけるデータの送受信を行ったり、処理部130とデータを送受信したりする。また、クロックが入る度に移動するパケットを一時的に保持する役割も有する。
【0012】
受信部121は、バス110から受信するデータパケットのうち、処理部130で処理すべきデータパケットを識別して受信し、パケットからデータを抽出し処理部130に転送する。処理部130は、受信部121から転送されるデータを処理する。送信部122は、処理部130において処理済みのデータ、または、通信部120において後述する保留情報等をパケットに格納し、更にセレクタ123へ出力する。
【0013】
セレクタ123は、バス110より入力されたままのパケット又は送信部122で加工されたパケットのいずれかを選択して出力する。ここで、セレクタ123の制御は送信部122が行う。バッファ124は、セレクタ124の出力を単位時間だけ一時的に保持する。
【0014】
また、各モジュールがリングバスの上流から取得するパケットを下流に流すように制御することで、リングバスのリング上では一方向にだけパケットが巡回することになる。
【0015】
図2にはリングバスを流れるパケット200のデータ構成を示す図である。
validフラグ201はパケットが有効なデータを格納していることを示す。stallフラグ202(保留情報)はパケットが処理すべきモジュールによって受信されず保留された状態(保留状態)にあることを示す。ID203はデータの送信元(又は最後に処理したモジュール)を示すIDであり、カウント204はデータの送信順を示すカウント値でモジュールが処理すべきデータの順番を確認するのに用いる。また、データ205は各モジュールで処理するべきデータ、もしくは処理したデータを格納する。従ってモジュール100は各モジュール固有のIDと処理すべきパケットを識別するためのID(以下、待ち受けIDと称す)とを格納するレジスタと、一連のデータのどこまで処理したかを示す値(入力・出力カウント値)をカウントするカウンタとを有している。
【0016】
以下、モジュール100の動作を説明する。モジュール100の処理したデータをバスに出力する場合、送信部122はバスからモジュールが受信した入力パケットのvalidフラグ201を検出し、無効パケット(空きパケット)を探す。ここで、入力パケットのvalidフラグ201が有効を示す場合、そのままバッファ124に入力パケットを格納し、次のクロックでパケットをバスに出力する。
【0017】
一方、入力パケットのvalidフラグ201が無効を示す場合でかつ、処理部130が処理済みで出力可能なデータがある場合、送信部122は空パケットに処理済みのデータを格納する。詳細には、送信部122は空パケットに処理済のデータを格納し、validフラグ201に有効を示す値に設定し、stallフラグ202に無効を示す値を設定し、自分のモジュールID(送信元ID)、出力カウンタ(不図示)の値を付加する。そして、次のクロックでこのパケットをバスに出力する。このとき、出力カウンタをインクリメントして次に処理すべきパケットの識別処理に用いる。
【0018】
バス110からモジュール100がパケットを受信する場合、受信部121は入力パケットのvalidフラグ201、送信元ID203、カウント値204を監視する。そして受信部121が、validフラグ201が有効で、送信元ID203がレジスタに設定されている待ち受けIDと一致し、カウント値204が入力カウンタ値と一致するパケットが入力されたと判定した場合、データの取り込み処理をする。詳細には、受信部121は処理部130がデータを受信可能である事を確認し、入力パケットのデータを処理部130に取り込む。入力パケットは、validフラグ201を無効にして次の送信部122からバッファ124を通ってバスへ出力される。このとき、入力カウンタ(不図示)をインクリメントし、入力カウンタ値を更新する。
【0019】
この場合、モジュール内の処理部130がデータを受信不可能であるなら、入力パケットのstallフラグ202に有効を示す値に設定し(即ち、データの取り込みを保留)、他のフィールドは変更せずにバッファ124へ出力する。なお、入力カウンタと出力カウンタは、同期を取るため、データ転送開始前に同じ値に初期化される。
【0020】
一方で、受信部121が入力パケットを監視して、validフラグ201が無効、送信元ID203がレジスタの待ち受けIDと一致しない、カウント値204が入力カウンタ値と一致しない等の条件の1つに相当するパケットは下流側のバスへ通過させる。
【0021】
以上のように、モジュール固有のIDと待ち受けIDとを設定することで、複数の処理モジュールに簡易な構成によって所望の順番でデータを処理させることができる。
【0022】
図3は、モジュールA〜D(310,320,330,340)を数珠繋ぎに接続しているリングバス300を有している画像処理部の概略構成を示す図である。
【0023】
モジュール310は、画像処理部の外部のデータバスとの接続をする外部入力360を介して外部からのデータを入力し、処理が終了したデータを外部出力350によって外部に出力する機能を持つターミナルモジュールである。モジュール320、330、340は、リングバス300に接続され固定的な処理を割り当てられている処理モジュールである。
【0024】
これらのモジュール310,320,330,340のそれぞれには、リングバスに接続されデータの送受信を行う通信部311,321,331,341と、個別の処理を行う処理部312,322,332,342が備えられている。
【0025】
これらの処理部は、モジュールごとに異なる処理を行ってもよいし、またいくつかのモジュールで同じ処理を複数回行ってもよい。また、図3には4つのモジュールを有する画像処理部を例示しているが、リングバスに接続されるモジュールの数には制約はなく、固定的な処理を割り当てられているモジュールが2つ以上接続されていればよい。
【0026】
図4は、本発明の画像処理部(データ処理部)を配置するシステムの構成例を示す。システム制御部400は、演算制御用のCPU401、固定データやプログラムを格納するROM402、データの一時保存やプログラムのロードに使用されるRAM403および外部データを保持する外部記憶装置404を有するシステム制御部である。
【0027】
データ入力部410は、処理すべきデータを取り込む。例えば、イメージスキャナおよびA/D変換器などのデバイスによって構成される画像読み込み装置や、マイクおよびA/D変換などのデバイスによって構成される音声入力装置そのものであってもよいし、入力装置からデータを取得する受信部であってもよい。
【0028】
画像処理部420は、図3に示したバスでデータ処理用のモジュールを数珠繋ぎにしているデータ処理部である。ここでは、画像に限らずパイプライン処理などの一連のデータ処理に適したデータであれば、適用する事が好ましいためデータ処理部と表記している。
【0029】
データ出力部430は、処理済みのデータを外部に出力する。例えば画像データを印字ドットパターンに変換して出力するプリンタデバイスを含む画像出力装置や、音声データをD/A変換器等を通して出力する音声出力装置でもよい。もちろん、単に外部装置へデータを送信する送信部であってもよい。
【0030】
データ入力部410において入力されたデータは、システム制御部に送られてCPU401で処理されてもよいし、そのままRAM403や外部記憶装置404に一時記録されてもよい。また、データ処理部420は、データ入力部410からの入力データを直接受け取って処理を行っても、システム制御部400からの指示ならびにデータ供給によって処理を行ってもよい。
【0031】
また、データ処理部420の出力は、再度システム制御部400に送られても、また、直接データ出力部430に送られてもよい。
【0032】
データ処理部420は、システム制御部400の処理によって予め個別のデータ処理内容を設定され、供給されるデータに対して設定された処理を施すように動作する。
【0033】
図7は、システム制御部400のデータ処理部420に対する制御手順を示すフローチャートである。制御処理が開始されると、ステップS700において、データ処理装置のリセットが行われる。ここで、各モジュール100内の通信部120において、入力データカウンタ/出力データカウンタ(不図示)や待ち受けIDを保持するレジスタなどが初期化される。また、リングバス上の通信処理部の動作速度や各モジュールが利用可能なバッファの使用数なども初期化される。システム制御部は、動作速度を制御する動作速度制御部や、バッファの使用数(段数)を変更する変更部として機能する。
【0034】
ステップS710において、バス上の通信処理部の動作速度などを含むリングバスの設定が行われ、ステップ720において各モジュールの通信部120に、受信データを識別するための待ち受けIDやバッファ124の段数などが設定される。
【0035】
ステップ730において処理部に対するパラメータ指定などが行われ、ステップ740においてデータ処理の開始指示が行われる。そして、ステップ750では、データ処理の終了通知を監視する処理が行われ、これはステップ760において、処理終了が検知されたことを判断するまで繰り返される。
【0036】
ステップ760において、データ処理装置の終了通知が確認されると、処理を終了する。
【0037】
図5は、図3の画像処理部においてのバッファの構成を詳細に示した概略図である。図1に示したバッファ124に相当するバッファはバッファ512,522,532,542であり、ここではさらにバッファ511、521,531,541を追加している。ここで、バッファ512,522,532,542は、通常そのそれぞれの直前にあるバッファの内容を次のクロックで保持し、その次のクロック次のモジュールへ送信するように構成してある。またバッファ512,522,532,542は、モジュール内の処理部130、受信部121、送信部1223およびセレクタ123とは直接接続されていない。
【0038】
このバッファ512,522,532,542が挿入されたことにより、モジュール間のデータ送受信はそれぞれ1サイクルずつ遅れることとなる。図6を用いて、通信部A〜Dの動作速度を処理部の動作速度の2倍として動作させた場合のリングバス300を流れるパケットの挙動について説明する。また、以下の説明では簡略のためデータは所定量毎にパケット化するとする。
【0039】
図6(a)は0サイクル目において、最初のデータ601がリングバスに投入され、バッファA−1(511)に保持された状態を示す。図6(b)は1サイクル目において、先に入力されたデータ601がバッファA−2(512)に移動して保持された状態を示す。この際に、モジュールAの処理部は、通信部A〜Dの半分のサイクルで動作しているため、このタイミングでデータを投入することはできない。同様にして次のサイクルで次のデータ602が投入され、さらに次のサイクルで、データ601,602はそれぞれ右のバッファに移動していくことになる。
【0040】
図6(c)は動作開始から4サイクル目の状態である。この状態においてすべての処理部は、まだ処理すべきデータを受け取っていない。そして、モジュールCのバッファC−1に到達したデータ601はそのままモジュールCの処理部に取り込まれ、バッファC−1には残らない。
【0041】
図6(d)は、5サイクル目の状態を示す。このとき、処理部Cはリングバスの半分の速度で動作していることから、処理の途中であり、スループットが1であったとしても、先ほど入力されたデータを出力することはできず、バッファC−1(531)は空きの状態となる。
【0042】
図6(e)は、6サイクル目の状態を示す。このとき、バッファC−1(531)に接続されているモジュールCの処理部は、データ601の処理を完了している。従って、データ601を出力可能であると同時に次のデータ602を受信するので、バッファC−1(531)には、処理済みとなったデータ601が格納されつつ、次に処理するデータ602は処理部Cへと送られる。
【0043】
図6(f)は、8サイクル目の状態を示す。このとき、再びモジュールCの処理部は、先ほど入力されたデータ602を処理済みであるため、次のデータ603を受け取りつつ、バッファC−1(531)にデータ602を出力する。
【0044】
図6(g)は、10サイクル目の状態を示す。このとき、モジュールAの処理部は次のデータ606を投入しようとするが、リングバスを周回してきたデータ601がバッファA−1に存在するため、データ606をモジュールAに取り込まない。
【0045】
図6(h)は、11サイクル目の状態を示す。先ほど投入できなかったデータ606は、バッファA−1が空くために投入可能となり、次のサイクルで、モジュールAの処理部が次のデータを出力しようとした際には、出力できずに滞っているデータがないことから、次のデータ出力を行うことが可能となる。
【0046】
このように、本実施例によれば、通信部の動作速度を処理部の動作速度の2倍とすることで、通常通りデータが滞りなく流れている際には自動的に1つ置きのパケットにデータが格納されてリングバスを周回させる様にできる。これにより、通信部においてバスへのデータ送信が競合した際に初めて1つ置きの空きパケットが使用される様にできる。このため、単純に処理部と通信部の動作速度の関係を設定することにより、特別な制御処理なしにデータフローの遅延を最小限にすることが可能となる。
【0047】
なお、図6では簡略のためにサイクル単位の時間を用いて説明したが、システムクロック等のシステムの基本となるサイクル周期の倍数でなくてもよく、各モジュールの処理部のスループット(例えば、1パケット辺りの処理に要する時間)の整数倍としてもよい。これは、図6において示したように、処理部が入力されたデータを出力するまでの間に少なくとも1つ以上のデータの移動が行われ、空きパケットが生成されればよいからである。このように、本発明の技術は、必ずしも処理部の動作スループットが1サイクルに1データを処理するものでなくても、適用可能である。
【0048】
また、それぞれのモジュールが同じスループットで動作しない場合などにも適用するためには、基本クロックの整数倍で通信部を動作させることで、いかなるスループットのモジュール群に対しても適応可能な構成とすることも可能である。
【0049】
例えば、モジュール1〜3があり、基本クロックの周期をTとして、モジュール1の処理時間は3T、モジュール2は2T、モジュール3は5Tなどのように表わせるとする。周波数を示すクロックCは、C=1/Tと表現できる。そして、通信部をkC(kは1以上の整数)のクロックで動作させればモジュール1〜3は1回の処理時間に相当する期間に連続して流れるパケットを占有することが無くなる。また、上記の場合、リングバスの速度(通信部の動作速度)の基準を2Tにしてしまうと、3TのPEとは位相がTだけずれてしまうために効率が良くない。従って、複数種類の処理速度のモジュールが混在する場合、複数のモジュールの処理時間の最大公約数をベースに、最大公約数以下の長さに1つのパケットを出力するように通信部の動作速度を設定すればよい。もちろん、周期Tに基づくと最大公約数なり、クロック周波数に基づくと最小公倍数になるが、これらは同義である。
【0050】
以上のように制御することは、1つパケットを処理して出力するまでに所定長の処理時間を有する1つの処理モジュールに着目すれば、所定長の処理時間の間に少なくとも2つ以上のパケットを送信部から送信させるように制御することと同義である。 また、挿入したバッファの個数の比率に応じた速度で通信部を動作させたり、処理部が入力されたデータを処理する間にリングバス上のデータの進む量を多くしたりすることで、データとデータの間隔の数を増やすことが可能となる。ここでデータとデータの間隔とは、2つの有効なパケット間の空パケットの数にも相当する。
【0051】
他にも、複数のデータ処理ストリームを同一のリングバス上に流す際に、同時に流すデータ処理ストリームの数に応じてリングバスの動作速度を速めることは効果的である。例えば二つのデータ処理ストリームを流す際(例えば2系統のパイプライン処理を並行してデータ処理部420に流す場合)には、1つのデータストリームを流す場合の2倍のデータがリングバス上を周回する可能性がある。このような場合に、1つのデータ処理ストリームを流した時と同様の挙動を得るためには、リングバス上のバッファの数を2倍とした上で、リングバスの動作速度を2倍にすることが有効である。また、複数のデータ処理ストリームを同一のリングバスで実現するには、各処理部にはデータストリームの数だけの待ち受けIDを識別するレジスタが必要になり、データパケットはストリームの種類を識別するための情報を格納する必要がある。
【0052】
またパケットに送信元のIDだけを格納している理由は、送信先の情報を削減することでパケットの情報量を削減できたり、ストールパケットを活用する上で送信元IDを利用する方が効率的であったりするためである。効率的な理由の1つとして、ストールパケットを検知するのに都合のよいモジュールは送信元のIDをパケットに付加したモジュールである点などが挙げられる。
【0053】
また、図8に示すように、モジュール間にバッファ801を設けても良い。こうすることで、データパケットを保持可能なバッファの数を増加させやすくなり、リングバスの効率の低下を抑えることが可能となる。
【0054】
もちろん、バッファ801は2段以上のバッファとして構成してもよいし、段数可変のバッファとして構成してもよい。その場合も、その段数に応じてリングバス上の通信部120の動作速度を処理部130に対して速めることで、リングバスの処理効率を良くすることができる。
【0055】
<実施例2>
図9は、実施例2のモジュールの概略構成を示すブロック図である。なお、以下の実施例2の説明において、実施例1と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【0056】
さらに、入力FIFO1001は、通信部において受信されたデータを処理部に渡す際にデータを一時的に保持する。この入力FIFO1001によって、処理部130が処理中であっても、FIFOの段数分のデータを一時的に保持することが可能となるため、リングバス上にStallフラグの立てられたパケットが周回する頻度を下げることが可能である。
【0057】
出力FIFO1002は、処理部において処理済のデータを通信部に渡す際に使用される出力FIFOである。この出力FIFOによって、リングバス上に空きパケットがないために通信部においてデータを出力できない場合にも、処理部の出力データを保持することで処理部を開放し、次のデータの処理に移行することが可能である。
【0058】
さらに、処理スルー部1003は、入力FIFO1001の出力を直接出力FIFO1002に渡す。この処理スルー部1003を有効に設定することにより、処理部130を介さずに、入力FIFO1001から出力FIFO1002に直接データを流すことが出来るため、2つのFIFOをリングバスに接続された仮想的なバッファとして使用することが可能となる。
【0059】
例えば、データ処理部420に実行させる処理によっては、処理に用いないモジュールが生ずる場合がある。この場合は、図7のシステム制御部400の設定処理であるステップS730において、各データ処理部に待ち受けIDを設定する際に、待ち受けIDを設定しないモジュールについては処理スルー部1003を有効に設定するようにしてもよい。なお、処理スルー部1003を有効にする場合は、受信部121は全てのパケットを受信するようにしてもよい。
【0060】
モジュールの性能に差がある場合や、モジュールが特定の処理(画像処理でいうフィルタ類等)に特化している場合は処理に用いないモジュールが生ずる可能性が高まるため、本実施例によって効果を発揮する機会が増える。
【0061】
一方で、処理スルー部1003を有効にする場合でも、ステップS730においてシステム制御部400は受信部121に特定の待ち受けIDを設定してもよい。図10は、図9に示したモジュール構成を使用してリングバスを構成した例である。
【0062】
入力FIFO1111、1121、1131、1141は、各モジュールの中においてリングバス状の通信部で受信されたデータを処理部で処理する際に一時保持する。出力FIFO1112,1122,1132,1142は、各モジュールの中にあって、リングバス上の処理部で処理された処理済データを通信部に出力する際に一時保持する。
【0063】
処理スルー部1133は、処理部を介さずに入力FIFO1131と出力FIFO1132を接続している。この入力FIFO1131、処理スルー部1133、出力FIFO1132を通る経路は、通信部331において、予め特定のIDを待ち受けIDとして指定し、かつ、処理スルー部1133をスルーに設定することによって設定できる。こうすることで、一連のデータ処理(パイプライン処理など)において所望の処理と処理の間にバッファとして挿入することができる。
【0064】
このように、使用しない処理部をリングバス上のデータ保持手段として、所望の処理と処理の間にピンポイントでバッファとして適用できるため、必要最小限の回路構成でリングバスのスループットの向上が図れる。
【0065】
以上、実施例2によって、特定の一連のデータ処理において作用する仮想的なバッファを用意することが可能となる。このようなに、特定の処理で用いないモジュールをバッファとして扱うことで、回路規模を増大させることなく、リングバス上にあって有効に動作するバッファを配置することが可能となる。また、バッファを挿入することで、Stallフラグつきのデータパケットが増える際にも、データの滞留を防ぎ、処理速度の低下を抑えることが可能となる。
【0066】
処理部をデータが通過するには処理部もクロックが供給される必要があり、スキップすることで処理部をOFFにできるので消費電力を低減できる。
【0067】
ただし、この実施例2においては、実施例1に示した技術のように、バッファが処理部と処理部の間に均等に配置されない。この場合には、個々のモジュールにおけるバッファの比率ではなく、リングバス上にあって有効に動作するバッファの総数Kと、データ処理が有効となっている処理部の総数Lとから求められる速度でリングバスを動作させればよい。
【0068】
この場合、K/Lによって求められる比は、リングバスを処理部の動作速度の何倍で動作させるべきかに関する指標を与えることとなる。
【0069】
たとえばK/Lが2となるように特定のデータ処理ストリーム上にバッファを配置した場合には、リングバスの動作速度を処理部の動作速度に対して2倍とすれば、理想的にはリング上のバッファの増加による1週にかかるステップ数を相殺する。そして、リングバス上をデータが1周する時間は変わらず、なおかつ、空きパケットはちょうど1つおきに発生することになる。
【0070】
ストールパケットが増えた場合や、リングバスの各通信部の保持するデータ量が閾値を超えた場合にだけ、処理に用いないモジュールをバッファとして用いるようにしてもよい。
【0071】
<実施例3>
以下の実施例3の説明において、実施例1や実施例2と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【0072】
実施例2において開示した例においては、リングバス上の特定のデータ処理ストリームにおいて、FIFOの段数の整数倍の制約のもとで、任意の数のバッファを挿入することが可能である。実施例3では、この際に挿入すべきバッファの総数Kを、同時に投入するデータ処理ストリームの数Sと有効に動作する処理部の数Lとから求められるリングバスの動作速度Rから、求める。
【0073】
例えば、同時に投入するデータ処理ストリームが2本ある場合、リングバスの動作速度を2倍にすることで、処理部が1単位のデータ処理を行う間に二つのデータを転送することが可能となる。このような場合に、リングバスに接続されるバッファの容量を増加させない場合、結局リングバス上を流れるデータ量は単純に2倍となり、何らかのデータの滞留によってリングバスがデッドロックする可能性が高まる。
【0074】
そのため、リングバスの動作速度の増加に応じてリングバス上に保持できるデータ容量を増加させる必要がある。そして、リングバスの動作速度を2倍にするのであれば、リングバス上のバッファの数も2倍以上にする必要がある。
【0075】
現実的には、動作周波数を任意の整数倍と出来るケースはまれであり、2のべき乗の周波数を選択せざるを得ないことが多い。従って、実際には同時に投入するデータ処理ストリームの本数を超える最も近い2のべき乗倍の周波数を用いることが現実的である。
【0076】
よって、例えば、リングバス上の有効に動作するバッファ段数の総数Kは、同時に投入するデータ処理ストリームの本数を超える最も近い2のべき乗をS’とするならば、有効に動作する処理部の総数LをもとにK=L×S’によってもとめてもよい。
【0077】
ここで、リングバスの動作速度は、処理部に与えられている動作基準信号(クロック)のK/L倍、または(M+N)倍としてもよい。
【0078】
また、処理部の動作が遅く、1つのデータを処理するのにTクロックの時間を要する場合、リングバスの動作速度は、動作基準信号のサイクルをTで割った値をもとに、K/L倍や(M+N)倍としてもよい。たとえば、100MHzの動作基準信号が処理部に与えられている場合に、処理部の性能が10サイクルに1データの処理能力であったとし、かつK/L=2であった場合には、(100MHz/10サイクル)×2=20MHzでリングバスを動作させても良い。このように、リングバスの動作周波数は、動作基準信号よりも遅くなることもありうる。
【0079】
ただし、現実には、リングバスに接続されている各々のモジュールが備える処理部の処理速度は必ずしも全て同じとは限らない。この場合には、これらの処理部のうち、最も遅い処理部が1データを処理するのにかかるサイクル数を基準として、そのK/L倍、または(M+N)倍の動作周波数でリングバスを動作させても良い。
【0080】
また、前述の各実施例では処理部312が外部へのデータの出力と外部からの入力の両方をこなしていたが、入力用の処理部と出力用の処理部を別々に設けてもよいし、夫々の数も複数あってもよい。
【0081】
また、外部から取得するデータはリングバスで扱うパケットの形式でそのまま入力してもよい。さらに、処理部はパケットを解釈しパケットのまま処理できるようにしてもよい。
【0082】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をコンピュータ等の処理装置(CPU、プロセッサ)にて実行することで実現できる。
【0083】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【技術分野】
【0001】
本発明はリングバスを用いたデータ処理を行うデータ処理装置、その制御方法およびプログラムに関する。
【背景技術】
【0002】
処理回路を並列に処理させ効率よくデータ処理を行う方法として、処理回路をリング型のバスで接続する方法(特許文献1)が提案されている。また、画像のフィルタ処理を並列処理するため、データに制御コードを添付し、制御コードに従ってデータをプロセッサに取り込むことでオーバーラップするデータを複数のプロセッサで受信できるようにする方法がある(特許文献2)。
【0003】
複数の処理回路の処理順番を簡単に変更できるようにしつつ、バスの競合を低減するため、複数の処理回路と(入出力)制御回路をリング状に接続し、リング状に接続した処理回路上にパケット化したデータを周回させる方法もある(特許文献3)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第2522952号公報
【特許文献2】特開昭63−247858号公報
【特許文献3】特許第3907471号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1の方法では、入力端において外部メモリがI/Fなどから入力したデータを、実際に接続された順番で処理回路(以下、モジュール)が処理し、出力端において外部メモリ等へ出力する。そのため、複数のモジュールの処理の順序は、ハードウェアを実装する段階で接続された順序に制限される。ここで、処理回路の順番を任意に入れ替えようとすると、複雑な構成が必要とし回路規模を増大させたり、複雑な処理が増えて処理性能の著しい低下をもたらしたりする。
【0006】
特許文献2、3の方法では、ある処理モジュールによってリングバス上のパケットが占有されてしまうと、データ転送効率が落ちてしまうことがある。例えば、他の処理モジュールがリングバス上にデータを出力できなくなってデッドロックが発生してしまうこともある。
【0007】
本発明はリングバス上の複数のモジュールが順番に処理を行うシステムにおいて、処理を効率化できるデータ処理装置、データ処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を達成するために、本発明に係る情報処理装置は、処理手段を有する複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段とを有することを特徴とする。
【発明の効果】
【0009】
本発明により、各モジュールが処理済のデータをリングバス上に放出できなくなる可能性を低減し、画像処理装置の処理性能が低下することを抑制することが可能となる。
【図面の簡単な説明】
【0010】
【図1】バスに接続するモジュールの概略構成を示すブロック図である。
【図2】パケットのフォーマットを示す図である。
【図3】リングバスを有するデータ処理部の概略構成を示すブロック図である。
【図4】データ処理装置の概略構成を示すブロック図である。
【図5】モジュール毎に2つのバッファを備えているデータ処理装置の概略構成を示す図である。
【図6】通信部の動作速度を処理部の2倍に設定した場合の各通信部をパケットが流れる挙動を示す図である。
【図7】データ処理部の起動処理を示すフローチャートである。
【図8】モジュール外にデータ保持部を設ける場合のモジュールの構成を示すブロック図である。
【図9】通信部と処理部の間にFIFOを設けた場合のモジュールの構成を示すブロック図である。
【図10】通信部と処理部の間にFIFOを設けたモジュールを有するデータ処理装置の概略構成を示すブロック図である。
【発明を実施するための形態】
【0011】
<実施例1>
図1は、本発明の一実施例であるデータ処理装置の有する処理モジュール(以下、モジュール)の概略構成を示す図である。モジュール100は、バス110によってリング状に接続されているモジュールの1つである。ここで、リングバスとはバスと複数のノード(モジュール)によって形成されるリング状のネットワーク(データが流れる経路)を示すものであり、以下の説明ではモジュール間を円環状に接続するバスはリングバスと区別して単純にバスと称する。通信部120は、モジュール間におけるデータの送受信を行ったり、処理部130とデータを送受信したりする。また、クロックが入る度に移動するパケットを一時的に保持する役割も有する。
【0012】
受信部121は、バス110から受信するデータパケットのうち、処理部130で処理すべきデータパケットを識別して受信し、パケットからデータを抽出し処理部130に転送する。処理部130は、受信部121から転送されるデータを処理する。送信部122は、処理部130において処理済みのデータ、または、通信部120において後述する保留情報等をパケットに格納し、更にセレクタ123へ出力する。
【0013】
セレクタ123は、バス110より入力されたままのパケット又は送信部122で加工されたパケットのいずれかを選択して出力する。ここで、セレクタ123の制御は送信部122が行う。バッファ124は、セレクタ124の出力を単位時間だけ一時的に保持する。
【0014】
また、各モジュールがリングバスの上流から取得するパケットを下流に流すように制御することで、リングバスのリング上では一方向にだけパケットが巡回することになる。
【0015】
図2にはリングバスを流れるパケット200のデータ構成を示す図である。
validフラグ201はパケットが有効なデータを格納していることを示す。stallフラグ202(保留情報)はパケットが処理すべきモジュールによって受信されず保留された状態(保留状態)にあることを示す。ID203はデータの送信元(又は最後に処理したモジュール)を示すIDであり、カウント204はデータの送信順を示すカウント値でモジュールが処理すべきデータの順番を確認するのに用いる。また、データ205は各モジュールで処理するべきデータ、もしくは処理したデータを格納する。従ってモジュール100は各モジュール固有のIDと処理すべきパケットを識別するためのID(以下、待ち受けIDと称す)とを格納するレジスタと、一連のデータのどこまで処理したかを示す値(入力・出力カウント値)をカウントするカウンタとを有している。
【0016】
以下、モジュール100の動作を説明する。モジュール100の処理したデータをバスに出力する場合、送信部122はバスからモジュールが受信した入力パケットのvalidフラグ201を検出し、無効パケット(空きパケット)を探す。ここで、入力パケットのvalidフラグ201が有効を示す場合、そのままバッファ124に入力パケットを格納し、次のクロックでパケットをバスに出力する。
【0017】
一方、入力パケットのvalidフラグ201が無効を示す場合でかつ、処理部130が処理済みで出力可能なデータがある場合、送信部122は空パケットに処理済みのデータを格納する。詳細には、送信部122は空パケットに処理済のデータを格納し、validフラグ201に有効を示す値に設定し、stallフラグ202に無効を示す値を設定し、自分のモジュールID(送信元ID)、出力カウンタ(不図示)の値を付加する。そして、次のクロックでこのパケットをバスに出力する。このとき、出力カウンタをインクリメントして次に処理すべきパケットの識別処理に用いる。
【0018】
バス110からモジュール100がパケットを受信する場合、受信部121は入力パケットのvalidフラグ201、送信元ID203、カウント値204を監視する。そして受信部121が、validフラグ201が有効で、送信元ID203がレジスタに設定されている待ち受けIDと一致し、カウント値204が入力カウンタ値と一致するパケットが入力されたと判定した場合、データの取り込み処理をする。詳細には、受信部121は処理部130がデータを受信可能である事を確認し、入力パケットのデータを処理部130に取り込む。入力パケットは、validフラグ201を無効にして次の送信部122からバッファ124を通ってバスへ出力される。このとき、入力カウンタ(不図示)をインクリメントし、入力カウンタ値を更新する。
【0019】
この場合、モジュール内の処理部130がデータを受信不可能であるなら、入力パケットのstallフラグ202に有効を示す値に設定し(即ち、データの取り込みを保留)、他のフィールドは変更せずにバッファ124へ出力する。なお、入力カウンタと出力カウンタは、同期を取るため、データ転送開始前に同じ値に初期化される。
【0020】
一方で、受信部121が入力パケットを監視して、validフラグ201が無効、送信元ID203がレジスタの待ち受けIDと一致しない、カウント値204が入力カウンタ値と一致しない等の条件の1つに相当するパケットは下流側のバスへ通過させる。
【0021】
以上のように、モジュール固有のIDと待ち受けIDとを設定することで、複数の処理モジュールに簡易な構成によって所望の順番でデータを処理させることができる。
【0022】
図3は、モジュールA〜D(310,320,330,340)を数珠繋ぎに接続しているリングバス300を有している画像処理部の概略構成を示す図である。
【0023】
モジュール310は、画像処理部の外部のデータバスとの接続をする外部入力360を介して外部からのデータを入力し、処理が終了したデータを外部出力350によって外部に出力する機能を持つターミナルモジュールである。モジュール320、330、340は、リングバス300に接続され固定的な処理を割り当てられている処理モジュールである。
【0024】
これらのモジュール310,320,330,340のそれぞれには、リングバスに接続されデータの送受信を行う通信部311,321,331,341と、個別の処理を行う処理部312,322,332,342が備えられている。
【0025】
これらの処理部は、モジュールごとに異なる処理を行ってもよいし、またいくつかのモジュールで同じ処理を複数回行ってもよい。また、図3には4つのモジュールを有する画像処理部を例示しているが、リングバスに接続されるモジュールの数には制約はなく、固定的な処理を割り当てられているモジュールが2つ以上接続されていればよい。
【0026】
図4は、本発明の画像処理部(データ処理部)を配置するシステムの構成例を示す。システム制御部400は、演算制御用のCPU401、固定データやプログラムを格納するROM402、データの一時保存やプログラムのロードに使用されるRAM403および外部データを保持する外部記憶装置404を有するシステム制御部である。
【0027】
データ入力部410は、処理すべきデータを取り込む。例えば、イメージスキャナおよびA/D変換器などのデバイスによって構成される画像読み込み装置や、マイクおよびA/D変換などのデバイスによって構成される音声入力装置そのものであってもよいし、入力装置からデータを取得する受信部であってもよい。
【0028】
画像処理部420は、図3に示したバスでデータ処理用のモジュールを数珠繋ぎにしているデータ処理部である。ここでは、画像に限らずパイプライン処理などの一連のデータ処理に適したデータであれば、適用する事が好ましいためデータ処理部と表記している。
【0029】
データ出力部430は、処理済みのデータを外部に出力する。例えば画像データを印字ドットパターンに変換して出力するプリンタデバイスを含む画像出力装置や、音声データをD/A変換器等を通して出力する音声出力装置でもよい。もちろん、単に外部装置へデータを送信する送信部であってもよい。
【0030】
データ入力部410において入力されたデータは、システム制御部に送られてCPU401で処理されてもよいし、そのままRAM403や外部記憶装置404に一時記録されてもよい。また、データ処理部420は、データ入力部410からの入力データを直接受け取って処理を行っても、システム制御部400からの指示ならびにデータ供給によって処理を行ってもよい。
【0031】
また、データ処理部420の出力は、再度システム制御部400に送られても、また、直接データ出力部430に送られてもよい。
【0032】
データ処理部420は、システム制御部400の処理によって予め個別のデータ処理内容を設定され、供給されるデータに対して設定された処理を施すように動作する。
【0033】
図7は、システム制御部400のデータ処理部420に対する制御手順を示すフローチャートである。制御処理が開始されると、ステップS700において、データ処理装置のリセットが行われる。ここで、各モジュール100内の通信部120において、入力データカウンタ/出力データカウンタ(不図示)や待ち受けIDを保持するレジスタなどが初期化される。また、リングバス上の通信処理部の動作速度や各モジュールが利用可能なバッファの使用数なども初期化される。システム制御部は、動作速度を制御する動作速度制御部や、バッファの使用数(段数)を変更する変更部として機能する。
【0034】
ステップS710において、バス上の通信処理部の動作速度などを含むリングバスの設定が行われ、ステップ720において各モジュールの通信部120に、受信データを識別するための待ち受けIDやバッファ124の段数などが設定される。
【0035】
ステップ730において処理部に対するパラメータ指定などが行われ、ステップ740においてデータ処理の開始指示が行われる。そして、ステップ750では、データ処理の終了通知を監視する処理が行われ、これはステップ760において、処理終了が検知されたことを判断するまで繰り返される。
【0036】
ステップ760において、データ処理装置の終了通知が確認されると、処理を終了する。
【0037】
図5は、図3の画像処理部においてのバッファの構成を詳細に示した概略図である。図1に示したバッファ124に相当するバッファはバッファ512,522,532,542であり、ここではさらにバッファ511、521,531,541を追加している。ここで、バッファ512,522,532,542は、通常そのそれぞれの直前にあるバッファの内容を次のクロックで保持し、その次のクロック次のモジュールへ送信するように構成してある。またバッファ512,522,532,542は、モジュール内の処理部130、受信部121、送信部1223およびセレクタ123とは直接接続されていない。
【0038】
このバッファ512,522,532,542が挿入されたことにより、モジュール間のデータ送受信はそれぞれ1サイクルずつ遅れることとなる。図6を用いて、通信部A〜Dの動作速度を処理部の動作速度の2倍として動作させた場合のリングバス300を流れるパケットの挙動について説明する。また、以下の説明では簡略のためデータは所定量毎にパケット化するとする。
【0039】
図6(a)は0サイクル目において、最初のデータ601がリングバスに投入され、バッファA−1(511)に保持された状態を示す。図6(b)は1サイクル目において、先に入力されたデータ601がバッファA−2(512)に移動して保持された状態を示す。この際に、モジュールAの処理部は、通信部A〜Dの半分のサイクルで動作しているため、このタイミングでデータを投入することはできない。同様にして次のサイクルで次のデータ602が投入され、さらに次のサイクルで、データ601,602はそれぞれ右のバッファに移動していくことになる。
【0040】
図6(c)は動作開始から4サイクル目の状態である。この状態においてすべての処理部は、まだ処理すべきデータを受け取っていない。そして、モジュールCのバッファC−1に到達したデータ601はそのままモジュールCの処理部に取り込まれ、バッファC−1には残らない。
【0041】
図6(d)は、5サイクル目の状態を示す。このとき、処理部Cはリングバスの半分の速度で動作していることから、処理の途中であり、スループットが1であったとしても、先ほど入力されたデータを出力することはできず、バッファC−1(531)は空きの状態となる。
【0042】
図6(e)は、6サイクル目の状態を示す。このとき、バッファC−1(531)に接続されているモジュールCの処理部は、データ601の処理を完了している。従って、データ601を出力可能であると同時に次のデータ602を受信するので、バッファC−1(531)には、処理済みとなったデータ601が格納されつつ、次に処理するデータ602は処理部Cへと送られる。
【0043】
図6(f)は、8サイクル目の状態を示す。このとき、再びモジュールCの処理部は、先ほど入力されたデータ602を処理済みであるため、次のデータ603を受け取りつつ、バッファC−1(531)にデータ602を出力する。
【0044】
図6(g)は、10サイクル目の状態を示す。このとき、モジュールAの処理部は次のデータ606を投入しようとするが、リングバスを周回してきたデータ601がバッファA−1に存在するため、データ606をモジュールAに取り込まない。
【0045】
図6(h)は、11サイクル目の状態を示す。先ほど投入できなかったデータ606は、バッファA−1が空くために投入可能となり、次のサイクルで、モジュールAの処理部が次のデータを出力しようとした際には、出力できずに滞っているデータがないことから、次のデータ出力を行うことが可能となる。
【0046】
このように、本実施例によれば、通信部の動作速度を処理部の動作速度の2倍とすることで、通常通りデータが滞りなく流れている際には自動的に1つ置きのパケットにデータが格納されてリングバスを周回させる様にできる。これにより、通信部においてバスへのデータ送信が競合した際に初めて1つ置きの空きパケットが使用される様にできる。このため、単純に処理部と通信部の動作速度の関係を設定することにより、特別な制御処理なしにデータフローの遅延を最小限にすることが可能となる。
【0047】
なお、図6では簡略のためにサイクル単位の時間を用いて説明したが、システムクロック等のシステムの基本となるサイクル周期の倍数でなくてもよく、各モジュールの処理部のスループット(例えば、1パケット辺りの処理に要する時間)の整数倍としてもよい。これは、図6において示したように、処理部が入力されたデータを出力するまでの間に少なくとも1つ以上のデータの移動が行われ、空きパケットが生成されればよいからである。このように、本発明の技術は、必ずしも処理部の動作スループットが1サイクルに1データを処理するものでなくても、適用可能である。
【0048】
また、それぞれのモジュールが同じスループットで動作しない場合などにも適用するためには、基本クロックの整数倍で通信部を動作させることで、いかなるスループットのモジュール群に対しても適応可能な構成とすることも可能である。
【0049】
例えば、モジュール1〜3があり、基本クロックの周期をTとして、モジュール1の処理時間は3T、モジュール2は2T、モジュール3は5Tなどのように表わせるとする。周波数を示すクロックCは、C=1/Tと表現できる。そして、通信部をkC(kは1以上の整数)のクロックで動作させればモジュール1〜3は1回の処理時間に相当する期間に連続して流れるパケットを占有することが無くなる。また、上記の場合、リングバスの速度(通信部の動作速度)の基準を2Tにしてしまうと、3TのPEとは位相がTだけずれてしまうために効率が良くない。従って、複数種類の処理速度のモジュールが混在する場合、複数のモジュールの処理時間の最大公約数をベースに、最大公約数以下の長さに1つのパケットを出力するように通信部の動作速度を設定すればよい。もちろん、周期Tに基づくと最大公約数なり、クロック周波数に基づくと最小公倍数になるが、これらは同義である。
【0050】
以上のように制御することは、1つパケットを処理して出力するまでに所定長の処理時間を有する1つの処理モジュールに着目すれば、所定長の処理時間の間に少なくとも2つ以上のパケットを送信部から送信させるように制御することと同義である。 また、挿入したバッファの個数の比率に応じた速度で通信部を動作させたり、処理部が入力されたデータを処理する間にリングバス上のデータの進む量を多くしたりすることで、データとデータの間隔の数を増やすことが可能となる。ここでデータとデータの間隔とは、2つの有効なパケット間の空パケットの数にも相当する。
【0051】
他にも、複数のデータ処理ストリームを同一のリングバス上に流す際に、同時に流すデータ処理ストリームの数に応じてリングバスの動作速度を速めることは効果的である。例えば二つのデータ処理ストリームを流す際(例えば2系統のパイプライン処理を並行してデータ処理部420に流す場合)には、1つのデータストリームを流す場合の2倍のデータがリングバス上を周回する可能性がある。このような場合に、1つのデータ処理ストリームを流した時と同様の挙動を得るためには、リングバス上のバッファの数を2倍とした上で、リングバスの動作速度を2倍にすることが有効である。また、複数のデータ処理ストリームを同一のリングバスで実現するには、各処理部にはデータストリームの数だけの待ち受けIDを識別するレジスタが必要になり、データパケットはストリームの種類を識別するための情報を格納する必要がある。
【0052】
またパケットに送信元のIDだけを格納している理由は、送信先の情報を削減することでパケットの情報量を削減できたり、ストールパケットを活用する上で送信元IDを利用する方が効率的であったりするためである。効率的な理由の1つとして、ストールパケットを検知するのに都合のよいモジュールは送信元のIDをパケットに付加したモジュールである点などが挙げられる。
【0053】
また、図8に示すように、モジュール間にバッファ801を設けても良い。こうすることで、データパケットを保持可能なバッファの数を増加させやすくなり、リングバスの効率の低下を抑えることが可能となる。
【0054】
もちろん、バッファ801は2段以上のバッファとして構成してもよいし、段数可変のバッファとして構成してもよい。その場合も、その段数に応じてリングバス上の通信部120の動作速度を処理部130に対して速めることで、リングバスの処理効率を良くすることができる。
【0055】
<実施例2>
図9は、実施例2のモジュールの概略構成を示すブロック図である。なお、以下の実施例2の説明において、実施例1と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【0056】
さらに、入力FIFO1001は、通信部において受信されたデータを処理部に渡す際にデータを一時的に保持する。この入力FIFO1001によって、処理部130が処理中であっても、FIFOの段数分のデータを一時的に保持することが可能となるため、リングバス上にStallフラグの立てられたパケットが周回する頻度を下げることが可能である。
【0057】
出力FIFO1002は、処理部において処理済のデータを通信部に渡す際に使用される出力FIFOである。この出力FIFOによって、リングバス上に空きパケットがないために通信部においてデータを出力できない場合にも、処理部の出力データを保持することで処理部を開放し、次のデータの処理に移行することが可能である。
【0058】
さらに、処理スルー部1003は、入力FIFO1001の出力を直接出力FIFO1002に渡す。この処理スルー部1003を有効に設定することにより、処理部130を介さずに、入力FIFO1001から出力FIFO1002に直接データを流すことが出来るため、2つのFIFOをリングバスに接続された仮想的なバッファとして使用することが可能となる。
【0059】
例えば、データ処理部420に実行させる処理によっては、処理に用いないモジュールが生ずる場合がある。この場合は、図7のシステム制御部400の設定処理であるステップS730において、各データ処理部に待ち受けIDを設定する際に、待ち受けIDを設定しないモジュールについては処理スルー部1003を有効に設定するようにしてもよい。なお、処理スルー部1003を有効にする場合は、受信部121は全てのパケットを受信するようにしてもよい。
【0060】
モジュールの性能に差がある場合や、モジュールが特定の処理(画像処理でいうフィルタ類等)に特化している場合は処理に用いないモジュールが生ずる可能性が高まるため、本実施例によって効果を発揮する機会が増える。
【0061】
一方で、処理スルー部1003を有効にする場合でも、ステップS730においてシステム制御部400は受信部121に特定の待ち受けIDを設定してもよい。図10は、図9に示したモジュール構成を使用してリングバスを構成した例である。
【0062】
入力FIFO1111、1121、1131、1141は、各モジュールの中においてリングバス状の通信部で受信されたデータを処理部で処理する際に一時保持する。出力FIFO1112,1122,1132,1142は、各モジュールの中にあって、リングバス上の処理部で処理された処理済データを通信部に出力する際に一時保持する。
【0063】
処理スルー部1133は、処理部を介さずに入力FIFO1131と出力FIFO1132を接続している。この入力FIFO1131、処理スルー部1133、出力FIFO1132を通る経路は、通信部331において、予め特定のIDを待ち受けIDとして指定し、かつ、処理スルー部1133をスルーに設定することによって設定できる。こうすることで、一連のデータ処理(パイプライン処理など)において所望の処理と処理の間にバッファとして挿入することができる。
【0064】
このように、使用しない処理部をリングバス上のデータ保持手段として、所望の処理と処理の間にピンポイントでバッファとして適用できるため、必要最小限の回路構成でリングバスのスループットの向上が図れる。
【0065】
以上、実施例2によって、特定の一連のデータ処理において作用する仮想的なバッファを用意することが可能となる。このようなに、特定の処理で用いないモジュールをバッファとして扱うことで、回路規模を増大させることなく、リングバス上にあって有効に動作するバッファを配置することが可能となる。また、バッファを挿入することで、Stallフラグつきのデータパケットが増える際にも、データの滞留を防ぎ、処理速度の低下を抑えることが可能となる。
【0066】
処理部をデータが通過するには処理部もクロックが供給される必要があり、スキップすることで処理部をOFFにできるので消費電力を低減できる。
【0067】
ただし、この実施例2においては、実施例1に示した技術のように、バッファが処理部と処理部の間に均等に配置されない。この場合には、個々のモジュールにおけるバッファの比率ではなく、リングバス上にあって有効に動作するバッファの総数Kと、データ処理が有効となっている処理部の総数Lとから求められる速度でリングバスを動作させればよい。
【0068】
この場合、K/Lによって求められる比は、リングバスを処理部の動作速度の何倍で動作させるべきかに関する指標を与えることとなる。
【0069】
たとえばK/Lが2となるように特定のデータ処理ストリーム上にバッファを配置した場合には、リングバスの動作速度を処理部の動作速度に対して2倍とすれば、理想的にはリング上のバッファの増加による1週にかかるステップ数を相殺する。そして、リングバス上をデータが1周する時間は変わらず、なおかつ、空きパケットはちょうど1つおきに発生することになる。
【0070】
ストールパケットが増えた場合や、リングバスの各通信部の保持するデータ量が閾値を超えた場合にだけ、処理に用いないモジュールをバッファとして用いるようにしてもよい。
【0071】
<実施例3>
以下の実施例3の説明において、実施例1や実施例2と同一機能を有する構成や工程には同一符号を付すとともに、構成的、機能的にかわらないものについてはその説明を省略する。
【0072】
実施例2において開示した例においては、リングバス上の特定のデータ処理ストリームにおいて、FIFOの段数の整数倍の制約のもとで、任意の数のバッファを挿入することが可能である。実施例3では、この際に挿入すべきバッファの総数Kを、同時に投入するデータ処理ストリームの数Sと有効に動作する処理部の数Lとから求められるリングバスの動作速度Rから、求める。
【0073】
例えば、同時に投入するデータ処理ストリームが2本ある場合、リングバスの動作速度を2倍にすることで、処理部が1単位のデータ処理を行う間に二つのデータを転送することが可能となる。このような場合に、リングバスに接続されるバッファの容量を増加させない場合、結局リングバス上を流れるデータ量は単純に2倍となり、何らかのデータの滞留によってリングバスがデッドロックする可能性が高まる。
【0074】
そのため、リングバスの動作速度の増加に応じてリングバス上に保持できるデータ容量を増加させる必要がある。そして、リングバスの動作速度を2倍にするのであれば、リングバス上のバッファの数も2倍以上にする必要がある。
【0075】
現実的には、動作周波数を任意の整数倍と出来るケースはまれであり、2のべき乗の周波数を選択せざるを得ないことが多い。従って、実際には同時に投入するデータ処理ストリームの本数を超える最も近い2のべき乗倍の周波数を用いることが現実的である。
【0076】
よって、例えば、リングバス上の有効に動作するバッファ段数の総数Kは、同時に投入するデータ処理ストリームの本数を超える最も近い2のべき乗をS’とするならば、有効に動作する処理部の総数LをもとにK=L×S’によってもとめてもよい。
【0077】
ここで、リングバスの動作速度は、処理部に与えられている動作基準信号(クロック)のK/L倍、または(M+N)倍としてもよい。
【0078】
また、処理部の動作が遅く、1つのデータを処理するのにTクロックの時間を要する場合、リングバスの動作速度は、動作基準信号のサイクルをTで割った値をもとに、K/L倍や(M+N)倍としてもよい。たとえば、100MHzの動作基準信号が処理部に与えられている場合に、処理部の性能が10サイクルに1データの処理能力であったとし、かつK/L=2であった場合には、(100MHz/10サイクル)×2=20MHzでリングバスを動作させても良い。このように、リングバスの動作周波数は、動作基準信号よりも遅くなることもありうる。
【0079】
ただし、現実には、リングバスに接続されている各々のモジュールが備える処理部の処理速度は必ずしも全て同じとは限らない。この場合には、これらの処理部のうち、最も遅い処理部が1データを処理するのにかかるサイクル数を基準として、そのK/L倍、または(M+N)倍の動作周波数でリングバスを動作させても良い。
【0080】
また、前述の各実施例では処理部312が外部へのデータの出力と外部からの入力の両方をこなしていたが、入力用の処理部と出力用の処理部を別々に設けてもよいし、夫々の数も複数あってもよい。
【0081】
また、外部から取得するデータはリングバスで扱うパケットの形式でそのまま入力してもよい。さらに、処理部はパケットを解釈しパケットのまま処理できるようにしてもよい。
【0082】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア(プログラム)をコンピュータ等の処理装置(CPU、プロセッサ)にて実行することで実現できる。
【0083】
また、本発明は前述した実施例の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【特許請求の範囲】
【請求項1】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
を有することを特徴とするデータ処理装置。
【請求項2】
前記制御手段は、前記複数の処理モジュールの夫々の処理時間について、当該処理時間の最大公約数以下の長さの時間に1つのパケットを送信できるように前記送信手段を制御することを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記複数の処理手段が行うパイプライン処理の内容に応じて、各処理モジュールに対して当該モジュールが処理すべきパケットのIDを設定する設定手段を更に有することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記処理すべきパケットのIDを格納するレジスタを有しており、前記パケットのIDと当該処理すべきパケットのIDとが一致するパケットの格納するデータを前記処理手段へ転送する受信手段を更に有することを特徴とする請求項1乃至3のいずれか1項に記載のデータ処理装置。
【請求項5】
前記受信手段は前記パケットのIDと処理すべきパケットのIDとが一致しないパケットについては前記バスへそのまま通過させることを特徴とする請求項4に記載のデータ処理装置。
【請求項6】
前記リング状のバスに前記データを入力する入力手段を更に有することを特徴とする請求項1乃至5のいずれか1項に記載のデータ処理装置。
【請求項7】
入力されるパケットのIDに応じて、当該パケットをリング状のバスから外手段へ出力する出力手段を更に有することを特徴とする請求項1乃至6のいずれか1項に記載のデータ処理装置。
【請求項8】
前記送信手段は、当該送信手段に固有のIDを格納しているレジスタを更に有し、前記処理手段が処理したデータと前記固有のIDとを格納するパケットを前記バスへ送信することを特徴とする請求項1乃至7のいずれか1項に記載のデータ処理装置。
【請求項9】
前記送信手段は、前記パケットのIDと処理すべきパケットのIDとが一致し且つ前記処理手段がデータを受け付けない状態である場合に、前記パケットに保留情報を付加して転送することを特徴とする請求項1乃至8のいずれか1項に記載のデータ処理装置。
【請求項10】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールの夫々が、
受信するデータを所定の時間だけ保持する保持手段と、
前記保持手段の保持するデータを他のモジュールに送信する送信手段と
を有することを特徴とするデータ処理装置。
【請求項11】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールは、リングバス上のデータの送受信を行う通信手段と、受信されたデータの処理を行う処理手段とを有し、
前記通信手段と前記処理手段の間にあって、受信したデータを一時保持する入力FIFOと、前記処理手段にて処理済みの出力データを一時保持する出力FIFOと、前記入力FIFOから前記出力FIFOに処理手段を介さずにデータを送る処理スルー手段と、前記処理スルー手段の動作を切り替える切り替え手段と
を有することを特徴とするデータ処理装置。
【請求項12】
前記切り替え手段は、
前記リングバス上にあって有効に動作するデータ保持手段の総数をK、有効に動作する処理手段の総数をL、リングバスに同時に投入するデータ処理ストリームの本数をSとする場合に、
K≧L×Sとなるように前記処理スルー手段を切り替えることを特徴とする請求項11に記載のデータ処理装置。
【請求項13】
前記送信手段が生成するパケットは、格納するデータが有効であるかどうかを示す情報と、当該パケットが保留状態にあるかどうかを示す情報と、最後に出力したモジュールのIDと、リングバスへ入力した順を示し情報とを有することを特徴とする請求項1乃至12のいずれか1項に記載のデータ処理装置。
【請求項14】
前記リング状のバスに接続されているデータ保持手段と、
当該データ保持手段の段数を変更する変更手段とを更に備えることを特徴とする請求項1乃至13のいずれか1項に記載のデータ処理装置。
【請求項15】
前記送信手段、前記処理手段の少なくとも1つの動作速度を制御する動作速度制御手段を更に備えることを特徴とする請求項1乃至14のいずれか1項に記載のデータ処理装置。
【請求項16】
前記動作速度制御手段は、前記リング状のバスに接続されている個々のモジュールの間にそれぞれ挿入されるデータ保持手段のうち有効に動作する段数をNとし、リング状のバスに接続されているデータ保持手段のうち有効に動作する段数をMとする場合に、前記送信手段の動作速度を処理手段の動作速度に対して(N+M)の整数倍となるように制御することを特徴とする請求項15に記載のデータ処理装置。
【請求項17】
前記動作速度制御手段は、前記リング状のバスに接続され有効に動作するデータ保持手段の総数をKとし、前記有効に動作する処理手段の総数をLとする場合に、
前記前記送信手段の動作速度が処理手段の動作速度の(K/L)倍になるように制御することを特徴とする請求項16に記載のデータ処理装置。
【請求項18】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置におけるデータ処理方法であって、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理工程と、
前記処理工程で出力したデータを格納するパケットを下流側に送信する送信工程と、
前記処理工程で1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを送信できるように制御する制御工程と
を有することを特徴とするデータ処理方法。
【請求項19】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置を制御するプログラムであって、コンピュータを、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
して機能させることを特徴とするプログラム。
【請求項1】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置であって、
前記処理モジュールは、
当該処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
を有することを特徴とするデータ処理装置。
【請求項2】
前記制御手段は、前記複数の処理モジュールの夫々の処理時間について、当該処理時間の最大公約数以下の長さの時間に1つのパケットを送信できるように前記送信手段を制御することを特徴とする請求項1に記載のデータ処理装置。
【請求項3】
前記複数の処理手段が行うパイプライン処理の内容に応じて、各処理モジュールに対して当該モジュールが処理すべきパケットのIDを設定する設定手段を更に有することを特徴とする請求項1又は2に記載のデータ処理装置。
【請求項4】
前記処理すべきパケットのIDを格納するレジスタを有しており、前記パケットのIDと当該処理すべきパケットのIDとが一致するパケットの格納するデータを前記処理手段へ転送する受信手段を更に有することを特徴とする請求項1乃至3のいずれか1項に記載のデータ処理装置。
【請求項5】
前記受信手段は前記パケットのIDと処理すべきパケットのIDとが一致しないパケットについては前記バスへそのまま通過させることを特徴とする請求項4に記載のデータ処理装置。
【請求項6】
前記リング状のバスに前記データを入力する入力手段を更に有することを特徴とする請求項1乃至5のいずれか1項に記載のデータ処理装置。
【請求項7】
入力されるパケットのIDに応じて、当該パケットをリング状のバスから外手段へ出力する出力手段を更に有することを特徴とする請求項1乃至6のいずれか1項に記載のデータ処理装置。
【請求項8】
前記送信手段は、当該送信手段に固有のIDを格納しているレジスタを更に有し、前記処理手段が処理したデータと前記固有のIDとを格納するパケットを前記バスへ送信することを特徴とする請求項1乃至7のいずれか1項に記載のデータ処理装置。
【請求項9】
前記送信手段は、前記パケットのIDと処理すべきパケットのIDとが一致し且つ前記処理手段がデータを受け付けない状態である場合に、前記パケットに保留情報を付加して転送することを特徴とする請求項1乃至8のいずれか1項に記載のデータ処理装置。
【請求項10】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールの夫々が、
受信するデータを所定の時間だけ保持する保持手段と、
前記保持手段の保持するデータを他のモジュールに送信する送信手段と
を有することを特徴とするデータ処理装置。
【請求項11】
複数のモジュールがリングバスに接続され、前記複数のモジュールが予め設定された順番でデータ処理を行うデータ処理装置において、
前記モジュールは、リングバス上のデータの送受信を行う通信手段と、受信されたデータの処理を行う処理手段とを有し、
前記通信手段と前記処理手段の間にあって、受信したデータを一時保持する入力FIFOと、前記処理手段にて処理済みの出力データを一時保持する出力FIFOと、前記入力FIFOから前記出力FIFOに処理手段を介さずにデータを送る処理スルー手段と、前記処理スルー手段の動作を切り替える切り替え手段と
を有することを特徴とするデータ処理装置。
【請求項12】
前記切り替え手段は、
前記リングバス上にあって有効に動作するデータ保持手段の総数をK、有効に動作する処理手段の総数をL、リングバスに同時に投入するデータ処理ストリームの本数をSとする場合に、
K≧L×Sとなるように前記処理スルー手段を切り替えることを特徴とする請求項11に記載のデータ処理装置。
【請求項13】
前記送信手段が生成するパケットは、格納するデータが有効であるかどうかを示す情報と、当該パケットが保留状態にあるかどうかを示す情報と、最後に出力したモジュールのIDと、リングバスへ入力した順を示し情報とを有することを特徴とする請求項1乃至12のいずれか1項に記載のデータ処理装置。
【請求項14】
前記リング状のバスに接続されているデータ保持手段と、
当該データ保持手段の段数を変更する変更手段とを更に備えることを特徴とする請求項1乃至13のいずれか1項に記載のデータ処理装置。
【請求項15】
前記送信手段、前記処理手段の少なくとも1つの動作速度を制御する動作速度制御手段を更に備えることを特徴とする請求項1乃至14のいずれか1項に記載のデータ処理装置。
【請求項16】
前記動作速度制御手段は、前記リング状のバスに接続されている個々のモジュールの間にそれぞれ挿入されるデータ保持手段のうち有効に動作する段数をNとし、リング状のバスに接続されているデータ保持手段のうち有効に動作する段数をMとする場合に、前記送信手段の動作速度を処理手段の動作速度に対して(N+M)の整数倍となるように制御することを特徴とする請求項15に記載のデータ処理装置。
【請求項17】
前記動作速度制御手段は、前記リング状のバスに接続され有効に動作するデータ保持手段の総数をKとし、前記有効に動作する処理手段の総数をLとする場合に、
前記前記送信手段の動作速度が処理手段の動作速度の(K/L)倍になるように制御することを特徴とする請求項16に記載のデータ処理装置。
【請求項18】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置におけるデータ処理方法であって、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理工程と、
前記処理工程で出力したデータを格納するパケットを下流側に送信する送信工程と、
前記処理工程で1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを送信できるように制御する制御工程と
を有することを特徴とするデータ処理方法。
【請求項19】
複数の処理モジュールがバスを介してリング状に接続され、該処理モジュールがパケットをリング上の一方向に転送してデータを処理するデータ処理装置を制御するプログラムであって、コンピュータを、
前記処理モジュールの受信するパケットが格納するデータを処理して出力する処理手段と、
前記処理手段の出力したデータを格納するパケットを下流側の処理モジュールに送信する送信手段と、
前記処理手段が1つのパケットを処理して出力するまでに所定長の処理時間を要する際に、当該所定長の処理時間の間に複数のパケットを前記送信手段が送信できるように前記送信手段を制御する制御手段と
して機能させることを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【公開番号】特開2010−277429(P2010−277429A)
【公開日】平成22年12月9日(2010.12.9)
【国際特許分類】
【出願番号】特願2009−130852(P2009−130852)
【出願日】平成21年5月29日(2009.5.29)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成22年12月9日(2010.12.9)
【国際特許分類】
【出願日】平成21年5月29日(2009.5.29)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]