(57)【要約】【課題】  リングバスに接続された複数の処理回路を有する情報処理装置において、各処理回路の処理速度（スループット）の違いや、処理回路内部でデータ量が増減してしまうケースが存在する際に発生するデッドロックや、リングバスのスループットの低下などが生じる。【解決手段】  リングバスから取得したパケットから他の処理部のストール状態を検知し、他の処理部がストール状態にあるなら処理回路から新しくパケットを生成して送信する処理を抑制する。【選択図】  図４
2010217959.tif 000002
【特許請求の範囲】
【請求項１】
通信可能にリング状のバスに接続された複数の処理部を有し、前記複数の処理部が順番に情報を処理する情報処理装置であって、
前記複数の処理部の１つである第１の処理部は、
前記第１の処理部がリング状のバスから取得する情報を処理しない第１の状態にある場合に、当該第１の処理部が第１の状態にある事を示すパケットを前記リング状のバスに送信する送信手段と、
前記リング状のバスを流れるパケットから前記複数の処理部の１つである第２の処理部が前記第１の状態にあることを検出する検出手段と、
前記２の処理部が前記第１の状態にある事を検出した場合に、リング状のバスに新しいパケットを出力することを抑制する制御手段とを有することを特徴とする情報処理装置。
【請求項２】
前記第１の処理部は、当該第１の処理部が処理したデータに基づいて前記新しいパケットを生成する請求項１に記載の情報処理装置。
【請求項３】
前記検出手段は、処理順番が第１の処理部より後の第２の処理部が前記第１の状態にあることを検出することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記送信手段は、前記パケットに第１のビットを設定することで前記第１の状態を他の処理部に通知することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
パケットが有効であることを示す第３のビットを有するパケットに第１のビットを設定することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記検出手段は、自身が生成したパケットに付加されている第１のビットに基づいて、前記第２の処理部が前記第１の状態にある事を検出することを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記送信手段は、前記第１の処理部が情報を処理する第２の状態になりそうな場合に、当該第１の処理部が第２の状態にあることを示す第２のビットを設定することを特徴とする請求項５又は６に記載の情報処理装置。
【請求項８】
各処理部に固有の第１のＩＤを保持する保持手段と、自身が送出したパケットを識別する識別手段とを更に有しており、
前記送信手段は、前記第１の処理部が処理したデータと前記第１のＩＤとをパケットに付加して送信し、前記識別手段は、リングバスから取得したパケットに付与されている第２のＩＤと前記第１のＩＤとを比較することで自身が生成したパケットを識別することを特徴とする請求項３乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
所定の時間を計るタイマーを更に有し、
前記第１のビットを検出した場合に、前記所定の時間の間、前記処理が新たなパケットの出力を抑制することを特徴とする請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記タイマーはリングバスをパケットが１周する周期を計り、
前記第１のビットを検出した場合に、パケットがリングバスを１周する期間を整数倍した期間の間、前記制御手段が新たなパケットの出力を抑制することを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
所定の周期を計るタイマーと、出力抑制期間の初期値ＴＢならびにその増分ＴＩおよび減分ＴＤとを保持するレジスタを更に有し、
前記制御手段は前記初期値ＴＢ、増分ＴＩ、減分ＴＤから算出される期間に基づいて抑制制御をすることを特徴とする請求項１乃至８のいずれか１項に記載の情報処理装置。
【請求項１２】
前記パケットとしてデータパケットとコマンドパケットがあり、前記コマンドパケットから取得する命令に沿って、前記データパケットから取得するデータを前記処理部が処理することをとくちょうとする請求項１乃至１１のいずれか１項に記載の情報処理装置。
【請求項１３】
通信可能にリング状のバスに接続された複数の処理部を有し、前記複数の処理部が順番に情報を処理する情報処理装置であって、
前記複数の処理部の１つである第１の処理部は、
前記第１の処理部がリング状のバスから取得する情報を処理しない第１の状態にある場合に、当該第１の処理部が第１の状態にある事を示すパケットを前記リング状のバスに送信する送信手段を有することを特徴とする情報処理装置。
【請求項１４】
通信可能にリング状のバスに接続された複数の処理部を有し、前記複数の処理部が順番に情報を処理する情報処理装置であって、
前記複数の処理部の１つである第１の処理部は、
前記リング状のバスを流れるパケットから前記複数の処理部の１つである第２の処理部が前記第１の状態にあることを検出する検出手段と、
前記２の処理部が前記第１の状態にある事を検出した場合に、リング状のバスに新しいパケットを出力することを抑制する制御手段とを有することを特徴とする情報処理装置。
【請求項１５】
通信可能にリング状のバスに接続された複数の処理部の夫々に実行させるプログラムであって、
夫々の処理部自身が、
自身がリング状のバスから取得する情報を処理しない第１の状態にある場合に、自身が第１の状態にある事を示すパケットを前記リング状のバスに送信する送信工程と、
前記リング状のバスを流れるパケットから他の処理部が前記第１の状態にあることを検出する検出工程と、
前記他の処理部が前記第１の状態にある事を検出した場合に、リング状のバスに新しいパケットを出力することを抑制する制御工程とを実行するように制御することを特徴とするプログラム。
【請求項１６】
通信可能にリング状のバスに接続された複数の処理部の夫々が行う情報処理方法であって、
夫々の処理部自身が、
自身がリング状のバスから取得する情報を処理しない第１の状態にある場合に、自身が第１の状態にある事を示すパケットを前記リング状のバスに送信する送信工程と、
前記リング状のバスを流れるパケットから他の処理部が前記第１の状態にあることを検出する検出工程と、
前記他の処理部が前記第１の状態にある事を検出した場合に、リング状のバスに新しいパケットを出力することを抑制する制御工程とを有する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の情報処理部をリング状バスに接続したデータ処理装置、当該情報処理装置における情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
従来、ハードウェアによって実現される処理回路を並列実行することによって効率よく情報処理を行う方法として、バス型のパイプライン接続によるものがあった（特許文献１）。
【０００３】
この方式では、入力端において外部メモリがＩ／Ｆなどから入力されたデータは、複数の処理回路が並んでいる順番で順次処理した後に出力端において外部メモリ等へ出力される。そのため、その処理順番はあらかじめハードウェア実装時に接続された順番によって制限され、処理する順番を入れ替えることはできなかった。
【０００４】
ここで、処理回路間の接続をリング型のバス（以下、リングバスと称す）で接続する方法がある（特許文献２、特許文献３）。
【０００５】
しかしながら、ハードウェアとしてリングバスに接続され固定的な処理機能を持つ処理回路において、物理的な接続順番と異なる処理順番を自在に実施することは困難であった。
【０００６】
例えば、トークンパッシング方式の通信方式を採用して、複数の処理回路間でデータを送受信しつつ処理を行う方式などが提案されている。しかし、このようなデータパスを用いて接続順と異なる処理順番を実現しようとした場合、リング状に構成された通信路に、順番入れ替えのためにリングバスを周回するデータが増えてしまう。従って、リングバスのデータトラフィックが増加してしまい、処理性能を下げるばかりか、デッドロックが発生してしまうことがあった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第２７３４２４６号公報
【特許文献２】特許第２５２２９５２号公報
【特許文献３】特許第２８３４２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、リング型バスに接続されている複数の処理部によって情報処理をする際に、未処理のデータ（パケット）によってリングバス上のパケットの占有率を抑制することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するための本発明に係る代表的な構成は、通信可能にリング状のバスに接続された複数の処理部を有し、前記複数の処理部が順番に情報を処理する情報処理装置であって、前記複数の処理部の１つである第１の処理部は、前記第１の処理部がリング状のバスから取得する情報を処理しない第１の状態にある場合に、当該第１の処理部が第１の状態にある事を示すパケットを前記リング状のバスに送信する送信手段と、前記リング状のバスを流れるパケットから前記複数の処理部の１つである第２の処理部が前記第１の状態にあることを検出する検出手段と、前記２の処理部が前記第１の状態にある事を検出した場合に、リング状のバスに新しいパケットを出力することを抑制する制御手段とを有することを特徴とする。
【発明の効果】
【００１０】
本発明により、未処理のデータによるリングバスのパケットの占有を抑制し、デッドロックを低減することができる。
【図面の簡単な説明】
【００１１】
【図１】通信処理部の概略構成を示す図である。
【図２】パケットのフォーマットを示す図である。
【図３】リングバス接続された複数の処理部を有する画像処理部の概略構成を示す図である。
【図４】通信処理部の構成を示す図である。
【図５】情報処理装置の概略構成を示す図である。
【図６】制御処理装部による画像処理部の設定処理を示すフローチャートである。
【図７】画像処理部の概略構成を示す図である。
【図８】本実施形態における概念的なデータフローの一例を示す。
【図９】本実施形態における情報処理装置の動作一例を説明する概略図である。
【図１０】本実施形態における情報処理装置の動作の一例を説明する概略図である。
【図１１】通信処理部の概略構成を示す図である。
【図１２】通信処理部の概略構成を示す図である。
【発明を実施するための形態】
【００１２】
＜参考例＞
まず、未処理のデータがリングバス上のパケットを占有し、デッドロックが生じる状況を説明する。
【００１３】
図１は、通信路（バス）と情報処理部（以降、データ処理部）をつなぐ通信処理部の構成を示すものである。入力データ受信部１０１は、リングバス上を流れるデータパケットを受信する。入力データ識別部１０２は、入力されたデータパケットの制御情報を確認し、入力されたデータが、自ノードにおいて処理すべきデータかどうかを識別する。
【００１４】
処理データ出力部１０３は、入力データ識別部１０２において自ノードにおいて処理すべきデータであると判断されたデータを、データ処理部に対して送出する。処理済みデータ入力部１０４は、自ノードのデータ処理部において処理済のデータの入力を受け取る。
【００１５】
出力データ生成部１０５は、識別部１０２において自ノードで処理すべきデータでないと判断されたデータや、有効なデータを含んでいないと判断された空パケットや、入力部１０４から送られる、処理済であってバス上に出力する必要のあるデータなどから、出力データを生成する。出力データ送信部１０６は、出力データ生成部１０５が生成した出力データをリングバスに放出する。
【００１６】
図２は、このようなデータ通信処理部のリングバスにおいて送受信されるパケットのデータ構造を示したものである。
【００１７】
フィールド２０１は、データの処理順番を示すカウンタである。リング状のデータバスにおいては、連続する未処理データを含むデータパケットの一部がリング内を周回することがある。従って、通信処理部が受信するデータが、必ずしも対応するデータ処理部で最初に処理されるべきデータであるとは限らない。よって、このようなカウンタをデータに付随して持たせることで、入力された順など、正しい処理順番に従って処理を実行させる事が可能となる。なお、対応するデータ処理部とは、通信処理部がリングバスを介さずに直接通信可能なデータ処理部の事を指すものとする。
【００１８】
フィールド２０２はこのデータパケットが保持しているデータが処理されるべき有効データであることを示すフラグである。これはすなわち、パケットが現在使用中であるかどうかを示すフラグと同じ意味を持つ。以下、このフラグをバリッドビットと呼称する。フィールド２０３は、このパケットが保持しているデータが何らかの理由で、処理すべきデータ処理部によって受け取られなかったことを示すフラグである。通常のパイプライン接続における、前段へのデータ供給停止要求ビット（ｄｉｓａｂｌｅ信号）と同じ意味を持つ。以下、このフラグをストールビットと呼称する。
【００１９】
フィールド２０４は、このデータを最後に処理したデータ処理部のＩＤである。データ通信処理部では、あらかじめ外部から設定された待ち受けＩＤと、このデータパケット上のＩＤとを比較し、一致した際に処理を行う。通常、待ち受けＩＤは各処理部に固有の値であるとする。またフィールド２０５は、データを格納する。
【００２０】
リングバスを流れるパケットの総数はほぼ一定である、即ち、空のパケットと有効なパケットの和はほぼ一定であり、この一定数のパケットがリングバスを周回し続けている。空のパケットは格納するデータが無効とされたパケットであり、有効なパケットはデータやコマンドを格納しているパケットである。
【００２１】
図３（ａ）は、画像処理部の概略構成の一例を示す図である。
【００２２】
データ取得部３０１は、外部記憶装置などから処理すべきデータを取得する。入力用の通信処理部３０２は、取得されたデータをリング状に構成されている通信路に供給する処理を行う。データ処理部３０４は、供給されたデータに対して所定の処理を行う。通常、情報処理を行う上で処理部が外部と通信する事のないスタンドアローンな状態を取る事はない。しかし、本明細書では処理部の通信処理について詳細に説明するために、処理部からデータ処理部と通信処理部を独立させて説明している。
【００２３】
通信処理部３０３は、リング状に構成された通信路から、データ処理部３０４で処理すべきデータを通信路から選別して取り込む通信処理部である。この構成においては、データ処理部３０４および通信処理部３０３を有する処理部がリングバス３０７に１つ以上接続されている。
【００２４】
出力用の通信処理部３０５は、処理済のデータを外部の記憶装置などに出力するため、リング状の通信路上から処理済のデータを選択して取り込む。データ出力部３０６は、通信処理部３０５により取り込まれた処理済のデータを外部記憶装置などに出力する。リングバス３０７は、これらの通信処理部を通信可能に連結するリング状のデータバスである。
【００２５】
データ取得部３０１は、画像処理部６０２の外部から取得するデータを蓄積し、入力用の通信処理部３０２がデータ取得部３０２の蓄積するデータをパケット化してリングバス３０７に供給する。その際は、通信処理部３０５がパケットから抽出したデータをデータ出力部３０６に供給すればよい。
【００２６】
他にも、データ取得部３０１が画像処理部外部から取得するパケットからデータを抽出し、通信処理部が図２に示すパケットに変換してもよい。その際は、通信処理部が抽出したデータをデータ出力部３０６が画像処理部の外部に出力するパケットに変換する。
【００２７】
またデータ取得部３０１が取得するデータが、既に図２に示すようにパケット化されている場合は、通信処理部３０２がそのまま用いるようにしてもよい。この際は、通信処理部はパケットを生成せず、通信処理部３０５はパケットからデータを抽出しなくてよい。
【００２８】
図３（ｂ）は、図３（ａ）に示した構成において、デッドロックが発生する状態を説明する図である。ここでは、データの順番を示すために、データ４０３〜４０５の中に、データの入力順番を示す数字を記載している。
【００２９】
データ処理部４０１は、一度に３つのデータを処理して出力するデータ処理部として、通信処理部４０２は、データ処理部４０１に対応する通信処理部である。当然、データ処理部４０１が３つのデータを取得してから処理を終了するまで、通信処理部４０２は処理結果を出力できない。
【００３０】
ここで、データ取得部３０１が、データ処理部４０１の処理中も継続してデータを供給し続けた場合、リングバス上を周回するパケットのすべてが入力データで埋まってしまう事がある。その場合、空きパケットがなくなるために、データ処理部４０１から出力されるデータ４０３は、通信処理４０２においてリングバス３０７に出力できないまま停滞してしまう。
【００３１】
また、データ処理部４０１は、処理部自身が処理したデータの全てを出力するまで、次のデータ処理に移行できないものであるとする。この場合、データ処理部４０１と通信処理部４０２は、処理済データを出力できないため次のデータを取得することができない。一方で、データ取得部３０１も、通信処理部３０２がデータをリングバス３０７に出力できないため止まってしまう。
【００３２】
さらに、データ出力部３０６も、出力すべき処理済データ４０３がデータ処理部４０１から出力されてこないため、いずれのデータも外部に出力することができない。
【００３３】
このようにして、複数の処理部をリングバスに接続したデータ処理装置において、未処理データによってリングバス上のすべてのパケットが占有されてしまう事がある。それによって、データ処理部が次のデータを取得できない状態になり、処理を継続できないデッドロック状態に陥ってしまう。
【００３４】
このようなデッドロックを回避するために、入力データを受け付けられない状態のデータ処理部がある場合、リング内を周回するパケットを消去し空きパケットを作り出す技術がある（特許文献３）。
【００３５】
しかし特許文献３の技術では、データ供給部は消失したデータを処理しようとする必要があるため、処理装置の外の外部記憶装置などから再度データを読み出さなければならない。そのため、処理に時間を要し、制御も複雑になるという課題があった。
【００３６】
＜実施例１＞
次に本発明の一実施例である実施例１について説明する。なお、参考例と構成的、機能的にかわらないものについてはその説明を省略する。
【００３７】
図５は、実施例１のシステムの概略構成を示す図である。制御処理部６０１はＣＰＵやＭＰＵなどの処理回路である。画像処理部６０２は、リングバスで接続されている複数の処理部を有する画像処理部である。
【００３８】
ＲＡＭ６０３は、処理する前の入力画像データや処理後の出力画像データ、又は、画像処理部６０２の設定パラメータに関するデータなどを格納する読み書き可能なメモリである。ＲＯＭ６０４は、制御処理部６０１や画像処理部６０２の処理手順や、設定パラメータ等の定数などを保持可能な読み出し可能なメモリである。
【００３９】
制御処理部６０１において、ＲＯＭ６０４から読み出されたプログラムにしたがって、システムの制御ならびに画像処理部６０２への指示等を行う。画像処理部６０２は、処理装置６０１からの指示に従って画像処理を実行する。その際に、ＲＡＭ６０３にあらかじめ格納されている入力画像データを読み出して処理を行い、処理結果を再びＲＡＭ６０３に書き込む。また、システムバス６０５は制御処理部６０１、画像処理部６０２、ＲＡＭ６０３、画像処理部６０２を通信可能に接続するバスである。
【００４０】
図６に制御処理部６０１による画像処理部６０２の設定処理の処理手順を示す。
【００４１】
画像処理制御が開始されると、以下のステップに従って処理を実行する。ステップＳ７０１で制御処理部６０１は、ＲＯＭ６０４から画像処理部６０２のデータ処理部の処理順番を読み出す。ステップＳ７０２で制御処理部６０１は、ＲＯＭからデータ処理部に与える処理パラメータを読み出す。ステップＳ７０３で制御処理部６０１は、読み出したデータ処理順番及び処理パラメータを用いて画像処理部６０２の制御パラメータを算出する処理を行う。
【００４２】
ステップＳ７０４で制御処理部６０１は、ステップＳ７０３で算出した制御パラメータを用いて、画像処理部６０２に対する設定処理を行うステップＳ７０５で制御処理部６０１は、画像処理部６０２に対して処理開始の指示を行う。ステップＳ７０６で制御処理部６０１は、画像処理部６０２の設定の完了を確認し、
ステップＳ７０７において、設定処理が完了したと判断した場合には、処理を終了する。ここで、処理が未終了であった場合には、再びステップＳ７０６へ戻り、終了確認処理を継続する。
【００４３】
図７は、本実施例における画像処理部６０２の構成を示す図である。本実施例では、この図に示すように、通信処理部とデータ処理部とを有するモジュールが並列に実行可能なようにパイプライン接続されている。さらに、その終端と先端もバスによって接続され、リング状になっている。
【００４４】
このリング状バスにおいては、パケット８０１に示すように、通信路上にはデータを保持する概念上のパケットが有限の数だけ存在する。そして、パケット８０１に処理するデータを格納して単一方向に周回させることによって、所望のデータ処理部にデータを送付する。本実施例においてパケット８０１は、図２に示すデータ構造を有する。また、パケットを保持する手段として、例えば通信処理部ごとにシフトレジスタ（不図示）を備える。
【００４５】
各通信処理部は、あらかじめ自身の保持するレジスタ等に設定されたＩＤ（第１のＩＤ）とパケット上のデータに付帯するＩＤ（第２のＩＤ）とを比較し、それらが同一である場合には、そのパケットのデータを取り込む。その後、データ処理部がパケットのデータを処理し、処理済みのデータはデータ処理部から通信処理部に送られる。次に通信処理部は、データを保持していない空のパケットに処理済のデータと新たなＩＤとを格納することによってデータをバス上に出力する。この処理を各データ処理部が処理することで、一連の意図された順番でデータ処理が実行される。ここで通信処理部は、パケットが空かどうかを図２（ａ）のフィールド２０２に示したバリッドビットによって判別する。例えば、通信処理部は、有効なデータを出力する際にはこのバリッドビットとして（１…第３のビットとする）を格納させる。逆に、有効なデータを受信して処理する際には、バリッドビットとして（０）を格納させることで空パケットに変え、パケットの再利用を行う。
【００４６】
本実施例はデータ処理をする処理部の１つを第１の処理部とすると、その他の処理部（第２の処理部）がデータを処理しない状態にあることを検出する。
【００４７】
図４は、本実施例のリングバスに接続されている各通信処理部の構成を示すブロック図である。
【００４８】
ここで、図１において示した構成要素と機能的に変わらないものについては同一符号を付すと共に、その説明を省略する。待ち受けＩＤ保持部５０１は、各通信処理部に対応する処理部が処理するパケットのＩＤを記憶している。出力ＩＤ保持部５０２は、処理済みのデータをパケットに書き込む際に、処理済みデータと共に書き込むためのＩＤを保持するである。待ち受けＩＤ保持部５０１は待ち受けＩＤを、出力ＩＤ保持部５０２は出力ＩＤを、少なくとも１つ保持可能なように夫々レジスタを有している。
【００４９】
タイマー５０３は一定の周期をカウントする。ストールパケット識別部５０４は、図２のフィールド２０３に示したストールビットによってこのパケットがストール状態（第１の状態）かそうでない状態（第２の状態）かを判定する。ここで、タイマー５０３が計測する単位時間は各処理部で共通して扱えるものであれば、リングバスのクロックや又は処理部のクロックなどでもよいし、パケットが処理部間を移動する単位時間でもよい。他にも、リングバスと処理部から独立したクロックに基づいて時間を計測するタイマーを用いても良い。時間を計測するタイマーを用いた場合、リングバスと処理部の動作クロックを２倍にすると理論的にはパケットが周回する時間は半分になる。
【００５０】
ストールパケット識別部５０４は、ストールビットとして（１…第１のビットとする）が格納されている場合にストール状態であると判定し、（０…第２のビットとする）が格納されている場合にストール状態ではないと判定する。ストールパケット識別部５０４は、バリッドビットから有効なパケットであると判定されるもので且つストールビットが立っており且つ出力ＩＤ保持部５０２の保持するＩＤと同じＩＤを持つパケットを識別する。すなわち、Ｖａｌｉｄ＝１，Ｓｔａｌｌ＝１，且つ出力ＩＤ保持部５０２のレジスタの記憶しているＩＤと同じＩＤを持つパケットをストールパケットとして識別する。
【００５１】
出力データ抑制部５０５は、ストールパケット識別部５０４にてストールパケットが識別された場合、所定期間だけ処理済データ入力部１０４からデータをリング上に出力することを抑制制御する。
【００５２】
データ受付不可能検知部５０６は、入力データ識別部１０２が受信すべきパケットであると判断したが、データ処理部が次のデータを受け付けられない状態にある場合にデータ受付不可能と判断する。
【００５３】
パケット状態制御部５０７は、データ受付不可能検知部５０６から受付不可能であるとの通知を受けた場合、入力されたデータにストールビットをストール状態の（１）に変更して出力側へ流す。
【００５４】
また、同時にデータ受付不可能検知部５０６において受付不可能であると判断された場合には、処理データ出力部１０３において、対応するデータ処理部へのデータ供給を行わないように制御する。
【００５５】
ここで、待ち受けＩＤ保持部５０１や出力ＩＤ保持部５０２が自身のレジスタに保持するＩＤは、図６に示す処理において制御処理部６０１が設定する。本実施例の画像処理部６０２では、待ち受けＩＤと出力ＩＤとを設定することによって、パイプライン処理のデータフローを構成することができる。また、この方法では、待ち受けＩＤ保持部のレジスタのＩＤを書き換える事で、他のどのデータ処理部からのデータを受け取るかを切り替えることが可能である。
【００５６】
以上のように、リングバスのデータの流れを停滞させずにリングバスのトラフィックを抑えるため、出力データ抑制部５０５が各処理部の処理によって新しく出力されるパケットを抑制している。
【００５７】
次に、ストールを発生させているデータ処理部における処理の内容を説明する。
【００５８】
まず、入力データ受信部１０１がリングバスよりパケット化されているデータを受信する。次に、入力データ識別部１０２が、受信したパケットのＩＤと、待ち受けＩＤ保持部５０１に保持するＩＤとを比較する。ＩＤを比較することで、受信したデータは対応するデータ処理部において処理されるべきデータであるかどうかを判断する。
【００５９】
次に、入力データ識別部１０２が処理すべきとしたデータについて、受信不可能検知部５０６はこのデータを、対応するデータ処理部が受付可能であるかどうかの判断を行う。ここで、対応するデータ処理部はこのデータの受信が不可能な状態であると判断された場合には、処理データ出力部１０３が、データ処理部へのデータの供給を抑制する。さらに、パケット状態制御部５０７がこの受信されたデータのストールビットをストール状態の（１）に変更する。このように、通信処理部が受信したが対応するデータ処理部が処理できなかったデータは、ストールビットを立て、出力データ送信部１０６からリングバスに出力され、リングバスを周回する。
【００６０】
この際、ストールビットがストール状態を示す（１）を付与されたパケットは、フィールド２０４に格納しているＩＤ情報は変更されず、送信元のＩＤを保持したままである。よって、ストールビットを（１）に変更した通信処理部のストールパケット識別部５０４は、このデータのＩＤが自身の保持する出力ＩＤとは異なるため、ストールパケットとして検知しない。
【００６１】
当然ながら、出力データ生成部１０５は、リングバスを流れるデータパケットのバリッドビットが（１）である場合、このパケットが空きパケットでないと判断し、データ処理結果を書き込まない。また、データ受信不可能検知部５０６において受信可能と判断されたデータは、処理データ出力部１０３がパケットから抽出したデータをデータ処理部に送信する。さらに、パケット状態制御部５０７がデータパケットのバリッドビットを（０）に変更してパケットは空の状態、即ち無効の状態となる。
【００６２】
次に、ストールビットがストール状態を示す（１）に設定されたデータを、各通信処理部がどのように処理するかを説明する。ストールビットを立てられたデータは、リングバスを周回するので、データの送信元にいずれ到達する。
【００６３】
ストールパケット識別部５０４はストールパケットを検知した場合に、出力データ抑制部５０５に対して通知を行う。
【００６４】
この通知は、たとえば、ストールパケットを発見した場合に直ちに行ってもよいし、ストールパケットを発見した次の周期の期間に行ってもよい。この周期はタイマー５０３によってカウントされる。
【００６５】
出力データ抑制部５０５は、通知を受けてから所定の期間だけ、又は通知がある期間、あるいは、通知があった次のタイマー周期の間、だけ抑制する形態が考えられる。
【００６６】
ここで、ストールパケットの識別方法について詳細に説明すると、従来の技術においては、パケットにデータとともに書き込まれるＩＤは、次に処理を行うデータ処理装置のＩＤであった。これは、例えばネットワークにおいて宛先のＩＰアドレスをデータパケットに載せて送信するのと同じことである。
【００６７】
しかし、本実施例においてはパケットにデータとともに記録するのは、出力ＩＤ保持部５０２に保持されているデータ処理を行った送り元のＩＤである。このＩＤが送り元のＩＤであるため、送り先のデータ処理部において、ストールビットを立てられ送られてきたデータを効率良く識別することができる。
【００６８】
図８にパイプライン処理のデータフローの例を示す。夫々の円はデータを処理するノードを示し、矢印は概念的にデータがノードからノードへ送られることを示している。矢印に付加している数字はデータに付加する送り元のＩＤである。
【００６９】
ポイント９０１は、最初にデータを処理するノード１である。ポイント９０２は、ポイント９０３に示すノード３が処理した結果データを受け取って処理を行うノード２である。ポイント９０３は、ポイント９０１に示すノード１が処理した結果データを受け取って処理を行うノード３である。ポイント９０４は、ポイント９０３に示すノード３が処理した結果のデータを受け取って処理を行うノード４である。
【００７０】
次に、このようなパイプライン処理を本実施例のリングバス接続されている複数の処理部によって実現するときの動作を説明する。
【００７１】
図９の（ａ）に示すように、ノード１に相当する処理部９０１は、パケット１００１自分のノードＩＤである「１」をデータとともに書き込んで出力する。
【００７２】
ここで、この図では、データを有するパケット１００１〜１００７に関して、図３（ｂ）と異なる表記法を用いて説明している。図３（ｂ）においては、データを示すパケット４０３〜４０５にはデータの入力順を示す数値を記載したが、この図でパケットに付加されている数字は、パケットと共に付加されている送信元ＩＤを示す。そして、このＩＤを用いてデータフローを構成する処理を説明する。
【００７３】
次に図９の（ｂ）に示すように、図９の（ａ）において処理部９０１から出力されたデータ１００１は、ノード２が待ち受けているＩＤ＝３と異なるＩＤを保持したパケットであるために、ノード２としての処理部９０２を素通りする。図９の（ｃ）において、ノード３としての処理部９０３は、あらかじめ設定された待ち受けＩＤと等しいＩＤを持つパケット１００１を受信する。そしてパケット１００１に付属しているデータ１００５を処理データとして処理する。
【００７４】
続いて、図９の（ｄ）のパケット１００６に示すように、ノード３は処理済のデータとノード３のＩＤとをパケットに付加して再びリングバス上に出力する。図９の（ｅ）では、ノード４としての処理部９０４は、「２」のＩＤを持つデータを待っているので、パケット１００３はノード４を素通りする。
【００７５】
さらに、ノード１としての処理部９０１は、データ供給を行うノードであり、リング内での処理結果を受け取らないため、待ち受けＩＤがあらかじめ設定されていない。よって、図９の（ｆ）において、パケット１００３はノード１も素通りする。図９の（ｇ）において、あらかじめ「３」のＩＤを持つデータを待ち受けるように設定されたノード２はパケット１００６からデータ１００７を抽出し、処理を開始する。ここでデータ１００７は、ノード２によって取り込まれて処理されている最中である。
【００７６】
図９の（ｈ）は、ノード２において処理されたデータ１００７が、処理を行ったノード２のＩＤ＝２と一緒にパケット１００８に付加されて、リングバスに出力されたところを示している。図９の（ｉ）は、ＩＤが「１」のパケットを待ち受けるノード３において、ＩＤが「２」であるデータ１００８がそのまま素通りして、次へ進むところを示している。
【００７７】
図９の（ｊ）は、ＩＤが「２」のパケットを待ち受けるノード４によって、パケット１００８からデータ１００９が抽出され、処理が開始されている状態を示している。図９の（ｋ）は、ノード４によって処理されたデータと、ノード４のＩＤである４を付加されて、出力されたところを示している。
【００７８】
なお、この図では有効であるパケットを主に図示しているが、実際はデータを抽出される等して無効になったパケットも、基本的に他のパケットを追い抜くことなくリングバスを周回している。
【００７９】
図１０は、本実施例におけるリングバス上でのストールの発生と伝播について説明する図である。
【００８０】
図１０の（ａ）は、ノード１がパケット１００１とパケット１１０１とを連続して出力した状態を示している。このような場合、図１０の（ｂ）に示すように、ノード３が処理中に次のデータが来てしまうため、受信したパケット１１０２を取り込むことができない。
【００８１】
そこで、図１０（ｃ）に示すように、ノード３に受信されたパケット１１０２は、ノード３によってストールビットを立てられ、パケット１１０３として出力され、リング上を周回する。
【００８２】
また、複数のノードで上記のストールが発生した場合、リング上にはストールが立っていないデータパケットに加えて、ストールビットの立てられたデータパケットが周回することになる。データ処理に参加するノードの数が多ければ多いほど、このストールビットの立てられたデータパケットが多くなる可能性がある。また、ストール状態のパケットでリングバス一杯になってしまうことにより、デッドロックや、処理性能の著しい低下が起きる原因となる。したがって、このようなストール状態のデータパケットを検知して、ストールビットの立つデータパケットの増殖を抑制すると、より効率的なデータフローを実現できる。
【００８３】
図１０の（ｄ）に示すように、ストールを立てられたパケット１１０３は、パケット１１０３を送ったノード１のＩＤを保持したままリングバスを周回し、ノード１に戻ってくる。このときに、ノード１は、パケット１１０３に付加されているＩＤと自ＩＤとが同じであるかどうかを比較し、更に、ストールビットおよびバリッドビットをチェックする。この処理により、自分が流したデータが他のノードにおいて処理されなかったこと、即ち、自分の直後に処理を割り当てられているノードがデータを受信できない状態にあることを検知できる。
【００８４】
ノード１がデータを送出してから、そのデータが受け付けられずに周回して戻ってくるまでの期間は、リングを構成するノードの数から求められる。よって、所定のパケットリングバスを周回する周期は、リングを構成するノード数と等しいか、もしくはそれを整数倍した（２倍以上もしくは１／２以下）周期に近くなることが考えられる。
【００８５】
ただし、各ノードにおいてストールビットの処理に時間を要する場合も考えられるので、この期間にはパケットが一周する時間にストールビットの処理に要する時間を加算したものでもよい。この時、最初にデータがストールビット操作されるときのみ加算され、その後、２週目以降は加算しなくてもよい。また、各ノードにおいてレジスタの数が大きく異なる場合は、ノードの数に基づいて周期を算出する代わりに、ノードの総数に基づいて周期を算出してもよい。
【００８６】
図８に示したデータフローでは、ノード３においてデータ処理不可能な状況が起きた場合、ノード１はデータ出力を抑制した方がよい状態になる。ここで、ノード１は、データ出力を抑制すべき状況を、自分が送出したデータが未処理のままストールビットを立てられて戻ってきたことによって、検出する。
【００８７】
詳細には、データパケットに、送出元であるノード１のＩＤを入れておくことによって、簡単に、自ノードからの出力が後段のいずれかのノードにおいて処理不能であったことを知ることができる。
【００８８】
これは、最終出力段であるノード４を除く、途中処理段であるノード２、３においても同様で、リングバス接続されたノード間での種々のデータフローにおいて適用できるストールの検知方法である。
【００８９】
他のデータ処理順を指定することによって、ノード４の後段に他のノードの処理をさせる場合においては、ノード４においても同様の仕組みが意味を持つこととなる。
【００９０】
このようにして、ストールを検知すると、ノード１は、その後のデータ出力を抑制する状態となる。図１０の（ｅ）において、ノード１としての処理部１１０５は、ストールビットの設定されたパケット１１０３をリングバス上に出力し、パケット１１０３はそのままノード３に到達する。
【００９１】
このときすでにノード３が処理を終了しており、次のデータを受け入れられる状態にある場合、図１０の（ｆ）に示すように、ノード３はパケット１１０６のデータを抽出し、処理を開始する。データ１１０８は、このときにノード３に取り込まれ処理中のデータを示している。
【００９２】
このとき、このパケット１１０６は、バリッドビットを（１）に設定されるか、あるいはノード３が出力データを保持していた場合に、この出力データを格納して出力される。
【００９３】
これは、先にパケット１１０３がノード３を通過したときと同様、リングを周回していずれはノード１に到達する。図１０の（ｇ）が示す状態は、図１０の（ｄ）においてノード１がストール状態のパケットを素通りさせたときから１周分の期間が過ぎた状態である。
【００９４】
上記の方法では、このリング一周の期間が経過する前まで、ノード１が自身の送ったパケットが処理されたかどうかを検出しない。
一度、自ノードが出力したデータがストールされていることを検知したノード１は、パケットがリングを１周する期間の間（以降、１サイクルタイムと呼称する）は、自身が処理したデータの出力を抑制することとなる。
【００９５】
前述の処理不可状態の検知および出力抑制の制御は、単一のリング上に接続されている他のノードにおいても同様に実施できる。
【００９６】
また、図４において示したストールパケット識別部５０４において、ＩＤの比較を行わずに、バリッドビット及びストールビットを確認してストールパケットの検出を行ってもよい。このようにすることで、他ノードの送出したデータパケットのストール状態も検知することができ、リングバス全体のパケットの占有率を抑制することが可能となる。
【００９７】
以上、本実施例によれば、各処理部は他の処理部がストール状態にある場合に、新しくデータをパケット化し送信することを抑制しリングバスの占有率を下げデッドロックを低減できる。
【００９８】
また、本実施例によれば各処理部において、空パケットや他の処理部が処理すべき有効なパケットの送信は抑制しない。従ってリングバスのデータの流れを停滞させる事なく、リングバスのトラフィックを抑制できる。
【００９９】
また、本実施例によれば、既に宛先に到達した情報であって、宛先の処理部で処理できない情報はリングバスを周回し続けるので、再送信する等の処理が不要となる。
【０１００】
前述の説明においては図２（ａ）のデータパケットを用いた場合しか説明していないが、実際には図２（ｂ）のコマンドパケットを併用する処理をしてもよい。コマンドパケットは各処理部に対する命令（コマンド２０５）が格納されており、各処理部はこの内容に沿って処理をする。コマンドパケットによって各処理部のパラメータ設定するようにしてもよい。コマンドパケットを用いることで、データとコマンドを概念的に１本のリングバスに流し、且つ前述の効果を得ることが可能となる。従って、ディスエーブル信号を伝達するための信号線を必要としないので、回路規模を小さく抑えたまま効率的なデータフローを実現できる。
【０１０１】
＜実施例２＞
図１１に、本発明の一実施例である実施例２の通信処理部の概略構成を示す。なお、実施例１と同一機能を有する構成には同一符号を付すとともに、構成的、機能的に変わらないものについてはその説明を省略する。
【０１０２】
この構成は、図４の構成に加え、外部から指定される出力抑制期間を保持する出力抑制期間保持部１２０１を備えている。出力データ抑制部５０５は、ストールパケット識別手段５０４からの通知を受けた際に出力抑制期間保持部１２０１に保持された期間、出力を抑制する。
【０１０３】
このような制御の設定を外部から行えるように構成することにより、後段の処理における処理不可期間に関する情報を効果的に利用できる。また、後段の処理が処理可能に転じたときに即座に次のデータを受信できるように制御することができる。これにより、データ駆動型のプロセッサにおいて基本要件である処理データ待ちによる処理速度性能の低下を抑制することが可能となる。
【０１０４】
ここで、図１０に示したノード３におけるデータ受信不可能時間が、１サイクルタイムより短い場合、ストールを検知してから１周期間だけデータの出力を抑制すると効率が良くない。例えば、図１０の（ｃ）・（ｄ）に示すように、ノード３は、ストールビットを設定したパケット１１０３を出力した次のタイミングでデータ１００６を出力して受信可能状態となっている。このような場合に、ストールを検知した後、１サイクルタイムの間、出力を抑制してしまうと、次の処理が可能なノード３を待たせてしまうことになる。
【０１０５】
データ駆動型のプロセッサにおいては、処理性能は、データ処理部の処理速度のみならず、データをいかに間断なくデータ処理部に供給するかに大きく依存している。したがって、このような場合には、より早いタイミングで次のデータを供給することで、処理性能を引き出すことが可能となる。
【０１０６】
よって、ストールを検知した後、あらかじめ指定された１サイクルタイムに満たない期間のみ出力を抑制するように制御してもよい。
【０１０７】
逆に、図１０に示したノード３のデータ受信不可能な期間が１サイクルタイムより長かった場合には、ストールを検知した後に出力を１サイクルタイムの間抑制するだけでは不十分となる可能性がある。よって、このような場合を考慮して、ストールを検知した後、あらかじめ１サイクルタイムよりも長い期間だけ出力を抑制するように出力抑制間隔保持部に設定してもよい。
【０１０８】
以上、本実施例によれば各処理部において処理データ待ちによる処理速度性能の低下を抑制することが可能となる。
【０１０９】
＜実施例３＞
図１２に、本発明の一実施例である実施例３の通信処理部の概略構成を示す。なお、実施例１と同一機能を有する構成には同一符号を付すとともに、構成的、機能的に変わらないものについてはその説明を省略する。
【０１１０】
前述した様にストールを検知した際の出力抑制期間には様々なケースが存在する。ここでは、後段のデータ処理が、外部のメモリや外部の処理モジュール等と通信などを行うために、不定な処理時間を要し、データ受信不可期間も変動するケースを想定する。
【０１１１】
このような場合、データ受信不可期間が一定の統計的性質を持つとするならば、その期間の変動に対して緩やかに追従するデータ出力抑制期間の制御が必要となる。
【０１１２】
実施例３の構成では、図４の構成に加えて、一定の規則に従って出力抑制期間１３０１の指示を動的に変化させることのできる出力抑制期間制御部を備える。出力データ抑制部５０５はストールパケット識別手段５０４からの通知を受けた際に、出力抑制期間制御部１３０１によって指示される期間だけデータの出力を抑制する。
【０１１３】
出力抑制期間制御部１３０１は、初期値としての出力抑制期間ＴＢと、ストールパケットを検知した際の出力抑制期間の増分ＴＩおよび、一定期間ストールパケットが検知されなかった場合の減分ＴＤを保持する。さらに、実際に出力抑制期間として出力する値の初期値として、出力抑制期間Ｔを初期値ＴＢに設定しておく。
【０１１４】
ストールパケット識別部５０４によるストールパケットの通知が行われると、出力抑制間隔制御部１３０１は出力期間ＴにＴＩを加算する。ストールパケットの通知が一定期間内に連続して行われた場合、Ｔに再度通知の回数だけＴＩを加算するなどして、ストールパケットの密度に応じた出力抑制期間の制御をおこなってもよい。
【０１１５】
このようにすることで、短い間隔で連続してデータを出力した際に、ストールが連続的に多量に発生した場合などに、出力間隔を増大させ、デッドロックがおきにくいように制御することができる。
【０１１６】
一般的に、データの出力抑制期間を長くするとストールの発生頻度が抑えられる。例えば、非常に長いデータ受信不可期間が発生した場合、この出力抑制期間を長く設定しておかなければすぐにデッドロックする可能性がある。従って、ＴＩを比較的大きな値とし、ＴＤをそれに比べて小さい値とすることにより、安定する制御を行うようにするとよい。逆に、処理性能の低下を嫌って、ＴＩを小さめにし、ＴＤを大きめに制御してもよい。
【０１１７】
また、最小抑制期間ＴＭを設定し、出力抑制期間Ｔがこの値よりも下回らないように制御することで、最小期間の過度な短期化によるデッドロックなどの回避を行ってもよい。
【０１１８】
もちろん、ＴＩ，ＴＤなどをあらかじめ指定するのではなく、データ処理部内で適切な値に設定したり、ランダムな値を使用するなどしたりしてもよい。さらに、周知の関数を用いて統計的に算出してもよい。
【０１１９】
以上、本実施例によれば処理部のデータ受信不可期間が不定である場合においても、ストールの発生頻度を抑え、効率的にデータを流すことができる。
【０１２０】
また、前述の各実施例の説明では画像処理装置を例に用いて説明しているが、本発明は画像処理に限られるものではなく、パイプライン処理などの処理を複数の処理部で実行する情報処理に適用できる。
【０１２１】
また、通知に用いる情報を第１のビット、第２のビットとして表わしているが、パケット化して通知できる情報であればよい。
【０１２２】
また、前述の各実施例の処理は、複数のハードウェアとソフトウエアの協同によって実現するようにしてもよい。この場合、ネットワーク又は各種記憶媒体を介して取得したソフトウエア（プログラム）をコンピュータ等の処理装置（ＣＰＵ、プロセッサ）にて実行することで実現できる。
【０１２３】
また、本発明は前述した実施形態の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現してもよい。
【符号の説明】
【０１２４】
１０１  入力データ受信部
１０２  入力データ識別部
１０３  処理データ出力部
１０４  処理済みデータ入力部
１０５  出力データ生成部
１０６  出力データ送信部
５０１  待ち受けＩＤ保持部
５０２  出力ＩＤ保持部
５０３  タイマー
５０４  ストールパケット識別部
５０５  出力データ抑制部
５０６  受信不可能検知部
５０７  パケット状態制御部
【図１】
2010217959.tif 000003
【図２】
2010217959.tif 000004
【図３】
2010217959.tif 000005
【図４】
2010217959.tif 000006
【図５】
2010217959.tif 000007
【図６】
2010217959.tif 000008
【図７】
2010217959.tif 000009
【図８】
2010217959.tif 000010
【図９】
2010217959.tif 000011
【図１０】
2010217959.tif 000012
【図１１】
2010217959.tif 000013
【図１２】
2010217959.tif 000014