(57)【要約】【課題】  リング状にバス接続された複数のモジュールを有する情報処理装置において、複数のモジュールに処理を適切に分配することが可能となるため、並列実行による処理性能を向上させる。【解決手段】  バスを介してリング状に接続された複数のモジュール間でパケットを巡回させながら処理をする情報処理装置を提供する。モジュールそれぞれは、一方のモジュールからパケットを受信し、受信したパケットに含まれるデータを処理し、処理したデータを含むパケットを生成して、他方のモジュールに送信する。パケットは、少なくとも、処理対象のデータと、接続ＩＤと、カウント値とを含んでいる。また、有効なパケットに含まれる接続ＩＤが自モジュールに予め設定された受信接続ＩＤと等しく、かつ、パケットに含まれるカウント値と第１の受信用カウンタが生成する値が等しい場合に、パケットの受信を実行する。更に、自モジュールに予め設定された送信接続ＩＤと第１の送信用カウンタが生成する値を付加したパケットを生成する。【選択図】  図５
2013196509.tif 000002
【特許請求の範囲】
【請求項１】
リングバスに接続された複数のモジュールを有し、データと前記複数のモジュールの論理的な処理順序に対応する第１の識別子とを格納するパケットを隣接する一方のモジュールから受信し、当該第１の識別子に基づいて自モジュールで処理するか否かを決定し、受信したパケットを隣接する他方のモジュールへ送信するように構成された情報処理装置であって、
第１、第３のモジュールは、
自モジュールで処理したデータをパケットに含めて前記他方のモジュールへ送信し、
複数の第２のモジュールの其々は、
前記一方のモジュールから受信したパケットについて、前記第１の識別子に基づいて前記第１のモジュールで処理されたデータを取得し、当該データを処理することで得られる処理結果を、当該複数の第２のモジュールからのパケットがかわるがわる前記第３のモジュールで処理されるように付与された第２の識別子と対応づけて、前記他方のモジュールへ送信する
ことを特徴とする情報処理装置。
【請求項２】
前記複数のモジュールは、自モジュールにおいて処理対象のデータに対して実施する処理の処理内容を示す設定情報を保持する記憶手段を備える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記複数の第２のモジュールの其々は、前記第１のモジュールで処理されたデータが含まれる複数のパケットについてかわるがわる処理を実施し、前記複数の第２のモジュールの記憶手段は、それぞれ異なる処理内容を示す設定情報を記憶している
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記複数の第２のモジュールの其々は、前記第１のモジュールで処理されたデータが含まれる複数のパケットを処理し、前記複数の第２のモジュールの記憶手段は、それぞれ同様の処理内容を示す設定情報を記憶している
ことを特徴とする請求項２に記載の情報処理装置。
【請求項５】
前記複数のモジュールの其々は、前記第２の識別子を付与するためのカウンタを備える
ことを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記複数のモジュールの其々は、前記第１の識別子に関して自モジュールで処理するか否かを決定するための参照情報を保持する保持手段を備える
ことを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
リングバスに接続された複数のモジュールを有し、該複数のモジュールのそれぞれは通信部と処理部とを備え、データを格納するパケットを隣接する一方のモジュールから受信し、パケットを隣接する他方のモジュールへ送信するように構成された情報処理装置であって、
第１の通信部は、
自モジュールで処理したデータと、第１の識別子および第２の識別子とをパケットに含めて前記他方のモジュールへ送信し、
第２の通信部は、
前記隣接する一方のモジュールから受信したパケットに含まれる第１の識別子が、自モジュールの保持する情報と対応し、かつ、当該受信したパケットに含まれる第２の識別子が第１の属性を示していると、当該受信したパケットに含まれるデータを抽出して自モジュールの処理部に処理させ、
第３の通信部は、
前記隣接する一方のモジュールから受信したパケットに含まれる第１の識別子が、自モジュールの保持する情報と対応し、かつ当該受信したパケットに含まれる第２の識別子が第２の属性を示していると、当該受信したパケットに含まれるデータを抽出して自モジュールの処理部に処理させる
ことを特徴とする情報処理装置。
【請求項８】
前記第２の通信部および前記第３の通信部は、自モジュールで処理したデータを、新しい第１の識別子と対応づけてパケットとして前記他方のモジュールへ送信し、
第４の通信部は、前記新しい第１の識別子に基づいて前記第２の通信部および前記第３の通信部より出力されるパケットからデータを抽出して、自モジュールの処理部に処理させる
ことを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記第１の通信部は、パケットの送信元となる送信モジュールと前記パケットの受信先となる受信モジュールとの論理的な接続関係を決定するための情報を前記第１の識別子として、前記パケットに含まれるデータの処理順序を指示するカウント値を第２の識別子としてパケットに含めて前記他方のモジュールへ送信する
ことを特徴とする請求項７又は８に記載の情報処理装置。
【請求項１０】
前記第１の通信部は、前記カウント値を生成するための送信用カウンタを備え、
前記第２の通信部は、前記第１の属性を示す値を生成する第１の受信用カウンタを備え、
前記第３の通信部は、前記第２の属性を示す値を生成する第２の受信用カウンタを備えている
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記パケットは、当該パケットが有効であるかどうかを示す第１のフラグと、受信が保留されたかどうかを示す第２のフラグとを含む
ことを特徴とする請求項７乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記通信部は、
受信したパケットに含まれる第１の識別子が自モジュールに予め設定された前記第１の識別子と等しく、かつ、前記受信したパケットが前記第２のフラグは受信が保留されていないことを判定する判定手段と、
前記判定手段の判定の結果に基づいて、前記受信したパケットを消去する消去手段と、
前記判定手段の判定の結果に応じて、前記受信したパケットを消去するか否かを予め指定する指定手段と
を備えることを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
前記通信部は、受信したパケットのデータを自モジュールの処理部に処理させるために抽出する際に、当該パケットの第１のフラグを、無効を示す値に変更する無効化手段を更に備える
ことを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記通信部は、前記無効化手段の機能を有効にするかどうかを示す設定保持手段を更に備え、
前記無効化手段は、当該保持手段の値に応じて、自モジュールでデータを抽出したパケットの第１のフラグを無効に変更する
ことを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記第１の受信用カウンタ及び前記第１の送信用カウンタの少なくとも一方は、初期値とカウントアップ差分値とを参照して、初期値から始まるカウントアップ差分値ずつ増加する値からなる数列を生成する
ことを特徴とする請求項９乃至１４のいずれか１項に記載の情報処理装置。
【請求項１６】
受信するパケットの種別を識別する第１の識別手段と
生成するパケットの種別を識別する第２の識別手段と、
前記第１の受信用カウンタとは異なる第２の受信用カウンタと、
前記第１の送信用カウンタとは異なる第２の送信用カウンタと、
前記第１の識別手段の識別結果に応じて、使用する受信用カウンタとして、前記第１の受信用カウンタと前記第２の受信用カウンタとを切り替えて選択する第１の選択手段と、
前記第２の識別手段の識別結果に応じて、使用する送信用カウンタとして、前記第１の送信用カウンタと前記第２の受信用カウンタとを切り替えて選択する第２の選択手段と、
を更に備えることを特徴とする請求項９乃至１０のいずれか１項に記載の情報処理装置。
【請求項１７】
前記パケットに含まれる前記カウント値は、少なくとも前記リングバスに存在しうるパケット数Ｍ以上の数値を表現できるビット数に限定したカウント値を保持可能とする
ことを特徴とする請求項９乃至１６のいずれか１項に記載の情報処理装置。
【請求項１８】
リングバスに接続された複数のモジュールを有し、データと前記複数のモジュールの論理的な処理順序に対応する第１の識別子とを格納するパケットを隣接する一方のモジュールから受信し、当該第１の識別子に基づいて自モジュールで処理するか否かを決定し、受信したパケットを隣接する他方のモジュールへ送信するように構成された情報処理装置の制御方法であって、
第１、第３のモジュールが、
自モジュールで処理したデータをパケットに含めて前記他方のモジュールへ送信し、
複数の第２のモジュールの其々が、
前記一方のモジュールから受信したパケットについて、前記第１の識別子に基づいて前記第１のモジュールで処理されたデータを取得し、当該データを処理することで得られる処理結果を、当該複数の第２のモジュールからのパケットがかわるがわる前記第３のモジュールで処理されるように付与された第２の識別子と対応づけて、前記他方のモジュールへ送信する
ことを特徴とする情報処理装置の制御方法。
【請求項１９】
リングバスに接続された複数のモジュールを有し、該複数のモジュールのそれぞれは通信部と処理部とを備え、データを格納するパケットを隣接する一方のモジュールから受信し、パケットを隣接する他方のモジュールへ送信するように構成された情報処理装置の制御方法であって、
第１の通信部が、自モジュールで処理したデータと、第１の識別子および第２の識別子とをパケットに含めて前記他方のモジュールへ送信する送信工程と、
第２の通信部が、前記隣接する一方のモジュールから受信したパケットに含まれる第１の識別子が、自モジュールの保持する情報と対応し、かつ、当該受信したパケットに含まれる第２の識別子が第１の属性を示していると、当該受信したパケットに含まれるデータを抽出して自モジュールの処理部に処理させる第１の処理工程と、
第３の通信部が、前記隣接する一方のモジュールから受信したパケットに含まれる第１の識別子が、自モジュールの保持する情報と対応し、かつ当該受信したパケットに含まれる第２の識別子が第２の属性を示していると、当該受信したパケットに含まれるデータを抽出して自モジュールの処理部に処理させる第２の処理工程と
を有することを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バスを介してリング状に接続された複数のモジュール間でパケットを巡回させながら処理をする情報処理装置及びその制御方法、プログラムに関するものである。
【背景技術】
【０００２】
従来、処理回路間の接続をリング型のバス（リングバス）で接続する方法が開示されている。この方法によれば、処理順序は予めハードウェア実装時に接続された順序によって制限されないので、順序入れ替えを含む任意の処理順序を実行することができる。特許文献１の技術では、処理回路がパケットバッファからパケットを出力しようとする際に、パケットがｗａｉｔ命令を有する場合、事前にｓｅｔ命令でタイマに設定された期間だけ出力を抑制している。これにより、一度に大量のパケットがリングバスに排出されることを抑制している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−３２５８００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のモジュールをリングバスで接続し、各モジュールでパイプライン処理の各ステージの処理を実施させる構成において、任意のステージについて並列処理をさせる場合に、特許文献１の技術であると制御および回路が複雑化してしまうことがあった。
【０００５】
本発明は上記の課題を解決するためになされたものであり、リング状にバス接続された複数のモジュールの其々でパイプライン処理の各ステージの処理を実施させる際に、あるステージの処理を効率的に並列実行させることを目的とする。
【課題を解決するための手段】
【０００６】
上記の課題を達成するための本発明による情報処理装置は、リングバスに接続された複数のモジュールを有し、データと前記複数のモジュールの論理的な処理順序に対応する第１の識別子とを格納するパケットを隣接する一方のモジュールから受信し、当該第１の識別子に基づいて自モジュールで処理するか否かを決定し、受信したパケットを隣接する他方のモジュールへ送信するように構成された情報処理装置であって、第１、第３のモジュールは、自モジュールで処理したデータをパケットに含めて前記他方のモジュールへ送信し、複数の第２のモジュールの其々は、前記一方のモジュールから受信したパケットについて、前記第１の識別子に基づいて前記第１のモジュールで処理されたデータを取得し、当該データを処理することで得られる処理結果を、当該複数の第２のモジュールからのパケットがかわるがわる前記第３のモジュールで処理されるように付与された第２の識別子と対応づけて、前記他方のモジュールへ送信することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、リング状にバス接続された複数のモジュールの其々でパイプライン処理の各ステージの処理を実施させる際に、あるステージの処理を効率的に並列実行させることができる。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置のモジュールの構成例を示す図である。
【図２】リングバス上を流れるパケットのフィールド構成例を示す図である。
【図３】リングバスの構成例を示す図である。
【図４】システム構成例を示す図である。
【図５】（ａ）受信部の構成例、（ｂ）送信部の構成例を示す図である。
【図６】（ａ）接続ＩＤの設定による並列実行指示の例、（ｂ）データフローダイアグラムを示す図である。
【図７】単純なカウンタによる並列処理の実行例を示す図である。
【図８】データ順序を保証するための保留ビット処理の例を示す図である。
【図９】送受信別々の数列生成による並列処理の実行例を示す図である。
【図１０】実施形態２におけるデータ転送例を示す図である。
【図１１】同報通信と保留データ発生による不具合の例を示す図である。
【図１２】実施形態３における（ａ）受信部の構成例、（ｂ）送信部の構成例を示す図である。
【図１３】実施形態３における例示する処理の概念図を示す図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
【００１０】
（実施形態１）
まず、図１を参照して、本発明に係る情報処理装置のモジュールの構成例について説明する。モジュール１００は、リングバス１１０に接続されている単体のモジュールである。モジュール１００は、通信部１２０と、処理部１３０と、設定部１４０とを備える。リングバス１１０は、複数のモジュール１００をリング状に接続するバスである。
【００１１】
通信部１２０は、モジュール１００とリングバス１１０との間でのデータパケットの送受信を行い、且つ、リングバス１１０上を流れるデータパケットを保持する機能も果たす。通信部１２０は、隣接する一方のモジュールからパケットを受信する受信部１２１と、生成したパケットを隣接する他方のモジュールに送信する送信部１２２と、セレクタ１２３と、バッファ１２４とを備える。受信部１２１は、リングバス１１０上を流れるデータパケットの内、当該モジュール１００で処理すべきデータパケットを受信する。送信部１２２は、処理部１３０で処理済のデータ、または、通信部１２０で加工されたデータについての送信パケットの生成及び送信を行う。セレクタ１２３は、送信部１２２の判定に応じて、リングバス１１０より入力されたパケット、または、送信部１２２で生成されたパケットのいずれかを選択して出力する。バッファ１２４は、リングバス１１０を介して入力されるデータパケットを一時的に保持する。
【００１２】
処理部１３０は、通信部１２０で受信されたデータパケットに含まれるデータについて、パイプライン処理のあるステージの処理を実行する。設定部１４０は、処理部１３０の処理において参照または変更される設定パラメータやデータを保持する。詳細は後述する。
【００１３】
次に、図２（ａ）及び図２（ｂ）を参照して、リングバス１１０上を流れるデータパケットのフィールド構成の例を示す。
【００１４】
本発明に係る通信路は、単一方向に流れる単一のリングバスである。そのため、各モジュール１００で処理される処理データも、各モジュールを設定する設定データ（設定情報）も同一のリングバス１１０上に多重化して送受信される。図２（ａ）において、領域２００は、処理データパケット内のフィールドの構成例を示している。図２（ｂ）において、領域２１０は、設定データパケット内のフィールドの構成例を示している。
【００１５】
図２（ａ）及び図２（ｂ）において、コマンドタイプＴフィールド２０６は、コマンドタイプである。受信部１２１は、このコマンドタイプＴフィールド２０６が保持する値を判別し、処理データであればそれを処理部１３０に送信するように制御し、設定データであればそれを設定部１４０に送信するように制御する。
【００１６】
図２（ａ）を参照して、領域２００に示す処理データパケットについて説明する。Ｖａｌｉｄフラグ２０１（第１のフラグ）は、パケットが有効／無効であることを示す。Ｓｔａｌｌフラグ２０２（第２のフラグ）は、パケットを受信せずに保留したことを示す。接続ＩＤ（第１の識別子）２０３は、リンクバス上に接続される複数のモジュール１００の論理的な接続関係（パケットの送信元となる送信モジュールとパケットの受信先となる受信モジュールとの論理的な接続関係を決定するための識別子）を識別する。尚、接続ＩＤ２０３は各モジュールが一連のパイプライン処理の各ステージの処理を実現する際の処理順序に対応している。カウント（Ｃｏｕｎｔ）値（第２の識別子）２０４は、データの送信順を示す。データ（ＤＡＴＡ）フィールド２０５は、処理対象のデータである。各モジュールは、Ｖａｌｉｄフラグ２０１、接続ＩＤ２０３、カウント値２０４に基づいて受信したパケットから処理対象のデータを抽出する。
【００１７】
次に、図２（ｂ）を参照して、領域２１０に示す設定データパケットについて説明する。Ｖａｌｉｄフラグ２１１は、パケットが有効であることを示す。Ｓｔａｌｌフラグ２１２は、パケットが受信保留であることを示す保留ビットである。接続ＩＤ２１３は、リンクバス上に接続される複数のモジュールの論理的な接続関係を識別する。カウント（Ｃｏｕｎｔ）値２１４は、パケットに含まれるデータの送信順を示す。設定先モジュールＩＤフィールド２１５は、設定を適用するモジュール１００を特定する。Ｍｏｄｅフィールド２１６は、設定処理モードを示し、書込（Ｗ）、読出（Ｒ）、または入替（Ｅｘ）のいずれかのモードを示す値（付加情報）を保持する。アドレス（Ａｄｒｅｓｓ）フィールド２１７は、設定データを保持する内部メモリまたはレジスタを特定する。データ（ＤＡＴＡ）フィールド２１８は、処理対象の設定データであり、ＭＯＤＥフィールド２１６により示されるモードに応じて以下のような意味を有する。
【００１８】
書込（Ｗ）モードにおいては、書き込まれるデータを保持する。読出（Ｒ）モードにおいては、設定先モジュールＩＤで識別されるモジュール１００に到達するまでは無効なデータを保持する。そして、モジュール１００において読出処理を行った後は、内部メモリまたはレジスタの、アドレスフィールド２１７によって指定されたアドレスに格納されるデータを保持する。
【００１９】
入替（Ｅｘ）モードにおいては、設定先モジュールＩＤで識別されるモジュール１００に到達するまでは、アドレスフィールド２１７で指定されるアドレスに書き込むデータを保持する。そして、モジュール１００で設定処理を行った後は、アドレスフィールド２１７で指定されるアドレスに、書込を行う直前に保持されていたデータを読み出したものを保持する。
【００２０】
このようなデータパケットのフィールド構成により、単一方向に流れる単一のリングバス（バス接続）のみを用いてコマンド（設定データ）とデータを通信するシステムを構成することができるため、モジュール間の結線等を最小限に抑えることができる。
【００２１】
次に、図３を参照して、個々のモジュールを接続してリングバス１１０を構成した際の構成例について説明する。ターミナルモジュール３１０（以下、「モジュールＡ」とも称する）は、外部のデータバスとの接続である外部入力Ｉ／Ｆ３６０を介して外部からデータを入力する。そして、リングバス１１０上にある他のモジュールにおいて処理が終了したデータを外部データバスとの接続である外部出力Ｉ／Ｆ３５０を介して外部に出力する。
【００２２】
モジュール３２０（以下、「モジュールＢ」とも称する）、モジュール３３０（以下、「モジュールＣ」とも称する）、及びモジュール３４０（以下、「モジュールＤ」とも称する）は、リングバス１１０に接続されたモジュールである。モジュール毎に異なる処理を行ってもよく、いくつかのモジュールで同じ処理を行ってもよい。また、ここには４つのモジュールによって構成されるリングバス１１０を例示しているが、リングバス１１０を構成するモジュールの数には特に制限はなく、より多くのモジュールまたはより少ないモジュールを用いてリングバス１１０を構成してもよい。
【００２３】
このようなリングバス１１０の構成により、接続順序とは異なる順序でデータパケットを巡回させ、モジュールによるデータ処理を実行することが可能である。例えば、モジュールＡ、モジュールＤ、モジュールＣ、モジュールＢの順に処理を行う場合を考える。
【００２４】
モジュールＡの送信ＩＤ３１１とモジュールＤの受信ＩＤ３４２（参照情報）に同じ接続ＩＤ値“１”を設定する。モジュールＤの送信ＩＤ３４１とモジュールＣの受信ＩＤ３３２に同じ接続ＩＤ値“３”を設定する。モジュールＣの送信ＩＤ３３１とモジュールＢの受信ＩＤ３２２に同じ接続ＩＤ値“４”を設定する。モジュールＢの送信ＩＤ３２１とモジュールＡの受信ＩＤ３１２に同じ接続ＩＤ値“８”を設定する。このように設定することによって、モジュールの論理的な接続関係（処理順序）の指定を行うことができる。
【００２５】
処理データは、この設定に従って各モジュールで処理されながら、リングバス１１０上をモジュールＡ→モジュールＤ→モジュールＣで１周、モジュールＣ→モジュールＢで１周、最後にモジュールＢ→モジュールＡで１周して出力される。
【００２６】
このような状況において、あるモジュールが処理中であるときに次のパケットが到達すると、モジュールは処理できないことがある。その場合は、受信したパケットをモジュール内に取り込まず、パケットのＳｔａｌｌフラグ２０２またはＳｔａｌｌフラグ２１２を「有効」に変更してリングバス１１０に送信する。当然、モジュールの処理速度よりも早くパケットを次々とリングバス１１０上に投入すると、Ｓｔａｌｌフラグ２０２またはＳｔａｌｌフラグ２１２が有効であるパケットでリングバス１１０が埋め尽くされてしまい、その後、パケットを投入できなくなる。これはいずれの処理中のモジュールでも同じことであるため、処理済のパケットもリングバス１１０に投入できなくなり、入力も出力もできないいわゆるデッドロック状態となってしまう。後述する設定データ（設定コマンド）においても、設定データの処理速度に見合った間隔でパケットを投入しなければ、デッドロック状態となる可能性がある。
【００２７】
図４を参照して、本発明に係る情報処理装置４２０を配置するシステムの構成例をについて説明する。システム制御部４００は、ＣＰＵ４０１と、ＲＯＭ４０２と、ＲＡＭ４０３と、外部記憶装置４０４とを備える。ＣＰＵ４０１は、各種の演算制御を実行する。ＲＯＭ４０２は、固定データやプログラムを格納する。ＲＡＭ４０３は、データの一時保存やプログラムのロードに使用される。外部記憶装置４０４は、外部データを記憶して保持する。
【００２８】
データ入力部４１０は、処理すべきデータをシステムの外部から入力する。データ入力部４１０は、例えば、イメージスキャナ及びＡ／Ｄ変換器等のデバイスによって構成される画像読込装置、または、マイク及びＡ／Ｄ変換等のデバイスによって構成される音声入力装置であってもよい。情報処理装置４２０は、本発明に係る情報処理装置である。
【００２９】
データ出力部４３０は、システムにおいて処理済のデータを外部に出力する。データ出力部４３０は、例えば、画像データを印刷ドットパターンに変換して出力するプリンタデバイスを含む画像出力装置、または、音声データをＤ／Ａ変換器等のデバイスを通して出力する音声出力装置であってもよい。
【００３０】
データ入力部４１０に入力されたデータは、システム制御部４００に送信されてＣＰＵ４０１によって処理されてもよいし、そのままＲＡＭ４０３や外部記憶装置４０４に一時記憶されてもよい。また、情報処理装置４２０は、データ入力部４１０から入力データを直接受信して処理を行ってもよく、システム制御部４００からの指示によって、一旦、ＲＡＭ４０３に蓄積されたデータを読み出して処理を行ってもよい。同様に、情報処理装置４２０からの出力は、再度、システム制御部４００に送信されてもよいし、直接データ出力部４３０に送信されて出力処理が実行されてもよい。情報処理装置４２０は、システム制御部４００の制御によって、様々なデータ処理内容が設定され、処理データが供給されて動作する。
【００３１】
図５（ａ）を参照して、図１における受信部１２１の構成例について説明する。受信部１２１は、受信ＩＤ部５０１と、第１の受信用カウンタである受信用カウンタ５０２と、比較部５０３と、コマンド解析部５０４と、送信ＩＤ５０５とを備える。
【００３２】
受信ＩＤ部５０１は、設定部１４０が保持する受信ＩＤを参照する。比較部５０３は、リングバス１１０上のパケットのＶａｌｉｄフラグ２０１、接続ＩＤ２０３、及びカウント値２０４と、受信ＩＤ部５０１、及び受信用カウンタ５０２とを比較する。パケットのＶａｌｉｄフラグ２０１が有効であり、接続ＩＤ２０３が受信ＩＤ部５０１と一致し、かつ、カウント値２０４と受信用カウンタ５０２が生成する値とが一致する場合、比較部５０３はリングバス１１０のパケットを受信すると判定する。つまり、自モジュールでパケットの受信を実行し、それを処理する。
【００３３】
尚、カウント値２０４は、少なくとも前記リングバス上に同時に存在しうるパケット数Ｍ以上の数値を表現できるビット数に限定したカウント値を保持可能とする。ここで、リングバス上に同時に存在しうるパケットは、処理順序や保留等の制御により、必ずしも処理される順序で巡回しているわけではない。保留が発生した場合等は、リングバス上に存在する全てのバッファにデータパケットが記録された状態で巡回する可能性があるが、この際にもデータの順序を間違いなく識別する必要がある。よって、例えば、４０個のデータパケットがリングバス上に同時に存在しうる場合は、４０を超える２のべき乗―１の値を表現できるビット数すなわち６ビットが必要十分なビット数となる。
【００３４】
比較部５０３によりリングバス１１０のパケットを受信すると判定された場合、比較部５０３はコマンド解析部５０４にパケットを出力するとともに、有効なパケットであるという判定を受信用カウンタ５０２に通知する。そして、この通知を受けて、受信用数列生成部である受信用カウンタ５０２は、特定の規則に従う受信用数列上の次の値を生成する。さらに、パケットを受信したことでバッファ１２４に保持されるパケットのＶａｌｉｄフラグ２０１をリセットして、該パケットを空パケットへと変更する。
【００３５】
コマンド解析部５０４は、比較部５０３から出力されたパケットのコマンドタイプＴフィールド２０６を参照する。そして、これが処理データである場合には、コマンド解析部５０４は、結線５０６を介して、処理部１３０へパケットのデータフィールド２０５を出力する。一方、これが設定データである場合には、コマンド解析部５０４は、結線５０７を介して、設定部１４０へ、Ｍｏｄｅフィールド２１６、アドレスフィールド２１７、及びデータフィールド２１８を出力する。
【００３６】
但し、処理部１３０もしくは設定部１４０が処理中や受信済の待機データフル状態である等の理由で受信したデータの処理を行えない状況である場合には、上記の受信判定が行われていても受信を行わない。そして、バッファ１２４に保持されているリングバス１１０上のパケットのＳｔａｌｌフラグ２０２をセットする。その後、このパケットは次のモジュールへとそのまま送信され、後に再び受信判定されるまでリングバス１１０上を周回する。
【００３７】
更に、受信したパケットの接続ＩＤ２０３が、自モジュールの送信時に付加する送信ＩＤ５０５と等しく、かつ、Ｓｔａｌｌフラグ２０２がたっていない場合、バッファ１２４に保持されているリングバス１１０上のパケットのＶａｌｉｄフラグ２０１を落とす。これにより、そのパケットを無効化（消去）する。
【００３８】
次に、図５（ｂ）を参照して、図１における送信部１２２の構成例について説明する。送信部１２２は、送信ＩＤ部５１１と、第１の送信用カウンタである送信用カウンタ５１２と、出力制御部５１４と、パケット生成部５１５を備える。
【００３９】
送信ＩＤ部５１１は、結線５１７を介して設定部１４０が保持する送信ＩＤを参照する。パケット生成部５１５は、結線５１９を介して処理部１３０から出力される処理済のデータと、送信ＩＤ部５１１が保持する送信ＩＤと、送信用数列生成部である送信用カウンタ５１２が特定の規則に従って生成した送信用数列の値とから、送信パケットを生成する。そして、パケット生成部５１５は、セレクタ１２３に対してそのパケットを出力する。
【００４０】
または、パケット生成部５１５は、結線５１８を介して設定部１４０から出力される設定データと、送信ＩＤ部５１１が保持する送信ＩＤと、送信用カウンタ５１２が生成する値とから、送信パケットを生成する。そして、パケット生成部５１５は、セレクタ１２３に対してパケットを出力する。
【００４１】
出力制御部５１４は、バッファ１２４に格納されているパケットが有効であるかどうかを判定し、有効である場合にはパケットの出力を抑制するようにパケット生成部５１５に対して通知する。それとともに、出力制御部５１４は、結線５１６を介して処理部１３０に対し処理結果データの出力を抑制するように通知する。
【００４２】
一方で、出力制御部５１４は、バッファ１２４に格納されているパケットが無効である場合は、モジュールの出力を送信可能であるため、パケット生成部５１５に対してパケット生成出力を指示する。それとともに、出力制御部５１４は、結線５１６を介して処理部１３０に対し処理結果データの出力を許可する。
【００４３】
次に、図６（ａ）を用いて、一連の処理順序に従うデータを複数の処理モジュールに分配する動作を説明する。
【００４４】
モジュールＡにおいて外部入力Ｉ／Ｆ３６０から入力されたデータは、モジュールＡの送信接続ＩＤ６１０として“１”を付加したパケットとしてリングバス１１０に送信される。この接続ＩＤ“１”を受信接続ＩＤとして持つのはモジュールＢの受信接続ＩＤ６１２と、モジュールＣの受信接続ＩＤ６１４であるため、これら２つのモジュールは、モジュールＡからのデータを受信して処理する。
【００４５】
その後、モジュールＢ及びモジュールＣはそれぞれ送信接続ＩＤ６１３、６１５に格納されている“３”をつけたパケットに、処理結果データを格納してリングバス１１０に送出する。
【００４６】
ここで、モジュールＤの受信接続ＩＤ６１６は“３”であるため、モジュールＢ及びモジュールＣから送出されたデータを受信して処理を行い、送信接続ＩＤ６１７に格納された“４”を付加してリングバス１１０に送出する。
【００４７】
最後に、接続ＩＤ“４”を付加したデータは、モジュールＡの受信接続ＩＤ６１１と一致するためここで受信され、外部出力Ｉ／Ｆ３５０を介して出力される。
【００４８】
次に、図６（ｂ）を用いて図６（ａ）のデータフローを説明する。
【００４９】
ここでは表記上、丸で示すものが接続を意味し、アークとして丸と丸を繋ぐ線分を処理としている。アーク６２０のモジュールＡの入力処理後に、データは接続“１”（６３０）として送出される。この接続“１”（６３０）には、アーク６２１のモジュールＢとアーク６２２のモジュールＣが繋がっているため、データはこの両方のモジュールで処理された後、いずれも接続“３”（６３１）として送出される。
【００５０】
次に、アーク６２３のモジュールＤがこの接続“３”（６３１）のデータを処理して接続“４”（６３２）として出力し、最後にアーク６２４のモジュールＡの出力処理がこれを受けて、出力を行うというデータフローである。
【００５１】
ところが、ここで、並列処理の目的を振り返ると、モジュールＢとモジュールＣが共にモジュールＡの出力データのすべてを同じように処理することには意味がない。モジュールＢとモジュールＣが同じ機能を持つ処理である場合、このように並列化することで本来は処理性能が２倍になって欲しいからである。
【００５２】
すると、単純にモジュールＡの出力データをモジュールＢ及びモジュールＣが受信して処理するだけでは、２重に同じ処理をしているだけで処理性能が上がらないばかりか、モジュールＤにおいては同じ処理結果データが２倍受信されることになる。その結果、リングバス上のトラフィックも増加してしまう。
【００５３】
このことから、２つの処理モジュールによってデータ処理を並列化する際には、適切なデータの選別を行って、例えば、モジュールＢとモジュールＣが交互に処理を行えるような仕組みの導入が必要であることがわかる。
【００５４】
図７は、論理的なパイプライン処理において分岐点となるモジュールＡ（第１のモジュール）が処理したデータを含む複数のパケットを、並列処理するモジュールＢ、Ｃ（複数の第２のモジュール）の其々が、かわるがわる処理（第１の処理、第２の処理）を実施する様子を示したものである。尚、モジュールＢ、Ｃにより処理されたデータ（処理結果）はモジュールＤ（第３のモジュール）によってかわるがわる処理が実施されるように制御される（カウント値２０４がモジュールＢ、Ｃによって付与される）。
【００５５】
尚、本実施形態においては、かわるがわる処理を実施するモジュールがＢ、Ｃの２つである場合を例示しているが、３つ以上のモジュールで順に処理を実施するように構成してもよい。その場合は、モジュールＤにおいても、それら３つ以上のモジュールが出力するデータを順に受信して処理するように構成される。
【００５６】
以上の制御によるデータの流れを通信部単位で説明する。モジュールＡが第１の通信部でパケットにデータを格納して出力し、モジュールＢの第２の通信部およびモジュールＣの第３の通信部でモジュールＡの処理した複数のデータをかわるがわる取得して処理する。モジュールＤの第４の通信部はモジュールＢとモジュールＣの処理結果を交互に取得することで、分岐したデータの流れを合成する。尚、図６の構成ではモジュールＡ、Ｂ、Ｃ、Ｄの順に物理的に接続しているが、各モジュールの設定が同様であれば、物理的にこの接続順でなくとも、論理的接続に従って同様に処理される。
【００５７】
表７００は、モジュールＡの送信接続ＩＤ７０１（図中では送信ＩＤと略）と、送信時にパケットに順次付加する値からなる送信用数列を特定の規則に従って生成する送信用カウンタ７０２を示している。この表７００では、送信ＩＤは予め設定された値“１”を持ち、送信用数列が０を初期値に＋１（カウントアップ差分値）ずつ増加する値としてデータに付加されていく。このときの出力されるデータに付加されるカウント値を例示したものが７０３である。
【００５８】
次に、表７１０は、モジュールＢの受信接続ＩＤ７１１（図中では受信ＩＤと略）と、受信したパケットに含まれるカウンタ値との一致を確認して受信可否を判定するための受信用カウンタ７１２を示している。この表７１０では、受信接続ＩＤ７１１と合致するＩＤ“１”を持つパケットを受信する際に、０を初期値に＋２ずつ増加する数列を生成してパケット中のカウント値と比較し、合致したものを受信する。従って、モジュールＢではモジュールＡが出力するデータのうち、偶数（第１の属性）のカウント値を持つパケットに含まれるデータのみを取得する。このときに受信するカウント値を持つデータのみを例示したものが７１５である。
【００５９】
同様に、モジュールＣについての表７２０における受信ＩＤ７２１は“１”であり、受信用数列７２２は１を初期値として＋２ずつ増加する数列を生成する。従って、モジュールＣではモジュールＡが出力するデータのうち、奇数（第２の属性）のカウント値を持つパケットに含まれるデータのみを取得する。このときに受信するカウント値を持つデータのみを例示したものが７２５である。
【００６０】
このようにして、モジュールＡの出力データは奇数のカウント値を持つデータと偶数のカウント値を持つデータに分離されてモジュールＢ及びモジュールＣで処理されるため、データの処理が並列化され、２倍の速度で処理が完了することとなる。言いかえると、モジュールＢはｎ（ｎ＝２）で割り切れるカウント値を含むパケットを処理し、モジュールＣはｎ（ｎ＝２）で割り切れないカウント値を含むパケットを処理する。
【００６１】
次に、モジュールＢが処理したデータは、モジュールＢの送信ＩＤ７１３と、送信カウンタ７１４の値を付加されて出力されていく。この表では、送信ＩＤ“３”と、受信用カウンタと同様に０を初期値として＋２ずつ増加する数列の値が付加される。このときに送信されるデータに付加されるカウント値を例示したものが７１６である。
【００６２】
一方で、モジュールＣが処理したデータは、モジュールＣの送信ＩＤ７２３と、送信カウンタ７２４の値を付加されて出力されていく。この表では送信ＩＤ“３”と受信用カウンタと同様に１を初期値として＋２ずつ増加する数列上の値が付加される。このときに送信されるデータに付加されるカウント値を例示したものが７２６である。
【００６３】
こうして出力されたデータは、モジュールＤにおいて、受信ＩＤ７３１の“３”と一致するＩＤを持ち、かつ、モジュールＤの受信用カウンタ７３２が生成する０を初期値として＋１ずつ増加する数列上の値と一致するカウント値を持つデータが受信される。このときに受信されるデータのカウント値を例示したものが７３３である。
【００６４】
このようにして、モジュールＢとモジュールＣから出力される奇数と偶数のカウント値を持つデータは全て、モジュールＤにおいて受信されることで、並列化されたデータ処理が再び一つのデータストリームに集約される。
【００６５】
ところで、このようなデータの並列処理を行う際に、モジュールＢとモジュールＣにおいて処理速度が変動する等で異なる場合、必ずしもモジュールＤに到達するデータがモジュールＤのカウント値の変化と同一の順序となることが保証できない場合がある。
【００６６】
何らかの処理の都合で、モジュールＢの処理時間が長くなってしまったとして、その結果、モジュールＢが２つのデータを出力する間にモジュールＣが３つのデータを出力してしまったとする。この場合、モジュールＤがデータを順序どおりに受け付けるために、モジュールＣから出力されたデータを受信せずに、モジュールＢからのデータを受信する仕組みがなければならない。
【００６７】
図８を用いて、実施形態１におけるデータの送受信の時間軸上の動作を説明する。
【００６８】
８０１は、モジュールＡからリングバスに投入される未処理データ列である。ここでは、一定間隔でデータが順次投入されるケースを仮定しているが、この投入間隔は他の技術によって様々に制御されても良い。
【００６９】
まず、最初に投入されるデータ８０２は送信用数列の初期値“０”を付加して投入される。このデータは、先に図７で説明した仕組みによって、モジュールＢで受信されて処理される（８０３）。本説明において、モジュールＢ及びモジュールＣの処理時間は、基本は４サイクルである場合を例示している。
【００７０】
モジュールＢで処理された後、データ８０４はリングバス１１０上に出力される。ここで、モジュールＣは図７の説明のとおり奇数の値を持つパケットを待っているため、データ８０４を受信しない。従って、データ８０４は次のサイクルでモジュールＤの入力に移動する。
【００７１】
モジュールＤは、図７の説明のとおり、初期値０から始まり＋１ずつ増加する数列上の値に合致するデータを待っているため、データ８０５を受信して処理する。データ８０５はモジュールＤによって処理された後、リングバス１１０を介してモジュールＡから外部へ出力される。
【００７２】
次に、モジュールＡから投入されるデータ８０６は、カウント値として“１”を付加されている。モジュールＢは偶数のカウント値を待っているため、“１”を持つデータ８０６は受信しない。
【００７３】
データ８０６は次のサイクルにモジュールＣの入力に移動する（データ８０７）。ここで、モジュールＣは奇数のカウント値のデータを待っているため、“１”を持つデータ８０７を受信し処理を行う（８０８）。処理後のデータは再び“１”が付加されてモジュールＣから出力される（データ８０９）。
ここで、モジュールＤは、すでに“０”を持つデータ８０５を受信しているため、次のカウント値“１”を待っている。従って、上記で出力されたデータ８０９を受信して処理する。
【００７４】
ここまで示した動作により、各々４サイクルの処理時間を必要とするモジュールＢ及びモジュールＣを並列に使用することで、モジュールＤにおけるデータ入力間隔は２サイクルとなっている。このことから、並列実行によって処理性能が向上する。
【００７５】
以上説明したように、実施形態１によれば、２つの処理モジュールによってデータ処理を並列化する際には、適切なデータの選別を行って、２つの処理モジュールが交互に処理を行う。これにより、データの処理が並列化され、２倍の速度で処理を完了することができる。
【００７６】
つまり、モジュール内の受信カウンタの初期値とカウントアップ値を指定できるようにするだけで、Ｎ個の同機能のモジュールを有効に使って処理速度をＮ倍にすることが可能となる。例えば、実施形態１では、２つの同機能のモジュールそれぞれを、奇数番目のデータ処理と偶数番目のデータ処理に振り分けることで分散処理を行わせ、見かけ上２倍の速度で処理させることが可能となる。
【００７７】
（実施形態２）
次に、本発明における実施形態２について説明する。
【００７８】
実施形態１の図８にて説明した動作において、モジュールＡから出力される次のデータ８１０が、モジュールＢにおいて、例えば、処理時間が通常の倍かかってしまった場合、データ入力の遅滞が発生する。これは、例えば、モジュール内部のメモリアクセスの競合やその他共有リソースの排他制御等により、処理中に待ち時間が生じる等の理由により一般的に起こりうる事象である。
【００７９】
この場合にも好適に動作させるための構成について、引き続き図８を用いて説明する。
【００８０】
この場合、次に、モジュールＡから出力されるデータ８１３がモジュールＣで処理されて（８１４）出力されるタイミング（データ８１５）よりも、モジュールＢで処理されて（８１１）出力されるデータ８１２がモジュールＤに到達するタイミング（データ８１７）が後になってしまう。
【００８１】
例えば、これらのデータが画像データである場合、このような順序で到達したデータを到達した順序で処理して出力してしまうと、画像データの位置逆転がおきてしまうことになり、画質劣化（画像破壊）が起きてしまう。
【００８２】
こうしたことから、処理時間が不意に変動した場合でも、出力データの順序を変えないようにする仕組みが必要である。
【００８３】
実施形態２においては、このような場合、次のような動作を行うことで処理順序を保証する。
【００８４】
データ８１５が到達した段階で、モジュールＤは、先に“０”と“１”を持つデータを処理しているため、次は“２”を持つデータを待っている。しかし、先に到達するのは“３”を持つデータ８１５であるため、これは先に図５（ａ）において説明した受信条件を満たさないため、受信されない。
【００８５】
この場合は、データ８１５の保留ビットを立ててそのままリングバス１１０上を周回させる。よって、データ８１５は保留ビットを立てられて、モジュールＤ（データ８１６）からモジュールＡへと受け渡される（データ８１８）。その後、モジュールＡ、モジュールＢ、モジュールＣは共にこのデータと受信ＩＤが一致しないためにスルーされ、再びモジュールＤに戻ってくる。
【００８６】
この間に、モジュールＢが処理したデータ８１７がモジュールＤに到達する。このデータ８１７が保持するカウント値は“２”であり、モジュールＤが待っている値であるため、受信されて処理される。
【００８７】
その後、周回してきたデータ８１９がモジュールＤに到達した際には、モジュールＤが待つカウント値は＋１されて“３”となっているため、データ８１９は受信されて処理される。
【００８８】
以上説明したように、実施形態２によれば、実施形態１で説明した効果に加えて、保留による周回制御によって、処理遅延等の要因によってデータ到達が遅れた場合にも、処理順序を正しく保つことができる。
【００８９】
（実施形態３）
本発明の実施形態３を図９を用いて説明する。
【００９０】
ここでは、１ラインの入力画像９０３からフィルタ処理された間引き画像９０４を生成する処理を例示する。
【００９１】
実施形態３においては、先に示した実施形態とは異なり、並列処理を行うモジュールＢとモジュールＣにおいて入力データ量と出力データ量が異なるところに注目する。
【００９２】
図１３に実施形態３において例示する処理の概念図を示す。
図示する通り、モジュールＢ並びにモジュールＣは、連続する３画素に予め指定されたフィルタ係数をかけることで間引き画像を形成する処理を行うものとする。即ち、入力画素１３００に示す丸数字１〜５に対し、３画素ずつ係数ａ，ｂ，ｃをかけて加算するフィルタ処理を行い、１３０１に示す出力画素Ａ〜Ｅを出力する。従って、最初の出力Ａを得るためには、入力として“０”、“１”、“２”の３画素が必要であり、次の出力Ｂを得るためには、“２”、“３”、“４”の３画素が必要となる。
【００９３】
この場合、この処理をモジュールＢとモジュールＣで交互に行うとすると、モジュールＢとモジュールＣは、ともに２画素ずつ重複しながら全ての入力画素をフィルタ処理で使用することから、入力についてはモジュールＡが出力する全ての画素を入力する場合を例に取る。このようにするためには、受信用カウンタは０を初期値として＋１ずつ増加する単純なカウンタを用いることが可能である。言うまでもないが、例えば、モジュールＢは初期値０から＋１ずつ加算しモジュールＣでは初期値１から＋１ずつ加算するなど、やや複雑な受信用カウンタを行うことで、出力に必要な入力データのみを受信するように構成しても良い。
【００９４】
このようにして、入力データを全て受信しながら、出力画素の算出においては、モジュールＢは、まず、入力画素の“０”、“１”、“２”が入力された時点でフィルタ演算を行ってＡを出力する。また、モジュールＣは、まず、入力画素の“２”、“３”、“４”が入力された時点でフィルタ演算を行ってＢを出力する。そして、このモジュールＢによる動作とモジュールＣによる動作を、交互に行って続くＣ〜Ｅを出力していく。
【００９５】
このような画像処理例において、表９００は、モジュールＡの送信接続ＩＤ９０１（図中では送信ＩＤと略）と、送信時にパケットに順次付加する送信用カウンタ９０２を示している。この表９００では、送信ＩＤは予め設定された値“１”を持ち、送信用カウンタが０を初期値に＋１ずつ増加する値としてデータに付加されていく。
【００９６】
このときの出力されるデータに付加されるカウント値を例示したものが９０３である。
【００９７】
次に、表９１０は、モジュールＢの受信接続ＩＤ９１１（図中では受信ＩＤと略）と受信したパケットに含まれるカウンタ値との一致を確認して受信可否を判定するための受信用カウンタ９１２を示している。この表９１０では、受信接続ＩＤ９１１と合致するＩＤ“１”を持つパケットを受信する際に、０を初期値に＋１ずつ増加する値を生成してパケット中のカウント値と比較し、合致したものを受信する。モジュールＡの送信用カウンタとモジールＢの受信用カウンタが全く同じ数列となるため、このときにモジュールＢが受信するデータは、モジュールＡが出力するデータの全てとなる。
【００９８】
同様に、モジュールＣについての表９２０における受信ＩＤ９２１は“１”であり、受信用カウンタ９２２は０を初期値として＋１ずつ増加する値を生成する。モジュールＡの送信用カウンタとモジュールＣの受信用カウンタも全く同じ数列となるため、このときにモジュールＣが受信するデータも、モジュールＡが出力するデータの全てとなる。
【００９９】
次に、モジュールＢが処理したデータは、モジュールＢの送信接続ＩＤ９１３（図中では送信ＩＤと略）と、送信用カウンタ９１４の値を付加されて出力されていく。この表９１０では、送信ＩＤ“３”と、受信用カウンタ９１２と同様に０を初期値として＋２ずつ増加する値が付加される。このときに送信されるデータに付加されるカウント値を例示したものが９１５である。
【０１００】
一方で、モジュールＣが処理したデータは、モジュールＣの送信ＩＤ９２３と、送信用カウンタ９２４の値を付加されて出力されていく。この表９２０では、送信ＩＤ“３”と受信用カウンタ９２２と同様に１を初期値として＋２ずつ増加する値が付加される。このときに送信されるデータに付加されるカウント値を例示したものが９２５である。
【０１０１】
こうして出力されたデータは、モジュールＤにおいて、受信ＩＤ９３１“３”と一致するＩＤを持ち、かつ、モジュールＤの受信用カウンタ９３２が生成する０を初期値として＋１ずつ増加する値と一致するカウント値を持つデータが受信される。このときに受信されるデータのカウント値を例示したものが９３３である。
【０１０２】
このようにして、モジュールＢとモジュールＣから出力される奇数と偶数のカウント値を持つデータは全て、モジュールＤにおいて受信されることで、並列化されたデータ処理が再び一つのデータストリームに集約される。
【０１０３】
図１０を用いて、実施形態３におけるデータの送受信の時間軸上の動作を説明する。
【０１０４】
１００１は、モジュールＡからリングバス１１０に投入される未処理データ列である。ここでは、一定間隔でデータが順次投入されるケースを仮定しているが、この投入間隔は他の技術によって様々に制御されても良い。
【０１０５】
まず、最初に投入されるデータ１００２は送信用カウンタの初期値“０”を付加して投入される。このデータは先に図９で説明した仕組みによって、モジュールＢで受信される。
【０１０６】
ところで、図９で示したとおり、モジュールＢが受信したデータは、モジュールＣでも受信されなければならない。従って、モジュールＢは、受信時にデータパケットを無効としない設定を予め行っておき、受信したデータ１００２を消去せずにそのままモジュールＢから出力する（データ１００３）。このようにして、モジュールＡから出力されるデータ群１００１は、モジュールＢとモジュールＣの両方に順次受信される。
【０１０７】
実施形態３において、モジュールＢ及びモジュールＣの処理時間は、基本は、例えば、３画素の読出とフィルタ演算にそれぞれ２サイクルとして、８サイクルであった場合を例示する。
【０１０８】
モジュールＢは、最初に出力するデータ１００８を得るためのフィルタ処理に必要なデータ１００４を受信したところから処理１００５を開始し、８サイクル後にデータ１００８をリングバス１１０に出力する。データ１００８はＩＤとして“３”を持つため、受信ＩＤ“１”を待つモジュールＣは受信しない。よって。そのままスルーされてモジュールＤに到達する（データ１００９）。
【０１０９】
モジュールＤは、図９の説明のとおり、初期値０から始まり＋１ずつ増加する値に合致するデータを待っているため、データ１００９を受信して処理する。データ１００９はモジュールＤによって処理された後、データ１０１０として出力され、リングバス１１０を介してモジュールＡから外部へ出力される。
【０１１０】
一方で、モジュールＣは、最初に出力するデータ１０１１を得るためのフィルタ演算処理に必要なデータ１００６を受信したところで処理１００７を開始し、８サイクル後にデータ１０１１を出力する。この時、モジュールＣには予め先頭の２画素を無視する設定をするなどして、モジュールＢとの処理範囲をずらす設定を行う仕組みを持たせておくことで、交互に処理結果を得ることができる。
【０１１１】
ここで、モジュールＤは、すでに“０”を持つデータ１００９を受信しているため、数列上の次の値“１”を待っている。従って、上記で出力されたデータ１０１１を受信して処理する。データ１０１１はモジュールＤによって処理された後、データ１０１２として出力され、リングバス１１０を介してモジュールＡから外部へ出力される。
【０１１２】
ここまで示した動作により、各々８サイクルの処理時間を必要とするモジュールＢ及びモジュールＣを並列に使用することで、モジュールＤにおけるデータ入力間隔は４サイクルとなっている。このことから、並列実行によって処理性能が向上する。
【０１１３】
以上説明したように、実施形態３によれば、並列処理を行うモジュールＢとモジュールＣにおいて入力データ量と出力データ量が異なる場合でも、実施形態１と同様の効果を得ることができる。
【０１１４】
（実施形態４）
次に、本発明の実施形態４について説明する。
【０１１５】
実施形態３の図１０にて説明した動作において、例えば、モジュールＢの処理が何らかの要因により遅延してしまった場合、データ入力の遅滞が発生する。この場合にも好適に動作させるための構成について図１１を用いて説明する。
【０１１６】
この場合、モジュールＡが出力するデータ群１１０１について、まず、最初のデータ１１０２が出力されると、モジュールＢにおいて受信される。これと共に、モジュールＢは。このデータ１１０２を受信時に無効化しないモードに予め設定されることで、同じデータをスルーし、モジュールＣに受け渡すことができる（データ１１０３）。
【０１１７】
このように、正常にデータが受信されている場合においては、図１０に示すようにデータフローは正常に処理される。但し、もし、データ１１０４を受信して処理１１０５を開始したあと、この処理１１０５の処理時間が８サイクルを超えてしまった場合などには、あるところでモジュールＢの受信バッファ等が一杯になる等してデータを受信できなくなる場合がありうる。
【０１１８】
ここでは、受信できなかったデータに保留ビットを付加してリングバス１１０上を周回させるため、次へスルーする動作をすることは上述の通りである（データ１１０８）。尚、モジュールＣは、データ１１０６を受信したところで処理１１０７を開始する。
【０１１９】
しかし、実施形態１と異なる設定として、実施形態２ではモジュールＢもモジュールＣも同じデータを受信するようになっていることから、保留ビットを付加されたデータ１１０８は、モジュールＣにおいても受信されてしまう。
【０１２０】
ここで、モジュールＣが、受信時にデータパケットを無効化する設定となっていた場合には、ここでデータ１１０８は消去され、二度とモジュールＢに到達することはなくなってしまうという不具合が生じてしまう。
【０１２１】
こうしたことから、モジュールＢにおいて受信できないケースがありうるとするならば、モジュールＣにおいても受信したデータを消去せずにスルーする（データ１１０９）動作をする設定が必要となる。こうすることで、処理遅延のために読み取れなかったモジュールＢも、データ１１０８を受信することが可能となる。
【０１２２】
しかし、モジュールＢは、受信したデータパケットを無効化しない設定となっているため、今度は、モジュールＢにデータ１１１０が受信された後も、データ１１１１がそのまま出力されてしまう。
【０１２３】
前述のとおり、モジュールＣも受信したパケットを無効化しない設定となっているため、データ１１１２が出力されてしまい、この後、このデータ１１１２がリングバス１１０上を巡回し続けてしまう。全てのデータに対してこのようなことが起きるため、リングバス１１０上のトラフィックは入力データ量に従って増加していき、比較的早い段階でオーバーフローするか、新たなデータ投入ができなくなってデッドロック状態となってしまう。
【０１２４】
こうしたことを防ぐため、さらに別の技術を例示する。
【０１２５】
この技術的課題は、いずれかの方法によってすでにモジュールＢとモジュールＣとが受信済のデータを消去する仕組みを導入することで解決される。
【０１２６】
ここでは、送信したモジュールが、自分が送信時に付加した送信接続ＩＤと同一の接続ＩＤを持つパケットが保留ビットなしの状態で受信された場合に、そのパケットを消去するという処理を導入することで解決する例を示す。
【０１２７】
図１１の例においては、モジュールＡが送信した接続ＩＤ“１”を持つデータが、保留ビットなしの状態で周回してきた際にこれを無効とする。
【０１２８】
但し、これだけでは、図１１のデータ１１１０がモジュールＡによって無効化されてモジュールＢに送信されなくなるため、保留ビットについては、保留ビットを付加したモジュールがそれをおとすという仕組みを導入する必要がある。
【０１２９】
これにより、データ１１１０がモジュールＢで受信されるまでリングバス１１０上を保留ビット付きで周回し、モジュールＢが受信した後は保留ビットなしのデータ１１１１が周回するようにすることができる。
【０１３０】
このデータ１１１１はデータ１１１２の時点でモジュールＡに受信されるため、保留ビットなしで接続ＩＤがモジュールＡの送信接続ＩＤと同一であると判定されて消去される。その結果、データ１１１３は出力されなくなり、受信済のデータの周回によるトラフィックの増加を防ぐことが可能となる。
【０１３１】
ここで発生する更なる問題と、その解決方法を例示する。
【０１３２】
図９で示したとおり、モジュールＢとモジュールＣは両方とも送信接続ＩＤとして“３”を付加して送信パケットを生成する。
【０１３３】
従って、前述した自モジュールの送信接続ＩＤと同一の接続ＩＤを持ち、保留ビットのないパケットを消去する機能によって、モジュールＢの出力がモジュールＣにおいて無効化されてしまい、モジュールＤに受信されずに消去されてしまう。その結果、モジュールＤは、この消去されたデータを待ち続ける間、他のデータを保留にしてしまうため、トラフィックが増大しデッドロックとなってしまう。
【０１３４】
この問題を更に解決するため、各モジュールにおいて、自モジュールの送信接続ＩＤと同一の接続ＩＤを持ち、保留ビットが立っていない有効なパケットを無効にする無効化機能をＯＮ／ＯＦＦすることを予め設定する構成（設定保持部）をさらに持たせる。
【０１３５】
この構成を用いて、モジュールＢについては、これをＯＮし、モジュールＣについてはこれをＯＦＦする。一般的には、並列動作させる複数のモジュールの内、データを送信する前段のモジュール（実施形態４ではモジュールＡ）よりもリング伝送方向上下流にあって、かつ、最も近いモジュール（実施形態４ではモジュールＢ）以外のモジュール（実施形態４ではモジュールＣ）について、無効化機能をＯＦＦするという設定を行う。
【０１３６】
以上説明したように、実施形態４によれば、同一の送信接続ＩＤを持つモジュールを複数配置しても、それらの出力を互いに誤って無効化してしまうことなく、集約ポイントとなるモジュール（実施形態４ではモジュールＤ）に伝送することが可能となる。
【０１３７】
但し、この実施形態４の構成は、上述のように一度並列化のために複数のモジュールに分散処理させたデータを再び一つのモジュールで集約する場合のみ必要な技術であり、分散処理したデータをそのまま別々に出力させる場合には、必須ではない。
【０１３８】
（実施形態５）
本発明の実施形態５を、図１２を用いて説明する。
【０１３９】
一般に、モジュールは、複数の処理においてそれぞれの処理に適した設定を行って使用される。従って、データ処理においては、設定コマンドによる動作パラメータ（設定パラメータ）の設定とデータコマンドによるデータ処理が交互に実行される。
【０１４０】
通常、設定パラメータはモジュール毎に異なるため、受信部１２１においては設定コマンドに含まれる設定先モジュールの指定ＩＤ等を参照して、自モジュールに対する設定である場合のみ、その設定値を受け入れて設定部１４０に送信し保持する。
【０１４１】
例えば、３×３のマトリクス演算処理モジュールの場合、その処理には３×３個のマトリクス係数の設定が必須である。これらのモジュールを並列に実行したい場合、データ処理においては、図７で示したように、モジュールＡが送信したデータをモジュールＢが偶数番目、モジュールＣが奇数番目のデータを交互に受信するよう受信用数列を生成する。しかし、この生成された受信用数列の設定のまま設定コマンドを受信してしまうと、３×３の設定コマンドの内、モジュールＢは偶数番目の係数のみ、モジュールＣは奇数番目の係数のみを受け取って設定することになる。その結果、正しく係数設定が行えないという問題が生じてしまう。
【０１４２】
この問題を解決するため、設定コマンドの受信に際しては、モジュールＢ及びモジュールＣの両方において、０を初期値として＋１ずつ増加する数列を生成させ、モジュールＡが出力する全ての設定コマンドを受信するようにする。一方で、データ処理においては、図７において説明したとおりの数列によって交互に処理を実行するということが必要となる。
【０１４３】
図１２（ａ）は、本発明の実施形態５における受信部の構成を示すものである。図５（ａ）の構成に加え、第２の受信用カウンタであるコマンド受信用カウンタ１２０１とデータ／コマンド識別部１２０２を備える。
【０１４４】
このように、受信したデータが設定コマンドであるとデータ／コマンド識別部１２０２が識別する場合は、コマンド受信用カウンタ１２０１を用いて受信判定を行う。一方、受信したデータが通常のデータであるとデータ／コマンド識別部１２０２が識別する場合には、データ受信用カウンタとして機能する受信用カウンタ５０２が生成した値を用いて受信判定を行う。
【０１４５】
つまり、データ／コマンド識別部１２０２の識別結果に応じて、比較部５０３は、使用する受信用カウンタとして、コマンド受信用カウンタ１２０１とデータ受信用カウンタとして機能する受信用カウンタ５０２とを切り替えて選択する。ここで、データ／コマンド識別部１２０２は第１の識別部として機能し、比較部５０３は第１の選択部として機能する。
【０１４６】
このようにすることで、設定コマンドによって設定を行っている間はコマンド受信用カウンタ１２０１が生成する値を用いて受信判定を行うことで全ての設定コマンドを受信する。そして、設定終了後にデータが転送され始めると、受信用カウンタ５０２を用いて受信判定を行うことで、所望の並列動作が実現できるようになる。
【０１４７】
しかし、そもそも設定コマンドを受信する際には、初期状態からのパラメータ設定が必要なため、設定コマンド用のコマンド受信用カウンタ１２０１を設定コマンドで設定することに手順上の前後関係における矛盾がある。設定コマンドを受信するための設定を事前に行う必要があるためである。
【０１４８】
よって、例えば、コマンド受信用カウンタ１２０１の設定は設定コマンド以外の方法で直接行えるようにする方法が考えられる。あるいは、この受信用数列の生成は、例えば、０を初期値として＋１ずつ増加する単純カウンタとして実装する等の方法もありうる。
【０１４９】
さらに、コマンド受信用カウンタの設定のために更に特殊なコマンド種別を用意し、そのコマンド種別に対しては受信用数列を参照せずに受信判定を行う等の方法が例示できる。
【０１５０】
送信側においても、受信側と同様に、データ送信の場合と設定コマンド送信で数列の生成に違いが生じるため、同様の仕組みが必要となる。
【０１５１】
図１２（ｂ）を用いて、本発明の実施形態５における送信部の構成を示す。図５（ｂ）の構成に加え、第２の送信用カウンタであるコマンド送信用カウンタ１２０３とデータ／コマンド識別部１２０４を備える。
【０１５２】
生成するパケットが設定コマンドであるとデータ／コマンド識別部１２０４が識別する場合は、コマンド送信用カウンタ１２０３が生成する値をパケットに付加する。一方、生成するパケットがデータであるとデータ／コマンド識別部１２０４が識別する場合は、データ送信用カウンタとして機能する送信用カウンタ５１２が生成する値をパケットに付加する。
【０１５３】
つまり、データ／コマンド識別部１２０４の識別結果に応じて、パケット生成部５１５は、使用する送信用カウンタとして、コマンド送信用カウンタ１２０３とデータ送信用カウンタとして機能する送信用カウンタ５１２とを切り替えて選択する。ここで、データ／コマンド識別部１２０４は第２の識別部として機能し、パケット生成部５１５は第２の選択部として機能する。
【０１５４】
このようにすることで、設定コマンドによって設定を行っている間は設定コマンド送信用数列が適用されることで全ての設定コマンドを送信する。そして、設定終了後にデータが転送され始めると、送信用カウンタ５１２を用いて送信パケット生成を行うことで、所望の並列動作が実現できるようになる。
【０１５５】
実際には、設定コマンドは書込コマンドと読出コマンドに大別される。書込コマンドは受信したデータに含まれる設定値を、所定のアドレスに書き込むため１サイクル動作が可能である。一方、読出コマンドは、データに含まれる読出アドレスを発行し、そのアドレスのデータを読み出して出力パケットに格納するため、最低でも２サイクル必要となる。
【０１５６】
このような読出コマンドの処理時間を隠蔽するために複数モジュールを並列に駆動して、交互に読出動作を行わせることによって、見かけ上の読出処理速度を倍にすることが可能となる。
【０１５７】
この場合の送受信数列は、例えば、図７に示したものと同様のものを用いることで実現可能である。
【０１５８】
但し、送信される読出コマンドは、モジュールＢに対するコマンドとモジュールＣに対するコマンドが交互に配置されていなければならないという制約が付くことが、図７から明白である。すなわち、モジュールＢに対する読出コマンドは偶数番目、モジュールＣに対する読出コマンドは奇数番目となるようにコマンド列の並べ替えが必要である。
【０１５９】
このようなコマンドの配列は、モジュールＡの送信時までにできていれば良い。例えば、ソフトウェアによってメモリ上に展開されたモジュールＢ用の読出コマンド列とモジュールＣ用の読出コマンド列を交互に読み取りながらリングバス１１０上にコマンドを送信する。これによって、外部制御ドライバソフトウェアなどからは見えない仕組みを用意しても良い。
【０１６０】
当然のことながら、並列化を指示するのがドライバソフトウェアであれば、ドライバソフトウェア自体がこのようなコマンドの並べ替えを行っても良い。また、こうした並べ替えは、出力側においても同様に有効である。
【０１６１】
以上説明したように、実施形態５によれば、設定コマンドによって設定を行っている間は設定コマンド送信用数列が適用されることで全ての設定コマンドを送信する。そして、設定終了後にデータが転送され始めると、送信用カウンタ５１２を用いて送信パケット生成を行うことで、所望の並列動作を実現することができる。
【０１６２】
尚、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステムまたは装置に供給し、そのシステムまたは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2013196509.tif 000003
【図２】
2013196509.tif 000004
【図３】
2013196509.tif 000005
【図４】
2013196509.tif 000006
【図５】
2013196509.tif 000007
【図６】
2013196509.tif 000008
【図７】
2013196509.tif 000009
【図８】
2013196509.tif 000010
【図９】
2013196509.tif 000011
【図１０】
2013196509.tif 000012
【図１１】
2013196509.tif 000013
【図１２】
2013196509.tif 000014
【図１３】
2013196509.tif 000015