(57)【要約】【課題】複数のモジュールを効率よく実行することを可能とする情報処理装置、情報処理プログラムを提供する。【解決手段】待ち行列から、次に実行する所定の処理を示す識別情報を取得し、取得された識別情報が示す所定の処理が実行可能か否か判断し、判断結果を出力し、出力された判断結果が実行可能を示す場合に、所定の処理のうちの一部の処理を演算処理手段を用いることにより実行し、一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否か判断し、所定の処理が実行不可能な場合、又は所定の処理が終了していない場合に、所定の処理を示す識別情報を待ち行列に復帰させ、所定の処理が終了したと判断された場合に、所定の処理を示す識別情報を待ち行列に復帰させずに破棄する。【選択図】図１０
2009053829.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理を実行するための演算を行う演算処理手段と、
複数の前記所定の処理を識別するために、前記複数の所定の処理の各々に設けられた識別情報を用いて、前記複数の所定の処理を実行する順番を定めた待ち行列が記憶された待ち行列記憶手段と、
前記待ち行列記憶手段により記憶された待ち行列から、次に実行する所定の処理を示す識別情報を取得する取得手段と、
前記取得手段により取得された識別情報が示す所定の処理が実行可能か否か判断し、判断結果を出力する実行判断手段と、
前記実行判断手段により出力された判断結果が実行可能を示す場合に、前記所定の処理のうちの一部の処理を前記演算処理手段を用いることにより実行する実行手段と、
前記実行手段により前記一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否か判断する終了判断手段と、
前記実行判断手段により出力された判断結果が実行不可能を示す場合、又は前記所定の処理が前記終了判断手段により終了していないと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させる待ち行列復帰手段と、
前記所定の処理が前記終了判断手段により終了したと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させずに破棄する識別情報破棄手段と、
を有する情報処理装置。
【請求項２】
前記実行手段による前記一部の処理の実行後に、続けて前記一部の処理が実行可能か否か判断する再実行判断手段を更に有し、
前記実行手段は、前記再実行判断手段により実行可能と判断された場合に、再び前記一部の処理を実行する請求項１に記載の情報処理装置。
【請求項３】
前記実行判断手段は、前記識別情報が示す所定の処理が実行不可能な場合には、実行可能と判断できるまで待機した後に、判断結果を出力する請求項１又は請求項２に記載の情報処理装置。
【請求項４】
前記演算処理手段は、一つの前記実行手段による前記一部の処理を実行するとともに、複数の前記実行手段による前記一部の処理を同時に実行可能な複数の演算手段が設けられている請求項１〜請求項３のいずれか１項に記載の情報処理装置。
【請求項５】
前記実行手段により前記一部の処理を実行する際に用いられる処理対象情報を記憶する処理対象情報記憶手段と、
異なる２つの前記実行手段により前記一部の処理を実行する際に共有して用いられる前記処理対象情報記憶手段に設けられた記憶領域を管理する管理手段と、
を更に有し、
前記管理手段は、一方の前記実行手段が前記記憶領域を用いている場合には、他方の前記実行手段が前記記憶領域を用いることを禁止する請求項４に記載の情報処理装置。
【請求項６】
前記実行手段は、前記演算手段の数だけ設けられる請求項４又は請求項５に記載の情報処理装置。
【請求項７】
前記演算手段が演算している度合いを示す使用率を検出する検出手段を更に有し、
前記実行手段は、前記検出手段により検出された使用率が所定の使用率以下の演算手段の数だけ設けられる請求項４又は請求項５に記載の情報処理装置。
【請求項８】
前記実行手段が一部の処理を複数回にわたり実行する場合には、前記実行手段は複数の前記演算手段のうちの予め定められた一つの前記演算手段を用いる請求項４〜請求項７のいずれか１項に記載の情報処理装置。
【請求項９】
前記実行手段が一部の処理を複数回にわたり実行する場合には、前記実行手段は複数の前記演算手段のうちの予め定められた一つの前記演算手段を優先的に用いる請求項４〜請求項７のいずれか１項に記載の情報処理装置。
【請求項１０】
複数の前記所定の処理を識別するために、前記複数の所定の処理の各々に設けられた識別情報を用いて、前記複数の所定の処理を実行する順番を定めた待ち行列が記憶された待ち行列記憶手段により記憶された待ち行列から、次に実行する所定の処理を示す識別情報を取得する取得ステップと、
前記取得ステップにより取得された識別情報が示す所定の処理が実行可能か否か判断し、判断結果を出力する実行判断ステップと、
前記実行判断ステップにより出力された判断結果が実行可能を示す場合に、前記所定の処理のうちの一部の処理を、前記所定の処理を実行するための演算を行う演算処理手段を用いることにより実行する実行ステップと、
前記実行ステップにより前記一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否か判断する終了判断ステップと、
前記実行判断ステップにより出力された判断結果が実行不可能を示す場合、又は前記所定の処理が前記終了判断ステップにより終了していないと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させる待ち行列復帰ステップと、
前記所定の処理が前記終了判断ステップにより終了したと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させずに破棄する識別情報破棄ステップと、
を有する処理をコンピュータで実行するための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理プログラムに関する。
【背景技術】
【０００２】
複数の画像処理モジュールを組み合わせて所望の処理手順を構築して、画像処理を行う方式としては、特許文献１に記載されているように、画像処理モジュールを直接接続して各モジュールが自身の前段の画像処理モジュールを呼び出して処理する方式や、各画像処理モジュールの間に画像データを一時保持するバッファを配置し、バッファに出力要求に応えられるだけのデータが蓄積されていなければ前段の画像処理モジュールに処理を行わせる事で全体を連携させて処理する方式が提案されている。
【０００３】
さらに、上記複数の画像処理モジュールを組み合わせる方式を高速処理するため、並列処理による高速化も提案されており、特許文献１に対応する並列化方式としては特許文献２がある。
【０００４】
また、パイプラインまたはＤＡＧ構造の末端モジュールに対して処理指示を行うか、または制御手段に末端モジュールを指定して制御手段に処理指示をし、制御手段が末端を呼び出して処理を行うよう構成の場合、ＤＡＧ構造のように末端が複数あっても良いケースなどでは、ユーザや制御部は複数の末端（例えばA,B）を管理し、その呼び出し方（AAAAA…,BBBBB… とするか ABABABABAB… とするかなど）を制御する必要があり、制御が複雑になっている。
【特許文献１】特許第３６１７８５１号明細書
【特許文献２】特開平１０−３０４１８４号公報
【特許文献３】特開２００５−２５０５６５号公報
【特許文献４】特開２００６−４３８２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このような技術背景において、複数の画像処理モジュールを組み合わせて処理する方式では、複数のスレッドを割り付けて並列化する事により処理速度を向上させる手法が提案されている。しかしながら、並列処理には排他制御という（逐次制御にはない）余分なコストが発生し、また装置には固有の/その時点での有効に動作可能なスレッド数があるため、Ａ個のモジュールを並列に処理する場合に単純にＡ個のスレッドで処理すれば良いとは限らない。
【０００６】
また、図１３に示されるように、Ａ個（図では５個）のモジュールをA個のスレッドに割り付け、装置の有効演算リソース数がＮ個の場合には（Ａ＞Ｎ）、ＯＳ（Operating System）がそのスケジューリングを行うが、余分なスレッドの切り替えが発生して効率が落ちるし、さらに１つの演算リソースに適当にスレッドが配置されるので均等に演算リソースが使用されず、結果として（総処理コスト/演算リソース）よりもかなり多くの処理コストがかかる場合がある。上記の特許文献２に開示された技術などでは、この課題に対応できていなかった。
【０００７】
このような、割り付け不均等による並列化効率の低下を避けるため、これまで各種の考案がなされている。
【０００８】
例えば特許文献３では、直前の実行結果から負荷を見積もり、それによって処理モジュールを負荷の重いもの/軽いものの２つのグループに分ける技術が開示されている。最初に重いモジュールの単位処理を割り付け、割り付け終わったら予測負荷が少ないスレッドから順に軽いモジュールの単位処理を割り付ける。こうする事で、割り付けの不均等を少なくしている。
【０００９】
しかし、特許文献３に開示された技術では、処理モジュールの順序などを考慮せずに割り当てしているため、各モジュール間に何らかの排他制御が必要になり、演算リソースが少なく有効なスレッド数がモジュール数よりも少ない時に、無駄な排他制御が入り効果が少ない並列化を行う事になる。
【００１０】
また特許文献４に開示された技術では、処理やその順序が固定の場合には利用可能だが、処理や順序が異なる場合には利用できない。
【００１１】
更に他の方法として、図１４に示されるように、Ａ個のモジュール群をＮ個のグループに分け、グループ間は排他制御付きのバッファで接続し、グループ内は排他制御なしのバッファで接続し、Ｎ個のグループをＮ個のスレッドに割り付けることで、余分な排他制御コストなしに、並列化効果が高い、任意の処理や処理順序に対応可能なものもある。
【００１２】
しかし上記方法では、モジュール群をなるべく負荷均等になるようにＮ個にグループ分けする前処理が必要であった。
【００１３】
このように、従来の技術では、本来の処理以外の処理が必要となる等のため、複数のモジュールを効率よく実行することが出来ないという問題点があった。
【００１４】
本発明は上記問題点に鑑み、複数のモジュールを効率よく実行することを可能とする情報処理装置、情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、請求項１の発明は、所定の処理を実行するための演算を行う演算処理手段と、複数の前記所定の処理を識別するために、前記複数の所定の処理の各々に設けられた識別情報を用いて、前記複数の所定の処理を実行する順番を定めた待ち行列が記憶された待ち行列記憶手段と、前記待ち行列記憶手段により記憶された待ち行列から、次に実行する所定の処理を示す識別情報を取得する取得手段と、前記取得手段により取得された識別情報が示す所定の処理が実行可能か否か判断し、判断結果を出力する実行判断手段と、前記実行判断手段により出力された判断結果が実行可能を示す場合に、前記所定の処理のうちの一部の処理を前記演算処理手段を用いることにより実行する実行手段と、前記実行手段により前記一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否か判断する終了判断手段と、前記実行判断手段により出力された判断結果が実行不可能を示す場合、又は前記所定の処理が前記終了判断手段により終了していないと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させる待ち行列復帰手段と、前記所定の処理が前記終了判断手段により終了したと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させずに破棄する識別情報破棄手段と、を有する。
【００１６】
また、請求項２の発明は、請求項１の発明において、前記実行手段による前記一部の処理の実行後に、続けて前記一部の処理が実行可能か否か判断する再実行判断手段を更に有し、前記実行手段は、前記再実行判断手段により実行可能と判断された場合に、再び前記一部の処理を実行するものである。
【００１７】
また、請求項３の発明は、請求項１又は請求項２の発明において、前記実行判断手段は、前記識別情報が示す所定の処理が実行不可能な場合には、実行可能と判断できるまで待機した後に、判断結果を出力するものである。
【００１８】
また、請求項４の発明は、請求項１〜請求項３のいずれか１項の発明において、前記演算処理手段は、一つの前記実行手段による前記一部の処理を実行するとともに、複数の前記実行手段による前記一部の処理を同時に実行可能な複数の演算手段が設けられているものである。
【００１９】
また、請求項５の発明は、請求項４の発明において、前記実行手段により前記一部の処理を実行する際に用いられる処理対象情報を記憶する処理対象情報記憶手段と、異なる２つの前記実行手段により前記一部の処理を実行する際に共有して用いられる前記処理対象情報記憶手段に設けられた記憶領域を管理する管理手段と、を更に有し、前記管理手段は、一方の前記実行手段が前記記憶領域を用いている場合には、他方の前記実行手段が前記記憶領域を用いることを禁止するものである。
【００２０】
また、請求項６の発明は、請求項４又は請求項５の発明において、前記実行手段は、前記演算手段の数だけ設けられるものである。
【００２１】
また、請求項７の発明は、請求項４又は請求項５の発明において、前記演算手段が演算している度合いを示す使用率を検出する検出手段を更に有し、前記実行手段は、前記検出手段により検出された使用率が所定の使用率以下の演算手段の数だけ設けられるものである。
【００２２】
また、請求項８の発明は、請求項４〜請求項７のいずれか１項の発明において、前記実行手段が一部の処理を複数回にわたり実行する場合には、前記実行手段は複数の前記演算手段のうちの予め定められた一つの前記演算手段を用いるものである。
【００２３】
また、請求項９の発明は、請求項４〜請求項７のいずれか１項の発明において、前記実行手段が一部の処理を複数回にわたり実行する場合には、前記実行手段は複数の前記演算手段のうちの予め定められた一つの前記演算手段を優先的に用いるものである。
【００２４】
また、請求項１０の発明は、複数の前記所定の処理を識別するために、前記複数の所定の処理の各々に設けられた識別情報を用いて、前記複数の所定の処理を実行する順番を定めた待ち行列が記憶された待ち行列記憶手段により記憶された待ち行列から、次に実行する所定の処理を示す識別情報を取得する取得ステップと、前記取得ステップにより取得された識別情報が示す所定の処理が実行可能か否か判断し、判断結果を出力する実行判断ステップと、前記実行判断ステップにより出力された判断結果が実行可能を示す場合に、前記所定の処理のうちの一部の処理を、前記所定の処理を実行するための演算を行う演算処理手段を用いることにより実行する実行ステップと、前記実行ステップにより前記一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否か判断する終了判断ステップと、前記実行判断ステップにより出力された判断結果が実行不可能を示す場合、又は前記所定の処理が前記終了判断ステップにより終了していないと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させる待ち行列復帰ステップと、前記所定の処理が前記終了判断ステップにより終了したと判断された場合に、当該所定の処理を示す識別情報を前記待ち行列記憶手段により記憶された待ち行列に復帰させずに破棄する識別情報破棄ステップと、を有する処理をコンピュータで実行するための情報処理プログラムである。
【発明の効果】
【００２５】
請求項１の発明によれば、複数のモジュールを効率よく実行することを可能とする情報処理装置を提供することができるという効果が得られる。
【００２６】
請求項２の発明によれば、続けて処理を実行できるので、効率よく複数のモジュールを実行することができる。
【００２７】
請求項３の発明によれば、処理が実行できる可能性がある場合には、待ち行列に復帰させずに処理を実行できるので、効率よく複数のモジュールを実行することができる。
【００２８】
請求項４の発明によれば、演算処理手段として、複数の演算手段が設けられたものを用いることができる。
【００２９】
請求項５の発明によれば、一方の前記実行手段が前記記憶領域を用いている場合には、他方の前記実行手段が前記記憶領域を用いることを禁止することにより、処理対象情報ではない無効な情報に対する処理の実行を回避することができる。
【００３０】
請求項６の発明によれば、同時に実行可能な数だけ実行手段が設けられるため、効率よく複数のモジュールを実行することができる。
【００３１】
請求項７の発明によれば、使用率が高い演算手段で実行しても効率は良くないため、実質的に同時に実行可能な数だけ実行手段が設けることで効率よく複数のモジュールを実行することができる。
【００３２】
請求項８の発明によれば、実行手段は予め定められた演算手段を用いるので、演算手段の切り替えに要する無駄な処理を排除することができる。
【００３３】
請求項９の発明によれば、実行手段は予め定められた演算手段を優先的に用いるので、演算手段の切り替えに要する無駄な処理を排除することができる。
【００３４】
請求項１０の発明によれば、複数のモジュールを効率よく実行することを可能とする情報処理プログラムを提供することができるという効果が得られる。
【発明を実施するための最良の形態】
【００３５】
以下、図面を参照して本発明の実施形態の一例を詳細に説明する。図１には、本発明に係る画像処理装置として機能することが可能なコンピュータ１０が示されている。なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部で画像処理を行う必要のある任意の画像取扱機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００３６】
コンピュータ１０はＣＰＵ１２、メモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２及び画像出力部２４を備えており、これらはバス２６を介して互いに接続されている。コンピュータ１０が上述したような画像取扱機器に組み込まれている場合、表示部１６や操作部１８としては、画像取扱機器に設けられたＬＣＤ等から成る表示パネルやテンキー等を適用することができる。また、コンピュータ１０が独立したコンピュータである場合、表示部１６や操作部１８としては、当該コンピュータに接続されたディスプレイやキーボード、マウス等を適用することができる。また、記憶部２０としてはＨＤＤ(Hard Disk Drive)が好適であるが、これに代えてフラッシュメモリ等の他の不揮発性記憶手段を用いることも可能である。
【００３７】
また、画像データ供給部２２は処理対象の画像データを供給できるものであればよく、例えば紙や写真フイルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部、通信回線を介して外部から画像データを受信する受信部、画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）等を適用することができる。
【００３８】
また、画像出力部２４は画像処理を経た画像データ又は該画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙や感光材料等の記録材料に記録する画像記録部、画像データが表す画像をディスプレイ等に表示する表示部、画像データを記録メディアに書き込む書込装置、画像データを通信回線を介して送信する送信部を適用することができる。また、画像出力部２４は画像処理を経た画像データを単に記憶する画像記憶部（メモリ１４又は記憶部２０）であっても構わない。
【００３９】
図１に示すように、記憶部２０には、ＣＰＵ１２によって実行される各種のプログラムとして、メモリ１４等のリソースの管理やＣＰＵ１２によるプログラムの実行の管理、コンピュータ１０と外部との通信等を司るオペレーティングシステム３０のプログラム、コンピュータ１０を本発明に係る画像処理装置として機能させるための画像処理プログラム群３４、ＣＰＵ１２が上記画像処理プログラム群を実行することで実現される画像処理装置に対して所望の画像処理を行わせる各種のアプリケーション３２のプログラム（図１ではアプリケーションプログラム群３２と表記）が各々記憶されている。
【００４０】
画像処理プログラム群３４は、前述した各種の画像取扱機器や携帯機器を開発する際の開発負荷を軽減したり、ＰＣ等で利用可能な画像処理プログラムを開発する際の開発負荷を軽減することを目的として、各種の画像取扱機器や携帯機器、ＰＣ等の各種機器（プラットフォーム）で共通に使用可能に開発されたプログラムであり、本発明に係る画像処理プログラムに対応している。
【００４１】
画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、アプリケーション３２からの実行指示に従い、前記画像処理部によって画像処理を行う（詳細は後述）。画像処理プログラム群３４は、所望の画像処理を行う画像処理部（所望の構成の画像処理部）の構築を指示したり、構築された画像処理部による画像処理の実行を指示するためのインタフェースをアプリケーション３２に提供している。
【００４２】
このため、内部で画像処理を行う必要のある任意の機器を新規開発する等の場合にも、前記画像処理を行うプログラムの開発に関しては、当該機器で必要とされる画像処理を上記のインタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発するのみで済み、実際に画像処理を行うプログラムを新たに開発する必要が無くなるので、開発負荷を軽減することができる。
【００４３】
また、画像処理プログラム群３４によって実現される画像処理装置は、前述のように、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理部を構築し、構築した画像処理部によって画像処理を行うので、例えば画像処理対象の画像データの色空間や１画素当たりのビット数が不定であったり、実行すべき画像処理の内容や手順・パラメータ等が不定である場合にも、アプリケーション３２が画像処理部の再構築を指示することで、画像処理装置（画像処理部）によって実行される画像処理を、処理対象の画像データ等に応じて柔軟に変更することができる。
【００４４】
以下、画像処理プログラム群３４について説明する。図１に示すように、画像処理プログラム群３４はモジュールライブラリ３６と、処理構築部４２のプログラムと、処理管理部４６に大別される。
【００４５】
本実施形態に係る処理構築部４２は、アプリケーションからの指示により、例として図２に示すように、予め定められた画像処理を行うための１つ以上の画像処理モジュール３８と、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置され画像データを記憶するためのバッファを備えたバッファモジュール４０と、がパイプライン形態又はＤＡＧ(Directed Acyclic Graph：有向非循環グラフ)形態で連結されて成る画像処理部５０を構築する。上記画像処理モジュール３８は所定の処理であり、この画像処理モジュール３８は、後述するスレッドにより実行される。
【００４６】
上記バッファは、スレッドにより一部の処理を実行する際に用いられる処理対象情報を記憶するメモリ１４に設けられる。また、バッファモジュール４０は、異なる２つのスレッドにより一部の処理を実行する際に共有して用いられるメモリ１４に設けられた記憶領域を管理する管理手段であり、バッファモジュール４０は、一方のスレッドが記憶領域を用いている場合には、他方のスレッドが記憶領域を用いることを禁止するようにしている。
【００４７】
画像処理部５０を構成する個々の画像処理モジュールの実体はＣＰＵ１２によって実行されＣＰＵ１２で所定の画像処理を行わせるための第１プログラム、又は、ＣＰＵ１２によって実行されＣＰＵ１２により図１に図示されていない外部の画像処理装置（例えば専用画像処理ボード等）に対する処理の実行を指示するための第２プログラムである。上述したモジュールライブラリ３６には、予め定められた互いに異なる画像処理（例えば入力処理やフィルタ処理、色変換処理、拡大・縮小処理、スキュー角検知処理、画像回転処理、画像合成処理、出力処理等）を行う複数種の画像処理モジュール３８のプログラムが各々登録されている。以下では、説明を簡単にするために、画像処理部５０を構成する個々の画像処理モジュールの実体が上記の第１プログラムであるものとして説明する。
【００４８】
個々の画像処理モジュール３８は、例として図３(Ａ)にも示すように、画像データに対する画像処理を所定の単位処理データ量（処理の一部）ずつ行う画像処理エンジン３８Ａと、画像処理モジュール３８の前段及び後段のモジュールとの画像データの入出力及び画像処理エンジン３８Ａの制御を行う制御部３８Ｂから構成されている。
【００４９】
個々の画像処理モジュール３８における単位処理データ量は、画像の１ライン分、画像の複数ライン分、画像の１画素分、画像１面分等を含む任意のバイト数の中から、画像処理エンジン３８Ａが行う画像処理の種類等に応じて予め選択・設定されている。例えば色変換処理やフィルタ処理を行う画像処理モジュール３８では単位処理データ量が１画素分とされ、拡大・縮小処理を行う画像処理モジュール３８では単位処理データ量が画像の１ライン分又は画像の複数ライン分とされ、画像回転処理を行う画像処理モジュール３８では単位処理データ量が画像１面分とされ、画像圧縮伸長処理を行う画像処理モジュール３８では単位処理データ量が実行環境に依存するＮバイトとされている。
【００５０】
また、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類が同一でかつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている（図１では、この種の画像処理モジュールを「モジュール１」「モジュール２」と表記して示している）。
【００５１】
例えば拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを１画素おきに間引くことで50％に縮小する縮小処理を行う画像処理モジュール３８、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等の複数の画像処理モジュール３８が各々用意されている。また、例えば色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間をＣＭＹ色空間へ変換する画像処理モジュール３８やその逆へ変換する画像処理モジュール３８、Ｌ*ａ*ｂ*色空間等の他の色空間変換を行う画像処理モジュール３８が各々用意されている。
【００５２】
また、画像処理モジュール３８の制御部３８Ｂは、画像処理エンジン３８Ａが単位処理データ量ずつ処理するために必要な画像データを入力するために、自モジュールの前段のモジュール（例えばバッファモジュール４０）から画像データを単位読出データ量ずつ取得し、画像処理エンジン３８Ａから出力される画像データを単位書込データずつ後段のモジュール（例えばバッファモジュール４０）へ出力する（画像処理エンジン３８Ａで圧縮等のデータ量の増減を伴う画像処理が行われなければ単位書込データ量＝単位処理データ量となる）か、画像処理エンジン３８Ａによる画像処理の結果を自モジュールの外部へ出力する（例えば画像処理エンジン３８Ａがスキュー角検知処理等の画像解析処理を行う場合、画像データに代えてスキュー角検知結果等の画像解析処理結果が出力されることがある）処理を行うが、モジュールライブラリ３６には、画像処理エンジン３８Ａが実行する画像処理の種類及び内容が同一で、上記の単位処理データ量や単位読出データ量、単位書込データ量が異なる画像処理モジュール３８も登録されている。例えば、画像回転処理を行う画像処理モジュール３８についても、前述のように単位処理データ量が画像１面分の画像処理モジュール３８のプログラム以外に、単位処理データ量が画像の１ライン分や画像の複数ライン分の画像処理モジュール３８のプログラムがモジュールライブラリ３６に登録されていても良い。
【００５３】
また、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８のプログラムは、画像処理エンジン３８Ａに相当するプログラムと制御部３８Ｂに相当するプログラムから構成されているが、制御部３８Ｂに相当するプログラムは部品化されており、個々の画像処理モジュール３８のうち単位読出データ量及び単位書込データ量が同一の画像処理モジュール３８は、画像処理エンジン３８Ａで実行される画像処理の種類や内容に拘わらず、制御部３８Ｂに相当するプログラムが共通化されている（制御部３８Ｂに相当するプログラムとして同一のプログラムが用いられている）。これにより、画像処理モジュール３８のプログラムの開発にあたっての開発負荷が軽減される。
【００５４】
なお、画像処理モジュール３８の中には、入力される画像の属性が未知の状態では単位読出データ量及び単位書込データ量が確定しておらず、入力画像データの属性を取得し、取得した属性を所定の演算式に代入して演算することで単位読出データ量や単位書込データ量が確定するモジュールが存在している。この種の画像処理モジュール３８については、単位読出データ量と単位書込データ量が互いに同一の演算式を用いて導出される画像処理モジュール３８について、制御部３８Ｂに相当するプログラムを共通化するようにすればよい。
【００５５】
また、本実施形態に係る画像処理プログラム群３４は、前述のように各種機器に実装可能であるが、画像処理プログラム群３４のうちモジュールライブラリ３６に登録する画像処理モジュール３８の数や種類等については、画像処理プログラム群３４を実装する各種機器で必要とされる画像処理に応じて、適宜追加・削除・入替等が可能であることは言うまでもない。
【００５６】
また、画像処理部５０を構成する個々のバッファモジュール４０は、例として図３(Ｂ)にも示すように、バッファ４０Ａと、バッファ制御部４０Ｂとから構成されている。バッファ４０Ａは、コンピュータ１０に設けられたメモリ１４からオペレーティングシステム３０を通じて確保されたメモリ領域で構成される。バッファ制御部４０Ｂは、バッファモジュール４０の前段及び後段のモジュールとの画像データの入出力及びバッファ４０Ａの管理を行う。個々のバッファモジュール４０のバッファ制御部４０Ｂもその実体はＣＰＵ１２によって実行されるプログラムであり、モジュールライブラリ３６にはバッファ制御部４０Ｂのプログラムも登録されている（図１ではバッファ制御部４０Ｂのプログラムを「バッファモジュール」と表記して示している）。
【００５７】
また、アプリケーション３２からの指示に従って画像処理部５０を構築する処理構築部４２は、図１に示すように複数種のモジュール生成部４４から構成されている。複数種のモジュール生成部４４は互いに異なる画像処理に対応しており、アプリケーション３２によって起動されることで、対応する画像処理を実現するための画像処理モジュール３８及びバッファモジュール４０から成るモジュール群を生成する処理を行う。
【００５８】
なお、図１ではモジュール生成部４４の一例として、モジュールライブラリ３６に登録されている個々の画像処理モジュール３８が実行する画像処理の種類に対応するモジュール生成部４４を示しているが、個々のモジュール生成部４４に対応する画像処理は、複数種の画像処理モジュール３８によって実現される画像処理（例えばスキュー角検知処理と画像回転処理から成るスキュー補正処理）であってもよい。必要とされる画像処理が複数種の画像処理を組み合わせた処理である場合、アプリケーション３２は複数種の画像処理の何れかに対応するモジュール生成部４４を順次起動する。これにより、アプリケーション３２によって順次起動されたモジュール生成部４４により、必要とされる画像処理を行う画像処理部５０が構築されることになる。
【００５９】
また図１に示すように、処理管理部４６は、画像処理部５０における画像処理の実行を制御するワークフロー管理部４６Ａ、画像処理部５０の各モジュールによるメモリ１４や各種のファイル等のコンピュータ１０のリソースの使用を管理するリソース管理部４６Ｂ、及び、画像処理部５０で発生したエラーを管理するエラー管理部４６Ｃを含んで構成される。
【００６０】
画像処理プログラム群３４が実装されている機器において、何らかの画像処理を行う必要のある状況になると、この状況が特定のアプリケーション３２によって検知される。
【００６１】
なお、画像処理を行う必要のある状況としては、例えば画像データ供給部２２としての画像読取部によって画像を読み取り、画像出力部２４としての画像記録部により記録材料に画像として記録するか、画像出力部２４としての表示部に画像として表示させるか、画像出力部２４としての書込装置により画像データを記録メディアに書き込むか、画像出力部２４としての送信部により画像データを送信するか、画像出力部２４としての画像記憶部に記憶させるジョブの実行がユーザによって指示された場合、或いは、画像データ供給部２２としての受信部によって受信されるか、画像データ供給部２２としての画像記憶部に記憶されている画像データに対して、上記の記録材料への記録、表示部への表示、記録メディアへの書き込み、送信、画像記憶部への記憶の何れかを行うジョブの実行がユーザによって指示された場合が挙げられる。
【００６２】
また、画像処理を行う必要のある状況は上記に限られるものではなく、例えばユーザからの指示に応じてアプリケーション３２が実行可能な処理の名称等を表示部１６に一覧表示している状態で、実行対象の処理がユーザによって選択された等の場合であってもよい。
【００６３】
以下、本実施の形態において行われる処理について、フローチャート等を用いて説明する。なお、以下の説明では、画像処理モジュールを単にモジュールと表現し、バッファモジュールを単にバッファと表現する。最初に、図４を用いて、本実施の形態における処理の概要について説明する。
【００６４】
同図には、キュー６０、３つのスレッド６２Ａ、６２Ｂ、６２Ｃ、及び３つのＣＰＵコア７０Ａ、７０Ｂ、７０Ｃが示されている。以下では、スレッド６２Ａ、６２Ｂのように、末尾にＡ、Ｂ等の添字が付与された符号により表される複数の要素を総称して指し示す時、或いは、それら複数の要素のうちの任意の１つを指し示す時は、末尾の添字を省いて説明する。
【００６５】
同図に示されるキュー６０は、モジュールである所定の処理を識別するために、複数のモジュールの各々に設けられた識別情報（モジュールＩＤ、図では、１〜５）を用いて、複数のモジュールを実行する順番を定めたものであり、このキューは、例えばメモリ１４に記憶されている。
【００６６】
スレッド６２は、識別情報が示すモジュールが実行可能である場合に、モジュールのうちの一部の処理をＣＰＵ１２を用いることにより実行するものである。なお、モジュールのうちの一部の処理とは、上述した画像の１ライン分、画像の複数ライン分、画像の１画素分等、モジュールが実行すべき処理のうちの一部の処理を意味する。
【００６７】
また、ＣＰＵコアについてであるが、ＣＰＵ１２は、一つのスレッド６２による一部の処理を実行するとともに、複数のスレッド６２による一部の処理を同時に実行可能な複数の演算手段が設けられており、この演算手段がＣＰＵコアである。なお、コアが一つであっても、複数のスレッド６２が同時に実行可能なＣＰＵがある。その場合のコアの数は、同時に実行可能なスレッド６２の数を意味することとなる。
【００６８】
同図では、３つのＣＰＵコア７０が設けられているため、スレッド６２は、ＣＰＵコア７０の数である３つだけ設けるようにしている。しかし、そのＣＰＵコア７０が演算している度合いを示す使用率を検出するシステムコールを用いて各ＣＰＵコア７０の使用率を検出し、例えば３つのＣＰＵコア７０のうち、検出された使用率が所定の使用率以下のＣＰＵコア７０の数だけスレッド６２を設けるようにしても良い。このような使用率に基づきスレッド６２を設ける方式は、多くの処理を実行している汎用的なコンピュータの場合に有効である。
【００６９】
また、スレッド６２が一部の処理を複数回にわたり実行する場合には、複数のＣＰＵコア７０のうちの予め定められた一つのＣＰＵコア７０を用いるようにしても良い。このように、スレッド６２を特定のＣＰＵコア７０に割り当てることは、システムコールにより実現することが出来る。なお、ＯＳによっては、スレッド６２を特定のＣＰＵコア７０に優先的に割り当てシステムコールのみが用意されている場合があるため、その場合のスレッド６２は、予め定められた一つのＣＰＵコア７０を優先的に用いるようにしても良い。
【００７０】
このように、スレッド６２を割り付けるＣＰＵコア７０を固定、または優先するＣＰＵコア７０を指定することで、従来のように、ＣＰＵコア数と等しい数のスレッド６２を生成しても、ＯＳの割付機構により動作するＣＰＵコア７０が切り替わり、結果として並列化効率が下がることなく、スレッド６２が割り付けられるＣＰＵコア７０の切り替わりを低減させ、効率の良い並列処理を実現することができる。
【００７１】
なお、図２に示したように、各モジュールは、前段のモジュールが実行されない限り、処理ができないので、スレッド６２の数をＣＰＵコア数＋１など、多少多めにしても良い。その場合は、上記システムコールによるＣＰＵへの割り付けは行わないか、または半数のスレッド６２のみに対して割り付けを行うなどになる。また、処理を実行するスレッド６２以外にも他の処理が動作しているので、スレッド数はＣＰＵコア数−1などとしても良い。
【００７２】
以上説明した図４に示した構成で、３つのスレッド６２は、キューから次に実行するモジュールを示す識別情報を取得する。この割り当ての処理等の詳細を、図５〜図８を用いて説明する。図５には、処理管理部４６、キュー６０、複数のモジュール３８、及び複数のバッファ４０が示されている。モジュールは、Ｍａ、Ｍｂ等と表現され、ａ、ｂ等は、そのモジュールの識別情報を示している。バッファは、Ｂａ、Ｂｂ等と表現され、ａ、ｂ等は、バッファを区別するためのものである。
【００７３】
まず、図示していないスレッド６２は、キュー６０から次に実行するモジュールを示す識別情報ａを取得し、対応するモジュールＭａを起動する。そして、一部の処理が終了すると、再びキュー６０に識別情報を復帰する。基本的な処理の流れはこのようになっている。
【００７４】
図５に示した例は、先頭のモジュール３８に対する処理の流れを示すものであったが、２番目のモジュールＭｂに対しても、図６に示されるように同様なものとなっている。具体的にスレッド６２は、キュー６０から次に実行するモジュールを示す識別情報ｂを取得し、対応するモジュールＭｂを起動する。そして、一部の処理が終了すると、再びキュー６０に識別情報を復帰する。
【００７５】
また、次の図７、図８に示される処理の流れは、一部の処理の実行後に、続けて一部の処理が実行可能と判断された場合に、再び一部の処理を実行する場合の流れを示すものである。
【００７６】
同図に示されるように、スレッド６２は、キュー６０から識別情報ａを取得し、対応するモジュールＭａを起動する。そして、一部の処理が終了し、続けて一部の処理が実行可能と判断された場合に、再び一部の処理を実行する。実行可能と判断される限り処理を続けることで、モジュールＭａの全ての処理が終了した場合に、スレッド６２は、識別情報ａをキュー６０に復帰させずに破棄するため、同図に復帰は示されていない。
【００７７】
モジュールＭａの全ての処理が終了すると、図８に示されるように、スレッド６２は、キュー６０から識別情報ｂを取得し、対応するモジュールＭｂを起動する。そして、一部の処理が終了し、続けて一部の処理が実行可能と判断された場合に、再び一部の処理を実行する。実行可能と判断される限り処理を続けるが、モジュールＭｂの全ての処理が終了しなかった場合に、スレッド６２は、識別情報ｂをキュー６０に復帰させる。
【００７８】
次に、複数のスレッド６２を用いる場合の処理の流れを、図９を用いて説明する。スレッド６２Ａは、識別情報ａを取得し、モジュールＭａを起動する。そして、一部の処理が終了すると、再びキュー６０に識別情報ａを復帰する。同様に、スレッド６２Ｂは、識別情報ｂを取得し、モジュールＭｂを起動する。そして、一部の処理が終了すると、再びキュー６０に識別情報ｂを復帰する。
【００７９】
このように複数のスレッド６２を用いて実行する場合は、スレッド６２がキュー６０から識別情報を取得する際に、異なるスレッド６２が同じ識別情報を取得しないための排他制御が必要となる。
【００８０】
以上説明した処理の流れをフローチャートを用いて説明する。図１０はスレッド６２の処理を示すフローチャートである。まず、ステップ１０１で、キュー６０が空、すなわち並んでいる識別情報があるか否か判断する。キュー６０が空の場合は、処理を終了する。一方、キュー６０が空ではない場合には、ステップ１０２で、キュー６０から識別情報を一つ取得し、ステップ１０３でモジュールを起動する。次のステップ１０４で、処理が成功したか否かを判断する。この処理の成功とは、一部の処理が実行できたか否かを示すものである。一部の処理が成功しなかった場合には、ステップ１０７で、識別情報をキュー６０に復帰し、再びステップ１０１の処理に戻る。
【００８１】
一方、一部の処理が成功した場合には、一部の処理が複数回にわたり実行されたことにより、対応する所定の処理の全てが終了したか否かステップ１０５で判断する。全ての処理が終了した場合には、ステップ１０６で識別情報を破棄し、再びステップ１０１の処理に戻る。
【００８２】
一方、ステップ１０５で、所定の処理の全てが終了していないと判断した場合には、ステップ１０７で、識別情報をキューに復帰し、再びステップ１０１の処理に戻る。
【００８３】
次に、バッファが行う処理について説明する。この処理は２種類あり、それぞれ図１１、図１２を用いて説明する。
【００８４】
まず、図１１のフローチャートを用いてバッファ処理（その１）について説明する。まず、ステップ２０１で、スレッド６２が要求したデータである要求データが記憶されているか否か判断する。上述したように、各モジュールは、バッファが管理する記憶領域に記憶されたデータを用いて処理をするため、このデータがない場合には、一部の処理の実行が不可能である。
【００８５】
従って、ステップ２０１で、否定判断した場合には、ステップ２０２で、要求データを返せないことをスレッド６２に戻り値として出力して処理を終了する。この場合の「要求データを返せないこと」が実行不可能を示す判断結果である。要求データを返せないことが出力されると、スレッド６２により一部の処理が実行できないため、上記ステップ１０４で処理が成功しなかったと判断される。
【００８６】
一方、ステップ２０１で肯定判断した場合には、ステップ２０３で、要求データが記憶されている先頭アドレスを出力し、処理を終了する。この場合の「要求データが記憶されている先頭アドレス」が、実行可能を示す判断結果である。要求データが記憶されている先頭アドレスが出力されると、スレッド６２により一部の処理が実行され、上記ステップ１０４で処理が成功したと判断される。
【００８７】
次に、図１２を用いて、バッファ処理（その２）について説明する。まず、ステップ３０１で、要求データが記憶されているか否か判断する。ステップ３０２で、既に１回以上処理したデータを返しているか否か判断する。言い換えると、１回以上処理をしたか否か判断する。ステップ３０２で否定判断した場合には、ステップ３０３で、要求データを返せないことをスレッド６２に戻り値として出力して処理を終了する。この場合の「要求データを返せないこと」が実行不可能を示す判断結果である。要求データを返せないことが出力されると、スレッド６２により一部の処理が実行できないため、上記ステップ１０４で処理が成功しなかったと判断される。
【００８８】
一方、ステップ３０１で肯定判断した場合には、ステップ３０４で、要求データが記憶されている先頭アドレスを出力し、処理を終了する。この場合の「要求データが記憶されている先頭アドレス」が、実行可能を示す判断結果である。要求データが記憶されている先頭アドレスが出力されると、スレッド６２により一部の処理が実行され、上記ステップ１０４で処理が成功したと判断される。
【００８９】
また、ステップ３０２で肯定判断した場合には、ステップ３０５で、要求データが記憶されるまで待ち、記憶されると要求データが記憶されている先頭アドレスを戻す。すなわち、実行可能と判断できるまで待機した後に、判断結果を出力するようになっている。
【００９０】
上記ステップ３０２の判断について説明する。要求データがまだ記憶されていない時に、要求データを返せない事をすぐに出力してしまうと、モジュールが待ち行列に戻され次のモジュールが取り出されるが、例えば面処理の場合には一回以上処理したモジュールは（その前段側モジュールが動作しているという事なので）キュー６０に戻さずに、要求データが記憶されるのを待ち、識別情報をキュー６０に復帰させない方が効率が良い可能性が高い。
【００９１】
従って、一回も処理していないモジュールの場合はすぐに識別情報をキューに復帰させ、一回以上処理している場合には要求データが記憶されるまで待機するということを行っている。
【００９２】
以上説明したように、本実施の形態では、モジュールをキュー６０から順番に取得して起動するようになっている。モジュールは、バッファにデータを要求し、バッファは上述したように、要求データがあれば出力し、なければ出力できない事を通知する。その結果、モジュールは、要求データが取得できれば一部の処理を実行し、できなければそのまま終わり、全ての所定の処理が終わってなければ待ち行列に戻るようにしている。
【００９３】
さらに、要求データに対して処理し終わったモジュールを、キュー６０に戻して次のモジュールを起動すれば、一部の処理ずつ実行する例えばライン単位などの単位データ量毎の処理方式になり、キューに戻さず全ての処理が終わるまで一部の処理を繰り返せば面単位の処理方式になる。
【００９４】
また、本実施の形態では、Ｎ個のスレッド６２を生成して全モジュールのうち処理可能なもの（要求データが準備できたもの）にだけスレッド割付を行うことが出来、余分なスレッド６２を生成せず、かつ図１４のようなグループに分けるなどの前処理なしに、Ｎ個のスレッド６２で処理を行う事ができる。
【００９５】
なお、モジュール並列（例えば図１３の方式）では、各モジュールがスレッドに１対１で割り付けられ、そのスレッドが（ＯＳのスケジューラにより待ち行列制御などが行われて）ＣＰＵに割り付けられるが、この方式が上述した本実施の形態における処理と異なる点について説明する。
【００９６】
図１３の方式では、ＣＰＵコアとスレッド６２の対応はスケジューラによって頻繁に切り替えられ、キャッシュが無効になったり、切り替え時点でＣＰＵコアが処理していない事等により性能が落ちる。
【００９７】
そこで、一つのスレッド６２とＣＰＵコア７０はなるべく固定して実行する事が望ましいが、図１３の方式ではスレッド数とＣＰＵコア数は無関係なので、ＣＰＵコアとスレッドの対応を固定できない。しかし本実施の形態ではＣＰＵコア数（または使用率が所定の使用率以下のＣＰＵコア数）と同じ数のスレッド６２を生成させるので、対応を固定させる事ができる。
【００９８】
なお、以上説明した各フローチャートの処理の流れは一例であり、本発明の主旨を逸脱しない範囲内で処理順序を入れ替えたり、新たなステップを追加したり、不要なステップを削除したりすることができることは言うまでもない。
【図面の簡単な説明】
【００９９】
【図１】本実施形態に係るコンピュータ（画像処理装置）の概略構成を示すブロック図である。
【図２】画像処理部の構成例を示すブロック図である。
【図３】(Ａ)は画像処理モジュール、(Ｂ)はバッファモジュールの概略構成及び実行される処理を各々示すブロック図である。
【図４】本実施の形態における処理の概要示す図である。
【図５】先頭のモジュールに対する処理の流れを示す図である。
【図６】２番目のモジュールに対する処理の流れを示す図である。
【図７】先頭のモジュールにおいて続けて一部の処理が実行可能と判断された場合に、再び一部の処理を実行する場合の流れを示す図である。
【図８】２番目のモジュールにおいて続けて一部の処理が実行可能と判断された場合に、再び一部の処理を実行する場合の流れを示す図である。
【図９】複数のスレッドを用いる場合の処理の流れを示す図である。
【図１０】スレッドの処理を示すフローチャートである。
【図１１】バッファ処理を示すフローチャートである（その１）。
【図１２】バッファ処理を示すフローチャートである（その２）。
【図１３】従来技術を示す図である（その１）。
【図１４】従来技術を示す図である（その２）。
【符号の説明】
【０１００】
１０  コンピュータ
１２  ＣＰＵ
１４  メモリ
２０  記憶部
２２  画像データ供給部
２４  画像出力部
３０  オペレーティングシステム
３２  アプリケーションプログラム群
３４  画像処理プログラム群
３６  モジュールライブラリ
３８  画像処理モジュール
３８Ａ  画像処理エンジン
３８Ｂ  制御部
４０  バッファモジュール
４０Ａ  バッファ
４０Ｂ  バッファ制御部
４２  処理構築部
４４  モジュール生成部
４６Ｃ  エラー管理部
４６Ｂ  リソース管理部
４６Ａ  ワークフロー管理部
４６  処理管理部
５０  画像処理部
６０  キュー
６２  スレッド
６２Ａ、６２Ｂ  スレッド
７０、７０Ａ、７０Ｂ、７０Ｃ  ＣＰＵコア
【図１】
2009053829.tif 000003
【図２】
2009053829.tif 000004
【図３】
2009053829.tif 000005
【図４】
2009053829.tif 000006
【図５】
2009053829.tif 000007
【図６】
2009053829.tif 000008
【図７】
2009053829.tif 000009
【図８】
2009053829.tif 000010
【図９】
2009053829.tif 000011
【図１０】
2009053829.tif 000012
【図１１】
2009053829.tif 000013
【図１２】
2009053829.tif 000014
【図１３】
2009053829.tif 000015
【図１４】
2009053829.tif 000016