(57)【要約】【課題】図形の輪郭からエッジデータを生成するレンダリング処理において処理の並列化処理が行われていなかったためレンダリング処理の高速化が不十分であった。【解決手段】グラフィックスが多く処理負荷が高いページでもエッジを抽出する処理を複数のスレッドに割り当てることで処理を並列かつ高速に処理する。その際に、コアの数が８個であれば、ページを分割した一方に４個のコアを、他方に残り４個のコアを割り当ててエッジ抽出処理を行う。また、処理負荷が高いページのスレッドには、処理中に他のコアを割り当て、あるいは優先度を高くする。【選択図】図８
2016001469.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置であって、  ＰＤＬデータに含まれたオブジェクトごとに、個々のプロセッサコアで実行されるスレッドとしてエッジ抽出処理を実行するエッジ抽出手段と、
前記オブジェクトごとに抽出されたエッジ情報を合成する合成手段と、
前記合成手段で合成されたエッジ情報に基づいて、ラスタ画像データを生成する手段とを有し、
前記エッジ抽出手段は、１ページを分割した領域ごとに所定数のスレッドを割り当ててエッジ抽出処理を実行することを特徴とする画像処理装置。
【請求項２】
前記エッジ抽出手段はさらに、処理対象のＰＤＬデータが、処理負荷が高い高負荷ページであるか否かを判定し、高負荷ページである場合には、当該ページを分割した領域ごとに前記所定数のスレッドを割り当ててエッジ抽出処理を実行し、高負荷ページではない場合には、前記所定数よりも少ない数のスレッドで前記エッジ抽出処理を実行することを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記エッジ抽出手段は、プロセッサコアの数が８の場合には、１ページを２つに分割したそれぞれの領域について、４つずつのスレッドを割り当ててエッジ抽出処理を実行することを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
プロセッサコアの数を指定する手段を更に有し、
前記エッジ抽出手段は、指定された数の前記プロセッサコアを、１ページを分割した領域ごとに割り当ててエッジ抽出処理を実行することを特徴とする請求項１乃至３のいずれか一項に記載の画像処理装置。
【請求項５】
１ページを分割する領域の数を指定する手段を更に有し、前記エッジ抽出手段は、指定された数の前記プロセッサコアを、指定された数に１ページを分割した領域ごとに割り当ててエッジ抽出処理を実行することを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記オブジェクトは図形オブジェクトであることを特徴とする請求項１乃至５のいずれか一項に記載の画像処理装置。
【請求項７】
前記合成手段により合成したエッジ情報は、ページを分割したタイルとして保存され、前記ラスタ画像データを生成する手段は、前記タイルごとにラスタ画像データを生成することを特徴とする請求項１乃至６のいずれか一項に記載の画像処理装置。
【請求項８】
前記ラスタ画像データを生成する手段により生成されたラスタ画像データを画像として媒体上に形成して出力する手段を更に有することを特徴とする請求項１乃至５のいずれか一項に記載の画像処理装置
【請求項９】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置により実行される画像処理方法であって、
ＰＤＬデータに含まれたオブジェクトごとに、個々のプロセッサコアで実行されるスレッドとしてエッジ抽出処理を実行するエッジ抽出工程と、
前記オブジェクトごとに抽出されたエッジ情報を合成する合成工程と、
前記合成工程で合成されたエッジ情報に基づいて、ラスタ画像データを生成する工程とを有し、
前記エッジ抽出工程では、１ページを分割した領域ごとに所定数のスレッドを割り当ててエッジ抽出処理を実行することを特徴とする画像処理方法。
【請求項１０】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できるコンピュータを、
ＰＤＬデータに含まれたオブジェクトごとに、個々のプロセッサコアで実行されるスレッドとしてエッジ抽出処理を実行するエッジ抽出手段と、
前記オブジェクトごとに抽出されたエッジ情報を合成する合成手段と、
前記合成手段で合成されたエッジ情報に基づいて、ラスタ画像データを生成する手段として機能させるためのプログラムであって、
前記エッジ抽出手段は、１ページを分割した領域ごとに所定数のスレッドを割り当ててエッジ抽出処理を実行することを特徴とするプログラム。
【請求項１１】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置であって、
ＰＤＬデータからページごとのラスタ画像データを生成する処理を、スレッドに分割して実行する処理手段と、
前記処理手段により実行されるページの処理の負荷レベルを検出する検出手段と、
前記検出手段により検出した前記ページの処理の負荷レベルに応じて、付加的な処理資源を前記ページの処理に割り当てる割り当て手段と
を有することを特徴とする画像処理装置。
【請求項１２】
前記検出手段は、前記処理手段による前記ページの処理の実行前に前記負荷レベルを検出することを特徴とする請求項１１に記載の画像処理装置。
【請求項１３】
前記検出手段は、前記処理手段による前記ページの処理の実行中に前記負荷レベルを検出することを特徴とする請求項１１に記載の画像処理装置。
【請求項１４】
前記割り当て手段は、前記検出手段により検出されたページの処理の負荷レベルに基づいて、前記ページの処理が所定時間内に完了しないと判定された場合に、前記付加的な処理資源を前記ページの処理に割り当てることを特徴とする請求項１１乃至１３のいずれか一項に記載の画像処理装置。
【請求項１５】
前記処理資源は、前記ページの処理に割り当てられたスレッドのＣＰＵ時間であることを特徴とする請求項１１乃至１４に記載の画像処理装置。
【請求項１６】
前記割り当て手段は、前記ページの処理に割り当てられたスレッドの優先度を高くすることで、当該スレッドのＣＰＵ時間を増大させることを特徴とする請求項１５に記載の画像処理装置。
【請求項１７】
前記割り当て手段は、前記ページの処理に割り当てられたスレッドの優先度を高くするとともに、他のページの処理に割り当てられたスレッドの優先度を低くすることを特徴とする請求項１６に記載の画像処理装置。
【請求項１８】
前記割り当て手段は、前記ページの処理に割り当てられたスレッドを実行するプロセッサコアに加えて、他のプロセッサコアを更に割り当てることで、当該スレッドのＣＰＵ時間を増大させることを特徴とする請求項１５乃至１７のいずれか一項に記載の画像処理装置。
【請求項１９】
前記割り当て手段は、前記他のプロセッサコアとして、前記検出手段により負荷レベルが低いと判定されたページの処理に割り当てられたプロセッサコアを割り当てることを特徴とする請求項１８に記載の画像処理装置。
【請求項２０】
前記割り当て手段は、前記プロセッサコアの構成を示す構成情報に基づいて、付加的な割り当てによるオーバーヘッドの小さいプロセッサコアを前記他のプロセッサコアとして決定することを特徴とする請求項１９に記載の画像処理装置。
【請求項２１】
前記プロセッサコアの構成を示す構成情報を作成する手段を更に有することを特徴とする請求項２０に記載の画像処理装置。
【請求項２２】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置の制御方法であって、
ＰＤＬデータからページごとのラスタ画像データを生成する処理を、スレッドに分割して実行する処理工程と、
前記処理工程により実行されるページの処理の負荷レベルを検出する検出工程と、
前記検出工程により検出した前記ページの処理の負荷レベルに応じて、付加的な処理資源を前記ページの処理に割り当てる割り当て工程と
を有することを特徴とする画像処理装置の制御方法。
【請求項２３】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できるコンピュータを、
ＰＤＬデータからページごとのラスタ画像データを生成する処理を、スレッドに分割して実行する処理手段と、
前記処理手段により実行されるページの処理の負荷レベルを検出する検出手段と、
前記検出手段により検出した前記ページの処理の負荷レベルに応じて、付加的な処理資源を前記ページの処理に割り当てる割り当て手段と
して動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば文字や写真、図形等、多彩な印刷を行う印刷のための画像処理を行う画像処理装置に関するものであって、特にグラフィックス等、図形描画の高速化処理に関する。
【背景技術】
【０００２】
従来、図形を描画するために図形が持つ座標情報等から図形の輪郭情報（エッジ情報とも呼ぶ）を抽出し、輪郭情報に基づいて画像を形成するレンダリング手法は一般に広く利用されている（例えば、特許文献１、特許文献２、特許文献３、特許文献４）。輪郭情報は直線で表現されるが直線を表現するための手法としてＤＤＡアルゴリズムが知られている（非特許文献１）。
【０００３】
従来のレンダラの処理では、１ページのデータをバンドに分割して処理を行う、いわゆるバンディング処理が採用されるシステムがある。グラフィックス処理を実行するにあたり、このようなシステムで問題となるのは、多くのグラフィックスオブジェクトが含まれたページが入力された場合にレンダリング速度の低下が発生することである。そこでバンドで分割された場合の処理では、それぞれのバンドに対して独立した処理単位（スレッド）を割り当てることで処理速度の向上を試みるものが提案されている（特許文献５）。
【０００４】
また、処理速度を一層向上させるべく、特許文献６（特開２０１２−１８５６９７号公報）では、図形毎に処理の単位（スレッド）を割り当て図形ごとに並列処理を行って全体の並列度を更に向上するようシステムが開示されている。図形毎に抽出されたエッジ情報は再度ページ上の座標にマップされ合成される。これらの処理は独立して実行可能であり、各図形のエッジ抽出の処理、及び各抽出処理後のデータをマージする処理（データ合成）それぞれについてスレッドを割り当てることができる。レンダリング処理の実行環境がマルチＣＰＵあるいはマルチコアＣＰＵであれば、コアスレッドの処理はそれを実行する実行ユニット（プロセッサコアであり、単にコアとも呼ぶ）にマップされ各コアが時間独立に処理を実行することで並列動作を可能とする。このようなシステムにおいては各プロセッサコアの稼働率を上げてその性能を引き出すことで処理速度の高速化を実現出来る。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０４−１７０６８６号公報
【特許文献２】特開平０８−７２３１７号公報
【特許文献３】特開２００５−２６７２９０号公報
【特許文献４】特開２００７−１２２１８８号公報
【特許文献５】特開２００３−５１０１９号公報
【特許文献６】特開２０１２−１８５６９７号公報
【特許文献７】特開２０１１−３４１３９号公報
【特許文献８】特開２００６−１５５３０８号公報
【非特許文献】
【０００６】
【非特許文献１】David Rogers, "Procedural Elements for Computer Graphics" McGraw-Hill Education,１９９７年１０月１日発行、ISBN-10:0070535485
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように並列ＣＰＵを用いた処理を行った場合でも課題は存在する。マルチコアＣＰＵに関しては、メモリのアクセスパターンに応じて実行速度が変化するという現象があり、従来のスレッドの割り当てアルゴリズムでは実行速度が期待以上に向上しないことが確認されている。
【０００８】
本来、プリンタのシステムは、エンジンによる画像形成に合わせてエンジンへと印刷データを供給するために、たとえばデータのアンダーランを生じてエンジンを停止させないように、スプーラ等を用いて印刷データや中間データのスプールに対応している。スプーラを用いると、データごとのデータを処理する時間の変動（バラつき）が大きい場合は、スプールすべきデータ量を増やす必要がある。これはスプール用のメモリサイズの拡大や先頭ページの印刷遅延を招く。これを避けるために、例えば特許文献８に開示されている技術では処理にかかる時間を予測することでプリント処理（レンダリング処理）のスケジュールを変更する工夫が述べられている。
【０００９】
しかしながら、実際にこの予測値に基づく処理の切り替えを試みてみると処理速度の予測そのものが容易ではない。例えば、処理を実行する前に得られる情報としてはそのページに含まれるグラフィック数（たとえばグラフィックオブジェクトの数）を計測する方法等が考えられる。一般的にはグラフィック数と処理所要時間とは相関関係にあり、実際グラフィックが多く含まれるページは少ないページよりも処理時間が長い傾向にある。
【００１０】
図１４は、テストデータにおけるＰＤＬデータの各ページに含まれるグラフィック数と処理時間の関係の例を示した相関グラフである。ここでグラフィック数と処理時間の関係は右肩あがりの特性のため大局的には相関は認められるものの、個々のデータを比較すると予測の手段として使うことが容易ではないことが読み取れる。例えば、Ｐａｇｅ−ｉは、１５００個のグラフィックオブジェクト（図形）を含むページであって処理に約１００ｍｓ要している。一方で、Ｐａｇｅ−ｊは、２０００個のグラフィックオブジェクトを含むページであるが処理に約５０ｍｓと約二倍近くも高速に処理が完了していることになっている。
【００１１】
上記の検証結果に基づき、本願出願人は予測と実際の処理時間の乖離がシステムの特性にどう影響するのかを調査する目的でシミュレーションによる検証を行った。図１５はプリンティングシステムにおいてエンジンがストールしないために必要となる初期スプール数をシミュレーションで検査した結果である。グラフの横軸は処理が重いページ（ヘビーページとも呼ぶ）がジョブ中にどれだけ含まれていたかを示す比率（便宜上これをヘビーページ含有率と呼ぶ）を示しており、グラフの縦軸は初期スプールに必要なページ数を示している。尚、ヘビーページとは処理負荷が重いページの便宜的な表現であり具体的な定義は各状況により異なる。例えば１００ＰＰＭが要求されるプリンタにおいては、1秒以上の時間を要するものをヘビーページと定義しても良いし、または抽象化するために印刷データにおける各ページの処理時間群を正規分布で捉え適当に設定した閾値（例えば1.5σ）以上の時間を要するページをヘビーページとしても良い。
【００１２】
図１５は、シミュレーションの結果を示したものである。ページの処理時間を、例えばヘビーページ含有率が指定した値となるようなパラメータを与えた上でランダムに生成している。また予測時間を正確に予測できない程度を予測ミス率として表し、予測ミス率ごとの必要な初期スプール量の違いを比較している。システムの基本動作としてはページあたりの処理時間の予測に基づいて、処理ページが重い場合（1秒以上時間がかかるもの）に、該ページにかかる処理時間に対しては加速処理（シミュレーション上では約半分の時間で処理完了する条件とした）を適用してその挙動を観察してみた。図１５上、線Ａ（実線、四角点）はプリント処理前の処理予測時間が常に正しかった場合、つまり予測ミス率が０％時の特性を示している。同様に線Ｂ（破線）は、予測ミス率が１０％、線Ｃ（実戦、三角点）は予測ミス率が２０％の場合の特性を示している。尚、ミス率とは、プリント処理時間の予測時間の正確さを比率で表すものであり、総ページ数中の予測が（一定値±１０％よりも）外れた率を示している。予測通りに処理出来たページをＰ１、収まらなかったページを予測ミスページＰ２とした場合、ミス率＝Ｐ２／（Ｐ１＋Ｐ２）である。
【００１３】
図１５に示すグラフ上、予測ミス率が０％時（線Ａ：実線、四角点）の特性をみるとヘビーページ含有率（横軸）で１４％程度をみれば初期スプール数として１９０ページ程度がストアされればその後はエンジンがストールしないで動作が出来ることを示している。一方でＢは予測したページの１０％が予測値より外れていた場合の特性であり、この場合は同ヘビーページ含有率１４％時には、初期スプールが５３０ページ程度必要という結果になっている。更には予測率が２０％に低下すると、初期スプールが７５０ページ程度必要となっている。
【００１４】
上述したように、精度の高くない予測値を用いてプリントシステムを構成した場合にはスプールするデータ量を増やす必要がある。このためスプーラに割り当てるメモリ容量を増す必要が生じ、コスト増の要因となってしまっていた。換言すれば、従来システムにおいては経験的に（または実験的に）スプーラ容量を決定していたため該容量を減らすための分析や工夫が十分になされないまま無駄なコストを発生させていたということになる。
【００１５】
本発明は上記従来例に鑑みて成されたもので、処理負荷の高いページに対するＣＰＵコアの割り当てを適切に行うことで、レンダリング処理の効率を向上させた画像処理装置、及びその方法を提供することを目的とする。
【００１６】
更には、処理データの負荷をリアルタイムに分析しつつ、分析した結果に応じて処理モジュールの能力を増減することで、負荷の変動に影響されず、一定のレートでジョブページをスプールする仕組みを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記目的を達成するために本発明は以下の構成を有する。
【００１８】
マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置であって、  ＰＤＬデータに含まれたオブジェクトごとに、個々のプロセッサコアで実行されるスレッドとしてエッジ抽出処理を実行するエッジ抽出手段と、
前記オブジェクトごとに抽出されたエッジ情報を合成する合成手段と、
前記合成手段で合成されたエッジ情報に基づいて、ラスタ画像データを生成する手段とを有し、
前記エッジ抽出手段は、１ページを分割した領域ごとに所定数のスレッドを割り当ててエッジ抽出処理を実行することを特徴とする。
【００１９】
あるいは、マルチコアＣＰＵを有し、マルチスレッドで処理を実行できる画像処理装置であって、
ＰＤＬデータからページごとのラスタ画像データを生成する処理を、スレッドに分割して実行する処理手段と、
前記処理手段により実行されるページの処理の負荷レベルを検出する検出手段と、
前記検出手段により検出した前記ページの処理の負荷レベルに応じて、付加的な処理資源を前記ページの処理に割り当てる割り当て手段と
を有することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、レンダリング処理の処理効率を向上することが出来る。それにより、プリンタエンジンのストールの可能性を低下させて高速印刷を実現できる。
【図面の簡単な説明】
【００２１】
【図１】画像処理装置のハードウェア構成の一例を示す概略ブロック図
【図２】本発明の各図形においてエッジ抽出処理を各々独立に適用した場合の概念図
【図３】本発明実施形態１の基本システム構成図
【図４】図形に対してエッジ抽出処理を行う様子を示した概念図
【図５】本発明の実施形態１で用いるエッジ抽出処理の流れを示した概略フローチャート
【図６】図形に対して並列にエッジ抽出処理を行う様子を示した概念図
【図７】複数コア適用時の処理時間短縮の様子を示した概説図
【図８】コア数モジュールの切り替えを説明した本システムにおけるモジュール構成図
【図９】ＯＳ内に格納されたＣＰＵ情報をシステム情報としてＵＩ表示する様子を示した概念図
【図１０】本発明実施形態１適用の効果を説明したタスク処理グラフ
【図１１】本発明実施形態２で想定した論理コア３２を備えるシステムを説明した概説図
【図１２】本発明実施形態２におけるシステム情報（コア数等）を設定するＵＩ画面を示す図
【図１３】本発明実施形態２の基本システム構成図
【図１４】ＰＤＬページに含まれるグラフィック数と処理時間の関係の例を示した相関グラフ
【図１５】エンジンがストールしないために必要となる初期スプール数をシミュレーションで検査した結果のグラフ
【図１６】本実施例３におけるシステムの概要を説明する概略システムブロック図
【図１７】本実施例３の負荷レベル検出処理について概説した概略図（状態遷移図）
【図１８】本実施例３の加速処理制御部の概要を説明した概説図
【図１９】本実施例３におけるページ並列処理の状況を説明した概説図
【図２０】本実施例４のコア割り当て処理の概要を説明した概略フロー図
【図２１】本実施例４のコア割り当て処理を適用した場合の動作を説明した概説図
【図２２】本実施例５で用いるマルチプロセッサコアの概要を説明した概説図
【図２３】本実施例５のコア割り当て処理の概要を説明した概略フロー図
【図２４】本実施例５を適用した場合の効果を示したグラフ
【発明を実施するための形態】
【００２２】
以下、本発明の実施形態について図面に基づいて説明する。
＜実施形態１＞
図１は、画像処理装置１００のハードウェア構成の一例を示す図である。図１において、ＣＰＵ１０１は、ＲＯＭ１０３又はハードディスク１１１からＲＡＭ１０２にロードされたＯＳや一般アプリケーション等のプログラムを実行し、後述するソフトウェアの機能及びフローチャートの処理を実現する。ＲＡＭ１０２は、ＣＰＵ１０１の主メモリ、ワークエリア等として機能する。キーボードコントローラ（ＫＢＣ）１０５は、キーボード１０９や不図示のポインティングデバイスからのキー入力を制御する。ディスプレイコントローラ１０６は、ディスプレイ１１０の表示を制御する。ディスクコントローラ（ＤＫＣ）１０７は、ブートプログラム、種々のアプリケーション、フォントデータ、ユーザファイル等を記憶するハードディスク（ＨＤ）１１１やフレキシブルディスク（ＦＤ）等の外部メモリとのアクセスを制御する。
【００２３】
ＰＲＴＣ１０８は、接続された、媒体上に画像を形成して出力するプリンタエンジン部１１２との間の信号の交換を制御する。ＮＣ１１３は、ネットワークに接続されて、ネットワークに接続された他の機器との通信制御処理を実行する。なお、本実施形態では、以下に示す画像処理装置１００の機能は、ソフトウェアにより実現されるものと説明するが、各機能を専用のハードウェアで画像処理装置１００に実装するようにしても良い。なお、本実施形態のＣＰＵ１０１は、マルチコアのＣＰＵであるものとする。画像処理装置１００が、複数のＣＰＵを有していても良い。本例では、ＣＰＵ１０１は、たとえば図９のマルチＣＰＵ９００のような構成を有するものとする。マルチＣＰＵ９００は、それぞれが４つのプロセッサコアを有する２つのマルチコアＣＰＵで構成されている。
画像処理装置１００は本例ではプリンタやＭＦＰ等のエンジン部に対して画像信号を提供するためのユニットとして画像形成装置の一部を構成するものであってもよいし、また、独立した汎用のコンピュータであってもよい。後者の場合にはプリンタエンジン部１１２はコンピュータに接続されたプリンタ装置（デジタル多機能機等を含む）となる。本実施形態の例では、この画像処理装置１００がページごとにオブジェクト及びその配置等を定義するＰＤＬデータを解釈してピクセルを単位とするビットマップデータ（ラスタ画像データあるいは単に画像データとも呼ぶ。）を生成する。そのドットデータを生成する処理がレンダリングであり、それを行うソフトウェアあるいはハードウェアあるいはその組み合わせがＲＩＰあるいはレンダラである。
【００２４】
レンダリングされた画像データは、たとえばプリンタエンジンが電子写真方式であれば、色成分ごとにパルス幅変調された画像信号としてプリンタエンジンに入力され、画像形成される。本実施形態では、ＰＤＬデータから中間コードへの変換、及び生成したドットデータの画像信号への変換等に関しては公知の技術を用いるものとし、以下ではレンダリング処理に関して説明する。
【００２５】
本実施形態のレンダラは、並列処理機構を有しており、文字やラインアート、図形等のオブジェクトごとに処理の単位（スレッド）を割り当てる。一つの処理単位であるスレッドは、本例では一つのプロセッサコアにより実行される。オブジェクトはページ上に配置（絶対座標上）されているが、それぞれのオブジェクトは個別の相対座標系にマップされ（例えば図形の外接矩形の左上の点を原点に持つ相対座標に変換され）、各オブジェクト領域においてエッジ抽出処理を行うことが出来る。
【００２６】
［エッジ抽出処理の構成および手順］
図２は、各オブジェクトに対してエッジ抽出処理を各々独立に適用した場合の概念図である。ページ２０１上のオブジェクトごとにエッジ抽出処理を実施する様子を示している。オブジェクトごとにエッジ抽出処理のスレッド２１１〜スレッド２１３で抽出されたエッジ情報は再度ページ上の座標にマップされ合成処理がなされる。それぞれの処理は各々依存性がないために独立に実行することが出来る。つまり、オブジェクトのデータが入力された後、各オブジェクトのエッジ抽出の処理、及び各抽出処理後のデータをマージする処理（データ合成）それぞれについてスレッドを割り当てることが可能である。
スレッドの処理はそれを実行するユニット（ＣＰＵコア）にマップされ各コアが時間独立に処理を実行することで、並列で動作することが出来る。なおマージ処理はエッジ抽出が完了したオブジェクトに対して適用される。たとえば１のスレッド（すなわちコア）をマージ処理に割り当て、他をエッジ抽出に割り当てる。コアの数には制限があるため、ひとつのオブジェクトのエッジ抽出処理を完了したなら、当該コアは次のオブジェクトを対象としてエッジ抽出処理を行う。エッジ抽出を終えたオブジェクトはマージ処理の対象となる。抽出されたエッジは、マージによりページ内に再配置される。スレッドをコアに割り当てる処理は、例えばマージ処理を行うコアが行ってもよい。
マージされたエッジ抽出済みデータからは、ラスタライズ処理により、ラスタラインごとにエッジ間に画素が充填されたビットマップデータが生成される。
【００２７】
本実施形態のレンダラではコアの割り振りを決定するに際し、各データの分析した結果（例えば、ＰＤＬ関連情報）に基づいて割り当てを決定するコア管理機構を有し、制御に基づいて並列処理を行う。システム上利用可能なコア数が多い場合に、処理の効率を更に高める目的で、ＰＤＬデータの受け取り処理の部分においては各オブジェクトの基本情報であるＰＤＬ関連情報を抽出する。ＰＤＬ関連情報には、例えばオブジェクトの種類や数等が含まれる。そして、レンダラは、ベクタライズ等の処理を後段のパイプライン処理にマップすることでデータ処理の負荷分散を図るよう構成されており、コア数が増大した場合でもスケーラブルに性能が向上する。なおベクタライズ処理は、オブジェクトの輪郭等が曲線で構成されている場合、エッジ抽出処理に先行して曲線を直線化する処理である。
【００２８】
本実施形態のレンダリングシステムでは、ベクタライズを受け取り順で逐次処理せず、例えば、ベクタライズ処理が必要であると判別されたオブジェクトをいったんバッファリングし、オブジェクトごとに独立したスレッドにより（すなわちコアにより）ベクタライズを行うことで、ベクタライズ処理も並列化する。ベクタライズされたオブジェクトは格納されて、後段のエッジ抽出処理の対象となる。ベクタライズはエッジ抽出と並列に実行されてもよい。このようにすれば、ベクタライズが不要なオブジェクトに関しては直ちにエッジ抽出処理の対象とすることができる。
【００２９】
図３は本実施形態の基本構成を示したレンダリングシステム（ＲＩＰシステム）の概説図である。レンダリングシステムは中間データ生成処理部３０１とスプール３０２、画像形成処理部３０３とを含む。図にあるようにＰＤＬデータは描画インターフェースを経由して、ＰＤＬインタープリタ３００からＲＩＰシステム（すなわちレンダラ）３０１に受け渡される。ＲＩＰシステム３０１では「データ受け取り」の処理ブロック３１１が図形、文字、画像等のＰＤＬオブジェクトを受け取り、不図示の内部スプーラに適時データを蓄えた後に後段の処理ユニットにデータを流すよう構成されている。ＰＤＬオブジェクトが図形等であった場合は、該図形オブジェクトのデータはエッジ抽出処理(スレッド）２１１〜２１３に受け渡される。一方、ＰＤＬオブジェクトがイメージであった場合は画像処理（スレッド）３１２にデータを受け渡す。なお前述したベクタライズ処理も必要に応じて行われるが、ここではその説明を省略する。
【００３０】
これらのスレッドはこのスレッドに割り当てられたひとつのプロセッサコアにより実行される。オブジェクトが１ページに複数存在する場合は、それぞれのオブジェクトに対して独立したスレッドでエッジ抽出処理が割り当てられる。ただし、並列処理されるオブジェクトの数はプロセッサコアの数が上限となる。各オブジェクトのエッジ抽出処理を後段の独立したスレッド２１１〜２１３で実行させる。各スレッドはそれぞれに割り当てた処理ユニット（プロセッサコア）により実行されるので、データ受け取り処理ブロック３１１は、各処理ユニットで実行されるエッジ抽出処理にスケジュールされたオブジェクトのデータを流すよう構成されている。なお一つのコアで時分割的に複数のスレッドを実行することも可能であるが、本例では少なくともエッジ抽出処理に関しては、各処理はそれぞれのコアで実行されるものとする。ただし、エッジ抽出処理とその他の処理、たとえばＰＤＬデータの分析等を一つのコアで時分割的に実行することはあり得る。
【００３１】
それぞれのエッジ抽出処理で抽出されたエッジデータは適宜後段のデータ合成処理（スレッド）３１３に渡され、ページ上に合成（重ね合わせの処理）がなされると同時にタイル状のデータにフォーマットされた上でスプーラ３０２にＲＩＰ中間データとして書きだすよう構成されている。該タイル上にフォーマットされたＲＩＰ中間データは更に後段の画像形成処理３０３で処理され、タイル処理（スレッド）３３１〜３３３により各タイルにおいてピクセルの展開処理が行われる。それぞれのタイルの処理は時間独立で実行がなされる。タイルはつなぎ合わされて例えばバンドとなり、ラスタ信号としてエンジン部１１２に提供される。
【００３２】
図４は三角形の図形に対してエッジ抽出処理を行う様子を示したものである。オブジェクトの輪郭とスキャンラインとの交点がエッジとして抽出される。図４中、水平方向右を示す矢印はスキャンラインであって、該三角形の外接矩形の左上から右下へ順にスキャン走査を行うよう構成されている。図４では３ライン目のスキャンが行われており、辺ＡＢおよび辺ＡＣ上のエッジ（２つ）が抽出されている。
【００３３】
図５は、上述した各スレッドのエッジ抽出処理をフローチャートで概説したものである。図５の処理はＣＰＵ１０１に搭載された個々のプロセッサコアによって実行される。まず、ステップＳ１１では、入力された図形のデータについて初期化処理を行う。この処理の中ではスキャンの範囲等を決定し後段の処理が実行出来るよう、ループ数のパラメータ群をセットする。エッジ抽出処理はオブジェクトごとの相対座標系で実行されるため、パラメータは、たとえば、オブジェクトが含まれる矩形領域（元のページの辺と平行な辺をもつ矩形領域）を構成するライン数と、各ラインのドット数などを含む。次にステップＳ１２において、最も上のスキャンラインから始めて各ラインに対するＹ方向（ラスタ走査の副走査方向）へのループ処理を開始する。処理対象のスキャンラインを現在のスキャンラインあるいは着目スキャンラインと呼ぶ。
【００３４】
ステップＳ１３では現在のスキャンラインにかかる図形等のオブジェクトデータ（オブジェクトの輪郭を形成する辺のデータ）を拾い出し、かつ、スキャンライン上に存在するエッジ情報（カレントのエッジデータリスト）を、更新する必要があるかいなかを判断する。もし更新の必要がなければステップＳ１７へ進むが更新の必要があれば、ステップＳ１４へ進む。ステップＳ１４では、カレントのエッジデータリストに対して、エッジを追加または削除の判断を行う。図形の輪郭にスキャンラインがかかった場合等、エッジを追加する場合は、ステップＳ１５にて追加すべきデータをＸ方向へ昇順となるように追加する。ここで追加されたデータはノードと呼ばれ、それぞれがリスト上に連結されている。一方で、オブジェクトの輪郭からスキャンラインが外れた場合等、エッジデータを削除する場合はステップＳ１６に進み、エッジデータリストから該当するデータを削除するよう構成されている。
【００３５】
ステップＳ１７は、カレントのスキャンラインにおけるＸ方向のエッジ情報を抽出するためのループ処理の始まりである。ステップＳ１８では、エッジデータリスト上の各ノードに順次アクセスしていく。エッジ情報はカレント（Ｙ値）のスキャンラインにおけるデータ値（ＤＡ）を線分の傾き等の情報から更新するよう構成されており、該データの更新処理はステップＳ１９にて実行される。ステップＳ２０はＸループのためのカウンタ減算処理である。ステップＳ２１はＸ方向ループの終了有無を判定している。すなわち例えば処理対象のオブジェクトを含む矩形領域の着目スキャンラインに交差する全ての輪郭線についてエッジ抽出処理を終えたなら、着目スキャンラインに対するＸ方向の処理ループは終了と判定される。ステップＳ１７からステップ２１はＸ方向のループであったがステップＳ１２からステップＳ２２まではＹ方向のループであり、着目スキャンラインを次に進めつつ処理を繰り返す。これら二重のループにて平面上の図形の輪郭情報（エッジ情報）を抽出するよう構成している。この手順の結果、スキャンラインごとに、例えばオブジェクトの輪郭と交差する点の座標と色とが、リストとして抽出される。この処理は、具体的には、ＤＤＡアルゴリズム等により実現される２点間の補間処理であり、オブジェクトンの輪郭を表す座標及び色が得られることとなる。なお色は座標点の色ではなくオブジェクト全体の色であってもよい。
【００３６】
図６は、図３（基本システム概説図）の処理の中で、「エッジ抽出処理」と抽出されたエッジのデータをマージする処理「データ合成」におけるデータの流れを説明した概説図である。図６にあるように図形１、２のデータは実体としては図形の種類を表す図形種情報とそれを構成する座標データの群で構成されている。これらデータは「エッジ抽出処理」、すなわち、先に説明した図５の処理フローによりエッジデータが抽出される。図形１と図形２にはそれぞれ独立した別々のスレッドで処理がなされるために同時に２つの図形のエッジデータが抽出される。この処理は図５ではスレッド１、スレッド２として表現されている。これらの処理の過程において不図示である色情報抽出処理により図形の輪郭の中の塗り情報が同時に抽出されるよう構成されている。スレッド３ではスレッド１およびスレッド２により抽出されたエッジデータおよび色情報から「データ合成」処理を行う。例えば、図形２が赤の単色（不透明）で塗られており図形１が青の単色（不透明）で塗られていて、図形１が図形２の上に描画されている場合、重なりの部分は上層の色である青が塗られることになる。この状態では色情報は２つ（すなわち、青と赤）が保存される。
一方でスレッド３が処理の対象とする領域（図５の例では矩形タイル）においては図形１と図形２の該領域におけるエッジデータの合成（例えば重なった結果で不要になったエッジは消去される）が行われる。本提案の処理方式では、重なりの状況によって、該領域に関して保持すべき色情報の数が増えることもある。例えば図形１が赤の単色（不透明）で塗られており、図形２が青の単色（透過）で塗られている場合で、かつ図形２が図形１の上に重なっている場合は透過合成の計算により該重なっている領域の色が計算される。例えば、青と赤を合成すると紫となるため、スレッド３の処理においては赤、青、紫の色情報が保持される。
【００３７】
［プロセッサコアの割り当て制御］
図７のグラフはＣＰＵのコア数を増やすと処理時間がどのように変化するかを示したグラフである。このグラフの例では、ＣＰＵの有するプロセッサコアのうち１コアのみを用いたシステムでは、１ページ分の処理時間はトータルで７００ｍｓのケースを示している。これを同様に２コアのシステムで実行した場合は、内部の処理が一部パイプライン化出来る箇所や主要な処理（エッジ生成等）に対しても並列（多重化）処理が可能となるために、総合すると全体の処理時間を短縮することが可能である。このケースでは２コアの時に３７０ｍｓで処理が完了する。また４コアでは２００ｍｓで、８コアで動作させた場合は最大で１３５ｍｓで処理が完了する。８コアによる処理は、１コアによる処理に対して倍率に換算すると５．２倍の高速化を達成している。
【００３８】
図８は、コア数に応じて処理フローを切り替える本実施例を適用したシステムの概説図である。図８の処理用モジュール８０３，８０５，８０６は、図３のレンダリングシステムに相当する。ただし、これは模式的な表現であり、物理的な構成として、３つの処理用モジュールプリンタエンジンに対しては、そのエンジン速度をキープさせるために、一定速度の範囲内でデータを転送するよう構成されている。また、エッジ抽出処理に使用されるコアの数は、処理用モジュールごとに異なる。
【００３９】
図８において、ＰＤＬインタープリタ３００からＰＤＬデータを受け取ると、データ分析部８０１は、ＰＤＬ関連情報を抽出して、着目ページが処理負荷の高い高負荷ページ（ヘビーページとも呼ぶ）か低負荷ページ（非ヘビーページとも呼ぶ）か判定する。なおこの処理のひとつのスレッドにより実行されるが、たとえばエッジ抽出処理のスレッドのひとつと、共通のコアにより時分割で実行されてもよい。後負荷か低負荷かの判定は、たとえばページに含まれたオブジェクトの数により判定される。オブジェクトの数がしきい値よりも多ければ高負荷ページと判定される。閾値はプロセッサの処理能力に応じて変わる可能性があり、たとえば実験的に決定できる。また単にオブジェクトの数のみならず、ベクタライズ処理の負荷を考慮し、ベクタライズ処理が必要なオブジェクトに関しては、その数に１を超える一定の重みを乗じてもよい。また、透明度を有するオブジェクトはオブジェクトの合成時にアルファブレンディング等の処理が必要であり負荷が高いためにその数に一定の重みをさらに乗じてもよい。
【００４０】
上述した判定の結果、通常の印刷ジョブのページ（非ヘビーページ）は、１コア処理用モジュールのブロックに投入されるよう構成されている。そこではＰＤＬの解析処理、およびＲＩＰ処理が１つのプロセッサコアで行われる。この場合には各処理を逐次的に行ってもよいが、複数のスレッドを１つのコアによって時分割で実行するように構成してもよい。
【００４１】
一方、処理対象のページがヘビーページであると判定した場合は、マルチコアＣＰＵの持つ複数のコアを用いた並列のＲＩＰ処理を実行するよう構成している。この時にプログラムが実行されるハードウェア環境で実際に利用可能な物理コア数の情報が必要となる。  図８中、オペレーティングシステム等により提供されるシステム構成情報が、システム構成情報格納部８１０から読み出されて処理系選択部８０４のブロックに入力されることによって、適切な処理モジュールを選択するよう構成されている。本実施形態では、システムの物理的なプロセッサコアが４コアの場合は４コア処理用モジュールのブロックに印刷対象ページのデータが投入され、物理的なプロセッサコアが８コアの場合は８コア処理用モジュールのブロックに印刷対象ページのデータが投入される。
１コアの場合には、１コア処理用モジュールにデータが投入される。不図示ではあるが、２コアの場合には、２つのコアを用いた処理用モジュールにデータが投入される。いずれの処理用モジュールも図３に示す構成を有するが、各スレッドを実行するコアの数に相違がある。したがって、物理的に異なるモジュールではなく、同一の構成を用いて、用いるコア数を制御することで、図８の構成を実現できる。
【００４２】
次に各処理用モジュールの相違についてさらに詳しく説明する。１コア処理用モジュール８０３では、１つのプロセッサコアを、データ分析部８０１、ヘビーページ検出部８０２、エッジ抽出処理部８０３の実行に用いる。この場合には、たとえば、データ分析処理、ヘビーページ検出処理、エッジ抽出処理をそれぞれ独立したスレッドとし、１つのコアで時分割に実行してよい。この場合にはエッジ抽出のスレッドは１つとしてマルチスレッドによるオーバーヘッドをできるだけ小さくするのが望ましい。なおＰＤＬインタープリタ３００については同じプロセッサコアで実行してもよいし、異なるプロセッサコアで実行してもよい。
【００４３】
４コア処理用モジュール８０５では、たとえば１つのコアによりデータ分析およびヘビーページ検出および１つのエッジ抽出処理のスレッドを実行し、他の３つのコアをエッジ抽出処理に割り当ててもよいし、１つのコアをデータ分析およびヘビーページ検出用として用い、他の３つをエッジ抽出処理に割り当ててもよい。ベクタライズ処理は、いずれかのコアで適宜、時分割に実行させる。またデータ合成処理も、いずれかのコアにより時分割で実行する。
【００４４】
８コア処理用モジュール８０６では、８つのコアを４つずつ２つのコアグループに分け、１ページのＰＤＬデータを２つに分割した一方の領域を１つのコアグループで、他方の領域をもう一つのコアグループで実行する。データ分析処理、ヘビーページ検出処理、ベクタライズ処理は、いずれかのコアで時分割的に実行する。すなわち、プロセッサコアが８個のシステムでは、それらを２つのグループに分けて、それぞれを１ページの構成する２つの領域を各グループに割り当てて実行する。この領域の分割は、たとえは単純に主走査方向にそって半分に分割してもよいし、いくつかのバンド（望ましくは偶数個）に分割し、偶数番目のバンドを一方の領域に、奇数番目のバンドを他方の領域に分類して、各コアグループにより処理させてもよい。
【００４５】
なお上記説明でいうＲＩＰ処理は、画像形成処理部３０３によるタイル処理まで含めてもよいが、中間データ生成処理部３０１による処理、すなわちエッジ抽出からデータ合成までの処理としてもよい。前者の場合には、中間データ生成処理部３０１を実現したプロセッサコアと同じコアにより、画像系処理部３０３のタイル処理を実行させてもよい。すなわち、たとえば１ページを二つの領域に分割して、それぞれの領域に対してコアを割り当てた場合には、エッジ抽出処理からタイル処理にいたるまで、同じコアで処理が進められてもよい。
【００４６】
なお、スレッドごとに別々のプロセッサコアを割り当てるようにオペレーティングシステムが構成されているのであれば、各スレッド各コアを割り当てるためには、エッジ抽出処理のスレッドの数の上限をコアの数とするよう制御すればよい。したがってこの場合には、コア数が８であれば、分割した領域ごとに４つを上限としてエッジ抽出処理のスレッドを実行すればよい。
【００４７】
図９は、上述したようにシステム情報を得るためにＯＳ側がハードウェア情報を、その内部に格納している状況を説明した概説図である。図中ブロックＰ１１０１はシステムのＯＳが表示するシステムインフォメーション情報であり、現在のＣＰＵの負荷状況や、利用されているメモリ量等を表示するものである。ＯＳは起動時にハードウェア情報（該ハードウェア情報は設定されているＢＩＯＳの情報を反映したものとなっている）を取得しているので自分自信がどのようなＣＰＵ上で動作しているかを把握している。それらはＯＳの中のシステム情報として保存されている状態である。よってＯＳに対して、ＣＰＵの「コア数」を問い合わせれば該システムで利用可能なコア数の情報が得られるようになっている。
【００４８】
図１０は、１ページの処理に８コアを割り当てる場合の処理時間の違いを説明したグラフである。従来の考え方では、どの領域のどのデータに対して何コアを割り当てても、処理するユニット（コア）の数に変わりはないので、結果的には速度に差異は出ないという見解が一般的であった。しかしながら、本願発明人の検討によれば、図にあるようにページを上下に分割しそれぞれに４コアを割り当てた場合の方が、１ページ全体に８コアを割り当てるよりも高速に処理が完了するということを見出した。ＣＰＵはデータを処理する際に、主メモリのデータにアクセスするがそれらは直接読み込まれるのではなく、バスやキャッシュを経由してデータが流れるようになっている。実際のＣＰＵの構成は先の図９のＣＰＵの構成図のように８コアという構成であっても、必要なデータのアクセス経路が等距離にない、という状況が発生する。このことに考慮してコア割り当てのパターンを最適化しないとマルチコアＣＰＵを用いたシステムにおけるプログラムの処理速度を最大化することは出来ない。図１０にあるように、グラフィックス画像を多く含むヘビーページを、１ページ全体に対して８コアのＣＰＵで処理した場合、１０５０ｍｓかかっているが、下図にあるように２つの領域に分割してそれぞれに４コアを割り当てた場合は９００ｍｓで処理が完了しており、約１４．３％の高速化が達成出来る。
【００４９】
以上のように、８つのプロセッサコアを持つマルチコアＣＰＵを用いたレンダリングシステム（すなわち画像処理装置）によりレンダリング処理の負荷が高いヘビーページをレンダリングする場合には、ページを二つの領域に分割し、それぞれの領域について、４つずつのコアでエッジ抽出をはじめとする処理を実行する。これによりコアの稼働率を向上させ、より短時間でレンダリング処理を完了することができる。
【００５０】
なお、本実施形態では、ヘビーページか否かに応じてエッジ抽出処理に割り当てるコアの数を変えているが、無条件に、ヘビーページに対するのと同様に、複数のプロセッサコアをエッジ抽出処理に割り当ててもよい。すなわち、図８のヘビーページ検出部８０２および１コア処理用モジュールを持たず、コアの数に応じて、スレッドにコアを割り当てる。
【００５１】
また、コアの数が８を超える場合にも、同様にしてページを２つの領域に分割し、コアを２つのグループに分けて、それぞれの領域に含まれたオブジェクトのエッジ抽出処理をはじめとするレンダリング処理をおこなってよい。さらに、たとえば１つの領域を処理するコアの数を所定数、例えば４とするようにコアをグループ分けし、そのグループに対応付けてページを分割し、分割した各領域を１つのコアグループでレンダリング処理してもよい。
【００５２】
＜実施形態２＞
図１１は、実施形態２におけるシステム構成（ＲＩＰサーバーに用いるハードウェア情報）に関する概説図である。ここではシステム情報を得るためにＯＳ側がハードウェア情報を、その内部に格納しているものを利用する。このシステムは、４コアのプロセッサを４つ搭載したマルチＣＰＵ構成を有している。したがって、コアの数は合計で１６となる。しかしながら、図１１で示されるように、実際の物理コアの数と、オペレーティングシステムが認識する論理コアの数とが異なっているシステムが存在する。
システム側はＣＰＵコア数を３２と認識しているが実際のボードには４コアのＣＰＵが４つ搭載されているだけなので、実際の物理コアは１６となっている。これは、１つのコアの計算資源は１つのコアの分だけしか用意されていないが、デコーダ等を複数用意し、レジスタやパイプラインの空き時間を利用してあたかも２つのコア（これが論理コアである）があるかのようにふるまう技術による。演算回路は１コアに１つしかないので、２つの論理コアにより２つのスレッドを完全に並列実行できるわけではない。
【００５３】
この状況で、３２コアというオペレーティングシステムにより提供された情報を参照して、実施形態１と同様の手法でコアの割り当ての最適化を行っても処理速度が向上しないという自体が発生する。そこで本実施形態ではＯＳ側から提供されるシステム情報をそのまま利用するのではなくて、ＵＩによりユーザーがＣＰＵの構成情報を与えるよう構成している。
【００５４】
図１２は、該ＣＰＵ構成情報を与えるためのＵＩを説明した概説図である。システムは予め用意されたプログラム（図８の処理系選択部８０４）によっても論理コア、物理コアの違いを認識するように構成されている。ウィンドウ１２０１ｂでは自動設定ボタンが選択されており、この場合にはたとえばオペレーティングシステムにより認識されたプロセッサコアの数に応じて、第１実施形態に示した処理が実行される。
加えて本実施形態では、ユーザーが直接指定することも出来るように手動セッティングボタンが用意されている。この手動設定ボタン１２０２は画像処理装置のユーザインタフェース部１２０１に設けられている。不図示であるＲＩＰソフトウェアの全体セッティングから該ＵＩ画面を起動し設定を行うことが可能となっている。
図１２の例に示すウィンドウ１２０１ａでは、手動設定ボタンを選択しており、詳細設定をさらに選択すると、手動で物理コアの数字を入力が出来る。「論理コア」の数字の３２はＯＳが認識しているコア数であるが、物理コア数としてはユーザーが指定出来る。ここではコア数設定欄１２１１に値１６を入力している。加えて詳細設定ＵＩではヘビーページに対してページを分割する領域の数と、各領域に対して割り振るスレッド数を入力出来るよう、領域数入力欄１２１とスレッド数入力欄１２１３とが設けられている。
スレッド数は、指定された領域数で指定されたコア数を割った商をデフォルトとしても良い。実施形態１と本実施形態とでは、本実施形態ではコア数と領域分割数とを指定できる点を除いて、同様の動作が行われる。すなわち、図８の処理系選択部８０４による処理系の選択が。実施形態１では８コアを例としていたが、本実施形態では指定された数のコアとなる。また1ページを分割する数も実施形態１では２としていたが、本実施形態では指定された領域数となる。
【００５５】
図１３は、実施形態２によるプリントシステムの概略ブロック図である。図１０に示したＵＩ１２０１により、３２の論理コアを提供しているシステムにおいて１６の物理コアを指定し、かつヘビーページの場合に１ページを４分割し、それぞれの領域に４コアを割り振るように設定を行っている例を示している。これによりプリントシステムに印刷ジョブが入力されると、まずページが検査ブロックで検査される。ここでページがヘビーページであるか否かを判定される。ページがヘビーページでない場合（便宜上シンプルページとも呼ぶ）は、中間データ生成処理部は動作モードＡで動作し、ページがヘビーページの場合は、中間データ生成処理部は動作モードＢで動作するよう構成されている。モードＡにおける処理は１ページ全体を１コアで処理するように構成されている。一方、モードＢの処理ではページを４つの領域に分割し、それぞれに４つのコアを割り振るよう構成している。なお本実施形態において、モードＡにおける処理は１コアで処理するように構成されているが、モードＢの処理で１つの領域に対して割り当てられるコア数（例えば４つ）よりも少ない数のコアで、モードＡにおける処理が実行されるように構成してもよい。
【００５６】
なお、スレッドの数が物理コアの数に達するまでは同一の物理コアを共有する２つの論理コアを用いないよう例えばオペレーティングシステムが制御していればよいが、そうでない場合には、用いるコアを、すべて別々の物理コアとなるよう指定する必要がある。この場合には、コアの識別子等を用いて、コアの数のみならず用いるコアも指定する必要がある。
【００５７】
以上のようにして、実際に並列処理が可能な物理コアを用いてスレッドを実行することで、レンダリング処理を短時間で行うことができる。
【００５８】
また、プロセッサコアの数は、レンダリングシステムの製造時にわかっており、そのシステムを使用する限り変わることはないので、ユーザインタフェースを介して指定させず、予めＲＯＭ等に物理コア数を記録しておいてもよい。この場合には、処理系選択部８０４はＲＯＭに記録された物理コアの数を参照する。
【００５９】
＜実施形態３＞
［レンダリングシステムの構成］
以下、本発明に好適な実施形態３について以下図面を用いて詳説する。前の実施形態ではページごとのエッジ数等に基づいて負荷レベル（高負荷ページ／低負荷ページ）を、当該ページのレンダリング処理の実行前に事前に判定していた。それに対して本実施形態では、レンダリング処理の実行中に判定する。本実施形態の画像形成装置は、基本的には第１の実施形態と同様の構成を有する。そして、そのレンダラは並列処理機構を有しており、処理対象のページに含まれる文字やラインアート、図形等のオブジェクトごとに処理の単位（スレッド）を割り当てる。複数のスレッドがひとつのプロセッサコアにより時分割で実行されてもよく、プロセッサコアが複数あるプロセッサでは、それぞれのコアでスレッドが並列に実行される。本実施形態では、ひとつのページの処理はひとつのコアにより行うものとして説明するが、これは説明の便宜であって、１つのページに含まれるオブジェクトの種類ごとのスレッドを、別々のコアにより実行してもよい。本実施形態およびその後の実施形態では、１つのページのデータ処理に対するプロセッサコア（あるいはコアによる処理時間）の割り当ては、実際の処理の進捗に応じて動的に変更される点に特徴がある。そのため、初期のスレッドの夫々のコアへの割り当ては、予測した負荷に応じて行ってもよいし、予測することなく一律に行ってもよい。
【００６０】
図１６は第３の実施形態におけるレンダリングシステム（ＲＩＰシステム）の概要を説明する概略システムブロック図である。入力データ（ＰＤＬ等のプリントデータ）は中間データ生成モジュール１６０２に入力され、図形等のデータは輪郭等のデータに置き換えられた後、中間データスプーラ１６０３に一時的に保存される。システム全体を制御しているブロックである制御部１６０１は各処理モジュールの制御を司っており、中間データ生成モジュール１６０２、画像形成モジュール１６０４、エンジンＩＦブロック１６０６それぞれに制御信号の送受信を行っている。中間データ生成モジュール１６０２の制御においては、負荷レベル検出部１６０１１にて現在処理対象となっているページの負荷レベルを検出（詳細は図１７を参照）している。
【００６１】
本システムでは検出レベルを３つのレベルで定義しており、ページが軽いページである場合（例えば６００ｍｓ未満で処理可能な場合、換言すれば３００ｍｓ経過した時点でデータ処理の進捗が５０％を超えている場合）はレベル１、中程度に負荷の高いページである場合（例えば６００ｍｓ以上で１秒未満の処理時間がかかる場合）はレベル２、更にとても負荷の高い重いページである場合（例えば１秒以上の処理時間がかかる場合）はレベル３としている。
【００６２】
「発明が解決しようとする課題」の所で述べたように、現処理すべきページの処理負荷がどれだけかということを、グラフィックス数等のスタティックな情報から予測することは困難である。そのために本発明では、実際に処理をさせている途中の進捗をリアルタイムに計測しながら処理を進めるよう構成している。ここで負荷レベル検出部１６０１１にて検出されたレベルに基づいて、加速処理制御部１６０１２が必要なプロセッサのコア割り当て数を切り替えることで中間データ生成モジュール１６０２個々の処理能力を適応的に調整するように構成されている。中間データ生成モジュール１６０２は、例えばプロセッサコアの数など、画像形成装置の処理能力に応じて複数用意されてもよい。たとえば８コアのプロセッサが実装されている場合、１つの中間データ生成モジュール１６０２に４つのコアを割り当て、２つの並列に実行可能な中間データ生成モジュール１６０２を提供することもできる。
【００６３】
尚、図１６で中間データが中間データスプール１６０３にスプールされた後、該データは画像形成部１６０４に順次入力され、ビデオメモリ上にピクセルデータが展開される。これらデータはエンジンＩＦ１６０６を経由してプリンタエンジン１６０７へ入力され、プリンタエンジン１６０７が画像を出力するよう構成されている。
【００６４】
上述した本実施例システムブロック図の中間データ生成モジュール１６０２の内の処理詳細は、図３の中間データ生成処理部３０１と同様である。なお、ＰＤＬインタープリタ３００は、中間データ生成処理部３０１の一部として含まれてもよい。その場合には中間データ生成処理部３０１ごとにＰＤＬインタープリタ３０１が提供される。あるいは、ＰＤＬインタープリタ３００は単独のスレッドで実行するよう構成してもよい。図３にあるように、ＰＤＬインタープリタ３００で生成したＰＤＬデータは描画インターフェースを経由して、プリントシステム側に受け渡される。プリントシステム側では「データ受け取り」の処理ブロック３１１が図形、文字、画像等のＰＤＬオブジェクトを受け取り、不図示の内部スプーラに適時データを蓄えた後に後段の処理ユニットにデータを流すよう構成されている。ＰＤＬオブジェクトが図形等であった場合は、該図形のデータは図３にあるエッジ抽出処理（スレッド）２１１〜２１３にデータを受け渡す。もちろんエッジ抽出モジュールのスレッド数は３つとは限らない。立てることが可能なスレッドの数により実質的な上限はあるものの、画像形成装置の処理能力、とくにプロセッサによる処理能力やコアの数等の情報処理能力に応じた数のエッジ抽出モジュールを提供することができる。
【００６５】
一方、ＰＤＬオブジェクトがイメージであった場合は画像処理（スレッド）３１２にデータを受け渡す。図形がページに複数存在する場合は、それぞれに対してエッジ抽出処理が割り当てられる。それぞれのエッジ抽出処理で抽出されたエッジデータは適宜後段のデータ合成処理（スレッド）３１３に渡され、ページ上に合成（重ね合わせの処理）がなされると同時にタイル状のデータにフォーマットされた上で中間データスプール（スプーラとも呼ぶ）１６０３に中間データとして書きだすよう構成されている。該タイル上にフォーマットされた中間データは更に後段の画像形成モジュール１６０４（図３の画像形成処理部３０３に対応）を経由してビットマップデータに変換され、当該データがエンジン１６０７に転送される。
【００６６】
中間データ生成モジュール１６０２の内の処理は、図６により説明した概説と共通である。図６にあるように図形１、２のデータは実体としては図形の種類を表す図形種情報とそれを構成する座標データの群で構成されている。これらデータからは、「エッジ抽出処理」、すなわち、エッジ抽出モジュール２１１〜２１３による不図示の処理フローによりエッジデータが抽出される。図形１と図形２にはそれぞれ独立した別々のスレッドで処理がなされるために同時に２つの図形のエッジデータが抽出される。この処理は、図６ではスレッド１、スレッド２として表現されている。これらの処理の過程において不図示である色情報抽出処理により図形の輪郭の中の塗り情報が同時に抽出されるよう構成されている。スレッド３ではスレッド１およびスレッド２により抽出されたエッジデータおよび色情報から「データ合成」処理を行う。
【００６７】
例えば、図形２が赤の単色（不透明）で塗られており図形１が青の単色（不透明）で塗られていて、図形１が図形２の上に描画されている場合、重なりの部分は上層の色である青が塗られることになる。この状態では色情報は２つ（すなわち、青と赤）が保存される。
【００６８】
一方で、スレッド３が処理の対象とする領域（図６の例では矩形タイル）においては図形１と図形２の該領域におけるエッジデータの合成（例えば重なった結果で不要になったエッジは消去される）が行われる。本提案の処理方式では、重なりの状況によって、該領域に関して保持すべき色情報の数が増えることもある。例えば、図形１が赤の単色（不透明）で塗られており、図形２が青の単色（透過）で塗られている場合で、かつ図形２が図形１の上に重なっている場合は透過合成の計算により該重なっている領域の色が計算される。例えば、青と赤を合成すると紫となるため、スレッド３の処理においては赤、青、紫の色情報が保持される。
【００６９】
上述した本発明の構成により従来のペインターズ・アルゴリズムでは困難であった図形（重なった図形を含む）描画処理の並列処理、および処理時間の調整が可能となる。一般に平面上の図形の描画は上書きの論理があるためにペインターズ処理の場合は全ての処理を順番（シーケンシャルに）実行していく必要があるが、本発明の方法によれば図形の描画順序を保持しながら適宜、部分領域毎に合成処理を進めるために漸次（プログレッシブ）に、かつ時間独立で処理を進めることが可能である。例えば、図形のエッジ（輪郭）データを生成する処理は、グラフィックなどのオブジェクト各々で独立に処理することが可能であるし、また各領域における重ね処理（例えば、下層の赤色の図形が上層の青色の図形により上書きされる場合その領域では青色しか描画されない等）についても、個々の領域において時間独立に処理が可能となる。
【００７０】
［負荷レベル検出部による負荷レベルの検出］
図１７は、負荷レベル検出部１６０１１による検査処理の状況を説明した概略の状態遷移図である。ここではページ処理の負荷をリアルタイムに検出するロジックについて説明する。負荷レベル検出のための検査処理は、レンダリング処理に対してはオーバーヘッドとなるため、常に検出処理の時間については考慮する必要がある。本実施例では、レンダリング処理の開始から一定時間（例えば、６００ｍｓの半分の時間＝３００ｍｓ）を経過した時点で、最初のデータ処理の進捗（与えられたデータの何割を処理したか）を検査するように構成することで、オーバーヘッドを軽減する。負荷レベルは処理対象のページごとに判定される。たとえば１つのページの処理が複数のスレッドで行われている場合には、それら複数のスレッドによる処理の進捗をまとめてページ単位で判定する。判定結果として、たとえば処理中のページの進捗を示す負荷レベルが得られる。負荷レベルは例えばいくつかのレベル（例えば０〜３など）に区分されるが、この区分数は、後述する加速処理あるいは応援要請の段階に応じて決めておけばよい。負荷レベルは、たとえば、所定時間（本例では３００ミリ秒）内で処理したデータ量の、処理対象のデータに対する割合に応じて決定できる。この割合が第１の閾値以下であればレベル０（ライトページ）、第２の閾値以下であればレベル１、第３の閾値以下であればレベル２（ヘビーページ）、それを超えていればレベル３などと判定される。
【００７１】
図１７中、状態はアイドル（ｉｄｌｅ）状態からスタートし、最初の検査では周期ｆ１にて検査ｉ１を行う。適宜（あるいは所定）時間が経過した後に、条件に応じて異なる２つの検査処理に移行する。一つの検査処理は、検査周期をｆ２へ変更し前記検査ｉ１とは異なる検査ｉ２を行うよう構成されており、もう一つの検査処理では、検査周期をｆ３へ変更し前記検査ｉ１とは異なる検査ｉ３を行う。検査ｉ１〜ｉ３これらは例えばページに含まれるオブジェクトの種類に応じて適宜検査ロジックが切り替えられるように構成されている（例えば、図形の複雑さの違いや、図形や画像の内容に依存して処理内容を適切に切り替える手段を提供する）。このようにオブジェクト種類に応じた処理ロジックで負荷レベルが判定され、負荷レベルに応じた負荷分散が行われる。
【００７２】
既に述べたように一般的には処理が進む中で何度も検査をするとオーバーヘッドが増えるという課題があるが、本システムの構成によれば処理が所定の段階、たとえば１ページの半分程度の処理が済んだと見込まれる時間までは進捗の確認をしない。一方で処理が所定の段階まで、たとえば半分進んだと見込まれる時点で、処理負荷が軽いか、重いかの判別を開始する。重いデータと判断された場合はより入念な検査を行い、その重さの程度がどのレベルに該当するのかを精密に検査するように構成する。
【００７３】
［加速処理部による加速処理］
図１８は加速処理制御部１６０１２の概要を説明している。加速処理制御部１６０１２は、処理単位、（スレッド、またプロセス等）Ａ、Ｂ，Ｃ，Ｄに対して処理速度の加速減速処理を指示する。図中、処理単位Ａ，Ｂ，Ｃ，Ｄはそれぞれ異なる処理単位を示す。図１８では例としてページ−ｉとページ−ｊの処理が時間軸上重なった状態で処理されている場合を示している。ここでは図形のエッジ抽出処理は制御部側からみればスレッドという単位の固まりで認識されている。図１８では、例えばページ−ｉについてはグラフィックのエッジ抽出処理がスレッドＡ，Ｂにより並列に実行されており、ページ−ｊについてはグラフィックのエッジ抽出処理がスレッドＣ，Ｄにより並列に実行されている。これらのスレッドの初期のスケジューリングは、たとえば実施形態１等で説明した要領で行われてもよいし、あるいは各ページについて一様に処理資源を割り当ててもよい。加速処理部１６０１２は、スレッドＡ，Ｂについてその優先度属性をより高く、スレッドＣ，Ｄについてはより低く設定し直している。この例では１ページについて２つのスレッドを並列に実行しているが、１つであってもよいし、３つ以上であってもよい。
【００７４】
このように図１８ではページ−ｉの処理をページ−ｊの処理よりも処理速度の観点から優先して処理する例を示している。ページ−ｉの優先処理を実現するためには、ページ−ｉを処理しているスレッドの優先順位を、ページ−ｊのスレッドの優先順位よりも上げる（＋指令）ことを「加速処理制御部」１６０１２から指令する。一方で、ページ−ｊに対しては処理スレッドの優先順位を下げる（−指令）ことを「加速処理制御部」１６０１２から指令する。＋指令または−指令のいずれか一方のみであってもよい。優先度の決定は、例えば図１７に示した負荷レベルの検査結果に基づく。ページ−ｉの負荷レベルが例えば所定時間内にページ−ｉのレンダリングが完了しないレベル２と推定された場合に、対応するスレッドの優先度を上げて加速処理の対象とする。一方ページ−ｊの負荷レベルが、処理時間に余裕のあるレベル０だと判定された場合には、対応するスレッドの優先度を下げる。
【００７５】
具体的には「＋指令」の場合はスレッドを制御する属性パラメータ（Ｔｈｒｅａｄ関数の属性数値）をインクリメントし、「−指令」の場合はスレッドを制御する属性パラメータの数値をデクリメントする（すなわち優先度を引き下げる）ことで、ＣＰＵコアのスケジュールを変更する。スレッドの優先度を変更することで、当該スレッドに割り当てられるＣＰＵタイムがスレッド単位で変更される。優先度は複数の段階で設定可能でもよく、優先度が高くなるほど、当体スレッドに割り当てられるＣＰＵ時間の率は高くなる。この場合負荷レベルのレベル数は、この設定可能な優先度のレベルに対応して決めればよい。設定スレッドのスケジューリングは、例えば制御部１６０１により行われ、具体的にはたとえば制御部１６０１を実現しているオペレーティングシステムなどにより提供される機能である。１つのプロセッサコアで或るページのレンダリングを実行開始してから所定時間経過後に後続の他のページの処理を開始すると、複数のページのレンダリング処理（のためのスレッド）が１つのコアで並列に実行される。このような場合に上記した負荷レベルに応じた優先度の再設定を行うことで、より負荷レベルの高いスレッドに対して処理資源を優先的に配分し、当該ページの処理（レンダリング等）を速く終わらせることができる。すなわち、所定時間内に完了しないと見込まれるページについては、より多くの処理資源（たとえばＣＰＵ時間）を投入することで、所定時間内に完了させることができる。しかも所定時間内に完了するか否かの判定を、実際の処理の進捗に基づいて行うために、判定結果の信頼度が高い。
【００７６】
なお、あるページについて優先度を変更した場合には、その設定変更の所定時間後に図１７に示した負荷レベルの判定を再度おこなってもよい。この再判定で得られた新たな負荷レベルに応じて、優先度の変更を上述のように繰り返し行っても良い。なお優先度の再設定やスレッドの割り当ては制御部１６０１により実行される。
【００７７】
［ページ処理スケジューリング例］
図１９は本実施例３のシステムにおけるページ処理スケジュールを説明した概説図である。該システムではマルチコアＣＰＵを用いておりプリント（レンダリング）処理の通常動作としてはページの処理を前述したようにマルチスレッド処理を適用しており、ページ処理のスケジュールとしてはあるページの処理が完了していなくてもその次ページの処理を開始するよう構成されている。図１９にあるようにページ１、２、３、４は同時に処理を開始している。本システムでは最初のページ群の処理を開始してから一定期間経過した後、次のページ群（図ではページ５、６、７、８）の処理を開始するよう構成されている。
【００７８】
図１９の例において、ページ（１、２、３、４）はそれぞれ並行に処理が進むため、（つまり、これらのページが重なっている時間帯は）プロセッサ（ＣＰＵ）が同時並行で処理を行っている。この時にプロセッサが４コア以上のＣＰＵであれば、４つの処理が並行で動作した場合でもそれぞれの処理時間は（つまりシングルコアで処理した時の処理時間と比べて）変わらず、処理を同時に行った分だけ早く処理が完了する。尚、このような構成の場合であっても、利用するプロセッサがシングルコアのＣＰＵであった場合、ＣＰＵは時分割処理でみせかけ上の並列処理を行うが処理能力が増えているわけではなく、４つ同時処理を行っても処理を加速することにはならない。
【００７９】
以上の構成及び動作により、本実施形態の画像形成装置によれば、ページごとのレンダリング処理中に、その負荷レベルに応じてレンダリング処理（グラフィックオブジェクトのエッジ抽出等）のスレッドの優先度を変更する。すなわち各ページのレンダリング処理への処理資源の配分を実際の負荷に応じて行える。この結果、各ページのレンダリングを予め設定した時間範囲の中で完了させやすく、処理負荷（あるいは処理時間）の予測ミスを織り込んで事前にスプールしておくべきデータ量の増大を防止できる。
【００８０】
なお本実施形態ではページのデータ生成処理についてレンダリング処理に特に着目したが、それはレンダリング処理の負荷が高い場合が多いためであり、ビットマップデータの生成処理に係る処理一般について本実施形態の加速処理を適用できる。
【００８１】
なお本実施形の加速処理を実施形態１に適用し、高負荷ページについては優先度を高く、低負荷ページについては優先度を低く変更するように構成してもよい。
【００８２】
＜実施形態４＞
本実施形態では、スレッドの優先度の変更に代えて、各ページのレンダリング処理を複数のコアで実行させることで、当該ページの処理完了時間を前倒しする（このことを、処理時間を短縮する、という場合もある）。本実施形態では、実施形態３に記載した構成、特に図１６、図１７に記載した構成と負荷レベルの実時間での推定とを実施形態３と共有する。その上で、図２０に説明する手順を実行して、負荷レベルの高いページのレンダリング処理に多くの処理資源を分配する。
【００８３】
［マルチプロセッサシステムによる処理手順の例］
本実施例で用いているマルチプロセッサのシステムの構成例は図９で示したマルチＣＰＵ９００のようなものである。ここでは１ボードにＡとＢ、２つのソケットが用意されており、そこには２つのＣＰＵチップが搭載されている。ソケットＡとソケットＢのＣＰＵはお互いにプロセッサ間インターコネクトと呼ばれる高速の接続線で結合されている。メモリはソケットＡ側とソケットＢ側にそれぞれ接続されているが、アドレス空間は全アドレス空間が二分されており、上位側アドレス空間はソケットＡ側のメモリに、下位側のアドレス空間はソケットＢに割り当てられている。それぞれのＣＰＵは各ラストレベルキャッシュを経由して全てのアドレス空間に適宜アクセスが出来るよう構成されている。図９にあるようにＣＰＵにはコアが４つ搭載されているので本システム（１ボード）では、８つのコアを利用することが出来る。
【００８４】
図２０（ａ）は本実施例３のシステムにおけるコア割り当て処理フローを説明した概説図である。本システムはステップＳ２０１１にあるようにシステムの稼働を開始時に、適宜ＣＰＵ構成情報の取得を行う。図２０（ａ）の処理は制御部１６０１により実行される。制御部１６０１は、プロセッサコアのひとつにスケジュールされたスレッドにより実現してもよいし、独立したハードウェアにより実現してもよい。ＣＰＵ構成情報とは図２０（ｂ）にあるように処理コア（起点側）に対して他のコアが同一ソケット上のコアか、別ソケット上のコアかを判定する表（テーブルデータ）２００１を指す。ＣＰＵ構成情報２００１は、たとえば画像形成装置の製造時にＲＯＭ等に記録しておけばよい。
【００８５】
ＣＰＵ構成情報（テーブルーデータ）２００１からはコア１を起点のコアとした場合、コア２、３、４はコア１と同一ソケット上に存在していることが判明するが、コア５、６、７、８は別ソケット上のコアに存在するということが判明する。一般に同一ソケット上のコアの場合はラストレベルキャッシュが各コア間で共有されているので比較的オーバーヘッドなしでデータのやりとりが可能であるが、別ソケットの場合はプロセッサ間インターコネクトを経由してデータのやりとりが発生してしまうためある程度のオーバーヘッドが発生するという特性がある。
【００８６】
図２０（ａ）のステップＳ２０１２では印刷ページの処理の実行を開始する（複数ページある場合は、ステップＳ２０１２〜Ｓ２０１７をページごとに順次繰り返しを行うよう構成する）。これにより、例えば処理対象ページのエッジ抽出やブロックの合成等の処理（スレッド）がスケジュールされ、該当する処理が開始される。
【００８７】
ステップＳ２０１３では現処理対象のページがヘビーページであるか否かを検出（判定）する。この時にヘビーページと判定されなかった場合はステップＳ２０１６へ進み通常のページとして処理が進むが、ヘビーページと判定された場合はステップＳ２０１４へ進む。ここで負荷レベル判定等のロジックは図１７で述べた通りである。すなわち、ステップＳ２０１２の処理は、ステップＳ２０１１後に直ちに実行される訳ではなく、ステップＳ２０１２により処理対象ページについてレンダリングが開始されたから所定時間経過後に実行されればよい。なおヘビーページとは、ここではたとえば負荷レベルが一定レベル以上であると判定されたページである。
【００８８】
ステップＳ２０１５は、担当しているページを処理するコア（起点側、現処理コアとも呼ぶ。）に対して処理の応援を要請するステップである。他のコアに対する応援の要請とは、たとえばその「他のコア」にも現処理コアで行うはずの処理の一部を割り当てることである。処理の割り当ては、たとえば処理対象のページを分割し、その分割部分の処理（スレッド）を当該コアにスケジュールするなどにより実現される。あるいは、現処理コアのみにスケジュールされていたスレッドを、他のコアでもスケジュールするなどしてもよい。いずれにしても、対象ページの処理（スレッド）を現処理コアに加えて、他のコアでも実行することで、処理完了までの時間を短縮する方法であれば、他の方法であっても構わない。
【００８９】
ここでは前記判定されたページの負荷レベルが２以下である場合、現処理コア（起点側）に対して同一ソケット上のコアに応援要請を行い、それ以外（負荷レベルが３以上）の場合は、それに加えて別ソケット上のコアにも応援要請を指示するように構成している。負荷レベル（或いは処理の進捗）に応じて応援要請するコアの数を増やせば処理完了時刻を前倒しできるので、ソケットの同一性は本例の通りでなくともよい。
【００９０】
図２１はページ４で処理負荷の重いページが検出されている場合の概説図である。本システムでは図３で説明したようにページ内部の処理を並列処理で高速化してはいるが、想定以上に処理負荷が大きくなると予めシステムが想定している規程時間内に処理が完了しない事態となる。そこで本提案のシステムでは、負荷処理の重いページが検出（前記負荷レベル検出部に通知）された場合に、そのページを処理しているスレッドに対して更に多くのコア数を割り当てるよう構成する。
【００９１】
そこでＣＰＵタイムを奪っても問題のないページ、およびそれを処理しているコアを制御部１６０１側で把握するよう構成する。図２１のジョブシナリオではページ２とページ５がこれに該当する。図中、コア２とコア５が処理時間を融通しても良いコアということになる。判定基準としてはやはり負荷レベルを利用でき、たとえば負荷レベル０（ライトページ）と判定されたページの処理を割り当てたコアの処理時間の一部を、ヘビーページの処理のために利用する。
【００９２】
しかしながら、図２０（ｂ）のＣＰＵ構成情報の例では、ライトページが割り当てられているコア２，５のうち、コア４と同一ソケットにあるコアはコア２であり、コア５は別ソケットにある。コア５がコア４のための処理を実行する場合は、コア２に比べて効率が悪くなる。その理由は、コア５はコア４の処理するデータ存在する領域にアクセスをしなくてはいけないのだが、そのためにプロセッサ間インターコネクトを経由しなくてはいけないためである。このように、あるスレッドに付加的なプロセッサコアを割り当てる場合、付加的な割り当てによるオーバーヘッドの小さいプロセッサコアを選択する。
【００９３】
本実施例では、コア４が処理するページの負荷レベル（ヘビーレベル）に応じて応援を要請する（ＣＰＵタイムを融通してもらう）コアの割り当てを適宜切り替えられるよう構成している。すなわち、負荷レベルが２以下の場合はコア２のみに対して応援要請を行うが、負荷レベルが３以上の場合はコア２に加えコア５にも応援要請を行うよう構成している。この構成により、まさにレンダリング処理中に当該処理の負荷レベル（或いは進捗）を判定し、判定結果に応じて、進捗の遅れたページの処理（スレッド）に割り当てる処理資源、たとえばプロセッサコアのＣＰＵ時間を増大させる。増大する分は、進捗に余裕のあるページのＣＰＵ時間から融通することで、新たな進捗の遅延を発生させることも極力防止できる。
【００９４】
なお本実施形態による、複数のコアを用いて１ページの処理の完了を前倒しする方法を、実施形態３によるスレッドの優先度を高くする方法と組み合わせてもよい。組み合わせる場合には、たとえば、負荷レベルが一定のレベルを超えていれば当該ページを処理するスレッドの優先度を上げるとともに、当該スレッドを現在のコアに加えて他のコアに応援要請すなわちスケジュールする。さらに負荷レベルが高い場合には、本実施形態のとおり、更に他のコアに応援要請する。
【００９５】
＜実施形態５＞
次に本発明の実施形態５について以下図面を用いて詳説する。本実施形態５の主たる構成は実施形態４の構成と同様であるため以下、主にはその差分についてのみ詳説する。本実施形態では更に様々なタイプのプロセッサの構成について、より適切にコア割り当てが出来るシステム構成について述べる。
【００９６】
図２２（ａ）は本実施形態で用いるＣＰＵチップでありここではコアが２つ搭載されているデュアルコアプロセッサを用いる。このプロセッサを用いて８コアのシステムを構成する方法は複数あるが、図２２（ｂ）と図２２（ｃ）に、二種類の接続方法を示す。図２２（ｂ）は１ボードに２ソケットあり、４つのＣＰＵチップを使うためには２ボード構成でそれぞれのボードが高速のネットワーク（スィッチングハブ）で接続されている。図２２（ｃ）は４つのＣＰＵソケットが１ボードに搭載されているケースであり構成が各ソケットのＣＰＵはお互いにプロセッサ間インターコネクトと呼ばれる高速の接続線で結合されている。メモリは各ソケットのサイドにそれぞれ接続されているが、アドレス空間は全アドレス空間が適宜分割され割り当てられている。それぞれのＣＰＵは各ラストレベルキャッシュを経由して全てのアドレス空間に適宜アクセスが出来るように構成されている。
【００９７】
上記複数の構成が考えられるシステムにおいてＣＰＵ構成情報をスタティックかつ正確に把握することは容易ではない。そこで本実施形態のシステムではシステム内部でコアの組み合わせテストを行い、ＣＰＵ特性データを更新するよう構成している。
【００９８】
図２２（ｄ）は、ＣＰＵ特性データを作成するための処理の基本的なフローを説明した概略フロー図である。ステップＳ２２２１でＣＰＵ構成情報を読み出す。ステップＳ２２２２ではコアの組み合わせテストを行う。テストは、例えば１コアに対して負荷の重い処理を実行させた状態において、コア２、３、４、・・、８と応援要請を行わせ、その組み合わせごとの実行速度比率を相対的に計測し、計測の結果を次のステップＳ２２２３のＣＰＵ特性データ書き出しステップにて記録するよう構成する。テストに用いる処理は、レンダリング処理（たとえなぐらふぃいくオブジェクトのエッジ抽出等）であってもよい。ＣＰＵ特性データは実施形態４におけるＣＰＵ構成情報に類似するが、たとえば図２３（ｂ）に示すように、或るコアを現処理コアとした場合に、テストで測定した相対的な実行速度ごとに、他のコアを対応付けた表である。図２３（ｂ）では例えば、コア１が現処理コアである場合、コア２が最も処理速度が速い速度レベル１に分類され、コア３，４がその次のレベルである速度レベル２、コア５−８が最低の速度レベル３に分類される。
【００９９】
このように適宜特性をプロファイリングすることによりシステムの構成が変化した場合でも最適なパフォーマンスが得られるようにコア割り当てを調整することが出来るようになる。
【０１００】
図２３（ａ）は本実施形態のシステムにおけるコア割り当て処理フローを説明した概説図である。本システムはステップＳ２３２１にあるようにシステムの稼働を開始時に、前記ＣＰＵ特性データの読み込みを行う。ＣＰＵ特性データとは図２３（ｂ）にあるように処理コア（起点側）に対して他のコアへ応援要請した場合の処理速度の相対的な関係を示す表（テーブルデータ）を指す。一般にプロセッサ間インターコネクト等を経由する場合は、そのオーバーヘッド等により同一の処理であっても速度が低下するが、この表はそれらの程度を相対的な指標示している。速度レベルは１から３に、図２２（ｄ）の手順で行われた事前の測定結果に応じて適宜分類されている。
【０１０１】
図２３（ａ）上、ステップＳ２３２２では印刷ページの処理を実行する（複数ページある場合はステップＳ２３２２以下順次繰り返しを行うよう構成する）。ステップＳ２３２３では現処理対象のページがヘビーページであるか否かを検出する。この時にヘビーページと検出されなかった場合はステップＳ２３２６へ進み通常のページとして処理が進むが、ヘビーページとして検出された場合はステップＳ２３２４へ進む（レベル把握等のロジックは図１７で述べた通りである）。ステップＳ２３２５では担当しているページを処理するコア（起点側）に対して処理の応援を要請するステップであり、ここではヘビーレベルに応じて適切なコアに応援要請を行うよう構成されている。ステップＳ２３２５は、図２０（ａ）のステップＳ２０１５に相当するが、参照するテーブルがＣＰＵ特性データテーブルである点が異なっている。またテーブルの構成の相違により、負荷レベルに応じた、応援要請対象のコアも相違する。
【０１０２】
図２４は本実施形態の効果を概説したグラフである。グラフ上、縦軸は各ページの処理時間をｍｓで示しており、横軸右方向へページソート（処理の軽い順から重い順へ、つまり処理時間の短いページから長いページへ並び替え）している。グラフからわかるように右側には処理時間の長いページが配置されているが本手法では処理の負荷が大きなページには加速処理が適用されるため処理時間が短縮されている。一方で左側にある処理時間が短いページに対しては（全体最適という観点からは優先的に処理する必要がないために）ＣＰＵタイムを融通しているために処理時間が長くなっている。本システムではこのように処理時間のバラつきを抑制することで常に一定の速度で中間データを生成することが出来るよう構成されている
以上説明したように、本実施形態によれば、複数のプロセッサを用いる画像形成装置において、複数のコアを用いる際のオーバーヘッドをコアごとに予め評価しておくことで、たとえプロセッサコアの構成が様々に変わり得る場合であっても、応援処理に適切なコアを選択することができる。そしてその結果、プロセッサコアの構成がさまざまにとり得る画像形成装置であっても、実施形態４で説明したように、各処理に対して適切に処理能力を割り当てることができ、例えばレンダリングの遅延を防止することができる。
【０１０３】
＜その他の実施形態＞
コア数は８コア、１６コア、３２コアのケース等について説明したが勿論ＣＰＵのコア数に制限があるわけではない。想定されるコアのパターンとしては６コア、１２コア、２４コアのケース等でも同様に適用することが出来る。コア数が増えた場合は、中間データ処理部に要する時間は短縮されることが想定される。また、コア数を割り当てるパタンーンは、本実施例中は均等数を割り当てたが状況に応じて不均等としても良い。また固定的な数字ではなく、システムの状態を判断して動的に変更されるよう構成し、更に効率を高くする工夫がなされても良い。
【０１０４】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１０５】
３００...ＰＤＬインタープリタ、３０１...中間データ生成処理部、３１１...データ受け取り部、２１１〜２１３...エッジ抽出処理部、３１３...データ合成部、８０１...データ分析部、８０２...ヘビーデータ検出部、８０３...１コア処理用モジュール、８０４...処理系選択部、８０５...４コア処理用モジュール、８０６...８コア処理用モジュール、８１０...システム情報、１６１１１...負荷レベル検出部、１６０１２...負荷処理制御部
【図１】
2016001469.tif 000003
【図２】
2016001469.tif 000004
【図３】
2016001469.tif 000005
【図４】
2016001469.tif 000006
【図５】
2016001469.tif 000007
【図６】
2016001469.tif 000008
【図７】
2016001469.tif 000009
【図８】
2016001469.tif 000010
【図９】
2016001469.tif 000011
【図１０】
2016001469.tif 000012
【図１１】
2016001469.tif 000013
【図１２】
2016001469.tif 000014
【図１３】
2016001469.tif 000015
【図１４】
2016001469.tif 000016
【図１５】
2016001469.tif 000017
【図１６】
2016001469.tif 000018
【図１７】
2016001469.tif 000019
【図１８】
2016001469.tif 000020
【図１９】
2016001469.tif 000021
【図２０】
2016001469.tif 000022
【図２１】
2016001469.tif 000023
【図２２】
2016001469.tif 000024
【図２３】
2016001469.tif 000025
【図２４】
2016001469.tif 000026