(57)【要約】【課題】画像処理全体の処理時間を短縮することができる画像処理装置、画像処理方法、及び画像処理プログラムを得る。【解決手段】画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置として機能するコンピュータ１０は、画像処理の対象となる画像データを分割画像データに分割し、予め定められた記憶領域に記憶された分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行い、部分処理に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを、上記制御を行う制御部に通知する。【選択図】図１
2020035393.tif 000002
【特許請求の範囲】
【請求項１】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、
前記画像処理の対象となる画像データを分割画像データに分割する分割部と、
予め定められた記憶領域に記憶された前記分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行う制御部と、
前記部分処理に対応する前記分割画像データが前記記憶領域に記憶された場合に、前記分割画像データが前記記憶領域に記憶されたことを前記制御部に通知する通知部と、
を備えた画像処理装置。
【請求項２】
前記通知部は、前記分割画像データが前記記憶領域に記憶されたことを表す通知情報を、前記制御部が参照可能な通知キューに格納することによって前記通知を行う
請求項１に記載の画像処理装置。
【請求項３】
前記制御部は、実行可能な前記部分処理が存在せず、かつ前記通知キューに前記通知情報が格納されていない場合、スリープ状態へと移行し、前記スリープ状態へと移行した状態で、かつ前記通知キューに前記通知情報が格納された場合、アクティブ状態へと移行し、前記制御を行う
請求項２に記載の画像処理装置。
【請求項４】
前記制御部は、実行可能な前記部分処理を、前記複数の演算装置が参照可能なタスクキューに格納することによって前記制御を行う
請求項１から請求項３の何れか１項に記載の画像処理装置。
【請求項５】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置が実行する画像処理方法であって、
前記画像処理の対象となる画像データを分割画像データに分割し、
予め定められた記憶領域に記憶された前記分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行い、
前記部分処理に対応する前記分割画像データが前記記憶領域に記憶された場合に、前記分割画像データが前記記憶領域に記憶されたことを、前記制御を行う制御部に通知する
処理を含む画像処理方法。
【請求項６】
コンピュータを、請求項１から請求項４の何れか１項に記載の画像処理装置の分割部、制御部、及び通知部として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、画像処理装置、画像処理方法、及び画像処理プログラムに関する。
【背景技術】
【０００２】
従来、プログラムモジュールの組合せを表したグラフ構造を、分割した入力データ毎にノードを分割したグラフ構造に変換し、変換したグラフ構造の先行ノードの処理が終わったノードを並列に処理する情報処理装置が開示されている（特許文献１参照）。
【０００３】
また、ＤＡＧ（Directed Acyclic Graph：有向非循環（非巡回）グラフ）形態で表された画像処理の実行順序に従って、並列に画像処理を行う技術が開示されている。（非特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４４９１０２６号公報
【非特許文献】
【０００５】
【非特許文献１】The OpenVX Specification、［online］、［2018年8月7日検索］、インターネット<URL: https://www.khronos.org/registry/OpenVX/specs/1.2/OpenVX_Specification_1_2.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１及び非特許文献１に記載の技術は、処理の開始時に、処理対象とする全ての入力データが装置内の記憶部に記憶されている必要があり、全ての入力データが装置内の記憶部に記憶されるまで処理を開始できないものであった。このため、処理全体の処理時間が増大してしまう場合があった。
【０００７】
本開示は、以上の事情を鑑みて成されたものであり、画像処理全体の処理時間を短縮することができる画像処理装置、画像処理方法、及び画像処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本開示の画像処理装置は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、画像処理の対象となる画像データを分割画像データに分割する分割部と、予め定められた記憶領域に記憶された分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行う制御部と、部分処理に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを制御部に通知する通知部と、を備える。
【０００９】
なお、本開示の画像処理装置は、通知部が、分割画像データが記憶領域に記憶されたことを表す通知情報を、制御部が参照可能な通知キューに格納することによって上記通知を行ってもよい。
【００１０】
また、本開示の画像処理装置は、制御部が、実行可能な部分処理が存在せず、かつ通知キューに通知情報が格納されていない場合、スリープ状態へと移行し、スリープ状態へと移行した状態で、かつ通知キューに通知情報が格納された場合、アクティブ状態へと移行し、上記制御を行ってもよい。
【００１１】
また、本開示の画像処理装置は、制御部が、実行可能な前記部分処理を、複数の演算装置が参照可能なタスクキューに格納することによって上記制御を行ってもよい。
【００１２】
一方、上記目的を達成するために、本開示の画像処理方法は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置が実行する画像処理方法であって、画像処理の対象となる画像データを分割画像データに分割し、予め定められた記憶領域に記憶された分割画像データに対して行う画像処理である部分処理の各々を複数の演算装置の各々に並列して実行させる制御を行い、部分処理に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを、上記制御を行う制御部に通知する処理を含むものである。
【００１３】
また、上記目的を達成するために、本開示の画像処理プログラムは、コンピュータを、本開示の画像処理装置の分割部、制御部、及び通知部として機能させるためのものである。
【発明の効果】
【００１４】
本開示によれば、画像処理全体の処理時間を短縮することができる。
【図面の簡単な説明】
【００１５】
【図１】実施形態に係る画像処理装置として機能するコンピュータの構成の一例を示すブロック図である。
【図２Ａ】画像処理ＤＡＧの一例を示す概略図である。
【図２Ｂ】画像処理ＤＡＧに入出力用のメモリを加えた場合の一例を示す概略図である。
【図３】実施形態に係る処理制御部の機能的な構成の一例を示すブロック図である。
【図４Ａ】入力画像の分割処理の一例の説明に供する概略図である。
【図４Ｂ】入力画像の分割処理の一例の説明に供する概略図である。
【図５】画像処理モジュールが部分処理に分割された画像処理ＤＡＧの一例を示す概略図である。
【図６】実施形態に係るＤＡＧ構築・実行処理の流れの一例を示すフローチャートである。
【図７】実施形態に係る第１タスク格納処理の流れの一例を示すフローチャートである。
【図８】実施形態に係るタスクキューへのタスクの格納処理の説明に供する概略図である。
【図９】実施形態に係る第２タスク格納処理の流れの一例を示すフローチャートである。
【図１０】実施形態に係るタスク実行処理の流れの一例を示すフローチャートである。
【図１１】実施形態に係る通知処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本開示の技術を実施するための形態例を詳細に説明する。
【００１７】
まず、図１を参照して、画像処理装置として機能するコンピュータ１０の構成を説明する。なお、コンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの装置の機能を兼ね備えた複合機、及びスキャナ等の内部で画像処理を行う画像取扱機器に組み込まれたコンピュータであってもよい。また、コンピュータ１０は、ＰＣ（Personal Computer）等の独立したコンピュータであってもよく、ＰＤＡ（Personal Digital Assistant）及び携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００１８】
図１に示すように、本実施形態に係るコンピュータ１０は、第１演算部１２Ａ、第２演算部１２Ｂ、メモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２、及び画像出力部２４を備えている。また、第１演算部１２Ａ、第２演算部１２Ｂ、メモリ１４、表示部１６、操作部１８、記憶部２０、画像データ供給部２２、及び画像出力部２４の各部は、バス２６を介して互いに接続されている。
【００１９】
本実施形態に係る第１演算部１２Ａは、コンピュータ１０のメイン・プロセッサであり、一例として複数のプロセッサ・コア１３（以下、「コア１３」という。）を有するＣＰＵ（Central Processing Unit）である。なお、各コア１３が、画像処理を実行する演算装置の一例である。以下では、各コア１３を区別して説明する場合は、コア１３Ａ、コア１３Ｂのように、符号の末尾にアルファベットを付して説明する。
【００２０】
また、本実施形態に係る第２演算部１２Ｂは、一例として内部にローカルメモリ１５を有するＧＰＵ（Graphics Processing Unit）である。なお、第２演算部１２Ｂは、ローカルメモリ１５等の内部メモリを備え、内部メモリに記憶された画像データに対して画像処理を行う演算装置であれば、特に限定されず、例えば、ＣＰＵでもよい。また、第２演算部１２Ｂは、第１演算部１２Ａに内蔵されたＧＰＵでもよい。また、第１演算部１２Ａ及び第２演算部１２Ｂは、ＦＰＧＡ（Field Programmable Gate Array）等の演算器でもよい。
【００２１】
メモリ１４は、第１演算部１２Ａが一時的にデータを記憶させる不揮発性の記憶手段である。本実施形態に係る第２演算部１２Ｂにより画像処理を行う場合、第１演算部１２Ａはメモリ１４又は記憶部２０の記憶領域に記憶された画像データを第２演算部１２Ｂにバス２６を介して転送する。そして、第２演算部１２Ｂは、第１演算部１２Ａから転送された画像データをローカルメモリ１５に記憶し、記憶した画像データに対して画像処理を行う。
【００２２】
コンピュータ１０が前述した画像取扱機器に組み込まれている場合、表示部１６及び操作部１８は、例えば画像取扱機器に設けられたＬＣＤ（Liquid Crystal Display）等の表示パネル及びテンキー等が適用される。また、コンピュータ１０が独立したコンピュータである場合、表示部１６及び操作部１８は、例えばコンピュータ１０に接続されたディスプレイ、及びキーボード、マウス等が適用される。また、表示部１６及び操作部１８は、タッチパネル及びディスプレイが一体化して構成されたタッチパネルディスプレイ等でもよい。また、記憶部２０は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）、及びフラッシュメモリ等の不揮発性の記憶媒体が適用される。
【００２３】
画像データ供給部２２は、処理対象の画像データを供給するものであればよく、例えば紙又は写真フィルム等の記録材料に記録されている画像を読み取って画像データを出力する画像読取部が適用される。また、画像データ供給部２２は、例えば通信回線を介して外部装置から画像データを受信する受信部等が適用される。
【００２４】
画像出力部２４は、画像処理を経た画像データ又は画像処理を経た画像データが表す画像を出力するものであればよく、例えば画像データが表す画像を紙又は感光材料等の記録材料に記録する画像記録部が適用される。また、画像出力部２４は、画像データが表す画像をディスプレイ等に表示する表示部（表示部１６）、画像データをＣＤ−ＲＯＭ（Compact Disk Read Only Memory）等の記録媒体に書き込む書込装置が適用される。また、画像出力部２４は、画像処理を経た画像データを、通信回線を介して外部装置に送信する送信部が適用される。また、画像出力部２４は、画像処理を経た画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）であってもよい。
【００２５】
図１に示すように、記憶部２０には、第１演算部１２Ａ及び第２演算部１２Ｂによって実行される各種プログラムが記憶されている。記憶部２０には、各種プログラムとして、リソースの管理、プログラムの実行の管理、及びコンピュータ１０と外部装置との通信等を司るオペレーティングシステム３０のプログラムが記憶されている。また、記憶部２０には、各種プログラムとして、コンピュータ１０を画像処理装置として機能させるための画像処理プログラム群３４が記憶されている。また、記憶部２０には、各種プログラムとして、上記画像処理装置に対して所望の画像処理を行わせる各種のアプリケーションプログラム群３２（以下、「アプリケーション３２」という。）が記憶されている。
【００２６】
画像処理プログラム群３４は、前述した画像取扱機器、携帯機器、及びＰＣ等で実行される画像処理プログラムを開発する際の負荷を軽減することを目的として開発されたプログラムである。また、画像処理プログラム群３４は、前述した画像取扱機器、携帯機器、及びＰＣ等の各種機器（プラットフォーム）で共通に実行可能に開発されたプログラムである。
【００２７】
画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理ＤＡＧ５０Ａ（詳細は後述）を構築する。そして、上記画像処理装置は、アプリケーション３２からの実行指示に従い画像処理ＤＡＧ５０Ａの処理を実行する。このため、画像処理プログラム群３４は、所望の画像処理を行う画像処理ＤＡＧ５０Ａの構築を指示したり、構築された画像処理ＤＡＧ５０Ａによる画像処理の実行を指示したりするためのインタフェースをアプリケーション３２に提供している。
【００２８】
以上の構成により、内部で画像処理を行う必要のある任意の機器を新規に開発する場合等にも、上記画像処理を行うプログラムの開発に関しては、上記任意の機器で必要とされる画像処理を、上記インタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発すればよい。従って、開発者は、実際に画像処理を行うプログラムを新たに開発する必要が無くなり、開発者の負荷が軽減される。
【００２９】
次に、本実施形態に係る画像処理プログラム群３４について詳細に説明する。図１に示すように、画像処理プログラム群３４は、モジュールライブラリ３６、処理構築部４２のプログラム、及び処理制御部４６のプログラムを含む。
【００３０】
モジュールライブラリ３６は、予め定められた互いに異なる画像処理を行う複数種類の画像処理モジュール３８のプログラムが各々登録されている。この画像処理としては、例えば、入力処理、フィルタ処理、色変換処理、拡大・縮小処理（図１では「拡縮処理」と表記）、スキュー角検知処理、画像回転処理、画像合成処理、及び出力処理等が挙げられる。
【００３１】
また、モジュールライブラリ３６には、画像処理の種類が同一で、かつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている。図１では、この種の画像処理モジュールを「モジュール１」、「モジュール２」と、末尾に数字を付して区別している。例えば、拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを、水平方向及び垂直方向の各方向ともに１画素おきに間引くことで画像の縦横のサイズを５０％に縮小する縮小処理を行う画像処理モジュール３８が用意されている。さらに、例えば、拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等が用意されている。
【００３２】
また、例えば、色変換処理を行う画像処理モジュール３８については、ＲＧＢ（Red Green Blue）色空間の画像をＣＭＹＫ（Cyan Magenta Yellow Key-Plate（黒））色空間の画像へ変換する画像処理モジュール３８、及びＣＭＹＫ色空間の画像をＲＧＢ色空間の画像へ変換する画像処理モジュール３８が用意されている。さらに、例えば、色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間の画像をＹＣｂＣｒ色空間の画像へ変換する画像処理モジュール３８、及びＹＣｂＣｒ色空間の画像をＲＧＢ色空間の画像へ変換する画像処理モジュール３８等が用意されている。
【００３３】
また、モジュールライブラリ３６には、画像データを記憶するための記憶領域（バッファ）を備えたバッファモジュール４０も登録されている。
【００３４】
本実施形態に係る処理構築部４２は、アプリケーション３２からの指示により、ＤＡＧ形態の画像処理ＤＡＧ５０Ａを構築する。画像処理ＤＡＧ５０Ａは、一例として図２Ａに示すように、１つ以上の画像処理モジュール３８が、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置されたバッファモジュール４０を介して連結される。
【００３５】
なお、個々の画像処理モジュール３８は、入力画像データに対して画像処理を実行するオブジェクトの一例である。また、図２Ａに示す例では、バッファモジュール４０を介して前段に画像処理モジュール３８が連結された画像処理モジュール３８は、前段の画像処理モジュール３８による画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。また、バッファモジュール４０を介して前段に複数の画像処理モジュール３８が連結された画像処理モジュール３８は、前段の複数の画像処理モジュール３８の全ての画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。
【００３６】
また、図２Ａでは、各モジュールのみが処理の順に接続されたＤＡＧを示しているが、このＤＡＧが実行される際には、図２Ｂに示すようにメモリ１４に記憶された入力画像データが入力されてＤＡＧに従って画像処理が行われる。そして、最終的にメモリ１４に処理済みの出力画像データ等の処理結果が記憶される。
【００３７】
次に、図３を参照して、本実施形態に係る処理制御部４６の機能的な構成を説明する。図３に示すように、処理制御部４６は、分割部６０、制御部６２、タスクキュー６４、出力部６６、通知部６７、及び通知キュー６８を備えている。
【００３８】
本実施形態に係る分割部６０は、入力画像データの処理対象とする部分により示される画像を複数の部分領域（以下、「分割画像」という）に分割する。一例として図４Ａに示すように、分割部６０は、入力画像データの処理対象とする部分により示される画像Ｇを、複数（図４Ａに示す例では３つ）の分割画像Ｂ１〜Ｂ３に分割する。以下では分割画像を示す画像データを「分割画像データ」という。
【００３９】
入力画像データの処理対象とする部分とは、色変換処理のように入力画像全体を処理対象とする画像処理では、入力画像データ全体が処理対象とする部分を意味する。また、入力画像データの処理対象とする部分とは、切り抜き（トリミング）処理のように、入力画像の一部を処理対象とする画像処理では、入力画像の一部を意味する。以下では、錯綜を回避するために、入力画像データの処理対象とする部分を、単に「入力画像データ」という。
【００４０】
また、図４Ａに示した例では、分割部６０が画像Ｇを正面視上下に分割しているが、これに限定されない。例えば分割部６０は画像Ｇを正面視左右に分割してもよいし、図４Ｂに示すように、正面視上下左右に分割してもよい。
【００４１】
なお、分割部６０による入力画像データの分割数は特に限定されない。例えば、分割部６０は、予め定められた数又はサイズで入力画像データを分割してもよい。また、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部が有するプロセッサ・コア数以下で、かつ２以上の数に入力画像データを分割してもよい。
【００４２】
また、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部が有するキャッシュメモリの容量以下のサイズで入力画像データを分割してもよい。この場合、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部のプロセッサから最も遠いレベルのキャッシュメモリ、所謂ＬＬＣ（Last Level Cache）の容量以下で、かつＬＬＣの容量に極力一致するサイズで入力画像データを分割する形態が例示される。
【００４３】
本実施形態に係る画像データ供給部２２は、画像データを供給する前に、画像データの大きさ（例えば、縦と横の画素数等）及びデータ容量等の画像データに関する情報を供給する。そして、画像データ供給部２２は、画像データに関する情報の供給後に、画像データの供給を開始する。この際、画像データ供給部２２は、画像データが示す画像の左上の画素から右下の画素に向かう順番等の予め定められた順番に従って、画像データを順次供給する。従って、本実施形態に係る分割部６０は、処理対象の画像データ全体が画像データ供給部２２から供給されていなくても、画像データに関する情報に基づいて、画像データを分割することができる。
【００４４】
本実施形態に係る制御部６２は、分割画像データに対応するタスクを複数のコア１３に並列に実行させる制御を行う。なお、ここでいう並列とは、依存関係に基づいて実行可能となったタスクが複数のコア１３により並列に（同時に）実行されることを意味する。
【００４５】
具体的には、制御部６２は、一例として図５に示すように、画像処理ＤＡＧ５０Ａの各画像処理モジュール３８で実行される画像処理を分割画像データ（分割部６０により分割された分割画像データ）の各々に対応する部分処理３９に分割して、画像処理ＤＡＧ５０Ａを画像処理ＤＡＧ５０Ｂに更新する。なお、画像処理ＤＡＧ５０Ｂは、各部分処理３９のタスクにおけるＤＡＧを表すものであり、いわゆるタスクＤＡＧである。
【００４６】
なお、図５は、図２Ａに示した画像処理ＤＡＧ５０Ａにおいて、入力画像データを４つの分割画像データに分割した場合の画像処理ＤＡＧ５０Ｂを示している。図５では、錯綜を回避するために、バッファモジュール４０の図示を省略している。
【００４７】
本実施形態に係る制御部６２は、画像処理モジュール３８で実行される画像処理の種類に応じて、前段に連結された画像処理モジュール３８の部分処理３９と、後段に連結された画像処理モジュール３８の部分処理３９との間で依存関係を付与する。なお、図５では、この依存関係を破線の矢印で示している。
【００４８】
例えば、色変換処理のように、処理対象とする画素のみに対して画像処理を行う処理は、各部分処理３９も１対１の依存関係となる。一方、例えば、フィルタ処理のように、処理対象とする画素の周辺画素も必要な画像処理では、周辺画素に対して画像処理を行う前段の部分処理３９にも依存関係を付与することとなる。すなわち、この依存関係は、連結された画像処理モジュール３８間において、前段に連結された画像処理モジュール３８の部分処理３９が終了した場合に、後段に連結された画像処理モジュール３８の部分処理３９が実行可能となる関係である。従って、各部分処理３９は、前段に依存関係が付与された部分処理３９が存在しない場合か、又は依存関係が付与された前段の全ての部分処理３９が終了した場合に実行可能となる。
【００４９】
具体的には、例えば、図５に示す部分処理３９Ａ、３９Ｂ、３９Ｄは、画像処理の実行開始時に実行可能となる。また、例えば、図５に示す部分処理３９Ｃは、依存関係が付与された前段の部分処理３９Ａ及び部分処理３９Ｂの双方の処理が終了した場合に実行可能となる。
【００５０】
なお、本実施形態においては、分割画像データに対応する部分処理３９について、「タスク」と称している。
【００５１】
制御部６２は、実行可能となっているタスクを、格納されたタスクを複数のコア１３の各々が順次取り出して実行するためのタスクキュー６４に格納する。なお、一例として、本実施形態の制御部６２は、タスクキュー６４に同時に格納するタスクの数を２つ以下としている。本実施形態に係るタスクキュー６４は、各コア１３により参照可能なキューである。
【００５２】
なお、タスクキュー６４に同時に格納するタスクの数は、本実施形態に限定されないが、２つ以上であることが好ましい。タスクキュー６４にタスクを１つだけ格納する場合に、タスクの実行が完了するまで新たなタスクをタスクキュー６４に格納しないとすると、新たなタスクがタスクキュー６４に格納されず、複数あるコア１３のうち、稼働しないコア１３が増加してしまい、コア１３の稼働率が低下する。一方、タスクキュー６４が同時に格納可能なタスクの数を制限しない場合、タスクキュー６４に格納された全てのタスクに対して、前処理（詳細後述）において、メモリが確保されるため、確保されるメモリ容量が多くなってしまう。
【００５３】
従って、タスクキュー６４が同時に格納可能なタスクの数を制限することにより、前処理において確保されるメモリ等のリソースの量が増加するのが抑制される。そのため、タスクキュー６４が同時に格納可能なタスクの数は、メモリの容量等に応じて定めてもよいし、コア１３の稼働率に応じて可変としてもよい。
【００５４】
制御部６２は、タスクキュー６４からタスクを取得し、取得したタスクを実行する。タスクの実行後、制御部６２は図５の依存を更新し、新たに実行可能になったタスクがあれば、タスクを生成し、生成したタスクをタスクキュー６４に格納する。
【００５５】
ところで、図５の例では、分割画像データ毎に記憶の完了を確認しない場合、コンピュータ１０内の予め定められた記憶領域（図２Ｂの例ではメモリ１４）に、画像データ（図２Ｂの例では入力画像データ１、２）全体が予め記憶されている場合に、部分処理３９Ａ、３９Ｂ、３９Ｄ等の最前段のタスクが、画像処理の実行開始時に実行可能となる。なお、ここでいう最前段のタスクとは、自身の前段に依存関係のあるタスクが存在しないタスクを意味する。また、以下では、単に記憶領域と記載した場合は、上記のコンピュータ１０内の予め定められた記憶領域を意味するものとする。
【００５６】
しかしながら、画像処理の実行開始時に、画像データ供給部２２からの画像データ全体の供給が完了していない場合、及び実行環境下のメモリ制約により、画像データ全体を記憶領域（例えば、メモリ１４及びローカルメモリ１５等）に記憶することが難しい場合等が考えられる。すなわち、画像データ全体は記憶領域に記憶されていないものの、分割画像データは記憶領域に記憶されている場合が考えられる。そこで、本実施形態に係る制御部６２は、処理対象の分割画像データの記憶領域への記憶が完了しているタスクについては、実行可能と判断し、タスクをタスクキュー６４に格納する。
【００５７】
一方、制御部６２は、記憶領域への記憶が完了していない分割画像データを処理対象とするタスクについては、実行可能とは判断しない。
【００５８】
また、制御部６２は、最前段のタスクについて、実行可能なタスクが存在せず、かつ通知キュー６８に後述する通知情報が格納されていない場合、スリープ状態へと移行する。また、制御部６２は、スリープ状態へと移行した状態で、かつ通知キュー６８に通知情報が格納された場合、アクティブ状態へと移行する。なお、本実施形態に係るタスクキュー６４は、制御部６２として機能するコア１３が参照可能なキューである。
【００５９】
本実施形態に係る通知部６７は、処理対象の画像データの記憶先の記憶領域に、その画像データを分割した各分割画像データが記憶された場合に、分割画像データが記憶されたことを制御部６２に通知する。
【００６０】
具体的には、通知部６７は、記憶領域への分割画像データの記憶が完了した場合に、分割画像データが記憶されたことを表す通知情報を通知キュー６８に格納することによって、分割画像データが記憶されたことを制御部６２に通知する。通知部６７は、この通知を、例えば、処理対象の画像データの識別情報、記憶領域のアドレス、及び画像データの記憶領域への記憶が完了した部分までのデータ容量等を含む蓄積情報に基づいて行う。通知部６７は、以上の通知を、画像処理ＤＡＧ５０Ｂの最前段のタスクの各々について行う。
【００６１】
本実施形態に係る出力部６６は、制御部６２による制御により、画像処理ＤＡＧ５０Ｂの最終段の画像処理モジュール３８により実行された画像処理の結果得られた出力画像データを出力する。本実施形態では、出力部６６は、得られた出力画像データにより示される出力画像を表示部１６に表示する。なお、出力部６６は、出力画像データを外部装置に出力（送信）してもよい。また、コンピュータ１０がプリンタに組み込まれている場合は、出力部６６は、出力画像データにより示される出力画像を紙等の記録材料に出力（形成）してもよい。
【００６２】
次に、図６〜図１１を参照して、本実施形態に係るコンピュータ１０の作用を説明する。図６は、アプリケーション３２により画像処理の実行開始の指示が入力された場合に第１演算部１２Ａによって実行されるＤＡＧ構築・実行処理の流れを示すフローチャートである。また、ＤＡＧ構築・実行処理のプログラム（ＤＡＧ構築・実行処理プログラム）は記憶部２０に予めインストールされている。また、第１演算部１２Ａにおける何らかのタスクを実行してなく、タスクを実行可能なコア１３がＤＡＧ構築・実行処理プログラムを実行することで、前述した処理構築部４２、分割部６０、及び制御部６２として機能する。
【００６３】
図６のステップ１００で、処理構築部４２は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理ＤＡＧ５０Ａを構築する。ステップ１０２で、分割部６０は、前述したように、画像データ供給部２２から供給された画像データに関する情報に基づいて、入力画像データの処理対象とする部分により示される画像を複数の分割画像に分割する。
【００６４】
ステップ１０４で、処理構築部４２は、前述したように、ステップ１００で構築された画像処理ＤＡＧ５０Ａをステップ１０２の分割により得られた分割画像データの各々に対応する部分処理３９に分割して、画像処理ＤＡＧ５０Ｂに更新する。
【００６５】
ステップ１０６で、制御部６２及び処理構築部４２は、ステップ１０４で更新された画像処理ＤＡＧ５０Ｂによる画像処理の実行を、第１演算部１２Ａ（コア１３）及び第２演算部１２Ｂに実行させる画像処理ＤＡＧ実行処理を実行した後、本ＤＡＧ構築・実行処理を終了する。
【００６６】
本ＤＡＧ構築・実行処理を実行することにより、出力部６６からアプリケーション３２が所望する画像処理の結果が得られる。なお、本実施形態では、本ＤＡＧ構築・実行処理が終了した場合、制御部６２は、処理が完了したことを表す情報、もしくは、処理中に何らかのエラーが生じた場合、その旨を表す情報をアプリケーション３２へ通知する。
【００６７】
次に、上記ＤＡＧ構築・実行処理のステップ１０６における画像処理ＤＡＧ実行処理について詳細に説明する。本実施形態に係る画像処理ＤＡＧ実行処理には、画像処理ＤＡＧ５０Ｂの実行可能なタスクをタスクキュー６４に格納するタスク格納処理と、タスクキュー６４に格納されているタスクを実行するタスク実行処理とが含まれる。更に、本実施形態に係るＤＡＧ構築・実行処理には、処理対象とする分割画像データが記憶領域に記憶されたことを通知する通知処理が含まれる。また、タスク格納処理には、画像処理ＤＡＧ５０Ｂの最前段のタスクについて実行される第１タスク格納処理と、画像処理ＤＡＧ５０Ｂの２段目以降のタスクについて実行される第２タスク格納処理とが含まれる。
【００６８】
図７を参照して第１タスク格納処理について説明する。図７は、第１タスク格納処理の流れを示すフローチャートである。本実施形態では、第１タスク格納処理のプログラム（第１タスク格納処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。第１演算部１２Ａにおける何らかのタスクを実行してなく、タスクを実行可能なコア１３が第１タスク格納処理プログラムを実行することで、制御部６２として機能し、図７に示す第１タスク格納処理を実行する。
【００６９】
図７のステップ１１０で、制御部６２は、タスクキュー６４に、実行可能なタスクが格納されているか否かを判定する。本実施形態では、タスクキュー６４に格納されている実行可能なタスクが２以上の場合、ステップ１１０の判定が肯定判定となり、処理はステップ１１８に移行する。また、タスクキュー６４に格納されている実行可能なタスクが２未満の場合、ステップ１１０の判定が否定判定となり、処理はステップ１１２に移行する。
【００７０】
ステップ１１２で、制御部６２は、画像処理ＤＡＧ５０Ｂの最前段のタスクに実行可能なタスクがあるか否かを判定する。具体的には、制御部６２は、画像処理ＤＡＧ５０Ｂの最前段のタスクに、処理対象の分割画像データが記憶領域に記憶されているタスクがある場合、そのタスクを実行可能なタスクであると判定する。この判定が肯定判定となった場合は、処理はステップ１１６に移行し、否定判定となった場合は、処理はステップ１１４に移行する。
【００７１】
ステップ１１４で、制御部６２は、通知キュー６８から通知情報を取得する。この取得処理は、同期処理（ブロック処理）であり、制御部６２は、通知情報が取得できるまで、すなわち、通知キュー６８に通知情報が格納されるまで、待機し続けるスリープ状態へ移行する。なお、制御部６２は、同期処理で待機し続けるのではなく、通知キュー６８に通知情報が格納されるまでループし続けてもよい。このループし続ける処理は、一般的に、ビジーウェイト、又はスピンロックと称される。但し、制御部６２が同期処理で待機し続ける方が、ループし続けるよりも、システム全体の演算リソースの消費量を低減することができ、好ましい。この通知情報は、後述する図１１に示す通知処理のステップ１４４の処理により通知キュー６８に格納される。
【００７２】
制御部６２は、通知キュー６８に通知情報が格納されるとスリープ状態からアクティブ状態へ移行し、処理はステップ１１２に戻る。なお、制御部６２がアクティブ状態に移行した後に、ステップ１１６に移行するのではなく、ステップ１１２に戻るのは以下の理由からである。第１タスク格納処理が複数のコア１３で行われる場合、通知キュー６８に通知情報が格納されて、ステップ１１４において制御部６２がアクティブ状態へ移行する際に、同じタイミングで別のコア１３（スレッド）において第１タスク格納処理が行われ、既に実行可能なタスクが無い状態になる可能性があることを考慮しているからである。
【００７３】
ステップ１１６で、一例として図８に示すように、制御部６２は、実行可能なタスクをタスクキュー６４に格納する。図８の例では、制御部６２が、実行可能なタスクをタスクキュー６４に格納した状態を示している。また、図８の例では、コア１３Ａ〜コア１３Ｃのうち、コア１３Ｃがタスクキュー６４に格納されたタスクを取得し、取得したタスクを実行する。タスクを実行する処理の詳細は図１０を用いて後述する。
【００７４】
なお、この際、前述したように、タスクキュー６４に格納されているタスクの数が２以下であればよく、本ステップ１１６において制御部６２がタスクキュー６４に同時に格納させるタスクの数は１つでもよいし、２つでもよい。具体的には、タスクキュー６４にタスクが格納されていない場合、制御部６２は、タスクを１つもしくは２つ格納すればよいし、タスクキュー６４にタスクが１つ格納されている場合、タスクキュー６４は、タスクを１つ格納すればよい。本ステップ１１６において制御部６２がタスクキュー６４に同時に格納させるタスクの数をいずれとするかは、予め定めておいてもよいし、各コア１３におけるタスク処理の進行に応じて可変としてもよい。
【００７５】
ステップ１１８で、制御部６２は、画像処理ＤＡＧ５０Ｂの最前段の全タスクをタスクキュー６４に格納したか否かを判定する。この判定が否定判定となった場合は、処理はステップ１１０に戻り、肯定判定となった場合は、本第１タスク格納処理が終了する。
【００７６】
図９を参照して第２タスク格納処理について説明する。図９は、第２タスク格納処理の流れを示すフローチャートである。本実施形態では、第２タスク格納処理のプログラム（第２タスク格納処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。第１演算部１２Ａにおける何らかのタスクを実行してなく、タスクを実行可能なコア１３が第２タスク格納処理プログラムを実行することで、制御部６２として機能し、図９に示す第２タスク格納処理を実行する。
【００７７】
図９のステップ１２０で、制御部６２は、タスクキュー６４に、実行可能なタスクが格納されているか否かを判定する。本実施形態では、タスクキュー６４に格納されている実行可能なタスクが２以上の場合、ステップ１２０の判定が肯定判定となり、処理はステップ１２６に移行する。また、タスクキュー６４に格納されている実行可能なタスクが２未満の場合、ステップ１２０の判定が否定判定となり、処理はステップ１２２に移行する。
【００７８】
ステップ１２２で、制御部６２は、画像処理ＤＡＧ５０Ｂの２段目以降のタスクに実行可能なタスクがあるか否かを判定する。具体的には、制御部６２は、画像処理ＤＡＧ５０Ｂの２段目以降のタスクに、依存関係が付与された前段の全てのタスクが終了したタスクがある場合、そのタスクを実行可能なタスクであると判定する。この判定が否定判定となった場合は、処理はステップ１２０に戻り、肯定判定となった場合は、処理はステップ１２４に移行する。
【００７９】
ステップ１２４で、制御部６２は、ステップ１２２で実行可能と判定したタスクをタスクキュー６４に格納する。なお、この際、ステップ１１６と同様に、タスクキュー６４に格納されているタスクの数が２以下であればよい。
【００８０】
ステップ１２６で、制御部６２は、画像処理ＤＡＧ５０Ｂの２段目以降の全タスクをタスクキュー６４に格納したか否かを判定する。この判定が否定判定となった場合は、処理はステップ１２０に戻り、肯定判定となった場合は、本第２タスク格納処理が終了する。
【００８１】
次に、図１０を参照してタスク実行処理について説明する。図１０は、タスク実行処理の流れを示すフローチャートである。本実施形態では、タスク実行処理のプログラム（タスク実行処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。
【００８２】
第１演算部１２Ａにおける何らかのタスクを実行してなく、タスクを実行可能なコア１３の各々がタスク実行処理プログラムを実行することで、制御部６２として機能し、図１０に示すタスク実行処理を実行する。なお、本実施形態では、前述したタスク格納処理及びタスク実行処理を異なるコア１３で実行することにより、タスク格納処理及びタスク実行処理が並列に実行される。
【００８３】
図１０のステップ１３０で、制御部６２は、タスクキュー６４からタスクを取得する。ステップ１３２で、制御部６２は、タスクの実行において予め定められた前処理を実行する。この前処理は画像処理前に行っておくことが予め定められている処理であり、特に限定されないが、例えば、画像処理結果を格納するための出力バッファ領域の確保及び画像処理用の変数の初期化等の演算用のリソースの確保を行う処理である。
【００８４】
ステップ１３４で、制御部６２は、ステップ１３０で取得したタスクを、第１演算部１２Ａのコア１３（例えば、制御部６２自身として動作しているコア１３）又は第２演算部１２Ｂに実行させる。なお、第２演算部１２Ｂにタスクを実行させる場合、第１演算部１２Ａのコア１３が、第２演算部１２Ｂにタスクを実行させる処理を行うことにより、第２演算部１２Ｂによりタスクが実行される。
【００８５】
また、タスクが第２演算部１２Ｂで実行するタスクであるか否かを表す情報は、例えば、図６のＤＡＧ構築・実行処理のステップ１０４において処理構築部４２が画像処理ＤＡＧ５０Ａから画像処理ＤＡＧ５０Ｂに更新する際に付与される。
【００８６】
ステップ１３６で、制御部６２は、タスクの実行において予め定められた後処理を行う。この後処理はタスクに対応する部分処理後に行うことが予め定められている処理であり、特に限定されないが、例えば、ステップ１３２の処理により確保した演算用のリソースの解放等を行う処理である。
【００８７】
ステップ１３８で、制御部６２は、処理構築部４２にタスクの完了通知を行う。タスクの完了通知を受け取った処理構築部４２は、画像処理ＤＡＧ５０Ｂの依存関係を更新する。ステップ１３８の処理が終了すると、本タスク実行処理が終了する。
【００８８】
次に、図１１を参照して通知処理について説明する。図１１は、通知処理の流れを示すフローチャートである。本実施形態では、通知処理のプログラム（通知処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。第１演算部１２Ａにおける何らかのタスクを実行してなく、タスクを実行可能なコア１３が通知処理プログラムを実行することで、通知部６７として機能し、図１１に示す通知処理を実行する。
【００８９】
ステップ１４０で、通知部６７は、画像処理ＤＡＧ５０Ｂの最前段のタスクが処理対象とする画像データの記憶領域への蓄積状況を表す蓄積情報を更新する。前述したように、蓄積情報には、処理対象の画像データの識別情報、記憶領域のアドレス、及び画像データの記憶領域への記憶が完了した部分までのデータ容量等が含まれる。通知部６７は、画像データ供給部２２からの画像データの供給状況を監視し、蓄積情報を更新する。
【００９０】
ステップ１４２で、通知部６７は、ステップ１４０で更新された蓄積情報に基づいて、画像処理ＤＡＧ５０Ｂの最前段のタスクが処理対象とする各分割画像データに、新たに記憶領域への記憶が完了した分割画像データがあるか否かを判定する。この判定が否定判定となった場合は、処理はステップ１４６に移行し、肯定判定となった場合は、処理はステップ１４４に移行する。
【００９１】
ステップ１４４で、通知部６７は、通知情報を通知キュー６８に格納する。ステップ１４６で、通知部６７は、画像処理ＤＡＧ５０Ｂの最前段のタスクが処理対象とする全ての分割画像データの記憶領域への記憶が完了したか否かを判定する。この判定が否定判定となった場合は、処理はステップ１４０に戻り、肯定判定となった場合は、本通知処理が終了する。
【００９２】
以上説明したように、本実施形態によれば、タスク（部分処理３９）に対応する分割画像データが記憶領域に記憶された場合に、分割画像データが記憶領域に記憶されたことを制御部６２に通知している。従って、画像データ全体が記憶領域に記憶されるまで待機するのではなく、各タスクについて、処理対象とする分割画像データが記憶領域に記憶されるたびに画像処理が開始される結果、画像処理全体の処理時間を短縮することができる。
【００９３】
また、本実施形態によれば、分割画像データが記憶領域に記憶されたことを表す通知情報を、制御部６２が参照可能な通知キュー６８に格納することによって上記の通知を行っている。従って、第１タスク格納処理を何れのコア１３が実行した場合でも、通知処理を実行するコア１３が、分割画像データが記憶領域に記憶されたことを第１タスク格納処理を実行するコア１３に通知することができる。
【００９４】
また、本実施形態によれば、制御部６２は、実行可能な最前段のタスクが存在せず、かつ通知キュー６８に通知情報が格納されていない場合、スリープ状態へと移行する。そして、制御部６２は、スリープ状態へと移行した状態で、かつ通知キュー６８に通知情報が格納された場合、アクティブ状態へと移行する。従って、システム全体の演算リソースの消費量を低減することができる。
【００９５】
なお、上記実施形態では、通知キュー６８を介して分割画像データが記憶領域へ記憶されたことを通知する場合について説明したが、これに限定されない。例えば、コア１３間通信又はフラグファイル等を介して分割画像データが記憶領域へ記憶されたことを通知する形態としてもよい。
【００９６】
また、上記実施形態において、例えば、分割部６０、制御部６２、出力部６６、及び通知部６７といった各種の処理を実行する処理部（processing unit）のハードウェア的な構造としては、次に示す各種のプロセッサ（processor）を用いることができる。上記各種のプロセッサには、前述したように、ソフトウェア（プログラム）を実行して各種の処理部として機能する汎用的なプロセッサであるＣＰＵに加えて、ＦＰＧＡ等の製造後に回路構成を変更可能なプロセッサであるプログラマブルロジックデバイス（Programmable Logic Device：PLD）、ＡＳＩＣ（Application Specific Integrated Circuit）等の特定の処理を実行させるために専用に設計された回路構成を有するプロセッサである専用電気回路等が含まれる。
【００９７】
１つの処理部は、これらの各種のプロセッサのうちの１つで構成されてもよいし、同種又は異種の２つ以上のプロセッサの組み合わせ（例えば、複数のＦＰＧＡの組み合わせや、ＣＰＵとＦＰＧＡとの組み合わせ）で構成されてもよい。また、複数の処理部を１つのプロセッサで構成してもよい。
複数の処理部を１つのプロセッサで構成する例としては、第１に、クライアント及びサーバ等のコンピュータに代表されるように、１つ以上のＣＰＵとソフトウェアの組み合わせで１つのプロセッサを構成し、このプロセッサが複数の処理部として機能する形態がある。第２に、システムオンチップ（System On Chip：SoC）等に代表されるように、複数の処理部を含むシステム全体の機能を１つのＩＣ（Integrated Circuit）チップで実現するプロセッサを使用する形態がある。このように、各種の処理部は、ハードウェア的な構造として、上記各種のプロセッサの１つ以上を用いて構成される。
【００９８】
更に、これらの各種のプロセッサのハードウェア的な構造としては、より具体的には、半導体素子などの回路素子を組み合わせた電気回路（circuitry）を用いることができる。
【００９９】
また、上記実施形態では、各種プログラムが記憶部２０に予め記憶（インストール）されている態様を説明したが、これに限定されない。各種プログラムは、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ（Digital Versatile Disk Read Only Memory）、ＵＳＢ（Universal Serial Bus）メモリ等の記録媒体に記録された形態で提供されてもよい。また、各種プログラムは、ネットワークを介して外部装置からダウンロードされる形態としてもよい。
【符号の説明】
【０１００】
１０  コンピュータ
１２Ａ  第１演算部
１２Ｂ  第２演算部
１３、１３Ａ〜１３Ｃ  コア
１４  メモリ
１５  ローカルメモリ
１６  表示部
１８  操作部
２０  記憶部
２２  画像データ供給部
２４  画像出力部
２６  バス
３０  オペレーティングシステム
３２  アプリケーションプログラム群
３４  画像処理プログラム群
３６  モジュールライブラリ
３８  画像処理モジュール
３９、３９Ａ〜３９Ｄ  部分処理
４０  バッファモジュール
４２  処理構築部
４６  処理制御部
５０Ａ、５０Ｂ  画像処理ＤＡＧ
６０  分割部
６２  制御部
６４  タスクキュー
６６  出力部
６７  通知部
６８  通知キュー
Ｂ１〜Ｂ３  分割画像
Ｇ  画像
【図１】
2020035393.tif 000003
【図２Ａ】
2020035393.tif 000004
【図２Ｂ】
2020035393.tif 000005
【図３】
2020035393.tif 000006
【図４Ａ】
2020035393.tif 000007
【図４Ｂ】
2020035393.tif 000008
【図５】
2020035393.tif 000009
【図６】
2020035393.tif 000010
【図７】
2020035393.tif 000011
【図８】
2020035393.tif 000012
【図９】
2020035393.tif 000013
【図１０】
2020035393.tif 000014
【図１１】
2020035393.tif 000015