(57)【特許請求の範囲】
【請求項１】
入力画像データに対する画像処理の依存関係が所定方向に存在する当該画像処理を、複数のスレッドを起動させて並列的に処理可能な画像処理装置であって、
複数の上記スレッドを起動させて、当該スレッドにおける処理を並列的に実行可能なデバイスと、
上記デバイスで画像処理された結果を記憶させることが可能な中間バッファーと、
上記デバイスに画像処理させる入力画像データのデータ量を制御するホストと、
を具備し、
上記ホストは、上記入力画像データを、上記画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データを作成する処理を行い、
その処理によって上記デバイスには上記分割画像データが供給され、
上記デバイスは、上記分割画像データに対する画像処理を、上記画像処理の依存関係が存在する方向とは直交する方向に沿って複数の上記スレッドを起動させて並列的に実行させ、
さらに上記デバイスは、当該デバイスで画像処理された処理結果のうち上記分割の境界部分に対応する処理結果を上記中間バッファーに記憶させ、
さらに上記デバイスは、上記中間バッファーに記憶させた上記処理結果を読み出して、当該処理結果を、上記分割の境界部分をまたいで隣接する次の上記分割画像データに対する画像処理に反映させる、
ことを特徴とする画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
依存関係が所定方向に存在する前記画像処理は、スムージング処理である、
ことを特徴とする画像処理装置。
【請求項３】
請求項１または２記載の画像処理装置であって、
前記デバイスには、前記中間バッファーが設けられていると共に、
前記ホストは、前記デバイスから前記中間バッファーの記憶容量に関する情報を受け取り、この記憶容量に関する情報に基づいて、前記分割画像データを作成する処理を実行する、
ことを特徴とする画像処理装置。
【請求項４】
請求項３記載の画像処理装置であって、
前記ホストには、メモリー制御部が設けられていると共に、
上記メモリー制御部は、前記デバイスへの前記入力画像データの送出の制御により、前記分割画像データを作成する処理を実行する、
ことを特徴とする画像処理装置。
【請求項５】
請求項３記載の画像処理装置であって、
前記ホストは、前記入力画像データから前記分割画像データを作成し、当該作成された前記分割画像データを前記デバイスに送出する、
ことを特徴とする画像処理装置。
【請求項６】
入力画像データに対する画像処理の依存関係が所定方向に存在する当該画像処理を、複数のスレッドを起動させて並列的に処理可能な画像処理方法であって、
複数の上記スレッドを起動させて、当該スレッドにおける処理を並列的に実行可能なデバイスと、
上記デバイスで画像処理された結果を記憶させることが可能な中間バッファーと、
上記デバイスに画像処理させる入力画像データのデータ量を制御するホストと、
を用い、
上記入力画像データを、上記画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データを作成する処理を上記ホストに実行させ、
その処理によって上記デバイスには上記分割画像データが供給され、
上記デバイスにおける上記分割画像データに対する画像処理を、上記画像処理の依存関係が存在する方向とは直交する方向に沿って、複数の上記スレッドを起動させて並列的に実行させ、
さらに上記デバイスで画像処理された処理結果のうち上記分割の境界部分に対応する処理結果を上記中間バッファーに記憶させ、
さらに上記デバイスによって、上記中間バッファーに記憶させた上記処理結果を読み出して、当該処理結果を、上記分割の境界部分をまたいで隣接する次の上記分割画像データに対する画像処理に反映させる、
ことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
コンピューター内に取り付けられるデバイスとして、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が広く用いられている。ＧＰＵは、本来はグラフィックス処理のためのものであるが、近年になって、汎用計算に使用するための開発環境がメーカーから提供されている。このように、汎用計算にＧＰＵを利用する技術は、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｏｎ  ＧＰＵ）として知られている。現在、ＧＰＧＰＵは、計算物理学、映像および画像の処理、データベース管理、生命工学等の分野で利用されている。
【０００３】
ＧＰＵは、汎用の処理装置であるＣＰＵ（中央処理装置：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に比べ、浮動小数点演算を並列かつ高速に実行することができる。すなわち、ＧＰＵは、大量のデータに並列に同じ演算を繰り返すような用途であれば、ＣＰＵに比べ非常に効率よく高速に処理を実行できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１９８８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ＧＰＵを用いて、処理の依存関係が一定方向にある処理を行う場合、メモリー容量等の制約により、入力された入力画像データに対して、全領域に対して並列に処理を行うことができない場合が存在する。その場合、処理の依存関係が一定方向にある処理にある関係上、その依存関係のある一定方向とは直交する方向に沿って、入力画像データを複数に分割し、分割された入力画像データを順番に処理して、メモリー容量等の制約に対応させる、という手法を採ることが考えられる。しかしながら、この場合には、同時に起動されるスレッド数が減ってしまうため、ＧＰＵでの処理におけるスループットが低下してしまう。
【０００６】
本発明に係る幾つかの態様は、デバイスのスループットを低下させずに入力画像データを処理可能な画像処理装置および画像処理方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、本発明の画像処理装置は、入力画像データに対する画像処理の依存関係が所定方向に存在する当該画像処理を、複数のスレッドを起動させて並列的に処理可能な画像処理装置であって、複数のスレッドを起動させて、当該スレッドにおける処理を並列的に実行可能なデバイスと、デバイスで画像処理された結果を記憶させることが可能な中間バッファーと、デバイスに画像処理させる入力画像データのデータ量を制御するホストと、を具備し、ホストは、入力画像データを、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データを作成する処理を行い、その処理によってデバイスには分割画像データが供給され、デバイスは、分割画像データに対する画像処理を、画像処理の依存関係が存在する方向とは直交する方向に沿って複数のスレッドを起動させて並列的に実行させ、さらにデバイスは、当該デバイスで画像処理された処理結果のうち分割の境界部分に対応する処理結果を上記中間バッファーに記憶させるものである。
【０００８】
このように構成する場合、デバイスには、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データが供給され、デバイスでは、この分割画像データに対して、複数のスレッドを起動させて並列的に処理を実行可能となる。そのため、メモリー容量等の制約により、入力された入力画像データに対して、全領域に対して並列に処理を行うことができない場合であっても、画像処理の依存関係が存在する方向とは直交する方向に沿って、より多くのスレッドを起動させる（スレッドを増やす）ことができる。それにより、依存関係のある一定方向とは直交する方向に沿って、入力画像データを分割する場合と比較して、デバイスの処理におけるスループットを向上させることが可能となる。また、並列的に起動させることが可能なスレッド数を多くすることが可能となるため、スレッドにおける処理を並列的に実行可能という、デバイスの特性を生かすことが可能となる。
【０００９】
また、本発明の他の側面は、上述の発明において、依存関係が所定方向に存在する画像処理は、スムージング処理であることが好ましい。
【００１０】
このように構成する場合、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データに対して、所定方向に処理の依存関係が存在するスムージング処理が為される。そのため、依存関係のある一定方向とは直交する方向に沿って、入力画像データを分割してスムージング処理を実行する場合と比較して、入力画像データ全体のスムージング処理を高速に行うことが可能となる。
【００１１】
さらに、本発明の他の側面は、上述の発明において、デバイスには、中間バッファーが設けられていると共に、ホストは、デバイスから中間バッファーの記憶容量に関する情報を受け取り、この記憶容量に関する情報に基づいて、分割画像データを作成する処理を実行することが好ましい。
【００１２】
このように構成する場合、分割画像データのデータサイズを適切なものとすることが可能となる。
【００１３】
また、他の発明は、上述の発明に加えて更に、ホストには、メモリー制御部が設けられていると共に、メモリー制御部は、デバイスへの入力画像データの送出の制御により、分割画像データを作成する処理を実行することが好ましい。
【００１４】
このように構成する場合、メモリー制御部での、デバイスへの入力画像データの送出の制御により、デバイス側の中間バッファーに分割画像データを作成させることが可能となる。すなわち、ホスト側では、分割画像データを作成しなくても済むため、ホスト側のメモリーを消費せずに済む。
【００１５】
さらに、他の発明は、上述の発明に加えて更に、ホストは、入力画像データから分割画像データを作成し、当該作成された分割画像データをデバイスに送出することが好ましい。
【００１６】
このように構成する場合、分割画像データを作成する処理は要するものの、ホスト側からのデータの送出に際しては、連続するアドレス順に分割画像データを送出可能となる。そのため、データの送出については、高速化が可能となる。
【００１７】
また、他の発明の他の側面である画像処理方法は、入力画像データに対する画像処理の依存関係が所定方向に存在する当該画像処理を、複数のスレッドを起動させて並列的に処理可能な画像処理方法であって、複数のスレッドを起動させて、当該スレッドにおける処理を並列的に実行可能なデバイスと、デバイスで画像処理された結果を記憶させることが可能な中間バッファーと、デバイスに画像処理させる入力画像データのデータ量を制御するホストと、を用い、入力画像データを、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データを作成する処理をホストに実行させ、その処理によってデバイスには分割画像データが供給され、デバイスにおける分割画像データに対する画像処理を、画像処理の依存関係が存在する方向とは直交する方向に沿って、複数のスレッドを起動させて並列的に実行させ、さらにデバイスで画像処理された処理結果のうち分割の境界部分に対応する処理結果を中間バッファーに記憶させることが好ましい。
【００１８】
このように構成する場合、デバイスには、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データが供給され、デバイスでは、この分割画像データに対して、複数のスレッドを起動させて並列的に処理を実行可能となる。そのため、メモリー容量等の制約により、入力された入力画像データに対して、全領域に対して並列に処理を行うことができない場合であっても、画像処理の依存関係が存在する方向とは直交する方向に沿って、より多くのスレッドを起動させる（スレッドを増やす）ことができる。それにより、依存関係のある一定方向とは直交する方向に沿って、入力画像データを分割する場合と比較して、デバイスの処理におけるスループットを向上させることが可能となる。また、並列的に起動させることが可能なスレッド数を多くすることが可能となるため、スレッドにおける処理を並列的に実行可能という、デバイスの特性を生かすことが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の印刷装置およびコンピューターの構成を示す概略図である。
【図２】図１に示すコンピューター内のＧＰＵの構成例を示すブロック図である。
【図３】図１のプリンターの概略構成を示す図である。
【図４】処理の依存関係がある方向およびスレッドの並列方向を示す図である。
【図５】画像データの分割のイメージおよび処理のイメージを示す図である。
【図６】従前の画像データ分割のイメージおよび処理のイメージを示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明の一実施の形態に係る、画像処理装置を備える印刷装置１０について、図１から図６に基づいて説明する。ここで、印刷装置１０とは、コンピューター２０と、インクジェット方式のプリンター４０との組み合わせを指すものとするが、以下の説明において述べる機能を全て備えるプリンターであれば、当該プリンターを印刷装置１０としても良い。また、画像処理装置は、本実施の形態では、コンピューター２０が対応している。
【００２１】
＜印刷装置の概略構成＞
図１は、印刷装置１０の概略構成を示す図である。図１に示すように、印刷装置１０は、コンピューター２０と、プリンター４０とから構成されている。
【００２２】
これらのうち、コンピューター２０は、ＣＰＵ（Central Processing Unit）２１と、メインメモリー２２と、ＨＤＤ（Hard Disk Drive）２３と、インターフェース２４と、バス２５と、デバイス３０等を具備している。
【００２３】
これらのうち、ＣＰＵ２１は、不図示のＲＯＭ（Read Only Memory）やＨＤＤ２３等から各種プログラムおよび各種データを読み出して、各種の演算を実行する部分である。また、かかる各種プログラムおよび各種データの読み出し後、コンピューター２０の各構成が協動することによって、ＣＰＵ２１には、メモリー制御部２１ａに相当する構成が機能的に実現されている。
【００２４】
メモリー制御部２１ａは、メインメモリー２２の供給データバッファー２２ａに記憶されている画像データ（この画像データは、請求項でいう入力画像データに対応する）を、デバイス３０側に送出する際の制御を行う。
【００２５】
メインメモリー２２は、例えばＤＲＡＭ等のような各種データおよびプログラムを格納する外部メモリーである。このメインメモリー２２には、例えば、後述するアプリケーションプログラム２３ａで作成されたＲＧＢ表色系の画像データを記憶する供給データバッファー２２ａと、後述するＧＰＵ３１での処理後のデータを記憶する中間データバッファー２２ｂとを有している。
【００２６】
ＨＤＤ２３は、ＣＰＵ２１からの要求に応じて、記録媒体であるハードディスクに記録されているデータあるいはプログラムを読み出すとともに、ＣＰＵ２１の演算処理の結果として発生した所定のデータを前述したハードディスクに記録することを可能としている。インターフェース２４は、プリンター４０に対して画像データを出力すると共に、外部入力装置および外部記憶装置から出力された信号の表現形式を適宜変換して入力させるための回路である。また、バス２５は、ＣＰＵ２１、メインメモリー２２、ＨＤＤ２３、デバイス３０等を接続する信号の伝送路である。
【００２７】
このＨＤＤ２３には、アプリケーションプログラム２３ａ、ビデオドライバープログラム２３ｂ、およびプリンタードライバープログラム２３ｃが実装されており、これらが所定のオペレーティングシステム（ＯＳ）の下で動作している。
【００２８】
ここで、プリンタードライバープログラム２３ｃは、解像度変換モジュール、色変換モジュール、色変換テーブル、ハーフトーンモジュール、記録率テーブル、印刷データ生成モジュール、送信モジュール等を構成要素として有している（いずれのモジュールも図示省略）。
【００２９】
これらのうち、解像度変換モジュールは、ＲＧＢ表色系の画像データの解像度を、プリンター４０の印刷解像度に応じて適宜変換する。色変換モジュールは、ＲＧＢ（Red, Green, Blue）表色系によって表現されている画像データを、色変換テーブルを参照して、ＣＭＹＫ（Cyan, Magenta, Yellow, Black）表色系の画像データに変換する処理を行う。ハーフトーンモジュールは、たとえば隣接する画素同士の画素値の平均を取る等の手法により、画像のエッジ部分の画素値の変動を滑らかにするスムージング処理を行う。その後、ハーフトーンモジュールは、たとえばディザ処理により、ＣＭＹＫ表色系によってたとえば１画素が２５６階調によって表現される画像データを、記録率テーブルを参照して、大、中、小の３種類のドットの組み合わせからなるビットマップデータに変換する。なお、スムージング処理は、色変換モジュール等の他のモジュールによって実行されても良い。
【００３０】
印刷データ生成モジュールは、ハーフトーンモジュールから出力されたビットマップデータから、各主走査時のドットの記録状態を示すラスタデータと、副走査送り量を示すデータとを含む印刷データを生成する。送信モジュールは、印刷データ生成モジュールによって生成された印刷データを、プリンター４０に対して送信する。
【００３１】
デバイス３０は、グラフィックスボードとも称呼されるが、このデバイス３０には、ＧＰＵ（Graphics Processing Unit）３１と、中間バッファーの一例としてのグラフィックスメモリー３２とが設けられている。ＧＰＵ３１は、ＣＰＵ２２から送られてきたデータに対して、後述するような処理を施し、再びＣＰＵ２１側に出力する。また、グラフィックスメモリー３２は、ＣＰＵ２１側から送られてきたデータを記憶する。
【００３２】
また、図１に示すように、ＧＰＵ３１には、スレッド制御部３１ａと、メモリー指令部３１ｂとが機能的に実現されている。スレッド制御部３１ａは、後述するように処理用データに対する処理を、自動的にスレッド単位に分割すると共に、スレッドの後述するストリーミングプロセッサー３１６への割り当てをコントロールする。また、メモリー指令部３１ｂは、後述するように、分割された分割画像データＤの境界における計算結果を、グラフィックスメモリー３２に保持させて、次の分割画像データＤの計算において、スレッド制御部３１ａに受け渡すように指令する。
【００３３】
なお、以下の説明においては、デバイス３０に対して、ＣＰＵ２１、メインメモリー２２およびＨＤＤ２３を含むものを、ホストＨと称呼する。
【００３４】
＜ＧＰＵの構成例＞
図２は、ＧＰＵ３１の構成例を示すブロック図である。ここでは、ＮＶＩＤＩＡ社のＧｅＦｏｒｃｅ（登録商標）８８００ＧＴＸを例に説明する。このＧＰＵ３１は、ＣＵＤＡ（Compute Unified Device Architecture；登録商標）と呼ばれる、Ｃ言語での統合開発環境に対応しているものである。従前のＧＰＵにおいては、頂点シェーダとピクセルシェーダという、２つの機能のシェーダを備えているが、ＧＰＵ３１は、全てのシェーダが同じ機能を持つ、統合シェーダと呼ばれる設計思想を採用している。なお、統合シェーダは、後述するストリーミングプロセッサー３１６に実現されている。
【００３５】
このＧＰＵ３１においては、ＧＰＧＰＵ（General
Purpose computing on GPU）として知られている、ＧＰＵ３１の演算資源を画像処理以外の目的に応用する技術を実行可能となっている。
【００３６】
このＧＰＵ３１は、８個のテクスチャープロセッサークラスター（ＴＰＣ）３１０を有する。各テクスチャープロセッサークラスター３１０は、２つのストリーミングマルチプロセッサー（ＳＭ）３１１と、コンスタントキャッシュ３１２およびテクスチャーキャッシュ３１３とにより構成される。ストリーミングマルチプロセッサー３１１はそれぞれ、シェアードメモリ３１４、命令ユニット３１５および８個のストリーミングプロセッサー（ＳＰ）３１６により構成される。この構成において、ストリーミングプロセッサー３１６が個々の計算ユニットとなり、８×２×８＝１２８個の処理を並列に実行することができる。ここでは市販されている特定の製品の構成例を示しているが、基本的な構成、すなわち複数の計算ユニットが並列に処理する構成は、どのＧＰＵでも同じある。
【００３７】
ここで、ある処理（本実施の形態では、後述するように画像データのスムージング）をＧＰＵ３１にて実行する場合、ＧＰＵ３１のスレッド制御部３１ａが、その処理を自動的にスレッド単位に分割する。ところで、分割されたスレッド数は、ストリーミングプロセッサー３１６の数よりも多いことが通常である。一方、１つのストリーミングマルチプロセッサー３１１は、８個のストリーミングプロセッサー３１６を有しているため、１つのストリーミングマルチプロセッサー３１１で物理的に並列処理できるスレッド数は８個となっている。そのため、たとえば、数千〜数万というように、非常に多くの数に分割されたスレッドは、時分割でそれぞれのストリーミングプロセッサー３１６に割り当てるように構成されている。
【００３８】
＜その他の構成（プリンターの概略構成）＞
続いて、プリンター４０の概略構成について説明する。図３は、プリンター４０の概略構成を示す図である。プリンター４０は、紙送り機構５０と、インク供給機構６０と、ラインヘッド７０と、プリンター制御部８０とを具備している。
【００３９】
紙送り機構５０は、紙送りモーター（ＰＦモーター）５１と、この紙送りモーター５１からの駆動力が伝達される給紙ローラー５２等を具備していて、印刷用紙等の印刷媒体Ｐを、供給部位から排紙側に向けて搬送可能となっている。また、インク供給機構６０は、カートリッジホルダー６１と、インクカートリッジ６２と、インク供給路６３とを具備している。カートリッジホルダー６１には、インクカートリッジ６２が着脱自在に装着されている。そのため、図３のプリンター４０は、いわゆるオフキャリッジタイプの構成となっているが、オンキャリッジタイプのプリンターであっても良い。また、インクカートリッジ６２とラインヘッド７０との間には、インク供給路６３が設けられていて、インクカートリッジ６２からラインヘッド７０にインクを供給可能としている。
【００４０】
また、ラインヘッド７０は、印刷媒体Ｐよりも幅広の長さ寸法を有している。このラインヘッド７０は、複数の短尺ヘッド（図示省略）が、副走査方向において交互に前後しつつ、主走査方向に沿って並ぶように配列されている。
【００４１】
また、プリンター制御部８０は、不図示のＣＰＵ、メモリー（ＲＯＭ、ＲＡＭ、不揮発性メモリー等）、ＡＳＩＣ（Application Specific Integrated Circuit）、バス、タイマ、インターフェース等を有している。このプリンター制御部８０には、各種センサーからの信号が入力されると共に、このセンサーからの信号に基づいて、プリンター制御部８０は、コンピューター２０側から送信されてきた印刷データに基づいて、紙送りモーター５１等のモーター、およびラインヘッド７０等の駆動を司る。
【００４２】
＜本実施の形態における動作＞
以上のような構成のコンピューター２０において、画像処理を行う場合の一例について、以下に説明する。
【００４３】
ＣＰＵ２１の指令によって画像処理を行う場合、その画像処理の中でも、スムージング処理のような処理は、データ配列のうち、図４に示すような所定の方向に処理の依存関係が存在している。たとえば、図４においては、データ配列の横方向のデータ（０，０）〜（ｎ，０）、（０，１）〜（ｎ，１）、．．（０，ｍ）〜（ｎ，ｍ）に、処理の依存関係が存在している。
【００４４】
このような、所定の方向に処理の依存関係が存在しているデータ（本実施の形態では画像データ）の処理を行うのに際して、メモリー制御部２１ａは、ＧＰＵ３１のグラフィックスメモリー３２の記憶容量の情報を参照して、ＧＰＵ３１に送出するデータ量を決定する。そして、決定されたデータ量と、依存関係のある方向とは直交する方向（図４においては縦方向）のデータ数（画素数）とから、依存関係のある方向のデータ数（画素数）が決定される。そして、画像データ全体においては、図５に示すように、幾つかの分割画像データＤに分割される状態となる。
【００４５】
なお、かかる分割画像データＤへの分割は、実際にホストＨ側で分割を行い、その分割が為された分割画像データＤをメインメモリー２２に再度記憶させるようにしても良い。また、メモリー制御部２１ａにおける画像データの送出の制御によって、見かけ上、このような分割画像データＤへの分割を実現するようにしても良い。メモリー制御部２１ａにおける画像データの送出の制御により見かけ上の分割を実現する場合、メモリー制御部２１ａでは、データ送出に関して、依存関係のある方向における最初の先頭アドレスと、依存関係のある方向における最終アドレスまでの間のデータ数とを指定し、それを依存方向のある方向と直交する方向の全てに対して実行することによって、行うことができる。
【００４６】
また、ＣＰＵ２１ａに機能的に実現されるメモリー制御部２１ａによらずに、ＧＰＵ３１側の指令によって、グラフィックスメモリー３２に分割画像データを作成するようにしても良い。この場合、ＣＰＵ２１がＧＰＵ３１に対して、スムージング処理等の所定の画像処理を指令すると、ＧＰＵ３１のメモリー指令部３１ｂは、メインメモリー２２の供給データバッファー２２ａから、グラフィックスメモリー３２の所定の領域に、分割画像データＤを読み込んで作成する。なお、グラフィックスメモリー３２の所定の領域への分割画像データＤの作成は、依存関係のある方向における最初の先頭アドレスと、依存関係のある方向における最終アドレスまでの間のデータ数とを指定し、それを依存方向のある方向と直交する方向の全てに対して実行することによって実現される。
【００４７】
そして、ＧＰＵ３１のグラフィックスメモリー３２では、グリッドと呼ばれる単位毎にホストＨから送出されてきた分割画像データＤである処理用データが記憶させられる。その後、この処理用データに対し、スレッド制御部３１ａは、処理用データに対する処理を、自動的にスレッド単位に分割すると共に、スレッドの後述するストリーミングプロセッサー３１６への割り当てをコントロールする。そして、ストリーミングプロセッサー３１６では、各スレッドの処理を、順次実行する。ここでの処理は、スムージング処理のように、図５に示すような所定の方向に処理の依存関係が存在しているものである。たとえば、スムージング処理では、所定の方向に沿って移動しながら、たとえば隣接する画素同士の画素値の平均を取る等、複数の画素の間の平均値を取るためのスレッドが実行される。
【００４８】
このような処理に対応する数千〜数万のスレッドが、スレッド制御部３１ａのコントロールにより、見かけ上同時に実行可能となっている。
【００４９】
そして、分割画像データＤに対応する全てのスレッドの処理が終了したときに、その境界部分Ｂに対応する処理結果を、グラフィックスメモリー３２に保持させるように、メモリー指令部３１ｂは指令する。また、分割画像データＤに対応する全てのスレッドの処理が終了するまでの間、その処理結果は、グラフィックスメモリー３２に蓄えられる。そして、分割画像データＤに対応する全てのスレッドの処理が終了すると、その処理結果が、メモリー指令部３１ｂの指令によって、ホストＨ側に受け渡される。続いて、次の分割画像データＤの処理用データが、ホストＨから送出されてきて、グラフィックスメモリー３２に記憶させられる。
【００５０】
また、スレッド制御部３１ａでは、次の処理用データに対する処理を、自動的にスレッド単位に分割すると共に、スレッドの後述するストリーミングプロセッサー３１６への割り当てをコントロールする。ここで、メモリー指令部３１ｂは、直前の処理における、分割された分割画像データＤの境界における計算結果を、グラフィックスメモリー３２から読み出して、スレッド制御部３１ａに受け渡す。すると、スレッド制御部３１ａでは、受け渡された計算結果を、時分割における最初のスレッドに反映させる。そのため、直前に処理がなされた分割画像データＤの処理用データと、現在処理が行われる分割画像データＤの処理用データとの間で、所定の方向における処理の依存関係を損なうことがなくなる。
【００５１】
以後、全ての分割画像データＤに対する処理が終了するまで、このような処理を繰り返し行う。
【００５２】
＜効果＞
以上のような構成の印刷装置１０によれば、デバイス３０（ＧＰＵ３１）には、画像処理の依存関係が存在する方向とは直交する方向に、境界部分Ｂが表れるように分割した分割画像データＤが供給される。そして、デバイス３０（ＧＰＵ３１）では、この分割画像データＤに対して、複数のスレッドを起動させて並列的に処理を実行可能となる。そのため、ＧＰＵ３１のグラフィックスメモリー３２のメモリー容量等の制約により、入力された入力画像データに対して、全領域に対して並列に処理を行うことができない場合であっても、画像処理の依存関係が存在する方向とは直交する方向に沿って、より多くのスレッドを起動させることができる。
【００５３】
それにより、依存関係のある一定方向とは直交する方向に沿って、入力画像データを分割する場合と比較して、デバイス３０（ＧＰＵ３１）の処理におけるスループットを向上させることが可能となる。また、並列的に起動させることが可能なスレッド数を多くすることが可能となるため、スレッドにおける処理を並列的に実行可能という、デバイス３０（ＧＰＵ３１）の特性を生かすことが可能となる。
【００５４】
また、本実施の形態では、依存関係が所定方向に存在する画像処理の一例は、スムージング処理となっている。そのため、画像処理の依存関係が存在する方向とは直交する方向に分割の境界部分が表れるように分割した分割画像データＤに対して、所定方向に処理の依存関係が存在するスムージング処理が為される。それにより、依存関係のある一定方向とは直交する方向に沿って、入力画像データを分割してスムージング処理を実行する場合と比較して、入力画像データ全体のスムージング処理を高速に行うことが可能となる。
【００５５】
ここで、従前の、たとえばスムージング処理のような画像処理の一例を、図６に示す。図６に示す画像処理においては、所定の方向における処理の依存関係を損なわせないようにするべく、処理の依存関係が存在する方向とは直交する方向（スレッドの並列方向；図６では縦方向）に、画像データを分割するようにしている。この場合、処理の依存関係が存在する方向は、図６における横方向である関係上、起動できるスレッド数は、図５におけるものと比較して、大幅に少なくなってしまう。その結果、並列処理を高速に行うことができる、という、ＧＰＵ３１の特性を十分に生かすことができなくなっている。
【００５６】
これに対して、図５から明らかなように、本実施の形態における画像処理では、起動できるスレッド数を非常に多く確保することができ、並列処理を高速に行うことができる、という、ＧＰＵ３１の特性を十分に生かすことが可能となっている。
【００５７】
さらに、本実施の形態では、ホストＨ（メモリー制御部２１ａ）は、デバイス３０からグラフィックスメモリー３２の記憶容量に関する情報を受け取り、この記憶容量に関する情報に基づいて、分割画像データＤを作成する処理を実行している。このため、分割画像データＤのデータサイズを適切なものとすることが可能となる。
【００５８】
また、本実施の形態では、ホストＨのＣＰＵ２１には、メモリー制御部２１ａが機能的に実現されており、このメモリー制御部２１ａは、デバイス３０への入力画像データの送出の制御により、分割画像データＤを作成する処理を実行している。このため、デバイス３０側のグラフィックスメモリー３２に分割画像データＤを作成させることが可能となる。すなわち、ホストＨ側では、分割画像データＤを作成しなくても済むため、ホストＨ側のメインメモリー２２を消費せずに済む。
【００５９】
なお、ホストＨは、入力画像データから分割画像データＤを作成し、当該作成された分割画像データＤをデバイス３０に送出するようにしても良い。この場合には、分割画像データＤを作成する処理は要するものの、ホストＨ側からの分割画像データＤの送出に際しては、連続するアドレス順に分割画像データＤを送出可能となる。そのため、データ送出については、高速化が可能となる。
【００６０】
また、本実施の形態における印刷装置１０においては、デバイス３０（ＧＰＵ３１）での画像処理の高速化が図れるため、プリンター４０の印刷までのスループットを向上させることが可能となる。特に、ラインヘッド７０を備えるプリンター４０においては、印刷が高速に為されるが、デバイス３０（ＧＰＵ３１）での画像処理の高速化が図れるため、そのようなプリンター４０において、印刷時に画像処理のための待ち時間を短縮化できるか、または待ち時間を発生させないようにすることが可能となる。
【００６１】
＜変形例＞
以上、本発明の一実施の形態について述べたが、本発明はこれ以外にも種々変形可能である。以下、それについて述べる。
【００６２】
上述の実施の形態では、依存関係が所定方向に存在する処理として、スムージング処理について説明している。しかしながら、このような依存関係が所定方向に存在する処理は、スムージング処理には限られず、各種の処理に適用させるようにしても良い。たとえば、平面的に依存関係が存在する各種の処理において、ある方向のみに依存関係が生じるように制限を掛け、そのような制限を掛けた各種の処理に、本発明を適用するようにしても良い。そのような処理としては、たとえば、誤差拡散の処理、ラプラシアンフィルタ処理等の各種のフィルタ処理、バイリニア補間、ニアレストネイバー補間等がある。
【００６３】
また、上述の実施の形態では、画像処理装置の機能は、印刷装置１０を構成するコンピューター２０に実現されている場合について説明している。しかしながら、この画像処理装置の機能は、コンピューター２０以外の部位に実現されていても良い。たとえば、プリンター４０がデバイス３０と接続可能な構成の場合には、プリンター制御部８０とデバイス３０とによって、画像処理装置が構成される。また、プリンター４０の制御部がデバイスを含む構成を採用する場合には、当該プリンター４０の制御部によって、画像処理装置が構成される。
【００６４】
また、上述の実施の形態では、１つのホストＨと、１つのデバイス３０を備えるコンピューター２０について説明している。しかしながら、ホストＨおよびデバイス３０の個数は、１つには限られず、複数存在していても良い。特に、デバイス３０が複数存在する場合には、画像処理において、処理速度の一層の高速化を図ることが可能となる。
【００６５】
また、上述の実施の形態においては、デバイス３０は、特定の機種に限られるものではなく、たとえば数千〜数万といった具合に、非常に多くのスレッドを並列的に実行可能なものであれば、どのようなデバイス３０を用いても良い。
【００６６】
なお、上述した画像処理装置および画像処理方法は、上述したような動作を実現するためのプログラムを、コンピューター２０にインストールすることにより、実現することができる。
【００６７】
また、上述の実施の形態において、中間バッファーとして、グラフィックスメモリー３２を一例として述べている。しかしながら、それ以外の、コンスタントキャッシュ３１２、テクスチャーキャッシュ３１３、シェアードメモリ３１４のうちの少なくとも１つを、中間バッファーとしても良い。また、デバイス３０の外部に存在するメモリーを、中間バッファーとして用いるようにしても良い。
【００６８】
また、上述の実施の形態においては、処理対象とするデータとして、画像データを用いる場合について説明しているが、処理対象とするデータとしては、画像データを印刷用のデータに変換する場合だけでなく、計算物理学、映像および画像の処理、データベース管理、生命工学等でも利用できる。
【００６９】
また、上述の実施の形態においては、インクジェット方式のプリンター４０を例示して説明している。しかしながら、液体噴射装置は、インクジェット方式のプリンター４０には限られない。例えば、ジェルジェット方式のプリンターに対して、本発明を適用することが可能であり、例えば機能材料の粒子が分散されている液状体、ジェルのような粒状体等を噴射する液体噴射装置に本発明を適用することが可能である。また、上述の実施の形態におけるプリンター４０は、プリンター機能以外の機能（スキャナー機能、コピー機能等）を備える構成のような、複合的な機器の一部であっても良い。
【００７０】
さらに、プリンターとしては、インクジェット方式以外の方式（レーザ方式、ドットインパクト方式等）に対しても、本発明を適用することは勿論可能である。
【符号の説明】
【００７１】
１０…印刷装置、２０…コンピューター、２１…ＣＰＵ、２１ａ…メモリー制御部、２２…メインメモリー、２２ａ…供給データバッファー、２２ｂ…中間データバッファー、２３…ＨＤＤ、２３ｃ…プリンタードライバープログラム、３０…デバイス、３１…ＧＰＵ、３２…グラフィックスメモリー（中間バッファーの一例に対応）、４０…プリンター、７０…ラインヘッド、８０…プリンター制御部、３１０…テクスチャープロセッサークラスター、３１１…ストリーミングマルチプロセッサー、３１６…ストリーミングプロセッサー、Ｂ…境界部分、Ｄ…分割画像データ、Ｈ…ホスト、Ｐ…印刷媒体
【図１】
0005487882.tif 000002
【図２】
0005487882.tif 000003
【図３】
0005487882.tif 000004
【図４】
0005487882.tif 000005
【図５】
0005487882.tif 000006
【図６】
0005487882.tif 000007