(57)【要約】      （修正有）【課題】描画オブジェクトレベルでのパイプライン並列化を行いつつ、描画オブジェクト単位でのオーバーヘッドの発生なしに、最適な並列化処理を行って印刷装置の生産性を向上させること。【解決手段】印刷ジョブに含まれるＰＤＬデータを解析して描画オブジェクトを生成するＰＤＬ解析処理、描画オブジェクトを最適化する描画最適化処理、及び最適化された描画オブジェクトからディスプレイリストを生成するＤＬ生成処理を含むＰＤＬ処理を行うにあたって、ＰＤＬ構成決定処理２２１が、ＰＤＬデータの種類、ＰＤＬデータを生成したアプリケーションプログラムの種類、ＰＤＬデータの圧縮の有無等に従って、ＰＤＬ処理を構成する各処理の処理負荷を特定し、各処理の処理負荷に基づいてパイプライン分割処理２６１により分割されるＰＤＬ処理の各パイプラインに割り当てる処理を決定し、ＣＰＵの複数のコアで各パイプラインにおける処理を実行する。【選択図】図２
2013028012.tif 000002
【特許請求の範囲】
【請求項１】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を行う印刷装置であって、
少なくとも前記ＰＤＬデータのページ記述言語の種類、及び前記ＰＤＬデータを生成したアプリケーションプログラムの種類に従って、前記ＰＤＬ処理に含まれる各処理の処理負荷を特定し、前記ＰＤＬ処理に含まれる各処理を複数のパイプラインの内の何れのパイプラインに割り当てるかを該特定した各処理の処理負荷に基づき決定する決定手段と、
前記ＰＤＬ処理に含まれる各処理を前記決定に基づき分割する分割処理を行う分割手段と、
前記分割手段により分割された各パイプラインにおける処理を実行する複数の実行手段と、
を有することを特徴とする印刷装置。
【請求項２】
前記決定手段は、前記特定した各処理の処理負荷に基づいて、処理量が最大となるパイプラインの処理量が最少となるように、各パイプラインに割り当てる処理を決定する、ことを特徴とする請求項１に記載の印刷装置。
【請求項３】
前記決定手段は、前記処理量が最大となるパイプラインの処理量が同一の場合には、全てのパイプラインの処理量の合計が最少となるように、各パイプラインに割り当てる処理を決定する、ことを特徴とする請求項２に記載の印刷装置。
【請求項４】
前記最適化処理を行うアルゴリズムのそれぞれ異なる複数の最適化手段を有し、
前記決定手段は、前記特定した各処理の処理負荷に基づいて、前記最適化処理に用いる最適化手段を決定する、ことを特徴とする請求項１乃至３のいずれか１項に記載の印刷装置。
【請求項５】
前記決定手段は、前記特定した各処理の処理負荷に基づいて、処理量が最大となるパイプラインの処理量が最少となるように、前記最適化処理に用いる最適化手段を決定する、ことを特徴とする請求項４に記載の印刷装置。
【請求項６】
前記決定手段は、前記処理量が最大となるパイプラインの処理量が同一の場合には、全てのパイプラインの処理量の合計が最少となるように、前記最適化処理に用いる最適化手段を決定する、ことを特徴とする請求項５に記載の印刷装置。
【請求項７】
前記解析処理を行うそれぞれ異なるページ記述言語の種類に対応した複数の解析手段を有し、
前記決定手段は、前記ＰＤＬデータのページ記述言語の種類に応じて前記解析処理に用いる解析手段を決定する、ことを特徴とする請求項１乃至６のいずれか１項に記載の印刷装置。
【請求項８】
前記解析処理の出力と、前記最適化処理の入出力と、前記生成処理の入力と、前記分割処理の入出力とが、全て同一のインタフェースであり、
前記決定手段は、前記分割処理を、前記解析処理と前記最適化処理の間、又は前記最適化処理と前記生成処理の間に配置することにより、各パイプラインで行う処理を制御することを特徴とする請求項１乃至７のいずれか１項に記載の印刷装置。
【請求項９】
前記決定手段は、前記印刷ジョブに各パイプラインに割り当てる処理を指定するデータが含まれる場合、前記各パイプラインに割り当てる処理を指定するデータに従って、各パイプラインに割り当てる処理を決定する、ことを特徴とする請求項１乃至８のいずれか１項に記載の印刷装置。
【請求項１０】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を複数のパイプラインに分割して行う印刷装置に、前記印刷ジョブを送信する情報処理装置であって、
前記ＰＤＬデータの各ページのデータを、前記印刷装置の各パイプラインで処理した場合の各パイプラインの処理量を算出する処理量算出手段と、
前記処理量算出手段の算出した各パイプラインの処理量に基づいて、各パイプラインに割り当てる処理を決定するパイプライン処理決定手段と、
前記パイプライン処理決定手段で決定された各パイプラインに割り当てる処理を指定するデータを、ページ毎に前記印刷ジョブに付加する付加手段と、
を有することを特徴とする情報処理装置。
【請求項１１】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を複数のパイプラインに分割して行う印刷装置と、前記印刷装置に前記印刷ジョブを送信する情報処理装置とを有する印刷システムであって、
前記印刷装置は、
前記印刷ジョブに含まれる各パイプラインに割り当てる処理を指定するデータに従って、前記ＰＤＬ処理に含まれる各処理を複数のパイプラインの内の何れのパイプラインに割り当てるかを決定する決定手段と、
前記ＰＤＬ処理に含まれる各処理を前記決定に基づき分割する分割処理を行う分割手段と、
前記分割手段により分割された各パイプラインにおける処理を実行する複数の実行手段と、を有し、
前記情報処理装置は、
前記ＰＤＬデータの各ページのデータを、前記印刷装置の各パイプラインで処理した場合の各パイプラインの処理量を算出する処理量算出手段と、
前記処理量算出手段の算出した各パイプラインの処理量に基づいて、各パイプラインに割り当てる処理を決定するパイプライン処理決定手段と、
前記パイプライン処理決定手段で決定された各パイプラインに割り当てる処理を指定するデータを、ページ毎に前記印刷ジョブに付加する付加手段と、を有する、
ことを特徴とする印刷システム。
【請求項１２】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を行い、前記中間データから印刷画像を生成して印刷を行う印刷装置における印刷制御方法であって、
決定手段が、少なくとも前記ＰＤＬデータのページ記述言語の種類、及び前記ＰＤＬデータを生成したアプリケーションプログラムの種類に従って、前記ＰＤＬ処理に含まれる各処理の処理負荷を特定し、前記ＰＤＬ処理に含まれる各処理を複数のパイプラインの内の何れのパイプラインに割り当てるかを該特定した各処理の処理負荷に基づき決定する決定ステップと、
分割手段が、前記ＰＤＬ処理に含まれる各処理を前記決定に基づき分割する分割処理を行う分割ステップと、
複数の実行手段が、前記分割ステップで分割された各パイプラインにおける処理を実行する複数の実行ステップと、
を有することを特徴とする印刷制御方法。
【請求項１３】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を複数のパイプラインに分割して行う印刷装置に、前記印刷ジョブを送信する情報処理装置における印刷制御方法であって、
処理量算出手段が、前記ＰＤＬデータの各ページのデータを、前記印刷装置の各パイプラインで処理した場合の各パイプラインの処理量を算出する処理量算出ステップと、
パイプライン処理決定手段が、前記処理量算出ステップの算出した各パイプラインの処理量に基づいて、各パイプラインに割り当てる処理を決定するパイプライン処理決定ステップと、
付加手段が、前記パイプライン処理決定ステップで決定された各パイプラインに割り当てる処理を示すデータを、ページ毎に前記印刷ジョブに付加する付加ステップと、
を有することを特徴とする印刷制御方法。
【請求項１４】
印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を複数のパイプラインに分割して行う印刷装置と、前記印刷装置に前記印刷ジョブを送信する情報処理装置とを有する印刷システムにおける印刷制御方法であって、
前記情報処理装置の処理量算出手段が、前記ＰＤＬデータの各ページのデータを、前記印刷装置の各パイプラインで処理した場合の各パイプラインの処理量を算出する処理量算出ステップと、
前記情報処理装置のパイプライン処理決定手段が、前記処理量算出ステップで算出した各パイプラインの処理量に基づいて、各パイプラインに割り当てる処理を決定するパイプライン処理決定ステップと、
前記情報処理装置の付加手段が、前記パイプライン処理決定ステップで決定された各パイプラインに割り当てる処理を指定するデータを、ページ毎に前記印刷ジョブに付加する付加ステップと、
前記印刷装置の決定手段が、前記印刷ジョブに含まれる各パイプラインに割り当てる処理を指定するデータに従って、前記ＰＤＬ処理に含まれる各処理を複数のパイプラインの内の何れのパイプラインに割り当てるかを決定する決定ステップと、
前記印刷装置の分割手段が、前記ＰＤＬ処理に含まれる各処理を前記決定ステップでの決定に基づき分割する分割処理を行う分割ステップと、
前記印刷装置の複数の実行手段が、前記分割ステップで分割された各パイプラインにおける処理を実行する複数の実行ステップと、
を有することを特徴とする印刷制御方法。
【請求項１５】
コンピュータを、請求項１乃至９のいずれか１項に記載された印刷装置の手段として機能させるためのプログラム。
【請求項１６】
コンピュータを、請求項１０に記載された情報処理装置の手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算ユニットを搭載した印刷装置の制御に関する。
【背景技術】
【０００２】
ページ記述言語（ＰＤＬ）を受信し、ＰＤＬを解析し、該ＰＤＬの解析に基づいてＲＩＰ処理をすることで出力画像を得る、プリンタや複合機等の印刷装置において、該処理を複数のＣＰＵで処理することにより高パフォーマンスを得る方法が複数提案されている。
【０００３】
ＰＤＬ処理及びＲＩＰ処理を複数のＣＰＵで並列処理する方法として、以下（１），（２）等に示す提案がなされている。
（１）複数ページが含まれるＰＤＬデータを、ページ毎に異なるＣＰＵで処理することにより、複数ページを並列処理する（ページ並列化）。
（２）ＰＤＬ処理とＲＩＰ処理、またはＰＤＬ処理内で行われる複数の処理をパイプライン化することでパイプライン並列処理する（パイプライン並列化）。
上記（１）のページ並列化では、複数のＰＤＬ解析処理が同時に動作するため、ＰＤＬ解析処理のワークメモリ及び、その出力結果を複数保持するためのメモリが、各処理単位（ＣＰＵ）で必要となる。また、単一ページのＰＤＬデータでは、並列処理を行うことができないため、高速化することが出来ないといった課題がある。
【０００４】
一方、上記（２）のパイプライン並列化では、ＰＤＬ処理とＲＩＰ処理をパイプラインステージに分割する場合、ＰＤＬ処理とＲＩＰ処理の処理量が必ずしも同一ではないため、最適な並列化にならないといった課題がある。
【０００５】
また、特許文献１及び特許文献２では、上記パイプライン並列化の課題に鑑み、ＰＤＬ処理とＲＩＰ処理の付加バランスを調整する提案がなされている。
特許文献１では、ＲＩＰ処理の一部の処理（重なり除去）をＰＤＬ処理でも実行出来る構成とし、ＰＤＬ処理とＲＩＰ処理の負荷予測に基づいて、負荷の軽いほうで重なり除去を行うことで、ＰＤＬ処理とＲＩＰ処理の負荷均等化を行っている。
【０００６】
特許文献２では、描画命令に基づいて、ＲＩＰ処理（描画情報生成処理）の処理量を算出し、処理量が多い場合には、ＲＩＰ処理を行っていない他のＣＰＵでも処理できるように分散することとで負荷均等化を行っている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−１２０１９６公報
【特許文献２】特開２０１０−２８２４８９公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１は、ページ単位でＲＩＰする構成が前提であり、単一ページの印刷ジョブが効果的に並列化することが出来ないといった課題がある。
また、特許文献２では、描画オブジェクト単位で処理量の算出を行うため、処理量算出のオーバーヘッドが多くなってしまうといった課題がある。
【０００９】
本発明は、上記の問題点を解決するためになされたものである。本発明の目的は、描画オブジェクトレベルでのパイプライン並列化を行いつつ、描画オブジェクト単位でのオーバーヘッドの発生なしに、最適な並列化処理を行って印刷装置の生産性を向上させる仕組みを提供することである。
【課題を解決するための手段】
【００１０】
本発明は、印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成する解析処理、前記描画オブジェクトを最適化する最適化処理、及び前記最適化された描画オブジェクトから印刷画像の生成が可能な中間データを生成する生成処理を含むＰＤＬ処理を行う印刷装置であって、少なくとも前記ＰＤＬデータのページ記述言語の種類、及び前記ＰＤＬデータを生成したアプリケーションプログラムの種類に従って、前記ＰＤＬ処理に含まれる各処理の処理負荷を特定し、前記ＰＤＬ処理に含まれる各処理を複数のパイプラインの内の何れのパイプラインに割り当てるかを該特定した各処理の処理負荷に基づき決定する決定手段と、前記ＰＤＬ処理に含まれる各処理を前記決定に基づき分割する分割処理を行う分割手段と、前記分割手段により分割された各パイプラインにおける処理を実行する複数の実行手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、描画オブジェクトレベルでのパイプライン並列化を行いつつ、描画オブジェクト単位でのオーバーヘッドの発生なしに、最適な並列化処理を行うことを可能にして、印刷装置の生産性を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例１を示す印刷装置のハードウェア構成の一例を示すブロック図である。
【図２】印刷装置１１０で動作するソフトウェアモジュールの構成の一例を示すブロック図である。
【図３】描画最適化処理Ａ２５１および描画最適化処理Ｂ２５２の行う最適化処理の一例を示す図である。
【図４】パイプライン分割処理２６１の構成の一例を示す図である。
【図５】実施例１におけるＰＤＬ印刷処理の一例を示すフローチャートである。
【図６】スプールバッファに格納されている印刷ジョブの一例を示す図である。
【図７】印刷装置１１０で取り得るＰＤＬ処理群モジュールのＰＤＬ構成の一例を示す図である。
【図８】ＰＤＬ構成決定処理２２１が構成の決定に利用するテーブルの一例を示す図である。
【図９】ＰＤＬ種が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータの圧縮が「なし」の場合のパフォーマンスのイメージ図である。
【図１０】実施例１における、従来例比較のためのパフォーマンスのイメージ図である。
【図１１】実施例２を示す印刷システムの一例を示すブロック図である。
【図１２】ホストコンピュータ１０１で動作するソフトウェアモジュールの構成の一例を示すブロック図である。
【図１３】ホストコンピュータ１０１のアプリケーション２９１で印刷装置１１０へ印刷指示が行われた時の動作を示すフローチャートである。
【図１４】プリンタドライバ２９２の生成する印刷ジョブの一例を示す図である。
【図１５】実施例２におけるＰＤＬ印刷処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について、図面を参照して説明する。
【実施例１】
【００１４】
＜コントローラハードウェア構成＞
図１は、本発明の実施例１を示す印刷装置のハードウェア構成の一例を示すブロック図である。
【００１５】
図１において、１１０は印刷装置（画像形成装置）である。１１１はパネルＵＩ（ユーザインタフェース）であり、印刷装置１１０の動作設定を行う。１１２はＣＰＵであり、図２以降で説明する印刷装置上で動作するソフトウェアは全てこの上で動作する。ＣＰＵ１１２は、２つの演算ユニット（コア）を搭載しており、２つの処理（例えば、後述するスレッドＡ，Ｂ）を並列処理可能である。
【００１６】
１１３はＲＡＭであり、ＣＰＵ１１２で動作するソフトウェアがデータ保存や自分自身の動作のために使用する。１１４はＲＯＭであり、ソフトウェア（プログラム）などをコンピュータ読取可能に保存する。１１６はネットワークインターフェース（ネットワークＩ／Ｆ）であり、印刷装置１１０はこのネットワークインターフェース１１６を介して、ネットワーク１９９上の各機器と通信可能である。
【００１７】
１１８はレンダラ（レンダラ）であり、ＲＡＭ１１３に格納されているディスプレイリスト（ＤＬ）を入力として、ラスタイメージ（印刷画像）を生成する。なお、このディスプレイリスト（ＤＬ）は、上述したＣＰＵ１１２上のソフトウェアにより生成されて、ＲＡＭ１１３に格納されたものであり、レンダラ１１８により、印刷画像の生成が可能な中間データである。
１１５はプリンタエンジンであり、上述したＣＰＵ１１２上で動作するソフトウェア及びレンダラ１１８が作り出すイメージデータの印刷を行う。
【００１８】
＜コントローラソフトウェア構成＞
図２は、印刷装置１１０で動作するソフトウェアモジュールの構成の一例を示すブロック図である。なお、図２中の全てのソフトウェアモジュールは、ＲＯＭ１１４上にコンピュータ読取可能に記録されたプログラムを、ＲＡＭ１１３をワークメモリとして利用して、ＣＰＵ１１２により実行することにより実体化される。以下、各ソフトウェアモジュールについて説明する。
【００１９】
ジョブコントロール処理２０５は、印刷装置１１０内の各ソフトウェアモジュールを統括し、印刷装置１１０で発生する印刷ジョブの制御を行う。
ネットワーク処理２１０は、ネットワークインターフェース１１６を制御することでネットワーク１９９に接続されている外部機器との通信制御を行う。ネットワーク処理２１０は、ネットワークインターフェース１１６を介して、ネットワーク１９９に接続されている各機器からの制御コマンドやデータを受信すると、その内容をジョブコントロール処理２０５へ通知する。また、ネットワーク処理２１０は、ジョブコントロール処理の指示に基づいてデータ（例えば印刷ジョブ）をＲＡＭ１１３上のスプールバッファに格納する。また、ネットワーク処理２１０は、ジョブコントロール処理２０５や他のソフトウェアモジュールの指示に基づき、ネットワーク１９９に接続されている各機器へ制御コマンドやデータの送信を行う。
【００２０】
ＰＤＬ判定処理２２０は、ＲＡＭ１１３上のスプールバッファにスプールされている印刷ジョブを参照して、ＰＤＬの種類及びＰＤＬデータを生成したアプリケーション種別や、ＰＤＬデータの圧縮の有無等を判定し、判定結果をＰＤＬ構成決定処理２２１へ通知する。
【００２１】
ＰＤＬ構成決定処理２２１は、ＰＤＬ判定処理２２０から通知された情報（上述の判定結果）とＰＤＬ判定処理２２０の管理するテーブル（図８）に基づいて、ＰＤＬ処理を構成する各処理（ＰＤＬ解析処理、描画最適化処理、ＤＬ生成処理）の処理負荷を特定し、該特定した各処理の処理負荷に基づいて、後述するＰＤＬ処理群２３０に属する各ソフトウェアモジュールの接続構成を決定する。即ち、パイプライン分割処理２６１により分割される各パイプラインで行う処理を決定する。ＰＤＬ構成決定処理２２１の動作については、後ほど詳述する。
【００２２】
ＰＤＬ処理群２３０は、印刷ジョブに含まれるページ記述言語で記載されたＰＤＬデータを解析して描画オブジェクトを生成するＰＤＬデータ解析処理、描画オブジェクトを最適化する描画最適化処理、及び最適化された描画オブジェクトから、レンダラ１１８が処理できるディスプレイリスト（ＤＬ）を生成するＤＬ生成処理を含むＰＤＬ処理を行うために動作するソフトウェアモジュール群である。ＰＤＬ処理群２３０は、ＰＤＬ解析処理群２４０と、描画最適化処理群２５０を含む。
【００２３】
本実施例では、ＰＤＬ解析処理群２４０には、ＰＤＬＡインタプリタ２４１と、ＰＤＬＢインタプリタ２４２が含まれる。ＰＤＬＡインタプリタ２４１及びＰＤＬＢインタプリタ２４２は、ＰＤＬの種類に対応したＰＤＬインタプリタモジュールである。
【００２４】
各ＰＤＬインタプリタは、それぞれのＰＤＬインタプリタ仕様に基づいてＰＤＬデータを解析して描画オブジェクトを生成し、共通描画ＩＦ（共通描画インタフェース）をコールする。共通描画ＩＦは、描画のためのパスの指定、クリップの指定、各ＲＯＰ（ラスタオペレーション）指定、アルファブレンド指定、ブラシの指定等の画像描画に係る機能を備えている。
【００２５】
ＰＤＬＡインタプリタ２４１が解析を行うＰＤＬＡの言語仕様は、直線のみで描画を指定するポリゴン描画や、イメージ描画、文字描画、ＲＯＰ指定等、基本的な描画命令だけで構成されるものである。一方、ＰＤＬＢインタプリタ２４２の解析を行うＰＤＬＢの言語仕様は、上記基本的な描画命令に加え、曲線でのパス指定、複雑なグラデーション指定等の高度な描画命令や、スタック操作や演算命令までを含む、プログラミング言語に近い複雑なものである。このように、ＰＤＬＡとＰＤＬＢはその言語仕様に由来する違いがあり、ＰＤＬＡインタプリタ２４１の処理量は、ＰＤＬＢインタプリタ２４２の処理量に比べて軽いものとなる。
【００２６】
描画最適化処理群２５０は、共通描画ＩＦで入力される複数の描画オブジェクトを最適化し、より簡単な描画オブジェクトにして、再度、共通描画ＩＦをコールする、ソフトウェアモジュール郡である。
【００２７】
本実施例では、描画最適化処理群２５０には、描画最適化処理Ａ２５１と描画最適化処理Ｂ２５２が含まれる。描画最適化処理Ａ２５１、及び描画最適化処理Ｂ２５２はそれぞれ、異なるアルゴリズムで描画オブジェクトの最適化を行う。描画最適化処理群２５０の各描画最適化処理は、ＰＤＬ処理群２３０に属するＰＤＬインタプリタが共通描画ＩＦをコールした内容を解析し最適化したのち、共通描画ＩＦをコールする。
【００２８】
ＤＬ生成処理２６０は、入力を共通描画ＩＦとして、レンダラ１１８用のＤＬをＲＡＭ１１３へ生成する。ＤＬ生成処理２６０では、各描画オブジェクトをＸＹソートする等、ソート処理が含まれるので、その処理量はＯ（ＮｌｏｇＮ）やＯ（Ｎ２）のオーダとなる。そのため、描画最適化処理群２５０の処理群で最適化処理を行い、結果としてＤＬ生成処理２６０に入力される描画オブジェクト数を減らすことは、全体の処理量を減らすことに大きく効果がある。ここで、図３を参照して、最適化処理について説明する。
【００２９】
図３は、描画最適化処理Ａ２５１および描画最適化処理Ｂ２５２の行う最適化処理の一例を示す図である。
図３（ａ）は、共通描画ＩＦから入力される複数のパスオブジェクトで構成される複雑な図形を検知し、１つのパスオブジェクトに変換して、再度、共通描画ＩＦで出力する処理である。
【００３０】
図３（ａ）に示す処理では、パスオブジェクトの色値や、ワインディングルール、他のオブジェクトの重なり等を考慮して結合の可否を決定する。結合に関しては、入力された複数のパスオブジェクトをプレレンダリングしてイメージ化し、そのイメージの外形を構成するパスを再構成する。結合の可否のアルゴリズムに関しては、対象とするパスオブジェクトの大きさや、結合後のパスオブジェクトの大きさ、異なる色値のオブジェクト間に入ってきた場合でも結合処理を継続するか等のバリュエーションがある。
【００３１】
描画最適化処理Ａ２５１では、同一色、同一のワインディングルール、及び他のオブジェクトと重なりがないパスオブジェクトが連続して入力されれば結合可能と判断する。また、描画最適化処理Ａ２５１では、結合対象の各パスのサイズを面積で４００００ｐｉｘｅｌまで、結合後のサイズを２５００００ｐｉｘｅｌまでとしている。
【００３２】
一方、描画最適化処理Ｂ２５２では、異なる色やワインディングルールのオブジェクトが含まれていても、結合後の描画結果に影響しない場合は結合可能と判断する。また、描画最適化処理Ｂ２５２では、結合対象の各パスのサイズを９００００ｐｉｘｅｌまで、結合後のサイズを１００００００ｐｉｘｅｌまでとする。
【００３３】
図３（ｂ）は、共通描画ＩＦから入力される、色値が異なる複数の矩形オブジェクトを検知し、該矩形オブジェクトがグラデーションを描画していると検知すると、１つのグラデーションオブジェクトに変換し、再度、共通描画ＩＦで出力する処理である。
【００３４】
図３（ｂ）に示す処理では、入力される各矩形オブジェクトが隣接しているか、色値の変化の度合いは一定か否か等を考慮し結合の可否を決定する。結合の可否のアルゴリズムについては、入力される矩形の角度が、０度または９０度（すなわち横方向や縦方向のグラデーション）に限定する、色値の変化が一定でない場合も結合する等の、バリュエーションがある。
【００３５】
描画最適化処理Ａ２５１では、連続して入力される矩形の角度が、０度または９０度であり、矩形の幅が均一で、色値の変化が一定であれば、色値が線形に変化するグラデーションオブジェクトに変換可能である。
【００３６】
一方、描画最適化処理Ｂ２５２では、矩形の角度に制限はなく、連続して入力される矩形が隣接していればよい。また、色値の変化も一定である必要はなく、色値の変化が非線形なグラデーションオブジェクトへの変換が可能である。
【００３７】
図３（ｃ）は、共通描画ＩＦから入力される、複数の小イメージを検知し、１つの大イメージに変換して、再度、共通描画ＩＦで出力する処理である。
描画最適化処理Ａ２５１では、連続して入力されてくる、小イメージがそれぞれ隣接していれば、結合し、１つの大イメージに変換する。一方、描画最適化処理Ｂ２５２では、連続してくる小イメージが５００×５００ｐｉｘｅｌの領域内であれば、隣接していても隣接していなくても結合し、１つの大イメージに変換する。
【００３８】
以下、図２の説明に戻る。
パイプライン分割処理２６１は、入力を共通描画ＩＦとし、入力された内容を、そのまま共通描画ＩＦをコールして出力する。パイプライン分割処理２６１は、入力の共通描画ＩＦをコールしているスレッドとは異なるスレッドで出力の共通描画ＩＦをコールすることにより、パイプラライン分割処理を実現する。ここで、図４を参照してパイプライン分割処理について説明する。
【００３９】
図４は、パイプライン分割処理２６１の構成の一例を示す図である。
スレッドＡでパイプライン分割処理２６１の入力側の共通描画ＩＦがコールされると、パイプライン分割処理２６１は、共通描画ＩＦでコールされた内容を描画オブジェクト化し、描画オブジェクトＦＩＦＯ４０１へ登録する。描画オブジェクトＦＩＦＯ４０１は、ＲＡＭ１１３上に構成されるＦＩＦＯ（ファーストインファーストアウト）キューである。
【００４０】
パイプライン分割処理２６１は、スレッドＡとは異なるスレッドＢ上のＦＩＦＯ監視モジュール４０２で描画オブジェクトＦＩＦＯ４０１の中身を監視している。ＦＩＦＯ監視モジュール４０２は、ＦＩＦＯ４０１に描画オブジェクトがあることを検知すると、ＦＩＦＯの先頭から描画オブジェクトを読み出し、共通描画ＩＦをコールする。
【００４１】
描画オブジェクトＦＩＦＯ４０１の容量は、最低限描画オブジェクト１つ分があれば動作可能であるが、動作の観点から複数の描画オブジェクトをキューイングできるサイズであることが好ましい。ただし、１ページ分の描画オブジェクトに対しては十分に小さな容量で良いことは言うまでもない。
【００４２】
以下、図２の説明に戻る。
ＲＩＰ処理２７０は、レンダラ１１８を制御することで、ＰＤＬ処理群２３０がＲＡＭ１１３に生成したＤＬをレンダリングしてラスタイメージを生成する。ＲＩＰ処理２７０は、生成したラスタイメージをＲＡＭ１１３上に構成されるイメージバッファに格納する。
【００４３】
印刷処理２８０は、プリンタエンジン１１５を制御し、ＲＩＰ処理２７０がＲＡＭ１１３のイメージバッファに格納したラスタイメージを読み出し、用紙上への印刷出力を行う。
【００４４】
＜ＰＤＬ印刷処理＞
ここで、本実施例に係る印刷装置１１０がネットワーク１９９上のホストコンピュータから、印刷ジョブを受信し用紙上へ印刷するまでの、ＰＤＬ印刷処理を図５のフローチャートを参照して説明する。
【００４５】
図５は、実施例１におけるＰＤＬ印刷処理の一例を示すフローチャートである。このフローチャートの処理は、図２に示したソフトウェアモジュールにより実行されるものである。即ち、このフローチャートの処理は、印刷装置１１０のＣＰＵ１１２がＲＯＭ１１４に記録されたプログラムを実行することにより実現されるものである。
【００４６】
印刷装置１１０のネットワーク処理２１０は、ネットワークインターフェース１１６を介して、印刷ジョブを受信すると、その旨をジョブコントロール処理２０５へ通知する。ジョブコントロール処理２０５は、印刷ジョブの通知を受けると、印刷ジョブに含まれる制御コマンドを解析してＰＤＬデータを含むか判定し、ネットワーク処理２１０に指示を行う。ネットワーク処理２１０は、ジョブコントロール処理２０５の指示に基づいて、印刷ジョブを順次ＲＡＭ１１３上のスプールバッファへスプールしていく。
【００４７】
ジョブコントロール処理２０５は、ＰＤＬ印刷処理を開始すると（Ｓ５００）、ＰＤＬ判定処理２２０を起動し、印刷ジョブに関し各種判定を行う（Ｓ５０１）。
ＰＤＬ判定処理２２０は、前記スプールバッファに格納されている印刷ジョブを解析し、ＰＤＬ種別、生成アプリケーションの種別、ＰＤＬデータの圧縮の有無等の判定を行う。
【００４８】
図６は、スプールバッファに格納されている印刷ジョブの一例を示す図である。
図６に示すように、印刷ジョブには、各種タグ情報として、ジョブ種別、ＰＤＬ種別、作成アプリケーション、ジョブオーナー、作成日時、ドライバーバージョン、圧縮の有無等の情報が含まれており、その後にＰＤＬデータの本体が含まれている。
【００４９】
ＰＤＬ判定処理２２０は、このタグ情報を解析することにより、容易に各種判定を行うことできる。また、印刷ジョブによっては、タグ情報がなく、ＰＤＬデータ中身の一部を解析することで、判定できる場合もある。
【００５０】
ＰＤＬ判定処理２２０が判定した各種判定結果は、ＰＤＬ構成決定処理２２１へ通知される。この通知に基づいて、ＰＤＬ構成決定処理２２１は、ＰＤＬ構成を決定する（Ｓ５０２）。ここで図７、図８を参照して、ＰＤＬ構成決定処理２２１の動作ついて詳述する。ＰＤＬ構成決定処理２２１は、ＰＤＬ処理群２３０内の各ソフトウェアモジュールの接続順序を制御する処理である。この接続順序を、以下、ＰＤＬ構成と呼称し記載する。
【００５１】
図７は、印刷装置１１０で取り得るＰＤＬ処理群モジュールのＰＤＬ構成の一例を示す図である。
本実施例では、ＰＤＬ構成として図７（ａ）の構成Ａと図７（ｂ）の構成Ｂを取り得る。図７（ａ）の構成Ａでは、ＰＤＬ解析処理群２４０のいずれかのＰＤＬインタプリタは、描画最適化処理群２５０のいずれかの描画最適化処理の共通描画ＩＦをコールする。また、描画最適化処理群２５０はパイプライン分割処理２６１の共通描画ＩＦをコールする。さらに、パイプライン分割処理２６１は、ＤＬ生成処理２６０の共通描画ＩＦをコールするように構成されている。
【００５２】
この構成Ａの場合、パイプライン分割処理２６１の上側の処理、すなわちＰＤＬ解析処理群２４０と描画最適化処理群２５０の処理は同一スレッド（図４に示したスレッドＡ）上で動作し、ＤＬ生成処理２６０は前記ＰＤＬ解析処理群２４０及び描画最適化処理群２５０とは異なるスレッド（図４に示したスレッドＢ）上で動作する。
【００５３】
一方、図７（ｂ）の構成Ｂでは、ＰＤＬ解析処理群２４０のいずれかのＰＤＬインタプリタは、パイプライン分割処理２６１の共通描画ＩＦをコールする。また、パイプライン分割処理２６１は、描画最適化処理群２５０のいずれかの描画最適化処理の共通描画ＩＦをコールする。さらに、描画最適化処理群２５０は、ＤＬ生成処理２６０の共通描画ＩＦをコールするように構成されている。
【００５４】
この構成Ｂの場合、パイプライン分割処理の下側、すなわち描画最適化処理群２５０及びＤＬ生成処理２６０は同一のスレッド（図４に示したスレッドＡ）上で動作するが、ＰＤＬ解析処理群２４０は描画最適化処理群２５０及びＤＬ生成処理２６０とは異なるスレッド（図４に示したスレッドＢ）上で動作する。
【００５５】
このようにパイプライン分割処理２６１の位置により、描画最適化処理群２５０がどちらのスレッド上で動作するか制御することができる。また、パイプライン分割処理２６１及び描画最適化処理群は同一の共通描画ＩＦを入出力としているため、容易にソフトウェアモジュールの接続構成を切り替えることが可能となっている。
【００５６】
ＰＤＬ構成決定処理２２１は、前記ＰＤＬ構成の決定の他に、ＰＤＬ構成内のＰＤＬ解析処理群２４０のうち、どのＰＤＬインタプリタ（すなわち、ＰＤＬＡインタプリタ２４１又はＰＤＬＢインタプリタ２４２のいずれか）を接続するかを決定する。ＰＤＬ構成決定処理２２１は、受信した印刷ジョブのＰＤＬ種別がＰＤＬＡの場合はＰＤＬＡインタプリタ２４１に、ＰＤＬＢの場合はＰＤＬＢインタプリタ２４２に決定する。
【００５７】
さらに、ＰＤＬ構成決定処理２２１は、描画最適化処理群２５０のうちどの描画最適化処理（すなわち描画最適化処理Ａ２５１及び描画最適化処理Ｂ２５２のいずれか）を接続するかを決定する。ここで図８を参照して、ＰＤＬ構成決定処理２２１による描画最適化処理群２４１の描画最適化処理及びＰＤＬ構成の決定アルゴリズムについて説明する。
ＰＤＬ構成決定処理２２１は、図８に例示するテーブルをＲＡＭ１１３上に構成している。
【００５８】
図８は、ＰＤＬ構成決定処理２２１が構成の決定に利用するテーブルの一例を示す図である。
図８のテーブルは、ＰＤＬ判定処理２２０の抽出した、ＰＤＬ種別、生成アプリケーションの種別、ＰＤＬデータの圧縮の有無毎に用意されており、描画最適化処理２５１は、各条件に応じて参照すべきテーブルを切り替える。以下、テーブルの例を示す。
【００５９】
図８（ａ−１）は、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ」、ＰＤＬデータの圧縮「なし」の場合に選択されるテーブルである。
また、図８（ａ−２）は、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ」、ＰＤＬデータの圧縮「あり」の場合に選択されるテーブルである。
また、図８（ｂ−１）は、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータの圧縮「なし」の場合に選択されるテーブルである。
また、図８（ｂ−２）は、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータの圧縮「あり」の場合に選択されるテーブルである。
同様に、図８（ｃ）は、ＰＤＬ種別が「ＰＤＬＢ」、作成アプリケーションが「ＣＡＤ」、ＰＤＬデータの圧縮「なし」の場合に選択されるテーブルである。
また、図８（ｄ）は、ＰＤＬ種別が「ＰＤＬＢ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータの圧縮「なし」の場合に選択されるテーブルである。
なお、ＰＤＬＢの場合は、ＰＤＬデータを圧縮してくるドライバ及びアプリケーションは存在しないため、圧縮ありの場合のテーブルを用意していない。もちろん、圧縮ありの場合のテーブルを用意してもよい。
【００６０】
各テーブルの各行は、描画最適化処理群２５０の各描画最適化処理を選択した場合の処理量を示す値が記載されている。
また、各テーブルの左側に配置されているテーブルの各列には、ＰＤＬ解析処理群２４０と描画最適化処理群２５０とＤＬ生成処理２６０の各処理の比率が記載されている。
例えば、描画最適化処理Ａを選択した７０１の行の例では、ＰＤＬインタプリタＡ２４１と描画最適化処理Ａ２５１とＤＬ生成処理２６０の処理の比率は「４：２：３」であること示している。一方、描画最適化処理Ｂを選択した７０２の行の例では、ＰＤＬインタプリタＡ２４１と描画最適化処理Ｂ２５２とＤＬ生成処理２６０の処理の比率は「４：３：３」であること示している。
【００６１】
また、各テーブルの右側に配置されているテーブルの各列には、各描画最適化処理を選択したときの、並列化処理を行った場合のクリティカルパス（最少処理量）の処理量及びシーケンシャル処理を行った場合の総合的な処理量、決定すべきＰＤＬ構成（図７の「構成Ａ」又は「構成Ｂ」）が記載されている。
【００６２】
なお、各テーブルの値は事前に、テストデータセットを用いて測定した結果をもとに決定した値であり、テーブルそのものは、印刷装置１１０に対してダウンロードで差し替えできるように構成してもよい。
【００６３】
ＰＤＬ構成決定処理２２１は、図８の右側の情報をもとに、使用する描画最適化処理（描画最適化処理Ａ又はＢ）を決定し、決定した描画最適化処理の行のＰＤＬ構成を参照して、ＰＤＬ構成（構成Ａ又は構成Ｂ）を決定する。
【００６４】
使用する描画最適化処理の決定は、クリティカルパスの処理量及び総合的な処理量を参照して行われる。すなわち、使用する描画最適化処理は、クリティカルパスの処理量が小さい方に決定する。クリティカルパスの処理量が同一である場合には、総合的な処理量が小さい方に決定する。
即ち、各パイプラインで行う処理のうち、処理量が最大となるパイプラインの処理量が最少となるように、描画最適化処理及び各パイプラインで行う処理を決定する。なお、前記処理量が最大となるパイプラインの処理量が同一の場合には、全てのパイプラインの処理量の合計が最少となるように、描画最適化処理及び各パイプラインで行う処理を決定する。
【００６５】
例えば、図５のＳ５０１でＰＤＬ判定処理２２０が抽出した情報が、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ」、ＰＤＬデータの圧縮「なし」である場合、Ｓ５０２では、図８（ａ−１）のテーブルが選択される。続いて、クリティカルパスの処理量では、描画最適化処理Ａの方が小さいため、描画最適化処理として「描画最適化処理Ａ２５１」が決定される。続いて、決定された「描画最適化処理Ａ」の行である７０１のＰＤＬ構成を参照すると「Ｂ」であるため、ＰＤＬ構成として図７（Ｂ）の「構成Ｂ」に決定される。なお、ＰＤＬ種別が「ＰＤＬＡ」のため、ＰＤＬインタプリタとして「ＰＤＬＡインタプリタ２４１」が決定される。
【００６６】
もう一例をあげると、Ｓ５０１でＰＤＬ判定処理２２０が抽出した情報が、ＰＤＬ種別が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータが圧縮「あり」である場合、図８（ｂ−２）のテーブルが選択される。続いて、クリティカルパスで処理量を参照すると、７０７の行の描画最適化処理Ａの場合と７０８の行の描画最適化処理Ｂの場合で同一であるため、総合的な処理を参照する。総合的な処理量では、描画最適化処理Ｂの方が小さいため、描画最適化処理として「描画最適化処理Ｂ２５２」が決定される。続いて、決定された描画最適化処理Ｂの行である７０８のＰＤＬ構成を参照すると「Ｂ」であるため、ＰＤＬ構成として図７（Ｂ）の「構成Ｂ」が決定される。
【００６７】
なお、ＰＤＬＡのように基本的な描画命令だけで構成されるＰＤＬ種の場合、作成アプリケーションがＣＡＤ以外（例えば、ワープロソフト、表計算ソフト等）の場合、ＰＤＬ解析処理の比率が低く、ＤＬ生成処理の比率が高くなる傾向がある。
【００６８】
また、ＰＤＬＢのように基本的な描画命令に加え高度な描画命令を含むＰＤＬ種の場合、作成アプリケーションによらず、ＰＤＬ解析処理の比率が高くなる傾向がある。
また、「ＣＡＤ」のように、ＰＤＬデータはオブジェクト数が大量になるアプリケーションの場合、ＰＤＬ種によらず、ＰＤＬ解析処理、及び最適化処理の負荷比率が高くなる傾向がある。
【００６９】
また、クラウド（やネットワークの帯域が小さいＬＡＮ等）から投入されたＰＤＬデータのように圧縮されたＰＤＬデータの場合、デコード（解凍処理）が必要となるため、ＰＤＬ解析処理の比率が高くなる傾向がある。
【００７０】
このような傾向に基づいて、本実施例では、上記図８のような場合分けに対応するテーブルを用いる構成としたが、図８以外の場合分けに対応するテーブルを用いる構成であってもよい。例えば、ＰＤＬ種及び作成アプリーケーションの組み合わせで場合分けしたテーブルであってもよい。
【００７１】
以下、図５のフローチャートの説明に戻る。
図５のＳ５０２において、ＰＤＬ構成決定処理２２１は、ＰＤＬ構成を決定し、該決定したＰＤＬ構成に従って、ＰＤＬ処理群２３０内の各ソフトウェアモジュールを接続するように制御する。
【００７２】
ＰＤＬ構成決定処理２２１がＰＤＬ構成を決定すると、ジョブコントロール処理２０５は、ＰＤＬ処理群２３０にＰＤＬ処理を開始させる（Ｓ５０３）。ＰＤＬ処理では、上記Ｓ５０２で決定されたＰＤＬ構成に従ってＰＤＬ処理群２３０の各ソフトウェアモジュールが動作し、ＲＡＭ１１３にスプールされている印刷ジョブに含まれるＰＤＬデータを解釈し、ハードウェアレンダラ１１８の解釈できるＤＬを生成する。
【００７３】
「ＰＤＬ構成Ａ」の場合、描画最適化処理群２５０の処理とＤＬ生成処理２６０の処理の間に、パイプライン分割処理２６１が接続される。また、「ＰＤＬ構成Ｂ」の場合、ＰＤＬ解析処理群２４０の処理と描画最適化処理群２５０の処理の間に、パイプライン分割処理２６１が接続される。なお、ＰＤＬ解析処理群２４０の処理、描画最適化処理群２５０の処理、及びＤＬ生成処理２６０の処理はパイプライン分割処理２６１の前後で、実行されるスレッドが分割され（図４に示したスレッドＡ，スレッドＢに分割され）、それぞれのスレッドの処理はパイプライン的に並列で動作する。それぞれのスレッドの起動は、ジョブコントロール処理２０５がＰＤＬ処理の開始までの任意のタイミングに行うことが可能である。例えばＰＤＬ印刷処理の開始時に各スレッドを起動する構成でもよい。なお、各スレッドは、ＣＰＵ１１２の異なる演算ユニット（コア）で並列に実行される。
【００７４】
いずれのＰＤＬ構成においても、まず、選択されたＰＤＬ解析処理群２４０のＰＤＬインタプリタが、ＰＤＬデータを解釈して描画オブジェクト群を生成し、共通描画ＩＦをコールする。また、選択された描画最適化処理群２５０の描画最適化処理は、共通描画ＩＦから入力された描画オブジェクト群を最適化し、再度、共通描画ＩＦをコールする。さらに、ＤＬ生成処理２６０は、共通描画ＩＦから入力された描画オブジェクト群をＤＬ化する。
【００７５】
なお、ＤＬ生成処理２６０は、１ページ分のＤＬを生成されたところで、ジョブコントロール処理２０５へＤＬを生成した旨を通知する。また、ＰＤＬ解析処理群２４０の各ＰＤＬインタプリタは、ＲＡＭ１１３にスプールされた全ＰＤＬデータの解釈が終了すると、全ページ分のデータ解釈が終了した旨を、ジョブコントロール処理２０５へ通知しておく。
【００７６】
上記Ｓ５０３で１ページ分のＤＬが生成されると、ジョブコントロール処理２０５は、ＲＩＰ処理２７０を起動し、生成されたＤＬのレンダリングを行う（Ｓ５０４）。詳細には、起動されたＲＩＰ処理２７０が、レンダラ１１８を制御し、ＲＡＭ１１３上に生成されたＤＬをレンダリングし、ラスタイメージを生成する。生成したラスタイメージは、ＲＡＭ１１３上に構成されるイメージバッファに格納される。ＲＩＰ処理２７０は、１ページ分のＤＬのレンダリングが終了し、ラスタイメージをイメージバッファに格納すると、ジョブコントロール処理２０５へレンダリングが終了した旨を通知する。
【００７７】
上記Ｓ５０４でラスタイメージが生成されると、ジョブコントロール処理２０５は、印刷処理２８０を起動し、生成されたラスタイメージの指定用紙への印刷出力を行う（Ｓ５０５）。詳細には、起動された印刷処理２８０が、プリンタエンジン１１５を制御し、ＲＡＭ１１３のイメージバッファに格納されたラスタイメージの指定用紙上への印刷出力を行う。印刷処理２８０は、印刷出力を終了すると、その旨をジョブコントロール処理２０５へ通知する。
【００７８】
上記Ｓ５０５で１ページ分の印刷出力が終了すると、Ｓ５０６において、ジョブコントロール処理２０５は、全ページ分のＰＤＬデータの解釈が終了し、印刷出力が終了したか否かを判定する。
【００７９】
そして、まだ全ページの印刷出力が終了していないと判定した場合（Ｓ５０６でＮｏ）、ジョブコントロール処理２０５は、Ｓ５０３へ処理を戻し、ＰＤＬ処理から処理を継続するように制御する。
【００８０】
一方、全ページの印刷出力が終了したと判定した場合（Ｓ５０６でＹｅｓ）、ジョブコントロール処理２０５は、ＰＤＬ印刷処理を終了する。
＜本実施例の効果＞
ここで、いくつかの具体例を示し、本実施例によるパフォーマンス向上の効果を説明する。
【００８１】
図９は、ＰＤＬ種が「ＰＤＬＡ」、作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータが圧縮が「なし」の場合のパフォーマンスのイメージ図であり、それぞれ２ページのＰＤＬデータを処理した場合の例を示している。
【００８２】
図９において、８０１は、ＰＤＬ構成決定処理２２１が描画最適化処理Ａ２５１及びＰＤＬ構成Ａを選択した場合の図である。
この場合、図８（ｂ−１）の７テーブルの７０５の行を参照すると、ＰＤＬＡインタプリタ２４１と描画最適化処理Ａ２５１及び、ＤＬ生成処理２６０の処理量の比率は、「３：２：５」となっている。
【００８３】
この各モジュールを構成Ａで動作させると、スレッドＡでは、ＰＤＬＡインタプリタ２４１及び描画最適化処理Ａ２５１が動作し、スレッドＢではＤＬ生成処理２６０が動作する。この場合、クリティカルパスの処理量はＰＤＬＡインタプリタと描画最適化処理Ａ２５１の比率を足した"５"となり、図８の表上では７０５の行のケースとなる。
【００８４】
一方、８０２は、描画最適化処理Ａ２５１及びＰＤＬ構成Ｂを選択した場合の図である。
この各モジュールを構成Ｂで動作させると、スレッドＡでは、ＰＤＬＡインタプリタ２４１が動作し、スレッドＢでは、描画最適化処理Ａ２５１及びＤＬ生成処理２６０が動作する。この場合、スレッドＢの処理量が多くなるため、クリティカルパスの処理量は、描画最適化処理Ａ２５１とＤＬ生成処理２６０の比率を足した"７"となる。なお、このケース実施例のテーブルとして搭載していないので、図８のテーブルには存在しない。
【００８５】
図９の８０１と８０２を参照して分かる通り、クリティカルパスが短い構成を選択する方がトータルの処理時間が短くなることが分かり、描画最適化処理Ａ２５１を選択した場合には、「ＰＤＬ構成Ａ」を選択すべきであることが分かる。
【００８６】
続いて８０３、８０４は、描画最適化処理Ｂ２５２を選択した場合の図である。
描画最適化処理Ａ２５１を選択した場合と同様に、クリティカルパスの処理量を計算すると、８０３、８０４のケースでは、ＰＤＬＡインタプリタ２４１と描画最適化処理Ｂ２５２及び、ＤＬ生成処理２６０の処理量の比率は、図８の７０６になり、「３：４；２」となる。
【００８７】
ＰＤＬ構成Ａを選択した場合のクリティカルパスの処理量は"７"となり、ＰＤＬ構成Ｂを選択した場合のクリティカルパスの処理量は"６"であるため、ＰＤＬ構成Ｂを選択した８０４のケース場合が最適である。このときの処理量が、図８の７０６記載されている。
【００８８】
さらに、図８（ｂ−１）のテーブルに、クリティカルパスの処理量により、描画最適化処理を選択すると、８０１と８０４の比較を行うこととなり、クリティカルパスの処理量が小さい、「描画最適化処理Ａ２５１」を選択するべきであることが分かる。
【００８９】
続いて、性能の比較のために本ＰＤＬ処理をシングルコアのＣＰＵで動作させた場合の例を図９（ｂ）に示す。
シングルコアＣＰＵで動作させる場合は、パイプライン分割モジュール２６１で、スレッド分割する必要性が無いため、ＰＤＬ構成は一意に決まる。すなわち、ＰＤＬＡインタプリタ２４１が、描画最適化処理群２５０のいずれかのソフトウェアモジュールの共通描画ＩＦをコールし、描画最適化処理群の２５０のソフトウェアモジュールが、ＤＬ生成処理２６０の共通描画ＩＦをコールする構成である。
【００９０】
８０５は、描画最適化処理群２５０の処理として、描画最適化処理Ａ２５１を選択し場合の図であり、８０６は描画最適化処理Ｂ２５２を選択した場合の図である。
シングルコア時のクリティカルパスの処理量は、すべてのソフトウェアモジュールの比を足したものとなり、描画最適化処理Ａを選択したケースでは"１０"、描画最適化処理Ｂを選択した場合のケースでは"９"となる。このため、８０５、８０６の図を見ても「描画最適化処理Ｂ２５２」を選択すべきであることが分かる
以上のケースを比較すると、本実施例のデュアルコアＣＰＵの場合は、描画最適化処理として、描画最適化処理Ａ２５１を選択すべきだが、シングルコアＣＰＵの場合は描画最適化処理Ｂ２５２を選択すべきであり、結果が異なることが分かる。
【００９１】
すなわち、本実施例のように、マルチコアの場合には、ＰＤＬ構成を考慮した処理時間を算出し、描画最適化処理を決定することが望ましいことが分かる。
一方で、本実施例では図９（ａ）の各ケースを見て分かる通り、複数コアで動作した場合に最適な並列化処理（もっとも性能が出る構成）となることがわかる。
続いて、従来のパイプライン並列化方法との性能の比較を行う。
従来のパイプライン並列化方法では、描画オブジェクト毎に、各パイプラインステージ（スレッド）にかかる処理を計算し、描画オブジェクト毎に、どちらのパイプラインステージで動作させるかを決定する方法である。この方法では、各パイプライン（スレッド）毎の処理量を均一化させることが出来るため、一見最適な並列化処理と考えられる。しかしながら、描画オブジェクト毎、各パイプラインステージの処理量を算出することは多大のオーバーヘッドを伴ってしまう。
【００９２】
以下、図１０を参照して、従来例との性能の比較を行う。
図１０は、実施例１における、従来例比較のためのパフォーマンスのイメージ図である。
図１０（ａ）は、本実施例において、ＰＤＬ種別が「ＰＤＬＢ」、ＰＤＬデータの作成アプリケーションが「ＣＡＤ以外」、ＰＤＬデータの圧縮「なし」のデータが入力された例である。この例の場合、ＰＤＬ構成決定処理２２１は、図８（ｄ）のテーブルを参照し、「描画最適化処理Ａ２５１」を選択した後、ＰＤＬ構成を「ＰＤＬ構成Ｂ」に決定する。
【００９３】
一方で、図１０（ｂ）は、従来の方法で、描画オブジェクト毎に、描画静的化処理をどちらのスレッドで実行するか決定した場合である。この場合、ＰＤＬ処理Ｓ５０３の処理量全体に対して、約８％のオーバーヘッドが発生する（図１０の黒いエリア）。
【００９４】
図１０を参照すると従来例では、描画最適化の処理が、スレッドＡ及びスレッドＢにうまく分散され、並列化処理そのものはうまくいっている。しかし、（ａ）に示す本実施例の場合と比較すると、従来例では、処理スレッドの決定に対してのオーバーヘッドの分、効率化落ちていることが分かる。本実施例の処理では、ジョブ単位でＰＤＬ構成を決定するため、ほとんどオーバーヘッドは発生しない。
【実施例２】
【００９５】
以下、実施例２について説明する。実施例２の説明及び図の中で、実施例１と同一の図番を使用する場合があるが、その場合は、実施例１の図及び説明を参照されたい。
＜システム構成及びハードウェア構成＞
図１１は、実施例２を示す印刷システムの一例を示すブロック図である。
実施例２の印刷システムでは、ホストコンピュータ（情報処理装置）１０１と印刷装置１１０とがネットワーク１９９を介して接続されており相互に通信可能であるように構成されている。
図１１において、１０１はホストコンピュータである。１０２はＣＰＵであり、図１２以降で説明するホストコンピュータ上で動作するソフトウェアは全てこの上で動作する。
１０３はＲＡＭであり、前記ＣＰＵ１０２で動作するソフトウェアがデータ保存や自分自身の動作のために使用する。１０４はハードディスク（ＨＤＤ）であり、アプリケーションソフトウェアやアプリケーションデータ等を保存する。１０５はネットワークインタフェース（ネットワークＩ／Ｆ）であり、ホストコンピュータ１０１はこのネットワークＩ／Ｆ１０５を介して、ネットワーク１９９上の各機器と通信可能である。
印刷装置１１０のハードウェア構成は、実施例１の図１と同一であるため説明を割愛する。
【００９６】
＜ホストコンピュータのソフトウェア構成＞
図１２は、ホストコンピュータ１０１で動作するソフトウェアモジュールの構成の一例を示すブロック図である。なお、図１２中の全てのソフトウェアモジュールは、ＨＤＤ１０４上にコンピュータ読取可能に記録されたプログラムを、ＲＡＭ１０３をワークメモリとして利用して、ＣＰＵ１０２により実行することにより実体化される。以下、各ソフトウェアモジュールについて説明する。
【００９７】
図１２において、２９０はホストコンピュータ１０１のＯＳ(Operating System)であり、ホストコンピュータ１０１で動作する全てのアプリケーションを含めた全てのソフトウェアを管理する。また、ＯＳ２９０は、ファイルシステムへのアクセスやネットワークＩＦ１０５介したネットワークへの通信サービス等、各種サービスを提供する。ＯＳ２９０のサービスには、プリンタドライバ２９２からの依頼に基づいて印刷用のデータであるＰＤＬＣデータを生成するものがある。
【００９８】
２９１はホストコンピュータ１０１上で動作するアプリケーションプログラムであり、アプリケーションプログラムから印刷を行う場合、プリンタドライバ２９２を起動する。プリンタドライバ２９２は、ＯＳ２９０のサービスを利用して印刷用データであるＰＤＬＣデータを生成し、印刷装置１１０で効果的に処理可能なＰＤＬＡデータを含む印刷ジョブに変換し、印刷ジョブスプーラ２９７にスプールする。プリンタドライバ２９２は内部に、２９３〜２９６のソフトウェアモジュールを含んでいる。
【００９９】
２９３はＰＤＬＣインタプリタであり、ＯＳ２９０の生成した、ＰＤＬＣデータを解析し、共通描画ＩＦをコールする。
２９４はコントローラ処理量積算処理であり、プリンタドライバソフトウェアが生成した印刷ジョブを、印刷装置１１０のコントローラ内の各ソフトウェアモジュールが処理した場合にどの程度の処理量になるか積算する。コントローラ処理量積算処理２９４は、共通描画ＩＦを入力とし、出力も入力された内容と同じ共通描画ＩＦをコールする。
【０１００】
２９５はＰＤＬＡライターであり、共通描画ＩＦを入力として、ＰＤＬＡデータを生成する。
２９６はコントローラ処理決定処理であり、コントローラ処理量積算処理２９４の算出した処理量に応じて、印刷装置１１０で、プリンタドライバ２９２の生成した印刷ジョブを処理するときの、ＰＤＬ構成及び使用すべき描画最適化処理を決定する。
【０１０１】
２９７は印刷ジョブスプーラであり、プリンタドライバソフトウェア２９２の作成した印刷ジョブをスプールする。なお、印刷ジョブスプーラ２９７は、ＲＡＭ１０３又はＨＤＤ１０４に構成されている。
【０１０２】
２９８はデータ入出力部で、プリンタドライバ２９２で生成した印刷データを、ＯＳ２９０のサービスを利用することで、ネットワークＩＦ１０５を介して、印刷装置１１０へ送信する。
【０１０３】
＜ＰＤＬ印刷ジョブ生成・送信処理＞
以下、図１３のフローチャートを参照して、ホストコンピュータ１０１のアプリケーション２９１で印刷装置１１０へ印刷指示が行われた時の動作を説明する。
【０１０４】
図１３は、ホストコンピュータ１０１のアプリケーション２９１で印刷装置１１０へ印刷指示が行われた時の動作を示すフローチャートである。
図１３（ａ）は、ホストコンピュータ１０１上でアプリケーション２９１から印刷装置１１０へ印刷を行うための、印刷ジョブ生成・送信処理の動作（印刷制御動作）を示すフローチャートである。
【０１０５】
アプリケーション２９１で印刷装置１１０への印刷指示を行うと、アプリケーション２９１は、プリンタドライバ２９２を起動して、印刷ジョブ生成・送信処理を開始する（Ｓ１３００）。
プリンタドライバ２９２が起動すると、ＯＳ２９１へ、アプリケーション２９１が印刷しようとしているデータの印刷データ（ＰＤＬＣ）を生成するように依頼する。依頼を受けたＯＳ２９１はＰＤＬＣデータを生成し、ＲＡＭ１０３に構成される一時バッファにスプールする（Ｓ１３０１）。
【０１０６】
プリンタドライバ２９２は、Ｓ１３０２において、印刷ジョブのタグデータ（図１４の１４０１〜１４０４以外の情報）を生成し、印刷ジョブとして印刷ジョブスプーラ２９７へ登録する。
【０１０７】
図１４は、プリンタドライバ２９２の生成する印刷ジョブの一例を示す図である。
Ｓ１３０２で生成されるタグデータには、図１４に示す、印刷ジョブのジョブ種別、ＰＤＬ種別、作成アプリケーション名、ジョブオーナー名、作成日時、プリンタドライバ２９２のバージョン、ＰＤＬデータの圧縮の有無を示すフラグが含まれる。
【０１０８】
プリンタドライバ２９２は、Ｓ１３０３〜Ｓ１３０５で、２９３〜２９５のソフトウェアモジュールを起動し、ＰＤＬＣデータをＰＤＬＡへ変換する。さらに、プリンタドライバ２９２は、Ｓ１３０６で、コントローラ処理決定処理２９６を起動して、印刷装置１１０でのＰＤＬ構成を決定し、印刷ジョブへ追記する。以下、上記各ステップについて詳細に説明する。
【０１０９】
Ｓ１３０３では、プリンタドライバ２９２は、ＰＤＬＣインタプリタ２９３を起動し、前記ＲＡＭ１０３にスプールされているＰＤＬＣデータの解析を行う。ＰＤＬＣインタプリタ２９３は、ＰＤＬＣデータを解析し、ＰＤＬＣデータの解析結果として、コントローラ処理量積算処理２９４の共通描画ＩＦをコールする。
【０１１０】
Ｓ１３０４では、コントローラ処理量積算処理２９４は、共通描画ＩＦのコールを入力として図１３（ｂ）〜（ｃ）のフローチャートに示す処理を実行する。
本処理は、プリンタドライバ２９２が生成した印刷ジョブを、印刷装置１１０で処理した場合に、各ソフトウェアモジュール（ＰＤＬＡインタプリタ２４１，描画最適化処理群２５０の各モジュール、ＤＬ生成処理２６０）の処理量について、ページ毎に積算出力する（処理量算出処理）。コントローラ処理量積算処理２９４については後ほど、詳述する。
【０１１１】
コントローラ処理量積算処理２９４は、各処理量の積算を行った後、ＰＤＬＡライター２９５の共通描画ＩＦをコールする。なお、コントローラ処理量積算処理２９４は、入力と同一のシーケンス及びパラメータで出力の共通描画ＩＦをコールする。
【０１１２】
Ｓ１３０５では、ＰＤＬＡライター２９５は、入力された共通描画ＩＦの内容を基に、ＰＤＬＡデータを生成し、ＲＡＭ１０３に構成される一時バッファにスプールする。
Ｓ１３０６では、コントローラ処理決定処理２９６は、上記Ｓ１３０４でコントローラ処理量積算処理２９４が積算した各処理量を参照して、印刷装置１１０において、現在生成中の印刷ジョブを処理するのに最適な、ＰＤＬ構成及び使用すべき描画最適化処理を決定する（パイプライン処理決定処理）。なお、最適なＰＤＬ構成及び、描画最適化処理の決定アルゴリズムは後述する。
【０１１３】
次に、プリンタドライバ２９２は、Ｓ１３０７において、上記Ｓ１３０６で決定したＰＤＬ構成及び描画最適化処理を、ページ情報と共に、構成情報のタグ情報（図１４の１４０１，１４０２等）として、印刷ジョブスプーラ２９７にスプールする。即ち、上記Ｓ１３０７では、上記Ｓ１３０６で決定された各パイプラインで行う処理を指定するデータ（構成情報）を、ページ毎に印刷ジョブ内に付加する。
具体的には、図１４の印刷ジョブの例でみると、１ページ目の構成情報は、１４０１に示されるように、使用すべき描画最適化処理として「描画最適化処理Ａ」を指定し、ＰＤＬ構成として「ＰＤＬ構成Ａ」を指定している。また、２ページ目の構成情報は、１４０２に示されるように、使用すべき描画最適化処理として「描画最適化処理Ａ」を指定し、ＰＤＬ構成として「ＰＤＬ構成Ｂ」を指定している。
【０１１４】
続いて、プリンタドライバ２９２は、Ｓ１３０８において、ＲＡＭ１０３の一時バッファにスプールされているＰＤＬＡデータを読み出し、印刷ジョブスプーラ２９７にスプールする（図１４の１４０３，１４０４等）。
【０１１５】
そして、Ｓ１３０９において、データ入出力２９８は、印刷ジョブスプーラ２９７にスプールされた印刷ジョブを順次、印刷装置１１０へ送信する。
１ページ分のＰＤＬＣデータの解析、及びＰＤＬＡデータのスプール送信が終わると、プリンタドライバ２９２は、Ｓ１３１０において、ＰＤＬＣデータの全ページの解析が終了したか否かを判定する。そして、未だＰＤＬＣデータの全ページの解析が終了していないと判定した場合（Ｓ１３１０でＮｏ）、プリンタドライバ２９２は、Ｓ１３０３に処理を戻し、ＰＤＬＣデータの解析を継続する。
【０１１６】
一方、既にＰＤＬＣデータの全ページの解析が終了したと判定した場合（Ｓ１３１０でＹｅｓ）、プリンタドライバ２９２は、本フローチャートの処理（印刷ジョブ生成・生成処理）を終了する。
【０１１７】
＜コントローラ処理量積算処理＞
以下、図１３（ｂ）、（ｃ）のフローチャートを参照して、コントローラ処理量積算処理２９４がＳ１３０４で行うコントローラ処理量積算処理の説明を行う。
【０１１８】
コントローラ処理量積算処理２９４は、入力ＩＦである共通描画ＩＦがコールされる毎に、印刷装置１１０で、描画最適化処理Ａ２５１を利用した場合、及び描画最適化処理Ｂ２５２を利用した場合にかかる、各ソフトウェアモジュールの処理量を積算する。
【０１１９】
まずＳ１３３１において、コントローラ処理量積算処理２９４は、印刷装置１１０における描画最適化処理Ａ２５１の処理量、ＤＬ生成処理２６０の処理量を積算し、各処理量をＲＡＭ１０３へ格納する。本処理は、描画最適化処理Ａを指定して、後述の処理量積算処理を呼び出すことで行われる。
【０１２０】
続いて、Ｓ１３３２において、コントローラ処理量積算処理２９４は、印刷装置１１０における描画最適化処理Ｂ２５２の処理量、ＤＬ生成処理２６０の処理量を積算し、各処理量をＲＡＭ１０３へ格納する。本処理は、描画最適化処理Ｂを指定して、後述の処理量積算処理を呼び出すことで行われる。
【０１２１】
次に、Ｓ１３３３において、コントローラ処理量積算処理２９４は、ＰＤＬＡライター２９５が生成するＰＤＬＡデータを、印刷装置１１０搭載のＰＤＬＡインタプリタ２４１が解析するためにかかる時間を計算し、ＲＡＭ１０３へＰＤＬＡインタプリタの処理量として積算する。なお、ＰＤＬＡインタプリタの処理量は、描画オブジェクトの種類及び各描画オブジェクトのパラメータから計算できる。具体的には、描画オブジェクトがパスオブジェクトであれば、パスオブジェクトを処理するための基本処理量と、パスオブジェクトに含まれる点列数に１点当たりの処理量を乗算した値とする。また、描画オブジェクトが、イメージオブジェクトであれば、イメージオブジェクトを処理するための基本処理量と、イメージのサイズに１ｐｉｘｅｌ当たりの処理量を乗算した値とする。
【０１２２】
次に、Ｓ１３３４において、コントローラ処理量積算処理２９４は、入力と同一のパラメータでＰＤＬＡライター２９５の入力ＩＦである共通描画ＩＦをコールして、コントローラ処理席背案処理を終了する。
【０１２３】
＜処理量演算処理＞
続いて、図１３（ｃ）のフローチャートを参照して、Ｓ１３３１及びＳ１３３２で行われる各ソフトウェアモジュールの処理量の積算を行う処理量積算処理ついて説明する。なお、Ｓ１３３１及びＳ１３３２は対象の描画最適化処理が異なることを除いて同一の処理となる。
【０１２４】
処理量演算処理を開始すると、コントローラ処理量積算処理２９４は、Ｓ１３４１において、指定された描画最適化処理の判定アルゴリズムを利用して、コントローラ処理量積算処理２９４へ入力された描画オブジェクトが結合可能であるかを判定すると共に該結合判定処理にかかる処理量を計測する。処理量の計測に関しては、実際に判定処理の実施に要した、ＣＰＵのインストラクション数をカウントすることで行われる。
【０１２５】
次に、Ｓ１３４２において、コントローラ処理量積算処理２９４は、上記Ｓ１３４１で計測した結合判定処理の処理量を、指定された描画最適化処理の処理量としてＲＡＭ１０３に構成されるカウンタに積算する。
【０１２６】
次に、Ｓ１３４３において、コントローラ処理量積算処理２９４は、上記Ｓ１３４１の結合判定の結果を参照して、入力されたオブジェクトが結合対象か否か判定する。そして、入力されたオブジェクトが結合対象であると判定した場合（Ｓ１３４３でＹｅｓ）、コントローラ処理量積算処理２９４は、Ｓ１３４４へ処理を進める。
【０１２７】
Ｓ１３４４では、コントローラ処理量積算処理２９４は、結合対象の描画オブジェクトに対する、指定された描画最適化処理による結合処理（すなわち最適化処理）にかかる処理量を計算し、描画最適化処理の処理量としてＲＡＭ１０３に構成されるカウンタに積算する。結合処理にかかる処理量は、最適化の種類及び、入力された描画オブジェクトのパラメータから計算する。
【０１２８】
例えば、上記Ｓ１３４１での判定の結果、図３（ａ）に例示する、「複雑なパスを結合して１つのパスにする」最適化が選択されたとする。この場合は、入力された描画オブジェクトの数、入力された描画オブジェクトに含まれる点列数と、結合により生成されるオブジェクトの面積（ｐｉｘｅｌ数）から処理量を計算する。
【０１２９】
また、Ｓ１３４１での判定の結果、図３（ｂ）に例示する、「負数オブジェクトで構成されるグラデーションを１つのオブジェクトにする」最適化が選択された場合は、１つのグラデーションオブジェクトを発行するだけの演算量であり、ほぼ「０」とみなすことが出来る。
【０１３０】
また、Ｓ１３４１での判定の結果、図３（ｃ）に例示する、「複数のイメージを１つのイメージに結合する」最適化が選択された場合には、入力された描画オブジェクトの数と、各描画オブジェクトに含まれるイメージの面積、及び結合により生成されるイメージの面積から、処理量を計算する。
【０１３１】
上記Ｓ１３４４の処理が完了すると、コントローラ処理量積算処理２９４は、Ｓ１３４５へ処理を進める。
一方、上記Ｓ１３４３において、入力されたオブジェクトが結合対象でないと判定した場合（Ｎｏ）、コントローラ処理量積算処理２９４は、そのままＳ１３４５へ処理を進める。
Ｓ１３４５では、コントローラ処理量積算処理２９４は、最適化処理後に生成される描画オブジェクトを、共通描画ＩＦを介して印刷装置１１０のＤＬ生成処理２６０に入力する場合の、ＤＬ生成処理２６０の処理量を計算し、ＲＡＭ１０３上に構成されているＤＬ生成処理量カウンタに積算する。
【０１３２】
ＤＬ生成処理の処理量の計算は、ＤＬ生成処理２６０を簡易シミュレートすることで行う。ＤＬ生成処理２６０は主に、エッジ生成処理、エッジソート処理、レベル生成処理、塗り情報生成処理、メモリ制御処理からなる。ＤＬ生成処理の計算では、上記各処理にかかる処理量を計算し合算する。エッジは、パスなどの描画オブジェクトの形状をレンダラ１１８が解釈できるように、より単純な形に変更したものである。
【０１３３】
エッジ生成処理の処理量は、入力されたパスの形状をトレースすることにより計算することができる。
エッジソート処理は、レンダラ１１８が処理できるように生成した各エッジをＸＹソートする処理である。エッジソートの処理量は１ページに含まれるエッジの総数をＮとして２．６ＮｌｏｇＮで計算する。ここで「２．６」は予め求めた処理負荷の係数である。
【０１３４】
レベルは各オブジェクトの重なり情報を示すものであが、レベル生成処理は基本的に入力された描画オブジェクト毎に実行される処理である。そのため、レベル生成処理の処理量は、入力された描画オブジェクト毎に一定の処理量を積算する。
【０１３５】
塗り情報生成処理の処理量は、入力された描画オブジェクトの種類に依存する。塗り情報生成処理の処理量は、描画オブジェクトがパスオブジェクトや文字オブジェクトであれば、単純に所定の処理量を積算し、イメージオブジェクトであれば、イメージの面積に所定の処理量を乗算した値を積算する。
【０１３６】
メモリ制御処理にかかる処理量は、使用するメモリ量に依存する処理量であるため、メモリ制御処理以外の各処理で、処理量と同時に、使用メモリ量も積算し、その後、共通描画ＩＦでページ終了が通知されたときに、積算された使用メモリ量の総計を基に処理量を算出し積算する。
そして、上記Ｓ１３４５の処理を終了すると、コントローラ処理量積算処理２９４は、図１３（ｃ）の処理量積算処理を終了する。
【０１３７】
＜コントローラ処理決定処理＞
次に、図１３（ａ）のＳ１３０６で行われる、コントローラ処理決定処理２９６について、図１３（ｄ）と図１３（ｅ）のフローチャートを参照して説明する。
【０１３８】
コントローラ処理決定処理は、コントローラ処理量積算処理でＲＡＭ１０３上に作成されている各処理量を参照し、印刷装置１１０で、印刷ジョブを処理するのに最適な、ＰＤＬ構成及び使用すべき描画最適化モジュールを決定する。
【０１３９】
まず、Ｓ１３６１において、コントローラ処理決定処理２９６は、上記Ｓ１３０５で生成したＰＤＬＡのページを、「描画最適化処理Ａ２５１」を使用して処理した場合のクリティカルパス（最少処理量）とそのクリティカルパスのＰＤＬ構成をＰＤＬ構成候補として決定する。本処理は、「描画最適化処理Ａ２５１」を指定して、後述の図１３（ｅ）に示すクリティカルパス候補決定処理を呼び出すことで行われる。
【０１４０】
次に、Ｓ１３６２において、コントローラ処理決定処理２９６は、上記Ｓ１３０５で生成したＰＤＬＡのページを、「描画最適化処理Ｂ２５２」を使用して処理した場合のクリティカルパス（最少処理量）とそのクリティカルパスのＰＤＬ構成をＰＤＬ構成候補として決定する。本処理は、「描画最適化処理Ｂ２５２」を指定して、後述の図１３（ｅ）に示すクリティカルパス候補決定処理を呼び出すことで行われる。
【０１４１】
次に、Ｓ１３６３において、コントローラ処理決定処理２９６は、上記Ｓ１３６１で算出したクリティカルパスと上記Ｓ１３６２で算出したクリティカルパスを比較し、小さいほうの描画最適化処理を、使用すべき描画最適化処理として決定し、さらに、該決定した描画最適化処理を使用したクリティカルパスから決定されたＰＤＬ構成候補を、最適なＰＤＬ構成として決定し、本フローチャートの処理を終了する。
【０１４２】
＜クリティカルパス候補決定処理＞
以下、図１３（ｅ）のフローチャートを参照して、Ｓ１３６１及びＳ１３６２で行われるクリティカルパス候補決定処理について説明する。なお、Ｓ１３６１及びＳ１３６２は対象の描画最適化処理が異なることを除いて、同一の処理である。また、本処理の中で参照する各処理量はＲＡＭ１０３上に格納されている。
【０１４３】
まず、Ｓ１３７１において、コントローラ処理決定処理２９６は、ＰＤＬ構成Ａのクリティカルパスを算出する。ＰＤＬ構成Ａのクリティカルパスは、ＰＤＬＡインタプリタの処理量と、指定された描画最適化処理の処理量＋ＤＬ生成処理の処理量の大きい方（小さくない方）である。なお、ＰＤＬＡインタプリタの処理量は、図１３（ｂ）のＳ１３３３で算出されたものである。また、指定された描画最適化処理の処理量、及び、ＤＬ生成処理の処理量は、図１３（ｂ）のＳ１３３１又はＳ１３３２で算出されたものである。
【０１４４】
次に、Ｓ１３７２において、コントローラ処理決定処理２９６は、ＰＤＬ構成Ｂのクリティカルパスを算出する。ＰＤＬ構成Ｂのクリティカルパスは、ＰＤＬＡインタプリタの処理量＋指定された描画最適化処理の処理量と、ＤＬ生成処理の処理量の大きい方（小さくない方）である。
【０１４５】
次に、Ｓ１３７３において、上記Ｓ１３７１で算出したＰＤＬ構成Ａのクリティカルパスと、上記Ｓ１３７２で算出したＰＤＬ構成Ｂのクリティカルパスとを比較し、小さい方（大きくない方）を、指定された描画最適化処理のクリティカルパスとし、該クリティカルパスを実現するＰＤＬ構成を、指定された描画最適化処理でＰＤＬ構成候補として、本フローチャートの処理を終了する。
【０１４６】
＜ＰＤＬ印刷処理＞
次に、本実施例２における、印刷装置１１０のＰＤＬ印刷処理について説明する。即ち、印刷装置１１０がネットワーク１９９上のホストコンピュータ１０１から、図１４に例示するＰＤＬＡデータを含む印刷ジョブを受信し、用紙上へ印刷するまでの、ＰＤＬ印刷処理を、図１５のフローチャートを参照して説明する。
【０１４７】
図１５は、実施例２におけるＰＤＬ印刷処理の一例を示すフローチャートである。このフローチャートの処理は、図２に示したソフトウェアモジュールにより実行されるものである。即ち、このフローチャートの処理は、印刷装置１１０のＣＰＵ１１２がＲＯＭ１１４に記録されたプログラムを実行することにより実現されるものである。
【０１４８】
印刷装置１１０のネットワーク処理２１０は、ネットワークインターフェース１１６を介して、印刷ジョブを受信すると、ジョブコントロール処理２０５へ通知する。ジョブコントロール処理２０５は、印刷ジョブの通知を受けると、印刷ジョブに含まれる制御コマンドを解析しＰＤＬデータを含むか判定する。ネットワーク処理２１０は、ジョブコントロール処理２０５の指示に基づいて、印刷ジョブを順次ＲＡＭ１１３上のスプールバッファへスプールしていく。
【０１４９】
ジョブコントロール処理２０５は、ＰＤＬ印刷処理を開始すると（Ｓ１５００）、ＰＤＬ判定処理２２０を起動し、印刷ジョブに関し各種判定を行う（Ｓ１５０１）。
ＰＤＬ判定処理２２０は、前記スプールバッファに格納されている印刷ジョブを解析し、ＰＤＬ種別、生成アプリケーションの種別、ＰＤＬデータの圧縮の有無等の判定を行う。
【０１５０】
ＰＤＬ判定処理２２０が判定した各種結果は、ＰＤＬ構成決定処理２２１へ通知される。この通知に基づいて、ＰＤＬ構成決定処理２２１は、ＰＤＬ構成を決定する（Ｓ１５０２）。
【０１５１】
本実施例２で取りうるＰＤＬ構成も図７に示すＰＤＬ構成Ａ及びＰＤＬ構成Ｂである。実施例２のＰＤＬ構成決定処理２２１は、印刷ジョブのタグ情報に含まれるページ毎の構成情報（図１４の１４０１，１４０２等）を検索し、構成情報が含まれている場合は第一優先で、印刷ジョブに含まれるＰＤＬ構成及び描画最適化モジュールを決定する。なお、タグ情報に構成情報（図１４の１４０１，１４０２等）が含まれない場合は、実施例１と同様の方法により、ＰＤＬ構成及び描画最適化モジュールを決定する。そして、ＰＤＬ構成決定処理２２１は、決定したＰＤＬ構成に従って、ＰＤＬ処理群２３０内の各ソフトウェアモジュールを接続するように制御する。
【０１５２】
ＰＤＬ構成決定処理２２１がＰＤＬ構成を決定すると、ジョブコントロール処理２０５は、ＰＤＬ処理群２３０にＰＤＬ処理を開始させる（Ｓ１５０３）。ＰＤＬ処理では、上記Ｓ１５０２で決定されたＰＤＬ構成に従ってＰＤＬ処理群２３０の各ソフトウェアモジュールが動作し、ＲＡＭ１１３にスプールされている印刷ジョブに含まれるＰＤＬデータを解釈し、ハードウェアレンダラ１１８の解釈できるＤＬを生成する。
【０１５３】
「ＰＤＬ構成Ａ」の場合、描画最適化処理群２５０の処理とＤＬ生成処理２６０の処理の間に、パイプライン分割処理２６１が接続される。また、「ＰＤＬ構成Ｂ」の場合、ＰＤＬ解析処理群２４０の処理と描画最適化処理群２５０の処理の間に、パイプライン分割処理２６１が接続される。なお、ＰＤＬ解析処理群２４０の処理、描画最適化処理群２５０の処理、及びＤＬ生成処理２６０の処理はパイプライン分割処理２６１の前後で、実行されるスレッドが分割され（図４に示したスレッドＡ，スレッドＢに分割され）、それぞれのスレッドの処理はパイプライン的に並列で動作する。それぞれのスレッドの起動は、ジョブコントロール処理２０５がＰＤＬ処理の開始までの任意のタイミングに行うことが可能である。例えばＰＤＬ印刷処理の開始時に各スレッドを起動する構成でもよい。なお、各スレッドは、ＣＰＵ１１２の異なる演算ユニット（コア）で並列に実行される。
【０１５４】
いずれのＰＤＬ構成においても、まず、選択されたＰＤＬ解析処理群２４０のＰＤＬインタプリタが、ＰＤＬデータを解釈して描画オブジェクト群を生成し、共通描画ＩＦをコールする。また、選択された描画最適化処理群２５０の描画最適化処理は、共通描画ＩＦから入力された描画オブジェクト群を最適化し、再度、共通描画ＩＦをコールする。さらに、ＤＬ生成処理２６０は、共通描画ＩＦから入力された描画オブジェクト群をＤＬ化する。
【０１５５】
なお、ＤＬ生成処理２６０は、１ページ分のＤＬを生成されたところで、ジョブコントロール処理２０５へＤＬを生成した旨を通知する。また、ＰＤＬ解析処理群２４０の各ＰＤＬインタプリタは、ＲＡＭ１１３にスプールされた全ＰＤＬデータの解釈が終了すると、全ページ分のデータ解釈が終了した旨を、ジョブコントロール処理２０５へ通知しておく。
【０１５６】
上記Ｓ１５０３で１ページ分のＤＬが生成されると、ジョブコントロール処理２０５は、ＲＩＰ処理２７０を起動し、生成されたＤＬのレンダリングを行う（Ｓ１５０４）。詳細には、起動されたＲＩＰ処理２７０が、レンダラ１１８を制御し、ＲＡＭ１１３上に生成されたＤＬをレンダリングし、ラスタイメージを生成する。生成したラスタイメージは、ＲＡＭ１１３上に構成されるイメージバッファに格納される。ＲＩＰ処理２７０は、１ページ分のＤＬのレンダリングが終了し、ラスタイメージをイメージバッファに格納すると、ジョブコントロール処理２０５へレンダリングが終了した旨を通知する。
【０１５７】
上記Ｓ１５０４でラスタイメージが生成されると、ジョブコントロール処理２０５は、印刷処理２８０を起動し、生成されたラスタイメージの指定用紙への印刷出力を行う（Ｓ１５０５）。詳細には、起動された印刷処理２８０が、プリンタエンジン１１５を制御し、ＲＡＭ１１３のイメージバッファに格納されたラスタイメージの指定用紙上への印刷出力を行う。印刷処理２８０は、印刷出力を終了すると、その旨をジョブコントロール処理２０５へ通知する。
【０１５８】
上記Ｓ１５０５で１ページ分の印刷出力が終了すると、Ｓ５０６において、ジョブコントロール処理２０５は、全ページ分のＰＤＬデータの解釈が終了し、印刷出力が終了したか否かを判定する。
【０１５９】
そして、まだ全ページの印刷出力が終了していないと判定した場合（Ｓ１５０６でＮｏ）、ジョブコントロール処理２０５は、Ｓ１５０２へ処理を戻し、ＰＤＬ処理から処理を継続するように制御する。
【０１６０】
一方、全ページの印刷出力が終了したと判定した場合（Ｓ１５０６でＹｅｓ）、ジョブコントロール処理２０５は、ＰＤＬ印刷処理を終了する。
本処理により、印刷ジョブにページ毎に異なる構成情報がタグ情報として記載されていれば、ページ毎に異なるＰＤＬ構成で動作するようになる。
【０１６１】
以上示したように、実施例２によれば、ホストコンピュータ１００で印刷ジョブ生成時に、ページ単位で、印刷装置１１０での処理量を計算しながら、最適なＰＤＬ構成及び使用すべき描画最適化処理を決定し、印刷ジョブに含めて通知してくる。これにより、印刷装置１１０では、ページ単位で、もっとも最適なＰＤＬ構成に切り替えながら動作することができる。したがって、各ページが異なるアプリケーションで生成されるような複雑な印刷ジョブであっても、印刷装置１１０では最適な並列化構成をとることができ、高速に印刷出力を行える。
【０１６２】
なお、ホストコンピュータ１００等のパーソナルコンピュータは、一般的に、印刷装置より、高スペック（高性能のＣＰＵ、豊富なメモリを備える等、コンピュータ資源が豊富）である。このため、ホストコンピュータ１００上で、コントローラ処理量積算（図１３（ａ）のＳ１３０４）やコントローラ構成決定（図１３（ａ）のＳ１３０６）の処理を行っても、オーバーヘッドが発生することなく、スムーズに処理が行われると考えられる。
【０１６３】
以上示したように、本発明の各実施例によれば、印刷画像生成処理を、ＰＤＬの種類、ＰＤＬデータを生成したアプリケーションの種類及びＰＤＬデータの圧縮の有無により、パイプライン分割の構成を切り替えることにより、描画オブジェクトレベルでのパイプライン並列化を行いつつ、描画オブジェクト単位でのオーバーヘッドの発生なしに、最適なオブジェクト単位でのパイプライン並列化処理を実現でき、マルチコアＣＰＵを搭載する印刷装置の生産性を向上させることができる。
【０１６４】
即ち、描画オブジェクトレベルでのパイプライン並列化を行いつつ、描画オブジェクト単位でのオーバーヘッドの発生なしに、最適な並列化処理を行って、印刷装置の生産性を向上可能な印刷環境を構築することができる。
【０１６５】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
また、上記各実施例を組み合わせた構成も全て本発明に含まれるものである。
【０１６６】
（他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【０１６７】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施例の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。即ち、上述した各実施例及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【０１６８】
１１０    印刷装置（画像形成装置）
１１２    ＣＰＵ
１１３    ＲＡＭ
１１８    レンダラ
２２１    ＰＤＬ構成決定処理
２３０    ＰＤＬ処理群
２４０    ＰＤＬ解析処理群
２４１    ＰＤＬＡインタプリタ
２４２    ＰＤＬＢインタプリタ
２５０    描画最適化処理群
２５１    描画最適化処理Ａ
２５２    描画最適化処理Ｂ
２６０    ＤＬ生成処理
２６１    パイプライン分割処理
２７０    ＲＩＰ処理
２８０    印刷処理
【図１】
2013028012.tif 000003
【図２】
2013028012.tif 000004
【図３】
2013028012.tif 000005
【図４】
2013028012.tif 000006
【図５】
2013028012.tif 000007
【図６】
2013028012.tif 000008
【図７】
2013028012.tif 000009
【図８】
2013028012.tif 000010
【図９】
2013028012.tif 000011
【図１０】
2013028012.tif 000012
【図１１】
2013028012.tif 000013
【図１２】
2013028012.tif 000014
【図１３】
2013028012.tif 000015
【図１４】
2013028012.tif 000016
【図１５】
2013028012.tif 000017