説明

画像形成装置、画像形成方法、および画像形成プログラム

【課題】ページ番号の小さいページの処理が優先的に完了するように並列処理を実行して画像の出力待ちの状態を低減し、処理の高速化を実現することができる画像形成装置、画像形成方法、および画像形成プログラムを提供する。
【解決手段】PDL処理部での処理をDL生成部31によるDLデータ生成処理(前処理)と描画部32によるバンド描画処理(後処理)とに分け、PDL処理管理部43の制御部431が、DL生成部31を起動してDLデータ生成処理を実行させる場合には、複数ページ分の処理に複数のCPUコアを割り当てて複数ページ分のDLデータの生成を並列処理で実行させながら、DLデータの生成後に描画部32を起動して描画処理を実行させる場合には、ページ番号の小さいページの処理に複数のCPUコアを優先的に割り当てて、当該ページの複数バンドの描画を並列処理で実行させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のCPUコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置、画像形成方法、および画像形成プログラムに関する。
【背景技術】
【0002】
PDL(Page Descript Language;ページ記述言語)で記述されたPDLデータを解釈して画像を形成する画像形成装置においては、扱う画像の高解像度化や装置自体の高機能化に伴ってCPUの処理負荷が増大する傾向にあり、画像形成に関わる処理を迅速に実行することが難しい状況となってきている。そこで、この種の画像形成装置では、複数のCPUを用いる、あるいはマルチコアCPUを用いることにより画像形成に関わる処理を並列して実行できるようにして、処理の高速化を図ることが検討されている。
【0003】
例えば、特許文献1には、複数のCPUを用いて複数ページ分のレンダリングを並列処理することが可能な画像形成装置が開示されている。
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、複数のCPUを用いて複数ページ分のレンダリング処理を並列に実行したとしても、画像の出力はページ番号が小さいページから順に行われるため、ページ番号が小さいページの処理が完了しなければ画像の出力は行えないことになる。ここで、ページごとのレンダリング処理の処理負荷はページに記述されている内容によって異なるため、ページ番号が小さいページの処理負荷がページ番号の大きいページの処理負荷よりも大きい場合には、ページ番号の大きいページの処理が先に完了しても出力待ちの状態が生じ、並列処理の利点である処理の高速化が十分に発揮されないという問題がある。
【0005】
本発明は、上記に鑑みてなされたものであって、ページ番号の小さいページの処理が優先的に完了するように並列処理を実行して画像の出力待ちの状態を低減し、処理の高速化を実現することができる画像形成装置、画像形成方法、および画像形成プログラムを提供することを目的としている。
【課題を解決するための手段】
【0006】
上述した課題を解決し、目的を達成するために、本発明は、複数のCPUコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において、PDLデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段と、前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段と、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画する描画手段と、前記データ保持手段に前記中間データが保持されていない場合は、複数のCPUコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のCPUコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段と、を備えることを特徴とする。
【0007】
また、本発明にかかる画像形成方法は、複数のCPUコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において実行される画像形成方法であって、PDLデータを解析してページごとに独立した描画のための中間データを生成するステップと、生成したページごとの中間データをデータ保持手段に保持させるステップと、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画するステップと、を有し、前記データ保持手段に前記中間データが保持されていない場合は、前記中間データを生成する処理に複数のCPUコアを割り当てて、複数ページ分の中間データ生成処理を並列で実行するとともに、前記データ保持手段に前記中間データが保持されている場合は、前記描画領域ごとに1ページ分の画像を描画する処理に複数のCPUコアを割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行することを特徴とする。
【0008】
また、本発明にかかる画像形成プログラムは、複数のCPUコアを有するコンピュータに、PDLデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段としての機能と、前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段としての機能と、前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画する描画手段としての機能と、前記データ保持手段に前記中間データが保持されていない場合は、複数のCPUコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のCPUコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段としての機能と、を実現させるための画像形成プログラムである。
【発明の効果】
【0009】
本発明によれば、PDLデータから中間データを生成する場合は複数ページ分の処理に複数のCPUコアを割り当ててページ単位の並列処理を行いながら、中間データが生成された後にこの中間データに基づいて描画処理を行う場合には、ページ番号の小さいページの処理に複数のCPUコアを優先的に割り当てて、当該ページの複数の描画領域の描画処理を並列に実行するので、ページ番号の小さいページから順に描画処理を完了させることができ、画像の出力待ちの状態を低減して、処理の高速化を実現することができるという効果を奏する。
【図面の簡単な説明】
【0010】
【図1】図1は、画像形成装置のハードウェア構成を示すブロック図である。
【図2】図2は、画像形成装置のコントローラ上で実現される機能構成を示す機能ブロック図である。
【図3】図3は、構造化されたPDLデータと構造化されていないPDLデータとの違いを説明する図である。
【図4】図4は、ホストコンピュータから画像形成装置のコントローラに対して構造化されたPDLデータが送信された場合におけるコントローラによる処理の概要を示す図である。
【図5】図5は、PDL解析部のPDL処理部およびPDL制御部をさらに詳細に示す機能ブロック図である。
【図6】図6は、DL処理部のDL生成部によって生成されるDLの一例を示す図である。
【図7】図7は、バンド分割を説明する図である。
【図8】図8は、PDL処理部のDL生成部をさらに詳細に示す機能ブロック図である。
【図9】図9は、PDL処理部の描画部を説明する図である。
【図10】図10は、PDL制御部のPDL処理管理部をさらに詳細に示す機能ブロック図である。
【図11】図11は、CPUコア管理部によるCPUコアの管理方法を説明する模式図である。
【図12】図12は、CPUコア管理部による処理の概要を示すフローチャートである。
【図13】図13は、DL生成待ちキューの概要を説明する模式図である。
【図14】図14は、DL生成実行管理テーブルの概要を説明する模式図である。
【図15】図15は、DL生成に関する制御部の処理の流れを示すフローチャートである。
【図16】図16は、描画待ちキューの概要を説明する模式図である。
【図17】図17は、描画部の起動に関する制御部の処理の流れを示すフローチャートである。
【図18】図18は、制御部によるDL生成中断処理の詳細を示すフローチャートである。
【図19】図19は、制御部による描画実行処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下に添付図面を参照して、この発明にかかる画像形成装置、画像形成方法、および画像形成プログラムの最良な実施の形態を詳細に説明する。
【0012】
図1は、本実施の形態にかかる画像形成装置のハードウェア構成を示すブロック図である。この画像形成装置は、コントローラ1と、用紙に画像を印刷するためのプリンタエンジン2と、ユーザの操作入力を受け付けるとともに画像形成装置の状態表示を行うオペレーションパネル3とを備える。また、この画像形成装置は、LANなどのネットワークによりホストコンピュータ4と接続されており、ホストコンピュータ4からネットワーク経由で伝送されるPDL(Page Description Language;ページ記述言語)データに基づいてコントローラ1で画像を形成し、プリンタエンジン2による印刷などの画像出力を行う。
【0013】
コントローラ1は、画像を形成するためのソフトウェアとして実装されている画像形成プログラムを実行するCPU10と、画像形成プログラムを格納するROM11と、画像形成プログラムを実行することで生成されるデータを保存するページメモリや画像形成プログラムの実行に必要なワークメモリとして利用するRAM12と、画像形成装置の印刷条件の設定情報などを保存しておく不揮発性メモリであるNVRAM13と、ネットワーク上に接続されたホストコンピュータ4とデータのやり取りを行うためのネットワークI/F14と、プリンタエンジン2に対して印刷指示等を出力するためのエンジンI/F15と、オペレーションパネル3との間でデータの入出力を行うためのパネルI/F16とを備え、これらが内部バス17によって相互に接続された構成である。なお、図1においては1つのCPU10のみを図示しているが、本実施の形態にかかる画像形成装置では、マルチスレッド技術を利用したレンダリングの並列処理を実行可能にするために、複数のCPUコアをコントローラ1内に設けている。複数のCPUコアは複数のCPU10に分散して搭載されていてもよいし、1つのCPU10に搭載する、つまり、CPU10としてマルチコアCPUを用いるようにしてもよい。
【0014】
図2は、コントローラ1のCPU10が画像形成プログラムを実行することによりコントローラ1上で実現される機能構成を示す機能ブロック図である。コントローラ1には、画像形成プログラムによって実現される機能構成として、ネットワークI/F14を制御してホストコンピュータ4との間のデータのやり取りを行うネットワークI/F制御部21と、パネルI/F16を制御してオペレーションパネル3との間のデータの入出力を行うパネルI/F制御部22と、エンジンI/F15を制御してプリンタエンジン2に対する印刷指示等の出力を行うエンジンI/F制御部23と、PDLデータを解析して印刷画像を形成するPDL解析部24と、コントローラ1全体の動作を統括的に制御するプリンタコントロールシステム部(Printer Control System)25の各機能構成が設けられる。ここで、PDL解析部24は、PDLデータから印刷画像を形成する処理を実行するPDL処理部30と、PDL処理部30による処理を制御するPDL制御部40とから構成される。
【0015】
一般的に、PDLデータには、構造化されたPDLデータと、構造化されていないPDLデータとが存在する。図3は、構造化されたPDLデータと構造化されていないPDLデータとの違いを説明する図である。
【0016】
構造化されていないPDLデータは、図3(A)に示すように、ページごとの描画命令が順次記載されるとともに、印刷が必要な箇所で印刷命令が記述され、これが繰り返されるデータ形式となっている。このため、データを順次受け取りながら処理できるといった特徴があるが、命令はデータの最初から最後まで順番に確認していく必要がある。また、あるページで利用された描画命令をそれ以降のページで利用する場合もあり、単純にそのページだけを抜き出しても描画できない(ページ単位で独立して描画できない、つまりページ独立でない)。このような構造化されていないPDLデータの代表例としては、ヒューレット・パッカード(Hewlett-Packard)社が開発したPCL(Printer Control Language)や、アドビ(Adobe)社が開発したポストスクリプト(PostScript)などが挙げられる。
【0017】
一方、構造化されたPDLデータは、例えば図3(B)に示すように、ページごとの文書情報のほかに、ページ情報やページの構成要素の情報の関連が、インデックス情報としてデータ末尾に記載されている。このため、データを解釈する側は、まずデータ末尾のインデックス情報を参照することで、各ページの文書情報、ページ情報、ページ要素の情報を参照していくことが可能である。ただし、構造化されたPDLデータは、構造化されていないPDLデータと異なり、データ末尾にインデックス情報が含まれているため、基本的にはデータを全て参照できる状態(つまり、ランダムアクセス可能な状態)でなければ解釈できない。このような構造化されたPDLデータの代表例としては、アドビ(Adobe)社が開発したPDF(Portable Document Format)や、マイクロソフト(Microsoft)社が開発したXPS(XML paper specification)などが挙げられる。
【0018】
なお、構造化されていないデータの代表例として挙げたPCLやポストスクリプトであっても、前のページで利用した描画命令をそれ以降のページで利用しないことを保証した印刷データ(つまりページ独立が保証された印刷データ)であれば、末尾のインデックス情報がなくともページの開始、終了を検索することでページの区切りを検知してページ情報を独立に参照可能となる。ここでは、このようなページ独立が保障された印刷データも含めたものを、構造化されたデータと定義する。
【0019】
図4は、ホストコンピュータ4から画像形成装置のコントローラ1に対して構造化されたPDLデータが送信された場合におけるコントローラ1による処理の概要を示す図である。この図4に示す処理は、上述した複数のCPUコアにより分散して行われる。
【0020】
まず、プリンタコントロールシステム部25が、ネットワークI/F制御部21を介して構造化されたPDLデータを受信し(ステップS101)、受信したPDLデータをPDL解析部24のPDL制御部40に受け渡す(ステップS102)。PDL制御部40は、プリンタコントロールシステム部25が受信したPDLデータをRAM12にスプールする(ステップS103)。なお、ここではPDLデータをスプールするメモリとしてRAM12を利用しているが、画像形成装置がハードディスクドライブ(HDD)等の補助記憶装置を備える場合は、この補助記憶装置にPDLデータをスプールするようにしてもよい。
【0021】
次に、PDL制御部40は、RAM12にスプールしたPDLデータのインデックス情報を参照し、各ページのデータ開始位置を記録する。なお、プリンタコントロールシステム部25が受信したPDLデータがインデックス情報を持たないPDLデータの場合には、PDL制御部40は、PDLデータをRAM12にスプールする際にページの境界を検知してインデックス情報を作成する。そして、PDL制御部40は、PDL処理部30で処理すべきページのデータ開始位置をPDL処理部30に入力する(ステップS104)。なお、ここでは、3ページ分の処理を並列処理する場合を例示しているが、PDL処理部30で並列処理するページ数は設定パラメータに応じて決定され、操作者がパラメータを変更することによって任意の数に設定することができる。
【0022】
次に、PDL処理部30がRAM12にアクセスし、PDL制御部40から入力されたデータ開始位置にPDLデータを読み込みにいく(ステップS105)。そして、PDL処理部30は、読み込んだPDLデータのページ要素を解釈し、出力デバイスであるプリンタエンジン2が解釈できるビットマップ形式に変換して、変換したビットマップデータをプリンタコントロールシステム部25に受け渡す(ステップS106)。このとき、PDL処理部30は、PDLデータのページ要素を、まず、ディスプレイリスト(Display List)と呼ばれる中間データ形式に変換し(以下、ディスプレイリストの形式に変換されたデータをDLデータという。)、生成したDLデータに基づいて、バンドごとに描画処理を行ってビットマップデータを生成する。ここで、特に本実施の形態にかかる画像形成装置では、PDL処理部30による処理を、DLデータを生成するまでの前処理と、DLデータに基づいて1ページ分の画像をバンドと呼ばれる描画単位(描画領域)ごとに描画する後処理とに分け、前処理はPDLデータの複数のページ処理に複数のCPUコアを割り当ててページ単位で並列処理を行う一方で、後処理にはページ番号の小さいページの複数のバンド処理に複数のCPUコアを優先的に割り当ててバンド単位で並列処理を行い、ページ番号の小さいページから順にビットマップデータの生成が完了するようにしている。
【0023】
プリンタコントロールシステム部25は、PDL処理部30からビットマップデータが送られてくると、このビットマップデータをエンジンI/F制御部23に転送する(ステップS107)。なお、画像形成装置がHDD等の補助記憶装置を備える場合には、PDL処理部30で生成されたビットマップデータを一旦補助記憶装置にスプールし、プリンタエンジン2が必要とするタイミングで、補助記憶装置にスプールしたビットマップデータを読み出してエンジンI/F制御部23に送信するようにしてもよい。また、PDL処理部30からエンジンI/F制御部23にビットマップデータを直接送信するようにしてもかまわない。
【0024】
以上の処理は、コントローラ1が備える複数のCPUコアによって並列に行われる。なお、PDLデータへの同時読み込みアクセスが可能なため、PDLデータを分割する処理は不要である。
【0025】
図5は、PDL解析部24のPDL処理部30およびPDL制御部40をさらに詳細に示す機能ブロック図である。図5に示すように、PDL制御部40は、ページ検知部41とインデックス生成部42とPDL処理管理部43とを有しており、PDL処理部30は、DL生成部31と描画部32とを有している。
【0026】
PDL制御部40は、上述したように、プリンタコントロールシステム部25が受信したPDLデータをRAM12などのメモリにスプールする。この際、PDLデータをメモリ上に展開するときに、ページ検知部41により、PDLデータのページの切れ目であるページ開始オペレータ、ページ終了オペレータを検知する。そして、インデックス生成部42により、当該PDLデータにおける各ページのメモリ上のインデックスを生成する。インデックス生成部42は、各ページのインデックスを生成すると、PDL処理管理部43に対して、メモリ上に展開されたPDLデータのメモリアドレスと各ページのインデックス情報を受け渡す。ここで、各ページのインデックス情報は、先頭データからのオフセットを示している。
【0027】
PDL処理管理部43は、PDLデータのページごとにDLデータを生成するためのスレッドの生成、バンドごとに描画を行うスレッドの生成と、それぞれのスレッドへのCPUコアの割り当て管理を行う。ここで、スレッドの生成には、例えばPOSIX(Portable Operating System Interface)スレッド(pthread)のAPIを使用する場合は、pthread_create()のコマンドを用いる。また、生成したスレッドにCPUコアを割り当てる方法としては、プロセッサアフィニティと呼ばれる機構を使用することができる。
【0028】
PDL処理部30は、PDLデータに基づくレンダリング処理を、DL生成部31による前処理と、描画部32による後処理とに分離して実行する。
【0029】
DL生成部31は、PDLデータをページ単位でパーシングしてDLデータを生成し、生成したDLデータをRAM12に保存する。ここで、本実施の形態にかかる画像形成装置においては、複数のCPUコアを用いて複数のDL生成部31を起動し、PDLデータの複数ページのDLデータ生成を複数のDL生成部31により並列に行うようにしている。なお、画像形成装置がHDD等の補助記憶装置を備える場合には、PDL生成部31で生成したDLデータを補助記憶装置に保存するようにしてもよい。以下では、RAM12もしくは補助記憶装置におけるDLデータの保存領域をDL保存用データメモリと表記する。
【0030】
描画部32は、DL保存用データメモリに保存されたDLデータに基づいて、バンド単位で描画処理を行う。ここで、本実施の形態にかかる画像処理装置においては、複数のCPUコアを用いて複数の描画部32を起動し、複数バンドの描画処理を並列に行うようにしており、特に、ページ番号の小さいページから優先的に、複数の描画部32による複数バンドの描画処理を実行するようにしている。なお、描画部32の描画処理の単位となるバンドの分割数は、DL生成部30によるDLデータの生成前に決定するようにしてもよいし、DL生成部30によってDLデータが生成された後に決定するようにしてもよい。以下、DLデータ生成前にバンド分割数を決定する場合と、DLデータ生成後にバンド分割数を決定する場合とに分けて、バンド分割数を決定する具体的方法について説明する。
【0031】
バンド分割数の決定は、PDL制御部40のPDL処理管理部43により実施される。PDL処理管理部43は、DLデータ生成前にバンド分割数を決定する場合には、PDLデータの各ページのデータサイズに応じて、各ページのバンド分割数を決定する。すなわち、PDLデータの切れ目を表すインデックス情報が先頭データからのオフセットを示す情報となっているため、このインデックス情報に基づいて各ページのデータサイズを算出することができる。PDL処理管理部43は、PDLデータのインデックス情報に基づいて算出した各ページのデータサイズに応じて、ページのデータサイズが大きいほどバンド分割数が多くなるように分割するバンド数を決定し、PDL処理部30のDL生成部31の起動時に、バンド分割する単位をDL生成部31に対して指定する。
【0032】
DLデータをバンド分割する方法の1つとして、DLデータ生成時にDLデータを構成する各描画データがどのバンドに入るのかを情報として保存しておく方法が知られている。この方法によりDLデータをバンド分割する場合には、DL生成部31を起動してDLデータの生成を実行するのに先立ってPDLデータの各ページのバンド幅(=バンド分割数)を予め決定しておく必要があり、バンド分割数を決定する方法としては、PDLデータの各ページのデータサイズに応じてバンド分割数を決定する方法を用いる。具体的には、例えばPDLデータの各ページのデータサイズを大、中、小の3つのサイズに分類し、データサイズが“大”のページは描画処理に用いるCPUコアの数を最大にするためにバンド分割数を最大とし、データサイズが“小”のページはバンド分割数を最小、データサイズが“中”のページにはバンド分割数を最大値と最小値との中間値に決定する。このように、DLデータ生成前にPDLデータの各ページのデータサイズに応じてページごとのバンド分割数を決定することにより、簡単な処理でバンド分割を実施しながらバンド並列の描画処理を効率よく実施することができる。
【0033】
一方、DLデータ生成後にバンド分割数を決定する場合には、PDL処理管理部43は、PDL処理部30のDL生成部31により1ページ分のDLデータの生成が終了した時点で、生成されたDLデータのサイズ(以下、DLサイズという。)に応じて、当該ページのバンド分割数を決定する。DL生成部31により1ページ分のDLデータの生成が終了すると、そのページのDLサイズが分かるので、PDL処理管理部43は、このDLサイズに応じて分割するバンド数を決定する。具体的には、PDL処理管理部43は、DLサイズを大、中、小の3つのサイズに分類し、DLサイズが“大”の場合は描画処理に用いるCPUコアの数を最大にするためにバンド分割数を最大とし、DLサイズが“小”の場合はバンド分割数を最小、DLのサイズが“中”の場合にはバンド分割数を最大値と最小値との中間値に決定する。
【0034】
DLデータ生成後にバンド分割数を決定する方法の場合は、決定されたバンド数に応じて起動される複数の描画部32が、DL保存用データメモリに保存された1ページ分のDLデータの中から、それぞれ担当するバンド内に入るデータを検索して描画を実行することになる(バンディング処理)。このようなバンディング処理は、バンドごとに起動される複数の描画部32において分散されたかたちで実施される点がデメリットとなるが、実際に描画する形態に近いDLデータのサイズに応じてバンド分割数を決定することができるため、上述したPDLデータの各ページのデータサイズに応じてバンド分割数を決定する場合と比較して、描画処理の負荷に応じたバンド分割をより適切なかたちで実施できるといったメリットがある。例えば、ページ全体に円を描く場合、描画する円がページ全体に亘るために描画処理の負荷は比較的大きくなるが、PDLデータでは円は簡単な命令1つで表現されるためにデータサイズが小となり、PDLデータのデータサイズに応じてバンド分割数を決定するとバンド分割数が小さな値となる。これに対して、DLデータでは、円はスキャンラインデータ(ピクセルデータ)に変換されるため、ページ全体に亘って円を描画する場合のDLサイズは大となり、DLサイズに応じてバンド分割数を決定すれば、バンド分割数を大きな値として描画処理を効率よく行うことが可能となる。
【0035】
図6は、PDL処理部30のDL生成部31によって生成されるDLデータの一例を示す図である。中間データとしてのDLデータは、DL保存用データメモリ上に図6に示すようなデータ構造を形成する。なお、この図6に示す例は、DLデータ生成前にバンド分割数が決定されている場合のDLデータの例である。
【0036】
「ページ情報管理」は、出力デバイスのページ幅、高さ、深さ、描画カラースペース等の情報を保持している領域である。
【0037】
「band 0 情報管理」から「band n 情報管理」は、1ページをn+1個にバンド分割した場合の各バンドバッファの情報を保持している。具体的には、「band 0 情報管理」から「band n 情報管理」には、基本情報として各バンドの高さ(一般にはバンド幅ともいう)、バンドに含まれているオブジェクト数、全オブジェクトサイズ(ヘッダを含む)が含まれている。また、その他の付加情報としては、オブジェクト種類ごとの数、サイズなどがある。
【0038】
図7は、バンド分割を説明する図であり、1つのページをband0からband4の5つのバンドバッファに分割し、円を描画した例を示したものである。この図7において、円はband0からband2に跨って描画されている。この図7に示す例において、円はスキャンラインといわれる1ピクセルの高さと幅を持つ情報の集まりに変換され、3つのデータブロックに分割される。それぞれのデータブロックは、band0、band1、band2にそれぞれ描画されることになる。これらのデータブロックは、各バンドの「Object Header」と「Object Data」からなるデータ領域に記録される。各バンドの「band情報管理」は、データ領域へのポインタを保持している。
【0039】
図6の「Object Header」は、描画オブジェクトの情報を保持している。その情報は、描画オブジェクトの種類、描画オブジェクトのサイズ、描画オブジェクトのカラースペース等、描画に関係する情報である。なお、描画オブジェクトの種類としては、文字、線、ベクター塗りつぶし図形、スキャンライン、イメージなどがある。図7に示した例では、描画オブジェクトとしてスキャンラインが相当し、スキャンラインのサイズ、カラースペース、カラー値の情報が「Object Header」に保持されている。また、「Object Data」領域には、各描画オブジェクトのデータが記録される。図7に示した例では、スキャンラインデータが相当する。
【0040】
図8は、PDL処理部30のDL生成部31をさらに詳細に示す機能ブロック図である。DL生成部31は、図8に示すように、DLデータの生成に一度に割り当てられるCPUコアの数Nに応じて複数設けられる。これら複数のDL生成部31−1,31−2・・・31−Nは、それぞれ、PDLパーサ部311−1,311−2・・・311−Nと、描画モジュールI/F部312−1,312−2・・・312−Nと、データ変換部313−1,313−2・・・313−Nと、を有する。
【0041】
PDLパーサ部311−1,311−2・・・311−Nは、PDLデータの言語解析を行って必要な情報を抽出(パーシングする)モジュールであり、上述したポストスクリプト、PDF、PCL、XPS等の言語ごとに構文を解析する。PDLパーサ部311−1,311−2・・・311−Nは、PDLの形式に依存する構文を解析して描画モジュールI/F部312−1,312−2・・・312−Nを呼ぶことで描画を実行する。
【0042】
描画モジュールI/F部312−1,312−2・・・312−Nは、描画インターフェースとなるものであり、文字、線、図形、色指定等の描画指定を行う。
【0043】
データ変換部313−1,313−2・・・313−Nは、描画モジュールI/F部312−1,312−2・・・312−Nで指定された描画データを、中間データであるDLの形式に変換し、生成したDLデータをDL保存用データメモリ314−1,314−2・・・314−Nに保存する。なお、データ変換部313−1,313−2・・・313−Nは、DLデータ生成時に描画データのバンディング情報を生成することも可能である。
【0044】
DL保存用データメモリ314−1,314−2・・・314−Nは、上述したようにRAM12もしくは補助記憶装置におけるDLデータの保存領域であり、これらDL保存用データメモリ314−1,314−2・・・314−Nには、DL生成部31-1,31−2・・・31−Nにより生成された1ページ分のDLデータがそれぞれ保存される。
【0045】
本実施の形態にかかる画像形成装置においては、以上のような複数のDL生成部31−1,31−2・・・31−NがPDL制御部40のPDL処理管理部43によって同時に起動されることで、PDLデータの複数ページ分のDLデータの生成を並列して行うことが可能となっている。なお、同時に起動されるDL生成部31の数は、コントローラ1が備えるCPUコアの数の範囲内において、設定によって変更することが可能である。
【0046】
PDL処理部30の描画部32は、DL生成部31と同様に、PDL制御部40のPDL処理管理部43によって起動される。ここで、描画部32は、バンドごとの描画処理に一度に割り当てられるCPUコアの数Xに応じて複数設けられる。すなわち、PDL処理管理部43は、描画の対象となるページのバンド分割数に応じて1ページ分の描画をバンド並列で実施するのに必要なCPUコアの数Xを割り出し、図9に示すように、バンド並列での描画処理に割り当てるCPUコアの数Xに応じて、複数の描画部32−1,32−2・・・32−Xを起動する。これら描画部32−1,32−2・・・32−Xは、それぞれ描画の対象となるページのDLデータが格納されたDL保存用データメモリ314からDLデータを読み込んで、バンド分割された領域に書き込む処理行う。なお、各ページのバンド分割数は、上述したようにDLデータ生成前に決定する方法と、DLデータ生成後に決定する方法とのいずれかで行われるが、DLデータ生成後にバンド分割数を決定して描画部32−1,32−2・・・32−Xによりバンディング処理を行う場合には、各描画部32−1,32−2・・・32−Xが、描画処理の対象となるページのDLデータから、描画を担当するバンドのバンドデータを抽出して描画処理を実施することになる。また、バンドごとの描画処理は、PDL処理管理部43がDLデータの生成が終了したページのうちでページ番号が小さいページを優先して描画部32−1,32−2・・・32−Xのスレッドを起動することで、ページ番号が小さいページから順に実行される。
【0047】
以上のように、本実施の形態にかかる画像形成装置では、PDL処理部30での処理をDL生成部31による処理(前処理)と描画部32による処理(後処理)とに分け、DL生成部31では複数のCPUコアを用いてページ並列でDLデータの生成を行い、描画部32では複数のCPUコアを用いて、ページ番号の小さいページから順に、バンド並列で描画処理を行うようにしている。
【0048】
ここで、コントローラ1が8個のCPUコアを備え、初期設定でDL生成部31での処理に割り当てるCPUコアの数が4つ(同時に起動されるDL生成部31の数が4つ)に設定されている場合を例に挙げて、DL生成部31と描画部32間でCPUコアを動的に切り替える方法の具体例について説明する。
【0049】
DL生成部31での処理に4つのCPUコアが割り当てられることによって、4ページ分のDLデータの生成が並列で行われることになる。一方、描画部32での処理には、8つのCPUコアのうち、PDL制御部40での処理に用いるCPUコアを除いた7つのCPUコアを割り当てることが可能であり、最大で7バンド分の描画処理を並列で実行できる。
【0050】
本実施の形態にかかる画像形成装置では、ページ並列でDLデータの生成を行いつつ、ページ番号の小さいページから順に描画処理をできるだけ早く終了させるようにするために、並列処理でDLデータの生成を行っている複数のページのうちで、ページ番号が最も小さいページのDLが生成された段階でそのページのバンド並列での描画処理に多くのCPUコアを割り当てることが求められる。ここで、ページ番号が最も小さいページのDLデータが生成された段階でそのページの描画処理に7つのCPUコアを割り当てようとしても、他のページのDLデータの生成が継続されている状態では、7つのCPUコアを割り当てることができない。
【0051】
そこで、本実施の形態にかかる画像形成装置では、ページ番号が最も小さいページの描画処理を優先させるために、ページ番号が最も小さいページのDLデータが生成された段階で他のページのDLの生成が継続されている場合は、PDL処理管理部43が、必要なCPUコアの数だけ、DLデータを生成するためのスレッドに対して処理の中断を要求して、DLデータの生成に割り当てられているCPUコアを開放し、開放したCPUコアをページ番号が最も小さいページの描画処理に割り当てるようにしている。
【0052】
具体的には、例えば、ページ番号が最も小さいページのバンド分割数が当該ページのデータサイズから6バンド分割とされている場合において、ページ番号が最も小さいページのDLデータが生成された段階で、並列処理されている他の3ページのDLデータの生成処理が継続中である場合には、この状態でページ番号が最も小さいページの描画処理に割り当て可能なCPUコアの数は4つであり、6バンド並列で描画処理を行うには2つのCPUコアが不足することとなる。そこで、PDL処理管理部43は、DLデータ生成中のページのうちで、ページ番号が大きなページから順に2つのページのDLデータの生成を中断し、それによって開放された2つのCPUコアを、ページ番号が最も小さいページの描画処理に割り当てる。これにより、ページ番号が最も小さいページの6バンドの描画処理を並列で行うことが可能となる。
【0053】
以上のようなCPUコアの割り当て管理は、PDL制御部40のPDL処理管理部43によって実施される。なお、スレッドの中断(停止)は、例えばPOSIXスレッド(pthread)のAPIを使用する場合は、thr_suspend()のコマンドによりスレッドの実行中断を行うことが可能であり、thr_continue()のコマンドによりスレッドの実行再開を行うことが可能である。
【0054】
図10は、PDL制御部40のPDL処理管理部43をさらに詳細に示す機能ブロック図である。PDL処理管理部43は、図10に示すように、制御部431と、CPUコア管理部432と、DL生成待ちキュー433と、DL生成実行管理テーブル434と、描画待ちキュー435とを有する。
【0055】
制御部431は、インデックス生成部42から、RAM12上に展開されたジョブ全体のPDLデータの先頭アドレスと各ページの先頭アドレスからの位置(オフセット)を示すインデックス情報を受け取る。また、制御部431は、初期設定パラメータに基づいて、一度に起動するDL生成部31の数を決定し、CPUコア管理部432に対して必要なCPUコアの数を要求して、使用可能なCPUコアに関する情報を取得する。なお、コントローラ1上に搭載されている複数のCPUコアにはそれぞれ固有の番号(コア番号)が割り当てられており、制御部431は、CPUコア管理部432から、使用可能なCPUコアの数および使用可能なCPUコアのコア番号を取得する。
【0056】
CPUコア管理部432は、未使用のCPUコア(空きCPUコア)と使用中のCPUコアとをリスト管理しており、ある処理にCPUコアを割り当てた場合は、図11に示すように、当該CPUコアのコア番号を未使用リストから使用中リストに移動させる。また、CPUコア管理部432は、CPUコアを割り当てている処理が完了した場合には、当該CPUコアのコア番号を使用中リストから未使用リストに移動させる。なお、図11では、コア番号が1〜3の3つの未使用のCPUコアのうち、コア番号1のCPUコアをある処理に割り当てた場合を例示している。
【0057】
図12は、CPUコア管理部432による処理の概要を示すフローチャートである。CPUコア管理部432は、制御部431から必要個数のCPUコアの要求があると、まず、使用可能なCPUコアの数を表す取得コア数CORE_NUMの値をゼロに初期化し(ステップS201)、未使用リストから空きCPUコアを検索する(ステップS202)。そして、空きCPUコアがあれば(ステップS203でYES)、当該CPUコアのコア番号を未使用リストから使用中リストへと移動させて(ステップS204)、取得コア数CORE_NUMの値をインクリメント(1UP)する(ステップS205)。
【0058】
CPUコア管理部432は、以上のステップS202からステップS205の処理を、制御部431から要求されているCPUコアの個数分だけ繰り返し、取得できたCPUコアのコア番号と取得コア数CORE_NUMを制御部431に返す(ステップS206)。また、CPUコア管理部432は、処理の途中で空きCPUコアがゼロになった場合(ステップS203でNO)には、それまでに取得できたCPUコアのコア番号と取得コア数CORE_NUMを制御部431に返す(ステップS206)。
【0059】
制御部431は、CPUコア管理部432から使用可能なCPUコアに関する情報を取得すると、DL生成部31によるDLデータの生成を実行するためにスレッドを作成して、各スレッドにCPUコアを割り当ててDLデータ生成の処理を実行させる。このとき、制御部431は、ページ番号の小さいページからDL生成の処理を開始させるために、DL生成待ちキュー433を利用する。このDL生成待ちキュー433は、図13に示すように、DLデータに変換されていないページデータをページ番号順に並べたキューであり、ページ番号の小さいページから順にDLデータの生成処理を実行させる構造となっている。
【0060】
制御部431は、DLデータ生成の準備が整ったページのページデータをDL生成待ちキュー433に登録する。ここで、DL生成待ちキュー433は、ページ番号が小さいページのページデータが前になるように、各ページのページデータをページ番号順にソートする。したがって、新たに登録するページデータはDL生成待ちキュー433の後ろに入れればよい。次に、制御部431は、DL生成待ちキュー433の先頭からページデータを取り出して、該当するページのDLデータを生成するためにDL生成部31を起動する。
【0061】
また、制御部431は、DL生成実行管理テーブル434を用いて、DLデータ生成処理を実行中のDL生成部31を管理する。DL生成実行管理テーブル434には、図14に示すように、DLデータ生成処理を実行中のページに関する情報として、各ページのページ番号、DLポインタ、PDLデータポインタ、スレッド情報などが登録される。制御部431は、DL生成部31を起動してDLデータ生成処理を開始させた場合は、DL生成実行管理テーブル434に以上のようなDLデータ生成処理を実行中のページに関する情報を登録し、DLデータ生成処理が終了すると、該当するページに関する情報をDL生成実行管理テーブル434から消去する。また、制御部431は、上述したように、ページ番号の小さいページの描画処理に多くのCPUコアを割り当てるために実行中のDLデータ生成処理を中断させる場合は、ページ番号の大きいページから順にDLデータ生成のスレッド実行を中断して、該当するページの情報をDL生成実行管理テーブル434から消去するとともに、該当するページのページデータをDL生成待ちキュー433に再度登録する。このとき、DLデータ生成処理を中断したページのページデータは、DL生成待ちキュー433の先頭から挿入していくことで、中断したDLデータ生成処理を再開させる場合にも、ページ番号の小さいページからDLデータ生成処理を再開させることができる。
【0062】
図15は、DLデータ生成に関する制御部431の処理の流れを示すフローチャートである。なお、この図15のフローチャートで示す例は、各ページのバンド分割数をDLデータ生成前に決定する例である。バンド分割数をDLデータ生成後に決定する場合には、以下に示すステップS305およびステップS306の処理が省略され、DLデータが生成された段階で、DLサイズに応じてバンド分割数が決定されることになる。
【0063】
制御部431は、まず、初期設定パラメータに基づいて一度に起動するDL生成部31の数Nを決定し(ステップS301)、CPUコア管理部432に対して必要なCPUコアの数を要求して、CPUコア管理部432から使用可能なCPUコアのコア数Mとコア番号を取得する(ステップS302)。
【0064】
次に、制御部431は、ステップS302で取得した使用可能なCPUコアのコア数MがステップS301で決定した一度に起動するDL生成部31の数Nと一致するか否かを判定し(ステップS303)、一致しない場合(ステップS303でNO)には、一度に起動するDL生成部31の数Nを使用可能なCPUコアのコア数Mに変更する(ステップS304)。一方、ステップS302で取得した使用可能なCPUコアのコア数MがステップS301で決定した一度に起動するDL生成部31の数Nと一致する場合(ステップS303でYES)には、ステップS301で決定した一度に起動するDL生成部31の数Nを維持する。
【0065】
次に、制御部431は、PDLデータの各ページのインデックス情報に基づいてページのデータサイズを求め(ステップS305)、ページのデータサイズからバンド分割数を決定して(ステップS306)、当該ページのページデータをDL生成待ちキュー433に登録する(ステップS307)。制御部431は、以上のステップS305からステップS307の処理を、一度に起動するDL生成部31の数N個分だけ繰り返す。
【0066】
次に、制御部431は、DL生成待ちキュー433の先頭からページデータを取り出す(ステップS308)。そして、制御部431は、DL生成待ちキュー433から取り出したページデータがDLデータ生成処理を中断したページのページデータかどうかを確認し(ステップS309)、DLデータ生成処理を中断したページではない新規なページのページデータであれば(ステップS309でNO)、ステップS302で取得したコア番号で識別される使用可能なCPUコアをDLデータ生成のためのスレッドに割り当ててDL生成部31を起動し、DLデータ生成処理を実行させる(ステップS310)。
【0067】
一方、DL生成待ちキュー433から取り出したページデータがDLデータ生成処理を中断しているページのページデータであれば(ステップS309でYES)、制御部431は、中断中のスレッドを再開させるコマンドを生成して、ステップS302で取得したコア番号で識別される使用可能なCPUコアを中断中のスレッドに割り当てて、DLデータ生成処理を再開させる(ステップS311)。そして、制御部431は、DLデータ生成処理を実行中のページに関する情報をDL生成実行管理テーブル434に登録する(ステップS312)。制御部431は、以上のステップS308からステップS312の処理を、一度に起動するDL生成部31の数N個分だけ繰り返し、DLデータ生成に関する一連の処理を終了する。
【0068】
DL生成部31によるDLデータ生成処理が終了すると、制御部431は、該当ページのDLデータを描画待ちキュー435に登録する。描画待ちキュー435は、図16に示すように、生成されたDLデータをページ番号順に並べたキューであり、ページ番号の小さいページから順に描画処理を実行させる構造となっている。すなわち、描画待ちキュー435に登録されたDLデータは、ページ番号が小さいページのDLデータが前になるようにページ番号順にソートされる。
【0069】
また、制御部431は、DLデータを描画待ちキュー435に登録した後、描画待ちキュー435に登録されているDLデータの総数を表すカウンタ(Enque_count)の値をインクリメント(1UP)しておく。また、制御部431は、起動中の描画部32の総数を表すカウンタ(draw_count)の値を監視している。そして、起動中の描画部32の総数が、描画待ちキュー435に登録されているDLデータの総数以下であることを条件として、描画待ちキュー435の先頭からDLデータを取り出して、該当するページの描画処理をバンド並列で実行するために複数の描画部32を起動する。
【0070】
図17は、描画部32の起動に関する制御部431の処理の流れを示すフローチャートである。制御部431は、まず、DL生成部31により生成されたDLデータを描画待ちキュー435に登録し(ステップS401)、カウンタEnque_countの値をインクリメント(1UP)する(ステップS402)。
【0071】
次に、制御部431は、カウンタdraw_countの値とカウンタEnque_countの値とを比較し、カウンタdraw_countの値がカウンタEnque_countの値以下となっているか否か、つまり、起動中の描画部32の総数が、描画待ちキュー435に登録されているDLデータの総数以下であるか否かを判定する(ステップS403)。そして、起動中の描画部32の総数が、描画待ちキュー435に登録されているDLデータの総数以下である場合(ステップS403でYES)に、描画待ちキュー435の先頭からDLデータを取得(Deque)する(ステップS404)。
【0072】
次に、制御部431は、DLデータ上に保存されたバンド分割数の情報に基づいて、バンド並列で描画処理を実行するための描画部32の起動数Xを算出し(ステップS405)、CPUコア管理部432に対して必要なCPUコアの数を要求して、CPUコア管理部432から使用可能なCPUコアのコア数Mとコア番号を取得する(ステップS406)。
【0073】
次に、制御部431は、ステップS406で取得した使用可能なCPUコアのコア数MがステップS405で算出した描画部32の起動数Xよりも小さいか否かを判定し(ステップS407)、描画部32の起動数X分のCPUコアが使用可能であれば(ステップS407でNO)、これらのCPUコアを描画のためのスレッドに割り当てて描画部32を起動し、バンド並列での描画処理を実行させる(ステップS410)。
【0074】
一方、使用可能なCPUコアのコア数Mが描画部32の起動数Xよりも小さい場合(ステップS407でYES)には、制御部431は、現在実行されているDLデータの生成中断の処理を実行する(ステップS408)。そして、DLデータの生成中断によって開放されるCPUコアが1つ以上あれば(ステップS409でYES)、当該CPUコアを使用可能なCPUコアに加えて、これらのCPUコアを描画のためのスレッドに割り当てて描画部32を起動し、バンド並列での描画処理を実行させる(ステップS410)。この場合、使用可能なCPUコアの総数がステップS405で算出した起動数Xに満たない場合でも、1つのスレッドに複数バンドの描画を担当させることで必要な描画部32の起動数を減らし、使用可能なCPUを利用したバンド並列での描画処理を実行させる。
【0075】
一方、DLデータの生成中断によって開放されるCPUコアがない場合(ステップS409でNO)には、制御部431は、描画待ちキュー435から取り出したDLデータを描画待ちキュー435の先頭に挿入する(ステップS411)。
【0076】
制御部431は、以上のフローに従って描画部32を起動することによって、描画部32がDLデータの生成待ちの状態とならないように制御することができ、CPUコアの割り当てを適切に行って効率のよい描画を実現することができる。
【0077】
図18は、図17のステップS408におけるDL生成中断処理の詳細を示すフローチャートである。制御部431は、DL生成中断処理を開始すると、まず、DL生成実行管理テーブル434を参照して、DLデータ生成処理を実行中のページのうちで、ページ番号が最も大きいページを検索する(ステップS501)。DL生成実行管理テーブル434には、上述したように、DLデータ生成処理を実行中のページのページ番号が管理されているので、この情報を用いて検索が可能である。なお、DL生成実行管理テーブル434の形式として例えばハッシュテーブルなどを利用することで、高速に検索することが可能となる。
【0078】
制御部431は、ステップS501での検索の結果、DLデータの生成を中断させる対象となるページが取得できた場合(ステップS502でYES)には、該当するページのDLデータ生成のスレッド実行を中断し(ステップS503)、該当するページのページデータをDL生成待ちキュー433の先頭に登録する(ステップS504)。なお、DLデータ生成処理を中断させる場合には、処理済みのDLデータへのポインタ、生成途中のDLデータへのポインタ、書き込み開始ポインタ等を保存しておき、適切に再開できるようにしておくことが望ましい。
【0079】
制御部431は、以上のステップS501からステップS504の処理を、不足するCPUコアの個数分(上述した描画部32の起動数Xと使用可能なCPUコアの数Mとの差分)だけ繰り返した後、DL生成中断処理を終了する。また、処理の途中でDLデータ生成を実行中のページがなくなった場合(ステップS502でNO)は、その時点でDL生成中断処理を終了する。
【0080】
図19は、図17のステップS410における描画実行処理の詳細を示すフローチャートである。制御部431は、描画実行処理を開始すると、描画対象となるページのバンドを描画する関数をスレッドとして生成し、生成したスレッドに使用可能なCPUを割り当てることで描画部32を起動する(ステップS601)。制御部431は、このステップS601の処理を描画対象となるページのバンド数分繰り返し、起動した描画部32にバンド並列での描画を実行させる。そして、バンド描画が終了したら、そのバンド描画のスレッドに割り当てられているCPUコアの開放を、CPUコア管理部432に対して要求する(ステップS602)。
【0081】
制御部431は、以上のようにしてDL生成のためのスレッドの生成およびCPUコアの割り当てと、バンド描画のためのスレッドの生成およびCPUコアの割り当てを行うことで、DL生成部31によるページ並列でのDL生成と、描画部32によるバンド並列での描画を実行させるが、各スレッドの実行中にはスレッド終了の待ち合わせを行う。
【0082】
具体的には、制御部431は、POSIXスレッド(pthread)のAPIを使用する場合、上述したように、pthread_create()のコマンドを用いてスレッドを生成するが、任意のスレッドの待ち合わせは、pthread_cond_wait()のコマンドを用い、条件変数が書き換わるまでポーリングを行う。この場合、各スレッドを実行中のCPUコアは、スレッドの実行が終了すると、pthread_cond_signal()のコマンドを実行することで、スレッドの終了を制御部431に通知することができる。制御部431は、DL生成のためのスレッドを生成してDL生成部31を起動した後は、pthread_cond_wait()のコマンドを用いてスレッドの待ち合わせを行い、スレッドの終了通知を受け取ると、バンド描画のためのスレッドを生成して描画部32を起動する。また、制御部431は、バンド描画のためのスレッドを生成して描画部32を起動した後も、pthread_cond_wait()のコマンドを用いてスレッドの待ち合わせを行う。このような条件変数による待ち合わせ機構を利用することによって、いずれかのスレッドが終了した場合に、制御部431がスレッド終了の通知を受け取ることができる。
【0083】
以上、具体的な例を挙げながら詳細に説明したように、本実施の形態にかかる画像形成装置では、PDL処理部30での処理をDL生成部31によるDLデータ生成処理(前処理)と描画部32によるバンド描画処理(後処理)とに分け、PDL処理管理部43の制御部431が、DL生成部31を起動してDLデータ生成処理を実行させる場合には、複数ページ分の処理に複数のCPUコアを割り当てて複数ページ分のDLデータの生成を並列処理で実行させながら、DLデータの生成後に描画部32を起動して描画処理を実行させる場合には、ページ番号の小さいページの処理に複数のCPUコアを優先的に割り当てて、当該ページの複数バンドの描画を並列処理で実行させるようにしている。したがって、本実施の形態にかかる画像形成装置によれば、ページ番号の小さいページから順に描画処理を完了させることができ、画像の出力待ちの状態を低減して、処理の高速化を実現することができる。
【0084】
また、本実施の形態にかかる画像形成装置では、PDL処理管理部43が、描画部32による描画処理の単位となるバンドの分割数を、PDLデータの各ページのデータサイズに応じてDLデータ生成前に決定することにより、簡単な処理でバンド分割を実施しながらバンド並列での描画処理を効率よく実施することが可能となる。一方、バンド分割数をDLデータが生成された後に生成されたDLデータのサイズに応じて決定するようにした場合には、描画処理の負荷に応じたバンド分割をより適切なかたちで実施することが可能となる。
【0085】
また、本実施の形態にかかる画像形成装置では、PDL処理管理部43の制御部431が、描画部32による描画処理に複数のCPUコアを割り当てる際に、空き状態にあるCPUコアの数が描画対象となるページのバンド分割数に満たない場合に、DL生成部31によるDL生成処理をページ番号の大きい順に中断させて、DL生成処理の中断により開放されたCPUコアを描画部32による描画処理に割り当てるようにしているので、限られた個数のCPUコアを効率よく利用しながら、ページ番号の小さいページの描画処理を迅速に完了させることができる。
【0086】
また、本実施の形態にかかる画像形成装置では、PDL処理管理部43のCPUコア管理部432がCPUコア管理リストを用いてコントローラ1に搭載されている複数のCPUコアの稼動状態を管理し、PDL処理管理部43の制御部431が、CPUコア管理部432への問い合わせによって空き状態にあるCPUコアを確認するようにしているので、CPUコアの稼動状態が適切に管理されるとともに、実行する処理に対するCPUコアの割り当てを適切に実施することができる。
【0087】
また、本実施の形態にかかる画像形成装置では、コントローラ1に入力されたPDLデータがインデックス情報を持たないPDLデータの場合には、PDL制御部40のページ検知部41によりPDLデータのページの切れ目であるページ開始オペレータ、ページ終了オペレータを検知し、インデックス生成部42によりPDLデータの各ページの境界を表すインデックス情報を生成するようにしているので、インデックス情報を持たないPDLデータが入力された場合にも、ページ単位でのDLデータ生成の並列処理およびバンド描画の並列処理を実行することができる。
【0088】
以上説明した本実施の形態にかかる画像形成装置において特徴的な機能は、上述したように、コントローラ1において画像形成プログラムが実行されることによって実現される。画像形成装置のコントローラ1で実行される画像形成プログラムは、例えば、コントローラ1内のROM11に予め組み込まれて提供される。また、画像形成装置のコントローラ1において実行される画像形成プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成してもよい。さらに、画像形成装置のコントローラ1で実行される画像形成プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、画像形成装置のコントローラ1で実行される画像形成プログラムを、インターネット等のネットワーク経由で提供または配布するように構成してもよい。
【0089】
画像形成装置のコントローラ1で実行される画像形成プログラムは、上述したPDL解析部24の各部、すなわちPDL制御部40のページ検知部41、インデックス生成部42、PDL処理管理部43(制御部431、CPUコア管理部432)や、PDL処理部30のDL生成部31、描画部32を含むモジュール構成となっており、実際のハードウェアとしてはCPU(プロセッサ)10が上記ROM11から画像形成プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、PDL制御部40のページ検知部41、インデックス生成部42、PDL処理管理部43(制御部431、CPUコア管理部432)や、PDL処理部30のDL生成部31、描画部32が主記憶装置上に生成されるようになっている。
【0090】
なお、本発明は、上述した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。例えば、上述した実施の形態では、1ページ分の描画処理をバンド単位で実行するようにしているが、例えば、1ページ分の画像をCMYK、RGB等の描画プレーン単位で複数の描画領域に分割して、描画プレーン単位で描画処理を行うなど、他の基準で描画処理を分散させるようにしてもよい。また、上述した実施の形態では、画像形成装置の例としてプリンタエンジン2により画像の印刷を行うプリンタを例示しているが、本発明は、プリンタ以外にも、複写機、スキャナ装置、ファクシミリ装置、あるいはこれらの機能を併せ持つ複合機など、各種の画像形成装置において有効に適用可能である。
【符号の説明】
【0091】
1 コントローラ
10 CPU
11 ROM
12 RAM
24 PDL解析部
30 PDL処理部
31 DL生成部
314 DL保存用データメモリ
32 描画部
40 PDL制御部
41 ページ検知部
42 インデックス生成部
43 PDL処理管理部
431 制御部
432 CPUコア管理部
433 DL生成待ちキュー
434 DL生成実行管理テーブル
435 描画待ちキュー
【先行技術文献】
【特許文献】
【0092】
【特許文献1】特開2006−159738号公報

