(57)【特許請求の範囲】
【請求項１】
複数のページを含むＰＤＬデータを受信する受信手段と、
前記ＰＤＬデータから前記複数のページの中間データをページごとに生成する複数の処理手段と、
前記複数の処理手段によって生成されたページごとの中間データを、ページごとにラスタライズするラスタライズ手段と、
を有し、
前記ラスタライズ手段は、先行ページの中間データの生成よりも先に後続ページの中間データの生成が完了した場合に、前記先行ページの中間データの生成およびラスタライズの完了まで、前記後続ページの中間データのラスタライズを遅らせ、
前記複数の処理手段は、前記ＰＤＬデータから中間データをページごとに生成する際に、
前記ＰＤＬデータの所定ページについては、当該ページに含まれるオブジェクトの中間データの生成を前記複数の処理手段で並列に行い、
前記所定ページ以外のページについては、当該ページに含まれるオブジェクトの中間データの生成を、ページごとに別々の前記処理手段で並列に行うことを特徴とする画像形成装置。
【請求項２】
前記所定ページについて、
前記複数の処理手段のうちの一つの処理手段は、当該ページに含まれるオブジェクトのＰＤＬデータの解釈を行い、
前記複数の処理手段のうちの別の処理手段は、当該解釈結果からの当該オブジェクトの中間データの生成を行うことを特徴とする請求項１に記載の画像形成装置。
【請求項３】
前記所定ページについて、
前記一つの処理手段は、当該解釈結果が書き出されているメモリから当該解釈結果をバッファに転送し、
前記別の処理手段は、当該バッファに転送された解釈結果を取得して、当該中間データの生成を行うことを特徴とする請求項２に記載の画像形成装置。
【請求項４】
前記所定ページ以外のページについて、
前記一つの処理手段は、或るページに含まれるオブジェクトのＰＤＬデータの解釈およびその解釈結果からの当該オブジェクトの中間データの生成を行い、且つ、
前記別の処理手段は、別ページに含まれるオブジェクトのＰＤＬデータの解釈およびその解釈結果からの当該オブジェクトの中間データの生成を行うことを特徴とする請求項３に記載の画像形成装置。
【請求項５】
前記所定ページ以外のページについて、
前記一つの処理手段は、前記解釈結果が書き出されているメモリから前記転送を介さずに当該解釈結果を取得して、前記中間データの生成を行うことを特徴とする請求項４に記載の画像形成装置。
【請求項６】
前記複数の処理手段は、前記受信されたＰＤＬデータの総ページ数が１ページであるとみなされた場合に、前記ＰＤＬデータに含まれる全てのページを前記所定ページとして取り扱うことを特徴とする請求項１乃至５の何れか１項に記載の画像形成装置。
【請求項７】
前記複数の処理手段は、前記受信されたＰＤＬデータの総ページ数が複数ページであるとみなされた場合に、前記ＰＤＬデータに含まれる全てのページを前記所定ページ以外のページとして取り扱うことを特徴とする請求項１乃至６の何れか１項に記載の画像形成装置。
【請求項８】
前記総ページ数は、前記受信されたＰＤＬデータが解釈されることで取得されることを特徴とする請求項６または７に記載の画像形成装置。
【請求項９】
前記総ページ数は、前記受信されたＰＤＬデータのＰＤＬ種別が判定されることで、前記総ページ数が１ページであるとみなされることを特徴とする請求項６または７に記載の画像形成装置。
【請求項１０】
前記受信されたＰＤＬデータのＰＤＬ種別に基づいて、前記ＰＤＬデータに含まれる全てのページを、前記所定ページとして取り扱うか、前記所定ページ以外のページとして取り扱うかを決定する決定手段を有することを特徴とする請求項１乃至５の何れか１項に記載の画像形成装置。
【請求項１１】
前記所定ページとは、前記ＰＤＬデータの先頭ページであることを特徴とする請求項１乃至１０の何れか１項に記載の画像形成装置。
【請求項１２】
前記ラスタライズ手段によってラスタライズされた結果のデータをラスタライズが行われた順に受け取ってシートに印刷を行う印刷手段を有する請求項１乃至１１の何れか１項に記載の画像形成装置。
【請求項１３】
複数の処理手段を有する画像形成装置の制御方法であって、
複数のページを含むＰＤＬデータを受信する受信工程と、
前記ＰＤＬデータから前記複数のページの中間データを、ページごとに別々の前記複数の処理手段に生成させる制御工程と、
前記生成されたページごとの中間データを、ページごとにラスタライズするラスタライズ工程と、
を有し、
前記ラスタライズ工程は、先行ページの中間データの生成よりも先に後続ページの中間データの生成が完了した場合に、前記先行ページの中間データの生成およびラスタライズの完了まで、前記後続ページの中間データのラスタライズを遅らせ、
前記制御工程では、前記複数の処理手段に、前記ＰＤＬデータから中間データをページごとに生成する際に、
前記ＰＤＬデータの所定ページについては、当該ページに含まれるオブジェクトの中間データの生成を前記複数の処理手段で並列に行わせ、
前記所定ページ以外のページについては、当該ページに含まれるオブジェクトの中間データの生成を、ページごとに別々の前記処理手段で並列に行わせることを特徴とする画像形成装置の制御方法。
【請求項１４】
請求項１乃至１２の何れか１項に記載の画像形成装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は中間データを複数の処理手段で生成する技術に関する。
【背景技術】
【０００２】
ページ記述言語で記述されている印刷データ（ＰＤＬデータ）に基づくラスタライズにおいては、ＰＤＬデータから中間言語で記述された中間データが生成され、その中間データがラスターイメージにラスタライズされる。特許文献１では、複数のプロセッサコアを有するマルチコアＣＰＵ搭載のプリンタが、異なるページのラスタライズを並列実行する技術を開示する。すなわち、各プロセッサコアは、ラスタライズ対象のページが順に割り当てられ、その割り当てられたページのＰＤＬデータから中間データを生成し、その中間データをラスタライズすることで、そのページのラスターイメージを生成する。そしてラスターイメージは、プリンタエンジンに送信されて印刷される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１６８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１のプリンタにおいては複数のプロセッサコアが異なるページのラスタライズを行うので、印刷されるページの順番をＰＤＬデータのページの順番と一致させるべく次の制御を行っている。一方のプロセッサコアによる後のページのラスタライズが先に完了したとしても、他方のプロセッサコアによる先のページのラスタライズおよびラスターイメージのプリンタエンジンへの送信の完了を待つ。そしてその後で、後のページのラスターイメージをプリンタエンジンに送信する。
【０００５】
すなわち、特許文献１では、先にラスタライズが完了した後のページのラスターイメージは、先のページのラスターイメージが生成されるまでメモリに保持され続ける。そのため、ラスターイメージを保持する分だけのメモリ量が必要となる。
【課題を解決するための手段】
【０００６】
上記事情に鑑みて、本発明の画像形成装置は、複数のページを含むＰＤＬデータを受信する受信手段と、前記ＰＤＬデータから前記複数のページの中間データをページごとに生成する複数の処理手段と、前記複数の処理手段によって生成されたページごとの中間データを、ページごとにラスタライズするラスタライズ手段と、を有し、前記ラスタライズ手段は、先行ページの中間データの生成よりも先に後続ページの中間データの生成が完了した場合に、前記先行ページの中間データの生成およびラスタライズの完了まで、前記後続ページの中間データのラスタライズを遅らせ、
前記複数の処理手段は、前記ＰＤＬデータから中間データをページごとに生成する際に、
前記ＰＤＬデータの所定ページについては、当該ページに含まれるオブジェクトの中間データの生成を前記複数の処理手段で並列に行い、
前記所定ページ以外のページについては、当該ページに含まれるオブジェクトの中間データの生成を、ページごとに別々の前記処理手段で並列に行うることを特徴とする。
【発明の効果】
【０００７】
複数の処理手段を有する画像形成装置において、ページ順番の制御をより少ないメモリ量で行うことができる。
【図面の簡単な説明】
【０００８】
【図１】画像形成装置のハードウェア構成図。
【図２】画像形成装置のソフトウェア構成図。
【図３】パイプライン並列処理とページ並列処理の概略図。
【図４】実施例１のパイプライン並列処理とページ並列処理との選択制御フロー。
【図５】パイプラインＰＤＬスレッドの処理フロー。
【図６】パイプラインＤＬスレッドの処理フロー。
【図７】ページＤＬスレッドの処理フロー。
【図８】実施例２のパイプライン並列処理とページ並列処理の切り替え制御フロー。
【発明を実施するための形態】
【０００９】
（実施例１）
以下、本発明を実施するための形態について図面を用いて説明する。
【００１０】
＜画像形成装置のハードウェアブロック図＞
図１は本実施例の画像形成装置（印刷装置）の構成を説明するハードウェアブロック図である。図１のコントローラユニット１００は、ＣＰＵ１０１、ＲＡＭ１０２、不図示のＲＯＭ、ＨＤＤ１０３、ネットワークＩ／Ｆ（インターフェース）１０４、ＲＩＰ（Ｒａｓｔｅｒ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｏｒ）１０６、デバイスＩ／Ｆ１０７を有する。このコントローラユニット１００は、ネットワークＩ／Ｆ１０４を介して、ＬＡＮなどのネットワーク１０５越しに接続される外部装置（例えばホストＰＣ）から、ページ記述言語（ＰＤＬ）で記述された印刷データ（ＰＤＬデータ）を受信する。また、コントローラ１００は、デバイスＩ／Ｆ１０７を介してプリンタエンジン１０８と接続して、画像信号やデバイス情報の入出力を制御する。
【００１１】
ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムをＲＡＭ１０２に読み出し、実行する。さらにＣＰＵ１０１は、そのプログラムに従って、システムバス１０９に接続される各デバイスを統括的に制御する。ＣＰＵ１０１は、プロセッサコアを複数有するマルチコアＣＰＵであって、ＰＤＬデータから中間データ（ディスプレイリスト：ＤＬ）の生成（変換）をマルチスレッドによって並列実行する。ＰＤＬデータからディルプレイリストに変換するのは、様々な種別のＰＤＬデータがあったとしても、共通フォーマットのＤＬに変換することで後の処理を共通化するためである。以下で述べるマルチスレッドとは、ＣＰＵ１０１の有する複数のコアのそれぞれが別々のスレッドとして機能することである。すなわち、別々のスレッドが処理を実行するということ、別々のコアが異なる処理を実行することに等しい。なお、ハイパースレッディングのようなＣＰＵ内のレジスタやパイプラインの空き時間を有効利用して１つのプロセッサコアをあたかも複数のプロセッサコアであるかのように見せる技術を利用できるものを用いても良い。
【００１２】
ＲＡＭ１０２は、ＣＰＵ１０１のメインメモリ、ワークメモリ、ＤＬの格納用メモリとして機能する。ＤＬの格納用メモリは、ＲＡＭ１０２に予め確保されたメモリ領域であり、複数ページ分のＤＬを格納しておくための所定データサイズのメモリ領域である。なお、１ページ分のＤＬのデータサイズの最大値は予め決められている。また、後述するように、あるページのＤＬの生成中にそのページの生成済みのＤＬのデータサイズがその最大値を越える場合、ＤＬスレッド（ＤＬスレッドの生成部）は、ＤＬの生成を一旦止め、その生成済みのＤＬからＲＩＰ１０６を用いてラスターイメージを生成する。そしてＤＬスレッドは、その生成済みのＤＬを削除することで格納用メモリの空きを作り、生成されたラスターイメージを圧縮し、圧縮されたラスターイメージをＤＬとして、空きが作られた格納用メモリに格納する。そしてＤＬスレッドは、そのページのＤＬの生成を再開する。このような一連の処理はフォールバック処理と呼ばれ、ＤＬスレッドは、フォールバック処理によって、１ページ分のＤＬのデータサイズが予め決められた最大値を超えないようにしている。また、このＲＡＭ１０２の一部は、後述のバッファ２０４としても機能する。ＨＤＤ１０３は大容量データを一時的あるいは長期的に保持する目的で使用される。
【００１３】
ＲＩＰ１０６は、ＣＰＵ１０１によって生成されたＤＬからラスターイメージの生成（ビットマップへのラスタライズ）を行う。ＲＩＰ１０６は後述するようにＣＰＵ１０１によってページ順に送信されたＤＬをページごとに順次受信して、そのＤＬをページ順にラスタライズする。このＲＩＰ１０６によるラスタライズは、ＣＰＵ１０１によるＤＬの生成と、ページ単位で並列実行される。すなわち、ＣＰＵ１０１によって後のページ（後続ページ）のＤＬの生成と並列して、ＲＩＰ１０６による前ページ（先行ページ）のラスタライズが行われる。ラスタライズによって生成されたラスターイメージは、プリンタエンジン１０８に送られる。
【００１４】
プリンタエンジン１０８は、不図示のエンジンＩ／Ｆを有し、このエンジンＩ／Ｆはコントローラユニット１００から送られたラスターイメージを順次、画像信号に変換する。そして、プリンタエンジン１０８は、この画像信号に基づいて、画像を紙などのシート上に印刷する印刷ユニットである。プリンタエンジン１０８の印刷方式は、電子写真方式、インクジェット方式、などでよく、方式を限定しない。
【００１５】
＜画像形成装置のソフトウェアモジュール図＞
図２は本実施例における画像形成装置のソフトウェア構成図である。図２に記載した各ソフトウェアモジュールは、ＨＤＤ１０３に記憶された前述のプログラムが、ＲＡＭ１０２にロードされてＣＰＵ１０１により実行されることで実現される。
【００１６】
並列制御部２００は、ＰＤＬデータの画像形成処理を所定単位に分割し、各単位の画像形成処理を複数のスレッドへ割り当てる。所定単位の処理には、１ページ分のＤＬをＰＤＬデータから生成する処理や、１オブジェクト分のＰＤＬデータの解釈処理や、１オブジェクト分のＰＤＬデータの解釈結果からＤＬを生成する処理などがある。本実施例の並列制御部２００は、バッファ２０４を初期化して、スレッド１に、１オブジェクト分のＰＤＬデータの解釈をさせてその解釈結果をバッファ２０４に記憶させる処理を割り当てても良い。すなわち、スレッド１は、解釈部２０１として機能するパイプラインＰＤＬスレッドである。また並列制御部２００は、スレッド２に、バッファ２０４に記憶されている１オブジェクト分のＰＤＬデータの解釈結果からＤＬを生成する処理を割り当てても良い。すなわちスレッド２は、生成部２０３として機能するパイプラインＤＬスレッドである。また並列制御部２００は、スレッド３に、或るページに含まれている全オブジェクトのＰＤＬデータの解釈処理とその解釈結果からのＤＬの生成処理を割り当てても良い。すなわち、スレッド３は、解釈部２１１および生成部２１３として機能するページＤＬスレッドである。また並列制御部２００は、スレッド４に、別のページに含まれている全オブジェクトのＰＤＬデータの解釈処理とその解釈結果からのＤＬの生成処理を割り当てても良い。すなわち、スレッド４も解釈部２１１および生成部２１３として機能するページＤＬスレッドである。違うのはＤＬ生成の処理対象のページが異なることである。
【００１７】
なお、ここで言うところのオブジェクトとは、例えば複数文字からなるテキストオブジェクトや、線分の両端の座標を指定することで決定される線分オブジェクトや、ビットマップオブジェクトなどである。
【００１８】
本実施例では、オブジェクトのＰＤＬデータを解釈する処理は解釈部２０１が行う。この解釈部２０１は、ＰＤＬデータを１オブジェクトずつ解釈して、解釈結果をワークメモリに書き出す。このワークメモリには、ＰＤＬデータに含まれる１オブジェクト分の解釈結果が一時的に記憶され、後に続いて解釈される１オブジェクト分のＰＤＬデータの解釈結果によって上書きされる。
【００１９】
一方で解釈部２１１は、解釈部２０１のようにＰＤＬデータを解釈してその解釈結果をワークメモリに書き出すが、解釈部２１１は続いてその解釈結果を、バッファ２０４に転送する。
【００２０】
本実施例では、オブジェクトのＤＬを解釈結果から生成する処理は、生成部２０３が行う。生成部２０３は、ＰＤＬデータの解釈結果からＤＬを生成する。生成部２０３は、解釈結果を解釈部２０１のワークメモリから取得する。一方、生成部２１３は、生成部２０３とは異なり、ワークメモリからではなく、バッファ２０４から取得する。
【００２１】
なお、本実施例では、ＣＰＵ１０１がプログラムを実行することで上述の通りソフトウェアモジュールが実現されるが、これに限らず、上述のソフトウェアモジュールと同等の機能をハードウェアによって実現しても良い。また、図２では、４つのスレッド１〜４を示しているが、１つのスレッドが、別のスレッドの動作を行っても良い。例えばスレッド１が、後述のパイプライン並列処理の際には、パイプラインＤＬスレッドとなるが、ページ並列処理の際には、スレッド３のようなページＤＬスレッドとなっても良い。これはスレッド２とスレッド４についても同様である。
【００２２】
本実施例では、２種類の並列処理を切り替えることにより、複数ページだけでなく、１ページのみの印刷データにおいても並列処理による高速化を実現する。
【００２３】
一方の並列処理は、解釈部２０１および生成部２０３それぞれの処理をパイプライン制御部２０２により、別々のスレッドによって実行するパイプライン処理である。すなわち、１ページ目については、１オブジェクト分のＤＬを生成するにあたり、そのオブジェクトのＰＤＬデータを解釈する処理のスレッドと、その解釈結果からＤＬを生成する処理のスレッドとがパイプライン処理によって並列実行される。すなわち、生成部２０３として機能するスレッドが或るオブジェクトのＰＤＬデータの解釈結果からＤＬを生成している間に、解釈部２０１として機能する別のスレッドが次のオブジェクトのＰＤＬデータを解釈する。そして生成部２０３として機能するそのスレッドは、その別スレッドによる解釈結果からＤＬを生成する。以上の一連の処理の流れが１つのページについて繰り返される。これがパイプライン並列である。
【００２４】
他方の並列処理は、２ページ目以降の各ページについては、解釈部２１１および生成部２１３として機能させるスレッドを１ページにつき１つに限定する。そして、複数のページのそれぞれのＤＬを生成する複数スレッドが、ページ単位で並列実行される。すなわち、或るスレッドは、或るページのＰＤＬデータからＤＬを生成し、別スレッドは別ページのＰＤＬデータからＤＬを生成する。これがページ並列である。
【００２５】
＜ページ並列とパイプライン並列切り替えの概要＞
マルチコアＣＰＵを用いたページ並列では、複数ページのＰＤＬデータでは、別々のスレッド（プロセッサコア）が並行して別々のページのＤＬを生成するので、マルチスレッドでの並列処理による高速化の効果を得ることができる。一方、単ページのＰＤＬデータに対してマルチコアＣＰＵが行うページ並列では、或るスレッド（プロセッサコア）が１ページ目のＰＤＬデータからＤＬの生成を行う。しかし、残りのスレッド（プロセッサコア）はＰＤＬデータの解釈もＤＬの生成もしないアイドル状態となってしまい、単ページのＰＤＬデータからのＤＬの生成については、マルチスレッド（マルチコア）による並列効果は得られない。
【００２６】
そこで本実施例では、ＰＤＬデータの１ページ目についてはパイプライン並列処理でＤＬを生成し、２ページ目以降のＤＬの生成はページ並列処理で行う。これにより、複数ページのＰＤＬデータだけでなく、単ページのＰＤＬデータについてもマルチスレッドによる並列効果を得る。図３が、この処理の概念図である。
【００２７】
１ページ目の処理では、パイプライン並列処理が行われる。例えば１ページ目のＰＤＬデータにオブジェクト１、２が含まれている場合に、スレッド１（プロセッサコア１）は、オブジェクト１のＰＤＬデータを解釈し、続いてスレッド２（プロセッサコア２）は、その解釈結果からオブジェクト１のＤＬを生成する。そしてその生成の間、スレッド１は、オブジェクト２のＰＤＬデータを解釈し、オブジェクト１のＤＬを生成し終えたスレッド２は、その解釈結果からオブジェクト２のＤＬを生成する。このように、各スレッドの処理が並列実行できるので、１ページ目のＤＬの生成は高速化される。
【００２８】
また続く２ページ目、３ページ目の処理では、ページ並列処理が行われる。例えば２ページ目のＰＤＬデータにオブジェクト３、４が含まれている場合に、スレッド１は、オブジェクト３のＰＤＬデータの解釈とＤＬの生成とを続けて行う。オブジェクト４についても同様である。これにより、２ページ目のＤＬが生成される。一方、例えば３ページ目のＰＤＬデータにオブジェクト５、６が含まれている場合に、スレッド２は、オブジェクト５のＰＤＬデータの解釈とＤＬの生成とを続けて行う。オブジェクト６についても同様である。これにより、３ページ目のＤＬが生成される。このように、各スレッドの処理は、ページ単位で並列実行できるので、２ページ目、３ページ目のＤＬの生成は高速化される。なお、２ページ目、３ページ目に対しても１ページ目と同様にパイプライン並列処理を適用しても良いが、本実施例においてそうしないのは、次の理由による。すなわち、マルチスレッドによるパイプライン並列処理はスレッド間の通信が必要なので、通信コストがページ並列処理よりもかかるためである。
【００２９】
＜並列処理切り替え制御のフロー＞
図４のフローチャートを用いて、ページ並列処理とパイプライン並列処理とを切り替える制御フローを説明する。この制御フローは、スレッドＡにおいて並列制御部２００が、ネットワークＩ／Ｆ１０４を介して外部装置からＰＤＬデータを受信したことに応じて、実行する。
【００３０】
Ｓ４０１において、並列制御部２００は、初期化処理を行う。具体的には、並列制御部２００は、ＤＬの生成対象ページ番号およびＤＬの送信対象ページ番号を管理し、それらを共に１に設定する。また並列制御部２００は、マルチコアＣＰＵのプロセッサコアの数分、複数のスレッドを起動する。また並列制御部２００はバッファ２０４を確保する。例えば２コアＣＰＵであれば２つのスレッドが起動される。以降の処理では、並列制御部２００は、起動した複数スレッドのそれぞれが別々のコアによって実行されるように、アフィニティマスクを設定するものとする。
【００３１】
Ｓ４０３において、並列制御部２００は、生成対象ページ番号が１であるか、すなわち、ＤＬ生成の対象が１ページ目であるか否かを判定する。生成対象ページ番号が１であれば、１ページ目に対してパイプライン並列処理でＤＬの生成と送信を行うために、Ｓ４０４以降の処理が行われる。パイプライン並列処理については図３を用いて説明したとおりである。また生成対象ページ番号が１でなければ、２ページ目以降に対してページ並列処理でＤＬの生成と送信を行うために、Ｓ４１０以降の処理が行われる。ここでは１ページ目が、２ページ目以降とは区別して取り扱う所定ページであり、２ページ目以降が所定ページ以外のページであり、並列制御部２００はＤＬ生成対象のページが所定ページであるか否かによって並列処理方法を制御する生成制御手段である。
【００３２】
パイプライン並列処理のためのＳ４０４以降の処理について説明する。
【００３３】
Ｓ４０４において、並列制御部２００は、起動された複数のスレッドに対して、互いに連携して生成対象ページ番号のＰＤＬデータのパイプライン並列処理を行う指示を出す。並列制御部２００は、例えばスレッド１に対して、パイプライン並列処理のうちのオブジェクトのＰＤＬデータの解釈処理を行うように指示する。このときスレッド１は解釈部２０１として機能する。一方スレッド２に対しては、並列制御部２００は、パイプライン並列処理のうちのオブジェクトのＰＤＬデータの解釈結果からオブジェクトのＤＬの生成処理を行うように指示する。このときスレッド２は生成部２０３として機能する。なお、並列制御部２００は、後述のように、生成部２０３に対して、ＤＬの格納用メモリ上に１ページのＤＬデータサイズの最大値分のメモリ領域を確保させる。
【００３４】
Ｓ４０５において、並列制御部２００は、生成対象ページ番号を１つインクリメントすることで、ＤＬ生成の対象ページを２ページ目にする。
【００３５】
Ｓ４０６において、並列制御部２００は、１ページ目のＤＬの生成の完了通知を、パイプライン処理中のスレッドから受信したかを判定し、受信した場合にＳ４０７へ処理を進める。この完了通知には、１ページ目のＤＬの格納先のメモリアドレスが含まれている。またこの完了通知には生成されたＤＬのページ番号が含まれ、ここでのページ番号は「１ページ目」である。それ以外の場合、１ページ目のＤＬの生成の完了通知が受信されるまで待機する。なぜ１ページ目に限って待機をするかというと、１ページ目のパイプライン並列処理中に、次ページに対する処理を行わせないようにして、１ページ目の処理効率を上げるためである。
【００３６】
Ｓ４０７において、並列制御部２００は、送信対象ページ番号のＤＬ（すなわち１ページ目のＤＬ）をＲＩＰ１０６に送信する。送信されたＤＬは、ＲＩＰ１０６によってラスタライズされる。具体的には、並列制御部２００は、完了通知に含まれているメモリアドレスをＲＩＰ１０６に通知し、ＲＩＰ１０６は、そのメモリアドレスに格納されているＤＬを取得してラスタライズを行う。そして並列制御部２００は、１ページ目のＤＬのラスタライズの完了を検知したことに応じて、ＤＬスレッドの生成部２０３に、ＤＬの格納用メモリ上に確保されたメモリ領域を解放させる。生成されたラスターイメージは、プリンタエンジン１０８に送られて用紙上に印刷される。
【００３７】
Ｓ４０８において、並列制御部２００は、送信対象ページ番号を１つインクリメントすることで、ＤＬ送信の対象ページを２ページ目にする。そして処理はＳ４０９へ移る。
【００３８】
一方で、Ｓ４１０以降のページ並列処理について説明する。
【００３９】
Ｓ４１０において、並列制御部２００は、処理が割り当てられていないスレッド（空きスレッド）が無くなるまで、Ｓ４１１〜Ｓ４１３を繰返す。
【００４０】
Ｓ４１１において、並列制御部２００は、ＰＤＬデータに含まれる全てのページのＤＬの生成処理をページ並列で行うように指示したかどうかを判定する。全てのページについてＤＬの生成処理を指示していれば、Ｓ４１０のループ処理を抜けて、Ｓ４１４に処理は移行する。そうでなければ処理はＳ４１２へ移行する。なお、このＳ４１１の処理に加えて、並列制御部２００は、これまでに生成されたページのＤＬのうち、ＲＩＰ１０６へ未送信（未ラスタライズ）のＤＬの総サイズを計算し、この総サイズが閾値よりも小さい場合に、Ｓ４１２へ処理を移行させても良い。逆に総サイズが閾値以上である場合には、処理はＳ４１４に移行する。このように未送信のＤＬの総サイズを参照してＤＬの生成を抑制することで、若いページ番号のページのＤＬ生成が大幅に遅延していて他ページ（その若いページ番号よりも大きなページ番号のページ）のＤＬが先に生成されてしまう場合でも、ＤＬ格納用メモリの不足や、バッファオーバーフローを防げる。なお生成済み且つ未ラスタライズのＤＬの総サイズではなく、生成済み且つ未ラスタライズのページ数に基づいて、本制御を行っても良い。例えば生成済み且つ未ラスタライズのページ数が閾値より小さければＳ４１２へ移行し、そうでなければＳ４１４に移行する。または、並列制御部２００は、ＤＬ格納用メモリの空き容量が、１ページのＤＬデータサイズの最大値分のメモリ領域を確保できる程度にあるかを判定する。つまり空き容量は予め決められた閾値（最大値）以上なのかが判定される。確保できる程度にあればＳ４１２へ処理を移行し、そうでなければＳ４１４に処理を移行する。空き容量とは、ＤＬ格納用メモリにおいて使用可能な、あるいは、解放されているメモリ領域のデータサイズであり、次のようにして求められる。つまり、空き容量は、ＤＬ格納用メモリとして予め確保された所定データサイズから、「生成済み且つ未ラスタライズのＤＬ用にページ単位で確保されているメモリ領域の総サイズ」を引いたサイズである。なお、この「生成済み且つ未ラスタライズのＤＬ用にページ単位で確保されているメモリ領域の総サイズ」の代わりに、「生成済み且つ未ラスタライズのＤＬの総サイズ」を用いても良い。
【００４１】
Ｓ４１２において、並列制御部２００は、生成対象ページ番号のページのＤＬ生成処理を、ページ並列処理で実行するように、空きスレッドに割り当てる。すなわちＤＬ生成処理を割り当てられたスレッドが、そのページに含まれる各オブジェクトのＰＤＬデータの解釈とその解釈結果からのＤＬ生成を行う。このようにすることで、ＤＬ生成処理をページ単位で並列で行うので高速にＰＤＬデータに含まれる複数ページのＤＬを生成することができる。例えばスレッド１が空きスレッドであれば、スレッド１は、解釈部２１１および生成部２１３として機能する。スレッド２が空きスレッドであるときも同様である。なお、並列制御部２００は、後述のように、生成部２１３に対して、ＤＬの格納用メモリ上に１ページのＤＬデータサイズの最大値分のメモリ領域を確保させる。
【００４２】
Ｓ４１３において、並列制御部２００は、生成対象ページ番号を１つインクリメントすることで、ＤＬ生成の対象ページを次のページにする。
【００４３】
以上がループ処理の内容である。
【００４４】
次にＳ４１４において並列制御部２００は、ＤＬ生成の完了通知を、ページ並列処理中のスレッドから受信したかを判定する。受信された場合にＳ４１５へ処理が進むことで、生成済み且つ未送信のＤＬがＲＩＰ１０６へ送信される。それ以外の場合、処理はＳ４０９へ進む。なお、この完了通知には生成されたＤＬの格納先メモリアドレスとページ番号（例えば２ページ目や３ページ目など）とが含まれ、生成済みのＤＬのページ番号として並列制御部２００によって管理される。
【００４５】
Ｓ４１５において、並列制御部２００は、送信対象ページ番号のＤＬの生成が既に完了しているかどうかを、生成されたＤＬのページ番号と、送信対象ページ番号とに基づいて判定する。すなわちここでは、生成済みのＤＬが、先頭ページから順番にＲＩＰ１０６に送信（受け渡し）できるものであるかが判定される。この送信対象ページ番号は、ＲＩＰ１０６によって今回ラスタライズされるべきページの番号を示していることに他ならない。送信対象ページ番号のＤＬの生成が既に完了していれば、処理はＳ４１６へ進み、そうでなければ処理はＳ４０９へ進む。ここでＳ４０９へ進む際には、Ｓ４１４で受け付けられた完了通知に含まれるページ番号のＤＬは、格納先のメモリに保持されたままとなる。しかし、ラスターイメージに変換された状態で保持されるよりは省メモリ効果を得られる。
【００４６】
Ｓ４１６において、並列制御部２００は、送信対象ページ番号のＤＬをＲＩＰ１０６へ送信する。送信されたＤＬは、ＲＩＰ１０６によってラスタライズされる。具体的には、並列制御部２００は、これまでに取得した完了通知に含まれている送信対象ページ番号のＤＬの格納先メモリアドレスをＲＩＰ１０６に通知し、ＲＩＰ１０６は、そのメモリアドレスに格納されているＤＬを取得してラスタライズを行う。そして並列制御部２００は、１ページ分のＤＬのラスタライズの完了を検知したことに応じて、ＤＬスレッドの生成部２１３に、ＤＬの格納用メモリ上に確保されたそのページのメモリ領域を解放させる。
【００４７】
Ｓ４１７において、並列制御部２００は、送信対象ページ番号を１つインクリメントすることで、ページ順に生成されたＤＬをＲＩＰ１０６へ送信できるようにする。
【００４８】
以上のＳ４１５〜Ｓ４１７では、並列制御部２００は、ラスタライズのためにＲＩＰ１０６へ送られるＤＬのページ順の制御を行う送信制御に相当する。この順序制御では、後続ページ（例えば３ページ目）のＤＬの生成が、送信すべき順番のページ（先行ページ：例えば２ページ目）のＤＬの生成よりも先に完了したとしても、３ページ目のＤＬのＲＩＰ１０６への送信が、直前ページである２ページ目のＤＬの送信完了まで待機される。すなわち、後続ページのＤＬのラスタライズを遅らせる。その結果、適切なページ順でＤＬがラスタライズされてラスターイメージが生成される。ラスターイメージは生成された順にプリンタエンジン１０８に送られて正しい順序でページが印刷される。
【００４９】
Ｓ４０９においては、並列制御部２００は、ＰＤＬデータに含まれる全てのページのＤＬの生成とＲＩＰ１０６への送信が完了したかを判定し、完了していれば本フローの処理を終了する。そうでなければ処理はＳ４０３へ戻る。
【００５０】
以上の処理により、並列制御部２００による、ページ並列処理とパイプライン並列処理との切り替える制御が実施される。
【００５１】
＜パイプラインＰＤＬスレッド＞
次に図５のフローチャートを用いて、Ｓ４０４の指示に基づいて空きスレッドに割り当てられたパイプライン並列処理におけるＰＤＬデータの解釈処理について説明する。なお本フローチャートの処理は、空きスレッドがパイプラインＰＤＬスレッドとして機能することが指示されたことをトリガーとして、そのパイプラインＰＤＬスレッドが実行するものである。そのため処理の主体は、パイプラインＰＤＬスレッドの解釈部２０１である。
【００５２】
Ｓ１１０２において、解釈部２０１は、生成対象ページ番号のページに含まれる未解釈のオブジェクトのＰＤＬデータを、解釈する。この解釈結果は、ワークメモリ領域に書き出される。
【００５３】
Ｓ１１０４において、解釈部２０１は、Ｓ１１０２で書き出された解釈結果をバッファ２０４に転送する。この転送は、後述のパイプラインＤＬスレッドから転送許可通知を受信したことに応じて行われる。転送された解釈結果は、後述の通り、パイプラインＤＬスレッドによって処理される。
【００５４】
Ｓ１１０５において、解釈部２０１、生成対象ページ番号のページに含まれる全オブジェクトのＰＤＬデータの解釈が完了したか判定する。完了している場合は、処理はＳ１１０６へ移行する。そうでなければ、処理はＳ１１０２へ戻り、別の未解釈のオブジェクトのＰＤＬデータの解釈が行われる。
【００５５】
Ｓ１１０６において、解釈部２０１は、パイプラインＤＬスレッドからのＤＬ生成完了通知を待つ。ここで解釈部２０１は、このＤＬ生成完了通知に含まれるメモリアドレス（後述）を取得する。ＤＬ生成完了通知を受信すると、Ｓ１１０７へ進む。
【００５６】
Ｓ１１０７において、解釈部２０１は、パイプラインＰＤＬスレッドともパイプラインＤＬスレッドとも別のスレッドで実現されている並列制御部２００に、取得されたメモリアドレスを含むＤＬ生成完了通知を送信する。また、このＤＬ生成完了通知には、生成されたＤＬのページ番号も含まれており、Ｓ４０６で受信される。
【００５７】
以上の処理が、パイプラインＰＤＬスレッドによる処理である。
【００５８】
＜パイプラインＤＬスレッド＞
次に図６のフローチャートを用いて、Ｓ４０４の指示に基づいて空きスレッドに割り当てられたパイプライン並列処理におけるＤＬデータの生成処理について説明する。なお本フローチャートの処理は、空きスレッドがパイプラインＤＬスレッドとして機能することが指示されたことをトリガーとして、そのパイプラインＤＬスレッドが実行するものである。そのため処理の主体は、パイプラインＤＬスレッドの生成部２０３である。
【００５９】
Ｓ１２０１において、生成部２０３は、バッファ２０４からオブジェクトのＰＤＬデータの解釈結果を取得する。
【００６０】
Ｓ１２０２において、生成部２０３は、Ｓ１２０１で取得された解釈結果からオブジェクトのＤＬを生成する。この生成されたＤＬはＤＬの格納用メモリに記憶されている。またこのとき生成部２０３は、パイプラインＰＤＬスレッドに転送許可通知を送信する。これにより、バッファ内の解釈結果が処理済みとなってから、次の解釈結果がバッファに上書きされるように制御される。なお、生成部２０３は、１ページ分のＤＬの生成を開始する際に、ＤＬの格納用メモリに１ページのＤＬデータサイズの最大値分のメモリ領域を確保し、そのメモリ領域に生成されたＤＬを順次記憶していく。また、前述したように、生成部２０３は、ＤＬ生成中において、生成済みのＤＬのデータサイズが１ページ分のＤＬデータサイズの最大値を超えるか判定し、越えると判定した場合に、フォールバック処理を行う。
【００６１】
Ｓ１２０３において、生成部２０３は、生成対象ページ番号のページに含まれる全オブジェクトのＤＬの生成が完了したか判定する。完了している場合は、処理はＳ１２０４へ移行する。そうでなければ処理はＳ１２０１へ戻り、バッファに記憶されている解釈結果を処理する。
【００６２】
Ｓ１２０４において、生成部２０３は、パイプラインＰＤＬスレッドにＤＬ生成完了通知を送信する。このＤＬ生成完了通知は、Ｓ１１０６で受信される。このＤＬ生成完了通知には、生成された１ページ分のＤＬの格納されているメモリアドレスも含まれている。
【００６３】
以上の処理が、パイプラインＤＬスレッドによる処理である。
【００６４】
＜ページ並列ＤＬ生成のフロー＞
次に図７のフローチャートを用いて、Ｓ４１２の指示に基づいて空きスレッドに割り当てられたページ並列処理におけるＤＬデータの生成処理について説明する。なお本フローチャートの処理は、空きスレッドがページＤＬスレッドとして機能することが指示されたことをトリガーとして、そのページＤＬスレッドが実行するものである。そのため処理の主体は、ページＤＬスレッドの解釈部２１１および生成部２１３である。
【００６５】
Ｓ１３０１において、解釈部２１１は、生成対象ページ番号のページに含まれるオブジェクトのＰＤＬデータを解釈し、その解釈結果をワークメモリに書き出す。
【００６６】
Ｓ１３０２において、生成部２１３は、ワークメモリに書き出された解釈結果を読み出してオブジェクトのＤＬを生成する。この生成されたＤＬはＤＬの格納用メモリに記憶されている。なお、生成部２１３は、１ページ分のＤＬの生成を開始する際に、ＤＬの格納用メモリに１ページのＤＬデータサイズの最大値分のメモリ領域を確保し、そのメモリ領域に生成されたＤＬを順次記憶していく。また、前述したように、生成部２１３は、ＤＬ生成中において、生成済みのＤＬのデータサイズが１ページ分のＤＬデータサイズの最大値を超えるか判定し、越えると判定した場合に、フォールバック処理を行う。
【００６７】
Ｓ１３０３において、生成部２１３は、生成対象ページ番号のページに含まれる全オブジェクトのＤＬの生成が完了したか判定する。完了している場合は、処理はＳ１３０４へ移行し、そうでない場合はＳ１３０１へ戻り次のオブジェクトのＰＤＬデータの解釈が行われる。
【００６８】
Ｓ１３０４において、生成部２１３は、ＤＬ生成完了通知を、並列制御部２００に送信する。このＤＬ生成完了通知には、生成された１ページ分のＤＬの格納先であるメモリアドレスと、そのＤＬのページ番号とが含まれる。
【００６９】
以上のページＤＬスレッドは、複数のスレッドによってページごとに行われるので、ＤＬ生成を効率良く行うことができる。
【００７０】
以上、パイプライン並列とページ並列とを切り替えることで、マルチコアＣＰＵによる処理を単ページのＰＤＬデータであっても複数ページのＰＤＬデータであっても効率良く並列化することができる。
【００７１】
なお以上の処理は、パイプライン並列であるが、要は、１ページ目に対しても並列処理を行うことに意味がある。例えば、１ページ目については、ＰＤＬデータに含まれる１番目のオブジェクトをスレッド１がＤＬに変換し、２番目のオブジェクトをスレッド２がＤＬに変換するようにしても良い。しかしこのようなオブジェクト並列の場合、オブジェクトのＤＬの生成完了のタイミングがオブジェクトごとに違うので、生成されたオブジェクトのＤＬの保存順序を制御しなければならない。
【００７２】
それに比べてパイプライン並列では、複数のスレッドが１つのオブジェクトに対してパイプライン処理を行うので、オブジェクトのＤＬの保存順序を意識しなくても良いというメリットがある。
【００７３】
（実施例２）
実施例１では、外部装置から受信されるＰＤＬデータのページ数によらずに、マルチコア（マルチスレッド）による並列実行の効果が得られるように、１ページ目についてはパイプライン並列処理を実行し、２ページ目以降についてはページ並列処理を実行した。
【００７４】
しかし、複数ページであれば１ページ目からページ並列処理を行った方が並列効果が高い場合がある。特に偶数ページ数のＰＤＬデータではより効果が高い。
【００７５】
例えば２ページのＰＤＬデータであれば、１ページ目と２ページ目とでページ並列でＤＬを生成した方が、マルチスレッド（マルチコア）による並列効果が高い。
【００７６】
そこで本実施例では、ＰＤＬデータのページ数に応じて、パイプライン並列かページ並列の何れで処理するかを決定する構成について図８を用いて説明する。なお、以下の実施例において、実施例１と重複する部分については説明を割愛する。
【００７７】
図８は、実施例１の図４のフローチャートの一部が変更されたものである。その部分とはＳ４０２の処理が追加されたことと、Ｓ４０３の処理がＳ４０３−１に変更されたことである。そこで上記の差分のみを説明する。
【００７８】
Ｓ４０２において、並列制御部２００は、ＰＤＬデータを解釈することで、外部装置から受信されたＰＤＬデータの総ページ数を判断する。この判断方法は以下のようなものが考えられる。
【００７９】
例えば、並列制御部２００は、ＰＤＬデータを先頭から末尾まで順次読みながら、改ページコマンドの総数をカウントする。改ページコマンドはページが区切るので、これによりＰＤＬデータの総ページ数が取得できる。
【００８０】
または、並列制御部２００は、ＰＤＬデータにヘッダ情報があれば、そのヘッダ情報を読みとり、そのヘッダ情報にＰＤＬデータの総ページ数が記載されていれば、その総ページ数を取得する。
【００８１】
または、並列制御部２００は、ＰＤＬデータのＰＤＬ種別を判定し、そのＰＤＬ種別に基づいて、総ページ数を判断しても良い。例えばＰＤＬ種別がＪｐｅｇやＴＩＦＦなどであれば、単ページの画像であるので、ページ並列をせずにパイプライン並列するのが良い。そのため並列制御部２００は、ＰＤＬ種別がＪｐｅｇやＴＩＦＦなどであれば、総ページ数を１と判断する。
【００８２】
そしてＳ４０３−１において、並列制御部２００は、Ｓ４０２での総ページ数の判断に基づいて、総ページ数が１ページであれば処理をＳ４０４へ進め、複数ページであれば処理をＳ４１０へ進める。
【００８３】
以上のように、単ページのＰＤＬデータと見なせれば、パイプライン並列処理を１ページ目に対して行い、複数ページのＰＤＬデータと見なせれば、ページ並列処理を２ページ目と並列して１ページ目に対して行う。これにより、より並列効果を高めることができる。
【００８４】
（その他の実施例）
以上の実施例では、ＰＤＬデータの１ページ目（先頭ページ）のみに対してパイプライン並列処理を行っていたが、ＰＤＬデータの最終ページに対してもパイプライン並列処理を行っても良い。
【００８５】
また以上の実施例ではＰＤＬデータからＤＬを生成する際に、パイプライン並列処理とページ並列処理とを適切に選択するような構成であったが、ＰＤＬデータからラスターイメージを生成する際にも同様の考えが適用できる。
【００８６】
また、以上の実施例の画像形成装置では、１つのＲＩＰ１０６が、１ページごとに順次、ＤＬをラスタライズしていたが、ＲＩＰ１０６に代えて、複数のＲＩＰが採用されても良い。
【００８７】
１つの例として、複数のＲＩＰが、生成されたＤＬから、同一ページにおける異なる領域についてのラスタライズを並列に行う構成でも良い。例えば第１のＲＩＰが、生成されたページのＤＬを用いて、そのページの第１のバンド領域のラスタライズを行い、第２のＲＩＰが、その第１のＲＩＰによるラスタライズと並行して、そのページの第２バンドのラスタライズをそのＤＬを用いて行う。このようにすることで、ＤＬ生成の待機による遅延を、ページの並列ラスタライズの高速化で挽回することができる。
【００８８】
また、別の例として、複数のＲＩＰが、異なるページのＤＬのラスタライズを並列で行う構成でも良い。例えば、第１のＲＩＰが、先行ページのＤＬのラスタライズを行い、第２のＲＩＰが、その第１のＲＩＰによるラスタライズに並行して、後続ページのＤＬのラスタライズを行う。このような構成においても、先行ページよりも後続ページのＤＬの生成が先に完了すると、上記実施例と同様に、先に生成された後続ページのＤＬのラスタライズを遅らせる。しかし、この構成では、先行ページのラスタライズの完了ではなく、先行ページのＤＬの生成が完了したことに応じて、第１のＲＩＰおよび第２のＲＩＰは、先行ページおよび後続ページのＤＬのラスタライズを開始する。このようにすることで、ＤＬ生成においてページ順を正しくしつつ、並列ラスタライズによるラスタライズの高速化の効果を得ることができる。もしこの並列ラスタライズにおいて、先行ページよりも先に後続ページのラスタライズが完了した場合には、後続ページの１ページ分のラスターイメージを第２のＲＩＰは保持させ、さらに後続のページのラスタライズを待機するように構成する。そして第１のＲＩＰによる先行ページのラスタライズの完了に応じて、第１のＲＩＰは先行ページのラスターイメージをプリンタエンジン１０８に送信し、続いて、第２のＲＩＰは後続ページのラスターイメージをプリンタエンジン１０８に送信する。このような構成によって、ページのＤＬの生成順が逆転したとしても、複数のページのラスターイメージを保持し続けることを抑制しつつ並列ラスタライズによる高速化の効果を得て、正しいページ順で印刷を行うことができる。
【００８９】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【図１】
0006748445.tif 000002
【図２】
0006748445.tif 000003
【図３】
0006748445.tif 000004
【図４】
0006748445.tif 000005
【図５】
0006748445.tif 000006
【図６】
0006748445.tif 000007
【図７】
0006748445.tif 000008
【図８】
0006748445.tif 000009