(57)【要約】【課題】  画像処理を並列処理で実行する際に、処理を効率的に実行する技術を提供する。【解決手段】  Ｎ個（Ｎは３以上の整数）の単位処理を含む処理集合を繰り返し実行する画像処理において、単位処理を実行するためのＭ個（Ｍは２以上でＮ未満の整数）の処理部で単位処理を実行させる。単位処理は、第１の処理方法を用いて処理を行う第１種の単位処理と、第１の処理方法とは異なる第２の処理方法を用いて処理を行う第２種の単位処理と、を含む。そして、処理集合を実行する際には、第１種と第２種の単位処理を少なくとも一つずつ含むＭ個の単位処理を、Ｍ個の処理部に最初に実行させる。【選択図】  図６
2006065459.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個（Ｎは３以上の整数）の単位処理を含む処理集合を繰り返し実行する画像処理において、前記単位処理を実行するためのＭ個（Ｍは２以上でＮ未満の整数）の処理部で前記単位処理を実行させる方法であって、
前記処理集合は、
第１の処理方法を用いて処理を行う第１種の単位処理と、
前記第１の処理方法とは異なる第２の処理方法を用いて前記処理を行う第２種の単位処理と、を含み、
前記方法は、
前記第１種と第２種の単位処理を少なくとも一つずつ含むＭ個の単位処理を、Ｍ個の前記処理部に最初に実行させる方法。
【請求項２】
請求項１記載の方法であって、
前記単位処理は、画像のハーフトーン処理であり、
前記処理集合は、
前記画像中の同一の領域を対象とするＮ個の前記ハーフトーン処理の集合である、方法。
【請求項３】
請求項２記載の方法であって、
前記第１の処理方法は誤差拡散法であり、
前記第２の処理方法はディザ法である、方法。
【請求項４】
請求項１ないし３のいずれかに記載の方法であって、
（ａ）直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もる工程と、
（ｂ）前記見積もり負荷に基づいて、前記Ｍ個の処理部に前記Ｎ個の単位処理を割り当てる工程と、
（ｃ）前記Ｍ個の処理部に、前記Ｎ個の単位処理を、割り当てられた順に実行させる工程と、を有し、
前記工程（ｂ）は、
（ｂ１）前記第１種の単位処理と前記第２種の単位処理とが交互に並び、かつ、前記第１種の単位処理同士および前記第２種の単位処理同士については、前記見積もり負荷の大きい順に並ぶ優先順位に従って、複数の前記単位処理の中から一つの単位処理を選択する工程と、
（ｂ２）前記Ｍ個の処理部の中で、割り当て済みの単位処理の見積もり負荷の合計が最も少ない処理部に、前記選択した単位処理を割り当てる工程と、
（ｂ３）前記工程（ｂ１）および（ｂ２）を繰り返し実行する工程と、を含む方法。
【請求項５】
請求項１ないし３のいずれかに記載の方法であって、
（ａ）直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もる工程と、
（ｂ）前記見積もり負荷に基づいて、前記Ｍ個の処理部に前記Ｎ個の単位処理を割り当てる工程と、
（ｃ）前記Ｍ個の処理部に、前記Ｎ個の単位処理を実行させる工程と、を有し、
前記工程（ｂ）は、
（ｂ１）前記見積もり負荷の大きい順である優先順位に従って、複数の前記単位処理の中から一つの単位処理を選択する工程と、
（ｂ２）前記Ｍ個の処理部の中で、割り当て済みの単位処理の見積もり負荷の合計が最も少ない処理部に、前記選択した単位処理を割り当てる工程と、
（ｂ３）前記工程（ｂ１）および（ｂ２）を繰り返し実行する工程と、を含み、
前記工程（ｃ）は、
前記Ｍ個の処理部のうち少なくとも一つの処理部に、前記第１種の単位処理よりも先に、複数の前記第２種の単位処理を連続して実行させ、
前記Ｍ個の処理部のうち少なくとも他の一つの処理部に、前記第２種の単位処理よりも先に、複数の前記第１種の単位処理を連続して実行させる工程を含む、方法。
【請求項６】
請求項４または５記載の方法であって、さらに、
前記Ｎ個の単位処理を、前記工程（ｂ１）の対象とする単位処理と、前記工程（ｂ１）の対象としない単位処理であって前記工程（ｂ１）の対象とする単位処理よりも前記見積もり負荷が小さい単位処理と、に分ける工程を備え、
前記工程（ｂ）は、さらに、
（ｂ４）前記工程（ｂ３）の後に、前記工程（ｂ１）の対象としない単位処理を、それまでに割り当てられている処理の見積もり負荷の合計が最も少ない処理部に割り当てる工程を含む、方法。
【請求項７】
請求項１ないし３のいずれかに記載の方法であって、
（ａ）直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もる工程と、
（ｂ）前記見積もり負荷に基づいて前記処理部に前記単位処理を割り当てて、実行させる工程と、を有し、
前記工程（ｂ）は、
（ｂ１）前記第１種の単位処理と前記第２種の単位処理とが交互に並び、かつ、前記第１種の単位処理同士および前記第２種の単位処理同士については、前記見積もり負荷の大きい順に並ぶ優先順位に従って、まだ前記処理部に割り当てられていない前記単位処理の中から一つの単位処理を選択する工程と、
（ｂ２）前記Ｍ個の処理部の中で、処理すべき単位処理が最初になくなる処理部に、前記選択した単位処理を割り当てて実行させる工程と、
（ｂ３）前記工程（ｂ１）および（ｂ２）を繰り返し実行する工程と、を含む方法。
【請求項８】
請求項１ないし３のいずれかに記載の方法であって、
（ａ）直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もる工程と、
（ｂ）前記見積もり負荷に基づいて前記処理部に前記単位処理を割り当てて、実行させる工程と、を有し、
前記工程（ｂ）は、
（ｂ１）前記見積もり負荷の大きい順である優先順位に従って、まだ前記処理部に割り当てられていない前記単位処理の中から、一つの単位処理を選択する工程と、
（ｂ２）前記Ｍ個の処理部の中で、処理すべき単位処理が最初になくなる処理部に、前記選択した単位処理を割り当てて実行させる工程と、
（ｂ３）前記工程（ｂ１）および（ｂ２）を繰り返し実行する工程と、を含む方法。
【請求項９】
請求項７または８記載の方法であって、
前記Ｎ個の単位処理を、前記工程（ｂ１）の対象とする単位処理と、前記工程（ｂ１）の対象としない単位処理であって前記工程（ｂ１）の対象とする単位処理よりも前記見積もり負荷が小さい単位処理と、に分ける工程を備え、
前記工程（ｂ）は、さらに、
（ｂ４）前記工程（ｂ３）の後に、前記工程（ｂ１）の対象としない単位処理を選択し、処理すべき単位処理が最初になくなる処理部に割り当てて実行させる工程を含む方法。
【請求項１０】
Ｎ個（Ｎは３以上の整数）の単位処理を含む処理集合を繰り返し実行して画像処理を行う画像処理装置であって、
前記単位処理は、
第１の処理方法を用いて処理を行う第１種の単位処理と、
前記第１の処理方法とは異なる第２の処理方法を用いて前記処理を行う第２種の単位処理と、を含み、
前記画像処理装置は、
前記単位処理を実行するためのＭ個（Ｍは２以上でＮ未満の整数）の処理部を含み、
前記第１種と第２種の単位処理を少なくとも一つずつ含むＭ個の単位処理を、Ｍ個の前記処理部に最初に実行させる、画像処理装置。
【請求項１１】
請求項１０記載の画像処理装置であって、
ハイパースレッディングにより前記処理集合を実行し、
前記処理部は、スレッドを処理するスレッド処理部である、画像処理装置。
【請求項１２】
Ｎ個（Ｎは３以上の整数）の単位処理を含む処理集合を繰り返し実行する画像処理において、前記単位処理を実行するためのＭ個（Ｍは２以上でＮ未満の整数）の処理部で前記単位処理を実行させるためのコンピュータプログラムであって、
前記単位処理は、
第１の処理方法を用いて処理を行う第１種の単位処理と、
前記第１の処理方法とは異なる第２の処理方法を用いて前記処理を行う第２種の単位処理と、を含み、
前記コンピュータプログラムは、
前記第１種と第２種の単位処理を少なくとも一つずつ含むＭ個の単位処理を、Ｍ個の前記処理部に最初に実行させる機能を含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像処理を並列処理で実行する技術に関する。
【背景技術】
【０００２】
従来より、各画素が有する各インク色の階調値で表された画像データを、各画素におけるインク色のドットの有無で表された画像データに変換する際に、並列処理を行う技術が開発されてきた。たとえば、特許文献１には、処理内容に応じてラスタライズ（並べ替え）処理と、ハーフトーン処理とを別のスレッドで実行する技術が開示されている。
【０００３】
【特許文献１】特開２０００−２９３６７４号公報
【０００４】
しかし、上記の技術においては、各スレッド、すなわち処理部に割り付けられた各色のハーフトーン処理を効率的に実行する点については考慮されていなかった。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明はかかる点に鑑みてなされたもので、画像処理を並列処理で実行する際に、効率的に処理を実行する技術を提供することを主たる目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明は、Ｎ個（Ｎは３以上の整数）の単位処理を含む処理集合を繰り返し実行する画像処理において、以下で示す所定の処理を行う。この画像処理を行う際には、単位処理を実行するためのＭ個（Ｍは２以上でＮ未満の整数）の処理部で単位処理を実行させる。処理集合は、第１の処理方法を用いて処理を行う第１種の単位処理と、第１の処理方法とは異なる第２の処理方法を用いて処理を行う第２種の単位処理と、を含む。そのような画像処理において、第１種と第２種の単位処理を少なくとも一つずつ含むＭ個の単位処理を、Ｍ個の処理部に最初に実行させる。
【０００７】
このような態様とすれば、少なくとも処理集合の処理を開始する時において、第１種と第２種の単位処理を混在させて、Ｌ個の処理部で並列に処理することができる。その結果、処理を実行する装置内の特定の要素に負荷が集中し、その要素の処理能力がボトルネックとなって、処理効率が低下する可能性を低減することができる。すなわち、画像処理を並列処理で実行する際に、効率的に処理を実行することができる。
【０００８】
なお、単位処理は、画像中の所定の大きさの領域に関する所定の色についてのハーフトーン処理とすることができる。また、処理集合は、画像中の同一の領域を対象とするＮ個のハーフトーン処理の集合とすることができ、画像中の互いに隣接する領域について並びの順に実行されるものとすることができる。
【０００９】
第１の処理方法は誤差拡散法とすることができ、第２の処理方法はディザ法とすることができる。
【００１０】
なお、処理集合を処理する際には、以下のようにすることが好ましい。すなわち、まず、直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もる。そして、見積もり負荷に基づいて、Ｍ個の処理部にＮ個の単位処理を割り当てる。その後、Ｍ個の処理部に、Ｎ個の単位処理を、割り当てられた順に実行させる。
【００１１】
そして、処理部に単位処理を割り当てる際には、以下のような処理を行うことが好ましい。すなわち、（ｉ）第１種の単位処理と第２種の単位処理とが交互に並び、かつ、第１種の単位処理同士および第２種の単位処理同士については、見積もり負荷の大きい順に並ぶ優先順位に従って、複数の単位処理の中から一つの単位処理を選択する。（ｉｉ）Ｍ個の処理部の中で、割り当て済みで未完了の単位処理の見積もり負荷の合計が最も少ない処理部に、選択した単位処理を割り当てる。そして、上記の（ｉ）および（ｉｉ）を繰り返し実行する。
【００１２】
このような態様とすれば、直前の実行結果に基づいて、正確に見積もられた負荷を使用して、各処理部間の負荷の均等化を図ることができる。そして、同時に、第１種と第２種の単位処理が並列処理されやすくなるように、単位処理を各処理部に割り当てることができる。
【００１３】
また、処理部に単位処理を割り当てる際には、以下のような処理を行うこともできる。すなわち、（ｉ）見積もり負荷の大きい順である優先順位に従って、複数の単位処理の中から一つの単位処理を選択する。（ｉｉ）Ｍ個の処理部の中で、割り当て済みの単位処理の見積もり負荷の合計が最も少ない処理部に、選択した単位処理を割り当てる。そして、これらの（ｉ）および（ｉｉ）を繰り返し実行する。また、単位処理を実行する際には、以下のようにすることが好ましい。すなわち、Ｍ個の処理部のうち少なくとも一つの処理部に、第１種の単位処理よりも先に、複数の第２種の単位処理を連続して実行させる。また、Ｍ個の処理部のうち少なくとも他の一つの処理部に、第２種の単位処理よりも先に、複数の第１種の単位処理を連続して実行させる。
【００１４】
このような態様としても、正確に見積もられた負荷に基づいて、各処理部間の負荷の均等化を図ることができ、同時に、第１種と第２種の単位処理が並列処理されやすくなるように、単位処理を各処理部に割り当てることができる。
【００１５】
なお、Ｎ個の単位処理を、上記の優先順位に従った単位処理の割り当ての対象とする単位処理と、上記の優先順位に従った単位処理の割り当ての対象としない単位処理であって、対象とする単位処理よりも見積もり負荷が小さい調整用単位処理と、に分けて、以下のような処理を行うことも好ましい。すなわち、上記の優先順位に従った単位処理の割り当ての後に、上記の優先順位に従った単位処理の割り当ての対象としない調整用単位処理を、それまでに割り当てられている処理の見積もり負荷の合計が最も少ない処理部に割り当てる。このような態様とすれば、見積もり負荷が小さい単位処理を使用して、処理部間の負荷のばらつきをより細かく平準化することができる。
【００１６】
なお、各処理部に単位処理を実行させつつ、次に処理すべき単位処理を各処理部に割り当てることもできる。そのような態様においても、まず、直前に実行された処理集合に含まれる各単位処理の実行結果に基づいて、次の処理集合における各単位処理の見積もり負荷を見積もることが好ましい。そして、その後、見積もり負荷に基づいて、処理部に単位処理を割り当てて実行させる。
【００１７】
処理部に単位処理を割り当てて実行させる際には、第１種の単位処理と第２種の単位処理とが先頭から交互に並び、かつ、第１種の単位処理同士および第２種の単位処理同士については、見積もり負荷の大きい順に並ぶ優先順位に従って、まだ処理部に割り当てられていない単位処理の中から一つの単位処理を選択し、処理すべき単位処理が最初になくなる処理部に割り当てて実行させる。そして、そのような処理を繰り返し実行する。このような態様においては、実際の処理結果に基づいて、各単位処理を各処理部に割り当てることができる。
【００１８】
なお、処理部に単位処理を割り当てて実行させる際には、見積もり負荷の大きい順である優先順位に従って、まだ処理部に割り当てられていない単位処理の中から、一つの単位処理を選択し、処理すべき単位処理が最初になくなる処理部に実行させる態様とすることもできる。このような態様においては、各処理部の負荷の平準化を図ることができる。その結果、処理集合を短時間で処理することができる。
【００１９】
また、Ｎ個の単位処理を、上記の優先順位に従った単位処理の割り当ての対象とする単位処理と、上記の優先順位に従った単位処理の割り当ての対象としない単位処理であって、対象とする単位処理よりも見積もり負荷が小さい調整用単位処理と、に分けて、以下のような処理を行うことも好ましい。すなわち、処理部に単位処理を割り当てて実行させる際には、上記の優先順位に従った単位処理の割り当ての後に、上記の優先順位に従った単位処理の割り当ての対象としない調整用単位処理を選択し、処理すべき単位処理が最初になくなる処理部に割り当てて実行させる。このような態様においては、各処理部の負荷の平準化をより細かく行うことができる。
【００２０】
なお、画像処理装置は、ハイパースレッディングにより処理集合を実行する態様とすることができる。そのような態様においては、処理部は、スレッドを処理するスレッド処理部である。
【００２１】
本発明は、種々の形態で実現することが可能である。例えば、処理の割り当て方法、処理割り当て装置、画像処理方法、画像処理装置、印刷制御方法、印刷制御装置、印刷方法、印刷装置、そして、それらの方法または装置の機能を実現するためのコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体等の形態で実現することができる。
【発明を実施するための最良の形態】
【００２２】
以下では、発明の実施の形態を次の順序で説明する。
Ａ．実施形態の概要：
Ｂ．第１の実施形態．
Ｂ１．装置の全体構成．
Ｂ２．ＣＰＵの内部構成．
Ｂ３．色変換処理とハーフトーン処理．
Ｃ．第２の実施形態．
Ｄ．第３の実施形態．
Ｅ．変形例．
【００２３】
Ａ．実施形態の概要：
プリンタドライバ９６において、二つのスレッド９９ｃ、９９ｄを使用して、ハーフトーン処理を行う（図６（ｃ）参照）。各インク色のハーフトーン処理には、ディザ法を使用するものと、誤差拡散法を使用するものがある。ハーフトーン処理を実行する際には、各スレッドの先頭には、ディザ法を使用するものと、誤差拡散法を使用するものとを配する。このようにすることで、少なくとも各スレッドの先頭の処理においては、誤差拡散法が並行処理されることによるメモリアクセス待ちが生じにくくなる。
【００２４】
その後、順に、それまでに割り当てられた処理の見積もり負荷の合計が少ないスレッドに、優先順位に従って各色のハーフトーン処理を割り当てる。この優先順位は、ディザ法を使用するものと、誤差拡散法を使用するものが交互に並ぶように、かつ、ディザ法を使用するもの同士、誤差拡散法を使用するもの同士は、見積もり負荷の大きい順に並ぶように、決定される（図６（ｃ）の２−１〜２−４参照）。そして、それらとは別に、最後に、最も見積もり負荷の小さい処理を割り当てる（図６（ｃ）の３−１参照）。このようにすることで、誤差拡散法を使用するハーフトーン処理が、各スレッドで同時に実行されにくくなり、さらに、各スレッドの負荷の均等化も図ることができる。
【００２５】
Ｂ．第１の実施の形態．
Ｂ１．装置の全体構成．
図１は、第１の実施形態の印刷システムのソフトウェアの構成を示すブロック図である。コンピュータ９０では、所定のオペレーティングシステムの下で、アプリケーションプログラム９５が動作している。また、オペレーティングシステムには、ビデオドライバ９１やプリンタドライバ９６が組み込まれている。
【００２６】
アプリケーションプログラム９５は、マウス１３０やキーボード１２０から入力されるユーザの指示に応じて、レッド（Ｒ），グリーン（Ｇ），ブルー（Ｂ）の３色の色成分からなる原画像データＯＲＧをＣＤ−Ｒ１４０から読み込む。そして、ユーザの指示に応じて、原画像データＯＲＧに画像のレタッチなどの処理を行う。アプリケーションプログラム９５は、処理を行った画像を、ビデオドライバ９１を介してＣＲＴディスプレイ２１に画像を表示する。また、アプリケーションプログラム９５は、ユーザからの印刷指示を受け取ると、プリンタドライバ９６に印刷指示を出し、処理を行った画像を初期画像データＰＩＤとしてプリンタドライバ９６に出力する。
【００２７】
プリンタドライバ９６は、初期画像データＰＩＤをアプリケーションプログラム９５から受け取り、これをプリンタ２２が処理可能な印刷画像データＦＮＬ（ここではシアン、マゼンダ、イエロー、ブラック、ライトシアン、ライトマゼンタ、ダークイエローの７色についての多値化された信号）に変換する。
【００２８】
図１に示した例では、プリンタドライバ９６の内部には、解像度変換モジュール９７と、色変換モジュール９８と、色変換テーブル１０４と、ハーフトーンモジュール９９と、負荷記憶部１０５と、並べ替えモジュール１００とが備えられている。
【００２９】
解像度変換モジュール９７は、初期画像データＰＩＤの解像度をプリンタ２２で印刷を行う際の解像度に変換する。色変換モジュール９８は、カラー画像の印刷においては、３次元ルックアップテーブルである色変換テーブル１０４を参照しつつ、ＲＧＢの階調値で各画素の色が現されている画像データＭＩＤ１を、プリンタ２２が使用するシアン（Ｃ）、マゼンダ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）、ライトシアン（ＬＣ）、ライトマゼンタ（ＬＭ）、ダークイエロー（ＤＹ）の階調値で各画素の色が表された画像データＭＩＤ２に変換する。
【００３０】
なお、「ライトシアン」は、シアンと色相が同じでシアンよりも明るい色のインクである。「ライトマゼンタ」は、マゼンタと色相が同じでマゼンタよりも明るい色のインクである。「ダークイエロー」は、イエローと色相が同じでイエローよりも暗い色のインクである。
【００３１】
ハーフトーンモジュール９９は、各画素の各色の濃度が各色の階調値で表された画像データＭＩＤ２にハーフトーン処理を行うことによって、各色の濃度が各画素におけるドットの有無で表される画像データＭＩＤ３（「印刷データ」または「ドットデータ」とも呼ぶ）に変換する。ハーフトーン処理は、「２値化処理」とも呼ばれる。このハーフトーン処理は、ライトシアン（ＬＣ）、ライトマゼンダ（ＬＭ）、シアン（Ｃ）については、誤差拡散法で行われ、マゼンダ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）、ダークイエロー（ＤＹ）については、ディザ法で行われる。
【００３２】
「ディザ法」は、画素に対応する要素内にそれぞれしきい値を有しているｎ×ｍのディザマトリクス（ｎ、ｍは正の整数）と、ｎ×ｍの画素からなる部分画像領域とを比較し、部分画像領域の各画素が有する階調値がしきい値よりも高いか否かでドットの形成の有無を決定する方式である。「誤差拡散法」は、一つの対象画素へのドットの形成の有無をしきい値との比較に基づいて決定し、ドットの形成の有無による２段階の濃度表現と、多階調の階調値で指定された濃度と、のずれ（誤差）を、まだ対象画素となっていない他の画素に振り分けて、それらの画素の階調値に上乗せしてゆく方法である。
【００３３】
一般に、同じデータをハーフトーン処理する場合は、ディザ法で行った方が、誤差拡散法で行った場合よりも、処理の負荷が小さくなる。ただし、誤差拡散法でハーフトーン処理を行った方が、一般に画像の印刷結果が高品質となる。ここでは、印刷結果の品質の良悪が目につきやすいライトシアン、ライトマゼンタについては、誤差拡散法でハーフトーン処理を行うことし、印刷結果の品質の良悪が目につきにくいイエローについては、ディザ法でハーフトーン処理を行うこととする。他のインク色については、ハーフトーン処理全体がシステムに与える負荷を考慮して、いずれの方法を採用するかが決定される。
【００３４】
ハーフトーンモジュール９９で生成された画像データＭＩＤ３は、並べ替えモジュール１００によりプリンタ２２に転送すべきデータ順に並べ替えられて、最終的な印刷画像データＦＮＬとして出力される。
【００３５】
プリンタ２２は、紙送りモータによって用紙Ｐを搬送する機構と、キャリッジモータによってキャリッジ３１を用紙Ｐの搬送方向ＳＳと垂直な方向ＭＳに往復動させる機構と、キャリッジ３１に搭載されインクの吐出およびドット形成を行う印刷ヘッド２８と、各種の設定データを格納しているＰ−ＲＯＭ４２と、これらの紙送りモータ，キャリッジモータ，印刷ヘッド２８、Ｐ−ＲＯＭ４２および操作パネル３２を制御するＣＰＵ４１とから構成されている。プリンタ２２は、印刷画像データＦＮＬを受け取って、印刷画像データＦＮＬに応じてシアン（Ｃ）、マゼンダ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）、ライトシアン（ＬＣ）、ライトマゼンタ（ＬＭ）、ダークイエロー（ＤＹ）で印刷媒体上にドットを形成し、印刷を実行する。
【００３６】
なお、本明細書においては、「印刷装置」とは、狭義にはプリンタ２２のみをさすが、広義にはコンピュータ９０とプリンタ２２とを含む印刷システム全体を表す。
【００３７】
Ｂ２．ＣＰＵの内部構成および動作．
コンピュータ９０のＣＰＵ９０ａは、ハイパースレッディング・テクノロジに対応したＣＰＵである。このＣＰＵ９０ａは、二つのスレッドを並列に処理することが可能である。これら二つのスレッドを、図１において、第１のスレッド９９ｃ、第２のスレッド９９ｄとして示す。以下では、ハイパースレッディング・テクノロジに対応したＣＰＵ９０ａの構成および動作について説明する。
【００３８】
図２は、コンピュータ９０のＣＰＵ９０ａ内における処理を示すブロック図である。ＣＰＵ９０ａは、内部に命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０、命令キャッシュ２１０、データキャッシュ２５０を有している。そして、命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０は、それぞれ処理した命令およびデータを一時的に保管するためのバッファ２２２，２３２，２４２を有している。バッファ２２２，２３２，２４２は、それぞれ第１のスレッド用と第２のスレッド用に分割されている。
【００３９】
命令キャッシュ２１０には、すでに一度使用された命令、およびそれに引き続いて使用されると予想される命令が格納されている。命令フェッチユニット２２０は、命令キャッシュ２１０のアドレスを指定して、命令を取り出す（フェッチする）。その際、第１のスレッド用の命令は第１のスレッド用のバッファに格納される。そして、第２のスレッド用の命令は第２のスレッド用のバッファに格納される。なお、命令キャッシュ２１０内に必要とする命令がない場合には、ＣＰＵ９０ａは、メインメモリ（図示せず）にアクセスして、命令を取り出す。
【００４０】
その後、命令フェッチユニット２２０は、命令デコーダ２３０に取り出した命令を渡す。その際、奇数クロックのタイミングで第１のスレッドの一つの命令を命令デコーダ２３０に投入し、偶数クロックのタイミングで第２のスレッドの一つの命令を命令デコーダ２３０に投入する。すなわち、第１のスレッドの命令と第２のスレッドの命令は、交互に命令デコーダ２３０に投入される。図２では、第２のスレッド用の命令にハッチをつけて示す。
【００４１】
命令デコーダ２３０は、投入された命令をマイクロコードに変換（デコード）し、バッファ２３２に格納する。その際、デコードされた命令が第１のスレッド用の命令である場合は、第１のスレッド用のバッファに格納される。そして、デコードされた命令が第２のスレッド用の命令である場合は、第２のスレッド用のバッファに格納される。
【００４２】
その後、命令デコーダ２３０は、デコードした命令を演算ユニット２４０に投入する。その際、奇数クロックのタイミングで第１のスレッドの一つの命令を演算ユニット２４０に投入し、偶数クロックのタイミングで第２のスレッドの一つの命令を演算ユニット２４０に投入する。演算ユニット２４０は、指定された演算処理を行い、演算結果を、やはりスレッドごと分けてバッファに格納する。
【００４３】
従来のＣＰＵでは、命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０内の各バッファは、全体として一つのスレッドのために用いられた。そのような態様においては、マルチスレッドにおいて処理するスレッドを切り替える際には、命令デコーダ２３０と演算ユニット２４０は、それまでバッファに格納していた前のスレッドの命令を廃棄して、あらためて次のスレッドの命令を命令フェッチユニット２２０から受け取る必要がある。よって、命令デコーダ２３０と演算ユニット２４０は、命令フェッチユニット２２０が取り出す命令が新たに投入されるまでは、あそんでしまうことになる。
【００４４】
しかし、上記のような構成においては、二つのスレッドは、命令の単位で交互に処理されている。また、命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０の各バッファ２２２，２３２，２４２内には、二つのスレッドの命令が同時に格納されている。このため、命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０は、一方のスレッドの一つの命令の処理を終えると、すぐにバッファ内の他方のスレッドの命令を使用して、次の処理に着手することができる。言い換えれば、パイプラインを有効に活用することができる。また、一方のスレッドでエラーや待ちが生じた場合にも、他方のスレッドでは処理を進めることができる。
【００４５】
なお、バッファ２２２，２３２，２４２の第１のスレッドの命令をそれぞれ格納する部分と、それら第１のスレッドの命令を処理する命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０の機能部を、第１のスレッドの「スレッド処理部」と呼ぶことがある。同様に、バッファ２２２，２３２，２４２の第２のスレッドの命令をそれぞれ格納する部分と、それら第２のスレッドの命令を処理する命令フェッチユニット２２０、命令デコーダ２３０、演算ユニット２４０の機能部を、第２のスレッドの「スレッド処理部」と呼ぶことがある。
【００４６】
Ｂ３．色変換処理とハーフトーン処理．
図３は、色変換処理とハーフトーン処理の具体的な処理の流れを示すフローチャートである。図４は、色変換処理とハーフトーン処理を行うラスタラインＬＬｓ（ｉ）を示す説明図である。図１に示した色変換モジュール９８による色変換処理とハーフトーンモジュール９９によるハーフトーン処理とは、具体的には、画像データＭＩＤ１中のラスタライン２行分ずつ行われる。すなわち、画像データＭＩＤ２は、ラスタライン２行分ずつの部分画像として、色変換モジュール９８とハーフトーンモジュール９９の間で受け渡される。
【００４７】
図４では、色変換処理とハーフトーン処理を行う２本のラスタラインを対象ラスタラインＬＬｓ（ｉ）として示す。この対象ラスタラインＬＬｓ（ｉ）についての全インク色Ｃ、Ｍ、Ｙ、Ｋ、ＬＣ、ＬＭ、ＤＹのハーフトーン処理を、以下では「処理集合」とも呼ぶ。
【００４８】
また、図４においては、直前に色変換処理とハーフトーン処理が行われた２本のラスタラインを参照ラスタラインＬＬｓ（ｉ−１）として示す。対象ラスタラインＬＬｓ（ｉ）よりも上の領域Ａｄは、すでに色変換処理とハーフトーン処理とが行われた領域である。対象ラスタラインＬＬｓ（ｉ）およびそれよりも下の領域Ａｙは、まだ色変換処理とハーフトーン処理が行われていない領域である。ＬＬｓ（ｉ＋１）で示す２本のラスタラインが、対象ラスタラインＬＬｓ（ｉ）の次に色変換処理とハーフトーン処理とが行われる領域である。
【００４９】
色変換処理とハーフトーン処理とを行う際には、まず、図３のステップＳ１１０で、色変換を行う。具体的には、色変換テーブル１０４（図１参照）を参照して、レッド（Ｒ）、グリーン（Ｇ）、ブルー（Ｂ）の階調値で表されている対象ラスタラインＬＬｓ（ｉ）のデータを、シアン（Ｃ）、マゼンダ（Ｍ）、イエロー（Ｙ）、ブラック（Ｋ）、ライトシアン（ＬＣ）、ライトマゼンタ（ＬＭ）、ダークイエロー（ＤＹ）の階調値で表されたデータに変換する。そして、ステップＳ１２０では、Ｃ、Ｍ、Ｙ、Ｋ、ＬＣ、ＬＭ、ＤＹの階調値で表された対象ラスタラインＬＬｓ（ｉ）の各データを、バッファへ格納する。
【００５０】
色変換処理を行うステップＳ３００（図３において破線で示す）では、二つのスレッドにおいて、インク色単位でハーフトーン処理を分担させてＣ、Ｍ、Ｙ、Ｋ、ＬＣ、ＬＭ、ＤＹのハーフトーン処理を行う。ここでは、マゼンタ、イエロー、ダークイエローについては、ディザ法でハーフトーン処理を行い、他の色については、誤差拡散法でハーフトーン処理を行うものとする。なお、ステップＳ３００に先だって、二つのスレッドはあらかじめ作成され、待機状態とされている。また、スレッドは、色変換処理を行うステップの実行のたびに作成してもよい。ただし、あらかじめスレッドを作成しておけば、短時間で処理を開始することができ、効果的である。
【００５１】
ステップＳ１３０では、各インク色についてのハーフトーン処理（以下、個々のインク色についてのハーフトーン処理を「単位ＨＴ処理」という）を、二つのスレッドに割り付ける。詳しい処理の内容については後述する。ここでは、ステップＳ１３０における割り付けの結果、たとえば、シアンと、イエローと、ブラックと、ダークイエローのハーフトーン処理が第１のスレッドに割り付けられ、マゼンタと、ライトシアンと、ライトマゼンタのハーフトーン処理が、第２のスレッドに割り付けられたものとする。
【００５２】
ステップＳ１４０では、待機状態にある第１のスレッドを実行状態とする。そして、ステップＳ１５０では、第１のスレッドにおいて、たとえばシアンと、イエローと、ブラックと、ダークイエローについてハーフトーン処理を行う。そして、それらのインク色についてのハーフトーン処理を終えると、ステップＳ１６０で、第１のスレッドを再び待機状態とする。なお、ステップＳ１５０においては、シアンと、イエローと、ブラックと、ダークイエローの各ハーフトーン処理に要した時間がカウントされ、コンピュータ９０のメモリ内の負荷記憶部１０５（図１参照）に格納される。
【００５３】
一方、ステップＳ１７０では、待機状態にある第２のスレッドを実行状態とする。そして、ステップＳ１８０では、第２のスレッドにおいて、たとえばマゼンタと、ライトシアンと、ライトマゼンタについてハーフトーン処理を行う。そして、それらのインク色についてのハーフトーン処理を終えると、ステップＳ１９０で、第２のスレッドを再び待機状態とする。なお、ステップＳ１８０においては、マゼンタと、ライトシアンと、ライトマゼンタの各ハーフトーン処理に要した時間がカウントされ、コンピュータ９０のメモリ内の負荷記憶部１０５に格納される。
【００５４】
ステップＳ２００では、画像データＭＩＤ１に含まれるすべてのラスタラインについて、色変換処理およびハーフトーン処理を終えたか否かを判定する。まだ、すべてのラスタラインについて色変換処理およびハーフトーン処理を終えていない場合は、ここまでで処理したラスタラインＬＬｓ（ｉ）の下側に隣接する２本のラスタラインＬＬｓ（ｉ＋１）を新たに対象ラスタラインとして（図４参照）、ステップＳ１１０からの処理を繰り返す。画像データＭＩＤ１のすべてのラスタラインについて色変換処理およびハーフトーン処理を終えた場合は、処理を終了する。なお、ステップＳ１３０の処理は、ハーフトーンモジュール９９の機能部である割り付け部９９ａが実行する。そして、ステップＳ１４０〜Ｓ１６０およびステップＳ１７０〜Ｓ１９０の処理は、ハーフトーンモジュール９９の機能部である２値化部９９ｂが実行する。これらの機能部を図１に示す。
【００５５】
図５は、図３のステップＳ１３０における各色の単位ＨＴ処理のスレッドへの割り付けの手順を示すフローチャートである。ステップＳ１０では、まず、各色についての各単位ＨＴ処理の負荷を見積もる。ここでは、負荷記憶部１０５に格納されている前回のハーフトーン処理時の処理時間を取り出して、それを各単位ＨＴ処理の負荷とする。
【００５６】
図６は、単位ＨＴ処理の割り付けの手順を示す説明図である。図６（ａ）は、各単位ＨＴ処理の見積もり負荷を表す図である。図６においては、一つ一つの四角が単位ＨＴ処理の負荷を表す。四角の左右方向の長さが負荷の大きさを表している。四角中のＬｃ、Ｌｍ、Ｌｙ、Ｌｋ、Ｌｌｃ、Ｌｌｍ、Ｌｄｙは、それぞれシアン、マゼンダ、イエロー、ブラック、ライトシアン、ライトマゼンタ、ダークイエローの見積もり負荷であることを意味する。また、第２種の単位ＨＴ処理は、ハッチをつけて示している。
【００５７】
画像においては、隣り合う領域同士は、各色成分の存在割合が互いに近似していることが多い。すなわち、隣り合う領域同士においては、同じ色同士のハーフトーン処理の負荷が近似する可能性が高い。このため、上記のように、直前にハーフトーン処理が行われた参照ラスタラインＬＬｓ（ｉ−１）の処理結果に基づいて、各単位ＨＴ処理の負荷を決定することとすれば、正確に負荷を見積もることができる。
【００５８】
なお、画像によっては、対象ラスタラインＬＬｓ（ｉ）と参照ラスタラインＬＬｓ（ｉ−１）とで、各色成分の存在割合が大きく変化し、その結果、各色の単位ＨＴ処理の負荷が大きく変化する場合もある。たとえば、地平線が描かれている場合などである。しかし、画像中の多くの部分では、隣り合う領域同士は、各色成分の存在割合が互いに近似している。このため、一部において負荷の見積もりが実際の負荷からずれていても、全体としては、大多数の部分についての正確な負荷の見積もりに基づいて、効率的に画像処理を行うことができる。
【００５９】
図５のステップＳ２０では、各色の単位ＨＴ処理を、先頭グループＧ１、中間グループＧ２と、末尾グループＧ３と、に分類する。先頭グループＧ１は、各スレッドにおいて最初に処理すべき単位ＨＴ処理である。先頭グループＧ１には、誤差拡散法による単位ＨＴ処理と、ディザ法による単位ＨＴ処理と、のそれぞれについて最も負荷の大きい単位ＨＴ処理が割り当てられる（図６（ａ）参照）。なお、第１の実施形態にいては、先頭グループＧ１の単位ＨＴ処理の数はスレッドの数に等しい。
【００６０】
また、各色の単位ＨＴ処理のうち最も負荷の小さい一つの単位ＨＴ処理を末尾グループＧ３とされる（図６（ａ）参照）。なお、第１の実施形態にいては、末尾グループＧ３は、一つの単位ＨＴ処理であるが、２以上の単位ＨＴ処理を末尾グループＧ３としてもよい。そして、そのほかの単位ＨＴ処理を中間グループＧ２とする。
【００６１】
図６（ａ）に示すように、ここでは、シアンとマゼンタの単位ＨＴ処理が先頭グループＧ１とされ、ダークイエローの単位ＨＴ処理が末尾グループＧ３とされる。そして、そのほかのライトシアン、ライトマゼンタ、イエロー、ブラックの単位ＨＴ処理が、中間グループＧ２とされる。
【００６２】
前述のように、ハーフトーンモジュール９９は、ライトシアン（ＬＣ）、ライトマゼンダ（ＬＭ）、シアン（Ｃ）、ブラック（Ｋ）については、誤差拡散法でハーフトーン処理を行い、マゼンダ（Ｍ）、イエロー（Ｙ）、ダークイエロー（ＤＹ）については、ディザ法でハーフトーン処理を行う。誤差拡散法でハーフトーン処理が行われる単位ＨＴ処理を「第１種の単位ＨＴ処理」と呼び、ディザ法でハーフトーン処理が行われる単位ＨＴ処理を「第２種の単位ＨＴ処理」と呼ぶ。
【００６３】
図５のステップＳ３０では、ハーフトーンモジュール９９は、先頭グループＧ１に分類された単位ＨＴ処理を、ステップＳ１０で決定した各単位ＨＴ処理の負荷が大きい順に順位付けする。ここでは、図６（ｂ）に示すように、誤差拡散法を使用するシアンの単位ＨＴ処理が第１位であり、ディザ法を使用するイエローの単位ＨＴ処理が第２位である。なお、図６（ｂ）において、各単位ＨＴ処理を表す四角の上には、各単位ＨＴ処理の属するグループと、グループ内の順位が示されている。たとえば、マゼンタの単位ＨＴ処理Ｌｍの上の「１−２」は、先頭グループＧ１に属し、グループ内で順位が２位であることを意味する。
【００６４】
ステップＳ４０では、ハーフトーンモジュール９９は、中間グループＧ２に分類された単位ＨＴ処理を、ステップＳ１０で決定した各単位ＨＴ処理の負荷に基づいて順位付けする。その際、誤差拡散法でハーフトーン処理が行われる第１種の単位ＨＴ処理から始めて、第１種と第２種の単位ＨＴ処理を負荷の大きい順に交互に順位付けする。これは、たとえば、第１種と第２種の単位ＨＴ処理を、それぞれ負荷の大きい順に仮に順位付けし、第１種と第２種の単位ＨＴ処理を交互に、仮の順位の高いものから選択して順位付けすることで、実現できる。
【００６５】
なお、第１の実施形態では、中間グループＧ２中、第２種の単位ＨＴ処理はイエロー１個であるのに対して、第１種の単位ＨＴ処理は、ライトシアン、ライトマゼンタ、ブラックの３個ある。このため、図６（ｂ）に示すように、中間グループＧ２中の第１位〜第３位までは、第１種と第２種の単位ＨＴ処理が交互に順位付けされるが、第３位と第４位については、同じ第１種の単位ＨＴ処理が並ぶこととなる。
【００６６】
ステップＳ５０では、ハーフトーンモジュール９９は、末尾グループＧ３に分類された単位ＨＴ処理を、ステップＳ１０で決定した各単位ＨＴ処理の負荷が大きい順に順位付けする。第１の実施形態では、末尾グループＧ３に分類された単位ＨＴ処理はダークイエローの単位ＨＴ処理だけである。このため、ダークイエローの単位ＨＴ処理に、末尾グループＧ３内で１位の順位が設定される。
【００６７】
図５のステップＳ６０では、各単位ＨＴ処理を統一して順位付けする。その際、先頭グループＧ１の単位ＨＴ処理を、他のグループＧ２，Ｇ３よりも高い順位とする。そして、中間グループＧ２の単位ＨＴ処理を、末尾グループＧ３よりも高い順位とする。各グループ内の単位ＨＴ処理の順位は、ステップＳ３０〜Ｓ５０で設定された順位である。図６（ｂ）の例では、左上から右下に向かう順であり、「１−１，１−２，２−１、２−２，２−３，２−４，３−１」の順である。
【００６８】
図６（ｃ）は、第１と第２のスレッドに割り付けられた単位ＨＴ処理を示す説明図である。図５のステップＳ７０では、ハーフトーンモジュール９９は、ステップＳ６０で決定した順位に沿って、各単位ＨＴ処理を第１のスレッドと第２のスレッドに割り付ける。具体的には、最初に先頭グループＧ１の単位ＨＴ処理を両スレッドに割り付けた後は、すでに割り当てられた単位ＨＴ処理の負荷の合計が最も少ないスレッドに、優先順位に従って単位ＨＴ処理を割り付ける。その結果、第１の第２のスレッドには、図６（ｃ）に示すように、単位ＨＴ処理が割り付けられる。なお、図６（ｃ）において、各単位ＨＴ処理を表す四角の上に示されている符号は、図６（ｂ）に示した符号と同じである。すなわち、各単位ＨＴ処理の属するグループと、グループ内の順位を示すものである。
【００６９】
ステップＳ４０では、中間グループＧ２の単位ＨＴ処理について、第１種と第２種の単位ＨＴ処理を負荷の大きい順に交互に順位付けしている。このため、上述のように単位ＨＴ処理を第１のスレッドと第２のスレッドに割り付けることで、以下のような割り付けが実行される。すなわち、中間グループＧ２については、すでに割り当てられた単位ＨＴ処理の負荷の合計が最も少ないスレッドに、まだスレッドに割り当てられておらず、かつ、直前にスレッドに割り当てた単位ＨＴ処理とはハーフトーン処理の方法が異なる単位ＨＴ処理のうちで、負荷が最も大きい単位処理が割り当てられる。
【００７０】
第１の実施形態では、先頭グループＧ１の選択の際には、第１種と第２種の単位ＨＴ処理の中から見積もり負荷の大きいものから単位ＨＴ処理を選択している。このため、以降の中間グループＧ２、末尾グループＧ３の単位ＨＴ処理のスレッドへの割り付けにおいては、それらよりも見積もり負荷が小さい単位ＨＴ処理が割り付けられることになる。よって、以降の中間グループＧ２、末尾グループＧ３の単位ＨＴ処理のスレッドへの割り付けに際して、スレッド間の負荷の平準化が容易となる。
【００７１】
また、第１の実施形態では、負荷が小さい末尾グループＧ３の単位ＨＴ処理を、負荷が大きい中間グループＧ２の後でスレッドに割り付ける。このため、単位ＨＴ処理の各スレッドへの割り付けの最終段階において、単位処理のグループ中で最も見積もり負荷の小さい末尾グループＧ３の単位ＨＴ処理を使用して、スレッド間の負荷の差を小さくすることができる。なお、第１の実施形態では、末尾グループＧ３の単位ＨＴ処理は１個であったため実施されないが、末尾グループＧ３の単位ＨＴ処理が複数ある場合には、末尾グループＧ３のうち負荷の大きい単位ＨＴ処理から順に、それまでに割り付けられた単位ＨＴ処理の負荷の合計の少ないスレッドに割り付けられることになる。そのような態様においては、スレッド間の負荷の平準化がより高度に達成される。
【００７２】
以上のようにして、図３のステップＳ１３０における色変換処理の割り付けが実行される。なお、図３のステップＳ１５０、Ｓ１８０においては、スレッドに割り付けられた各単位ＨＴ処理は、各スレッドにおいて、すなわち図６（ｃ）の並びの順に沿って左から順に実行される。すなわち、スレッドへの割り付けにおいて先に割り付けられた単位ＨＴ処理ほど、実際の色変換処理においても先に実行される。
【００７３】
第１種の単位ＨＴ処理において実行される誤差拡散法によるハーフトーン処理は、ディザ法によるハーフトーン処理に比べて条件分岐が多い。このため、誤差拡散法によるハーフトーン処理においては、ＣＰＵは、あらかじめ先読みされてキャッシュメモリ内に格納されている命令やデータをそのまま使用することができない。そして、ＣＰＵは、頻繁にメインメモリに命令やデータを読み込みに行く。その結果、処理の実行中にメインメモリからのデータの転送を待つ必要があり、キャッシュメモリ内にあらかじめ格納されている命令やデータを使用できる場合に比べてＣＰＵの処理効率が低下する。そして、ハイパースレッディング・テクノロジによる並列処理において、二つのスレッドがいずれも誤差拡散法によるハーフトーン処理を実行する場合には、いずれのスレッドもメインメモリからのデータの転送を待つことが多くなり、処理が停滞することとなる。
【００７４】
一方、第２種の単位ＨＴ処理において実行されるディザ法によるハーフトーン処理は、誤差拡散法によるハーフトーン処理に比べて条件分岐が少ない。このため、ディザ法によるハーフトーン処理においては、ＣＰＵは、キャッシュメモリ内にあらかじめ先読みされて格納されている命令やデータを使用することができる。よって、ハイパースレッディング・テクノロジによる並列処理において、一方のスレッドが誤差拡散法によるハーフトーン処理を実行している場合に、他方のスレッドでディザ法を実行することとすれば、誤差拡散法によるハーフトーン処理がメインメモリからのデータの転送を待っている間、他方の処理はキャッシュメモリ内の命令やデータを使用して処理を進めることができる。その結果、処理効率が向上し、短時間で全色のハーフトーン処理を完了することができる。
【００７５】
第１の実施形態では、先頭グループＧ１として、誤差拡散法による第１種の単位ＨＴ処理とディザ法による第２種の単位ＨＴ処理とを一つずつ選択している。そして、それらを各スレッドにおいて最初に実行させている（図６（ｃ）参照）。このため、少なくともある画像領域（図４の対象ラスタラインＬＬｓ（ｉ）参照）のハーフトーン処理の開始時において、誤差拡散法が両スレッドで並行処理されることがない。このため、少なくとも各画像領域のハーフトーン処理の開始時においては、両スレッドの処理がともにメインメモリから送られてくるデータを待って、停滞してしまうということがない。その結果、コンピュータの資源が有効に活用され、結果として処理の効率が高くなる。
【００７６】
さらに、第１の実施形態においては、ステップＳ４０において、第１種の単位ＨＴ処理から始めて、第１種と第２種の単位ＨＴ処理を負荷の大きい順に交互に、中間グループＧ２の単位ＨＴ処理に順位付けする。そして、ステップＳ７０において、すでに割り当てられた単位ＨＴ処理の負荷の合計が最も少ないスレッドに、ステップＳ４０の順位に沿って中間グループＧ２の単位ＨＴ処理を割り付ける。このような態様とすることで、誤差拡散法による第１種の単位ＨＴ処理とディザ法による第２種の単位ＨＴ処理が、二つのスレッドで並行して処理されやすくなる。その結果、コンピュータの資源が有効に活用され、結果として処理の効率が高くなる。
【００７７】
なお、処理の切り替えの際のオーバーヘッドを無視すると、図６（ｃ）は、ガントチャートとして把握することができる。第１種の単位ＨＴ処理と第２種の単位ＨＴ処理は、図６（ｃ）にＰｐ１１、Ｐｐ１２、Ｐｐ１３で示す時間区間だけ、並行して処理されることとなる。第１の実施形態においては、第２種の単位ＨＴ処理は、すべて第１種の単位ＨＴ処理と並行して実行されている。
【００７８】
なお、第１の実施形態では、先頭グループＧ１と中間グループＧ２とを分類して処理した。しかし、第１の実施形態のように、第１種と第２種の単位ＨＴ処理が交互に並ぶように中間グループＧ２内の順位付けを行う場合は、先頭グループＧ１と中間グループＧ２とを分類せず、まとめて中間グループＧ２として処理しても、同様の結果が得られる。すなわち、第１種と第２種の単位ＨＴ処理とが、各スレッドにおいて最初に実行されることになる。よって、先頭グループＧ１と中間グループＧ２とを分類しない態様としても同様の効果が得られる。
【００７９】
Ｃ．第２の実施形態．
第２の実施形態は、図５における中間グループＧ２の順位付けの仕方が第１の実施形態とは異なる。また、図３のステップＳ１５０、Ｓ１８０においては、図５のステップＳ７０で各スレッドに割り付けた順番とは異なる順番で、各単位ＨＴ処理が実行される。他の点は、第１の実施形態と同じである。
【００８０】
図７は、第２の実施形態における、単位ＨＴ処理の割り付けの手順を示す説明図である。図７（ａ）は、各単位ＨＴ処理の見積もり負荷を表す図である。図中の各表記は、図６と同じである。第２の実施形態においては、図５のステップＳ４０における中間グループＧ２内の順位付けは、各単位ＨＴ処理が第１種の単位ＨＴ処理であると第２種の単位ＨＴ処理であるとを問わず、見積もり負荷の大きい順に行われる。その結果、各単位ＨＴ処理の優先順位は、図７（ｂ）に示すようになる。
【００８１】
図７（ｃ）は、第２の実施形態において、第１と第２のスレッドに割り付けられた単位ＨＴ処理を示す説明図である。図５のステップＳ７０では、第１の実施形態と同様に、ハーフトーンモジュール９９が、ステップＳ６０で決定した順位に沿って、各単位ＨＴ処理を第１のスレッドと第２のスレッドに割り付ける。その結果、第１のスレッドには、シアン、ライトマゼンタ、ダークイエローの単位ＨＴ処理が割り当てられ、第２のスレッドには、マゼンタ、ライトシアン、ブラック、イエローの単位ＨＴ処理が割り当てられる。
【００８２】
図８は、第２の実施形態の各スレッドにおける単位ＨＴ処理の実行順序を示す図である。各単位ＨＴ処理は、左から右に向かう順に実行される。第２の実施形態では、図３のステップＳ１５０において、第１のスレッドで、先頭グループＧ１のシアンの単位ＨＴ処理が最初に実行される。次に、図８に示すように、残りの第１種の単位ＨＴ処理であるライトマゼンタの単位ＨＴ処理が実行される。その後、第２種の単位ＨＴ処理であるダークイエローの単位ＨＴ処理が実行される。
【００８３】
一方、図３のステップＳ１８０においては、第２のスレッドで、先頭グループＧ１のマゼンタの単位ＨＴ処理が最初に実行される。次に、図８に示すように、残りの第２種の単位ＨＴ処理であるイエローの単位ＨＴ処理が実行される。その後、第１種の単位ＨＴ処理であるライトシアン、ブラックの単位ＨＴ処理を実行する。第１のスレッドでは、第１種の単位ＨＴ処理を先に実行し、第２のスレッドでは、第２種の単位ＨＴ処理を先に実行することで、以下のような効果が得られる。すなわち、第１種と第２種の単位ＨＴ処理がより並列処理されやすくなる。その結果、処理効率が向上し、短時間で全色のハーフトーン処理を完了することができる。
【００８４】
たとえば、図７（ｃ）の割り付けの順番で各スレッドにおいて単位ＨＴ処理を実行した場合には、ライトシアンとブラックの第１種の単位ＨＴ処理は、同じく第１種の単位ＨＴ処であるシアンとライトマゼンタの単位ＨＴ処理を並列処理されることとなる。すなわち、時間区間Ｔ２１の間、誤差拡散法による第１種の単位ＨＴ処理が並列処理される。しかし、図８のような順番で単位ＨＴ処理を実行することで、ブラックの第１種の単位ＨＴ処理は、一部において、第２種の単位ＨＴ処理であるダークイエローの単位ＨＴ処理と並列処理されることとなる。また、シアンの第１種の単位ＨＴ処理は、マゼンタに加えて、イエローの第２種の単位ＨＴ処理と並列処理されることとなる。すなわち、誤差拡散法による第１種の単位ＨＴ処理が並列処理されるのは、時間区間Ｔ２２の間である。図７（ｃ）と図８から分かるように、Ｔ２２は、Ｔ２１よりも短い。なお、誤差拡散法による第１種の単位ＨＴ処理と、ディザ法による第２種の単位ＨＴ処理が並列処理される時間を、図７（ｃ）においてＰｐ２１，Ｐｐ２２で示し、図８においてＰｐ３１，Ｐｐ３２で示す。
【００８５】
Ｄ．第３の実施形態．
図９は、第３の実施形態において、第１〜第３のスレッドに割り付けられた単位ＨＴ処理を示す説明図である。第３の実施形態においては、スレッドは３個ある。他の点は、第１の実施形態と同じである。
【００８６】
図５のステップＳ６０において、図６（ｂ）のように各単位ＨＴ処理に順位付けがされたとする。なお、第３の実施形態では、先頭グループＧ１の単位ＨＴ処理の数は、スレッドの数よりも少ない。その後、図５のステップＳ７０で、各単位ＨＴ処理が割り付けられる。その際の方法は、第１の実施形態と同じである。すなわち、最初に先頭グループＧ１の単位ＨＴ処理を各スレッドに割り付け、その後、中間グループおよび末尾グループの単位ＨＴ処理を、優先順位に従って、割り付けられた単位ＨＴ処理の合計負荷がもっとも少ないスレッドに割り付ける。
【００８７】
このような態様としても、誤差拡散法による第１種の単位ＨＴ処理と、ディザ法による第２種の単位ＨＴ処理とが並列処理されやすいように、単位ＨＴ処理をスレッドに割り付けることができる。たとえば、図９に示されるように、第３の実施形態においても、第２種の単位ＨＴ処理は、すべて、第１種の単位ＨＴ処理と並列処理されている。すなわち、第１種と第２種の単位ＨＴ処理の並列処理は、最大限、実現されている。また、第３の実施形態においても、第１および第２の実施形態と同様、各スレッド間の負荷の均等化も図ることができる。
【００８８】
Ｅ．変形例．
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
【００８９】
Ｅ１．変形例１：
上記各実施形態では、各スレッドに対象ラスタラインＬＬｓ（ｉ）のすべての単位ＨＴ処理を割り当てた後、各スレッドで割り当てられた単位ＨＴ処理を実行していた（図３および図５参照）。しかし、各スレッド単位ＨＴ処理を実行しつつ、次に処理すべき単位ＨＴ処理を各スレッドに割り当てる、いわゆるリアルタイムスケジューリングを行うこともできる。そのような場合には、処理すべき単位ＨＴ処理が最初になくなるスレッド対して、各実施形態と同様の優先順位に従って選択した単位ＨＴ処理を一つ割り当てて、それを実行させるようにすることができる。このような態様とすれば、それまでに割り付けた単位ＨＴ処理の実際の負荷が少ないことが判明したスレッドに、新たに次の単位ＨＴ処理を割り付けることができる。このため、スレッド間の負荷のばらつきを小さくするように単位ＨＴ処理を処理部に割り付ける際、負荷の見積もりと実際の処理時間とのずれに影響されにくい。
【００９０】
Ｅ２．変形例２：
上記実施形態では、スレッドは２個または３個であった。しかし、スレッドは４以上設けるものとしてもよい。ただし、本発明の上記各態様は、単位処理を実行するためのスレッドの数が単位処理の数よりも少ない場合に適用すると、特に効果的である。スレッドが３以上ある態様においては、単位ＨＴ処理を事前に割りあてる際には、３以上あるスレッドのうちすでに割り当てられた単位処理の負荷の合計が最も少ないスレッドに、まだスレッドに割り当てられていない単位処理のうちの一つを割り当てることが好ましい。そして、ハーフトーン処理を実行しつつ単位ＨＴ処理を割りあてる際には、３以上あるスレッドのうちすでに割り当てられた単位処理の実行を最も早く完了したスレッドに、単位処理を処理部に割り当てることが好ましい。
【００９１】
上記各実施形態では、コンピュータの一つのＣＰＵが、ハイパースレッディングによって複数のスレッドで単位ＨＴ処理を実行していた。しかし、各単位ＨＴ処理は、複数のＣＰＵで分担して実行することもできる。そのような態様においても、上記各実施形態と同様の手順で、各ＣＰＵ間の負荷のばらつきが小さくなるように各ＣＰＵに各単位ＨＴ処理を割り付けることができる。
【００９２】
また、上記各実施形態では、スレッドは２個または３個に固定されていた。しかし、ハイパースレッディングにおいて生成するスレッドの数や、マルチＣＰＵのコンピュータにおいて使用するＣＰＵの数を、状況に応じて変えることができる態様とすることもできる。たとえば、本発明の実施態様の一つである画像処理装置は、スレッドの数を１とする動作モードと、スレッドの数を２とする動作モード、スレッドの数を３とする動作モードなど、複数の動作モードを有する態様とすることができる。スレッドやＣＰＵなどの処理部が２以上の場合は、上記各実施形態と同様の手順で負荷の割り付け、および実行順序の決定を行うことができる。処理部が一つである場合は、あらかじめ定められた順序に沿って、その処理部上で各単位処理を実行する態様とすることができる。
【００９３】
Ｅ３．変形例３：
上記実施形態においては、最初に処理すべき単位ＨＴ処理の数は、２個であった。しかし、最初に処理すべき単位ＨＴ処理の数は、３個以上であってもよい。ただし、その数は、スレッド（処理部）の数以下である。そして、最初に処理すべき単位ＨＴ処理の集合は、互いに異なる複数種類の単位処理を含むことが好ましい。さらに、単位処理が２種類であって、最初に処理すべき単位ＨＴ処理の数が処理部の数と等しい場合には、以下のようにすることが好ましい。すなわち、最初に処理すべき単位ＨＴ処理の集合（先頭グループＧ１）内において、一方の種類の単位処理の数が、他方の種類の単位処理の数の３０〜７０％であることが好ましく、４０〜６０％であることがより好ましい。そして、一方の種類の単位処理の数が、他方の種類の単位処理の数の４５〜５５％であることがさらに好ましく、他方の種類の単位処理の数と同数プラスマイナス１であることがさらに好ましい。
【００９４】
Ｅ４．変形例４：
上記各実施形態においては、各単位ＨＴ処理の負荷の見積もりの際には、直前にハーフトーン処理を行った領域ＬＬｓ（ｉ−１）についての各単位ＨＴ処理の処理時間を、対応するインク色の単位ＨＴ処理の負荷とした。しかし、単位ＨＴ処理の負荷の見積もりは他の値に基づいて行うこともできる。たとえば、直前にハーフトーン処理を行った領域ＬＬｓ（ｉ−１）内における各インク色のドットの発生量または発生確率を、次にハーフトーン処理を行う領域ＬＬｓ（ｉ）についての各単位ＨＴ処理の負荷とすることができる。
【００９５】
また、ハーフトーン処理の方法が同じ単位ＨＴ処理については、負荷を一律に定めてもよい。たとえば、ディザ法によるハーフトーン処理を行う単位ＨＴ処理の負荷を１とし、誤差拡散法によるハーフトーン処理を行う単位ＨＴ処理の負荷を３としてもよい。さらに、ハーフトーン処理の方法と、上述した処理時間やドットの発生量または発生確率を組み合わせて、負荷を定めてもよい。たとえば、ディザ法によるハーフトーン処理を行う単位ＨＴ処理の負荷を１×［ドット発生確率］とし、誤差拡散法によるハーフトーン処理を行う単位ＨＴ処理の負荷を３×［ドット発生確率］としてもよい。すなわち、単位処理の負荷の見積もりは、直前に実行された処理集合に含まれる各単位処理の実行結果を考慮して定めるものとすればよい。
【００９６】
Ｅ５．変形例５：
上述した各実施形態では、最後にスレッドに割り付けられる末尾グループＧ３は、１個の単位ＨＴ処理を含んでいた。しかし、末尾グループＧ３が含む単位ＨＴ処理の数は２個であってもよいし、３個以上であってもよい。すなわち、先頭および中間グループの後でスレッドに割り付けられる末尾グループは、１以上の単位処理を含むものとすることができる。そして、先頭および中間グループの単位ＨＴ処理に比べて、見積もり負荷が小さい単位ＨＴ処理であることが好ましい。
【００９７】
Ｅ６．変形例６：
第２の実施形態では、第１のスレッドにおいて、最初に実行されるべき先頭グループＧ１のシアンの単位ＨＴ処理を含めて、第１種の単位ＨＴ処理が、第２種の単位ＨＴ処理に先立って実行されていた（図８参照）。そして、第２のスレッドにおいては、最初に実行されるべき先頭グループＧ１のマゼンタの単位ＨＴ処理を含めて、第２種の単位ＨＴ処理が、第１種の単位ＨＴ処理に先立って実行されていた。しかし、最初に実行されるべき先頭グループＧ１の単位ＨＴ処理の種類と、その後に、優先的に処理される単位ＨＴ処理の種類は異なっていてもよい。
【００９８】
たとえば、最初に実行されるべき先頭グループＧ１の単位ＨＴ処理が第１種の単位処理であるとき、その第１種の単位ＨＴ処理の後は、第２種の単位処理を優先的にまとめて実行し、その後に、再び第１種の単位処理を実行してもよい。すなわち、単位処理の実行に際して、少なくとも一つの処理部に、少なくとも一つの第１種の単位処理よりも先に、複数の第２種の単位処理を連続して実行させ、少なくとも他の一つの処理部に、少なくとも一つの第２種の単位処理よりも先に、複数の第１種の単位処理を連続して実行させるような態様とすることができる。なお、少なくとも一つの処理部に、割り当てられたすべての第１種の単位処理を、割り当てられたすべての第２種の単位処理の前に実行させ、他の一つの処理部に、割り当てられたすべての第２種の単位処理を、割り当てられたすべての第１種の単位処理の前に実行させる態様とすることは、より好ましい。
【００９９】
Ｅ７．変形例７：
印刷画像データＦＮＬを受け取るプリンタ２２が、同じインク色について大中小などの複数種類の大きさのドットを形成することができる場合には、ハーフトーン処理は、各インク色の各ドットの種類の単位で行われる。上記各実施形態では、単位ＨＴ処理は各インク色ごとのハーフトーン処理であったが、このような態様においては、単位ＨＴ処理は、各インク色の各ドットの種類の単位のハーフトーン処理とすることができる。
【０１００】
Ｅ８．変形例８：
上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。例えば、プリンタドライバ９６（図１参照）の機能の一部をプリンタのＣＰＵ４１が実行するようにすることもできる。
【０１０１】
このような機能を実現するコンピュータプログラムは、フロッピディスクやＣＤ−ＲＯＭ等の、コンピュータ読み取り可能な記録媒体に記録された形態で提供される。ホストコンピュータは、その記録媒体からコンピュータプログラムを読み取って内部記憶装置または外部記憶装置に転送する。あるいは、通信経路を介してプログラム供給装置からホストコンピュータにコンピュータプログラムを供給するようにしてもよい。コンピュータプログラムの機能を実現する時には、内部記憶装置に格納されたコンピュータプログラムがホストコンピュータのマイクロプロセッサによって実行される。また、記録媒体に記録されたコンピュータプログラムをホストコンピュータが直接実行するようにしてもよい。
【０１０２】
この明細書において、コンピュータとは、ハードウェア装置とオペレーションシステムとを含む概念であり、オペレーションシステムの制御の下で動作するハードウェア装置を意味している。コンピュータプログラムは、このようなコンピュータに、上述の各部の機能を実現させる。なお、上述の機能の一部は、ドライバやアプリケーションプログラムでなく、オペレーションシステムによって実現されていても良い。
【０１０３】
なお、この発明において、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスクやＣＤ−ＲＯＭのような携帯型の記録媒体に限らず、各種のＲＡＭやＲＯＭ等のコンピュータ内の内部記憶装置や、ハードディスク等のコンピュータに固定されている外部記憶装置も含んでいる。
【図面の簡単な説明】
【０１０４】
【図１】第１の実施形態の印刷システムのソフトウェアの構成を示すブロック図。
【図２】コンピュータ９０のＣＰＵ９０ａ内における処理を示すブロック図。
【図３】色変換処理とハーフトーン処理の具体的な処理の流れを示すフローチャート。
【図４】色変換処理とハーフトーン処理を行うラスタラインＬＬｓ（ｉ）を示す説明図。
【図５】図３のステップＳ１３０における各色の単位ＨＴ処理のスレッドへの割り付けの手順を示すフローチャート。
【図６】単位ＨＴ処理の割り付けの手順を示す説明図。
【図７】第２の実施形態における、単位ＨＴ処理の割り付けの手順を示す説明図。
【図８】第２の実施形態の各スレッドにおける単位ＨＴ処理の実行順序を示す図。
【図９】第３の実施形態において、第１〜第３のスレッドに割り付けられた単位ＨＴ処理を示す説明図。
【符号の説明】
【０１０５】
２１...ＣＲＴディスプレイ
２２...プリンタ
２８...印刷ヘッド
３１...キャリッジ
３２...操作パネル
４１...ＣＰＵ
４２...ＲＯＭ
９０...コンピュータ
９０ａ...ＣＰＵ
９１...ビデオドライバ
９５...アプリケーションプログラム
９６...プリンタドライバ
９７...解像度変換モジュール
９８...色変換モジュール
９９...ハーフトーンモジュール
９９ａ...割り付け部
９９ｂ...２値化部
９９ｃ...第１のスレッド
９９ｄ...第２のスレッド
１００...並べ替えモジュール
１０４...色変換テーブル
１０５...負荷記憶部
１２０...キーボード
１３０...マウス
２１０...命令キャッシュ
２２０...命令フェッチユニット
２２２，２３２，２４２...バッファ
２３０...命令デコーダ
２３２...バッファ
２４０...演算ユニット
２５０...データキャッシュ
Ａｄ...色変換処理およびハーフトーン処理がすでに行われた領域
Ａｙ...色変換処理およびハーフトーン処理が行われていない領域
ＦＮＬ...印刷画像データ
Ｇ１...先頭グループ
Ｇ２...中間グループ
Ｇ３...末尾グループ
ＬＬｓ（ｉ−１）...参照ラスタライン
ＬＬｓ（ｉ）...対象ラスタライン
Ｌｃ...シアンの単位ＨＴ処理の負荷
Ｌｄｙ...の単位ＨＴ処理の負荷
Ｌｌｃ...の単位ＨＴ処理の負荷
Ｌｌｍ...の単位ＨＴ処理の負荷
Ｌｍ...の単位ＨＴ処理の負荷
Ｌｙ...の単位ＨＴ処理の負荷
ＭＩＤ１...解像度変換後の画像データ
ＭＩＤ２...色変換後の画像データ
ＭＩＤ３...ハーフトーン処理後の画像データ
ＭＳ...キャリッジの移動方向（主走査方向）
ＯＲＧ...原画像データ
Ｐ...用紙
ＰＩＤ...初期画像データ
ＳＳ...印刷用紙の搬送方向（副走査方向）
Ｔ２１...時間区間
Ｔ３１...時間区間
【図１】
2006065459.tif 000003
【図２】
2006065459.tif 000004
【図３】
2006065459.tif 000005
【図４】
2006065459.tif 000006
【図５】
2006065459.tif 000007
【図６】
2006065459.tif 000008
【図７】
2006065459.tif 000009
【図８】
2006065459.tif 000010
【図９】
2006065459.tif 000011