【特許請求の範囲】
【請求項1】
複数のCPUコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において、
PDLデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段と、
前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段と、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画する描画手段と、
前記データ保持手段に前記中間データが保持されていない場合は、複数のCPUコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のCPUコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段と、を備えることを特徴とする画像形成装置。
【請求項2】
前記描画手段による描画処理の単位となる前記描画領域の1ページ分の画像における分割数は、前記PDLデータにおける当該ページのデータサイズに応じて決定されることを特徴とする請求項1に記載の画像形成装置。
【請求項3】
前記描画手段による描画処理の単位となる前記描画領域の1ページ分の画像における分割数は、当該ページに対応する前記中間データのデータサイズに応じて決定されることを特徴とする請求項1に記載の画像形成装置。
【請求項4】
前記制御手段は、前記描画手段による描画処理に複数のCPUコアを割り当てるときに、空き状態にあるCPUコアの数が、描画処理の対象としたページの描画領域の分割数に満たない場合は、前記中間データ生成手段による中間データ生成処理をページ番号が大きいページから順に中断することでCPUコアを開放し、開放したCPUコアを前記描画手段による描画処理に割り当てることを特徴とする請求項1ないし3のいずれか一つに記載の画像形成装置。
【請求項5】
前記PDLデータがインデックス情報を持たない場合に、当該PDLを構成する各ページの開始および終了位置を検知して各ページの境界を表すインデックスを生成するインデックス生成手段をさらに備えることを特徴とする請求項1ないし4のいずれか一つに記載の画像形成装置。
【請求項6】
複数のCPUコアを用いて画像形成に関わる処理を並列して実行可能な画像形成装置において実行される画像形成方法であって、
PDLデータを解析してページごとに独立した描画のための中間データを生成するステップと、
生成したページごとの中間データをデータ保持手段に保持させるステップと、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画するステップと、を有し、
前記データ保持手段に前記中間データが保持されていない場合は、前記中間データを生成する処理に複数のCPUコアを割り当てて、複数ページ分の中間データ生成処理を並列で実行するとともに、前記データ保持手段に前記中間データが保持されている場合は、前記描画領域ごとに1ページ分の画像を描画する処理に複数のCPUコアを割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行することを特徴とする画像形成方法。
【請求項7】
複数のCPUコアを有するコンピュータに、
PDLデータを解析してページごとに独立した描画のための中間データを生成する中間データ生成手段としての機能と、
前記中間データ生成手段により生成されたページごとの中間データを保持するデータ保持手段としての機能と、
前記データ保持手段に保持された中間データに基づいて、複数の描画領域に分割された1ページ分の画像を前記描画領域ごとに描画する描画手段としての機能と、
前記データ保持手段に前記中間データが保持されていない場合は、複数のCPUコアを前記中間データ生成手段による中間データ生成処理に割り当てて、複数ページ分の中間データ生成処理を並列で実行させるとともに、前記データ保持手段に前記中間データが保持されている場合は、複数のCPUコアを前記描画手段による描画処理に割り当てて、ページ番号が小さいページから順に前記複数の描画領域の描画処理を並列で実行させる制御手段としての機能と、を実現させるための画像形成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2011−167857(P2011−167857A)
【公開日】平成23年9月1日(2011.9.1)
【国際特許分類】
【出願番号】特願2010−31169(P2010−31169)
【出願日】平成22年2月16日(2010.2.16)
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】