(57)【要約】【課題】  複数のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いた画像処理を高速に実行することを可能とする。【解決手段】  Ｎ個（Ｎは２以上の整数）のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサが、画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する。そして、プロセッサが、Ｎ個のスレッド実行アーキテクチャにおいて並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、複数のスレッドをＮ個のスレッド実行アーキテクチャに割り当てて実行する。【選択図】        図５
2005259042.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する方法であって、
（ａ）前記プロセッサが、前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する工程と、
（ｂ）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャにおいて並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャに割り当てて実行する工程と、を備える、画像処理方法。
【請求項２】
請求項１記載の画像処理方法であって、
前記工程（ｂ）は、
（i）前記プロセッサが、前記画像処理の最初に、前記Ｎ個のグループのそれぞれからスレッドを１つずつ選択し、選択した計Ｎ個のスレッドをＮ個の前記スレッド実行アーキテクチャにおいて並列に実行する工程と、
（ii）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャの中のＭ番目（ＭはＮ以下の自然数）のスレッド実行アーキテクチャにおいてスレッドの実行が完了したときに、Ｎ個の前記スレッド実行アーキテクチャの内、前記Ｍ番目のスレッド実行アーキテクチャ以外の他のスレッド実行アーキテクチャにおいて実行されているスレッドの属するグループを判別する工程と、
（iii）前記プロセッサが、前記複数のスレッドの中の未実行のスレッドであって、前記他のスレッド実行アーキテクチャにおいて実行されているスレッドの属するグループとは異なるグループに属するスレッドを、前記Ｍ番目のスレッド実行アーキテクチャに割り当てて実行する工程と、を含む、画像処理方法。
【請求項３】
請求項１記載の画像処理方法であって、
前記工程（ｂ）は、
（i）前記プロセッサが、前記画像処理の最初に、前記Ｎ個のグループのそれぞれからスレッドを１つずつ選択し、選択した計Ｎ個のスレッドをＮ個の前記スレッド実行アーキテクチャにおいて並列に実行する工程と、
（ii）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャの中のＭ番目（ＭはＮ以下の自然数）のスレッド実行アーキテクチャにおいてスレッドの実行が完了したときに、前記複数のスレッドの中の未実行のスレッドであって、前記Ｍ番目のスレッド実行アーキテクチャにおいて直前に実行されていたスレッドと同じグループに属するスレッドを、前記Ｍ番目のスレッド実行アーキテクチャに割り当てて実行する工程と、を含む、画像処理方法。
【請求項４】
請求項１ないし請求項３のいずれかに記載の画像処理方法であって、
前記プロセッサは、１つの実行リソースに対して、レジスタ群を有するアーキテクチャステートをＮ個備えており、
１つの前記スレッド実行アーキテクチャは、１つの前記アーキテクチャステートと、Ｎ個の前記スレッド実行アーキテクチャで共有する１つの前記実行リソースとから構成される、画像処理方法。
【請求項５】
請求項４記載の画像処理方法であって、
前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには、ある画像の画像処理を行うために前記実行リソースにおいて演算を行う回数がより多い処理方法を用いるスレッドを分類し、他方のグループには、前記画像の画像処理を行うために前記実行リソースにおいて演算を行う回数がより少ない処理方法を用いるスレッドを分類することにより行う、画像処理方法。
【請求項６】
請求項４記載の画像処理方法であって、
前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには、ある画像の画像処理を行うときのメモリアクセスの回数がより多い処理方法を用いるスレッドを分類し、他方のグループには、前記画像の画像処理を行うときのメモリアクセスの回数がより少ない処理方法を用いるスレッドを分類することにより行う、画像処理方法。
【請求項７】
請求項４記載の画像処理方法であって、
前記画像処理は、ハーフトーン処理であり、
前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには誤差拡散法を用いるスレッドを分類し、他方のグループにはディザ法を用いるスレッドを分類することにより行う、画像処理方法。
【請求項８】
Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する画像処理装置であって、
前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類し、Ｎ個の前記スレッド実行アーキテクチャにおいて並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャに割り当てて実行する、画像処理装置。
【請求項９】
Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行するための画像処理プログラムであって、
前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する機能と、
Ｎ個の前記スレッド実行アーキテクチャにおいて並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャに割り当てて実行する機能と、をコンピュータに実現させることを特徴とする、画像処理プログラム。
【請求項１０】
Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する方法であって、
（ａ）前記プロセッサが、前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する工程と、
（ｂ）前記プロセッサが、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャへと割り当てるための順番を、同じグループに属するスレッド同士が連続する箇所数が最も少なくなるように設定する工程と、
（ｃ）前記プロセッサが、前記工程（ｂ）において設定した順番に従って、前記複数のスレッドを前記スレッド実行アーキテクチャに割り当てて実行する工程と、を備える、画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する技術に関する。
【背景技術】
【０００２】
プリンタを用いて画像を印刷するとき、プリンタドライバ内では、画像データに対する色変換処理やハーフトーン処理等の画像処理が行われる。このような画像処理には様々な処理方法が用いられており、例えばハーフトーン処理には、誤差拡散法やディザ法等の処理方法が、あるいはそれらを組み合わせた処理方法が用いられている。
【０００３】
近年、印刷の対象となる画像の解像度の増大や、印刷に用いるインクドットの種類の増加といった、プリンタドライバにおける画像処理に要する時間が増大する要因が増加している。そのため、画像処理を高速に行うための種々の技術が提案されている（例えば特許文献１）。
【０００４】
【特許文献１】特開２０００−２９３６７４号公報
【０００５】
他方、近年のコンピュータ技術の進展に伴い、高速なプロセッサや大容量のメモリ等の様々なハードウェア資源が開発されている。その中の１つに、１つのプロセッサが論理的に複数のプロセッサとして働くことができるようなプロセッサがある。このプロセッサは、複数のスレッドのそれぞれに含まれる命令を並列に実行すること（スレッドレベルの並列処理）が可能である。このようなプロセッサによりプリンタドライバにおける画像処理を行うことによって、画像処理の高速化が期待されている。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、プリンタドライバにおける画像処理に用いられる従来の処理方法は、スレッドレベルの並列処理を前提としていなかった。そのため、そのような処理方法は、上記のようなスレッドレベルの並列処理を実行可能なプロセッサを用いた画像処理に用いるのに適しているとは限らず、そのような処理方法では画像処理の高速化を図ることが困難であるという問題があった。
【０００７】
なお、このような問題は、プリンタドライバ内における画像処理に限らず、プロセッサを用いた画像処理を行う場合に共通する問題であった。
【０００８】
本発明は、上述した従来の課題を解決するためになされたものであり、複数のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いた画像処理を高速に実行することを可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題の少なくとも一部を解決するために、本発明の第１の画像処理方法は、Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する方法であって、
（ａ）前記プロセッサが、前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する工程と、
（ｂ）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャにおいて並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャに割り当てて実行する工程と、を備える。
【００１０】
この画像処理方法では、並列に実行されているＮ個のスレッド相互で、命令の実行に使用されるハードウェア資源の種類や、命令の実行のためにハードウェア資源が使用される頻度に差異が生じやすい。そのため、スレッドの実行においてハードウェア資源が有効に使用される。従って、複数のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いた画像処理を高速に実行することができる。
【００１１】
上記画像処理方法において、前記工程（ｂ）は、
（i）前記プロセッサが、前記画像処理の最初に、前記Ｎ個のグループのそれぞれからスレッドを１つずつ選択し、選択した計Ｎ個のスレッドをＮ個の前記スレッド実行アーキテクチャにおいて並列に実行する工程と、
（ii）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャの中のＭ番目（ＭはＮ以下の自然数）のスレッド実行アーキテクチャにおいてスレッドの実行が完了したときに、Ｎ個の前記スレッド実行アーキテクチャの内、前記Ｍ番目のスレッド実行アーキテクチャ以外の他のスレッド実行アーキテクチャにおいて実行されているスレッドの属するグループを判別する工程と、
（iii）前記プロセッサが、前記複数のスレッドの中の未実行のスレッドであって、前記他のスレッド実行アーキテクチャにおいて実行されているスレッドの属するグループとは異なるグループに属するスレッドを、前記Ｍ番目のスレッド実行アーキテクチャに割り当てて実行する工程と、を含むとしてもよい。
【００１２】
このようにすれば、並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、画像処理を行うことができる。
【００１３】
また、上記画像処理方法において、前記工程（ｂ）は、
（i）前記プロセッサが、前記画像処理の最初に、前記Ｎ個のグループのそれぞれからスレッドを１つずつ選択し、選択した計Ｎ個のスレッドをＮ個の前記スレッド実行アーキテクチャにおいて並列に実行する工程と、
（ii）前記プロセッサが、Ｎ個の前記スレッド実行アーキテクチャの中のＭ番目（ＭはＮ以下の自然数）のスレッド実行アーキテクチャにおいてスレッドの実行が完了したときに、前記複数のスレッドの中の未実行のスレッドであって、前記Ｍ番目のスレッド実行アーキテクチャにおいて直前に実行されていたスレッドと同じグループに属するスレッドを、前記Ｍ番目のスレッド実行アーキテクチャに割り当てて実行する工程と、を含むとしてもよい。
【００１４】
このようにしても、並列に実行されているＮ個のスレッドのそれぞれが属するグループが互いに重複していない状態となっている時間が長くなるように、画像処理を行うことができる。
【００１５】
また、上記画像処理方法において、前記プロセッサは、１つの実行リソースに対して、レジスタ群を有するアーキテクチャステートをＮ個備えており、
１つの前記スレッド実行アーキテクチャは、１つの前記アーキテクチャステートと、Ｎ個の前記スレッド実行アーキテクチャで共有する１つの前記実行リソースとから構成されるとしてもよい。
【００１６】
この構成によれば、プロセッサが、Ｎ個のスレッドに含まれる命令を並列に実行可能とすることができる。
【００１７】
また、上記画像処理方法において、前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには、ある画像の画像処理を行うために前記実行リソースにおいて演算を行う回数がより多い処理方法を用いるスレッドを分類し、他方のグループには、前記画像の画像処理を行うために前記実行リソースにおいて演算を行う回数がより少ない処理方法を用いるスレッドを分類することにより行うとしてもよい。
【００１８】
このようにすれば、プロセッサの実行リソースを有効に使用して画像処理を行うことができ、画像処理を高速に実行することができる。
【００１９】
また、上記画像処理方法において、前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには、ある画像の画像処理を行うときのメモリアクセスの回数がより多い処理方法を用いるスレッドを分類し、他方のグループには、前記画像の画像処理を行うときのメモリアクセスの回数がより少ない処理方法を用いるスレッドを分類することにより行うとしてもよい。
【００２０】
このようにすれば、メモリを有効に使用して画像処理を行うことができ、画像処理を高速に実行することができる。
【００２１】
また、上記画像処理方法において、前記画像処理は、ハーフトーン処理であり、
前記Ｎの値は２であり、
前記工程（ａ）におけるＮ個のグループへの分類は、一方のグループには誤差拡散法を用いるスレッドを分類し、他方のグループにはディザ法を用いるスレッドを分類することにより行うとしてもよい。
【００２２】
このようにすれば、プロセッサの実行リソースにおける演算回数の多い誤差拡散法を用いるスレッドと、メモリアクセス回数の多いディザ法を用いるスレッドとを並列に実行することができ、ハーフトーン処理を高速に実行することができる。
【００２３】
また、本発明の第２の画像処理方法は、Ｎ個（Ｎは２以上の整数）のスレッド実行アーキテクチャを備え、Ｎ個のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いて画像処理を実行する方法であって、
（ａ）前記プロセッサが、前記画像処理を実行するための複数のスレッドを、そのスレッドの実行に用いる処理方法の違いによってＮ個のグループに分類する工程と、
（ｂ）前記プロセッサが、前記複数のスレッドをＮ個の前記スレッド実行アーキテクチャへと割り当てるための順番を、同じグループに属するスレッド同士が連続する箇所数が最も少なくなるように設定する工程と、
（ｃ）前記プロセッサが、前記工程（ｂ）において設定した順番に従って、前記複数のスレッドを前記スレッド実行アーキテクチャに割り当てて実行する工程と、を備える。
【００２４】
この画像処理方法でも、並列に実行されているＮ個のスレッド相互で、命令の実行に使用されるハードウェア資源の種類や、命令の実行のためにハードウェア資源が使用される頻度に差異が生じやすい。そのため、スレッドの実行においてハードウェア資源が有効に使用される。従って、複数のスレッドのそれぞれに含まれる命令を並列に実行可能なプロセッサを用いた画像処理を高速に実行することができる。
【００２５】
なお、本発明は、種々の態様で実現することが可能であり、例えば、画像処理方法および装置、画像変換方法および装置、画像出力方法および装置、印刷方法および装置、これらの方法または装置の機能を実現するためのコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の形態で実現することができる。
【発明を実施するための最良の形態】
【００２６】
次に、本発明の実施の形態を実施例に基づいて以下の順序で説明する。
Ａ．第１実施例：
Ａ−１．画像処理装置の構成：
Ａ−２．ハーフトーン処理の高速化の基本的考え方：
Ａ−３．ハーフトーン処理：
Ｂ．第２実施例：
Ｃ．変形例：
【００２７】
Ａ．第１実施例：
Ａ−１．画像処理装置の構成：
図１は、本発明の第１実施例としての画像処理装置の構成を概略的に示した説明図である。第１実施例の画像処理装置としてのコンピュータ２００は、ＣＰＵ２１０と、ＲＯＭやＲＡＭ等の内部記憶装置２２０と、外部記憶装置２５０と、ディスプレイ等の表示部２６０と、キーボードやマウス等の操作部２７０と、インターフェイス部（Ｉ／Ｆ部）２８０とを備えている。
【００２８】
ＣＰＵ２１０は、１つの実行リソース２１２と、実行リソース２１２を共有する２つのアーキテクチャステート（Ａｒｃｈ  Ｓｔａｔｅ）２１４とを備えている。実行リソース２１２は、実際に演算を行う図示しない演算ユニットを有している。また、アーキテクチャステート２１４は、汎用レジスタと、コントロールレジスタと、ＡＰＩＣレジスタと、その他のマシンステートレジスタとで構成される図示しないレジスタ群を有している。
【００２９】
このＣＰＵ２１０は、２つのアーキテクチャステート２１４を備えているため、２つのスレッド実行アーキテクチャとして機能することができる。従って、ＣＰＵ２１０は、２つのスレッドのそれぞれに含まれる命令を並列に実行すること（スレッドレベルの並列処理）が可能である。ここで、「スレッド実行アーキテクチャ」とは、スレッドを実行するための論理的なハードウェアを意味している。また、「スレッド」とは、プログラムの実行単位を意味しており、各スレッドには１つ以上の命令が含まれている。本実施例では、１つのスレッド実行アーキテクチャは、１つの実行リソース２１２と、１つのアーキテクチャステート２１４とから構成され、実行リソース２１２は、２つのスレッド実行アーキテクチャによって共有される。
【００３０】
ここで、いわゆるマルチスレッドと、本実施例のＣＰＵ２１０によるスレッドレベルの並列処理との違いを説明する。図２は、いわゆるマルチスレッドとスレッドレベルの並列処理との違いを概念的に示した説明図である。
【００３１】
図２（ａ）には、あるスレッドに含まれる３つの命令（命令１から命令３）の処理の一般的な流れの一例を示している。図２（ａ）では、左から右へと時間軸を設定している。なお、これは図２（ｂ）および図２（ｃ）においても同様である。スレッドに含まれる命令は、大きく分けて６つの工程に従って処理が行われる。６つの工程とは、命令フェッチ（命令ＦＥＴ）と、デコード（ＤＥＣ）と、アドレス（ＡＤＲ）と、オペランドフェッチ（オペランドＦＥＴ）と、エクゼキュート（ＥＸＥ）と、ライトバック（ＷＲＢ）との６つである。
【００３２】
命令フェッチは、命令キャッシュから命令を取り出す工程である。デコードは、命令をデコードする工程である。アドレスは、オペランドのアドレスを指定する工程である。オペランドフェッチは、オペランドのデータを取り出す工程である。エクゼキュートは、オペランドのデータに対して演算を実行する工程である。ライトバックは、演算結果をデータキャッシュ等に書き込む工程である。
【００３３】
図２（ａ）に示すように、スレッドに含まれる各命令は、上記各工程の実行時期を各命令間でずらすことによって並列に処理することが可能である。このようなスレッドに含まれる命令の並列処理により、スレッドを高速に実行することが可能となる。
【００３４】
図２（ｂ）には、いわゆるマルチスレッドにおける、２つのスレッド（スレッドＡおよびスレッドＢ）に含まれる命令の処理の流れの一例を示している。図２（ｂ）の例では、各スレッドにそれぞれ３つの命令が含まれており、スレッドＡに含まれる命令のみハッチングを付して示している。また、各命令は、図２（ａ）に示した工程に従って処理される。なお、これらの点は図２（ｃ）においても同様である。
【００３５】
いわゆるマルチスレッドでは、例えば２つのスレッドをそれぞれ複数のブロックに分割し、２つのスレッドを交互に切り替えて実行する。図２（ｂ）の例では、まずスレッドＡのブロック１に含まれる命令１から命令３までが並列に処理される。次に、処理対象のスレッドが切り替えられ、スレッドＢのブロック１に含まれる命令１から命令３までが並列に処理される。次に、再度、処理対象のスレッドが切り替えられ、スレッドＡのブロック２に含まれる命令が処理される。このように、いわゆるマルチスレッドにおいては、２つのスレッドを並列に処理することは可能であるが、それは２つのスレッドを複数のブロックに分割して交互に実行しているだけで、スレッドに含まれる命令を並列に実行することはできない。
【００３６】
一方、図２（ｃ）には、本実施例のＣＰＵ２１０によるスレッドレベルの並列処理を用いた、２つのスレッド（スレッドＡおよびスレッドＢ）に含まれる命令の処理の流れの一例を示している。本実施例のＣＰＵ２１０は、２つのスレッド実行アーキテクチャを備えているため、２つのスレッドのそれぞれに含まれる命令を並列に実行することが可能である。従って、図２（ｃ）に示すように、スレッドＡおよびスレッドＢのそれぞれに含まれる命令を交互に並列に処理することが可能である。このため、本実施例のＣＰＵ２１０によるスレッドレベルの並列処理では、処理の並列性をより高めることができ、スレッドをより高速に実行することが可能である。
【００３７】
内部記憶装置２２０（図１）には、画像処理部２４０として機能するコンピュータプログラムが格納されている。画像処理部２４０は、印刷データを生成するためのプリンタドライバである。すなわち、画像処理部２４０は、印刷の対象となる画像データに対する画像処理を行って、印刷ドットの形成状態を示すドットデータを生成する。画像処理部２４０が行う画像処理には、色変換処理と、ハーフトーン処理とが含まれる。
【００３８】
また、画像処理部２４０は、ハーフトーンモジュール（ＨＴＭ）２４２を有している。ここで、ハーフトーンモジュールとは、ハーフトーン処理の処理方法を定めたものである。すなわち、画像処理部２４０は、ハーフトーンモジュール２４２に定められた処理方法に従って、ハーフトーン処理を行う。本実施例では、ハーフトーンモジュール２４２によって、インク色毎に、誤差拡散法およびディザ法のどちらのハーフトーン処理方法を用いるかが定められている。
【００３９】
インターフェイス部２８０は、複数の入出力端子を備えており、外部に設けられた種々の機器との間でデータ通信を行う。例えば、インターフェイス部２８０は、ケーブルを介して図示しないＣＤ−Ｒ／ＲＷドライブと接続され、ＣＤ−Ｒ／ＲＷドライブに記録されたデータの読み込みや、ＣＤ−Ｒ／ＲＷドライブへのデータの書き込みを行う。また、インターフェイス部２８０は、ケーブルを介してプリンタ３００と接続され、プリンタ３００に印刷データを供給する。
【００４０】
Ａ−２．ハーフトーン処理の高速化の基本的考え方：
図３は、画像処理部によるハーフトーン処理の高速化を図るための基本的考え方を概念的に示す説明図である。上述したように、本実施例のＣＰＵ２１０は、２つのスレッド実行アーキテクチャを備え、２つのスレッドのそれぞれに含まれる命令を並列に実行することができる。また、本実施例では、画像処理部２４０によるハーフトーン処理において、インク色毎のハーフトーン処理を１つのスレッドの単位として設定している。また、本実施例では、ハーフトーン処理に用いる処理方法として、誤差拡散法およびディザ法の２種類の処理方法が用いられる。
【００４１】
図３には、２つのスレッド実行アーキテクチャ（ｔｈ１およびｔｈ２）において実行されるスレッドの内容と、スレッドの実行時間とを表している。スレッドの内容として、「ｄ」は、あるインク色についてのディザ法によるハーフトーン処理を、「ＥＤ」は、あるインク色についての誤差拡散法によるハーフトーン処理をそれぞれ表している。なお、「Ｃ」および「Ｍ」はインク色（シアンおよびマゼンタ）を表している。
【００４２】
また、各スレッドの実行時間は、上から下へと時間軸を設定して、各スレッドを表す四角形の上下方向の長さで表している。なお、一般的に、誤差拡散法によるハーフトーン処理は、ディザ法によるハーフトーン処理と比べて実行時間が長い。そのため、図３では、誤差拡散法によるハーフトーン処理の実行時間を、ディザ法によるハーフトーン処理の実行時間よりも長く表現している。
【００４３】
一般的に、誤差拡散法によるハーフトーン処理では、ディザ法によるハーフトーン処理と比較して、ＣＰＵ２１０の実行リソース２１２において演算を行う回数が多い傾向にある。一方、ディザ法によるハーフトーン処理では、誤差拡散法によるハーフトーン処理と比較して、メモリとしての内部記憶装置２２０へのアクセスの回数が多い傾向にある。このように、ハーフトーン処理における誤差拡散法とディザ法とは、処理に用いるハードウェア資源の使用形態に差異があるという特徴がある。このような特徴を利用すれば、２つのスレッドのそれぞれに含まれる命令を並列に実行することができるＣＰＵ２１０を備えるコンピュータ２００において、ハーフトーン処理を高速に実行することができる。
【００４４】
例えば、図３（ａ）のように、２つのスレッド実行アーキテクチャ（ｔｈ１およびｔｈ２）において、ディザ法によるハーフトーン処理のスレッド同士を並列に実行すると、並列に実行されるスレッドに含まれる命令によってメモリアクセスが頻繁に発生する。そのため、メモリアクセスのための待ち時間が発生し、処理が遅延する可能性が高くなる。また、図３（ｂ）のように、２つのスレッド実行アーキテクチャにおいて、誤差拡散法によるハーフトーン処理のスレッド同士を並列に実行すると、並列に実行されるスレッドに含まれる命令によって、実行リソース２１２における演算が頻繁に実行される。そのため、演算実行のための待ち時間が発生し、図３（ａ）のときと同様に、処理が遅延する可能性が高くなる。このように、同じ処理方法を用いるスレッド同士を並列に実行すると、ハーフトーン処理の高速化を図ることが困難となる。
【００４５】
一方、図３（ｃ）のように、ディザ法によるハーフトーン処理のスレッドと、誤差拡散法によるハーフトーン処理のスレッドとを並列に実行すると、メモリアクセスや演算実行のための待ち時間が発生することが少なくなり、処理が遅延する可能性は低くなる。これは、２つのスレッド実行アーキテクチャにおいて、メモリアクセスや実行リソース２１２における演算が分散して実行されるからである。すなわち、並列に処理される２つのスレッドの内、ディザ法を用いるスレッドに含まれる命令によってはメモリアクセスが頻繁に発生するが、誤差拡散法を用いるスレッドに含まれる命令によっては実行リソース２１２における演算が頻繁に実行されるからである。このように異なる処理方法を用いるスレッドを並列に実行すると、ハードウェア資源を有効に使用してハーフトーン処理を実行することができる。
【００４６】
さらに、例えば、スレッド実行アーキテクチャｔｈ１において、メモリアクセスのための待ち時間が発生したときでも、スレッド実行アーキテクチャｔｈ２におけるスレッドをオーバーラップして実行することができるため、処理の遅延を抑制することができる。
【００４７】
このように、異なる処理方法を用いるスレッドを並列に実行すると、ハーフトーン処理を高速に実行することができる。このようなハーフトーン処理の高速化は、本実施例の画像処理装置としてのコンピュータ２００のように、少ないハードウェア資源を有効に使用することによって高速な処理を実現できるようなＣＰＵによりハーフトーン処理を行う場合に、特に有効である。
【００４８】
従って、図３の例では、図３（ｃ）に示すディザ法（ｄ）によるシアン（Ｃ）のハーフトーン処理のスレッドの実行時間は、図３（ａ）に示すディザ法によるシアンのハーフトーン処理のスレッドの実行時間よりも短くなっている。また、同様に、図３（ｃ）に示す誤差拡散法（ＥＤ）によるマゼンタ（Ｍ）のハーフトーン処理のスレッドの実行時間は、図３（ｂ）に示すディザ法によるマゼンタのハーフトーン処理のスレッドの実行時間よりも短くなっている。
【００４９】
以上のように、２つのスレッドのそれぞれに含まれる命令を並列に処理することができるＣＰＵ２１０を備えるコンピュータ２００においては、異なる処理方法を用いるスレッドを並列に実行することによって、ハーフトーン処理を高速に実行することができる。
【００５０】
Ａ−３．ハーフトーン処理：
図４は、第１実施例としての画像処理部によるハーフトーン処理の流れを示すフローチャートである。また、図５は、第１実施例としての画像処理部によるハーフトーン処理の概要を示す説明図である。
【００５１】
図５（ａ）には、画像処理部２４０がハーフトーン処理に用いるハーフトーンモジュール２４２の例を示している。本実施例のハーフトーンモジュール２４２は、インク色毎に定められたハーフトーン処理方法（誤差拡散法およびディザ法）の情報を含んでいる。例えば、図５（ａ）に示したハーフトーンモジュール２４２は、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）、ＤＹ（ダークイエロー）の４色についてはディザ法（ｄｉｔｈｅｒ）を用い、Ｃ（シアン）、ＬＣ（ライトシアン）、ＬＭ（ライトマゼンタ）の３色については誤差拡散法（ＥＤ）を用いるように定められている。
【００５２】
図５（ｂ）には、図５（ａ）に示したハーフトーンモジュール２４２に従って、インク色毎にハーフトーン処理を行っていくときの処理の様子を示している。図５（ｂ）では、図３と同様に、２つのスレッド実行アーキテクチャ（ｔｈ１およびｔｈ２）において実行されるスレッドの内容と、スレッドの実行時間とを表している。なお、図５（ｂ）では、時間の経過に伴って変化する、２つのスレッド実行アーキテクチャにおいて実行されるスレッドの内容をiからviへと表しており、太い実線で囲ったスレッドは実行開始されるスレッドを、細い実線で囲ったスレッドは実行中のスレッドを、破線で囲ったスレッドは完了したスレッドを、それぞれ表している。
【００５３】
ステップＳ１１０（図４）では、画像処理部２４０（図１）が、ハーフトーンモジュール２４２の確認を行う。これにより、画像処理部２４０は、各スレッド（インク色毎のハーフトーン処理）の実行に用いる処理方法の違いを確認する。本実施例では、画像処理部２４０は、各スレッドを、誤差拡散法を用いるスレッドと、ディザ法を用いるスレッドとに分類する。
【００５４】
ステップＳ１２０では、画像処理部２４０が、各スレッドの実行に用いる処理方法がすべて同じか否かを判定する。画像処理部２４０が、各スレッドの実行に用いる処理方法がすべて同じと判定したときは（ステップＳ１２０：Ｙｅｓ）、ステップＳ２００に進み、画像処理部２４０が任意の順序でスレッドを実行する。このときは、異なる処理方法を用いるスレッドを並列に実行することによるハーフトーン処理の高速化を図ることはできない。一方、画像処理部２４０が、各スレッドの実行に用いる処理方法がすべて同じではないと判定したときは（ステップＳ１２０：Ｎｏ）、ステップＳ１３０に進む。図５の例では、各スレッドの実行に用いる処理方法がすべて同じではないため、ステップＳ１３０に進むこととなる。
【００５５】
ステップＳ１３０（図４）では、画像処理部２４０が、異なる処理方法を用いるスレッドを、それぞれ１つ並列に実行する。図５（ｂ）のiには、スレッド実行アーキテクチャｔｈ１においてディザ法（ｄ）を用いたマゼンタ（Ｍ）のハーフトーン処理のスレッドが、スレッド実行アーキテクチャｔｈ２において誤差拡散法（ＥＤ）を用いたシアン（Ｃ）のハーフトーン処理のスレッドが、それぞれ実行されている様子を表している。
【００５６】
ステップＳ１４０（図４）では、画像処理部２４０が、実行中の２つのスレッドのどちらかが完了したか否かを判定する。画像処理部２４０が、どちらも完了していないと判定したときは（ステップＳ１４０：Ｎｏ）、ステップＳ１４０に戻る。一方、画像処理部２４０が、２つのスレッドのどちらかが完了したと判定したときは（ステップＳ１４０：Ｙｅｓ）、ステップＳ１５０に進む。
【００５７】
ステップＳ１５０では、画像処理部２４０が、未実行のスレッドが有るか否かを判定する。画像処理部２４０が、未実行のスレッドがあると判定したときは（ステップＳ１５０：Ｙｅｓ）、ステップＳ１６０に進む。例えば図５（ｂ）のiにおいて、ディザ法（ｄ）によるマゼンタ（Ｍ）のハーフトーン処理のスレッドが完了したときは、未実行のスレッドがまだあるので、ステップＳ１６０に進むこととなる。
【００５８】
一方、画像処理部２４０が、未実行のスレッドがないと判定したときは（ステップＳ１５０：Ｎｏ）、ステップＳ１９０に進み、画像処理部２４０は実行中のスレッドの完了を待って処理を終了する。例えば図５（ｂ）のviにおいて、誤差拡散法（ＥＤ）によるライトシアン（ＬＣ）のハーフトーン処理のスレッドが完了したときは、もう未実行のスレッドがないので、実行中の誤差拡散法（ＥＤ）によるライトマゼンタ（ＬＭ）のハーフトーン処理のスレッドの完了を待って処理を終了する。
【００５９】
ステップＳ１６０（図４）では、画像処理部２４０が、他のスレッド実行アーキテクチャにおいて実行中のスレッドに用いられている処理方法を確認する。ここで、他のスレッド実行アーキテクチャとは、ステップＳ１４０で処理が完了したスレッドが行われていたスレッド実行アーキテクチャとは別のスレッド実行アーキテクチャを意味している。例えば図５（ｂ）のiにおいて、ディザ法（ｄ）によるマゼンタ（Ｍ）のハーフトーン処理のスレッドが完了したときは、他のスレッド実行アーキテクチャであるスレッド実行アーキテクチャｔｈ２で実行中のスレッドに用いられている処理方法（この場合は誤差拡散法）を確認する。
【００６０】
なお、本実施例では、スレッド実行アーキテクチャにおけるスレッド実行の開始時に、そのスレッドに用いられる処理方法を示すフラグが、内部記憶装置２２０内の所定の領域に記録される。画像処理部２４０は、内部記憶装置２２０内の所定の領域に記録されたフラグを用いて、他のスレッド実行アーキテクチャにおいて実行中のスレッドに用いられている処理方法を確認することができる。
【００６１】
ステップＳ１７０（図４）では、画像処理部２４０が、他のスレッド実行アーキテクチャにおいて実行中のスレッドに用いられている処理方法とは異なる処理方法を用いる未実行のスレッドがあるか否かを判定する。画像処理部２４０が、他のスレッド実行アーキテクチャにおいて実行中のスレッドに用いられている処理方法とは異なる処理方法を用いる未実行のスレッドがあると判定したときは（ステップＳ１７０：Ｙｅｓ）、ステップＳ１８０に進む。例えば図５（ｂ）のiにおいて、ディザ法（ｄ）によるマゼンタ（Ｍ）のハーフトーン処理のスレッドが完了したときは、スレッド実行アーキテクチャｔｈ２で実行中のスレッドに用いられている処理方法（誤差拡散法）と異なる処理方法を用いる未実行のスレッドとして、ディザ法によるイエロー（Ｙ）、ブラック（Ｋ）、ダークイエロー（ＤＹ）のハーフトーン処理のスレッドがある。従って、このときは、ステップＳ１８０に進むこととなる。
【００６２】
一方、画像処理部２４０が、他のスレッド実行アーキテクチャにおいて実行中のスレッドに用いられている処理方法とは異なる処理方法を用いる未実行のスレッドがないと判定したときは（ステップＳ１７０：Ｎｏ）、ステップＳ２００に進み、未実行のスレッドを任意の順序で実行する。例えば図５（ｂ）のvにおいて、ディザ法（ｄ）によるダークイエロー（ＤＹ）のハーフトーン処理のスレッドが完了したときは、スレッド実行アーキテクチャｔｈ２で実行中のスレッドに用いられている処理方法（誤差拡散法）と異なる処理方法を用いる未実行のスレッドがない。従って、このときは、未実行のスレッドである誤差拡散法（ＥＤ）によるライトマゼンタ（ＬＭ）のハーフトーン処理のスレッドをスレッド実行アーキテクチャｔｈ１において実行する。
【００６３】
ステップＳ１８０（図４）では、画像処理部２４０が、他のスレッドにおいて実行中のスレッドに用いられている処理方法とは異なる処理方法を用いる未実行のスレッドを実行する。その後ステップＳ１４０に戻って、上記の処理を繰り返す。例えば図５（ｂ）のiにおいて、ディザ法（ｄ）によるマゼンタ（Ｍ）のハーフトーン処理のスレッドが完了したときは、スレッド実行アーキテクチャｔｈ２において実行中のスレッドに用いられている処理方法（誤差拡散法）と異なる処理方法を用いる未実行のスレッドである、ディザ法によるイエロー（Ｙ）のハーフトーン処理のスレッドを次に行っている（図５（ｂ）のii）。
【００６４】
以上説明したように、図４のフローに従ってハーフトーン処理を実行すると、異なる処理方法を用いたスレッドを並列に実行する時間を長くすることができる。例えば、図５の例では、図５（ｂ）のviに示すように、一方のスレッド実行アーキテクチャでディザ法（ｄ）を用いたハーフトーン処理のスレッドを実行しているときは、必ず他方のスレッド実行アーキテクチャで誤差拡散法（ＥＤ）を用いたハーフトーン処理のスレッドを実行している。
【００６５】
このように、異なる処理方法を用いたスレッドを並列に実行する時間を長くすると、上述の通り、メモリや実行リソース２１２といったコンピュータ２００のハードウェア資源を有効に使用することができ、スレッドの実行時間を短くすることができる。従って、本実施例のコンピュータ２００は、ハーフトーン処理を高速に実行することができる。
【００６６】
Ｂ．第２実施例：
図６は、第２実施例としての画像処理部によるハーフトーン処理の流れを示すフローチャートである。また、図７は、第２実施例としての画像処理部によるハーフトーン処理の概要を示す説明図である。図４および図５に示した第１実施例との違いは、第２実施例では、ハーフトーン処理を実行する前に、各スレッドをスレッド実行アーキテクチャへと割り当てるための順番を設定し、その順番に従って各スレッドをスレッド実行アーキテクチャに割り当てて実行している点であり、その他の点は第１実施例と同じである。なお、各スレッドをスレッド実行アーキテクチャへと割り当てるための順番とは、処理の開始時、あるいは１つのスレッドの完了時のように、あるスレッド実行アーキテクチャがスレッドの実行が可能となったときに、そのスレッド実行アーキテクチャにおいて次に実行するスレッドを選択するための順番である。
【００６７】
図６において、ステップＳ１１０、ステップＳ１２０、およびステップＳ２００における処理内容は、図４に示した第１実施例と同じである。
【００６８】
ステップＳ２１０（図６）では、画像処理部２４０が、スレッドの割り当ての順番を設定する。画像処理部２４０によるスレッドの割り当ての順番の設定は、異なる処理方法を用いるスレッドが、なるべく交互に並ぶような順番になるように行われる。すなわち、同じ処理方法を用いるスレッド同士が連続する箇所数が最も少なくなるように、順番が設定される。
【００６９】
図７（ａ）には、ハーフトーンモジュール２４２と、丸数字で表現された各スレッドの割り当ての順番とが、表されている。図７の例では、ディザ法を用いたハーフトーン処理のスレッドが４色分（Ｍ、Ｙ、Ｋ、ＤＹ）あり、誤差拡散法を用いたハーフトーン処理のスレッドが３色分（Ｃ、ＬＣ、ＬＭ）あるため、ディザ法を用いたハーフトーン処理のスレッドの方が多い。このときは、割り当ての順番は、多い方のディザ法を用いたハーフトーン処理のスレッドを１番目とし、以後、誤差拡散法とディザ法とを交互の順番に割り当てることにより設定される。このように、順番を設定すれば、同じ処理方法を用いるスレッド同士が連続する箇所数が最も少なくなる。図７の例では、１番目がディザ法を用いたマゼンタ（Ｍ）のハーフトーン処理のスレッドであり、２番目が誤差拡散法を用いたシアン（Ｃ）のハーフトーン処理のスレッドであり、最後の７番目がディザ法を用いたダークイエロー（ＤＹ）のハーフトーン処理のスレッドというように順番を設定している。図７の例では、このように順番を設定することによって、同じ処理方法を用いるスレッド同士が連続する箇所がないようになっている。
【００７０】
ステップＳ２２０（図６）では、画像処理部２４０が、設定した順番でスレッドをスレッド実行アーキテクチャに割り当てて、スレッドを実行する。図７の例では、図７（ｂ）のiに示すように、画像処理部２４０が、まず設定順番が１番目および２番目のスレッドである、ディザ法を用いたマゼンタ（Ｍ）のハーフトーン処理のスレッドと、誤差拡散法を用いたシアン（Ｃ）のハーフトーン処理のスレッドとを並列に実行する。
【００７１】
図７（ｂ）のiにおいて、ディザ法を用いたマゼンタ（Ｍ）のハーフトーン処理のスレッドが完了したときは、画像処理部２４０が、次に、設定順番が３番目のスレッドであるディザ法を用いたイエロー（Ｙ）のハーフトーン処理のスレッドを実行する（図７（ｂ）のii）。さらに、ディザ法を用いたイエロー（Ｙ）のハーフトーン処理のスレッドが完了したときは、画像処理部２４０が、次に、設定順番が４番目のスレッドである誤差拡散法を用いたライトシアン（ＬＣ）のハーフトーン処理のスレッドを実行する（図７（ｂ）のiii）。画像処理部２４０は、このように、設定された順番に従ってスレッドを実行していき、最後に、設定順番が７番目のスレッドであるディザ法を用いたダークイエロー（ＤＹ）のハーフトーン処理のスレッドを実行する（図７（ｂ）のvi）。
【００７２】
以上のように、設定された順番に従って各スレッドをスレッド実行アーキテクチャに割り当てて実行すると、異なる処理方法を用いるスレッドを並列に実行する時間を長くすることができる。例えば、図７（ｂ）の例では、図７（ｂ）のviに示すように、一方のスレッド実行アーキテクチャでディザ法（ｄ）を用いたハーフトーン処理のスレッドを実行しているときは、必ず他方のスレッド実行アーキテクチャで誤差拡散法（ＥＤ）を用いたハーフトーン処理のスレッドを実行している。従って、第１実施例と同様に、ハーフトーン処理に要する時間を短くすることができる。
【００７３】
以上のようにして、第２実施例としてのコンピュータ２００は、ハーフトーン処理を高速に実行することができる。
【００７４】
Ｃ．変形例：
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
【００７５】
Ｃ１．変形例１：
上記実施例では、ＣＰＵ２１０は１つの実行リソース２１２を共有する２つのアーキテクチャステート２１４を備えているが、ＣＰＵ２１０は１つの実行リソース２１２を共有する３つ以上のアーキテクチャステート２１４を備えているとしてもよい。ＣＰＵ２１０が１つの実行リソース２１２を共有する３つ以上のアーキテクチャステート２１４を備えているときも、上記実施例と同様に、異なる処理方法を用いるスレッドを並列に実行する時間を長くすることによって、ハーフトーン処理を高速に実行することができる。
【００７６】
Ｃ２．変形例２：
上記実施例では、コンピュータ２００は１つのＣＰＵ２１０を備えているが、コンピュータ２００は２つ以上のＣＰＵを備えているとしてもよい。このときは、１つのスレッド実行アーキテクチャは、１つのＣＰＵによって構成され、コンピュータ２００はＣＰＵの数と同じ数のスレッド実行アーキテクチャを備えることが可能となる。このようにしても、画像処理装置としてのコンピュータ２００は、複数のスレッドのそれぞれに含まれる命令を並列に実行することが可能となる。従って、このようにしても、上記実施例と同様に、異なる処理方法を用いるスレッドを並列に実行する時間を長くすることによって、ハーフトーン処理を高速に実行することができる。
【００７７】
Ｃ３．変形例３：
上記実施例では、スレッド（インク色毎のハーフトーン処理）を、ディザ法と誤差拡散法との２つの異なる処理方法を用いるスレッドに分類する例を用いて説明したが、スレッドを、３つ以上の異なる処理方法を用いるスレッドに分類することも可能である。例えば、ディザ法を用いたハーフトーン処理のスレッドを、ディザの種類によって、さらに複数の異なる処理方法を用いるスレッドに分類することも可能である。また、誤差拡散法を用いたハーフトーン処理のスレッドを、誤差拡散マトリクスの種類によって、さらに複数の異なる処理方法を用いるスレッドに分類することも可能である。さらに、ハーフトーン処理にディザ法および誤差拡散法以外の他の処理方法を用い、他の処理方法を用いるスレッドとして分類することも可能である。
【００７８】
Ｃ４．変形例４：
上記実施例では、１つのスレッドの単位をインク色毎のハーフトーン処理としているが、１つのスレッドの単位は任意に設定することができ、例えば、１つのスレッドの単位をインク色とインクドット径との組み合わせ毎のハーフトーン処理とすることも可能である。
【００７９】
Ｃ５．変形例５：
上記第１実施例では、あるスレッド実行アーキテクチャにおいて実行されているスレッドが完了したときは、他のスレッド実行アーキテクチャにおいて実行されているスレッドの処理方法を確認し、それとは別の処理方法を用いるスレッドを次に実行することとしているが、あるスレッド実行アーキテクチャにおけるスレッドが完了したときは、完了したスレッドと同じ処理方法を用いるスレッドを次に実行するとすることも可能である。このようにしても、上記実施例と同様に、異なる処理方法を用いるスレッドを並列に実行する時間を長くすることによって、ハーフトーン処理を高速に実行することができる
【００８０】
Ｃ６．変形例６：
上記実施例におけるハーフトーンモジュール２４２の構成や内容は、あくまで一例であり、他の構成や内容のハーフトーンモジュールを用いることも可能である。例えばハーフトーン処理の方法として、誤差拡散法やディザ法以外の処理方法を定めることも可能である。また、印刷に用いるインク色についても一例であり、他のインク色を用いることも可能である。
【００８１】
Ｃ７．変形例７：
上記実施例では、画像処理の例として、画像処理部２４０としてのプリンタドライバによる印刷データの生成処理を用いて説明したが、画像処理は、例えば画像補正処理や画像合成処理といった他の画像処理であってもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明の第１実施例としての画像処理装置の構成を概略的に示した説明図。
【図２】いわゆるマルチスレッドとスレッドレベルの並列処理との違いを概念的に示した説明図。
【図３】画像処理部によるハーフトーン処理の高速化を図るための基本的考え方を概念的に示す説明図。
【図４】第１実施例としての画像処理部によるハーフトーン処理の流れを示すフローチャート。
【図５】第１実施例としての画像処理部によるハーフトーン処理の概要を示す説明図。
【図６】第２実施例としての画像処理部によるハーフトーン処理の流れを示すフローチャート。
【図７】第２実施例としての画像処理部によるハーフトーン処理の概要を示す説明図。
【符号の説明】
【００８３】
２００...コンピュータ
２１０...ＣＰＵ
２１２...実行リソース
２１４...アーキテクチャステート
２２０...内部記憶装置
２４０...画像処理部
２４２...ハーフトーンモジュール
２５０...外部記憶装置
２６０...表示部
２７０...操作部
２８０...インターフェイス部
３００...プリンタ
【図１】
2005259042.tif 000003
【図２】
2005259042.tif 000004
【図３】
2005259042.tif 000005
【図４】
2005259042.tif 000006
【図５】
2005259042.tif 000007
【図６】
2005259042.tif 000008
【図７】
2005259042.tif 000009