(57)【要約】  コンピュータは、画像データを複数の分割画像データに分割する分割部と、分割画像データに対して行うタスクで、かつ前後の依存関係に応じて処理可能なタスクを第１演算部が備える複数のコアの各々に並列して実行させる制御を行う制御部と、第１演算部と非同期に第２演算部がタスクを実行可能な場合、第２演算部に対するタスクの実行を指示する実行指示タスクを第１演算部のコアにおいて実行した後に、第２演算部におけるタスクの終了を検知する終了検知タスクをリストに登録する登録部と、リストにアクセスし、第２演算部がタスクを終了した終了検知タスクの有無を判定する判定部と、を備える。
2019044340.tif 000002
【特許請求の範囲】
【請求項１】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、
前記画像処理の対象となる画像データを複数の分割画像データに分割する分割部と、
前記分割画像データに対して行う画像処理である部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行う制御部と、
前記第１演算部と非同期に第２演算部が前記部分処理を実行可能な場合、前記第２演算部に対する前記部分処理の実行を指示する実行指示タスクを前記第１演算部の演算装置において実行した後に、前記第２演算部における前記部分処理の終了を検知する終了検知タスクを終了検知タスク管理情報に登録する登録部と、
前記終了検知タスク管理情報にアクセスし、前記第２演算部が前記部分処理を終了した前記終了検知タスクの有無を判定する判定部と、
を備えた画像処理装置。
【請求項２】
前記演算装置は、前記部分処理の実行後に前記判定部として動作する、請求項１に記載の画像処理装置。
【請求項３】
前記演算装置は、前記判定部として前記終了検知タスクの有無の判定の終了後、再び前記制御部の制御により他の部分処理を実行する、請求項２に記載の画像処理装置。
【請求項４】
前記演算装置は、前記登録部として動作する、請求項１から請求項３のいずれか１項に記載の画像処理装置。
【請求項５】
前記演算装置は、前記登録部としての動作と前記判定部としての動作とを連続して行う、請求項１から請求項４のいずれか１項に記載の画像処理装置。
【請求項６】
前記制御部は、前記判定部として動作させるための判定タスクを前記演算装置に実行させる、請求項１に記載の画像処理装置。
【請求項７】
前記登録部及び前記判定部の前記終了検知タスク管理情報へのアクセスは排他制御されている、請求項１から請求項６のいずれか１項に記載の画像処理装置。
【請求項８】
前記判定部は、前記第２演算部が前記部分処理を終了した前記終了検知タスクを前記終了検知タスク管理情報から削除する、請求項１から請求項７のいずれか１項に記載の画像処理装置。
【請求項９】
前記制御部は、タスクキューに格納された前記部分処理を順次取り出して前記複数の演算装置に並列して実行させる、請求項１から請求項８のいずれか１項に記載の画像処理装置。
【請求項１０】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置による画像処理方法であって、
前記画像処理の対象となる画像データを複数の分割画像データに分割し、
前記分割画像データに対して行う画像処理である部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行い、
前記第１演算部と非同期に第２演算部が前記部分処理を実行可能な場合、前記第２演算部に対する前記部分処理の実行を指示する実行指示タスクを前記第１演算部の演算装置において実行した後に、前記第２演算部における前記部分処理の終了を検知する終了検知タスクを終了検知タスク管理情報に登録し、
前記終了検知タスク管理情報にアクセスし、前記第２演算部が前記部分処理を終了した前記終了検知タスクの有無を判定する、
処理を含む画像処理方法。
【請求項１１】
コンピュータを、請求項１から請求項９のいずれか１項に記載の画像処理装置の分割部、制御部、登録部、及び判定部として機能させるための画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、画像処理装置、画像処理方法、及び画像処理プログラムに関する。
【背景技術】
【０００２】
特開２００４−０３０３１２号公報には、複数のスレッド（演算装置）が同期をとりながら、一連の処理を複数のスレッドで分担して同時に処理することで、処理の高速化を実現する制御方式が開示されている。【０００３】
また、Mark Grand, Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML, 2nd Edition, Vol. 1, Wiley Pub., 2003/02/17, p. 495-500、及び、Rajat P. Gang and Ilya Sharapov, Techniques for Optimizing Applications: High Performance Computing, Prentice-Hall, 2001/07/25, p. 394-395には、タスク供給者（Producer）がキューに投入されたタスクを、複数のワーカースレッドによるタスク消費者（Consumer）に供給する技術が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記特開２００４−０３０３１２号公報や、Mark Grand, Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML, 2nd Edition, Vol. 1, Wiley Pub., 2003/02/17, p. 495-500、及び、Rajat P. Gang and Ilya Sharapov, Techniques for Optimizing Applications: High Performance Computing, Prentice-Hall, 2001/07/25, p. 394-395に開示された技術では、主として部分処理を行う第１演算部と非同期に、第１演算部の指示により第２演算部で部分処理を実行する場合、第２演算部における部分処理の終了の検知が効率的に行われない場合があった。この場合、部分処理が終了しているにもかかわらず、部分処理の終了が検知されるまで第２演算部に新たに部分処理を行わせることができないため、第２演算部を十分に稼働させることができず、画像処理の処理効率が低下する場合があった。【０００５】
本開示は、第２演算部における部分処理の終了の検知をより効率的に行うことにより画像処理を高速化する、画像処理装置、画像処理方法、及び画像処理プログラムを提供する。
【課題を解決するための手段】
【０００６】
本開示の第１の態様は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、画像処理の対象となる画像データを複数の分割画像データに分割する分割部と、分割画像データに対して行う画像処理である部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行う制御部と、第１演算部と非同期に第２演算部が部分処理を実行可能な場合、第２演算部に対する部分処理の実行を指示する実行指示タスクを第１演算部の演算装置において実行した後に、第２演算部における部分処理の終了を検知する終了検知タスクを終了検知タスク管理情報に登録する登録部と、終了検知タスク管理情報にアクセスし、第２演算部が部分処理を終了した終了検知タスクの有無を判定する判定部と、を備える。【０００７】
また、本開示の第２の態様は、上記第１の態様において、演算装置は、部分処理の実行後に判定部として動作してもよい。【０００８】
また、本開示の第３の態様は、上記第２の態様において、演算装置は、判定部として終了検知タスクの有無の判定の終了後、再び制御部の制御により他の部分処理を実行してもよい。【０００９】
また、本開示の第４の態様は、上記態様において、演算装置は、登録部として動作してもよい。【００１０】
また、本開示の第５の態様は、上記態様において、演算装置は、登録部としての動作と判定部としての動作とを連続して行ってもよい。【００１１】
また、本開示の第６の態様は、上記第１の態様において、制御部は、判定部として動作させるための判定タスクを演算装置に実行させてもよい。【００１２】
また、本開示の第７の態様は、上記態様において、登録部及び判定部の終了検知タスク管理情報へのアクセスが排他制御されていてもよい。【００１３】
また、本開示の第８の態様は、上記態様において、判定部は、第２演算部が部分処理を終了した終了検知タスクを終了検知タスク管理情報から削除してもよい。【００１４】
また、本開示の第９の態様は、上記態様において、制御部は、タスクキューに格納された部分処理を順次取り出して複数の演算装置に並列して実行させてもよい。【００１５】
また、本開示の第１０の態様は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置による画像処理方法であって、画像処理の対象となる画像データを複数の分割画像データに分割し、分割画像データに対して行う画像処理である部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行い、第１演算部と非同期に第２演算部が部分処理を実行可能な場合、第２演算部に対する部分処理の実行を指示する実行指示タスクを第１演算部の演算装置において実行した後に、第２演算部における部分処理の終了を検知する終了検知タスクを終了検知タスク管理情報に登録し、終了検知タスク管理情報にアクセスし、第２演算部が部分処理を終了した終了検知タスクの有無を判定する、処理を含む。【００１６】
また、本開示の第１１の態様は、画像処理プログラムであって、コンピュータを本開示の画像処理装置の分割部、制御部、登録部、及び判定部として機能させる。【００１７】
本開示の第１２の態様は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、画像処理の対象となる画像データを複数の分割画像データに分割し、分割画像データに対して行う画像処理である部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行い、第１演算部と非同期に第２演算部が部分処理を実行可能な場合、第２演算部に対する部分処理の実行を指示する実行指示タスクを第１演算部の演算装置において実行した後に、第２演算部における部分処理の終了を検知する終了検知タスクを終了検知タスク管理情報に登録し、終了検知タスク管理情報にアクセスし、第２演算部が部分処理を終了した終了検知タスクの有無を判定するプロセッサを有する。
【発明の効果】
【００１８】
本開示の上記態様によれば、第２演算部における部分処理の終了の検知をより効率的に行うことにより画像処理を高速化する、画像処理装置、画像処理方法、及び画像処理プログラムを提供できる。
【図面の簡単な説明】
【００１９】
【図１】第１例示的実施形態に係る画像処理装置として機能するコンピュータの構成の一例を示すブロック図である。
【図２Ａ】画像処理ＤＡＧの一例を示す概略図である。
【図２Ｂ】画像処理ＤＡＧに入出力用のメモリを加えた場合の一例を示す概略図である。
【図３】第１例示的実施形態に係る処理制御部の機能的な構成の一例を示すブロック図である。
【図４Ａ】入力画像の分割処理の一例の説明に供する概略図である。
【図４Ｂ】入力画像の分割処理の一例の説明に供する概略図である。
【図５】画像処理モジュールが部分処理に分割された画像処理ＤＡＧの一例を示す概略図である。
【図６Ａ】非同期処理終了検知タスクリストの説明に供する概略図である。
【図６Ｂ】非同期処理終了検知タスクリストの説明に供する概略図である。
【図７Ａ】非同期処理終了検知タスクリストの判定の説明に供する概略図である。
【図７Ｂ】非同期処理終了検知タスクリストの判定の説明に供する概略図である。
【図７Ｃ】非同期処理終了検知タスクリストの判定の説明に供する概略図である。
【図８】第１例示的実施形態に係るＤＡＧ構築・実行処理の流れの一例を示すフローチャートである。
【図９】第１例示的実施形態に係るタスク格納処理の流れの一例を示すフローチャートである。
【図１０】第１例示的実施形態に係る画像処理ＤＡＧ実行処理の説明に供する概略図である。
【図１１】第１例示的実施形態に係るタスク実行処理の流れの一例を示すフローチャートである。
【図１２】第１例示的実施形態に係る非同期処理終了検知タスクリスト判定処理の流れを示すフローチャートである。
【図１３Ａ】ＧＰＵ処理である２つのタスクが連続して行われる場合における処理の流れの一例を示す概略図である。
【図１３Ｂ】第１演算部のコアと同期して第２演算部（ＧＰＵ）が処理を行う場合における処理の流れの一例を示す概略図である。
【図１３Ｃ】第１演算部のコアと非同期に第２演算部（ＧＰＵ）が処理を行う場合における処理の流れの一例を示す概略図である。
【図１４】第２例示的実施形態に係るタスク実行処理の流れの一例を示すフローチャートである。
【図１５】第３例示的実施形態に係るタスク実行処理の流れの一例を示すフローチャートである。
【図１６】第３例示的実施形態に係る画像処理ＤＡＧ実行処理の説明に供する概略図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して、本開示を実施するための形態例を詳細に説明する。
【００２１】
［第１例示的実施形態］
まず、図１を参照して、画像処理装置として機能するコンピュータ１０の構成を説明する。なお、コンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの装置の機能を兼ね備えた複合機、及びスキャナ等の内部で画像処理を行う画像取扱機器に組み込まれたコンピュータであってもよい。また、コンピュータ１０は、ＰＣ（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）等の記録媒体に書き込む書込装置が適用される。また、画像出力部２４は、画像処理を経た画像データを、通信回線を介して外部装置に送信する送信部が適用される。また、画像出力部２４は、画像処理を経た画像データを記憶する画像記憶部（メモリ１４又は記憶部２０）であってもよい。
【００２９】
図１に示すように、記憶部２０には、第１演算部１２Ａ及び第２演算部１２Ｂによって実行される各種プログラムが記憶されている。記憶部２０には、各種プログラムとして、リソースの管理、プログラムの実行の管理、及びコンピュータ１０と外部装置との通信等を司るオペレーティングシステム３０のプログラムが記憶されている。また、記憶部２０には、各種プログラムとして、コンピュータ１０を画像処理装置として機能させるための画像処理プログラム群３４が記憶されている。また、記憶部２０には、各種プログラムとして、上記画像処理装置に対して所望の画像処理を行わせる各種のアプリケーションプログラム群３２（以下、「アプリケーション３２」という。）が記憶されている。
【００３０】
画像処理プログラム群３４は、前述した画像取扱機器、携帯機器、及びＰＣ等で実行される画像処理プログラムを開発する際の負荷を軽減することを目的として開発されたプログラムである。また、画像処理プログラム群３４は、前述した画像取扱機器、携帯機器、及びＰＣ等の各種機器（プラットフォーム）で共通に実行可能に開発されたプログラムである。
【００３１】
画像処理プログラム群３４によって実現される画像処理装置は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理ＤＡＧ（有向非循環グラフ：Directed Acyclic Graph）５０Ａ（詳細は後述）を構築する。そして、上記画像処理装置は、アプリケーション３２からの実行指示に従い画像処理ＤＡＧ５０Ａの処理を実行する。このため、画像処理プログラム群３４は、所望の画像処理を行う画像処理ＤＡＧ５０Ａの構築を指示したり、構築された画像処理ＤＡＧ５０Ａによる画像処理の実行を指示したりするためのインタフェースをアプリケーション３２に提供している。
【００３２】
以上の構成により、内部で画像処理を行う必要のある任意の機器を新規に開発する場合等にも、上記画像処理を行うプログラムの開発に関しては、上記任意の機器で必要とされる画像処理を、上記インタフェースを利用して画像処理プログラム群３４に行わせるアプリケーション３２を開発すればよい。従って、開発者は、実際に画像処理を行うプログラムを新たに開発する必要が無くなり、開発者の負荷が軽減される。
【００３３】
次に、本例示的実施形態に係る画像処理プログラム群３４について詳細に説明する。図１に示すように、画像処理プログラム群３４は、モジュールライブラリ３６、処理構築部４２のプログラム、及び処理制御部４６のプログラムを含む。
【００３４】
モジュールライブラリ３６は、予め定められた互いに異なる画像処理を行う複数種類の画像処理モジュール３８のプログラムが各々登録されている。この画像処理としては、例えば、入力処理、フィルタ処理、色変換処理、拡大・縮小処理（図１では「拡縮処理」と表記）、スキュー角検知処理、画像回転処理、画像合成処理、及び出力処理等が挙げられる。
【００３５】
また、モジュールライブラリ３６には、画像処理の種類が同一で、かつ実行する画像処理の内容が異なる画像処理モジュール３８も登録されている。図１では、この種の画像処理モジュールを「モジュール１」、「モジュール２」と、末尾に数字を付して区別している。例えば、拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データを、水平方向及び垂直方向の各方向ともに１画素おきに間引くことで画像の縦横のサイズを５０％に縮小する縮小処理を行う画像処理モジュール３８が用意されている。さらに、例えば、拡大・縮小処理を行う画像処理モジュール３８については、入力された画像データに対して指定された拡大・縮小率で拡大・縮小処理を行う画像処理モジュール３８等が用意されている。
【００３６】
また、例えば、色変換処理を行う画像処理モジュール３８については、ＲＧＢ（Red Green Blue）色空間の画像をＣＭＹＫ（Cyan Magenta Yellow Key-Plate（黒））色空間の画像へ変換する画像処理モジュール３８、及びＣＭＹＫ色空間の画像をＲＧＢ色空間の画像へ変換する画像処理モジュール３８が用意されている。さらに、例えば、色変換処理を行う画像処理モジュール３８については、ＲＧＢ色空間の画像をＹＣｂＣｒ色空間の画像へ変換する画像処理モジュール３８、及びＹＣｂＣｒ色空間の画像をＲＧＢ色空間の画像へ変換する画像処理モジュール３８等が用意されている。
【００３７】
また、モジュールライブラリ３６には、画像データを記憶するための記憶領域（バッファ）を備えたバッファモジュール４０も登録されている。
【００３８】
本例示的実施形態に係る処理構築部４２は、アプリケーション３２からの指示により、ＤＡＧ形態の画像処理ＤＡＧ５０Ａを構築する。画像処理ＤＡＧ５０Ａは、一例として図２Ａに示すように、１つ以上の画像処理モジュール３８が、個々の画像処理モジュール３８の前段及び後段の少なくとも一方に配置されたバッファモジュール４０を介して連結される。
【００３９】
なお、個々の画像処理モジュール３８は、入力画像データに対して画像処理を実行するオブジェクトの一例である。また、図２Ａに示す例では、バッファモジュール４０を介して前段に画像処理モジュール３８が連結された画像処理モジュール３８は、前段の画像処理モジュール３８による画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。また、バッファモジュール４０を介して前段に複数の画像処理モジュール３８が連結された画像処理モジュール３８は、前段の複数の画像処理モジュール３８の全ての画像処理が終了した場合に、自身の画像処理の実行が可能となることを示している。
【００４０】
また、図２Ａでは、各モジュールのみが処理の順に接続されたＤＡＧを示しているが、このＤＡＧが実行される際には、図２Ｂに示すようにメモリ１４に記憶された入力画像データが入力されてＤＡＧに従って画像処理が行われる。そして、最終的にメモリ１４に処理済みの出力画像データ等の処理結果が記憶される。
【００４１】
次に、図３を参照して、本例示的実施形態に係る処理制御部４６の機能的な構成を説明する。図３に示すように、処理制御部４６は、分割部６０、制御部６２、タスクキュー６４、出力部６６、登録部６７、判定部６８、及び非同期処理終了検知タスクリスト（以下、単に「リスト」という）６９を備えている。
【００４２】
本実施の形態に係る分割部６０は、入力画像データの処理対象とする部分により示される画像を複数の部分領域（以下、「分割画像」という。）に分割する。一例として図４Ａに示すように、分割部６０は、入力画像データの処理対象とする部分により示される画像Ｇを、複数（図４Ａに示す例では３つ）の分割画像Ｂ１〜Ｂ３に分割する。なお、以下では分割画像を示す画像データを「分割画像データ」という。また、入力画像データの処理対象とする部分とは、色変換処理のように入力画像全体を処理対象とする画像処理では、入力画像データ全体が処理対象とする部分を意味する。また、入力画像データの処理対象とする部分とは、切り抜き（トリミング）処理のように、入力画像の一部を処理対象とする画像処理では、入力画像の一部を意味する。以下では、錯綜を回避するために、入力画像データの処理対象とする部分を、単に「入力画像データ」という。
【００４３】
また、図４Ａに示した例では、分割部６０が画像Ｇを正面視上下に分割しているが、これに限定されない。例えば分割部６０は画像Ｇを正面視左右に分割してもよいし、図４Ｂに示すように、正面視上下左右に分割してもよい。
【００４４】
なお、分割部６０による入力画像データの分割数は特に限定されない。例えば、分割部６０は、予め定められた数又はサイズで入力画像データを分割してもよい。また、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部が有するプロセッサ・コア数以下で、かつ２以上の数に入力画像データを分割してもよい。
【００４５】
また、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部が有するキャッシュメモリの容量以下のサイズで入力画像データを分割してもよい。この場合、例えば、分割部６０は、画像処理モジュール３８による画像処理を実行する演算部のプロセッサから最も遠いレベルのキャッシュメモリ、所謂ＬＬＣ（Last Level Cache）の容量以下で、かつＬＬＣの容量に極力一致するサイズで入力画像データを分割する形態が例示される。
【００４６】
本例示的実施形態に係る制御部６２は、分割画像データに対応するタスクを複数のコア１３に並列に実行させる制御を行う。なお、ここでいう並列とは、依存関係に基づいて実行可能となったタスクが複数のコア１３により並列に（同時に）実行されることを意味する。
【００４７】
具体的には、制御部６２は、一例として図５に示すように、画像処理ＤＡＧ５０Ａの各画像処理モジュール３８で実行される画像処理を分割画像データ（分割部６０により分割された分割画像データ）の各々に対応する部分処理３９に分割して、画像処理ＤＡＧ５０Ａを画像処理ＤＡＧ５０Ｂに更新する。なお、画像処理ＤＡＧ５０Ｂは、各部分処理３９のタスクにおけるＤＡＧを表すものであり、いわゆるタスクＤＡＧである。
【００４８】
なお、図５は、図２Ａに示した画像処理ＤＡＧ５０Ａにおいて、入力画像データを４つの分割画像データに分割した場合の画像処理ＤＡＧ５０Ｂを示している。図５では、錯綜を回避するために、バッファモジュール４０の図示を省略している。
【００４９】
本例示的実施形態に係る制御部６２は、画像処理モジュール３８で実行される画像処理の種類に応じて、前段に連結された画像処理モジュール３８の部分処理３９と、後段に連結された画像処理モジュール３８の部分処理３９との間で依存関係を付与する。なお、図５では、この依存関係を破線の矢印で示している。
【００５０】
例えば、色変換処理のように、処理対象とする画素のみに対して画像処理を行う処理は、各部分処理３９も１対１の依存関係となる。一方、例えば、フィルタ処理のように、処理対象とする画素の周辺画素も必要な画像処理では、周辺画素に対して画像処理を行う前段の部分処理３９にも依存関係を付与することとなる。すなわち、この依存関係は、連結された画像処理モジュール３８間において、前段に連結された画像処理モジュール３８の部分処理３９が終了した場合に、後段に連結された画像処理モジュール３８の部分処理３９が実行可能となる関係である。従って、各部分処理３９は、前段に依存関係が付与された部分処理３９が存在しない場合か、又は依存関係が付与された前段の全ての部分処理３９が終了した場合に実行可能となる。
【００５１】
具体的には、例えば、図５に示す部分処理３９Ａ及び部分処理３９Ｂは、画像処理の実行開始時に実行可能となる。また、例えば、図５に示す部分処理３９Ｃは、依存関係が付与された前段の部分処理３９Ａ及び部分処理３９Ｂの双方の処理が終了した場合に実行可能となる。
【００５２】
なお、本例示的実施形態においては、分割画像データに対応する部分処理３９について、「タスク」と称している。
【００５３】
制御部６２は、実行可能となっているタスクを、格納されたタスクを複数のコア１３の各々が順次取り出して実行するためのタスクキュー６４に格納する。なお、一例として、本例示的実施形態の制御部６２は、タスクキュー６４に同時に格納するタスクの数を２つ以下としている。
【００５４】
なお、タスクキュー６４に同時に格納するタスクの数は、本例示的実施形態に限定されないが、２つ以上であることが好ましい。タスクキュー６４にタスクを１つだけ格納する場合に、タスクの実行が完了するまで新たなタスクをタスクキュー６４に格納しないとすると、新たなタスクがタスクキュー６４に格納されず、複数あるコア１３のうち、稼働しないコア１３が増加してしまい、コア１３の稼働率が低下する。一方、タスクキュー６４が同時に格納可能なタスクの数を制限しない場合、タスクキュー６４に格納された全てのタスクに対して、前処理（詳細後述）において、メモリが確保されるため、確保されるメモリ容量が多くなってしまう。
【００５５】
そのため、タスクキュー６４が同時に格納可能なタスクの数を制限することにより、前処理において確保されるメモリ等のリソースの量が増加するのが抑制される。そのため、タスクキュー６４が同時に格納可能なタスクの数は、メモリの容量等に応じて定めてもよいし、コア１３の稼働率に応じて可変としてもよい。
【００５６】
本例示的実施形態におけるタスクには、同期タスクと非同期タスクとの２種類がある。同期タスクとは、コア１３Ａがコア１３Ｂまたは第２演算部１２Ｂに処理の実行を指示すると、コア１３Ｂまたは第２演算部１２Ｂにおける処理が終了するまでコア１３Ａに制御が戻らないタスクである。一方、非同期タスクとは、コア１３Ａがコア１３Ｂまたは第２演算部１２Ｂに処理の実行を指示すると、コア１３Ｂまたは第２演算部１２Ｂにおける処理の終了を待たずにコア１３Ａに制御が戻るタスクである。
【００５７】
制御部６２は、タスクキュー６４からタスクを取得し、取得したタスクを実行させる。タスクの実行が開始されると、本例示的実施形態では、タスクから処理を終了したか又は継続中かを表す情報が制御部６２に出力される。なお、本例示的実施形態に限定されず、例えば、継続中かを表す情報については出力せず、処理を終了したことを表す情報のみを制御部６２に出力する形態であってもよい。
【００５８】
タスクが非同期タスクの場合、タスクの実行を開始したばかりのタイミングであるためタスクからは処理が継続中であることを表す情報が出力される。この場合、制御部６２は、登録部６７を介して、処理が継続中である非同期タスクをリスト６９に登録する。本例示的実施形態のリスト６９が、本開示の終了検知タスク管理情報の一例である。
【００５９】
リスト６９に登録される非同期タスクは、非同期処理の終了を検知するための終了検知タスク（詳細後述）が組み合わされたタスクとされている。以下では、終了検知タスクが組み合わされた非同期タスクを単に「終了検知タスク」という。また、以下では、終了検知タスクにおいて、組み合わされた非同期タスクの処理が継続中である状態のものを「継続中の終了検知タスク」といい、組み合わされた非同期タスクの処理が終了している状態のものを「終了済の終了検知タスク」という。
【００６０】
図６Ａは、リスト６９の状態の一例を示している。図６Ａに示した例では、既に２つの継続中の終了検知タスクＴＥｐがリスト６９に登録された状態が模式的に示されている。なお、リスト６９において示した実線の矢印は、リストの先頭から末尾へ向かう方向を表している。具体的には、図６Ａ中では、リスト６９の左側が先頭であり、矢印の先に当たる右側が末尾になる。
【００６１】
図６Ｂは、登録部６７が、新たな継続中の終了検知タスクＴＥｐを１つ、リスト６９に登録する例を模式的に示している。登録部６７は、リスト６９に終了検知タスクＴＥｐを登録する場合、一例として図６Ｂに示すように、リスト６９の末尾に終了検知タスクＴＥｐを登録する。
【００６２】
一方、タスクが同期タスクの場合、タスクからは処理を終了したことを表す情報が出力される。この場合、制御部６２は、タスクキュー６４に次のタスクを取得しに行く前に、判定部６８でのリスト判定処理（詳細後述）を実行する。
【００６３】
判定部６８は、リスト６９を先頭から順番に走査し、終了済の終了検知タスクの有無を調べる。判定部６８は、終了済の終了検知タスクが有ると判定した場合、判定した終了済の終了検知タスクをリスト６９から抜き出すことにより削除してリスト６９を更新する。
【００６４】
図７Ａは、判定部６８がリスト６９を先頭から順番に走査し、リスト６９中の２番目の終了検知タスクが終了済の終了検知タスクＴＥｆであると判定した状態の例を模式的に示している。図７Ｂに示すように判定部６８は、終了済の終了検知タスクＴＥｆであると判定した場合、判定した終了済の終了検知タスクＴＥｆをリスト６９から抜き出すことにより削除してリスト６９を更新する。図７Ｃに示すように続けて判定部６８は、次の順番の終了検知タスクが終了済の終了検知タスクＴＥｆであるか否かを判定する。判定部６８は、以上の処理をリスト６９の末尾まで実行する。
【００６５】
本例示的実施形態に係る出力部６６は、制御部６２による制御により、画像処理ＤＡＧ５０Ｂの最終段の画像処理モジュール３８により実行された画像処理の結果得られた出力画像データを出力する。本例示的実施形態では、出力部６６は、得られた出力画像データにより示される出力画像を表示部１６に表示する。なお、出力部６６は、出力画像データを外部装置に出力（送信）してもよい。また、コンピュータ１０がプリンタに組み込まれている場合は、出力部６６は、出力画像データにより示される出力画像を紙等の記録材料に出力（形成）してもよい。
【００６６】
次に、図８〜図１３を参照して、本例示的実施形態に係るコンピュータ１０の作用を説明する。なお、図８は、アプリケーション３２により画像処理の実行開始の指示が入力された場合に第１演算部１２Ａによって実行されるＤＡＧ構築・実行処理の流れの一例を示すフローチャートである。また、ＤＡＧ構築・実行処理のプログラム（ＤＡＧ構築・実行処理プログラム）は記憶部２０に予めインストールされている。また、第１演算部１２Ａにおける何らかのタスクを実行していなく、タスクを実行可能なコア１３がＤＡＧ構築・実行処理プログラムを実行することで、前述した処理構築部４２及び制御部６２として機能する。
【００６７】
図８のステップ１００で、処理構築部４２は、アプリケーション３２からの構築指示に従い、アプリケーション３２が指示した画像処理を行う画像処理ＤＡＧ５０Ａを構築する。また、処理構築部４２は、画像処理ＤＡＧ５０Ａを上述したように画像処理ＤＡＧ５０Ｂに更新する。
【００６８】
次のステップ１０２で、制御部６２は、ステップ１００で構築された画像処理ＤＡＧ５０Ｂによる画像処理の実行を、第１演算部１２Ａ（コア１３）及び第２演算部１２Ｂに実行させる画像処理ＤＡＧ実行処理を実行した後、本ＤＡＧ構築・実行処理を終了する。
【００６９】
本ＤＡＧ構築・実行処理を実行することにより、出力部６６からアプリケーション３２が所望する画像処理の結果が得られる。なお、本例示的実施形態では、本ＤＡＧ構築・実行処理が終了した場合、制御部６２は、処理が完了したことを表す情報、もしくは、処理中に何らかのエラーが生じた場合、その旨を表す情報をアプリケーション３２へ通知する。
【００７０】
次に、上記ＤＡＧ構築・実行処理のステップ１０２における画像処理ＤＡＧ実行処理について詳細に説明する。本例示的実施形態のＤＡＧ構築・実行処理には、画像処理ＤＡＧ５０Ｂの実行可能なタスクをタスクキュー６４に格納するタスク格納処理と、タスクキュー６４に格納されているタスクを実行するタスク実行処理と、２つの処理が含まれる。
【００７１】
まず、図９を参照してタスク格納処理について説明する。図９は、タスク格納処理の流れの一例を示すフローチャートである。本例示的実施形態では、タスク格納処理のプログラム（タスク格納処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。
【００７２】
第１演算部１２Ａにおける何らかのタスクを実行していなく、タスクを実行可能なコア１３がタスク格納処理プログラムを実行することで、制御部６２として機能し、図９に示したタスク格納処理を実行する。
【００７３】
図９のステップ１１０で制御部６２は、タスクキュー６４に、実行可能なタスクが格納されているか否かを判定する。本例示的実施形態では、タスクキュー６４に格納されている実行可能なタスクが２以上の場合、ステップ１１０の判定が肯定判定となりステップ１１４へ移行する。
【００７４】
一方、タスクキュー６４に格納されている実行可能なタスクが２つ未満の場合、ステップ１１０の判定が否定判定となりステップ１１２へ移行する。
【００７５】
ステップ１１２で制御部６２は、画像処理ＤＡＧ５０Ｂから実行可能なタスクを見つけ出してタスクキュー６４に格納する。図１０に示した例では、制御部６２が、画像処理ＤＡＧ５０Ｂの実行可能な同期タスクＴＳを、既に実行可能な非同期タスクＴＡが格納されているタスクキュー６４に格納した状態を示している。
【００７６】
なお、タスクを格納する場合、上述したように、タスクキュー６４に格納されているタスクの数が２以下であればよく、本ステップにおいて制御部６２がタスクキュー６４に同時に格納させるタスクの数は１つでもよいし、２つでもよい。具体的には、タスクキュー６４にタスクが格納されていない場合、制御部６２は、タスクキュー６４にタスクを１つもしくは２つ格納すればよいし、タスクキュー６４にタスクが１つ格納されている場合、制御部６２は、タスクキュー６４にタスクを１つ格納すればよい。制御部６２が、本ステップにおいてタスクキュー６４に同時に格納させるタスクの数をいずれとするかは、予め定めておいてもよいし、各コア１３におけるタスク処理の進行に応じて可変としてもよい。
【００７７】
次のステップ１１４で制御部６２は、画像処理ＤＡＧ５０Ｂの全タスクをタスクキュー６４に格納したか否かを判定する。未だタスクキュー６４に格納していないタスクが有る場合、ステップ１１４の判定が否定判定となりステップ１１０に戻り本タスク格納処理を繰り返す。一方、全てのタスクをタスクキュー６４に格納した場合、ステップ１１４の判定が肯定判定となり本タスク格納処理を終了する。
【００７８】
次に、図１１を参照してタスク実行処理について説明する。図１１は、タスク実行処理の流れの一例を示すフローチャートである。本例示的実施形態では、タスク実行処理のプログラム（タスク実行処理プログラム）は、ＤＡＧ構築・実行処理プログラムの一部、または別のいわゆるサブプログラム等として記憶部２０に予めインストールされている。
【００７９】
第１演算部１２Ａにおける何らかのタスクを実行していなく、タスクを実行可能なコア１３の各々がタスク実行処理プログラムを実行することで、制御部６２、登録部６７、及び判定部６８として機能し、図１１に示したタスク実行処理を実行する。なお、本例示的実施形態では、上記タスク格納処理及びタスク実行処理を異なるコア１３で実行することにより、タスク格納処理及びタスク実行処理が並列に実行される。
【００８０】
図１１のステップ１２０で制御部６２は、タスクキュー６４からタスクを取得する。
【００８１】
次のステップ１２２で制御部６２は、タスクの実行において予め定められた前処理を実行する。本ステップにおいて実行する前処理は画像処理前に行っておくことが予め定められている処理であり、特に限定されないが、例えば、画像処理結果を格納するための出力バッファ領域の確保や画像処理用の変数の初期化等の演算用のリソースの確保を行う処理である。
【００８２】
次のステップ１２４で制御部６２は、上記ステップ１２０で取得したタスクを、第１演算部１２Ａのコア１３または第２演算部１２Ｂに実行させる。なお、第２演算部１２Ｂにタスクを実行させる場合、第１演算部１２Ａのコア１３が、第２演算部１２Ｂにタスクを実行させる処理を行うことにより、第２演算部１２Ｂによりタスクが実行される。本例示的実施形態の第２演算部１２Ｂに実行させるタスクが、本開示の実行指示タスクの一例である。
【００８３】
なお、タスクが第２演算部１２Ｂで実行するタスクであるか否かを表す情報は、上記ＤＡＧ構築・実行処理のステップ１００（図８参照）で処理構築部４２が画像処理ＤＡＧ５０Ａから画像処理ＤＡＧ５０Ｂを生成する処理において付与される。
【００８４】
次のステップ１２６で制御部６２は、上記ステップ１２４で実行したタスクが終了した（終了済）であるか否かを判定する。
【００８５】
タスクが第２演算部１２Ｂで実行されるタスクの場合（図１０の矢印(a）参照）、高速に処理を行うため、一般的に処理に必要なデータ（画像データ）は第２演算部１２Ｂのローカルメモリ１５に転送して処理される。以下では、第２演算部１２ＢがＧＰＵである場合を具体例として説明する。一例として、図１３Ａに示すように、ＧＰＵ処理であるタスクＴ１、Ｔ２が連続して行われる場合、図１３Ｂに一例を示すように、タスクＴ１の実行前にメモリ１４から第２演算部１２Ｂのローカルメモリ１５への転送処理、及びタスクＴ２の実行後にローカルメモリ１５からメモリ１４への処理結果の転送処理が行われる。
【００８６】
上述したように、コア１３がタスクを実行してＣＰＵに指示することによりＧＰＵが起動及び制御され、ＧＰＵによりタスクが実行される。図１３Ｂに一例を示した同期処理（ＧＰＵにおける処理が終了するまでコア１３に制御が戻らない処理）の場合、通常のＣＰＵにより実行されるタスクと同じように構成されるが、図１３ＢにおけるＧＰＵ処理１とＧＰＵ処理２との間、コア１３は処理が終了するまで待機状態となりコア１３の稼働において無駄が生じる。
【００８７】
図１３Ｃに一例を示した非同期処理（コア１３がＧＰＵに処理の実行を指示すると処理の終了を待たずに、コア１３側に制御が戻る処理）の場合、コア１３はＧＰＵ処理１及びＧＰＵ処理２と並行して別のタスクが実行可能であるため稼働率が向上される。
【００８８】
なお、非同期処理の場合、ＧＰＵにより実行されるタスク（図１３Ｃでは、タスクＴ１、Ｔ２）の終了の検知を行う必要がある。そのため、図１３Ｃに示すように、ＧＰＵへの転送、処理、及びＧＰＵからの処理結果の転送の各々（タスクＴ０〜Ｔ３）を非同期で処理するための指示をコア１３が行う。そして、コア１３側に制御が戻ると、コア１３は、ＧＰＵにおけるタスクの終了を検知する終了検知タスクＴ４を実行する。
【００８９】
この場合、ステップＳ１２４が実行されたタイミングでは、処理が終了済となることは、殆どない。処理が終了済ではない場合、ステップ１２６の判定が否定判定となり、ステップ１２８へ移行する。
【００９０】
ステップ１２８で制御部６２は、登録部６７によりリスト６９の末尾に終了検知タスクＴ４を登録させた後、本タスク実行処理を終了する。
【００９１】
図１０に示した例では、既に２つの終了検知タスクＴＥｐ、ＴＥｆが登録されているリスト６９の末尾に、非同期タスクＴＡを第２演算部１２Ｂに実行させたコア１３Ａが、その終了検知タスクＴＥｐを登録した状態を示している（矢印（ｂ）参照）。
【００９２】
一方、タスクが第１演算部１２Ａで実行されるタスクの場合（図１０の矢印(ｃ）参照）、コア１３において同期処理で実行が行われ、同期処理が終了するまで制御部６２に制御が戻らない。従って制御部６２に制御が戻った後のステップ１２６の判定では同期処理が終了済となっているため、ステップ１２６の判定が肯定判定となり、ステップ１３０へ移行する。
【００９３】
ステップ１３０で制御部６２は、後処理を行う。本ステップにおいて実行する後処理はタスクに対応する部分処理の後に行うことが予め定められている処理であり、特に限定されないが、例えば、上記ステップ１２２の処理において確保した演算用のリソースの解放等を行う処理である。
【００９４】
次のステップ１３２で制御部６２は、処理構築部４２にタスクの完了通知を行う。タスクの完了通知を受け取った処理構築部４２は、画像処理ＤＡＧ５０Ｂの依存関係を更新する。このように、画像処理ＤＡＧ５０Ｂの依存関係が更新されると、上述したタスク格納処理（図９参照）において処理構築部４２は、更新された依存関係に基づいて、実行可能なタスクを判定する。
【００９５】
次のステップ１３４で制御部６２は、リスト６９に登録された終了検知タスクに対する判定を行うリスト判定処理を判定部６８に実行させた後、本タスク実行処理を終了する。
【００９６】
次に、図１２を参照して、上記タスク実行処理（図１１参照）のステップ１３４のリスト判定処理について詳細に説明する。図１２は、リスト判定処理の流れの一例を示すフローチャートである。
【００９７】
ステップ１５０で判定部６８は、リスト６９の先頭に登録されている終了検知タスクを取得する。
【００９８】
次のステップ１５２で判定部６８は、終了検知タスクの取得が成功したか否かを判定する。リスト６９が空であり、終了検知タスクを取得できなかった場合、ステップ１５２の判定が否定判定となり、本リスト判定処理を終了する。
【００９９】
一方、終了検知タスクを取得できた場合、ステップ１５２の判定が肯定判定となり、ステップ１５４へ移行する。
【０１００】
ステップ１５４で判定部６８は、取得した終了検知タスクに対応する非同期処理が終了済であるか否かを判定する。非同期処理が継続しており、終了検知タスクにより非同期処理の終了を未だ検知していない場合、例えば図１０に示した例では判定部６８が取得した終了検知タスクが終了検知タスクＴＥｐである場合、ステップ１５４の判定が否定判定となり、ステップ１６２へ移行する。ステップ１６２で判定部６８は、リスト６９から次に登録されている終了検知タスクを取得して、ステップ１５２の処理に戻る。
【０１０１】
一方、非同期処理が終了済であり、対応する終了検知タスクにより非同期処理の終了を検知した場合、例えば図１０に示した例では判定部６８が取得した終了検知タスクが終了検知タスクＴＥｆである場合、ステップ１５４の判定が肯定判定となり、ステップ１５６へ移行する。
【０１０２】
ステップ１５６で判定部６８は、終了済である終了検知タスクをリスト６９から抜き出して削除する（図７Ｂも参照）。
【０１０３】
次のステップ１５８で判定部６８は、上述したタスク実行処理（図１１参照）のステップ１３０と同様に後処理を行う。さらに次のステップ１６０で判定部６８は、上述したタスク実行処理のステップ１３２と同様に、処理構築部４２にタスクの完了通知を行う。
【０１０４】
次のステップ１６２で判定部６８は、リスト６９から次に登録されている終了検知タスクを取得して、ステップ１５２の処理に戻る。
【０１０５】
すなわち、制御部６２は、リスト６９を先頭から末尾まで順番に走査し、終了検知タスクの各々について、組み合わされている非同期処理を終了したか否かの判定を実行する。図１０の矢印（ｄ）は、同期タスクＴｓの処理を終了したコア１３Ｂが、２番目に登録されている終了検知タスクが、終了済の終了検知タスクＴＥｆである状態のリスト６９を先頭から順番に走査する場合を例示している。
【０１０６】
このように本例示的実施形態では、第２演算部１２Ｂに非同期タスクの処理の実行を指示し、かつタスクの実行が終了していないコア１３は、リスト６９に終了検知タスクを登録する。また、タスクの実行が終了したコア１３は、リスト判定処理を行って、終了済みの終了検知タスクをリスト６９から削除し、さらに対応する非同期タスクの後処理を行って処理構築部４２にタスクの完了通知を行う。
【０１０７】
本例示的実施形態では、終了検知タスクの管理をリスト６９により行うため、第２演算部１２Ｂで実行される非同期タスクの終了の検知を効率的に行うことができる。これにより、本例示的実施形態では、第２演算部１２Ｂを効率的に稼働させることができ、スケーラビリティを高めた並列処理を実現することができる。
【０１０８】
なお、リスト６９に終了検知タスクが登録されているにもかかわらず、タスク格納処理（図９参照）によりタスクキュー６４に格納されたタスクがなくなった場合、リスト６９に登録されている終了検知タスクをタスクキュー６４に格納するとよい。これにより、コア１３が待機状態になり、デッドロックしてしまうのを抑制することができる。
【０１０９】
なお、本例示的実施形態において、上述した画像処理ＤＡＧ５０Ｂの更新やタスクキュー６４へのタスクの格納、及びタスクキュー６４からタスクの取り出しの各々の処理は、排他制御しながら行う必要があることは言うまでもない。
【０１１０】
［第２例示的実施形態］
本例示的実施形態では、終了検知タスクの登録、判定のための走査、及び削除の各々を行うためのリスト６９へのアクセスを、錯綜を回避するために排他制御する形態について説明する。なお、上記第１例示的実施形態と同様の構成及び動作については、その旨を記載し、詳細な説明を省略する。
【０１１１】
本例示的実施形態のコンピュータ１０の構成は第１例示的実施形態のコンピュータ１０の構成（図１及び３参照）と同様であるため、詳細な説明を省略する。
【０１１２】
本例示的実施形態では、コンピュータ１０が実行するＤＡＧ構築・実行処理（図８参照）におけるタスク格納処理は第１例示的実施形態のタスク格納処理（図９参照）と同様であるため説明を省略する。一方、タスク実行処理は、第１例示的実施形態のタスク実行処理（図１１参照）と異なる処理を含むため、以下では、本例示的実施形態におけるタスク実行処理について詳細に説明する。
【０１１３】
図１４は、本例示的実施形態のタスク実行処理の流れの一例を示すフローチャートである。図１４に示すように本例示的実施形態のタスク実行処理は、ステップ１２６とステップ１２８との間にステップ１２７Ａ及び１２７Ｂの処理を含み、ステップ１２８の後にステップ１２９の処理を含む点で、第１例示的実施形態のタスク実行処理（図１１参照）と異なっている。
【０１１４】
本例示的実施形態ではステップ１２６で否定判定となった場合、ステップ１２７Ａに移行する。ステップ１２７Ａで制御部６２は、リスト６９のアクセスに対する排他制御のロックを取得できたか否かを判定する。ロックが取得できるまでステップ１２７Ａの判定が否定判定となり、ロックが取得できるとステップ１２７Ａの判定が肯定判定となりステップ１２７Ｂへ移行する。
【０１１５】
ステップ１２７Ｂで制御部６２は、上述した第１例示的実施形態のタスク実行処理のステップ１３４と同様に、判定部６８によりリスト判定処理を行った後、ステップ１２８に移行する。ステップ１２８で上述したように、登録部６７によりリスト６９の末尾に終了検知タスクを登録させた後、ステップ１２９へ移行する。
【０１１６】
ステップ１２９で制御部６２は、取得したロックを解放した後、本タスク実行処理を終了する。
【０１１７】
また、図１４に示すように本例示的実施形態のタスク実行処理は、ステップ１３２とステップ１３４との間にステップ１３３の処理を含み、ステップ１３４の処理の後にステップ１３５の処理を含む点で、第１例示的実施形態のタスク実行処理（図１１参照）と異なっている。
【０１１８】
ステップ１３３で制御部６２は、リスト６９のアクセスに対する排他制御のロックを取得できたか否かを判定する。ロックが取得できなかった場合、ステップ１３３の判定が否定判定となり、本タスク実行処理を終了する。一方、ロックが取得できた場合、ステップ１３３の判定が肯定判定となりステップ１３４へ移行する。
【０１１９】
また、ステップ１３５で制御部６２は、取得したロックを解放した後、本タスク実行処理を終了する。
【０１２０】
このように本例示的実施形態のコンピュータ１０では、リスト６９に終了検知タスクを登録するコア１３は、リスト６９に対するアクセスのロックが取得できるまで待機状態となり、ロックが取得できるとリスト判定処理を行った後、リスト６９に終了検知タスクを登録する。また、タスクの完了通知を受け取ったコア１３は、リスト６９に対するアクセスのロックが取得できた場合、リスト判定処理を行い、ロックが取得できない場合、リスト判定処理を行わない。
【０１２１】
本例示的実施形態と異なり、リスト６９へのアクセスを単に排他制御した場合、リスト判定処理を実行するコア１３が複数有り、コア１３の各々がリスト６９にアクセスするタイミングが重なると、１つのコア１３がリスト６９にアクセスしている間、他のコア１３がブロックされてしまう。この場合、ブロックされるコア１３の稼働に無駄が生じる。リスト６９に対するアクセスのロックを取得したコア１３がリスト判定処理によりリスト６９内の全ての終了検知タスクを走査するため、他のコア１３によるリスト判定処理は行わなくてよい。
【０１２２】
そこで、本例示的実施形態では、ロックが取得できなかったコア１３は、リスト判定処理を行わないことで、処理を効率化し、コア１３の稼働の無駄を抑制することができる。
【０１２３】
また、終了検知タスクの登録を行うコア１３がリスト６９へのロックを取得している間、リスト判定処理を行うコア１３はブロックされてしまう。本例示的実施形態と異なり、リスト判定処理を行うコア１３のブロックのみを行うと、終了済みの終了検知タスクの判定が遅れてしまい、第２演算部１２Ｂに新たに非同期タスクを行わせることができなくなり、第２演算部１２Ｂの稼働に無駄が生じる。
【０１２４】
そこで、本例示的実施形態では、終了検知タスクの登録を行うコア１３がリスト６９へのロックを取得した場合、リスト判定処理も行うことで、終了済みの終了検知タスクの判定をより効率的に行うことができる。これにより、本例示的実施形態では、第２演算部１２Ｂをより効率的に稼働させることができ、スケーラビリティを高めた並列処理を実現することができる。
【０１２５】
［第３例示的実施形態］
本例示的実施形態では、リスト判定処理を１つのタスクとして扱う形態について説明する。なお、上記第１例示的実施形態と同様の構成及び動作については、その旨を記載し、詳細な説明を省略する。
【０１２６】
本例示的実施形態のコンピュータ１０の構成は第１例示的実施形態のコンピュータ１０の構成（図１及び３参照）と同様であるため、詳細な説明を省略する。
【０１２７】
本例示的実施形態では、コンピュータ１０が実行するＤＡＧ構築・実行処理（図８参照）におけるタスク格納処理は第１例示的実施形態のタスク格納処理（図９参照）と同様であるため説明を省略する。一方、タスク実行処理は、第１例示的実施形態のタスク実行処理（図１１参照）と異なる処理を含むため、以下では、本例示的実施形態におけるタスク実行処理について詳細に説明する。
【０１２８】
図１５は、本例示的実施形態のタスク実行処理の流れの一例を示すフローチャートである。図１５に示すように本例示的実施形態のタスク実行処理は、ステップ１２８の後にステップ１３９の処理を含む点で、第１例示的実施形態のタスク実行処理（図１１参照）と異なっている。
【０１２９】
終了検知タスクをリスト６９に登録した後、ステップ１３９で制御部６２は、リスト判定処理を行わせるための判定タスクをタスクキュー６４に格納した後、本タスク実行処理を終了する。図１６に示して例では、リスト６９に終了検知タスクＴＥｐ格納したコア１３Ａが、タスクキュー６４に判定タスクＴＪを格納する状態を示している（矢印（ｅ）参照）。
【０１３０】
また、図１５に示すように本例示的実施形態のタスク実行処理は、ステップ１２０とステップ１２２との間にステップ１２１の処理を含む点、及びステップ１３４の処理を実行するタイミングが第１例示的実施形態のタスク実行処理（図１１参照）と異なっている。
【０１３１】
ステップ１２１で制御部６２は、取得したタスクが判定タスクであるか否かを判定する。取得したタスクが判定タスクではない場合、ステップ１２１の判定が否定判定となり、ステップ１２２へ移行する。一方、取得したタスクが判定タスクである場合、ステップ１２１の判定が肯定判定となり、ステップ１３４移行し、リスト判定処理を実行した後、本タスク実行処理を終了する。なお、本例示的実施形態では、ステップ１３２で処理構築部４２にタスクの完了通知を行った後、本タスク実行処理を終了する。
【０１３２】
このように本例示的実施形態では、リスト判定処理を行うための判定タスクをタスクキュー６４に格納することにより、リスト判定処理を行うタイミングをコア１３がタスクキュー６４から判定タスクを取得したタイミングとしている。
【０１３３】
本例示的実施形態の場合においても、複数の終了検知タスクを一括してリスト６９により管理し、一度のリスト判定処理の実行により、リスト６９に登録されている全ての終了検知タスクについて、終了済みの終了検知タスクであるか否かを判定している。そのため、例えば、個々の終了検知タスクをタスクキュー６４に格納する場合に比べて、終了済みの終了検知タスクの判定を効率的に行うことができる。これにより、本例示的実施形態では、第２演算部１２Ｂを効率的に稼働させることができ、スケーラビリティを高めた並列処理を実現することができる。
【０１３４】
以上説明したように、上記各例示的実施形態のコンピュータ１０は、画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行するコンピュータ１０であって、画像処理の対象となる画像データを複数の分割画像データに分割する分割部６０と、分割画像データに対して行う画像処理であるタスクで、かつ前後の依存関係に応じて処理可能なタスクを第１演算部１２Ａが備える複数のコア１３の各々に並列して実行させる制御を行う制御部６２と、第１演算部１２Ａと非同期に第２演算部１２Ｂがタスクを実行可能な場合、第２演算部１２Ｂに対するタスクの実行を指示する実行指示タスクを第１演算部１２Ａのコア１３において実行した後に、第２演算部１２Ｂにおけるタスクの終了を検知する終了検知タスクをリスト６９に登録する登録部６７と、リスト６９にアクセスし、第２演算部１２Ｂがタスクを終了した終了検知タスクの有無を判定する判定部６８と、を備える。
【０１３５】
このように上記各例示的実施形態では、第２演算部１２Ｂに非同期タスクの処理の実行を指示したコア１３は、リスト６９に終了検知タスクを登録する。また、コア１３は、リスト判定処理により終了済みの終了検知タスクをリスト６９から削除し、処理構築部４２にタスクの完了通知を行う。
【０１３６】
これに対して上記各例示的実施形態と異なり、終了検知タスクをタスクキュー６４に格納する場合、終了検知タスクの前に格納されている他のタスクの実行が終了し、終了検知タスクがタスクキュー６４から取得されるまでタスクの実行が終了しているにもかかわらず、第２演算部１２Ｂに新たにタスクを行わせることができない。そのため、第２演算部１２Ｂを十分に稼働させることができず、画像処理の処理効率が低下する。
【０１３７】
一方、上記各例示的実施形態では、複数の終了検知タスクの管理をリスト６９により行うため、第２演算部１２Ｂで実行される非同期タスクの終了の検知を効率的に行うことができる。これにより、上記各例示的実施形態では、第２演算部１２Ｂを効率的に稼働させることができ、スケーラビリティを高めた並列処理を実現することができる。
【０１３８】
従って、上記各例示的実施形態のコンピュータ１０によれば、第２演算部１２Ｂにおけるタスクの終了の検知をより効率的に行うことにより画像処理を高速化することができる。
【０１３９】
なお、上記各例示的実施形態では、第２演算部１２Ｂがコンピュータ１０内部に備えられている場合について説明したが、第２演算部１２Ｂは、コンピュータ１０の外部に設けられていてもよいし、コンピュータ１０と異なるコンピュータに備えられていてもよい。
【０１４０】
また、上記各例示的実施形態では、各種プログラムが記憶部２０に予め記憶（インストール）されている態様を説明したが、これに限定されない。各種プログラムは、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ（Digital Versatile Disk Read Only Memory）、ＵＳＢ（Universal Serial Bus）メモリ等の記録媒体に記録された形態で提供されてもよい。また、各種プログラムは、ネットワークを介して外部装置からダウンロードされる形態としてもよい。
【０１４１】
日本出願特願２０１７−１６５５１０の開示は、その全体が参照により本明細書に取り込まれる。
【０１４２】
本明細書に記載された全ての文献、特許出願、および技術規格は、個々の文献、特許出願、および技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
【図１】
2019044340.tif 000003
【図２Ａ】
2019044340.tif 000004
【図２Ｂ】
2019044340.tif 000005
【図３】
2019044340.tif 000006
【図４Ａ】
2019044340.tif 000007
【図４Ｂ】
2019044340.tif 000008
【図５】
2019044340.tif 000009
【図６Ａ】
2019044340.tif 000010
【図６Ｂ】
2019044340.tif 000011
【図７Ａ】
2019044340.tif 000012
【図７Ｂ】
2019044340.tif 000013
【図７Ｃ】
2019044340.tif 000014
【図８】
2019044340.tif 000015
【図９】
2019044340.tif 000016
【図１０】
2019044340.tif 000017
【図１１】
2019044340.tif 000018
【図１２】
2019044340.tif 000019
【図１３Ａ】
2019044340.tif 000020
【図１３Ｂ】
2019044340.tif 000021
【図１３Ｃ】
2019044340.tif 000022
【図１４】
2019044340.tif 000023
【図１５】
2019044340.tif 000024
【図１６】
2019044340.tif 000025
【手続補正書】
【提出日】令和1年6月28日(2019.6.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置であって、
前記画像処理の対象となる画像データを複数の分割画像データに分割する分割部と、
前記分割画像データに対して行う画像処理であって前記オブジェクトに１つ以上含まれる部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行う制御部と、
前記第１演算部と非同期に実行され、処理の終了を検知する終了検知タスクが対応付けられた非同期処理である前記部分処理を第２演算部が実行可能な場合、前記第２演算部に対する前記部分処理の実行を指示する実行指示タスクを前記第１演算部の演算装置において実行した後に、実行を指示した前記部分処理に対応付けられている終了検知タスクを終了検知タスク管理情報に登録する登録部と、
前記終了検知タスク管理情報にアクセスし、登録されている終了検知タスクを実行し、前記第２演算部が前記部分処理を終了した前記部分処理に対応付けられている前記終了検知タスクの有無を判定する判定部と、
を備えた画像処理装置。
【請求項２】
前記演算装置は、前記部分処理の実行後に前記判定部として動作する、請求項１に記載の画像処理装置。
【請求項３】
前記演算装置は、前記判定部として前記終了検知タスクの有無の判定の終了後、再び前記制御部の制御により他の部分処理を実行する、請求項２に記載の画像処理装置。
【請求項４】
前記演算装置は、前記登録部として動作する、請求項１から請求項３のいずれか１項に記載の画像処理装置。
【請求項５】
前記演算装置は、前記登録部としての動作と前記判定部としての動作とを連続して行う、請求項１から請求項４のいずれか１項に記載の画像処理装置。
【請求項６】
前記制御部は、前記判定部として動作させるための判定タスクを前記演算装置に実行させる、請求項１に記載の画像処理装置。
【請求項７】
前記登録部及び前記判定部の前記終了検知タスク管理情報へのアクセスは排他制御されている、請求項１から請求項６のいずれか１項に記載の画像処理装置。
【請求項８】
前記判定部は、前記第２演算部が前記部分処理を終了した前記終了検知タスクを前記終了検知タスク管理情報から削除する、請求項１から請求項７のいずれか１項に記載の画像処理装置。
【請求項９】
前記制御部は、タスクキューに格納された前記部分処理を順次取り出して前記複数の演算装置に並列して実行させる、請求項１から請求項８のいずれか１項に記載の画像処理装置。
【請求項１０】
画像処理を実行するオブジェクトが有向非循環グラフ形態で複数連結されたオブジェクト群の各オブジェクトにより画像処理を実行する画像処理装置による画像処理方法であって、
前記画像処理の対象となる画像データを複数の分割画像データに分割し、
前記分割画像データに対して行う画像処理であって前記オブジェクトに１つ以上含まれる部分処理で、かつ前後の依存関係に応じて処理可能な部分処理を第１演算部が備える複数の演算装置の各々に並列して実行させる制御を行い、
前記第１演算部と非同期に実行され、処理の終了を検知する終了検知タスクが対応付けられた非同期処理である前記部分処理を第２演算部が実行可能な場合、前記第２演算部に対する前記部分処理の実行を指示する実行指示タスクを前記第１演算部の演算装置において実行した後に、実行を指示した前記部分処理に対応付けられている終了検知タスクを終了検知タスク管理情報に登録し、
前記終了検知タスク管理情報にアクセスし、登録されている終了検知タスクを実行し、前記第２演算部が前記部分処理を終了した前記部分処理に対応付けられている前記終了検知タスクの有無を判定する、
処理を含む画像処理方法。
【請求項１１】
コンピュータを、請求項１から請求項９のいずれか１項に記載の画像処理装置の分割部、制御部、登録部、及び判定部として機能させるための画像処理プログラム。
【国際調査報告】
2019044340.tif 000026
2019044340.tif 000027