(57)【特許請求の範囲】
【請求項１】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記並列時間を表す値を、前記処理モジュール毎の単位処理に要する時間を示す値のばらつきが大きいほど、小さくなるようにしたデータ処理装置。
【請求項２】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記制御時間を表す値を、連続する２つの処理モジュールの接続形態に応じた係数を各処理モジュール毎に付与し、各処理モジュールに付与した係数を合計した値としたデータ処理装置。
【請求項３】
前記連続する２つの処理モジュールの接続形態が直列接続か、並列接続かに応じて前記係数を異ならせた
請求項２に記載のデータ処理装置。
【請求項４】
更に、前記連続する２つの処理モジュールの接続形態が並列接続の場合において、並列接続されている処理モジュールの数に応じて前記係数を異ならせた
請求項３に記載のデータ処理装置。
【請求項５】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記制御時間を表す値を、前記データ処理手段の処理モジュールの数が多くなるほど、大きくなるようにしたデータ処理装置。
【請求項６】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記制御時間を表す値を、前記データ処理手段の各処理モジュールをスレッドとして起動したときのスレッドのロックの生じる割合が高いほど、大きくなるようにしたデータ処理装置。
【請求項７】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記出力手段は、前記並列時間を示す値が前記制御時間を示す値より大きい場合に、前記並列制御による処理が前記逐次制御による処理より短い時間で終了すると判定し、前記並列時間を示す値が前記制御時間を示す値より小さい場合に、前記並列制御による処理が前記逐次制御による処理より長い時間で終了すると判定するデータ処理装置。
【請求項８】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記出力手段は、前記並列時間を示す値から前記制御時間を示す値を減算した値が、予め定められた閾値より大きい場合に、前記並列制御による処理が前記逐次制御による処理より短い時間で終了すると判定し、前記並列時間を示す値から前記制御時間を示す値を減算した値が、前記予め定められた閾値以下の場合に、前記並列制御による処理が前記逐次制御による処理より長い時間で終了すると判定するデータ処理装置。
【請求項９】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記出力手段は、前記並列時間を示す値と予め定められた第１の閾値とを比較した結果と、前記制御時間を示す値と予め定められた第２の閾値とを比較した結果とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定するデータ処理装置。
【請求項１０】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記出力手段は、前記並列時間を示す値及び前記制御時間を示す値の双方を示す値を、予め定められた値と比較して、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定するデータ処理装置。
【請求項１１】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記並列時間を表す値を、前記各処理モジュールの単位処理に要する時間を示す値、及び前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値、の少なくとも一方を用いて計算し、下記式で表される値ａを、前記並列時間を表す値としたデータ処理装置。
ａ＝前記処理モジュール毎の単位処理に要する時間を示す値の合計×前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値
【請求項１２】
前記データ処理手段の各処理モジュールで行われるデータ処理は、画像データに対する画像処理であり、
下記式で表される値ｂを、前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値とした請求項１１に記載のデータ処理装置。
ｂ＝１-｛処理モジュールの単位処理データ量／（前記データ処理手段の処理対象の画像全体の画像データ量×予め定められた調整値）｝
【請求項１３】
前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値を、処理モジュールの各々で行なわれる画像処理が、画像１面分のデータを処理するページ処理か、画像１面分より少ないライン単位のデータを処理するライン処理かに応じて予め定められた値に設定した
請求項１２に記載のデータ処理装置。
【請求項１４】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記並列時間を表す値を、前記各処理モジュールの単位処理に要する時間を示す値、及び前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値、の少なくとも一方を用いて計算し、
前記処理モジュール毎の単位処理に要する時間を示す値を、前記処理モジュールで実行される特定の演算の数が多いほど、大きくなるようにしたデータ処理装置。
【請求項１５】
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備え、
前記並列時間を表す値を、前記各処理モジュールの単位処理に要する時間を示す値、及び前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値、の少なくとも一方を用いて計算し、
前記処理モジュール毎の単位処理に要する時間を示す値を、前記処理モジュールのプログラムコードの行数が多いほど、大きくなるようにしたデータ処理装置。
【請求項１６】
コンピュータを、
自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において、少なくとも２つの処理モジュールが並列に動作する並列時間を表す値であって、前記処理モジュール毎の単位処理に要する時間を示すばらつきが大きいほど小さくなる値と、各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値と、に基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、複数の命令からなる複合命令を記憶装置から読み出し、読み出した複数の命令を解読し、該命令内の並列実行の可否を示す並列実行情報を参照して、同時実行する命令の集合を決定し、夫々の命令中に指定されたオペレーションを並列して実行する技術が開示されている。
【０００３】
特許文献２には、複数のノードブロックを有する画像処理装置であって、複数のノードブロックのうちのひとつのノードブロックは、画像データ処理部と、画像データの送受を行うノード部と、このノード部と前記画像データ処理部とを接続する共有バスとを有する画像処理装置が開示されている。
【０００４】
特許文献３には、複数の画像処理モジュールとその間に介在されるバッファモジュールがパイプライン形態等で連結された画像処理部の構築にあたり、ユーザからの指示を参照し、必要に応じて画像処理部の動作環境も取得して、並列処理用・逐次処理用の処理管理部を選択的に起動させる技術であって、並列処理用の処理管理部は排他制御機能付きのバッファモジュールを含む画像処理部を構築させると共に、個々の画像処理モジュールで並列に画像処理を行わせ、逐次処理用の処理管理部は排他制御機能無しのバッファモジュールを含む画像処理部を構築させると共に、個々の画像処理モジュールで逐次画像処理を行わせる技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２３６２２７号公報
【特許文献２】特開２００５−３０１８５８号公報
【特許文献３】特開２００８−９６９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、複数の処理モジュールが連結されたデータ処理手段の並列制御による処理が逐次制御よる処理より短い時間で終了するか否かを容易に把握できるデータ処理装置及びプログラムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
請求項１の発明は、自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段を備えたデータ処理装置である。
【０００８】
請求項２の発明は、請求項１に記載のデータ処理装置に、前記出力手段により、前記並列制御による処理が前記逐次制御による処理より短い時間で終了するとの判定結果が出力された場合には、前記並列制御が行われるように制御し、前記出力手段により、前記並列制御による処理が前記逐次制御による処理より長い時間で終了するとの判定結果が出力された場合には、前記逐次制御が行われるように制御する制御手段を更に設けたものである。
請求項３の発明は、請求項１又は請求項２に記載のデータ処理装置において、前記並列時間を表す値を、前記各処理モジュールの単位処理に要する時間を示す値、及び前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値、の少なくとも一方を用いて計算したものである。
請求項４の発明は、請求項３に記載のデータ処理装置において、下記式で表される値ａを、前記並列時間を表す値としたものである。
ａ＝前記処理モジュール毎の単位処理に要する時間を示す値の合計×前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値の各々を乗算した値。
請求項５の発明は、請求項４に記載のデータ処理装置において、前記データ処理手段の各処理モジュールで行われるデータ処理は、画像データに対する画像処理であり、下記式で表される値ｂを、前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値としたものである。
ｂ＝１-｛処理モジュールの単位処理データ量／（前記データ処理手段の処理対象の画像全体の画像データ量×予め定められた調整値）｝。
請求項６の発明は、請求項５に記載のデータ処理装置において、前記処理モジュールの各々における前段の処理モジュールの処理結果の必要データ量を示す値を、処理モジュールの各々で行なわれる画像処理が、画像１面分のデータを処理するページ処理か、画像１面分より少ないライン単位のデータを処理するライン処理かに応じて予め定められた値に設定したものである。
請求項７の発明は、請求項３〜請求項６のいずれか１項記載のデータ処理装置において、前記処理モジュール毎の単位処理に要する時間を示す値を、前記処理モジュールで実行される特定の演算の数が多いほど、大きくなるようにしたものである。
請求項８の発明は、請求項３〜請求項７のいずれか１項記載のデータ処理装置において、前記処理モジュール毎の単位処理に要する時間を示す値を、前記処理モジュールのプログラムコードの行数が多いほど、大きくなるようにしたものである。
請求項９の発明は、請求項１〜請求項８のいずれか１項記載のデータ処理装置において、前記並列時間を表す値を、前記処理モジュール毎の単位処理に要する時間を示す値のばらつきが大きいほど、小さくなるようにしたものである。
請求項１０の発明は、請求項１〜請求項９のいずれか１項記載のデータ処理装置において、前記制御時間を表す値を、連続する２つの処理モジュールの接続形態に応じた係数を各処理モジュール毎に付与し、各処理モジュールに付与した係数を合計した値としたものである。
請求項１１の発明は、請求項１０に記載のデータ処理装置において、前記連続する２つの処理モジュールの接続形態が直列接続か、並列接続かに応じて前記係数を異ならせたものである。
請求項１２の発明は、請求項１１に記載のデータ処理装置において、更に、前記連続する２つの処理モジュールの接続形態が並列接続の場合において、並列接続されている処理モジュールの数に応じて前記係数を異ならせたものである。
請求項１３の発明は、請求項１〜請求項１２のいずれか１項記載のデータ処理装置において、前記制御時間を表す値を、前記データ処理手段の処理モジュールの数が多くなるほど、大きくなるようにしたものである。
請求項１４の発明は、請求項１〜請求項１３のいずれか１項記載のデータ処理装置において、前記制御時間を表す値を、前記データ処理手段の各処理モジュールをスレッドとして起動したときのスレッドのロックの生じる割合が高いほど、大きくなるようにしたものである。
請求項１５の発明は、請求項１〜請求項１４のいずれか１項記載のデータ処理装置において、前記出力手段は、前記並列時間を示す値が前記制御時間を示す値より大きい場合に、前記並列制御による処理が前記逐次制御による処理より短い時間で終了すると判定し、前記並列時間を示す値が前記制御時間を示す値より小さい場合に、前記並列制御による処理が前記逐次制御による処理より長い時間で終了すると判定するものである。
請求項１６の発明は、請求項１〜請求項１４のいずれか１項記載のデータ処理装置において、前記出力手段は、前記並列時間を示す値から前記制御時間を示す値を減算した値が、予め定められた閾値より大きい場合に、前記並列制御による処理が前記逐次制御による処理より短い時間で終了すると判定し、前記並列時間を示す値から前記制御時間を示す値を減算した値が、前記予め定められた閾値以下の場合に、前記並列制御による処理が前記逐次制御による処理より長い時間で終了すると判定するものである。
請求項１７の発明は、請求項１〜請求項１４のいずれか１項記載のデータ処理装置において、前記出力手段は、前記並列時間を示す値と予め定められた第１の閾値とを比較した結果と、前記制御時間を示す値と予め定められた第２の閾値とを比較した結果とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定するものである。
請求項１８の発明は、請求項１及び請求項２に記載のデータ処理装置において、前記並列時間を示す値を求めるためのパラメータと、前記制御時間を示す値を求めるためのパラメータと、を共通のパターメータとしたものである。
請求項１９の発明は、請求項１及び請求項２に記載のデータ処理装置において、前記出力手段は、前記並列時間を示す値及び前記制御時間を示す値の双方を示す値を、予め定められた値と比較して、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定するものである。
【０００９】
請求項２０の発明は、コンピュータを、自モジュールの前段からデータを取得し、取得したデータに予め定められたデータ処理を行い、当該データ処理を経たデータ又は前記データ処理の処理結果を自モジュールの後段へ出力する機能を各々備え、実行するデータ処理又は内容が互いに異なる複数種の処理モジュールが連結されて構成されるデータ処理手段の各処理モジュールで互いに並列にデータ処理が行われるように並列制御する場合において少なくとも２つの処理モジュールが並列に動作する並列時間を表す値と各処理モジュールでデータ処理が逐次に行われるように逐次制御する場合には必要ないが前記並列制御する場合には必要な処理に要する制御時間を表す値とに基づいて、前記データ処理手段の前記並列制御による処理が前記逐次制御による処理より短い時間で終了するか否かを判定し、該判定結果を出力する出力手段として機能させるためのプログラムである。
【発明の効果】
【００１０】
請求項１に記載の発明は、複数の処理モジュールが連結されたデータ処理手段の並列制御による処理が逐次制御による処理より短い時間で終了するか否かを容易に把握できる。
【００１１】
請求項２に記載の発明は、ユーザの手を煩わせることなく、データ処理手段の並列制御による処理が逐次制御による処理より短い時間で終了するか否かの判定結果に応じて、並列処理による処理又は逐次制御による処理を実行させることができる。
【００１２】
請求項２０に記載の発明は、複数の処理モジュールが連結されたデータ処理手段の並列制御による処理が逐次制御による処理より短い時間で終了するか否かを容易に把握できる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態に係るコンピュータ（画像処理装置）の概略構成を示すブロック図である。
【図２】選択起動部の機能的な構成を示すブロック図である。
【図３】画像処理部の構成例を示すブロック図である。
【図４】(Ａ)は画像処理モジュール、(Ｂ)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。
【図５】書込対象の画像データが複数の保管用単位バッファ領域に跨る場合を説明する概略図である。
【図６】読出対象の画像データが複数の保管用単位バッファ領域に跨っていた場合を説明する概略図である。
【図７】画像処理モジュールの制御部によって実行される画像処理モジュール制御処理の内容を示すフローチャートである。
【図８】並列処理管理部のワークフロー管理部によって実行される並列制御処理の内容を示すフローチャートである。
【図９】画像処理部における画像処理の流れを説明する概略図である。
【図１０】逐次処理管理部のワークフロー管理部によって実行されるブロック単位逐次制御処理の内容を示すフローチャートである。
【図１１】画像処理部の構築から画像処理の実行に至る一連の処理を説明するためのシーケンス図である。
【図１２】画像処理モジュールの連結例を示す図である。
【図１３】画像処理部の並列処理性能判定を説明する説明図である。
【図１４】画像処理部の並列処理性能判定を説明する説明図である。
【図１５】逐次処理管理部のワークフロー管理部によって実行される面単位逐次制御処理の内容を示すフローチャートである。
【図１６】画像処理部の構成の他の例を示すブロック図である。
【図１７】選択起動部の他の例を示すブロック図である。
【図１８】画像処理部の構築から画像処理の実行に至る一連の処理を説明するためのシーケンス図の他の例である。
【図１９】他の実施の形態に係るデータ処理装置としてのコンピュータの概略構成を示すブロック図である。
【図２０】データ処理部の構築から演算処理の実行に至る一連の処理を説明するためのシーケンス図である。
【図２１】並列処理性能判定の具体例を説明する説明図である。
【図２２】並列処理性能判定の具体例を説明する説明図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図１には、本発明に係るデータ処理装置を兼ねた画像処理装置として機能することが可能なコンピュータ１０が示されている。なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００１５】
コンピュータ１０はＣＰＵ１２、メモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２及び画像出力部２４を備えており、これらはバス２６を介して互いに接続されている。コンピュータ１０が上述した画像取扱機器に組み込まれている場合、表示部１６や操作部１８としては、画像取扱機器に設けられたＬＣＤ等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ１０が独立したコンピュータである場合、表示部１６や操作部１８としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【００１６】
また、画像データ供給部２２は処理対象の画像データを供給できるものであればよく、例えば紙や写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）等を適用することができる。また、画像出力部２４は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部２４は画像処理を経た画像データを単に記憶する画像記憶部（メモリ１４又は記憶部２０）であっても構わない。
【００１７】
図１に示すように、記憶部２０には、ＣＰＵ１２によって実行される各種のプログラムとして、メモリ１４等のリソースの管理やＣＰＵ１２によるプログラムの実行の管理、コンピュータ１０と外部との通信等を司るオペレーティングシステム３０のプログラム、コンピュータ１０を画像処理装置として機能させるための画像処理プログラム群３４、ＣＰＵ１２が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション３２のプログラム（図１ではアプリケーションプログラム群３２と表記）が各々記憶されている。
【００１８】
画像処理プログラム群３４は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、ＰＣ等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、ＰＣ等の各種機器（プラットフォーム）で共通に使用可能に開発されたプログラムである。画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、アプリケーション３２からの実行指示に従い、前記画像処理部によって画像処理を行うが（詳細は後述）、画像処理プログラム群３４は、所望の画像処理を行う画像処理部（所望の構成の画像処理部）の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション３２に提供している。このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【００１９】
また、画像処理プログラム群３４によって実現される画像処理装置は、前述のように、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や１画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション３２が画像処理部の再構築を指示することで、画像処理装置（画像処理部）によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【００２０】
以下、画像処理プログラム群３４について説明する。図１に示すように、画像処理プログラム群３４はモジュールライブラリ３６と、処理構築部４２のプログラムと、処理管理部ライブラリ４７に大別される。詳細は後述するが、本実施形態に係る処理構築部４２は、アプリケーションからの指示により、例として図３に示すように、予め定められた画像処理を行う複数の画像処理モジュール３８と、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成る画像処理部５０を構築する。画像処理部５０を構成する個々の画像処理モジュールの実体はＣＰＵ１２によって実行されＣＰＵ１２で予め定められた画像処理を行わせるための第１プログラム、又は、ＣＰＵ１２によって実行されＣＰＵ１２により図１に図示されていない外部の画像処理装置（例えば専用画像処理ボード等）に対する処理の実行を指示するための第２プログラムであり、上述したモジュールライブラリ３６には、予め定められた互いに異なる画像処理（例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等）を行う複数種の画像処理モジュール３８のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部５０を構成する個々の画像処理モジュールの実体が上記の第１プログラムであるものとして説明する。
【００２１】
個々の画像処理モジュール３８は、例として図４(Ａ)にも示すように、画像データに対する画像処理を予め定められた単位処理データ量ずつ行う画像処理エンジン３８Ａと、画像処理モジュール３８の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン３８Ａの制御を行う制御部３８Ｂから構成されている。個々の画像処理モジュール３８における単位処理データ量は、画像の１ライン分、画像の複数ライン分、画像の１画素分、画像１面分等を含む任意のバイト数の中から、画像処理エンジン３８Ａが行う画像処理の種類等に応じて予め選択・設定されており、例えば色変換処理やフィルタ処理を行う画像処理モジュール３８では単位処理データ量が１画素分とされ、拡大・縮小処理を行う画像処理モジュール３８では単位処理データ量が画像の１ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール３８では単位処理データ量が画像１面分とされ、画像圧縮伸長処理を行う画像処理モジュール３８では単位処理データ量が実行環境に依存するＮバイトとされている。
【００２２】
また、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている（図１では、この種の画像処理モジュールを「モジュール１」「モジュール２」と表記して示している）。例えば拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等の複数の画像処理モジュール３８が各々用意されている。また、例えば色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間をＣＭＹ色空間へ変換する画像処理モジュール３８やその逆へ変換する画像処理モジュール３８、Ｌ*ａ*ｂ*色空間等の他の色空間変換を行う画像処理モジュール３８が各々用意されている。
【００２３】
また、画像処理モジュール３８の制御部３８Ｂは、画像処理エンジン３８Ａが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール（例えばバッファモジュール４０）から画像データを単位読出データ量ずつ取得し、画像処理エンジン３８Ａから出力される画像データを単位書込データ量ずつ後段のモジュール（例えばバッファモジュール４０）へ出力する（画像処理エンジン３８Ａで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量＝単位処理データ量となる）か、画像処理エンジン３８Ａによる画像処理の結果を自モジュールの外部へ出力する（例えば画像処理エンジン３８Ａがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある）処理を行うが、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール３８も登録されている。例えば、画像回転処理を行う画像処理モジュール３８についても、前述のように単位処理データ量が画像１面分の画像処理モジュール３８のプログラム以外に、単位処理データ量が画像の１ライン分や画像の複数ライン分の画像処理モジュール３８のプログラムがモジュールライブラリ３６に登録されていても良い。
【００２４】
また、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８のプログラムは、画像処理エンジン３８Ａに相当するプログラムと制御部３８Ｂに相当するプログラムから構成されているが、制御部３８Ｂに相当するプログラムは部品化されており、個々の画像処理モジュール３８のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール３８は、画像処理エンジン３８Ａで実行される画像処理の種類や内容に拘わらず、制御部３８Ｂに相当するプログラムが共通化されている（制御部３８Ｂに相当するプログラムとして同一のプログラムが用いられている）。これにより、画像処理モジュール３８のプログラムの開発にあたっての開発負荷が軽減される。
【００２５】
なお、画像処理モジュール３８の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を予め定められた演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在しているが、この種の画像処理モジュール３８については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール３８について、制御部３８Ｂに相当するプログラムを共通化するようにすればよい。また、本実施形態に係る画像処理プログラム群３４は、前述のように各種機器に実装可能であるが、画像処理プログラム群３４のうちモジュールライブラリ３６に登録する画像処理モジュール３８の数や種類等については、画像処理プログラム群３４を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【００２６】
また、画像処理部５０を構成する個々のバッファモジュール４０は、例として図４(Ｂ)にも示すように、コンピュータ１０に設けられたメモリ１４からオペレーティングシステム３０を通じて確保されたメモリ領域で構成されるバッファ４０Ａと、バッファモジュール４０の前段及び後段のモジュールとの画像データの入出力及びバッファ４０Ａの管理を行うバッファ制御部４０Ｂから構成されている。個々のバッファモジュール４０のバッファ制御部４０Ｂもその実体はＣＰＵ１２によって実行されるプログラムであり、モジュールライブラリ３６にはバッファ制御部４０Ｂのプログラムも登録されている（図１ではバッファ制御部４０Ｂのプログラムを「バッファモジュール」と表記して示している）。
【００２７】
なお、詳細は後述するが、画像処理部５０における画像処理の処理方式としては、画像処理部５０の個々の画像処理モジュール３８で互いに並列に画像処理を行わせる並列処理方式と、画像処理部５０の画像処理モジュール３８のうちの常に単一の画像処理モジュール３８で画像処理を行わせると共に、画像処理を行わせる画像処理モジュール３８を逐次切り替える逐次処理方式があり、本実施形態では、並列処理方式で画像処理を行わせる場合には並列処理用の画像処理部５０を構築し、逐次処理方式で画像処理を行わせる場合には逐次処理用の画像処理部５０を構築することで、画像処理部５０における画像処理の処理方式を切り替えるようになっている。
【００２８】
ここで、逐次処理方式では画像処理を行っている画像処理モジュール３８の数が常に１であるので、バッファモジュール４０のバッファ４０Ａに対しても常に単一の画像処理モジュール３８のみがアクセスするのに対し、並列処理方式では全ての画像処理モジュール３８が並列に画像処理を行うので、バッファモジュール４０のバッファ４０Ａに対して複数の画像処理モジュール３８が同時にアクセスする可能性があり、バッファ４０Ａへのアクセスに対して排他制御を行う必要がある。このため、本実施形態では、並列処理用として排他制御を行う機能が付加されたバッファモジュール４０が、逐次処理用として排他制御を行う機能が付加されていないバッファモジュール４０が各々用意され、モジュールライブラリ３６には、排他制御を行う機能が付加されたバッファモジュール４０のプログラムと排他制御を行う機能が付加されていないバッファモジュール４０のプログラムが各々登録されている。
【００２９】
また、アプリケーション３２からの指示に従って画像処理部５０を構築する処理構築部４２は、図１に示すように複数種のモジュール生成部４４から構成されている。複数種のモジュール生成部４４は互いに異なる画像処理に対応しており、アプリケーション３２によって起動されることで、対応する画像処理を実現するための画像処理モジュール３８及びバッファモジュール４０から成るモジュール群を生成する処理を行う。なお、図１ではモジュール生成部４４の一例として、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８が実行する画像処理の種類に対応するモジュール生成部４４を示しているが、個々のモジュール生成部４４に対応する画像処理は、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理）であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は複数種の画像処理の何れかに対応するモジュール生成部４４を順次起動する。これにより、アプリケーション３２によって順次起動されたモジュール生成部４４により、必要とされる画像処理を行う画像処理部５０が構築されることになる。
【００３０】
また図１に示すように、処理管理部ライブラリ４７には、処理管理部４６のプログラムが複数登録されている。個々の処理管理部４６は、画像処理部５０における画像処理の実行を制御するワークフロー管理部４６Ａ、画像処理部５０の各モジュールによるメモリ１４や各種のファイル等のコンピュータ１０のリソースの使用を管理するリソース管理部４６Ｂ、及び、画像処理部５０で発生したエラーを管理するエラー管理部４６Ｃを含んで構成される。処理管理部ライブラリ４７にプログラムが登録されている処理管理部４６は、並列処理用の画像処理部５０（バッファモジュール４０として排他制御機能付きのバッファモジュール４０を適用した画像処理部５０）を構築させ、構築させた画像処理部５０で並列処理方式によって画像処理が行われるように制御する並列処理管理部と、逐次処理用の画像処理部５０（バッファモジュール４０として排他制御機能無しのバッファモジュール４０を適用した画像処理部５０）を構築させ、構築させた画像処理部５０で逐次処理方式によって画像処理が行われるように制御する逐次処理管理部に大別される。
【００３１】
また、図１では並列処理管理部のプログラム及び逐次処理管理部のプログラムを各々１個のみ示しているが、処理管理部ライブラリ４７には、並列処理管理部のプログラムとして、互いに内容の異なる並列処理を並列処理用の画像処理部５０に行わせる複数種の並列処理管理部のプログラムを各々登録可能とされていると共に、逐次処理管理部のプログラムとして、互いに内容の異なる逐次処理を逐次処理用の画像処理部５０に行わせる複数種の逐次処理管理部のプログラムを各々登録可能とされている。前述の処理構築部４２は選択起動部４５を備えており、選択起動部４５は、アプリケーション３２から画像処理部５０の構築が指示された際に、処理管理部ライブラリ４７に登録されている各処理管理部の中から何れかの処理管理部を選択的に起動する。
【００３２】
ここで、図２を参照しながら、選択起動部４５の機能について説明する。図２は、選択起動部４５の機能的な構成を示すブロック図である。選択機能部４５は、並列度計算部４５Ａ、オーバーヘッド計算部４５Ｂ、並列処理性能判定部４５Ｃ、及び起動処理部４５Ｄを備えている。
【００３３】
並列度計算部４５Ａは、並列処理方式の画像処理部５０を構築して並列処理方式で画像処理を行う場合において少なくとも２つの画像処理モジュール３８が並列に動作する度合いを表す値（以下、並列度）を計算する。より具体的には、並列度は、少なくとも２つの画像処理モジュール３８が並列に動作する並列時間を表す値とすることができる。
【００３４】
オーバーヘッド計算部４５Ｂは、逐次処理方式で画像処理が行われるように逐次制御する場合には必要ないが、並列処理方式で画像処理が行われるように並列制御する場合には必要な処理（オーバーヘッド）に要する制御時間を示す値（以下、オーバーヘッド値）を計算する。オーバーヘッドには、例えば排他制御やスレッドの起動制御などが含まれる。詳細は後述する。
【００３５】
なお、並列度やオーバーヘッド値は、必ずしもmsecや、μsec等の一般的な時間の単位で表される数値である必要はなく、その値が時間の長さを示す何らかの数値であればよい。また、本実施の形態では、並列度及びオーバーヘッド値の大小を比較して判定するため、並列度及びオーバーヘッド値の各々は、これらが同じ程度の時間を表す場合にその大きさが等しくなる値となるように計算される。なお、並列度及びオーバーヘッド値の大小を比較せず、各々独立に各々の閾値と比較して判定する場合には、両者が同じ程度の時間を表す場合にその大きさが等しくなる値となるように計算しなくてもよい。
【００３６】
並列処理性能判定部４５Ｃは、並列度とオーバーヘッド値とに基づいて、画像処理部５０における並列処理方式による画像処理が、逐次処理方式による画像処理より短い時間で終了するか否かを判定（以下、この判定を並列処理性能判定という）し、該判定結果を出力する。
【００３７】
起動処理部４５Ｄは、並列処理性能判定部４５Ｃから出力された判定結果に基づいて、
並列処理管理部又は逐次処理管理部を選択して起動し、並列処理方式又は逐次処理方式による画像処理が行われるように制御する。
【００３８】
例えば、画像処理部５０の画像処理モジュール３８が、図１２（Ａ）に示すように連結された場合には（なお、図１２（Ａ）及び（Ｂ）では、バッファモジュール４０は図示が省略されている。）、分岐の数が多いため、排他制御も多くなる。排他制御が多くなるとオーバーヘッド値も大きくなる。また、ある画像処理モジュール３８（ここでは画像処理モジュール３８ｂと呼称する）において１ライン分の画像処理を実行する際に、当該画像処理モジュール３８ｂの前段の画像処理モジュール３８（ここでは画像処理モジュール３８ａと呼称する）において画像処理された後の画像データが１面分必要である場合には、並列処理方式を採用していたとしても、画像処理モジュール３８ａで画像データ１面分の処理が終了するまで、画像処理モジュール３８ｂの処理を開始することができず、処理が止まってしまう。こうした場合には、処理の待ち合わせ度（後述）が大きくなって並列に動作する時間が短くなってしまう。
【００３９】
さらにまた、図１２（Ｂ）に示すように、画像処理部５０を構成する各画像処理モジュール３８の処理の重さ（各画像処理モジュール３８における単位処理データ量のデータに対する処理（単位処理）に要する時間）の各々が軽い（すなわち単位処理に要する時間が短い）場合も、並列で動作する期間が短くなるため、並列処理方式で処理しても並列度が大きくならない。また、この場合、オーバーヘッドによっては、かえって全体の処理時間が長くなる場合もある。
【００４０】
このように、並列処理方式での処理が可能であっても、並列処理方式に向かない画像処理部５０や、画像処理モジュール３８の組み合わせにより並列処理方式にしても性能が出ない（逐次処理方式に比べて処理時間が短くならない）場合がある。そこで、本実施の形態では、処理内容に基づいて（並列度とオーバーヘッド値とを比較して）、並列処理管理部または逐次処理管理部のいずれかを選択して起動させるようにしている。詳細は後述する。
【００４１】
次に本実施形態の作用を説明する。画像処理プログラム群３４が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション３２によって検知される。なお、画像処理を行う必要のある状況としては、例えば画像データ供給部２２としての画像読取部によって画像を読み取り、画像出力部２４としての画像記録部により記録材料に画像として記録するか、画像出力部２４としての表示部に画像として表示させるか、画像出力部２４としての書込装置により画像データを記録メディアに書き込むか、画像出力部２４としての送信部により画像データを送信するか、画像出力部２４としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部２２としての受信部によって受信されるか、画像データ供給部２２としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション３２が実行可能な処理の名称等を表示部１６に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
【００４２】
上記のように、何らかの画像処理を行う必要のある状況になったことを検知すると、アプリケーション３２は画像処理対象の画像データを供給する画像データ供給部２２の種別を認識する（図１１のステップ１５０も参照）。続いてアプリケーション３２は、画像処理を行った画像データの出力先としての画像出力部２４の種別を認識する（図１１のステップ１５２も参照）。
【００４３】
次にアプリケーション３２は、実行すべき画像処理の内容を認識し、実行すべき画像処理を、個々のモジュール生成部４４に対応するレベルの画像処理の組み合わせに分解し、実行すべき画像処理を実現するために必要な画像処理の種類及び個々の画像処理の実行順序を判定する（図１１のステップ１５４も参照）。なお、この判定は、例えば上記の画像処理の種類及び個々の画像処理の実行順序を、ユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、アプリケーション３２は、実行が指示されたジョブの種類に対応する情報を読み出すことによって実現することができる。
【００４４】
次に、アプリケーション３２は処理構築部４２の選択起動部４５を起動する(図１１のステップ１５６も参照)。アプリケーション３２によって起動された選択起動部４５は、まず、並列度計算部４５Ａにより並列度を計算する(図１１のステップ１５８も参照)。
【００４５】
ここでは、並列度を示す値を、各画像処理モジュール３８の処理の重さ及び処理待ち係数に基づいて、次式により計算する。
並列度＝各画像処理モジュール３８の処理の重さを示す値の合計×処理待ち係数
【００４６】
本実施の形態において、画像処理モジュール３８の「処理の重さ」は、各画像処理モジュール３８毎に予め測定した負荷（単位処理に要する時間）を１から５までの５段階評価で表したものとする。数値が大きくなるに従って単位処理に要する時間が長くなる。なお、画像処理モジュール３８の処理の重さを、各画像処理モジュール３８の単位処理内の掛け算の回数に応じた値としてもよい。掛け算の回数が多いほど、処理の重さが重くなるためである。また、処理の重さを、掛け算及び加算の回数に応じた値としてもよい。処理の重さが重いほど（その値が大きいほど）、複数の画像処理モジュール３８が並列に動作する時間が長くなる。なお、各画像処理モジュール３８の処理の重さの情報は、予め記憶部２０に記憶しておく。
【００４７】
例えば、図１３に示す例から処理の重さを示す値の合計を計算すると、各画像処理モジュール３８の処理の重さは、画像処理モジュール３８の連結順序の上流側から下流側に向かって、１、１、３、１であるため、各画像処理モジュール３８の処理の重さを示す値の合計は、１＋１＋３＋１＝６となる。
【００４８】
「処理待ち係数」は、各画像処理モジュール３８の処理の待ち合わせ度を乗算した値である。また、各画像処理モジュール３８の処理の待ち合わせ度は、前段の画像処理モジュール３８の処理終了後のデータをどの程度必要とするか、言い換えれば前段の画像処理モジュール３８の処理結果をどのくらい待つ必要があるか、を示す値である。ここで、各画像処理モジュール３８の処理の待ち合わせ度は、次式により計算される。
各画像処理モジュール３８の処理の待ち合わせ度
＝１-｛単位処理データ量／（処理対象の画像全体の画像データ量×２）｝
【００４９】
なお、この処理待ち合わせ度の式で、処理対象の画像全体の画像データ量に２を乗算しているのは、画像処理モジュール３８の単位処理データ量が画像１面である場合には、その画像処理モジュール３８の位置でその前段の画像処理モジュール３８での画像１面に対する処理が終了するまで処理が止まってしまう（その画像処理モジュール３８の前段の画像処理モジュール３８で処理対象の画像データに対する全処理が終了しないと、処理を開始することができなくなり、その位置においては処理が停止して並列処理にならない）ため、この場合には、並列度を小さくする必要がある。そこで、並列度が小さくなるように、ここでは調整値として２を乗算している。なお、調整値の大きさは、実験などにより経験的に定められる。
【００５０】
ここで、処理待ち係数の計算例を説明する。例えば、図１３に示す例では、各画像処理モジュール３８の単位処理データ量（図１３では、「１回の処理ライン数」としてライン数単位で示した）は、画像処理モジュール３８の連結順序の上流側から下流側に向かって、１ライン、１００ライン、３００ライン、１ラインであり、処理対象の画像全体の画像データ量（ここでは、ライン単位で表した画像全体の高さ）は３００ラインである。従って、上流側から１番目の画像処理モジュール３８の処理待ち合わせ度は、１−｛１／（３００×２）｝＝５９９／６００となり、２番目、３番目、及び４番目の画像処理モジュール３８の処理待ち合わせ度は、５／６、１／２、５９９／６００となる。これにより、処理待ち係数は、(599/600)×(5/6)×(1/2)×(599/600)≒0.42となる。
【００５１】
以上から、図１３に示す例では、並列度は、６×0.42≒2.5と計算される。
【００５２】
並列度が計算された後は、オーバーヘッド計算部４５Ｂによりオーバーヘッド値が計算される(図１１のステップ１５９も参照)。なお、画像処理モジュール３８が増えるほどオーバーヘッドは増える。また、処理の分岐数が多いほど排他制御が増えてオーバーヘッドが増える。そこで、本実施の形態では、直列接続に対して１、並列接続に対して２の係数を設定し、連続する２つの画像処理モジュール３８の接続形態に応じた係数を合成したものをオーバーヘッド値として計算する。なお、ここでは、着目する画像処理モジュール３８と前段の画像処理モジュール３８とが並列接続の関係にあれば、着目する画像処理モジュール３８に２の係数を与えることとする。図１３に示す例では、各画像処理モジュール３８は、全て直列接続なので、１＋１＋１＋１＝４のオーバーヘッド値が求められる。
【００５３】
なお、ここでは、並列度の計算の後にオーバーヘッド値の計算を行うようにしたが、逆であってもよいし、これらの計算を並列に行っても良い。
【００５４】
次に、選択起動部４５の並列処理性能判定部４５Ｃは、計算された並列度及びオーバーヘッド値に基づいて、並列処理性能判定（画像処理部５０における並列処理方式による画像処理が、逐次処理方式による画像処理より短い時間で終了するか否かの判定）を行う（図１１のステップ１６０も参照。）。ここでは、並列度＞オーバーヘッド値であれば、画像処理部５０における並列処理方式による画像処理が、逐次処理方式による画像処理より短い時間で終了する、と判定し、並列度＜オーバーヘッド値であれば、画像処理部５０における並列処理方式による画像処理が、逐次処理方式による画像処理より長い時間で終了する、と判定する。なお、並列度＝オーバーヘッド値の場合には、並列処理方式と逐次処理方式とで画像処理部５０の画像処理に要する時間は等しいと判定する。なお、図１３に示した例では、並列度：2.5、オーバーヘッド値：4であるため、並列度＜オーバーヘッド値、となる。従って、並列処理方式による画像処理が、逐次処理方式による画像処理より長い時間で終了する、と判定される。並列処理性能判定部４５Ｃは、該判定結果を起動処理部４５Ｄに出力する。
【００５５】
ここで、図１４を参照し、他の具体例を挙げて説明する。
図１４（Ａ）に示す画像処理部５０の並列度及びオーバーヘッド値は、以下のように計算される。
並列度 = (5+5+5+5)×1 = 20
オーバーヘッド値 = 1+1+1+1 = 4
なお、ここでは、処理待ち係数は、(599/600)×(599/600)×(599/600)×(599/600)≒1としている。
この例では、並列度＞オーバーヘッド値となるため、並列処理方式による画像処理の方が逐次処理方式に比べて短い時間で終了すると判定される。すなわち、並列処理方式により性能が出ると判定される。
【００５６】
図１４（Ｂ）に示す画像処理部５０の並列度及びオーバーヘッド値は、以下のように計算される。
並列度 = (2+3+3+3+2+3+1+1)×｛(5/6)×(5/6)×(5/6)｝ =10.4
オーバーヘッド値 = 1+2+2+2+1+1+1+1= 11
なお、ここでは、１回の処理ライン数（単位処理データ量）が１ラインの画像処理モジュール３８の処理待ち合わせ度を(599/600)≒1として計算している。
この例では、並列度＜オーバーヘッド値となるため、並列処理方式による画像処理の方が逐次処理方式に比べて長い時間で終了すると判定される。すなわち、並列処理方式では性能が出ないと判定される。
【００５７】
図１４（Ｃ）に示す画像処理部５０の並列度及びオーバーヘッド値は、以下のように計算される。
並列度 = (2+3+3+5+3)×1/2=9.5
オーバーヘッド係数 = 1+2+2+1+1= 7
なお、ここでも、１回の処理ライン数（単位処理データ量）が１ラインの画像処理モジュール３８の処理待ち合わせ度を(599/600)≒1として計算している。
この例では、並列度＞オーバーヘッド値となるため、並列処理方式による画像処理の方が逐次処理方式に比べて短い時間で終了すると判定される。すなわち、並列処理方式により性能が出ると判定される。
【００５８】
起動処理部４５Ｄは、並列処理性能判定部４５Ｃから入力された判定結果に応じて、起動すべき処理管理部を選択し、起動する（図１１のステップ１６６も参照）。ここでは、上記判定結果が、並列処理方式による画像処理が、逐次処理方式による画像処理より短い長い時間で終了する、という判定結果であった場合には、並列処理方式での画像処理が行われるように、並列処理管理部４６を選択して起動する。また、上記判定結果が、並列処理方式による画像処理が、逐次処理方式による画像処理より長い時間で終了する、という判定結果であった場合には、逐次処理方式での画像処理が行われるように、逐次処理管理部４６を選択して起動する。なお、並列処理方式と逐次処理方式とで画像処理部５０の画像処理に要する時間は等しいとの判定結果であった場合には、どちらを選択して起動してもよい。従って、予めどちらを選択するかを設定しておき、該設定に応じて選択して起動する。
【００５９】
起動された処理管理部４６は稼働状態となり、外部から何らかの要求や指示（後述するバッファモジュール生成要求や画像処理実行指示）が入力される迄待機する。
【００６０】
一方、アプリケーション３２は選択起動部４５の起動を完了すると、上記ステップ１５０で認識した画像データ供給元の種別がバッファ領域（メモリ１４の一部領域）であった場合、アプリケーション３２は、画像データ供給部２２として指定されたバッファ領域を稼働中の処理管理部４６へ通知し、画像データ供給部２２として機能するバッファモジュール４０の生成を処理管理部４６へ要求する（図１１では図示省略）。この場合、処理管理部４６はバッファ制御部４０ＢのプログラムをＣＰＵ１２が実行可能なようにメモリ１４にロードすると共に、通知されたバッファ領域（画像データ供給部２２として指定されたバッファ領域）を既に確保されたバッファ４０Ａとしてバッファ制御部４０Ｂに認識させるパラメータを設定することで、画像データ供給部２２として機能するバッファモジュール４０を生成し、アプリケーション３２へ応答を返す。なお、稼働中の処理管理部４６が並列処理管理部４６である場合は、上記のバッファモジュール４０として排他制御機能付きのバッファモジュール４０が生成され、稼働中の処理管理部４６が逐次処理管理部４６である場合は、上記のバッファモジュール４０として排他制御機能無しのバッファモジュール４０が生成される。
【００６１】
また、上記ステップ１５２で認識した画像データ出力先の種別がバッファ領域（メモリ１４の一部領域）であった場合、アプリケーション３２は、画像出力部２４として指定されたバッファ領域を稼働中の処理管理部４６へ通知し、画像出力部２４として指定されたバッファ領域を含むバッファモジュール４０（画像出力部２４として機能するバッファモジュール４０）を処理管理部４６によって生成させる（図１１では図示省略）。このときも、稼働中の処理管理部４６が並列処理管理部４６であれば、上記のバッファモジュール４０として排他制御機能付きのバッファモジュール４０が生成され、稼働中の処理管理部４６が逐次処理管理部４６であれば、上記のバッファモジュール４０として排他制御機能無しのバッファモジュール４０が生成される。
【００６２】
更にアプリケーション３２は、上記で判定した画像処理の種類及び実行順序に基づいて、特定の画像処理に対応するモジュール生成部４４を起動し（図１１のステップ１６８も参照）、起動したモジュール生成部４４に対し、当該モジュール生成部４４によるモジュール群の生成に必要な情報として、前記モジュール群に画像データを入力する入力モジュールを識別するための入力モジュール識別情報、前記モジュール群が画像データを出力する出力モジュールを識別するための出力モジュール識別情報、前記モジュール群に入力される入力画像データの属性を表す入力画像属性情報、実行すべき画像処理のパラメータを通知して対応するモジュール群の生成を指示する（図１１のステップ１７０も参照）。また、必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は、指示したモジュール生成部４４からモジュール群の生成完了が通知されると、個々の画像処理に対応する他のモジュール生成部４４を起動してモジュール群の生成に必要な情報を通知する処理（図１１のステップ１６８，１７０）を個々の画像処理の実行順序の昇順に繰り返す。
【００６３】
なお、上記の入力モジュールは、実行順序が１番目のモジュール群については画像データ供給部２２が入力モジュールとなり、実行順序が２番目以降のモジュール群については前段のモジュール群の最終モジュール（通常はバッファモジュール４０）が入力モジュールとなる。また、上記の出力モジュールについては、実行順序が最後のモジュール群では画像出力部２４が出力モジュールとなるので、画像出力部２４が出力モジュールとして指定されるが、その他のモジュール群では出力モジュールは未確定のためにアプリケーション３２による指定は行われず、必要な場合はモジュール生成部４４によって生成・設定される。また、入力画像属性や画像処理のパラメータについては、例えばユーザが実行を指示可能なジョブの種類と対応付けて予め情報として登録しておき、実行が指示されたジョブの種類に対応する情報を読み出すことでアプリケーション３２が認識するようにしてもよいし、ユーザに指定させるようにしてもよい。
【００６４】
一方、モジュール生成部４４は、アプリケーション３２によって起動されるとモジュール生成処理（図１１のステップ１７２も参照）を行う。モジュール生成処理では、まず生成対象の画像処理モジュール３８に入力される入力画像データの属性を表す入力画像属性情報を取得する。なお、入力画像データの属性を取得する処理は、生成対象の画像処理モジュール３８の前段にバッファモジュール４０が存在している場合、当該バッファモジュール４０に画像データの書き込みを行う更に前段の画像処理モジュール３８から出力画像データの属性を取得することによって実現できる。
【００６５】
そして、取得した情報が表す入力画像データの属性に基づいて、生成対象の画像処理モジュール３８の生成が必要か否か判定する。例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、画像処理のパラメータにより出力画像データの色空間としてＣＭＹ色空間がアプリケーション３２から指定された場合、取得した入力画像属性情報に基づいて入力画像データがＲＧＢ色空間のデータであることが判明したときには、色空間処理を行う画像処理モジュール３８としてＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８を生成する必要があるが、入力画像データがＣＭＹ色空間のデータであったときには、入力画像データの属性と出力画像データの属性が色空間に関して一致しているので、色空間変換処理を行う画像処理モジュール３８は生成不要と判断する。
【００６６】
生成対象の画像処理モジュール３８の生成が必要と判断した場合には、生成対象の画像処理モジュール３８の後段にバッファモジュール４０が必要が否かを判定する。この判定は、画像処理モジュールの後段が出力モジュール（画像出力部２４）である場合（例えば図３(Ａ)〜(Ｃ)に示す画像処理部５０における最後段の画像処理モジュール３８を参照）や、例として図３(Ｂ)に示す画像処理部５０においてスキュー角検知処理を行う画像処理モジュール３８のように、画像処理モジュールが、画像データに対して解析等の画像処理を行いその結果を他の画像処理モジュール３８へ出力するモジュールである場合は否定されるが、上記以外の場合は判定が肯定され、稼働中の処理管理部４６に対して画像処理モジュール３８の後段に連結するバッファモジュール４０を生成を要求する。
【００６７】
バッファモジュール４０の生成が要求されると、処理管理部４６はバッファ制御部４０ＢのプログラムをＣＰＵ１２が実行可能なようにメモリ１４にロードすることで、バッファモジュール４０を生成し（図１１のステップ１７２も参照）、モジュール生成部４４へ応答を返す。なお、稼働中の処理管理部４６が並列処理管理部４６であれば、上記のバッファモジュール４０として排他制御機能付きのバッファモジュール４０が生成され、稼働中の処理管理部４６が逐次処理管理部４６であれば、上記のバッファモジュール４０として排他制御機能無しのバッファモジュール４０が生成される。
【００６８】
続いてモジュール生成部４４は、前段のモジュール（例えばバッファモジュール４０）の情報、後段のバッファモジュール４０の情報（後段にバッファモジュール４０を生成した画像処理モジュール３８のみ）、画像処理モジュール３８に入力される入力画像データの属性、処理パラメータを与えて、モジュールライブラリ３６に登録されており、画像処理モジュール３８として利用可能な複数の候補モジュールの中から、先に取得した入力画像データの属性、及び、画像処理モジュール３８で実行すべき処理パラメータに合致する画像処理モジュール３８を選択し、選択した画像処理モジュール３８のプログラムをＣＰＵ１２が実行可能なようにメモリ１４にロードすると共に、当該画像処理モジュール３８の前段及び後段のモジュールを当該画像処理モジュール３８の制御部３８Ｂに認識させるパラメータを設定することで、画像処理モジュール３８を生成する。
【００６９】
例えばモジュール生成部４４が色変換処理を行うモジュール群を生成するモジュール生成部であり、処理パラメータにより出力画像データの色空間としてＣＭＹ色空間が指定され、更に入力画像データがＲＧＢ色空間のデータであった場合には、モジュールライブラリ３６に登録されている各種の色空間処理を行う複数種の画像処理モジュール３８の中から、ＲＧＢ→ＣＭＹの色空間変換を行う画像処理モジュール３８が選択・生成される。また、画像処理モジュールが拡大・縮小処理を行う画像処理モジュール３８であり、指定された拡大縮小率が50％以外であれば、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８が選択・生成され、指定された拡大縮小率が50％であれば、拡大縮小率50％に特化した拡大縮小処理、すなわち入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８が選択・生成される。
【００７０】
なお、画像処理モジュール３８の選択は上記に限られるものではなく、例えば画像処理エンジン３８Ａによる画像処理における単位処理データ量が異なる画像処理モジュール３８をモジュールライブラリ３６に複数登録しておき、画像処理部５０へ割当可能なメモリ領域のサイズ等の動作環境に応じて、適切な単位処理データ量の画像処理モジュール３８を選択する（例えば上記サイズが小さくなるに従って単位処理データ量の小さい画像処理モジュール３８を選択する等）ようにしてもよいし、アプリケーション３２或いはユーザに選択させるようにしてもよい。
【００７１】
画像処理モジュール３８の生成が完了すると、後段のバッファモジュール４０のＩＤと生成した画像処理モジュール３８のＩＤの組を稼働中の処理管理部４６に通知する。このＩＤは、個々のモジュールを一意に判別できる情報であればよく、例えば個々のモジュールの生成順に付与した番号や、バッファモジュール４０や画像処理モジュール３８のオブジェクトのメモリ上でのアドレス等でも良い。またモジュール生成部４４が、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理を行う画像処理モジュール３８と画像回転処理を行う画像処理モジュール３８によって実現されるスキュー補正処理）を行うモジュール群を生成する場合には、上記処理が繰り返されて２個以上の画像処理モジュール３８を含むモジュール群が生成される。アプリケーション３２によって順次起動された個々のモジュール生成部４４により、以上のモジュール生成処理が順次行われることで、例として図３(Ａ)〜(Ｃ)に示すように、必要とされる画像処理を行う画像処理部５０が構築される。
【００７２】
一方、アプリケーション３２は、順次起動したモジュール生成部４４によって前述のモジュール生成処理が順次行われることで、必要とされる画像処理を行う画像処理部５０の構築が完了すると、稼働中の処理管理部４６に対して画像処理部５０による画像処理の実行を指示する（図１１のステップ１７４も参照）。処理管理部４６は、アプリケーション３２から画像処理の実行が指示されると、メモリ１４にロードした画像処理部５０の各モジュールのプログラムを、オペレーティングシステム３０を通じてスレッドとしてＣＰＵ１２に実行させる。ここで、稼働中の処理管理部４６が並列処理管理部である場合、処理管理部４６は、画像処理部５０の個々の画像処理モジュール３８で互いに並列に画像処理を行わせるために、画像処理部５０を構成する個々のモジュールのプログラムを互いに独立したスレッドとしてＣＰＵ１２に実行させる。また、稼働中の処理管理部４６が逐次処理管理部である場合、処理管理部４６は、画像処理部５０を構成する個々のモジュールのプログラムを単一のスレッドとしてＣＰＵ１２に実行させる。なお、スレッドに代えて、プロセス又はオブジェクトとしてＣＰＵ１２に実行させるようにしてもよい。
【００７３】
なお、前述した選択起動部４６の動作説明において、複数の画像処理モジュール３８が並列接続された場合に行われる排他制御がオーバーヘッドになると説明したが、排他制御以外にスレッドの起動制御もまたオーバーヘッドになる。すなわち、逐次処理方式では、前段の画像処理モジュール３８から後段の画像処理モジュール３８にその接続順に１つずつ起動させていけばよいが、並列処理方式では、並列動作をさせるために、次はどのスレッドを起動させるか等の判断処理が必要となる。これは逐次処理方式では必要のない処理であり、オーバーヘッドとなる。従って、上記例ではオーバーヘッド値を接続状態から計算して求めたが、このようにスレッドの起動制御も考慮する場合には、例えば、画像処理部５０を構成する画像処理モジュール３８の数等を、オーバーヘッド値を求めるパラメータとして用いてもよい。例えば、画像処理モジュール３８の数が多くなるほどオーバーヘッド値が大きくなるようにしてもよい。
【００７４】
画像処理モジュール３８のプログラムがスレッドとして実行されると、個々の画像処理モジュール３８の制御部３８Ｂは自モジュールの初期化を行う。画像処理モジュール３８の初期化では、まずモジュール生成部４４によって設定されたパラメータに基づいて自モジュールの前段のモジュールを判定する。自モジュールの前段にモジュールが存在していない場合には何ら処理を行わないが、前段のモジュールがバッファモジュール４０以外、例えば画像データ供給部２２や特定のファイル等である場合には、必要に応じてその初期化処理を行う。また、自モジュールの前段にバッファモジュール４０が存在している場合には、前段のバッファモジュール４０からの１回の画像データの読み出しによって取得する画像データのデータ量（単位読出データ量）を認識する。
【００７５】
この単位読出データ量は、自モジュールの前段のバッファモジュール４０の数が１個であれば１個だけであるが、例えば図３(Ｃ)に示す画像処理部５０において画像合成処理を行う画像処理モジュール３８のように、前段のバッファモジュール４０の数が複数で、複数のバッファモジュール４０から各々取得した画像データを用いて画像処理エンジン３８Ａが画像処理を行う等の場合、前段の個々のバッファモジュール４０に対応する単位読出データ量は、自モジュールの画像処理エンジン３８Ａが行う画像処理の種類や内容、前段のバッファモジュール４０の数等に応じて定まる。そして、認識した単位読出データ量を、前段に存在している全てのバッファモジュール４０へ通知することで、前段に存在している全てのバッファモジュール４０に単位読出データ量を設定する（図４(Ａ)の(1)も参照）。
【００７６】
次に、自モジュールの後段のモジュールを判定する。自モジュールの後段のモジュールがバッファモジュール４０以外、例えば画像出力部２４や特定のファイル等の場合には、必要に応じてその初期化処理（例えば後段のモジュールが画像出力部２４であれば、単位書込データ量に相当するデータ量ずつ画像データを出力することを通知する処理等）を行う。また、後段のモジュールがバッファモジュール４０であれば、１回の画像データの書き込みにおける画像データのデータ量（単位書込データ量）を認識し、後段のバッファモジュールに当該単位書込データ量を設定（図４(Ａ)の(2)も参照）する。そして、当該画像処理モジュール３８の初期化の完了を処理管理部４６通知する。
【００７７】
また、バッファモジュール４０（のバッファ制御部４０Ｂ）のプログラムがスレッドとして実行されると、個々のバッファモジュール４０のバッファ制御部４０Ｂは自モジュールの初期化を行う。バッファモジュール４０の初期化では、まず自モジュールの前段の画像処理モジュール３８から単位書込データ量が通知されるか又は自モジュールの後段の画像処理モジュール３８から単位読出データ量が通知される毎に、通知された単位書込データ量又は単位読出データ量を記憶する（図４(Ｂ)の(1),(2)も参照）。
【００７８】
自モジュールと連結されている全ての画像処理モジュール３８から単位書込データ量又は単位読出データ量が通知されると、自モジュールと連結されている個々の画像処理モジュール３８によって各々設定された単位書込データ量及び単位読出データ量に基づいて、自モジュールのバッファ４０Ａの管理単位である単位バッファ領域のサイズを決定し、決定した単位バッファ領域のサイズを記憶する。単位バッファ領域のサイズとしては、自モジュールに設定された単位書込データ量及び単位読出データ量のうちの最大値が好適であるが、単位書込データ量を設定してもよいし、単位読出データ量（自モジュールの後段に複数の画像処理モジュール３８が連結されている場合は、個々の画像処理モジュール３８によって各々設定された単位読出データ量の最大値）を設定してもよいし、単位書込データ量と単位読出データ量（の最大値）の最小公倍数を設定してもよいし、この最小公倍数が所定値未満であれば最小公倍数を、最小公倍数が所定値以上であれば別の値（例えば上述した単位書込データ量及び単位読出データ量のうちの最大値、単位書込データ量、単位読出データ量（の最大値）の何れか）を設定するようにしてもよい。
【００７９】
また、自モジュールが画像データ供給部２２又は画像出力部２４として機能するバッファモジュール４０であった場合には、自モジュールのバッファ４０Ａとして用いるメモリ領域が既に存在しているので、先に決定した単位バッファ領域のサイズを、自モジュールのバッファ４０Ａとして用いる既設のメモリ領域のサイズに変更する。更に、自モジュールの後段の個々の画像処理モジュール３８に対応する有効データポインタを各々生成し、生成した有効データポインタを初期化する。この有効データポインタは、自モジュールの前段の画像処理モジュールによって自モジュールのバッファ４０Ａに書き込まれた画像データのうち、対応する後段の画像処理モジュール３８によって読み出されていない画像データ（有効データ）の先頭位置（次の読出開始位置）と末尾位置を各々指し示すポインタであり、初期化時には通常、有効データが存在していないことを意味する特定の情報が設定されるが、自モジュールが画像データ供給部２２として機能するバッファモジュール４０であれば、自モジュールのバッファ４０Ａとして用いるメモリ領域には既に画像処理対象の画像データが書き込まれていることがあり、この場合は当該画像データの先頭位置及び末尾位置が後段の個々の画像処理モジュール３８に対応する有効データポインタに各々設定される。以上の処理によりバッファモジュール４０の初期化が完了し、バッファ制御部４０Ｂは初期化の完了を処理管理部４６へ通知する。
【００８０】
処理管理部４６は、画像処理部５０を構成する全てのモジュールから初期化の完了が通知されると、ワークフロー管理部４６Ａのプログラムを実行するスレッド（又はプロセス又はオブジェクト）を起動し、ワークフロー管理部４６Ａに対して画像処理部５０による画像処理の実行を指示する。ここで、処理管理部ライブラリ４７にプログラムが登録されている個々の処理管理部４６は、ワークフロー管理部４６Ａが行う処理が互いに異なっており、稼働中の処理管理部４６が並列処理管理部である場合には、起動されたワークフロー管理部４６Ａにより、例えば図８に示す並列制御処理が行われ、稼働中の処理管理部４６が逐次処理管理部である場合には、起動されたワークフロー管理部４６Ａにより、例えば図１０に示すブロック単位逐次制御処理が行われる。これらの処理は、画像処理部５０を構成する画像処理モジュール３８に処理要求を入力することで、画像処理部５０に画像処理を行わせるものであるが、以下では画像処理部５０全体の動作説明に先立ち、個々のバッファモジュール４０のバッファ制御部４０Ｂによって行われる処理、個々の画像処理モジュール３８の制御部３８Ｂによって行われる処理について順に説明する。
【００８１】
本実施形態では、画像処理モジュール３８が後段のバッファモジュール４０に画像データを書き込む場合には、画像処理モジュール３８からバッファモジュール４０へ書込要求が入力され、画像処理モジュール３８が前段のバッファモジュール４０から画像データを読み出す場合には、画像処理モジュール３８からバッファモジュール４０へ読出要求が入力される。排他制御機能付きのバッファモジュール４０に前段の画像処理モジュール３８からの書込要求が入力された場合（及び、後述するタイマがタイムアウトした場合）は、以下で説明するデータ書込処理がバッファ制御部４０Ｂによって実行される。
【００８２】
排他制御機能付きのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ書込処理では、まず自モジュールのバッファ４０Ａが既にアクセス中か否か判定する。画像処理部５０の個々の画像処理モジュール３８が並列に画像処理を行う場合、バッファ４０Ａに対してデータの書き込みと非同期に読み出しも行われるので、バッファ４０Ａが既にアクセス中の場合は入力された書込要求情報をワークメモリ等に保管し、タイマをスタートさせてデータ書込処理を一旦終了する。なお、以降の処理では、入力された書込要求情報を処理対象の情報とするが、タイマがタイムアウトしてデータ書込処理が起動された場合には、過去に入力されてワークメモリ等に保管している書込要求情報をワークメモリ等から取り出し、取り出した書込要求情報を処理対象の情報として以降の処理を行う。
【００８３】
バッファ４０Ａがアクセス中でないと判定されると、続いてデータ書込処理では、確保すべきメモリ領域のサイズとして単位書込データ量をリソース管理部４６Ｂに通知し、書込用として用いるメモリ領域（書込用バッファ領域：図５(Ｂ)も参照）を稼働中の処理管理部４６のリソース管理部４６Ｂを介して取得する。次に、自モジュールのバッファ４０Ａを構成する保管用の単位バッファ領域の中に、単位書込データ量以上の空き領域が有る単位バッファ領域（単位書込データ量の画像データを書き込み可能な単位バッファ領域）が存在しているか否か判定する。モジュール生成部４４によって生成されたバッファモジュール４０は、当初はバッファ４０Ａとして用いるメモリ領域（単位バッファ領域）が確保されておらず、メモリ領域の不足が生ずる度に単位バッファ領域を単位として確保されるので、バッファモジュール４０に最初に書込要求が入力されたときにはバッファ４０Ａとして用いるメモリ領域（単位バッファ領域）が存在しておらず、この判定は否定される。また、後述する処理を経てバッファ４０Ａとして用いる単位バッファ領域が確保された後も、当該単位バッファ領域への画像データの書込に伴って当該単位バッファ領域内の空き領域が単位書込データ量未満になった場合にも上記判定は否定される。
【００８４】
単位書込データ量以上の空き領域が有る単位バッファ領域（単位書込データ量の画像データを書き込み可能な単位バッファ領域）が存在していないと判定された場合は、確保すべきメモリ領域のサイズ（単位バッファ領域のサイズ）をリソース管理部４６Ｂに通知して、自モジュールのバッファ４０Ａとして用いるメモリ領域（画像データの保管に用いる単位バッファ領域）をリソース管理部４６Ｂを介して取得する。そして、先に取得した書込用バッファ領域を書込領域として、当該書込領域の先頭アドレスを書込要求元の画像処理モジュール３８へ通知すると共に、書込対象の画像データを通知した先頭アドレスから順に書き込むよう要請する。これにより、書込要求元の画像処理モジュール３８は、先頭アドレスが通知された書込用バッファ領域に画像データを書き込む（図５(Ｂ)も参照）。
【００８５】
例えば単位バッファ領域のサイズが単位書込データ量の整数倍でない場合、バッファ４０Ａ（単位バッファ領域）への単位書込データ量の画像データの書込が繰り返されることで、例として図５(Ａ)にも示すように、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい状態が生ずる。この場合、単位書込データ量の画像データが書き込まれる領域が複数の単位バッファ領域に跨ることになるが、本実施形態では、バッファ４０Ａとして用いるメモリ領域を単位バッファ領域を単位として確保するので、異なるタイミングで確保した単位バッファ領域が実メモリ（メモリ１４）上で連続する領域であることは保証されない。これに対して本実施形態では、画像処理モジュール３８による画像データの書き込みを、保管用の単位バッファ領域と別に確保した書込用バッファ領域に対して行わせ、図５(Ｃ)に示すように、書込用バッファ領域に一旦書き込まれた画像データを保管用の単一又は複数の単位バッファ領域へ複写するので、画像データが書き込まれる領域が複数の単位バッファ領域に跨るか否かに拘わらず、書込要求元の画像処理モジュール３８への書込領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール３８とのインタフェースが簡単になる。
【００８６】
なお、自モジュールがアプリケーション３２によって生成されたバッファモジュール４０である場合、すなわちバッファ４０Ａとして用いるメモリ領域が既に確保されている場合には、既に確保されたメモリ領域のアドレスを画像処理モジュール３８に書込領域のアドレスとして通知し、上記メモリ領域への画像データの書き込みを行わせる。前段の画像処理モジュール３８による書込領域への画像データの書き込みが完了すると、書込用バッファ領域に書き込まれている画像データに属性情報を付加した後に、保管用バッファ領域にそのまま書き込む。なお、空き領域有りの単位バッファ領域における空き領域のサイズが単位書込データ量よりも小さい場合、書込用バッファ領域に書き込まれた画像データは、図５(Ｃ)に示すように、保管用の複数の単位バッファ領域へ分けて書き込まれることになる。
【００８７】
そして、自モジュールの後段の個々の画像処理モジュール３８に対応する有効データポインタのうち有効データの末尾位置を表すポインタを、該ポインタが指し示す有効データの末尾位置が単位書込データ量分だけ後へ移動するように更新する（図５(Ｃ)も参照）と共に、先に書込用バッファ領域として確保したメモリ領域をリソース管理部４６Ｂによって解放させ、データ書込処理を一旦終了する。なお、書込用バッファ領域はバッファモジュール４０の初期化時に確保し、バッファモジュール４０の消去時に解放するように構成してもよい。
【００８８】
上記で説明したデータ書込処理は、並列処理用の画像処理部５０に組み込まれた排他制御機能付きのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ書込処理であるが、逐次処理用の画像処理部５０に組み込まれた排他制御機能無しのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ書込処理は、排他制御に相当する処理、すなわちバッファ４０Ａが既にアクセス中か否かを判定し、アクセス中であれば書込要求情報を保管すると共にタイマをスタートさせ、タイマがタイムアウトするとバッファ４０Ａがアクセス中か否かを再度判定する処理を行わない点以外は上記で説明したデータ書込処理と同一である。排他制御機能無しのバッファモジュール４０におけるデータ書込処理は、逐次処理では不要な排他制御に相当する処理が省略されていることで、処理効率を向上させることができる。
【００８９】
続いて、排他制御機能付きのバッファモジュール４０に後段の画像処理モジュール３８から読出要求が入力された場合（及び、後述するタイマがタイムアウトした場合）に、バッファモジュール４０のバッファ制御部４０Ｂによって実行されるデータ読出処理について説明する。
【００９０】
排他制御機能付きのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ読出処理では、まず今回のデータ読出処理の起動要因が、後段の画像処理モジュールからの読出要求の入力による起動か否か判定し、判定が肯定された場合は後段の画像処理モジュールから入力された読出要求情報を読出用の待ち行列の末尾に登録する。次に、自モジュールのバッファ４０Ａが既にアクセス中か否か判定する。バッファ４０Ａがアクセス中であれば、読出用の待ち行列に読出要求情報が登録されているか否か判定し、読出要求情報が未登録であればそのままデータ読出処理を終了し、読出要求情報が登録されていればタイマをスタートさせた後にデータ読出処理を終了する。このタイマがタイムアウトするとデータ読出処理が再度起動され、読出用の待ち行列に登録されている未処理の読出要求（情報）が再度取り出され、当該読出要求に応じた処理が行われる。
【００９１】
データ読出処理及び前述のデータ書込処理における排他制御により、単一のバッファモジュール４０に複数の要求が同時又は略同時に入力された場合の不都合の発生を回避できるので、コンピュータ１０のＣＰＵ１２が並列処理用の画像処理部５０の個々のモジュールに対応するスレッドを並列に実行することが可能となる。
【００９２】
一方、自モジュールのバッファ４０Ａがアクセス中でなければ、読出用の待ち行列から先頭に登録されている読出要求情報を取り出し、取り出した読出要求情報に含まれる要求元識別情報に基づいて読出要求元の画像処理モジュール３８を認識し、読出要求元の画像処理モジュール３８によって設定された単位読出データ量を認識すると共に、読出要求元の画像処理モジュール３８に対応する有効データポインタに基づいて、読出要求元の画像処理モジュール３８に対応する有効データのバッファ４０Ａ上での先頭位置及び末尾位置を認識する。次に、認識した有効データの先頭位置及び末尾位置に基づいて、読出要求元の画像処理モジュール３８に対応する有効データ（読出要求元の画像処理モジュール３８が読出可能な画像データ）が単位読出データ量以上有るか否か判定する。
【００９３】
読出要求元の画像処理モジュール３８に対応する有効データが単位読出データ量未満であれば、読出要求元の画像処理モジュール３８が読出可能な有効データの末尾が処理対象の画像データの末尾か否か判定する。読出要求元の画像処理モジュール３８に対応する有効データがバッファ４０Ａに単位読出データ量以上記憶されているか、又は、バッファ４０Ａに記憶されている読出要求元の画像処理モジュール３８に対応する有効データが単位読出データ量未満であるものの、当該有効データの末尾が処理対象の画像データの末尾であった場合には、確保すべきメモリ領域のサイズとして読出要求元の画像処理モジュール３８に対応する単位読出データ量をリソース管理部４６Ｂに通知すると共に、読出に用いるメモリ領域（読出用バッファ領域：図６(Ｂ)も参照）の確保をリソース管理部４６Ｂに要求し、リソース管理部４６Ｂを介して読出用バッファ領域を取得する。
【００９４】
次に、読出対象の有効データをバッファ４０Ａから単位読出データ量分だけ読み出して読出用バッファ領域に書き込み、読出用バッファ領域の先頭アドレスを読出領域の先頭アドレスとして読出要求元の画像処理モジュール３８へ通知すると共に、通知した先頭アドレスから画像データを順に読み出すよう要請する。これにより、読出要求元の画像処理モジュール３８は、先頭アドレスが通知された読出領域（読出用バッファ領域）からの画像データの読み出しを行う。なお、読出対象の有効データが処理対象の画像データの末尾に相当するデータであった場合には、画像データの読出要求に際し、読出対象の画像データのサイズと共に、処理対象の画像データの末尾であることも読出要求元の画像処理モジュール３８に通知する。また、自モジュールがアプリケーション３２によって生成されたバッファモジュール４０である場合は、バッファ４０Ａとして用いているメモリ領域（単位バッファ領域の集合体）は連続領域であるので、読出用バッファ領域の確保、読出対象の画像データの読出用バッファ領域への書き込みを省略し、後段の画像処理モジュール３８が単位バッファ領域から直接画像データを読み出すようにしてもよい。
【００９５】
なお、例として図６(Ａ)に示すように、有効データの先頭部分の画像データを記憶している単位バッファ領域に記憶されている有効データのデータ量が単位読出データ量未満であり、読出対象の有効データが複数の単位バッファ領域に跨っている場合には、今回の読出対象の有効データが実メモリ（メモリ１４）上で連続する領域に記憶されているとは限らないが、上記のデータ読出処理では、図６(Ｂ),(Ｃ)に示すように、このような場合にも読出対象の画像データを読出用バッファ領域に一旦書き込んだ後に該読出用バッファ領域から画像データを読み出させるので、読出対象の画像データが複数の単位バッファ領域に跨って記憶されているか否かに拘わらず、読出要求元の画像処理モジュール３８への読出領域の通知は、上記のようにその先頭アドレスを通知するのみで済み、画像処理モジュール３８とのインタフェースが簡単になる。
【００９６】
読出要求元の画像処理モジュール３８による読出領域からの画像データの読み出し完了が通知されると、読出用バッファ領域として確保したメモリ領域の先頭アドレス及びサイズをリソース管理部４６Ｂへ通知して、当該メモリ領域をリソース管理部４６Ｂによって解放させる。この読出用バッファ領域についても、バッファモジュール４０の初期化時に確保しておき、バッファモジュール４０が消去される時に解放するよう構成してもよい。また、読出要求元の画像処理モジュール３８に対応する有効データポインタのうち有効データの先頭位置を表すポインタを、該ポインタが指し示す有効データの先頭位置を単位読出データ量分だけ後へ移動させることで更新する（図６(Ｃ)も参照）。
【００９７】
次に、後段の個々の画像処理モジュール３８に対応する有効データポインタを各々参照し、先のポインタ更新により、バッファ４０Ａを構成する単位バッファ領域の中に、記憶している画像データの後段の各画像処理モジュール３８による読み出しが全て完了した単位バッファ領域、すなわち有効データを記憶していない単位バッファ領域が出現したか否か判定する。判定が否定された場合は、前述した読出用の待ち行列のチェック処理（読出用の待ち行列に読出要求情報が登録されているか否かの判定）を経てデータ読出処理を終了するが、有効データを記憶していない単位バッファ領域が出現した場合は、当該単位バッファ領域をリソース管理部４６Ｂによって解放させた後に読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。
【００９８】
一方、バッファ４０Ａに記憶されており読出要求元の画像処理モジュール３８が読出可能な有効データのデータ量が単位読出データ量未満であり、かつ読出可能な有効データの末尾が処理対象の画像データの末尾でない場合（図４(Ｂ)の(4)で読出可能な有効データ無が検知された場合）には、新たな画像データを要求するデータ要求をワークフロー管理部４６Ａへ出力し（図４(Ｂ)の(5)も参照）、読出用の待ち行列から取り出した読出要求情報を元の待ち行列（の先頭又は末尾）に再度登録した後に、読出用の待ち行列のチェック処理を経てデータ読出処理を終了する。この場合、ワークフロー管理部４６Ａにより、自モジュールの前段の画像処理モジュール３８に処理要求が入力されることになる。これにより、読出可能な有効データのデータ量が単位読出データ量以上になるか、読出可能な有効データの末尾が処理対象の画像データの末尾であることが検知される迄の間、対応する読出要求情報は読出用の待ち行列に保存されると共に定期的に取り出されて要求された処理の実行が繰り返し試行されることになる。
【００９９】
詳細は後述するが、ワークフロー管理部４６Ａはバッファモジュール４０からデータ要求が入力されると、データ要求元のバッファモジュール４０の前段の画像処理モジュール３８に処理要求を入力する（図４(Ｂ)の(6)も参照）。この処理要求の入力をトリガとして前段の画像処理モジュール３８の制御部３８Ｂで行われる処理により、前段の画像処理モジュール３８がバッファモジュール４０へ画像データを書込可能な状態になると、前段の画像処理モジュール３８から書込要求が入力されることで前述したデータ書込処理が行われ、前段の画像処理モジュール３８からバッファモジュール４０のバッファ４０Ａに画像データが書き込まれる（図４(Ｂ)の(7),(8)も参照）。これにより、後段の画像処理モジュール３８によるバッファ４０Ａからの画像データの読出が行われることになる（図４(Ｂ)の(9)も参照）。
【０１００】
なお、上記で説明したデータ読出処理は、並列処理用の画像処理部５０に組み込まれた排他制御機能付きのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ読出処理であるが、逐次処理用の画像処理部５０に組み込まれた排他制御機能無しのバッファモジュール４０のバッファ制御部４０Ｂによって行われるデータ読出処理は、排他制御に相当する処理、すなわちバッファ４０Ａが既にアクセス中か否かを判定し、アクセス中でかつ待ち行列に読出要求情報が登録されている場合はタイマをスタートさせ、タイマがタイムアウトするとバッファ４０Ａがアクセス中か否かを再度判定すると共に、単一の読出要求に対する処理が終了した後に待ち行列に読出要求情報が残っているかをチェックする処理を行わない点以外は上記で説明したデータ読出処理と同一である。排他制御機能無しのバッファモジュール４０におけるデータ読出処理は、逐次処理では不要な排他制御に相当する処理が省略されていることで、処理効率を向上させることができる。
【０１０１】
続いて、画像処理部５０を構成する個々の画像処理モジュール３８に対してワークフロー管理部４６Ａから処理要求が入力される毎に、個々の画像処理モジュール３８の制御部３８Ｂによって各々行われる画像処理モジュール制御処理（図７）を説明する。なお、画像処理モジュール３８の構成については、画像処理部５０が並列処理用か逐次処理用かに拘わらず同一であり、以下では画像処理部５０が並列処理用か逐次処理用かを区別することなく、画像処理モジュール制御処理を説明する。
【０１０２】
画像処理モジュール制御処理では、まずステップ２１９において、自モジュールの画像処理エンジン３８Ａが行う画像処理の種類や内容等に基づき、自モジュールが使用するメモリのサイズ及び自モジュールが使用する他のリソースの有無を認識する。なお、画像処理モジュール３８が使用するメモリは、画像処理エンジン３８Ａが画像処理を行うために必要なメモリが主であるが、前段のモジュールが画像データ供給部２２である場合や後段のモジュールが画像出力部２４である場合には、前段又は後段のモジュールとの画像データの送受に際して画像データを一時記憶するためのバッファ用のメモリが必要となることもある。また、処理パラメータにテーブル等の情報が含まれている場合には、それを保持するためのメモリ領域が必要となることもある。そして、認識したサイズのメモリ領域の確保をリソース管理部４６Ｂへ要求し、リソース管理部４６Ｂによって確保されたメモリ領域をリソース管理部４６Ｂから取得する。また、自モジュール（の画像処理エンジン３８Ａ）がメモリ以外の他のリソースを必要としていると認識した場合には、上記他のリソースの確保をリソース管理部４６Ｂへ要求し、上記他のリソースをリソース管理部４６Ｂから取得する。
【０１０３】
次のステップ２２０では、自モジュールの前段にモジュール（バッファモジュール４０や画像データ供給部２２、画像処理モジュール３８等）が存在している場合に、当該前段のモジュールに対してデータ（画像データ又は解析等の画像処理の処理結果）を要求する。次のステップ２２２では前段のモジュールからデータが取得可能であるかを判定し、ステップ２２２の判定が否定された場合はステップ２２４で全体処理終了が通知されたか否かを判定する。ステップ２２４の判定が否定された場合はステップ２２２に戻り、前段のモジュールからデータを取得可能となる迄ステップ２２２，２２４を繰り返す。ステップ２２２の判定が肯定された場合には、ステップ２２６で前段のモジュールからデータを取得し、取得したデータをステップ２１９で取得したメモリ領域のうちデータの一時保管用のメモリ領域に書き込むデータ取得処理を行う。
【０１０４】
ここで、自モジュールの前段のモジュールがバッファモジュール４０である場合には、先のステップ２２０でデータを要求すると（読出要求）、読出可能な有効データがバッファモジュール４０のバッファ４０Ａに単位読出データ量以上記憶されているか、読出可能な有効データの末尾が処理対象の画像データの末尾に一致している状態であれば直ちに、当該状態でなければ、当該バッファモジュール４０の前段の画像処理モジュール３８が当該バッファモジュール４０のバッファ４０Ａに画像データを書き込んだことに伴って前記状態へ変化した後に、バッファモジュール４０から読出領域の先頭アドレスが通知されて画像データの読出が要請される。これにより、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段のバッファモジュール４０より先頭アドレスが通知された読出領域から単位読出データ量（又はそれ未満のデータ量）の画像データを読み出し、一時保管用のメモリ領域に書き込むデータ取得処理を行う（図３(Ａ)の(3)も参照）。
【０１０５】
また、自モジュールの前段のモジュールが画像データ供給部２２であれば、先のステップ２２０でデータ要求を出力すると画像データを取得可能な状態であることが前段の画像データ供給部２２から直ちに通知されることで、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段の画像データ供給部２２から単位読出データ量の画像データを取得し、一時保管用のメモリ領域に書き込む画像データ取得処理を行う。また、自モジュールの前段のモジュールが画像処理モジュール３８であれば、先のステップ２２０でデータ要求（処理要求）を出力すると、前段の画像処理モジュール３８が画像処理を実行可能な状態であれば書込要求が入力されることでデータ（画像処理結果）を取得可能な状態であることが通知されるので、ステップ２２２の判定が肯定されてステップ２２６へ移行し、前段の画像処理モジュール３８によってデータを書き込ませる一時保管用のメモリ領域のアドレスを通知して書込を要請することで、前段の画像処理モジュール３８から出力されるデータを一時保管用のメモリ領域に書き込ませるデータ取得処理を行う。
【０１０６】
次のステップ２２８では、自モジュールの前段に複数のモジュールが連結されているか否か判定する。判定が否定された場合には何ら処理を行うことなくステップ２３２へ移行するが、判定が肯定された場合はステップ２３０へ移行し、前段に連結されている全てのモジュールからデータを取得したか否か判定する。ステップ２３０の判定が否定された場合はステップ２２０に戻り、ステップ２３０の判定が肯定される迄ステップ２２０〜ステップ２３０を繰り返す。前段のモジュールから取得すべきデータが全て揃うと、ステップ２２８の判定が否定されるかステップ２３０の判定が肯定されてステップ２３２へ移行する。
【０１０７】
次のステップ２３２では自モジュールの後段のモジュールに対してデータ出力用の領域を要求し、ステップ２３２でデータ出力領域が取得できる迄（データ出力領域の先頭アドレスが通知される迄）繰り返し判定を行う。なお、後段のモジュールがバッファモジュール４０であれば、上記のデータ出力用領域の要求は当該バッファモジュール４０に対して書込要求を出力することによって成される。データ出力領域（後段のモジュールがバッファモジュール４０であれば当該バッファモジュール４０から先頭アドレスが通知された書込領域）が取得できたら（図３(Ａ)の(4)も参照）、次のステップ２３６において、先のデータ取得処理で取得したデータ、後段のモジュールから取得したデータ出力領域（の先頭アドレス）、先のステップ２１９で取得したメモリ領域のうち画像処理エンジンによる画像処理用のメモリ領域（の先頭アドレス及びサイズ）を画像処理エンジン３８Ａに入力し、入力したデータに対し画像処理用のメモリ領域を使用して予め定められた画像処理を行わせる（図３(Ａ)の(5)も参照）と共に、処理後のデータをデータ出力領域に書き込ませる（図３(Ａ)の(6)も参照）。画像処理エンジン３８Ａへの単位読出データ量のデータの入力が完了し、画像処理エンジン３８Ａから出力されたデータがデータ出力領域に全て書き込まれると、次のステップ２３８で出力が完了したことを後段のモジュールに通知する。
【０１０８】
上記のステップ２２０〜ステップ２３８により画像処理モジュール３８における単位処理データ量のデータに対する処理（単位処理）が完了するが、ワークフロー管理部４６Ａから画像処理モジュール３８に入力される処理要求では、ワークフロー管理部４６Ａによって単位処理の実行回数が指定されることがある。このためステップ２４０では、単位処理の実行回数が、入力された処理要求によって指示された実行回数に達したか否か判定する。指示された単位処理の実行回数が１回の場合、この判定は無条件に肯定されるが、指示された単位処理の実行回数が２回以上の場合はステップ２２０に戻り、ステップ２４０の判定が肯定される迄ステップ２２０〜ステップ２４０を繰り返す。ステップ２４０の判定が肯定されるとステップ２４２へ移行し、ワークフロー管理部４６Ａへ処理完了通知を出力することで、入力された処理要求に対応する処理が完了したことをワークフロー管理部４６Ａへ通知し、画像処理モジュール制御処理を終了する。
【０１０９】
また、ワークフロー管理部４６Ａから処理要求が入力される毎に上述した処理が繰り返されることで処理対象の画像データを末尾まで処理すると、前段のモジュールから処理対象の画像データの終了が通知されることで、ステップ２２４の判定が肯定されてステップ２４４へ移行し、処理対象の画像データ（なお、処理対象の画像データは１頁分の画像データであることが多いが、複数頁分の画像データであってもよい）に対する処理が終了したことを意味する全体処理終了通知をワークフロー管理部４６Ａ及び後段のモジュールへ各々出力する。また、次のステップ２４６では取得していた全てのリソースの解放を要求して自モジュールを消去する処理を行い、画像処理モジュール制御処理を終了する。
【０１１０】
一方、稼働中の処理管理部４６が並列処理管理部である場合、ワークフロー管理部４６Ａは、画像処理の実行が指示されると、図８(Ａ)に示す並列制御処理１を行う。先にも述べたように、ワークフロー管理部４６Ａによる画像処理部５０の個々の画像処理モジュール３８への処理要求の入力では、単位処理の実行回数を指定可能とされているが、並列制御処理１のステップ５００では、１回の処理要求で指定する単位処理の実行回数を個々の画像処理モジュール３８毎に決定する。この処理要求１回当りの単位処理の実行回数は、例えば処理対象の画像データ全体を処理する間の個々の画像処理モジュール３８への処理要求の入力回数が平均化されるように定めることができるが、他の基準に従って定めてもよい。そして次のステップ５０４において、画像処理部５０のうち最後段の画像処理モジュール３８に処理要求を入力し（図９の(1)も参照）、並列制御処理１を終了する。
【０１１１】
ここで、図９に示す画像処理部５０において、ワークフロー管理部４６Ａから最後段の画像処理モジュール３８4に処理要求が入力されると、画像処理モジュール３８4の制御部３８Ｂは前段のバッファモジュール４０3に読出要求を入力する（図９の(2)参照）。このとき、バッファモジュール４０3のバッファ４０Ａには画像処理モジュール３８4が読出可能な有効データ（画像データ）が記憶されていないので、バッファモジュール４０3のバッファ制御部４０Ｂはワークフロー管理部４６Ａにデータ要求を入力する（図９の(3)参照）。
【０１１２】
並列処理管理部のワークフロー管理部４６Ａは、バッファモジュール４０からデータ要求が入力される毎に、図８(Ｂ)に示す並列制御処理２を行う。この並列制御処理２では、ステップ５１０において、データ要求入力元のバッファモジュール４０（ここではバッファモジュール４０3）の前段の画像処理モジュール３８（ここでは画像処理モジュール３８3）を認識し、認識した前段の画像処理モジュール３８に処理要求を入力（図９の(4)参照）して処理を終了する。
【０１１３】
画像処理モジュール３８3の制御部３８Ｂは、処理要求が入力されると前段のバッファモジュール４０2に読出要求を入力し（図９の(5)参照）、バッファモジュール４０2のバッファ４０Ａにも読出可能な画像データが記憶されていないので、バッファモジュール４０2のバッファ制御部４０Ｂはワークフロー管理部４６Ａにデータ要求を入力する（図９の(6)参照）。ワークフロー管理部４６Ａは、バッファモジュール４０2からデータ要求が入力された場合も、前述の並列制御処理２を再度行うことで、その前段の画像処理モジュール３８2に処理要求を入力し（図９の(7)参照）、画像処理モジュール３８3の制御部３８Ｂは前段のバッファモジュール４０1に読出要求を入力する（図９の(8)参照）。また、バッファモジュール４０1のバッファ４０Ａにも読出可能な画像データが記憶されていないので、バッファモジュール４０1のバッファ制御部４０Ｂもワークフロー管理部４６Ａにデータ要求を入力し（図９の(9)参照）。ワークフロー管理部４６Ａは、バッファモジュール４０1からデータ要求が入力された場合も、前述の並列制御処理２を再度行うことで、その前段の画像処理モジュール３８1に処理要求を入力する（図９の(10)参照）。
【０１１４】
ここで、画像処理モジュール３８1の前段のモジュールは画像データ供給部２２であるので、画像処理モジュール３８1の制御部３８Ｂは、画像データ供給部２２にデータ要求を入力することで画像データ供給部２２から単位読出データ量の画像データを取得し（図９の(11)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０1のバッファ４０Ａに書き込む（図９の(12)参照）。
【０１１５】
また、バッファモジュール４０1のバッファ制御部４０Ｂは、後段の画像処理モジュール３８2が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８2に対して読出を要請し、これに伴い画像処理モジュール３８2の制御部３８Ｂは、バッファモジュール４０1のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(13)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０2のバッファ４０Ａに書き込む（図９の(14)参照）。バッファモジュール４０2のバッファ制御部４０Ｂは、後段の画像処理モジュール３８3が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８3へ読出を要請し、画像処理モジュール３８3の制御部３８Ｂは、バッファモジュール４０2のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(15)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のバッファモジュール４０3のバッファ４０Ａに書き込む（図９の(16)参照）。
【０１１６】
更に、バッファモジュール４０3のバッファ制御部４０Ｂは、後段の画像処理モジュール３８4が読出可能な単位読出データ量以上の有効データが書き込まれると画像処理モジュール３８4に対して読出を要請し、これに伴い画像処理モジュール３８4の制御部３８Ｂは、バッファモジュール４０3のバッファ４０Ａから単位読出データ量の画像データを読み出し（図９の(17)参照）、取得した画像データに対して画像処理エンジン３８Ａが画像処理を行うことで得られた画像データを、後段のモジュールである画像出力部２４へ出力する（図９の(18)参照）。
【０１１７】
また、個々の画像処理モジュール３８の制御部３８Ｂは、後段のバッファモジュール４０のバッファ４０Ａへの画像データの書き込みを完了すると、ワークフロー管理部４６Ａへ処理完了通知を入力する。並列処理管理部のワークフロー管理部４６Ａは、画像処理モジュール３８から処理完了通知が入力される毎に、図８(Ｃ)に示す並列制御処理３を行う。この並列制御処理３では、ステップ５２０で処理完了通知元の画像処理モジュール３８に処理要求を再度入力して処理を終了する。
【０１１８】
このように、並列処理管理部のワークフロー管理部４６Ａによる並列制御処理では、任意の画像処理モジュール３８から処理完了が通知される毎に、処理完了通知元の画像処理モジュール３８へ処理要求を再度入力することで、処理対象の画像データが前段側のモジュールから後段側のモジュールへ画像１面分よりも小さいサイズ（ブロック）を単位として順に引き渡されると共に、個々の画像処理モジュール３８が互いに並列に画像処理を行う並列処理方式によって処理対象の画像データに対する画像処理が行われることになる。また、画像データ供給部２２から供給される画像データが処理対象の画像データの末尾に達すると、個々の画像処理モジュール３８からワークフロー管理部４６Ａへの全体処理終了通知の入力が、前段側の画像処理モジュール３８から順次行われる。
【０１１９】
並列処理管理部のワークフロー管理部４６Ａは、画像処理モジュール３８から全体処理終了通知が入力される毎に、図８(Ｄ)に示す並列制御処理４を行う。この並列制御処理４では、ステップ５４０において、全体処理終了通知入力元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定する。判定が否定された場合は何ら処理を行うことなく処理を終了するが、処理対象の画像データに対して必要な画像処理が行われた画像データが画像出力部２４へ全て出力されることで、最後段の画像処理モジュール３８から全体処理終了通知が入力された場合には、ステップ５４０の判定が肯定されてステップ５４２へ移行し、アプリケーション３２に対して画像処理の完了を通知し（図１１のステップ１７８も参照）、並列制御処理４を終了する。そして、画像処理の完了が通知されたアプリケーション３２は、ユーザに対して画像処理の完了を通知する（図１１のステップ１８０も参照）。
【０１２０】
次に、稼働中の処理管理部４６が逐次処理管理部である場合に、ワークフロー管理部４６Ａによって行われる処理を説明する。逐次処理管理部のワークフロー管理部４６Ａは、画像処理の実行が指示されると図１０(Ａ)に示すブロック単位逐次制御処理１を行い、バッファモジュール４０からデータ要求が入力される毎に図１０(Ｂ)に示すブロック単位逐次制御処理２を行い、画像処理モジュール３８から処理完了通知が入力される毎に図１０(Ｃ)に示すブロック単位逐次制御処理３を行い、画像処理モジュール３８から全体処理終了通知が入力される毎に図１０(Ｄ)に示すブロック単位逐次制御処理４を行うが、このうちブロック単位逐次制御処理１，２，４については、上記で説明した並列制御処理１，２，４と同一であるので説明を省略し、画像処理モジュール３８から処理完了通知が入力される毎に行われるブロック単位逐次制御処理３について説明する。
【０１２１】
このブロック単位逐次制御処理３では、まずステップ５１８において、処理完了通知元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定する。判定が否定された場合は何ら処理を行うことなくブロック単位逐次制御処理３を終了する。また、判定が肯定された場合はステップ５２０へ移行し、処理完了通知元の画像処理モジュール３８に処理要求を再度入力して処理を終了する。
【０１２２】
従って、逐次処理管理部のワークフロー管理部４６Ａによるブロック単位逐次制御処理では、画像処理部５０の最後段の画像処理モジュール３８に入力された処理要求がより前段の画像処理モジュール３８へ遡り、最前段の画像処理モジュール３８に到達すると、画像１面分よりも小さいサイズ（ブロック）のデータに対する画像処理が最前段の画像処理モジュール３８から逐次行われ（常に何れか１つの画像処理モジュール３８でのみ画像処理が行われると共に、画像処理を行っている画像処理モジュール３８が逐次切り替わり）、上記データに対する最後段の画像処理モジュール３８による画像処理が終了すると、最後段の画像処理モジュール３８に処理要求が再度入力されることが繰り返される逐次処理方式によって、処理対象の画像データに対する画像処理が行われることになる。
【０１２３】
また、上記のように画像処理部５０で並列処理方式又は逐次処理方式で画像処理が行われるようにワークフロー管理部４６Ａが制御を行っている間、処理管理部４６のエラー管理部４６Ｃも動作している。エラー管理部４６Ｃは、画像処理部５０の任意の画像処理モジュール３８でエラーが発生した場合、エラーが発生した画像処理モジュール３８からエラー発生通知が入力される。エラー管理部４６Ｃは、エラー発生通知が入力されると、発生したエラーの種別等のエラー情報を取得し、画像処理プログラム群３４がインストールされたコンピュータ１０が組み込まれている機器の種別や構成等を表す装置環境情報を記憶部２０等から取得し、取得した装置環境情報が表す装置環境に応じたエラー通知方法を判断し、判断したエラー通知方法でエラーの発生を通知するエラー通知処理を行う。
【０１２４】
ここで、画像処理部５０が逐次処理方式で画像処理を行っている場合には、常に何れか１つの画像処理モジュール３８でのみ画像処理が行われるので、複数の画像処理モジュール３８からエラー管理部４６Ｃへ同時又はほぼ同時にエラー発生通知が入力されることはなく、また、画像処理部５０を構成する個々のモジュールのプログラムが単一のスレッドとして実行されているので、何れかの画像処理モジュール３８で重度のエラーが発生して画像処理を停止すると、これに伴って画像処理部５０で行っている画像処理全体も停止することになるが、画像処理部５０が並列処理方式で画像処理を行っている場合には、個々の画像処理モジュール３８で並列に画像処理が行われるので、複数の画像処理モジュール３８からエラー管理部４６Ｃへ同時又はほぼ同時にエラー発生通知が入力される可能性があり、また、画像処理部５０を構成する個々のモジュールのプログラムが互いに独立したスレッドとして実行されているので、何れかの画像処理モジュール３８で重度のエラーが発生して画像処理を停止しても、画像処理部５０の他の画像処理モジュール３８では画像処理が継続されることになる。
【０１２５】
このため、並列処理管理部４６のエラー管理部４６Ｃは、複数の画像処理モジュール３８から同時又はほぼ同時にエラー発生通知が入力された場合に不都合が生じないように排他制御を行うと共に、何れかの画像処理モジュール３８で重度のエラーが発生して画像処理が停止した場合に、画像処理部５０の他の画像処理モジュール３８へエラーの発生を通知して画像処理の実行を中止させ、画像処理部５０の個々のモジュールに相当する全てのスレッドの実行を停止させる処理を行う。これにより、画像処理部５０が並列処理方式で画像処理を行っている場合にも、エラー処理を支障なく行うことができる。
【０１２６】
このように、並列処理管理部４６には並列処理方式に適したエラー処理を行うエラー管理部４６Ｃが設けられていると共に、逐次処理管理部４６には逐次処理方式に適したエラー処理を行うエラー管理部４６Ｃが設けられており、選択起動部４５が並列処理管理部４６と逐次処理管理部４６を選択的に起動することに伴い、動作するエラー管理部４６Ｃが自動的に切り替わるので、画像処理部５０を並列処理方式で動作させるか逐次処理方式で動作させるかを切り替える際の処理が簡単になる。
【０１２７】
また、画像処理部５０を逐次並列処理方式で動作させる際のワークフロー管理部４６Ａの処理についても、図１０に示したブロック単位逐次制御処理１〜４に限られるものではなく、例として図１５に示す面単位逐次制御処理１，３，４を行うようにしてもよい。図１５に示す面単位逐次制御処理では、画像処理の実行が指示されると、図１５(Ａ)に示す面単位逐次制御処理１において、まずステップ５００で１回の処理要求で指定する単位処理の実行回数を個々の画像処理モジュール３８毎に決定し、次のステップ５０５において、画像処理部５０のうち最前段の画像処理モジュール３８に処理要求を入力する。また、画像処理モジュール３８から処理完了通知が入力される毎に、図１５(Ｂ)に示す面単位逐次制御処理３において、ステップ５２０で処理完了通知元の画像処理モジュール３８に処理要求を再度入力する。これにより、画像処理部５０のうちの最前段の画像処理モジュール３８にのみ処理要求が繰り返し入力されることになる。
【０１２８】
また、画像処理モジュール３８から全体処理終了通知が入力される毎に、図１５(Ｃ)に示す面単位逐次制御処理４において、まずステップ５４０で全体処理終了通知入力元の画像処理モジュール３８が最後段の画像処理モジュール３８か否か判定する。判定が否定された場合はステップ５４４へ移行し、パイプライン形態又は有向非循環グラフ形態の連結形態における画像処理モジュール３８の位置が、全体処理終了通知元の画像処理モジュール３８の次段である画像処理モジュール３８に処理要求を入力する。これにより、画像処理を実行している画像処理モジュール３８が、処理対象の画像データに対する画像処理を終了し、当該画像処理モジュール３８から全体処理終了通知が入力された後に、画像処理を実行する画像処理モジュール３８が次段の画像処理モジュール３８へ切り替わることになり、画像１面分のデータに対する画像処理が最前段の画像処理モジュール３８から逐次行われる逐次処理方式によって、処理対象の画像データに対する画像処理が行われる。そして、最後段の画像処理モジュール３８から全体処理終了通知が入力され、ステップ５４０の判定が肯定されると、ステップ５４２で画像処理の完了がアプリケーション３２へ通知される。
【０１２９】
また、上記では画像処理部５０を並列処理方式で動作させる場合に、画像処理部５０の個々のモジュールのプログラムを互いに独立したスレッドとして実行させる態様を説明したが、これに限定されるものではなく、画像処理部５０を構成する個々のモジュールのプログラムを、各々複数のモジュールに対応する複数のスレッドとして実行させるようにしてもよい。図１６は、４個の画像処理モジュール３８と、画像処理モジュール３８の間に設けられたバッファモジュール４０をパイプライン形態で連結した構成において、最前段及び２段目の画像処理モジュール３８とその間に設けられたバッファモジュール４０をスレッドＡとして実行させると共に、３段目及び最後段の画像処理モジュール３８とその間に設けられたバッファモジュール４０をスレッドＢとしてスレッドＡと並列に実行させる例を示しているが、このような場合、逐次動作する最前段の画像処理モジュール３８と２段目の画像処理モジュール３８の間に設けられたバッファモジュール４０、及び、同じく逐次動作する３段目の画像処理モジュール３８と最終段の画像処理モジュール３８の間に設けられたバッファモジュール４０については、排他制御無しのバッファモジュール４０とし、並列に動作する２段目の画像処理モジュール３８と３段目の画像処理モジュール３８の間に設けられたバッファモジュール４０については、排他制御有りのバッファモジュール４０とすればよい。
【０１３０】
また、上記では並列処理管理部及び逐次処理管理部として、各々単一の処理管理部のプログラムが処理管理部ライブラリ４７に登録されている態様を説明したが、これに限定されるものではなく、画像処理部５０の動作環境等に応じて、複数の並列処理管理部の中から単一の並列処理管理部を選択したり、複数の逐次処理管理部の中から単一の逐次処理管理部を選択するように構成することも可能である。例えばプログラム実行リソース（例えばＣＰＵ１２等）の数が１なら逐次処理管理部を選択することで画像処理部５０で逐次処理方式によって画像処理を行わせ、プログラム実行リソースの数が２以上、かつ画像処理部５０を構成する画像処理モジュール３８の数未満ならば、画像処理部５０で図１６に示した並列処理方式（スレッドの数を抑制した並列処理）によって画像処理を行わせる並列処理管理部を選択し、プログラム実行リソースの数が２以上、かつ画像処理部５０を構成する画像処理モジュール３８の数以上ならば、画像処理部５０の個々のモジュールのプログラムを互いに独立したスレッドとして実行させる並列処理方式で画像処理部５０における画像処理を行わせる並列処理管理部を選択するようにしてもよい。
また、画像処理部５０の個々のモジュールのプログラムを互いに独立したスレッドとして実行させる並列処理方式は、プログラム実行リソースの数が画像処理モジュールの数に近ければ有効に機能する可能性が高いので、「プログラム実行リソースの数／画像処理モジュールの数」が閾値（例えば0.8等）以上であれば、画像処理部５０の個々のモジュールのプログラムを互いに独立したスレッドとして実行させる並列処理方式で画像処理部５０における画像処理を行わせる並列処理管理部を選択するようにしてもよい。
【０１３１】
また、選択起動部４５の機能構成は、図２に示した機能構成に限られるものではなく、例えば、図１７に示すように構成してもよい。図１７に示した選択起動部４５は、図２に示した選択起動部４５と同一名称の構成要素を有しているが、並列処理性能判定部４５Ｃの判定結果の出力先は、起動処理部４５Ｄではなく、表示部１６や外部の表示装置等に判定結果を表示させるように表示制御を行うアプリケーションやＯＳ等に出力されるように構成されている。また、起動処理部４５Ｄは、例えば操作部１８を介してユーザから並列処理方式の処理管理部を起動するのか逐次処理方式の処理管理部を起動するのかを示す起動指示が入力された場合に、該起動指示に応じて処理管理部を選択して起動するよう構成されている。
【０１３２】
図１８は、図１７に示す起動処理部４５により処理管理部を起動させる場合のシーケンス図の一例である。図１８において、図１１と同様の処理を行うステップには同一の符号を付して説明を省略する。ステップ１５０〜ステップ１６０までは、図１１を用いて説明したように動作する。ステップ１６０で並列処理性能判定部４５Ｃが並列処理性能判定を行った後は、並列処理性能判定部４５Ｃは、その判定結果を表示制御を行うアプリケーション（或いはＯＳ）に出力する（図１８のステップ１６１も参照。）。判定結果を受け取ったアプリケーションは、表示部１６等に判定結果を表示する。その後は、ユーザからの起動指示入力待ちとなる（図１８のステップ１６２も参照。）。操作部１８を介してユーザから起動指示が入力されると、アプリケーションは起動指示を受け付け（図１８のステップ１６３も参照。）、該起動指示を選択起動部４５の起動処理部４５Ｄに入力する（図１８のステップ１６４も参照。）。起動処理部４５Ｄは、入力された起動指示に応じて並列処理方式又は逐次処理方式の処理管理部を選択して起動する（図１８のステップ１６５も参照。）。
【０１３３】
また、図１７の構成において起動処理部４５Ｄが設けられない装置に本発明を適用してもよい。すなわち、並列度計算部４５Ａ、オーバーヘッド部計算部４５Ｂ、及び並列処理性能判定部４５Ｃを有する装置であって、データ処理部（画像処理部５０）を構築する装置とは独立に設けられ、並列処理性能判定を行い、該判定結果を外部に出力する装置としてもよい。
【０１３４】
また、上記実施の形態では、並列度を計算するパラメータとして、処理の重さ、処理の待ち合わせ度を用いたが、これに限定されるものではない。例えば、処理の重さのばらつき等をパラメータとして用いて並列度を計算してもよい。例えば、ばらつきが大きいほど並列度が小さくなるように計算する。また、処理の重さ及び処理の待ち合わせ度のいずれか一方のみを用いて並列度を計算してもよい。さらにまた、処理の重さとして、画像処理モジュール３８で行う処理に含まれる掛け算や加算の数が多いほど処理の重さが重くする例について説明したが、掛け算や加算に限らず、各処理に含まれる特定の演算の回数が多いほど処理の重さを重くなるようにしてもよい。また、各画像処理モジュール３８の単位処理にかかる時間を予め測定しておき、この情報を登録したテーブルを予め記憶部２０に記憶しておき、これを参照して並列度の計算に用いるようにしてもよい。また、各画像処理モジュール３８のプログラムコードの行数の情報を記憶部２０に記憶しておき（或いは計算の都度、行数をカウントして）、行数が多いほど処理の重さが重くなるように設定してもよい。
【０１３５】
また、上記実施の形態では、各画像処理モジュール３８の処理の待ち合わせ度を単位処理データ量に基づいて計算する例について説明したが、これに限定されず、例えば、画像処理モジュール３８で行われる画像処理が、画像１面分のデータを処理するページ処理か、或いは画像１面分より少ないライン単位のデータを処理するライン処理かを示す情報を記憶部２０の記憶領域に記憶しておき、これを参照するとともに、処理の待ち合わせ度をページ処理かライン処理かに応じて予め設定しておき、該設定値を用いて処理待ち係数を計算するようにしてもよい。
【０１３６】
また、上記実施の形態では、接続形態や画像処理モジュール３８の数によってオーバーヘッド値を求める例について説明したが、オーバーヘッド値を計算するために用いるパラメータはこれに限定されない。例えば、スレッドのロックの生じる割合に応じて、オーバーヘッド値を計算するようにしてもよい。すなわち、排他制御では、バッファモジュール４０のバッファ４０Ａにデータを書き込む際、同時に複数のモジュールからの書き込みが生じないように、毎回ロックをかけて排他制御して書き込みさせるようにしているが、書き込み回数分ロックが生じるため、ロックの時間が大きくなると、並列に動作するオーバーヘッドが大きくなってしまう。従って、書き込み処理全体におけるロックの時間の割合を各画像処理モジュール３８毎に予め測定して記憶部２０に記憶しておき、この割合が大きいほどオーバーヘッド値が大きくなるように計算してもよい。また、処理の数、接続形態、及びスレッドのロックの生じる割合の少なくとも１つに基づいて、オーバーヘッド値を求めるようにしてもよい。なお、接続形態については、上記実施の形態では、直列接続か、並列接続かで係数を異ならせて計算したが、並列接続であっても、並列接続されている画像処理モジュール３８の数等に応じてその係数を異ならせてもよい。
【０１３７】
また、上記では並列度及びオーバーヘッド値の大小を比較して並列処理性能判定を行う例について説明したが、これに限定されない。例えば、「並列度−オーバーヘッド値＞予め定められた閾値」である場合に、並列処理方式の方が短い時間で終了すると判定し、それ以外は、逐次処理方式の方が短い時間で終了すると判定してもよい。また、例えば、並列度と予め定められた第１の閾値とを比較した結果と、オーバーヘッド値と予め定められた第２の閾値とを比較した結果とに基づいて並列処理性能判定を行うようにしてもよい。具体的には、並列度が第１の閾値より大きく、且つオーバーヘッド値が第２の閾値より小さい場合に、逐次処理方式より並列処理方式の方が短い時間で終了すると判定し、それ以外は、逐次処理方式より並列処理方式の方が長い時間で終了すると判定するようにしてもよい。また、並列度が第１の閾値より小さく、オーバーヘッド値が第２の閾値より大きい場合には、逐次処理方式による処理と並列処理方式による処理とが等しくなると判定してもよい。
【０１３８】
また、上記では、並列度を求めるパラメータとオーバーヘッド値を求めるパラメータとが異なる場合について説明したが、これに限定されず、共通のパラメータを用いて並列度とオーバーヘッド値の双方を求めることもできる。例えば、単位処理データ量が小さいほど並列度はアップするが、排他制御の数もその分増加するためオーバーヘッドも増える。また、処理の重さが重いほど、並列度が上がり、オーバーヘッドが減る。このように、並列度とオーバーヘッド値の双方に関連するパラメータを用いて、並列度及びオーバーヘッド値を各々計算するようにしてもよい。
【０１３９】
また、並列度とオーバーヘッド値とを別々に計算して用いるのでなく、並列度とオーバーヘッド値の双方を示す値（或いはパラメータ）を予め定められた閾値と比較して並列処理性能判定を行うようにしてもよい。例えば、上記処理待ち係数は単位処理データ量に依存するが、前述のように、単位処理データ量が小さいほど処理待ち係数が大きくなって並列度が大きくなるものの、その分オーバーヘッドは大きくなる。すなわち、処理待ち係数（或いは単位処理データ量）は、並列度及びオーバーヘッド値の双方に影響するものといえる。そこで、閾値Ａ＜処理待ち係数＜閾値Ｂ（閾値Ａ＜閾値Ｂとする）となる場合には、逐次処理方式より並列処理方式の方が短い時間で終了する、と判定し、それ以外は、逐次処理方式より並列処理方式の方が長い時間で終了する、と判定するようにしてもよい。また、処理待ち係数単独で判定せずに、処理の重さの合計も考慮して、閾値ａ＜処理の重さの合計×処理待ち係数＜閾値ｂ（閾値ａ＜閾値ｂとする）の場合に、逐次処理方式より並列処理方式の方が短い時間で終了する、と判定し、それ以外は、逐次処理方式より並列処理方式の方が長い時間で終了する、と判定するようにしてもよい。
【０１４０】
また、処理管理部４６のプログラムは、記憶部２０の処理管理部ライブラリ４７に固定的に記憶されている必要はなく、コンピュータ１０の外部から、例えばＵＳＢメモリ等の外部記憶装置や通信回線等を介して、新たな処理管理部（並列処理管理部や逐次処理管理部）のプログラムを追加したり、既登録の処理管理部のプログラムを上書き更新可能としてもよい。ＣＰＵ１２の新たなアーキテクチャの採用等に応じて、最適な並列化の手法が変わる事も考えられるし、また最適な処理管理部のプログラムを当初より提供することが困難な場合や、処理管理部のアルゴリズムとしてより高効率のアルゴリズムが今後新たに開発される可能性もある。このような場合を考慮し、記憶部２０の処理管理部ライブラリ４７は、処理管理部のプログラムの新規追加や上書き更新が可能に構成することが望ましい。
【０１４１】
また、例えば当初は逐次処理用の処理管理部（逐次処理管理部）のみを提供し、画像処理部５０で並列処理を行わせることによる画像処理の高速化を所望しているユーザに対しては、別途料金を支払ってもらうことで並列処理管理部のプログラムの新規追加等の処理管理部のプログラムの更新を許可したり、ユーザとの間で締結したメンテナンス契約により一定期間は処理管理部のプログラムの更新を許可するようにしてもよい。
【０１４２】
また、上記では本発明に係るプログラムに対応する画像処理プログラム群３４が記憶部２０に予め記憶（インストール）されている態様を説明したが、本発明に係る画像処理プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【０１４３】
また、上記実施の形態では、画像処理装置を例に挙げたが、これに限定されるものではない。例えば、画像データに限らず様々なデータを処理（例えば、演算処理等）するデータ処理装置を適用してもよい。
【０１４４】
図１９は、画像データ以外のデータを演算処理するデータ処理装置としてのコンピュータ６００の概略構成を示すブロック図である。コンピュータ６００はＣＰＵ６１２、メモリ６１４、表示部６１６、操作部６１８、記憶部６２０、データ供給部６２２及びデータ出力部６２４を備えており、これらはバス６２６を介して互いに接続されている。表示部１６や操作部１８は、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部６２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【０１４５】
また、データ供給部６２２は処理対象のデータを供給できるものであればよく、外部メモリと接続するためのインタフェースや通信回線を介して外部からデータを受信する受信部、データを記憶するデータ記憶部（メモリ６１４又は記憶部６２０）等を適用することができる。また、データ出力部６２４は演算処理を経たデータを出力するものであればよく、例えばデータをディスプレイ等に表示する表示部、データを記録メディアに書き込む書込装置、データを通信回線を介して送信する送信部を適用することができる。また、データ出力部６２４は演算処理を経たデータを単に記憶する記憶部（メモリ６１４又は記憶部６２０）であっても構わない。
【０１４６】
図１９に示すように、記憶部６２０には、ＣＰＵ６１２によって実行される各種のプログラムとして、メモリ６１４等のリソースの管理やＣＰＵ６１２によるプログラムの実行の管理、コンピュータ６００と外部との通信等を司るオペレーティングシステムのプログラム（不図示）、コンピュータ６００を本発明に係るデータ処理装置として機能させるための処理プログラム群６３４が各々記憶されている。
【０１４７】
処理プログラム群６３４によって実現されるデータ処理装置は、不図示のアプリケーション或いは操作部６１８を介したユーザからの構築指示に従い、指示されたデータ処理（ここでは演算処理）を行うデータ処理部を構築し、アプリケーション或いはユーザからの実行指示に従い、データ処理部によって処理対象のデータの演算処理を行う。
【０１４８】
以下、処理プログラム群６３４について説明する。図１９に示すように、処理プログラム群６３４はモジュールライブラリ６３６と、処理構築部６４２のプログラムと、処理管理部ライブラリ６４７に大別される。この実施の形態に係るデータ処理装置も、前述した画像処理装置と同様に、アプリケーションからの指示等により、予め定められた演算処理を行う複数の演算モジュール６３８と、個々の演算モジュール６３８の前段及び後段の少なくとも一方に配置されデータを記憶するためのバッファを備えたバッファモジュール６４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成るデータ処理部を構築する。演算モジュール６３８の各々には、処理の重さ及び単位処理データ量（本実施の形態では、単位処理データ量をデータの個数で表すため、以下では、単位処理データ数という）が予め設定されている。データ処理部の構築方法は、前述した画像処理部の構築方法と同様であるため、説明を省略する。また、各演算モジュール６３８は、上記図４（Ａ）で示した画像処理モジュール３８と同様に、制御部と演算処理エンジンから構成され、上記と同様に動作する。また、バッファモジュール６４０も、上記図４（Ｂ）で示したバッファモジュール４０と同様に、バッファ制御部とバッファから構成され、上記バッファモジュール４０と同様に動作する。
【０１４９】
また、この実施の形態においても、データ処理部の個々の演算モジュール６３８で互いに並列に演算処理を行わせる並列処理方式と、データ処理部の演算モジュール６３８のうちの常に単一の演算モジュール６３８で演算処理を行わせると共に、演算処理を行わせる演算モジュール６３８を逐次切り替える逐次処理方式があり、本実施形態のデータ処理装置においても、並列処理方式で演算処理を行わせる場合には並列処理用のデータ処理部を構築し、逐次処理方式で演算処理を行わせる場合には逐次処理用のデータ処理部を構築することで、データ処理部における演算処理の処理方式を切り替えるようになっている。また、ここでも、並列処理用として排他制御を行う機能が付加されたバッファモジュール６４０、及び逐次処理用として排他制御を行う機能が付加されていないバッファモジュール６４０が各々用意され、モジュールライブラリ６３６には、排他制御を行う機能が付加されたバッファモジュール６４０のプログラムと排他制御を行う機能が付加されていないバッファモジュール６４０のプログラムが各々登録されている。
【０１５０】
また図１９に示すように、処理管理部ライブラリ６４７には、複数種のモジュール生成部６４４（図１９では１つしか示されていない）が含まれている。複数種のモジュール生成部６４４は互いに異なる演算処理に対応しており、処理構築部６４２によって起動されることで、対応する演算処理を実現するための演算モジュール６３８及びバッファモジュール６４０から成るモジュール群を生成する処理を行う。
【０１５１】
また、処理管理部ライブラリ６４７にプログラムが登録されている処理管理部６４６は、並列処理用のデータ処理部（バッファモジュール６４０として排他制御機能付きのバッファモジュール６４０を適用したデータ処理部）を構築させ、構築させたデータ処理部で並列処理方式によって演算処理が行われるように制御する並列処理管理部と、逐次処理用のデータ処理部（バッファモジュール６４０として排他制御機能無しのバッファモジュール６４０を適用したデータ処理部）を構築させ、構築させたデータ処理部で逐次処理方式によって演算処理が行われるように制御する逐次処理管理部に大別される。
【０１５２】
個々の処理管理部６４６は、データ処理部における演算処理の実行を制御するワークフロー管理部、データ処理部の各モジュールによるメモリ６１４や各種のファイル等のコンピュータ６００のリソースの使用を管理するリソース管理部、及び、データ処理部で発生したエラーを管理するエラー管理部を含んで構成される。これら処理管理部６４６の各構成要素の作用については、前述した画像処理装置における処理管理部と同様であるため、説明を省略する。
【０１５３】
また、アプリケーション６３２等からの指示に従ってデータ処理部を構築する処理構築部６４２は、図１９に示すように処理内容・順序判定部６５０、並列処理性能判定部６５２、及び選択起動部６４５を備えている。処理内容・順序判定部６５０は、実行すべき処理の内容を認識し、該処理を構成する各演算処理の順序を判定する。並列処理性能判定部６５２は、並列度及びオーバーヘッド値を計算し、該並列度及びオーバーヘッド値に基づいて、並列処理性能判定を行う。選択起動部６４５並列処理性能判定部６５２から出力された判定結果に基づいて、並列処理管理部又は逐次処理管理部を選択して起動し、並列処理方式又は逐次処理方式による演算処理が行われるように制御する。また、図１９においても並列処理管理部のプログラム及び逐次処理管理部のプログラムを各々１個のみ示しているが、処理管理部ライブラリ６４７には、複数種の並列処理管理部のプログラム及び複数種の逐次処理管理部のプログラムを各々登録可能とされている。
【０１５４】
次に図２０〜図２２を参照してデータ処理装置６００の作用を説明する。ここでは、入力された金額を示すデータに対して、乗算処理や加算処理等の演算処理を施して出力するデータ処理部を構築する場合を例に挙げて説明する。図２０は、データ処理部の構築から演算処理の実行に至る一連の処理を説明するためのシーケンス図である。また、図２１及び図２２は、並列処理性能判定の具体例を説明する説明図であり、図２１のａ、ｂ、ｃ、ｄ、及び図２２のｅ、ｆ、ｇ、ｈは、演算モジュール６３８の種類を示す。
【０１５５】
なお、図２１（Ａ）（Ｂ）に示されたデータ処理部において、演算モジュールａは、入力された金額のデータから消費税計算を行い、演算モジュールｂは、該計算された消費税に１０００を加算し、演算モジュールｃは、１０００が加算された値に1/10を乗算して１０％の値を求め、演算モジュールｄは、演算モジュールｃで演算された結果から５０を減算する。
【０１５６】
また、図２２（Ａ）（Ｂ）に示されたデータ処理部において、演算モジュールｅは、入力された１０個分の金額データの合計値を演算し、演算モジュールｆは、演算モジュールｅで演算された合計値に対する各金額データの割合を演算し、演算モジュールｇは、演算モジュールｆで演算された割合を項目別に合計し、演算モジュールｈは、演算モジュールｇで演算された項目別の合計に対して、各演算モジュールｆで演算された値の割合を演算する。
【０１５７】
演算処理の実行がユーザによって指示された場合等、何らかの演算処理を行う必要のある状況になると、処理構築部６４２の処理内容・順序判定部６５０は、実行すべき処理の内容を認識し、実行すべき処理を、個々のモジュール生成部６４４に対応するレベルの演算処理の組み合わせに分解し、実行すべき処理を実現するために必要な演算処理の種類及び個々の演算処理の実行順序を判定する（図２０のステップ７００も参照）。
【０１５８】
次に、処理構築部６４２の並列処理性能判定部６５２は、並列処理性能判定を行うための値を計算する。ここでは、データ処理部を構成する各演算モジュール６４０の処理の重さの和と、処理待ち合わせ度と、データ処理部を構成する演算モジュール６４０の数とを計算する。
【０１５９】
各演算モジュール６３８の「処理の重さ」は、前述の画像処理部５０の並列度を計算したときに用いた処理の重さと同様に、各演算モジュール６３８毎に予め測定した負荷（単位処理に要する時間）を１から５までの５段階評価で表したものとする。処理の重さは、例えば、各演算モジュール６３８の単位処理内の加算及び乗算の回数に応じた値としてもよい。並列処理性能判定部６５２は、各演算モジュール６３８の処理の重さを加算して処理の重さの和を求める。
【０１６０】
「処理待ち合わせ度」は、各演算モジュール６３８の単位処理データ数（前段のモジュールで処理されたデータを何個必要とするか、すなわち単位処理に必要なデータ数）に基づいて以下の式により計算される。
処理待ち合わせ度＝演算モジュールの数／各演算モジュールの単位処理データ数
【０１６１】
次に、各値を用いて並列処理性能判定を行う。ここでは、
各演算モジュールの重さの和×処理待ち合わせ度＞演算モジュールの数
が成立した場合には、データ処理部における並列処理方式による演算処理が、逐次処理方式による演算処理より短い時間で終了すると判定する。
【０１６２】
各演算モジュールの重さの和×処理待ち合わせ度＜演算モジュールの数
が成立した場合には、データ処理部における並列処理方式による演算処理が、逐次処理方式による演算処理より長い時間で終了すると判定する。
【０１６３】
各演算モジュールの重さの和×処理待ち合わせ度＝演算モジュールの数
が成立した場合には、並列処理方式と逐次処理方式とでデータ処理部の演算処理に要する時間は等しいと判定する。
【０１６４】
なお、上記３式における左辺の「各演算モジュールの重さの和×処理待ち合わせ度」は並列度を示し、右辺の「演算モジュールの数」はオーバーヘッド値を示す。
【０１６５】
並列処理性能判定部６５２は、該判定結果を選択起動部６４５に出力する（図２０のステップ７０２も参照。）。
【０１６６】
ここで、図２１に示す例では、図２１（Ｃ）に示すように、各演算モジュール６３８の処理の重さの和は８となり、処理待ち合わせ度は１となり、演算モジュール６３８の個数は４であるため、８×１＞４となり、データ処理部における並列処理方式による演算処理が、逐次処理方式による演算処理より短い時間で終了する（並列処理方式により性能が出る）、と判定される。一方、図２２に示す例では、図２２（Ｃ）に示すように、各演算モジュール６３８の処理の重さの和は８となり、処理待ち合わせ度は０．２８６となり、演算モジュール６３８の個数は４であるため、８×０．２８６＜４となり、データ処理部における並列処理方式による演算処理が、逐次処理方式による演算処理より長い時間で終了する（並列処理方式では性能が出ない）、と判定される。
【０１６７】
選択起動部６４５は、並列処理性能判定部６５２から入力された判定結果に応じて、起動すべき処理管理部を選択し、起動する（図２０のステップ７０４も参照）。ここでは、上記判定結果が、並列処理方式による演算処理が、逐次処理方式による演算処理より短い長い時間で終了する、という判定結果であった場合には、並列処理方式での演算処理が行われるように、並列処理管理部６４６を選択して起動する。また、上記判定結果が、並列処理方式による演算処理が、逐次処理方式による演算処理より長い時間で終了する、という判定結果であった場合には、逐次処理方式での演算処理が行われるように、逐次処理管理部６４６を選択して起動する。なお、並列処理方式と逐次処理方式とでデータ処理部の演算処理に要する時間は等しいとの判定結果であった場合には、どちらを選択して起動してもよい。従って、予めどちらを選択するかを設定しておき、該設定に応じて選択して起動する。
【０１６８】
起動された処理管理部が並列処理管理部６４６であれば、上記のバッファモジュール６４０として排他制御機能付きのバッファモジュール６４０が生成され、起動された処理管理部が逐次処理管理部６４６であれば、上記のバッファモジュール６４０として排他制御機能無しのバッファモジュール６４０が生成される（図２０のステップ７０６も参照。）。更に、処理構築部６４２で、上記で判定した演算処理の種類及び実行順序に基づいて、特定の演算処理に対応する演算モジュール生成部６４４を起動し、起動した演算モジュール生成部６４４に対し、当該演算モジュール生成部６４４によるモジュール群の生成に必要な情報を与え、演算モジュールの生成を指示する（図２０では不図示）。また、必要とされる演算処理が複数種ある場合には、個々の演算処理に対応する他のモジュール生成部６４４を起動してモジュール群の生成に必要な情報を通知し、個々の演算処理の実行順序の昇順に繰り返す。これにより、処理管理部６４４の演算モジュール生成部６４４は、演算モジュール６３８を生成する（図２０のステップ７０８も参照。）。
【０１６９】
一方、処理構築部６４２は、順次起動した演算モジュール生成部６４４によって前述のモジュール生成処理が順次行われることで、必要とされる演算処理を行うデータ処理部の構築が完了すると、稼働中の処理管理部６４６に対してデータ処理部による演算処理の実行を指示する（図２０のステップ７１０も参照）。処理管理部６４６は、演算処理の実行が指示されると、メモリ６１４にロードしたデータ処理部の各モジュールのプログラムを、オペレーティングシステムを通じてスレッドとしてＣＰＵ６１２に実行させる（図２０のステップ７１２も参照。）。ここで、稼働中の処理管理部６４６が並列処理管理部である場合、処理管理部６４６は、データ処理部の個々の演算モジュール６３８で互いに並列に演算処理を行わせるために、データ処理部を構成する個々のモジュールのプログラムを互いに独立したスレッドとしてＣＰＵ６１２に実行させる。また、稼働中の処理管理部６４６が逐次処理管理部である場合、処理管理部６４６は、データ処理部を構成する個々のモジュールのプログラムを単一のスレッドとしてＣＰＵ６１２に実行させる。なお、スレッドに代えて、プロセス又はオブジェクトとしてＣＰＵ６１２に実行させるようにしてもよい。
【０１７０】
なお、データ処理部による一連の演算処理が完了した場合には、処理管理部６４６は、処理構築部６４２に対して演算処理の完了を通知し（図２０のステップ７１４も参照）、並列制御処理（或いは逐次制御処理）を終了する。そして、演算処理の完了が通知された処理構築部６４２は、ユーザに対して演算処理の完了を通知する（図２０のステップ７１６も参照）。
【０１７１】
なお、データ処理装置の構成は、一例であって、上記例に限定されるものではないことはもちろんである。例えば、上記データ処理装置では、並列処理性能判定の結果に応じて並列処理管理部または逐次処理管理部を選択して起動するが、例えば、処理管理部を選択して起動する構成を含めずに、該判定結果を出力するだけの構成としてもよい。また、並列処理性能判定の方法も、上記説明した例にとどまらず、様々なパラメータを用いて並列度及びオーバーヘッド値を計算して判定可能である。
【０１７２】
また、上記データ処理装置では、バッファモジュール６４０を演算モジュール６３８に連結してデータ処理部を構築する例について説明したが、例えば、前段から後段に受け渡すデータの大きさが小さい場合等においては、バッファモジュール６４０がないデータ処理部を構築してもよい。
【０１７３】
また、処理方式を選択する際に、画像処理部５０（或いはデータ処理部）の動作環境を考慮して選択するようにしてもよい。例えば、例えばコンピュータ１０に設けられているプログラム実行リソース（例えばＣＰＵ等）の数を用いることができ、例えば「プログラム実行リソースの数がＮ個以上であって、上記並列処理性能判定結果で、並列処理方式のほうが処理時間が短いと判定された場合に並列処理管理部４６を起動し、それ以外の場合には逐次処理管理部４６を起動する」等の条件を設けてもよい。
【符号の説明】
【０１７４】
１０  コンピュータ
１２  ＣＰＵ
２０  記憶部
２２  画像データ供給部
２４  画像出力部
３４  画像処理プログラム群
３８  画像処理モジュール
４０  バッファモジュール
４５  選択起動部
４６  並列処理管理部、逐次処理管理部
６００  コンピュータ
６１２  ＣＰＵ
６２０  記憶部
６２２  データ供給部
６２４  画像出力部
６３４  処理プログラム群
６３８  演算モジュール
６４０  バッファモジュール
６４５  選択起動部
６４６  並列処理管理部、逐次処理管理部
６４７  並列処理性能判定部
【図１】
0005703729.tif 000002
【図２】
0005703729.tif 000003
【図３】
0005703729.tif 000004
【図４】
0005703729.tif 000005
【図５】
0005703729.tif 000006
【図６】
0005703729.tif 000007
【図７】
0005703729.tif 000008
【図８】
0005703729.tif 000009
【図９】
0005703729.tif 000010
【図１０】
0005703729.tif 000011
【図１１】
0005703729.tif 000012
【図１２】
0005703729.tif 000013
【図１３】
0005703729.tif 000014
【図１４】
0005703729.tif 000015
【図１５】
0005703729.tif 000016
【図１６】
0005703729.tif 000017
【図１７】
0005703729.tif 000018
【図１８】
0005703729.tif 000019
【図１９】
0005703729.tif 000020
【図２０】
0005703729.tif 000021
【図２１】
0005703729.tif 000022
【図２２】
0005703729.tif 000023