(57)【要約】【課題】ページ番号の小さいページの処理が優先的に完了するように並列処理を実行して画像の出力待ちの状態を低減し、処理の高速化を実現することができる画像形成装置、画像形成方法、および画像形成プログラムを提供する。【解決手段】ＰＤＬ処理部での処理をＤＬ生成部３１によるＤＬデータ生成処理（前処理）と描画部３２によるバンド描画処理（後処理）とに分け、ＰＤＬ処理管理部４３の制御部４３１が、ＤＬ生成部３１を起動してＤＬデータ生成処理を実行させる場合には、複数ページ分の処理に複数のＣＰＵコアを割り当てて複数ページ分のＤＬデータの生成を並列処理で実行させながら、ＤＬデータの生成後に描画部３２を起動して描画処理を実行させる場合には、ページ番号の小さいページの処理に複数のＣＰＵコアを優先的に割り当てて、当該ページの複数バンドの描画を並列処理で実行させる。【選択図】図１０
2011167857.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において、
ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段と、
前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段と、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画する描画手段と、
前記データ保持手段に前記中間データが保持されていない場合は、複数のＣＰＵコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のＣＰＵコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段と、を備えることを特徴とする画像形成装置。
【請求項２】
前記描画手段による描画処理の単位となる前記描画領域の１ページ分の画像における分割数は、前記ＰＤＬデータにおける当該ページのデータサイズに応じて決定されることを特徴とする請求項１に記載の画像形成装置。
【請求項３】
前記描画手段による描画処理の単位となる前記描画領域の１ページ分の画像における分割数は、当該ページに対応する前記中間データのデータサイズに応じて決定されることを特徴とする請求項１に記載の画像形成装置。
【請求項４】
前記制御手段は、前記描画手段による描画処理に複数のＣＰＵコアを割り当てるときに、空き状態にあるＣＰＵコアの数が、描画処理の対象としたページの描画領域の分割数に満たない場合は、前記中間データ生成手段による中間データ生成処理をページ番号が大きいページから順に中断することでＣＰＵコアを開放し、開放したＣＰＵコアを前記描画手段による描画処理に割り当てることを特徴とする請求項１ないし３のいずれか一つに記載の画像形成装置。
【請求項５】
前記ＰＤＬデータがインデックス情報を持たない場合に、当該ＰＤＬを構成する各ページの開始および終了位置を検知して各ページの境界を表すインデックスを生成するインデックス生成手段をさらに備えることを特徴とする請求項１ないし４のいずれか一つに記載の画像形成装置。
【請求項６】
複数のＣＰＵコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において実行される画像形成方法であって、
ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成するステップと、
生成したページごとの中間データをデータ保持手段に保持させるステップと、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画するステップと、を有し、
前記データ保持手段に前記中間データが保持されていない場合は、前記中間データを生成する処理に複数のＣＰＵコアを割り当てて、複数ページ分の中間データ生成処理を並列で実行するとともに、前記データ保持手段に前記中間データが保持されている場合は、前記描画領域ごとに１ページ分の画像を描画する処理に複数のＣＰＵコアを割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行することを特徴とする画像形成方法。
【請求項７】
複数のＣＰＵコアを有するコンピュータに、
ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段としての機能と、
前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段としての機能と、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画する描画手段としての機能と、
前記データ保持手段に前記中間データが保持されていない場合は、複数のＣＰＵコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のＣＰＵコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段としての機能と、を実現させるための画像形成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置、画像形成方法、および画像形成プログラムに関する。
【背景技術】
【０００２】
ＰＤＬ（Page Descript Language；ページ記述言語）で記述されたＰＤＬデータを解釈して画像を形成する画像形成装置においては、扱う画像の高解像度化や装置自体の高機能化に伴ってＣＰＵの処理負荷が増大する傾向にあり、画像形成に関わる処理を迅速に実行することが難しい状況となってきている。そこで、この種の画像形成装置では、複数のＣＰＵを用いる、あるいはマルチコアＣＰＵを用いることにより画像形成に関わる処理を並列して実行できるようにして、処理の高速化を図ることが検討されている。
【０００３】
例えば、特許文献１には、複数のＣＰＵを用いて複数ページ分のレンダリングを並列処理することが可能な画像形成装置が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、複数のＣＰＵを用いて複数ページ分のレンダリング処理を並列に実行したとしても、画像の出力はページ番号が小さいページから順に行われるため、ページ番号が小さいページの処理が完了しなければ画像の出力は行えないことになる。ここで、ページごとのレンダリング処理の処理負荷はページに記述されている内容によって異なるため、ページ番号が小さいページの処理負荷がページ番号の大きいページの処理負荷よりも大きい場合には、ページ番号の大きいページの処理が先に完了しても出力待ちの状態が生じ、並列処理の利点である処理の高速化が十分に発揮されないという問題がある。
【０００５】
本発明は、上記に鑑みてなされたものであって、ページ番号の小さいページの処理が優先的に完了するように並列処理を実行して画像の出力待ちの状態を低減し、処理の高速化を実現することができる画像形成装置、画像形成方法、および画像形成プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するために、本発明は、複数のＣＰＵコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において、ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段と、前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段と、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画する描画手段と、前記データ保持手段に前記中間データが保持されていない場合は、複数のＣＰＵコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のＣＰＵコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段と、を備えることを特徴とする。
【０００７】
また、本発明にかかる画像形成方法は、複数のＣＰＵコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において実行される画像形成方法であって、ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成するステップと、生成したページごとの中間データをデータ保持手段に保持させるステップと、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画するステップと、を有し、前記データ保持手段に前記中間データが保持されていない場合は、前記中間データを生成する処理に複数のＣＰＵコアを割り当てて、複数ページ分の中間データ生成処理を並列で実行するとともに、前記データ保持手段に前記中間データが保持されている場合は、前記描画領域ごとに１ページ分の画像を描画する処理に複数のＣＰＵコアを割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行することを特徴とする。
【０００８】
また、本発明にかかる画像形成プログラムは、複数のＣＰＵコアを有するコンピュータに、ＰＤＬデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段としての機能と、前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段としての機能と、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された１ページ分の画像を前記描画領域ごとに描画する描画手段としての機能と、前記データ保持手段に前記中間データが保持されていない場合は、複数のＣＰＵコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のＣＰＵコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段としての機能と、を実現させるための画像形成プログラムである。
【発明の効果】
【０００９】
本発明によれば、ＰＤＬデータから中間データを生成する場合は複数ページ分の処理に複数のＣＰＵコアを割り当ててページ単位の並列処理を行いながら、中間データが生成された後にこの中間データに基づいて描画処理を行う場合には、ページ番号の小さいページの処理に複数のＣＰＵコアを優先的に割り当てて、当該ページの複数の描画領域の描画処理を並列に実行するので、ページ番号の小さいページから順に描画処理を完了させることができ、画像の出力待ちの状態を低減して、処理の高速化を実現することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、画像形成装置のハードウェア構成を示すブロック図である。
【図２】図２は、画像形成装置のコントローラ上で実現される機能構成を示す機能ブロック図である。
【図３】図３は、構造化されたＰＤＬデータと構造化されていないＰＤＬデータとの違いを説明する図である。
【図４】図４は、ホストコンピュータから画像形成装置のコントローラに対して構造化されたＰＤＬデータが送信された場合におけるコントローラによる処理の概要を示す図である。
【図５】図５は、ＰＤＬ解析部のＰＤＬ処理部およびＰＤＬ制御部をさらに詳細に示す機能ブロック図である。
【図６】図６は、ＤＬ処理部のＤＬ生成部によって生成されるＤＬの一例を示す図である。
【図７】図７は、バンド分割を説明する図である。
【図８】図８は、ＰＤＬ処理部のＤＬ生成部をさらに詳細に示す機能ブロック図である。
【図９】図９は、ＰＤＬ処理部の描画部を説明する図である。
【図１０】図１０は、ＰＤＬ制御部のＰＤＬ処理管理部をさらに詳細に示す機能ブロック図である。
【図１１】図１１は、ＣＰＵコア管理部によるＣＰＵコアの管理方法を説明する模式図である。
【図１２】図１２は、ＣＰＵコア管理部による処理の概要を示すフローチャートである。
【図１３】図１３は、ＤＬ生成待ちキューの概要を説明する模式図である。
【図１４】図１４は、ＤＬ生成実行管理テーブルの概要を説明する模式図である。
【図１５】図１５は、ＤＬ生成に関する制御部の処理の流れを示すフローチャートである。
【図１６】図１６は、描画待ちキューの概要を説明する模式図である。
【図１７】図１７は、描画部の起動に関する制御部の処理の流れを示すフローチャートである。
【図１８】図１８は、制御部によるＤＬ生成中断処理の詳細を示すフローチャートである。
【図１９】図１９は、制御部による描画実行処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明にかかる画像形成装置、画像形成方法、および画像形成プログラムの最良な実施の形態を詳細に説明する。
【００１２】
図１は、本実施の形態にかかる画像形成装置のハードウェア構成を示すブロック図である。この画像形成装置は、コントローラ１と、用紙に画像を印刷するためのプリンタエンジン２と、ユーザの操作入力を受け付けるとともに画像形成装置の状態表示を行うオペレーションパネル３とを備える。また、この画像形成装置は、ＬＡＮなどのネットワークによりホストコンピュータ４と接続されており、ホストコンピュータ４からネットワーク経由で伝送されるＰＤＬ（Page Description Language；ページ記述言語）データに基づいてコントローラ１で画像を形成し、プリンタエンジン２による印刷などの画像出力を行う。
【００１３】
コントローラ１は、画像を形成するためのソフトウェアとして実装されている画像形成プログラムを実行するＣＰＵ１０と、画像形成プログラムを格納するＲＯＭ１１と、画像形成プログラムを実行することで生成されるデータを保存するページメモリや画像形成プログラムの実行に必要なワークメモリとして利用するＲＡＭ１２と、画像形成装置の印刷条件の設定情報などを保存しておく不揮発性メモリであるＮＶＲＡＭ１３と、ネットワーク上に接続されたホストコンピュータ４とデータのやり取りを行うためのネットワークＩ／Ｆ１４と、プリンタエンジン２に対して印刷指示等を出力するためのエンジンＩ／Ｆ１５と、オペレーションパネル３との間でデータの入出力を行うためのパネルＩ／Ｆ１６とを備え、これらが内部バス１７によって相互に接続された構成である。なお、図１においては１つのＣＰＵ１０のみを図示しているが、本実施の形態にかかる画像形成装置では、マルチスレッド技術を利用したレンダリングの並列処理を実行可能にするために、複数のＣＰＵコアをコントローラ１内に設けている。複数のＣＰＵコアは複数のＣＰＵ１０に分散して搭載されていてもよいし、１つのＣＰＵ１０に搭載する、つまり、ＣＰＵ１０としてマルチコアＣＰＵを用いるようにしてもよい。
【００１４】
図２は、コントローラ１のＣＰＵ１０が画像形成プログラムを実行することによりコントローラ１上で実現される機能構成を示す機能ブロック図である。コントローラ１には、画像形成プログラムによって実現される機能構成として、ネットワークＩ／Ｆ１４を制御してホストコンピュータ４との間のデータのやり取りを行うネットワークＩ／Ｆ制御部２１と、パネルＩ／Ｆ１６を制御してオペレーションパネル３との間のデータの入出力を行うパネルＩ／Ｆ制御部２２と、エンジンＩ／Ｆ１５を制御してプリンタエンジン２に対する印刷指示等の出力を行うエンジンＩ／Ｆ制御部２３と、ＰＤＬデータを解析して印刷画像を形成するＰＤＬ解析部２４と、コントローラ１全体の動作を統括的に制御するプリンタコントロールシステム部（Printer Control System）２５の各機能構成が設けられる。ここで、ＰＤＬ解析部２４は、ＰＤＬデータから印刷画像を形成する処理を実行するＰＤＬ処理部３０と、ＰＤＬ処理部３０による処理を制御するＰＤＬ制御部４０とから構成される。
【００１５】
一般的に、ＰＤＬデータには、構造化されたＰＤＬデータと、構造化されていないＰＤＬデータとが存在する。図３は、構造化されたＰＤＬデータと構造化されていないＰＤＬデータとの違いを説明する図である。
【００１６】
構造化されていないＰＤＬデータは、図３（Ａ）に示すように、ページごとの描画命令が順次記載されるとともに、印刷が必要な箇所で印刷命令が記述され、これが繰り返されるデータ形式となっている。このため、データを順次受け取りながら処理できるといった特徴があるが、命令はデータの最初から最後まで順番に確認していく必要がある。また、あるページで利用された描画命令をそれ以降のページで利用する場合もあり、単純にそのページだけを抜き出しても描画できない（ページ単位で独立して描画できない、つまりページ独立でない）。このような構造化されていないＰＤＬデータの代表例としては、ヒューレット・パッカード（Hewlett-Packard）社が開発したＰＣＬ（Printer Control Language）や、アドビ（Adobe）社が開発したポストスクリプト（PostScript）などが挙げられる。
【００１７】
一方、構造化されたＰＤＬデータは、例えば図３（Ｂ）に示すように、ページごとの文書情報のほかに、ページ情報やページの構成要素の情報の関連が、インデックス情報としてデータ末尾に記載されている。このため、データを解釈する側は、まずデータ末尾のインデックス情報を参照することで、各ページの文書情報、ページ情報、ページ要素の情報を参照していくことが可能である。ただし、構造化されたＰＤＬデータは、構造化されていないＰＤＬデータと異なり、データ末尾にインデックス情報が含まれているため、基本的にはデータを全て参照できる状態（つまり、ランダムアクセス可能な状態）でなければ解釈できない。このような構造化されたＰＤＬデータの代表例としては、アドビ（Adobe）社が開発したＰＤＦ（Portable Document Format）や、マイクロソフト（Microsoft）社が開発したＸＰＳ（XML paper specification）などが挙げられる。
【００１８】
なお、構造化されていないデータの代表例として挙げたＰＣＬやポストスクリプトであっても、前のページで利用した描画命令をそれ以降のページで利用しないことを保証した印刷データ（つまりページ独立が保証された印刷データ）であれば、末尾のインデックス情報がなくともページの開始、終了を検索することでページの区切りを検知してページ情報を独立に参照可能となる。ここでは、このようなページ独立が保障された印刷データも含めたものを、構造化されたデータと定義する。
【００１９】
図４は、ホストコンピュータ４から画像形成装置のコントローラ１に対して構造化されたＰＤＬデータが送信された場合におけるコントローラ１による処理の概要を示す図である。この図４に示す処理は、上述した複数のＣＰＵコアにより分散して行われる。
【００２０】
まず、プリンタコントロールシステム部２５が、ネットワークＩ／Ｆ制御部２１を介して構造化されたＰＤＬデータを受信し（ステップＳ１０１）、受信したＰＤＬデータをＰＤＬ解析部２４のＰＤＬ制御部４０に受け渡す（ステップＳ１０２）。ＰＤＬ制御部４０は、プリンタコントロールシステム部２５が受信したＰＤＬデータをＲＡＭ１２にスプールする（ステップＳ１０３）。なお、ここではＰＤＬデータをスプールするメモリとしてＲＡＭ１２を利用しているが、画像形成装置がハードディスクドライブ（ＨＤＤ）等の補助記憶装置を備える場合は、この補助記憶装置にＰＤＬデータをスプールするようにしてもよい。
【００２１】
次に、ＰＤＬ制御部４０は、ＲＡＭ１２にスプールしたＰＤＬデータのインデックス情報を参照し、各ページのデータ開始位置を記録する。なお、プリンタコントロールシステム部２５が受信したＰＤＬデータがインデックス情報を持たないＰＤＬデータの場合には、ＰＤＬ制御部４０は、ＰＤＬデータをＲＡＭ１２にスプールする際にページの境界を検知してインデックス情報を作成する。そして、ＰＤＬ制御部４０は、ＰＤＬ処理部３０で処理すべきページのデータ開始位置をＰＤＬ処理部３０に入力する（ステップＳ１０４）。なお、ここでは、３ページ分の処理を並列処理する場合を例示しているが、ＰＤＬ処理部３０で並列処理するページ数は設定パラメータに応じて決定され、操作者がパラメータを変更することによって任意の数に設定することができる。
【００２２】
次に、ＰＤＬ処理部３０がＲＡＭ１２にアクセスし、ＰＤＬ制御部４０から入力されたデータ開始位置にＰＤＬデータを読み込みにいく（ステップＳ１０５）。そして、ＰＤＬ処理部３０は、読み込んだＰＤＬデータのページ要素を解釈し、出力デバイスであるプリンタエンジン２が解釈できるビットマップ形式に変換して、変換したビットマップデータをプリンタコントロールシステム部２５に受け渡す（ステップＳ１０６）。このとき、ＰＤＬ処理部３０は、ＰＤＬデータのページ要素を、まず、ディスプレイリスト（Display List）と呼ばれる中間データ形式に変換し（以下、ディスプレイリストの形式に変換されたデータをＤＬデータという。）、生成したＤＬデータに基づいて、バンドごとに描画処理を行ってビットマップデータを生成する。ここで、特に本実施の形態にかかる画像形成装置では、ＰＤＬ処理部３０による処理を、ＤＬデータを生成するまでの前処理と、ＤＬデータに基づいて１ページ分の画像をバンドと呼ばれる描画単位（描画領域）ごとに描画する後処理とに分け、前処理はＰＤＬデータの複数のページ処理に複数のＣＰＵコアを割り当ててページ単位で並列処理を行う一方で、後処理にはページ番号の小さいページの複数のバンド処理に複数のＣＰＵコアを優先的に割り当ててバンド単位で並列処理を行い、ページ番号の小さいページから順にビットマップデータの生成が完了するようにしている。
【００２３】
プリンタコントロールシステム部２５は、ＰＤＬ処理部３０からビットマップデータが送られてくると、このビットマップデータをエンジンＩ／Ｆ制御部２３に転送する（ステップＳ１０７）。なお、画像形成装置がＨＤＤ等の補助記憶装置を備える場合には、ＰＤＬ処理部３０で生成されたビットマップデータを一旦補助記憶装置にスプールし、プリンタエンジン２が必要とするタイミングで、補助記憶装置にスプールしたビットマップデータを読み出してエンジンＩ／Ｆ制御部２３に送信するようにしてもよい。また、ＰＤＬ処理部３０からエンジンＩ／Ｆ制御部２３にビットマップデータを直接送信するようにしてもかまわない。
【００２４】
以上の処理は、コントローラ１が備える複数のＣＰＵコアによって並列に行われる。なお、ＰＤＬデータへの同時読み込みアクセスが可能なため、ＰＤＬデータを分割する処理は不要である。
【００２５】
図５は、ＰＤＬ解析部２４のＰＤＬ処理部３０およびＰＤＬ制御部４０をさらに詳細に示す機能ブロック図である。図５に示すように、ＰＤＬ制御部４０は、ページ検知部４１とインデックス生成部４２とＰＤＬ処理管理部４３とを有しており、ＰＤＬ処理部３０は、ＤＬ生成部３１と描画部３２とを有している。
【００２６】
ＰＤＬ制御部４０は、上述したように、プリンタコントロールシステム部２５が受信したＰＤＬデータをＲＡＭ１２などのメモリにスプールする。この際、ＰＤＬデータをメモリ上に展開するときに、ページ検知部４１により、ＰＤＬデータのページの切れ目であるページ開始オペレータ、ページ終了オペレータを検知する。そして、インデックス生成部４２により、当該ＰＤＬデータにおける各ページのメモリ上のインデックスを生成する。インデックス生成部４２は、各ページのインデックスを生成すると、ＰＤＬ処理管理部４３に対して、メモリ上に展開されたＰＤＬデータのメモリアドレスと各ページのインデックス情報を受け渡す。ここで、各ページのインデックス情報は、先頭データからのオフセットを示している。
【００２７】
ＰＤＬ処理管理部４３は、ＰＤＬデータのページごとにＤＬデータを生成するためのスレッドの生成、バンドごとに描画を行うスレッドの生成と、それぞれのスレッドへのＣＰＵコアの割り当て管理を行う。ここで、スレッドの生成には、例えばＰＯＳＩＸ（Portable Operating System Interface）スレッド（pthread）のＡＰＩを使用する場合は、pthread_create()のコマンドを用いる。また、生成したスレッドにＣＰＵコアを割り当てる方法としては、プロセッサアフィニティと呼ばれる機構を使用することができる。
【００２８】
ＰＤＬ処理部３０は、ＰＤＬデータに基づくレンダリング処理を、ＤＬ生成部３１による前処理と、描画部３２による後処理とに分離して実行する。
【００２９】
ＤＬ生成部３１は、ＰＤＬデータをページ単位でパーシングしてＤＬデータを生成し、生成したＤＬデータをＲＡＭ１２に保存する。ここで、本実施の形態にかかる画像形成装置においては、複数のＣＰＵコアを用いて複数のＤＬ生成部３１を起動し、ＰＤＬデータの複数ページのＤＬデータ生成を複数のＤＬ生成部３１により並列に行うようにしている。なお、画像形成装置がＨＤＤ等の補助記憶装置を備える場合には、ＰＤＬ生成部３１で生成したＤＬデータを補助記憶装置に保存するようにしてもよい。以下では、ＲＡＭ１２もしくは補助記憶装置におけるＤＬデータの保存領域をＤＬ保存用データメモリと表記する。
【００３０】
描画部３２は、ＤＬ保存用データメモリに保存されたＤＬデータに基づいて、バンド単位で描画処理を行う。ここで、本実施の形態にかかる画像処理装置においては、複数のＣＰＵコアを用いて複数の描画部３２を起動し、複数バンドの描画処理を並列に行うようにしており、特に、ページ番号の小さいページから優先的に、複数の描画部３２による複数バンドの描画処理を実行するようにしている。なお、描画部３２の描画処理の単位となるバンドの分割数は、ＤＬ生成部３０によるＤＬデータの生成前に決定するようにしてもよいし、ＤＬ生成部３０によってＤＬデータが生成された後に決定するようにしてもよい。以下、ＤＬデータ生成前にバンド分割数を決定する場合と、ＤＬデータ生成後にバンド分割数を決定する場合とに分けて、バンド分割数を決定する具体的方法について説明する。
【００３１】
バンド分割数の決定は、ＰＤＬ制御部４０のＰＤＬ処理管理部４３により実施される。ＰＤＬ処理管理部４３は、ＤＬデータ生成前にバンド分割数を決定する場合には、ＰＤＬデータの各ページのデータサイズに応じて、各ページのバンド分割数を決定する。すなわち、ＰＤＬデータの切れ目を表すインデックス情報が先頭データからのオフセットを示す情報となっているため、このインデックス情報に基づいて各ページのデータサイズを算出することができる。ＰＤＬ処理管理部４３は、ＰＤＬデータのインデックス情報に基づいて算出した各ページのデータサイズに応じて、ページのデータサイズが大きいほどバンド分割数が多くなるように分割するバンド数を決定し、ＰＤＬ処理部３０のＤＬ生成部３１の起動時に、バンド分割する単位をＤＬ生成部３１に対して指定する。
【００３２】
ＤＬデータをバンド分割する方法の１つとして、ＤＬデータ生成時にＤＬデータを構成する各描画データがどのバンドに入るのかを情報として保存しておく方法が知られている。この方法によりＤＬデータをバンド分割する場合には、ＤＬ生成部３１を起動してＤＬデータの生成を実行するのに先立ってＰＤＬデータの各ページのバンド幅（＝バンド分割数）を予め決定しておく必要があり、バンド分割数を決定する方法としては、ＰＤＬデータの各ページのデータサイズに応じてバンド分割数を決定する方法を用いる。具体的には、例えばＰＤＬデータの各ページのデータサイズを大、中、小の３つのサイズに分類し、データサイズが“大”のページは描画処理に用いるＣＰＵコアの数を最大にするためにバンド分割数を最大とし、データサイズが“小”のページはバンド分割数を最小、データサイズが“中”のページにはバンド分割数を最大値と最小値との中間値に決定する。このように、ＤＬデータ生成前にＰＤＬデータの各ページのデータサイズに応じてページごとのバンド分割数を決定することにより、簡単な処理でバンド分割を実施しながらバンド並列の描画処理を効率よく実施することができる。
【００３３】
一方、ＤＬデータ生成後にバンド分割数を決定する場合には、ＰＤＬ処理管理部４３は、ＰＤＬ処理部３０のＤＬ生成部３１により１ページ分のＤＬデータの生成が終了した時点で、生成されたＤＬデータのサイズ（以下、ＤＬサイズという。）に応じて、当該ページのバンド分割数を決定する。ＤＬ生成部３１により１ページ分のＤＬデータの生成が終了すると、そのページのＤＬサイズが分かるので、ＰＤＬ処理管理部４３は、このＤＬサイズに応じて分割するバンド数を決定する。具体的には、ＰＤＬ処理管理部４３は、ＤＬサイズを大、中、小の３つのサイズに分類し、ＤＬサイズが“大”の場合は描画処理に用いるＣＰＵコアの数を最大にするためにバンド分割数を最大とし、ＤＬサイズが“小”の場合はバンド分割数を最小、ＤＬのサイズが“中”の場合にはバンド分割数を最大値と最小値との中間値に決定する。
【００３４】
ＤＬデータ生成後にバンド分割数を決定する方法の場合は、決定されたバンド数に応じて起動される複数の描画部３２が、ＤＬ保存用データメモリに保存された１ページ分のＤＬデータの中から、それぞれ担当するバンド内に入るデータを検索して描画を実行することになる（バンディング処理）。このようなバンディング処理は、バンドごとに起動される複数の描画部３２において分散されたかたちで実施される点がデメリットとなるが、実際に描画する形態に近いＤＬデータのサイズに応じてバンド分割数を決定することができるため、上述したＰＤＬデータの各ページのデータサイズに応じてバンド分割数を決定する場合と比較して、描画処理の負荷に応じたバンド分割をより適切なかたちで実施できるといったメリットがある。例えば、ページ全体に円を描く場合、描画する円がページ全体に亘るために描画処理の負荷は比較的大きくなるが、ＰＤＬデータでは円は簡単な命令１つで表現されるためにデータサイズが小となり、ＰＤＬデータのデータサイズに応じてバンド分割数を決定するとバンド分割数が小さな値となる。これに対して、ＤＬデータでは、円はスキャンラインデータ（ピクセルデータ）に変換されるため、ページ全体に亘って円を描画する場合のＤＬサイズは大となり、ＤＬサイズに応じてバンド分割数を決定すれば、バンド分割数を大きな値として描画処理を効率よく行うことが可能となる。
【００３５】
図６は、ＰＤＬ処理部３０のＤＬ生成部３１によって生成されるＤＬデータの一例を示す図である。中間データとしてのＤＬデータは、ＤＬ保存用データメモリ上に図６に示すようなデータ構造を形成する。なお、この図６に示す例は、ＤＬデータ生成前にバンド分割数が決定されている場合のＤＬデータの例である。
【００３６】
「ページ情報管理」は、出力デバイスのページ幅、高さ、深さ、描画カラースペース等の情報を保持している領域である。
【００３７】
「ｂａｎｄ ０ 情報管理」から「ｂａｎｄ n 情報管理」は、１ページをｎ＋１個にバンド分割した場合の各バンドバッファの情報を保持している。具体的には、「ｂａｎｄ ０ 情報管理」から「ｂａｎｄ n 情報管理」には、基本情報として各バンドの高さ（一般にはバンド幅ともいう）、バンドに含まれているオブジェクト数、全オブジェクトサイズ（ヘッダを含む）が含まれている。また、その他の付加情報としては、オブジェクト種類ごとの数、サイズなどがある。
【００３８】
図７は、バンド分割を説明する図であり、１つのページをｂａｎｄ０からｂａｎｄ４の５つのバンドバッファに分割し、円を描画した例を示したものである。この図７において、円はｂａｎｄ０からｂａｎｄ２に跨って描画されている。この図７に示す例において、円はスキャンラインといわれる１ピクセルの高さと幅を持つ情報の集まりに変換され、３つのデータブロックに分割される。それぞれのデータブロックは、ｂａｎｄ０、ｂａｎｄ１、ｂａｎｄ２にそれぞれ描画されることになる。これらのデータブロックは、各バンドの「Ｏｂｊｅｃｔ Ｈｅａｄｅｒ」と「Ｏｂｊｅｃｔ Ｄａｔａ」からなるデータ領域に記録される。各バンドの「ｂａｎｄ情報管理」は、データ領域へのポインタを保持している。
【００３９】
図６の「Ｏｂｊｅｃｔ Ｈｅａｄｅｒ」は、描画オブジェクトの情報を保持している。その情報は、描画オブジェクトの種類、描画オブジェクトのサイズ、描画オブジェクトのカラースペース等、描画に関係する情報である。なお、描画オブジェクトの種類としては、文字、線、ベクター塗りつぶし図形、スキャンライン、イメージなどがある。図７に示した例では、描画オブジェクトとしてスキャンラインが相当し、スキャンラインのサイズ、カラースペース、カラー値の情報が「Ｏｂｊｅｃｔ Ｈｅａｄｅｒ」に保持されている。また、「Ｏｂｊｅｃｔ Ｄａｔａ」領域には、各描画オブジェクトのデータが記録される。図７に示した例では、スキャンラインデータが相当する。
【００４０】
図８は、ＰＤＬ処理部３０のＤＬ生成部３１をさらに詳細に示す機能ブロック図である。ＤＬ生成部３１は、図８に示すように、ＤＬデータの生成に一度に割り当てられるＣＰＵコアの数Ｎに応じて複数設けられる。これら複数のＤＬ生成部３１−１，３１−２・・・３１−Ｎは、それぞれ、ＰＤＬパーサ部３１１−１，３１１−２・・・３１１−Ｎと、描画モジュールＩ／Ｆ部３１２−１，３１２−２・・・３１２−Ｎと、データ変換部３１３−１，３１３−２・・・３１３−Ｎと、を有する。
【００４１】
ＰＤＬパーサ部３１１−１，３１１−２・・・３１１−Ｎは、ＰＤＬデータの言語解析を行って必要な情報を抽出（パーシングする）モジュールであり、上述したポストスクリプト、ＰＤＦ、ＰＣＬ、ＸＰＳ等の言語ごとに構文を解析する。ＰＤＬパーサ部３１１−１，３１１−２・・・３１１−Ｎは、ＰＤＬの形式に依存する構文を解析して描画モジュールＩ／Ｆ部３１２−１，３１２−２・・・３１２−Ｎを呼ぶことで描画を実行する。
【００４２】
描画モジュールＩ／Ｆ部３１２−１，３１２−２・・・３１２−Ｎは、描画インターフェースとなるものであり、文字、線、図形、色指定等の描画指定を行う。
【００４３】
データ変換部３１３−１，３１３−２・・・３１３−Ｎは、描画モジュールＩ／Ｆ部３１２−１，３１２−２・・・３１２−Ｎで指定された描画データを、中間データであるＤＬの形式に変換し、生成したＤＬデータをＤＬ保存用データメモリ３１４−１，３１４−２・・・３１４−Ｎに保存する。なお、データ変換部３１３−１，３１３−２・・・３１３−Ｎは、ＤＬデータ生成時に描画データのバンディング情報を生成することも可能である。
【００４４】
ＤＬ保存用データメモリ３１４−１，３１４−２・・・３１４−Ｎは、上述したようにＲＡＭ１２もしくは補助記憶装置におけるＤＬデータの保存領域であり、これらＤＬ保存用データメモリ３１４−１，３１４−２・・・３１４−Ｎには、ＤＬ生成部３１-１，３１−２・・・３１−Ｎにより生成された１ページ分のＤＬデータがそれぞれ保存される。
【００４５】
本実施の形態にかかる画像形成装置においては、以上のような複数のＤＬ生成部３１−１，３１−２・・・３１−ＮがＰＤＬ制御部４０のＰＤＬ処理管理部４３によって同時に起動されることで、ＰＤＬデータの複数ページ分のＤＬデータの生成を並列して行うことが可能となっている。なお、同時に起動されるＤＬ生成部３１の数は、コントローラ１が備えるＣＰＵコアの数の範囲内において、設定によって変更することが可能である。
【００４６】
ＰＤＬ処理部３０の描画部３２は、ＤＬ生成部３１と同様に、ＰＤＬ制御部４０のＰＤＬ処理管理部４３によって起動される。ここで、描画部３２は、バンドごとの描画処理に一度に割り当てられるＣＰＵコアの数Ｘに応じて複数設けられる。すなわち、ＰＤＬ処理管理部４３は、描画の対象となるページのバンド分割数に応じて１ページ分の描画をバンド並列で実施するのに必要なＣＰＵコアの数Ｘを割り出し、図９に示すように、バンド並列での描画処理に割り当てるＣＰＵコアの数Ｘに応じて、複数の描画部３２−１，３２−２・・・３２−Ｘを起動する。これら描画部３２−１，３２−２・・・３２−Ｘは、それぞれ描画の対象となるページのＤＬデータが格納されたＤＬ保存用データメモリ３１４からＤＬデータを読み込んで、バンド分割された領域に書き込む処理行う。なお、各ページのバンド分割数は、上述したようにＤＬデータ生成前に決定する方法と、ＤＬデータ生成後に決定する方法とのいずれかで行われるが、ＤＬデータ生成後にバンド分割数を決定して描画部３２−１，３２−２・・・３２−Ｘによりバンディング処理を行う場合には、各描画部３２−１，３２−２・・・３２−Ｘが、描画処理の対象となるページのＤＬデータから、描画を担当するバンドのバンドデータを抽出して描画処理を実施することになる。また、バンドごとの描画処理は、ＰＤＬ処理管理部４３がＤＬデータの生成が終了したページのうちでページ番号が小さいページを優先して描画部３２−１，３２−２・・・３２−Ｘのスレッドを起動することで、ページ番号が小さいページから順に実行される。
【００４７】
以上のように、本実施の形態にかかる画像形成装置では、ＰＤＬ処理部３０での処理をＤＬ生成部３１による処理（前処理）と描画部３２による処理（後処理）とに分け、ＤＬ生成部３１では複数のＣＰＵコアを用いてページ並列でＤＬデータの生成を行い、描画部３２では複数のＣＰＵコアを用いて、ページ番号の小さいページから順に、バンド並列で描画処理を行うようにしている。
【００４８】
ここで、コントローラ１が８個のＣＰＵコアを備え、初期設定でＤＬ生成部３１での処理に割り当てるＣＰＵコアの数が４つ（同時に起動されるＤＬ生成部３１の数が４つ）に設定されている場合を例に挙げて、ＤＬ生成部３１と描画部３２間でＣＰＵコアを動的に切り替える方法の具体例について説明する。
【００４９】
ＤＬ生成部３１での処理に４つのＣＰＵコアが割り当てられることによって、４ページ分のＤＬデータの生成が並列で行われることになる。一方、描画部３２での処理には、８つのＣＰＵコアのうち、ＰＤＬ制御部４０での処理に用いるＣＰＵコアを除いた７つのＣＰＵコアを割り当てることが可能であり、最大で７バンド分の描画処理を並列で実行できる。
【００５０】
本実施の形態にかかる画像形成装置では、ページ並列でＤＬデータの生成を行いつつ、ページ番号の小さいページから順に描画処理をできるだけ早く終了させるようにするために、並列処理でＤＬデータの生成を行っている複数のページのうちで、ページ番号が最も小さいページのＤＬが生成された段階でそのページのバンド並列での描画処理に多くのＣＰＵコアを割り当てることが求められる。ここで、ページ番号が最も小さいページのＤＬデータが生成された段階でそのページの描画処理に７つのＣＰＵコアを割り当てようとしても、他のページのＤＬデータの生成が継続されている状態では、７つのＣＰＵコアを割り当てることができない。
【００５１】
そこで、本実施の形態にかかる画像形成装置では、ページ番号が最も小さいページの描画処理を優先させるために、ページ番号が最も小さいページのＤＬデータが生成された段階で他のページのＤＬの生成が継続されている場合は、ＰＤＬ処理管理部４３が、必要なＣＰＵコアの数だけ、ＤＬデータを生成するためのスレッドに対して処理の中断を要求して、ＤＬデータの生成に割り当てられているＣＰＵコアを開放し、開放したＣＰＵコアをページ番号が最も小さいページの描画処理に割り当てるようにしている。
【００５２】
具体的には、例えば、ページ番号が最も小さいページのバンド分割数が当該ページのデータサイズから６バンド分割とされている場合において、ページ番号が最も小さいページのＤＬデータが生成された段階で、並列処理されている他の３ページのＤＬデータの生成処理が継続中である場合には、この状態でページ番号が最も小さいページの描画処理に割り当て可能なＣＰＵコアの数は４つであり、６バンド並列で描画処理を行うには２つのＣＰＵコアが不足することとなる。そこで、ＰＤＬ処理管理部４３は、ＤＬデータ生成中のページのうちで、ページ番号が大きなページから順に２つのページのＤＬデータの生成を中断し、それによって開放された２つのＣＰＵコアを、ページ番号が最も小さいページの描画処理に割り当てる。これにより、ページ番号が最も小さいページの６バンドの描画処理を並列で行うことが可能となる。
【００５３】
以上のようなＣＰＵコアの割り当て管理は、ＰＤＬ制御部４０のＰＤＬ処理管理部４３によって実施される。なお、スレッドの中断（停止）は、例えばＰＯＳＩＸスレッド（pthread）のＡＰＩを使用する場合は、thr_suspend()のコマンドによりスレッドの実行中断を行うことが可能であり、thr_continue()のコマンドによりスレッドの実行再開を行うことが可能である。
【００５４】
図１０は、ＰＤＬ制御部４０のＰＤＬ処理管理部４３をさらに詳細に示す機能ブロック図である。ＰＤＬ処理管理部４３は、図１０に示すように、制御部４３１と、ＣＰＵコア管理部４３２と、ＤＬ生成待ちキュー４３３と、ＤＬ生成実行管理テーブル４３４と、描画待ちキュー４３５とを有する。
【００５５】
制御部４３１は、インデックス生成部４２から、ＲＡＭ１２上に展開されたジョブ全体のＰＤＬデータの先頭アドレスと各ページの先頭アドレスからの位置（オフセット）を示すインデックス情報を受け取る。また、制御部４３１は、初期設定パラメータに基づいて、一度に起動するＤＬ生成部３１の数を決定し、ＣＰＵコア管理部４３２に対して必要なＣＰＵコアの数を要求して、使用可能なＣＰＵコアに関する情報を取得する。なお、コントローラ１上に搭載されている複数のＣＰＵコアにはそれぞれ固有の番号（コア番号）が割り当てられており、制御部４３１は、ＣＰＵコア管理部４３２から、使用可能なＣＰＵコアの数および使用可能なＣＰＵコアのコア番号を取得する。
【００５６】
ＣＰＵコア管理部４３２は、未使用のＣＰＵコア（空きＣＰＵコア）と使用中のＣＰＵコアとをリスト管理しており、ある処理にＣＰＵコアを割り当てた場合は、図１１に示すように、当該ＣＰＵコアのコア番号を未使用リストから使用中リストに移動させる。また、ＣＰＵコア管理部４３２は、ＣＰＵコアを割り当てている処理が完了した場合には、当該ＣＰＵコアのコア番号を使用中リストから未使用リストに移動させる。なお、図１１では、コア番号が１〜３の３つの未使用のＣＰＵコアのうち、コア番号１のＣＰＵコアをある処理に割り当てた場合を例示している。
【００５７】
図１２は、ＣＰＵコア管理部４３２による処理の概要を示すフローチャートである。ＣＰＵコア管理部４３２は、制御部４３１から必要個数のＣＰＵコアの要求があると、まず、使用可能なＣＰＵコアの数を表す取得コア数ＣＯＲＥ＿ＮＵＭの値をゼロに初期化し（ステップＳ２０１）、未使用リストから空きＣＰＵコアを検索する（ステップＳ２０２）。そして、空きＣＰＵコアがあれば（ステップＳ２０３でＹＥＳ）、当該ＣＰＵコアのコア番号を未使用リストから使用中リストへと移動させて（ステップＳ２０４）、取得コア数ＣＯＲＥ＿ＮＵＭの値をインクリメント（１ＵＰ）する（ステップＳ２０５）。
【００５８】
ＣＰＵコア管理部４３２は、以上のステップＳ２０２からステップＳ２０５の処理を、制御部４３１から要求されているＣＰＵコアの個数分だけ繰り返し、取得できたＣＰＵコアのコア番号と取得コア数ＣＯＲＥ＿ＮＵＭを制御部４３１に返す（ステップＳ２０６）。また、ＣＰＵコア管理部４３２は、処理の途中で空きＣＰＵコアがゼロになった場合（ステップＳ２０３でＮＯ）には、それまでに取得できたＣＰＵコアのコア番号と取得コア数ＣＯＲＥ＿ＮＵＭを制御部４３１に返す（ステップＳ２０６）。
【００５９】
制御部４３１は、ＣＰＵコア管理部４３２から使用可能なＣＰＵコアに関する情報を取得すると、ＤＬ生成部３１によるＤＬデータの生成を実行するためにスレッドを作成して、各スレッドにＣＰＵコアを割り当ててＤＬデータ生成の処理を実行させる。このとき、制御部４３１は、ページ番号の小さいページからＤＬ生成の処理を開始させるために、ＤＬ生成待ちキュー４３３を利用する。このＤＬ生成待ちキュー４３３は、図１３に示すように、ＤＬデータに変換されていないページデータをページ番号順に並べたキューであり、ページ番号の小さいページから順にＤＬデータの生成処理を実行させる構造となっている。
【００６０】
制御部４３１は、ＤＬデータ生成の準備が整ったページのページデータをＤＬ生成待ちキュー４３３に登録する。ここで、ＤＬ生成待ちキュー４３３は、ページ番号が小さいページのページデータが前になるように、各ページのページデータをページ番号順にソートする。したがって、新たに登録するページデータはＤＬ生成待ちキュー４３３の後ろに入れればよい。次に、制御部４３１は、ＤＬ生成待ちキュー４３３の先頭からページデータを取り出して、該当するページのＤＬデータを生成するためにＤＬ生成部３１を起動する。
【００６１】
また、制御部４３１は、ＤＬ生成実行管理テーブル４３４を用いて、ＤＬデータ生成処理を実行中のＤＬ生成部３１を管理する。ＤＬ生成実行管理テーブル４３４には、図１４に示すように、ＤＬデータ生成処理を実行中のページに関する情報として、各ページのページ番号、ＤＬポインタ、ＰＤＬデータポインタ、スレッド情報などが登録される。制御部４３１は、ＤＬ生成部３１を起動してＤＬデータ生成処理を開始させた場合は、ＤＬ生成実行管理テーブル４３４に以上のようなＤＬデータ生成処理を実行中のページに関する情報を登録し、ＤＬデータ生成処理が終了すると、該当するページに関する情報をＤＬ生成実行管理テーブル４３４から消去する。また、制御部４３１は、上述したように、ページ番号の小さいページの描画処理に多くのＣＰＵコアを割り当てるために実行中のＤＬデータ生成処理を中断させる場合は、ページ番号の大きいページから順にＤＬデータ生成のスレッド実行を中断して、該当するページの情報をＤＬ生成実行管理テーブル４３４から消去するとともに、該当するページのページデータをＤＬ生成待ちキュー４３３に再度登録する。このとき、ＤＬデータ生成処理を中断したページのページデータは、ＤＬ生成待ちキュー４３３の先頭から挿入していくことで、中断したＤＬデータ生成処理を再開させる場合にも、ページ番号の小さいページからＤＬデータ生成処理を再開させることができる。
【００６２】
図１５は、ＤＬデータ生成に関する制御部４３１の処理の流れを示すフローチャートである。なお、この図１５のフローチャートで示す例は、各ページのバンド分割数をＤＬデータ生成前に決定する例である。バンド分割数をＤＬデータ生成後に決定する場合には、以下に示すステップＳ３０５およびステップＳ３０６の処理が省略され、ＤＬデータが生成された段階で、ＤＬサイズに応じてバンド分割数が決定されることになる。
【００６３】
制御部４３１は、まず、初期設定パラメータに基づいて一度に起動するＤＬ生成部３１の数Ｎを決定し（ステップＳ３０１）、ＣＰＵコア管理部４３２に対して必要なＣＰＵコアの数を要求して、ＣＰＵコア管理部４３２から使用可能なＣＰＵコアのコア数Ｍとコア番号を取得する（ステップＳ３０２）。
【００６４】
次に、制御部４３１は、ステップＳ３０２で取得した使用可能なＣＰＵコアのコア数ＭがステップＳ３０１で決定した一度に起動するＤＬ生成部３１の数Ｎと一致するか否かを判定し（ステップＳ３０３）、一致しない場合（ステップＳ３０３でＮＯ）には、一度に起動するＤＬ生成部３１の数Ｎを使用可能なＣＰＵコアのコア数Ｍに変更する（ステップＳ３０４）。一方、ステップＳ３０２で取得した使用可能なＣＰＵコアのコア数ＭがステップＳ３０１で決定した一度に起動するＤＬ生成部３１の数Ｎと一致する場合（ステップＳ３０３でＹＥＳ）には、ステップＳ３０１で決定した一度に起動するＤＬ生成部３１の数Ｎを維持する。
【００６５】
次に、制御部４３１は、ＰＤＬデータの各ページのインデックス情報に基づいてページのデータサイズを求め（ステップＳ３０５）、ページのデータサイズからバンド分割数を決定して（ステップＳ３０６）、当該ページのページデータをＤＬ生成待ちキュー４３３に登録する（ステップＳ３０７）。制御部４３１は、以上のステップＳ３０５からステップＳ３０７の処理を、一度に起動するＤＬ生成部３１の数Ｎ個分だけ繰り返す。
【００６６】
次に、制御部４３１は、ＤＬ生成待ちキュー４３３の先頭からページデータを取り出す（ステップＳ３０８）。そして、制御部４３１は、ＤＬ生成待ちキュー４３３から取り出したページデータがＤＬデータ生成処理を中断したページのページデータかどうかを確認し（ステップＳ３０９）、ＤＬデータ生成処理を中断したページではない新規なページのページデータであれば（ステップＳ３０９でＮＯ）、ステップＳ３０２で取得したコア番号で識別される使用可能なＣＰＵコアをＤＬデータ生成のためのスレッドに割り当ててＤＬ生成部３１を起動し、ＤＬデータ生成処理を実行させる（ステップＳ３１０）。
【００６７】
一方、ＤＬ生成待ちキュー４３３から取り出したページデータがＤＬデータ生成処理を中断しているページのページデータであれば（ステップＳ３０９でＹＥＳ）、制御部４３１は、中断中のスレッドを再開させるコマンドを生成して、ステップＳ３０２で取得したコア番号で識別される使用可能なＣＰＵコアを中断中のスレッドに割り当てて、ＤＬデータ生成処理を再開させる（ステップＳ３１１）。そして、制御部４３１は、ＤＬデータ生成処理を実行中のページに関する情報をＤＬ生成実行管理テーブル４３４に登録する（ステップＳ３１２）。制御部４３１は、以上のステップＳ３０８からステップＳ３１２の処理を、一度に起動するＤＬ生成部３１の数Ｎ個分だけ繰り返し、ＤＬデータ生成に関する一連の処理を終了する。
【００６８】
ＤＬ生成部３１によるＤＬデータ生成処理が終了すると、制御部４３１は、該当ページのＤＬデータを描画待ちキュー４３５に登録する。描画待ちキュー４３５は、図１６に示すように、生成されたＤＬデータをページ番号順に並べたキューであり、ページ番号の小さいページから順に描画処理を実行させる構造となっている。すなわち、描画待ちキュー４３５に登録されたＤＬデータは、ページ番号が小さいページのＤＬデータが前になるようにページ番号順にソートされる。
【００６９】
また、制御部４３１は、ＤＬデータを描画待ちキュー４３５に登録した後、描画待ちキュー４３５に登録されているＤＬデータの総数を表すカウンタ（Ｅｎｑｕｅ＿ｃｏｕｎｔ）の値をインクリメント（１ＵＰ）しておく。また、制御部４３１は、起動中の描画部３２の総数を表すカウンタ（ｄｒａｗ＿ｃｏｕｎｔ）の値を監視している。そして、起動中の描画部３２の総数が、描画待ちキュー４３５に登録されているＤＬデータの総数以下であることを条件として、描画待ちキュー４３５の先頭からＤＬデータを取り出して、該当するページの描画処理をバンド並列で実行するために複数の描画部３２を起動する。
【００７０】
図１７は、描画部３２の起動に関する制御部４３１の処理の流れを示すフローチャートである。制御部４３１は、まず、ＤＬ生成部３１により生成されたＤＬデータを描画待ちキュー４３５に登録し（ステップＳ４０１）、カウンタＥｎｑｕｅ＿ｃｏｕｎｔの値をインクリメント（１ＵＰ）する（ステップＳ４０２）。
【００７１】
次に、制御部４３１は、カウンタｄｒａｗ＿ｃｏｕｎｔの値とカウンタＥｎｑｕｅ＿ｃｏｕｎｔの値とを比較し、カウンタｄｒａｗ＿ｃｏｕｎｔの値がカウンタＥｎｑｕｅ＿ｃｏｕｎｔの値以下となっているか否か、つまり、起動中の描画部３２の総数が、描画待ちキュー４３５に登録されているＤＬデータの総数以下であるか否かを判定する（ステップＳ４０３）。そして、起動中の描画部３２の総数が、描画待ちキュー４３５に登録されているＤＬデータの総数以下である場合（ステップＳ４０３でＹＥＳ）に、描画待ちキュー４３５の先頭からＤＬデータを取得（Ｄｅｑｕｅ）する（ステップＳ４０４）。
【００７２】
次に、制御部４３１は、ＤＬデータ上に保存されたバンド分割数の情報に基づいて、バンド並列で描画処理を実行するための描画部３２の起動数Ｘを算出し（ステップＳ４０５）、ＣＰＵコア管理部４３２に対して必要なＣＰＵコアの数を要求して、ＣＰＵコア管理部４３２から使用可能なＣＰＵコアのコア数Ｍとコア番号を取得する（ステップＳ４０６）。
【００７３】
次に、制御部４３１は、ステップＳ４０６で取得した使用可能なＣＰＵコアのコア数ＭがステップＳ４０５で算出した描画部３２の起動数Ｘよりも小さいか否かを判定し（ステップＳ４０７）、描画部３２の起動数Ｘ分のＣＰＵコアが使用可能であれば（ステップＳ４０７でＮＯ）、これらのＣＰＵコアを描画のためのスレッドに割り当てて描画部３２を起動し、バンド並列での描画処理を実行させる（ステップＳ４１０）。
【００７４】
一方、使用可能なＣＰＵコアのコア数Ｍが描画部３２の起動数Ｘよりも小さい場合（ステップＳ４０７でＹＥＳ）には、制御部４３１は、現在実行されているＤＬデータの生成中断の処理を実行する（ステップＳ４０８）。そして、ＤＬデータの生成中断によって開放されるＣＰＵコアが１つ以上あれば（ステップＳ４０９でＹＥＳ）、当該ＣＰＵコアを使用可能なＣＰＵコアに加えて、これらのＣＰＵコアを描画のためのスレッドに割り当てて描画部３２を起動し、バンド並列での描画処理を実行させる（ステップＳ４１０）。この場合、使用可能なＣＰＵコアの総数がステップＳ４０５で算出した起動数Ｘに満たない場合でも、１つのスレッドに複数バンドの描画を担当させることで必要な描画部３２の起動数を減らし、使用可能なＣＰＵを利用したバンド並列での描画処理を実行させる。
【００７５】
一方、ＤＬデータの生成中断によって開放されるＣＰＵコアがない場合（ステップＳ４０９でＮＯ）には、制御部４３１は、描画待ちキュー４３５から取り出したＤＬデータを描画待ちキュー４３５の先頭に挿入する（ステップＳ４１１）。
【００７６】
制御部４３１は、以上のフローに従って描画部３２を起動することによって、描画部３２がＤＬデータの生成待ちの状態とならないように制御することができ、ＣＰＵコアの割り当てを適切に行って効率のよい描画を実現することができる。
【００７７】
図１８は、図１７のステップＳ４０８におけるＤＬ生成中断処理の詳細を示すフローチャートである。制御部４３１は、ＤＬ生成中断処理を開始すると、まず、ＤＬ生成実行管理テーブル４３４を参照して、ＤＬデータ生成処理を実行中のページのうちで、ページ番号が最も大きいページを検索する（ステップＳ５０１）。ＤＬ生成実行管理テーブル４３４には、上述したように、ＤＬデータ生成処理を実行中のページのページ番号が管理されているので、この情報を用いて検索が可能である。なお、ＤＬ生成実行管理テーブル４３４の形式として例えばハッシュテーブルなどを利用することで、高速に検索することが可能となる。
【００７８】
制御部４３１は、ステップＳ５０１での検索の結果、ＤＬデータの生成を中断させる対象となるページが取得できた場合（ステップＳ５０２でＹＥＳ）には、該当するページのＤＬデータ生成のスレッド実行を中断し（ステップＳ５０３）、該当するページのページデータをＤＬ生成待ちキュー４３３の先頭に登録する（ステップＳ５０４）。なお、ＤＬデータ生成処理を中断させる場合には、処理済みのＤＬデータへのポインタ、生成途中のＤＬデータへのポインタ、書き込み開始ポインタ等を保存しておき、適切に再開できるようにしておくことが望ましい。
【００７９】
制御部４３１は、以上のステップＳ５０１からステップＳ５０４の処理を、不足するＣＰＵコアの個数分（上述した描画部３２の起動数Ｘと使用可能なＣＰＵコアの数Ｍとの差分）だけ繰り返した後、ＤＬ生成中断処理を終了する。また、処理の途中でＤＬデータ生成を実行中のページがなくなった場合（ステップＳ５０２でＮＯ）は、その時点でＤＬ生成中断処理を終了する。
【００８０】
図１９は、図１７のステップＳ４１０における描画実行処理の詳細を示すフローチャートである。制御部４３１は、描画実行処理を開始すると、描画対象となるページのバンドを描画する関数をスレッドとして生成し、生成したスレッドに使用可能なＣＰＵを割り当てることで描画部３２を起動する（ステップＳ６０１）。制御部４３１は、このステップＳ６０１の処理を描画対象となるページのバンド数分繰り返し、起動した描画部３２にバンド並列での描画を実行させる。そして、バンド描画が終了したら、そのバンド描画のスレッドに割り当てられているＣＰＵコアの開放を、ＣＰＵコア管理部４３２に対して要求する（ステップＳ６０２）。
【００８１】
制御部４３１は、以上のようにしてＤＬ生成のためのスレッドの生成およびＣＰＵコアの割り当てと、バンド描画のためのスレッドの生成およびＣＰＵコアの割り当てを行うことで、ＤＬ生成部３１によるページ並列でのＤＬ生成と、描画部３２によるバンド並列での描画を実行させるが、各スレッドの実行中にはスレッド終了の待ち合わせを行う。
【００８２】
具体的には、制御部４３１は、ＰＯＳＩＸスレッド（pthread）のＡＰＩを使用する場合、上述したように、pthread_create()のコマンドを用いてスレッドを生成するが、任意のスレッドの待ち合わせは、pthread_cond_wait()のコマンドを用い、条件変数が書き換わるまでポーリングを行う。この場合、各スレッドを実行中のＣＰＵコアは、スレッドの実行が終了すると、pthread_cond_signal()のコマンドを実行することで、スレッドの終了を制御部４３１に通知することができる。制御部４３１は、ＤＬ生成のためのスレッドを生成してＤＬ生成部３１を起動した後は、pthread_cond_wait()のコマンドを用いてスレッドの待ち合わせを行い、スレッドの終了通知を受け取ると、バンド描画のためのスレッドを生成して描画部３２を起動する。また、制御部４３１は、バンド描画のためのスレッドを生成して描画部３２を起動した後も、pthread_cond_wait()のコマンドを用いてスレッドの待ち合わせを行う。このような条件変数による待ち合わせ機構を利用することによって、いずれかのスレッドが終了した場合に、制御部４３１がスレッド終了の通知を受け取ることができる。
【００８３】
以上、具体的な例を挙げながら詳細に説明したように、本実施の形態にかかる画像形成装置では、ＰＤＬ処理部３０での処理をＤＬ生成部３１によるＤＬデータ生成処理（前処理）と描画部３２によるバンド描画処理（後処理）とに分け、ＰＤＬ処理管理部４３の制御部４３１が、ＤＬ生成部３１を起動してＤＬデータ生成処理を実行させる場合には、複数ページ分の処理に複数のＣＰＵコアを割り当てて複数ページ分のＤＬデータの生成を並列処理で実行させながら、ＤＬデータの生成後に描画部３２を起動して描画処理を実行させる場合には、ページ番号の小さいページの処理に複数のＣＰＵコアを優先的に割り当てて、当該ページの複数バンドの描画を並列処理で実行させるようにしている。したがって、本実施の形態にかかる画像形成装置によれば、ページ番号の小さいページから順に描画処理を完了させることができ、画像の出力待ちの状態を低減して、処理の高速化を実現することができる。
【００８４】
また、本実施の形態にかかる画像形成装置では、ＰＤＬ処理管理部４３が、描画部３２による描画処理の単位となるバンドの分割数を、ＰＤＬデータの各ページのデータサイズに応じてＤＬデータ生成前に決定することにより、簡単な処理でバンド分割を実施しながらバンド並列での描画処理を効率よく実施することが可能となる。一方、バンド分割数をＤＬデータが生成された後に生成されたＤＬデータのサイズに応じて決定するようにした場合には、描画処理の負荷に応じたバンド分割をより適切なかたちで実施することが可能となる。
【００８５】
また、本実施の形態にかかる画像形成装置では、ＰＤＬ処理管理部４３の制御部４３１が、描画部３２による描画処理に複数のＣＰＵコアを割り当てる際に、空き状態にあるＣＰＵコアの数が描画対象となるページのバンド分割数に満たない場合に、ＤＬ生成部３１によるＤＬ生成処理をページ番号の大きい順に中断させて、ＤＬ生成処理の中断により開放されたＣＰＵコアを描画部３２による描画処理に割り当てるようにしているので、限られた個数のＣＰＵコアを効率よく利用しながら、ページ番号の小さいページの描画処理を迅速に完了させることができる。
【００８６】
また、本実施の形態にかかる画像形成装置では、ＰＤＬ処理管理部４３のＣＰＵコア管理部４３２がＣＰＵコア管理リストを用いてコントローラ１に搭載されている複数のＣＰＵコアの稼動状態を管理し、ＰＤＬ処理管理部４３の制御部４３１が、ＣＰＵコア管理部４３２への問い合わせによって空き状態にあるＣＰＵコアを確認するようにしているので、ＣＰＵコアの稼動状態が適切に管理されるとともに、実行する処理に対するＣＰＵコアの割り当てを適切に実施することができる。
【００８７】
また、本実施の形態にかかる画像形成装置では、コントローラ１に入力されたＰＤＬデータがインデックス情報を持たないＰＤＬデータの場合には、ＰＤＬ制御部４０のページ検知部４１によりＰＤＬデータのページの切れ目であるページ開始オペレータ、ページ終了オペレータを検知し、インデックス生成部４２によりＰＤＬデータの各ページの境界を表すインデックス情報を生成するようにしているので、インデックス情報を持たないＰＤＬデータが入力された場合にも、ページ単位でのＤＬデータ生成の並列処理およびバンド描画の並列処理を実行することができる。
【００８８】
以上説明した本実施の形態にかかる画像形成装置において特徴的な機能は、上述したように、コントローラ１において画像形成プログラムが実行されることによって実現される。画像形成装置のコントローラ１で実行される画像形成プログラムは、例えば、コントローラ１内のＲＯＭ１１に予め組み込まれて提供される。また、画像形成装置のコントローラ１において実行される画像形成プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。さらに、画像形成装置のコントローラ１で実行される画像形成プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、画像形成装置のコントローラ１で実行される画像形成プログラムを、インターネット等のネットワーク経由で提供または配布するように構成してもよい。
【００８９】
画像形成装置のコントローラ１で実行される画像形成プログラムは、上述したＰＤＬ解析部２４の各部、すなわちＰＤＬ制御部４０のページ検知部４１、インデックス生成部４２、ＰＤＬ処理管理部４３（制御部４３１、ＣＰＵコア管理部４３２）や、ＰＤＬ処理部３０のＤＬ生成部３１、描画部３２を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（プロセッサ）１０が上記ＲＯＭ１１から画像形成プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、ＰＤＬ制御部４０のページ検知部４１、インデックス生成部４２、ＰＤＬ処理管理部４３（制御部４３１、ＣＰＵコア管理部４３２）や、ＰＤＬ処理部３０のＤＬ生成部３１、描画部３２が主記憶装置上に生成されるようになっている。
【００９０】
なお、本発明は、上述した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。例えば、上述した実施の形態では、１ページ分の描画処理をバンド単位で実行するようにしているが、例えば、１ページ分の画像をＣＭＹＫ、ＲＧＢ等の描画プレーン単位で複数の描画領域に分割して、描画プレーン単位で描画処理を行うなど、他の基準で描画処理を分散させるようにしてもよい。また、上述した実施の形態では、画像形成装置の例としてプリンタエンジン２により画像の印刷を行うプリンタを例示しているが、本発明は、プリンタ以外にも、複写機、スキャナ装置、ファクシミリ装置、あるいはこれらの機能を併せ持つ複合機など、各種の画像形成装置において有効に適用可能である。
【符号の説明】
【００９１】
１  コントローラ
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
２４  ＰＤＬ解析部
３０  ＰＤＬ処理部
３１  ＤＬ生成部
３１４  ＤＬ保存用データメモリ
３２  描画部
４０  ＰＤＬ制御部
４１  ページ検知部
４２  インデックス生成部
４３  ＰＤＬ処理管理部
４３１  制御部
４３２  ＣＰＵコア管理部
４３３  ＤＬ生成待ちキュー
４３４  ＤＬ生成実行管理テーブル
４３５  描画待ちキュー
【先行技術文献】
【特許文献】
【００９２】
【特許文献１】特開２００６−１５９７３８号公報
【図１】
2011167857.tif 000003
【図２】
2011167857.tif 000004
【図３】
2011167857.tif 000005
【図４】
2011167857.tif 000006
【図５】
2011167857.tif 000007
【図６】
2011167857.tif 000008
【図７】
2011167857.tif 000009
【図８】
2011167857.tif 000010
【図９】
2011167857.tif 000011
【図１０】
2011167857.tif 000012
【図１１】
2011167857.tif 000013
【図１２】
2011167857.tif 000014
【図１３】
2011167857.tif 000015
【図１４】
2011167857.tif 000016
【図１５】
2011167857.tif 000017
【図１６】
2011167857.tif 000018
【図１７】
2011167857.tif 000019
【図１８】
2011167857.tif 000020
【図１９】
2011167857.tif 000021