(57)【特許請求の範囲】
【請求項１】
印刷手段に供給される印刷データをＰＤＬデータから生成するための複数のプロセッサコアを有する情報処理システムであって、
前記複数のプロセッサコアのうちの一部のプロセッサコアを用いて前記ＰＤＬデータを処理することで中間データを生成し、中間データ保持手段に保持させる第１の処理手段と、
前記複数のプロセッサコアのうちの前記一部のプロセッサコアを除くプロセッサコアを用いて前記中間データ保持手段に保持された中間データを処理することで印刷データを生成し、印刷データ保持手段に保持させる第２の処理手段と、
前記第１の処理手段の用いるプロセッサコアの数を、前記中間データ保持手段に保持される中間データの量に基づいて増減させ、前記第２の処理手段の用いるプロセッサコアの数を、前記印刷データ保持手段に保持される印刷データの量に基づいて増減させる制御手段と、
を有し、
前記制御手段による前記増減によって、前記第１の処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第２の処理手段によっても用いられることが可能であり、前記第２の処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第１の処理手段によっても用いられることが可能であり、
前記制御手段は、前記第２の処理手段に用いられているプロセッサコアが存在している状況において、前記印刷データ保持手段に保持される印刷データの量が所定の閾値以下であることに少なくとも基づいて、前記第２の処理手段の用いるプロセッサコアの数を増やすことを特徴とする情報処理システム。
【請求項２】
前記第１の処理手段に供給する前記ＰＤＬデータを保持するＰＤＬデータ保持手段を有し、
前記制御手段は、
前記ＰＤＬデータ保持手段に保持されるＰＤＬデータの量が第１の閾値より小さい場合、前記第１の処理手段が前記複数のプロセッサコアのうちの全てのプロセッサコアを用いて処理を行うようにすることを特徴とする請求項１の情報処理システム。
【請求項３】
前記制御手段は、前記第２の処理手段の用いるプロセッサコアの数の増減を、前記第１の処理手段の用いるプロセッサコアの数の増減よりも優先して制御することを特徴とする請求項１の情報処理システム。
【請求項４】
処理データを処理するための複数のリソースを制御する情報処理装置であって、
前記複数のリソースのうちの一部のリソースを、ＰＤＬデータを処理することで中間データを生成して前記中間データを第１データ保持手段に保持させる第１の処理手段として機能させ、前記複数のリソースの前記一部のリソースを除くリソースを、前記中間データを処理することで印刷データを生成して前記印刷データを第２データ保持手段に保持させる第２の処理手段として機能させるように、前記複数のリソースの制御を行う制御手段と、
を有し、
前記制御手段は、前記第１データ保持手段に保持される中間データの量に基づいて、前記複数のリソースのうち前記第１の処理手段として機能させる前記一部のリソースの量を増減させ、前記第２データ保持手段に保持される印刷データの量に基づいて、前記複数のリソースのうち前記第２の処理手段として機能させる前記一部のリソースを除くリソースの量を増減させ、
前記制御手段による前記増減によって、前記第１の処理手段として機能させたリソースのうちの少なくとも一部を前記第２の処理手段としても機能させることが可能であり、前記第２の処理手段として機能させたリソースのうちの少なくとも一部を前記第１の処理手段としても機能させることが可能であり、
前記制御手段は、前記第２の処理手段として機能しているリソースが存在している状況において、前記第２保持手段に保持される印刷データの量が第１の閾値以下であることに少なくとも基づいて、前記第２の処理手段として機能させるリソースの量を増やすことを特徴とする情報処理装置。
【請求項５】
前記制御手段は、
前記第１データ保持手段に保持される中間データの量が第２の閾値以下の場合、前記複数のリソースのうち前記第１の処理手段としても前記第２の処理手段としても機能していないリソースを前記第１の処理手段として機能させることで、前記第１の処理手段として機能させるリソースの量を増やし、
前記第２データ保持手段に保持される印刷データの量が前記第１の閾値以下の場合、前記複数のリソースのうち前記第１の処理手段としても前記第２の処理手段としても機能していないリソースを前記第２の処理手段として機能させることで、前記第２の処理手段として機能させるリソースの量を増やすように、前記複数のリソースの制御を行うことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記制御手段は、
前記第１データ保持手段に保持される中間データの量が前記第２の閾値よりも大きい第３の閾値を超える場合、前記第１の処理手段として機能させるリソースの量を減らし、前記第２データ保持手段に保持される印刷データの量が前記第１の閾値よりも大きい第４の閾値を超える場合、前記第２の処理手段として機能させるリソースの量を減らすことを特徴とする請求項５の情報処理装置。
【請求項７】
前記第１の処理手段は、前記ＰＤＬデータを保持する手段から、前記ＰＤＬデータを取得して処理を行い、
前記制御手段は、
前記ＰＤＬデータを保持する前記手段に保持される前記ＰＤＬデータの量が、前記第２の閾値以下である場合、前記第２の閾値をより小さい閾値に更新することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記複数のリソースのそれぞれは、１つ以上のマルチコアプロセッサの有する各プロセッサコアであり、
前記制御手段は、前記プロセッサコアを前記第１の処理手段または前記第２の処理手段として機能させる場合、前記第１の処理手段または前記第２の処理手段による処理の実行単位として、１つの処理スレッドが他の処理スレッドと排他的に前記プロセッサコアを用いて動作するように制御することを特徴とする請求項４に記載の情報処理装置。
【請求項９】
前記制御手段は、前記第２の処理手段として機能させるリソースの量の増減の制御を、前記第１の処理手段として機能させるリソースの量の増減の制御よりも優先して行うことを特徴とする請求項４の情報処理装置。
【請求項１０】
前記制御手段は、
前記複数のリソースのうち前記第１の処理手段としても前記第２の処理手段としても機能していないリソースから、前記第１データ保持手段までのデータ転送距離がより短くなるようなリソースを選択することで定まるリソースを前記第１の処理手段として機能させ、
前記複数のリソースのうち前記第１の処理手段としても前記第２の処理手段としても機能していないリソースから、前記第２データ保持手段までのデータ転送距離がより短くなるようなリソースを選択することで定まるリソースを前記第２の処理手段として機能させるように前記複数のリソースの制御を行うことを特徴とする請求項４に記載の情報処理装置。
【請求項１１】
前記第１の処理手段または前記第２の処理手段の少なくとも何れか１つは、処理対象となるデータに対して、複数のリソースを用いた並列処理を行うことを特徴とする請求項４乃至１０の何れか１項に記載の情報処理装置。
【請求項１２】
前記第１の処理手段または前記第２の処理手段の少なくとも何れか１つは、処理対象となるデータを、描画オブジェクト単位、または、バンド単位、または、タイル単位に分割して、分割された前記処理対象となるデータの処理を行うことを特徴とする請求項４乃至１１の何れか１項に記載の情報処理装置。
【請求項１３】
複数のプロセッサコアを用いて、ＰＤＬデータから印刷データを生成しながら印刷を行う印刷システムにおいて、
前記ＰＤＬデータを処理単位データに分割する分割手段と、
前記処理単位データを保持する第１保持手段と、
前記複数のプロセッサコアの一部のプロセッサコアを用いて、前記処理単位データを解釈し中間データを生成する第１処理手段と、
前記中間データを保持する第２保持手段と、
前記複数のプロセッサコアの前記一部のプロセッサコアを除くプロセッサコアを用いて、前記中間データを解釈し前記印刷データを生成する第２処理手段と、
前記印刷データを保持する第３保持手段と、
前記第３保持手段に保持された前記印刷データの印刷を行う印刷手段と、
前記第２保持手段で保持される前記中間データの量に基づいて、前記第２保持手段で保持される前記中間データの量を、第１の閾値および当該第１の閾値よりも小さい第２の閾値で定まる所定の範囲内とするように前記複数のプロセッサコアのうち前記第１処理手段にも前記第２処理手段にも用いられていないプロセッサコアを前記第１処理手段に用いらせ、前記第３保持手段で保持される前記印刷データの量に基づいて、前記第３保持手段で保持される前記印刷データの量を第３の閾値および当該第３の閾値よりも小さい第４の閾値で定まる所定の範囲内とするように前記複数のプロセッサコアのうち前記第１処理手段にも前記第２処理手段にも用いられていないプロセッサコアを前記第２処理手段に用いらせる制御手段と、
を有し、
前記制御手段による前記増減によって、前記第１処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第２処理手段によっても用いられることが可能であり、前記第２処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第１処理手段によっても用いられることが可能であり、
前記制御手段は、前記第２の処理手段に用いられているプロセッサコアが存在している状況において、前記第３保持手段で保持される前記印刷データの量が前記第４の閾値以下であることに少なくとも基づいて、前記複数のプロセッサコアのうち前記第１処理手段にも前記第２処理手段にも用いられていないプロセッサコアを前記第２処理手段に用いらせることで、前記第２処理手段に用いられるプロセッサコアの数を増やすことを特徴とする印刷システム。
【請求項１４】
前記第１処理手段は、処理対象となるデータに対して、複数のプロセッサコアを用いた並列処理を行うことを特徴とする請求項１３に記載の印刷システム。
【請求項１５】
前記分割手段は、
前記ＰＤＬデータを、描画オブジェクト単位に分割することで前記処理単位データを得ることを特徴とする請求項１３または１４に記載の印刷システム。
【請求項１６】
前記第２処理手段は、
処理対象となるデータを、バンド単位、または、タイル単位に分割して、分割された前記処理対象となるデータの処理を行うことを特徴とする請求項１５に記載の印刷システム。
【請求項１７】
印刷手段に供給される印刷データをＰＤＬデータから生成するための複数のプロセッサコアを有する情報処理システムの実行する情報処理方法であって、
前記複数のプロセッサコアのうちの一部のプロセッサコアを用いて前記ＰＤＬデータを処理することで中間データを生成し、中間データ保持手段に保持させる第１の処理工程と、
前記複数のプロセッサコアのうちの前記一部のプロセッサコアを除くプロセッサコアを用いて前記中間データ保持手段に保持された中間データを処理することで印刷データを生成し、印刷データ保持手段に保持させる第２の処理工程と、
前記第１の処理工程で用いられるプロセッサコアの数を、前記中間データ保持手段に保持される中間データの量に基づいて増減させ、前記第２の処理工程で用いられるプロセッサコアの数を、前記印刷データ保持手段に保持される印刷データの量に基づいて増減させる制御工程と、
を有し、
前記制御工程による前記増減によって、前記第１の処理工程によって用いられたプロセッサコアのうちの少なくとも一部は、前記第２の処理工程によっても用いられることが可能であり、前記第２の処理工程によって用いられたプロセッサコアのうちの少なくとも一部は、前記第１の処理工程によっても用いられることが可能であり、
前記制御工程は、前記第２の処理工程で用いられているプロセッサコアが存在している状況において、前記印刷データ保持手段に保持される印刷データの量が所定の閾値以下であることに基づいて、前記第２の処理工程で用いられるプロセッサコアの数を増やすことを特徴とする情報処理方法。
【請求項１８】
処理データを処理するための複数のリソースを制御する情報処理方法であって、
前記複数のリソースのうちの一部のリソースを、ＰＤＬデータを処理することで中間データを生成して前記中間データを第１データ保持手段に保持させる第１の処理手段として機能させ、前記複数のリソースの前記一部のリソースを除くリソースを、前記中間データを処理することで印刷データを生成して前記印刷データを第２データ保持手段に保持させる第２の処理手段として機能させるように、前記複数のリソースの制御を行う制御工程、
を有し、
前記制御工程は、前記第１データ保持手段に保持される中間データの量に基づいて、前記複数のリソースのうち前記第１の処理手段として機能させる前記一部のリソースの量を増減させ、前記第２データ保持手段に保持される印刷データの量に基づいて、前記複数のリソースのうち前記第２の処理手段として機能させる前記一部のリソースを除くリソースの量を増減させ、
前記制御工程による前記増減によって、前記第１の処理手段として機能させたリソースのうちの少なくとも一部を前記第２の処理手段としても機能させることが可能であり、前記第２の処理手段として機能させたリソースのうちの少なくとも一部を前記第１の処理手段としても機能させることが可能であり、
前記制御工程は、前記第２の処理手段として機能しているリソースが存在している状況において、前記第２保持手段に保持される印刷データの量が所定の閾値以下であることに少なくとも基づいて、前記第２の処理手段として機能させるリソースの量を増やすことを特徴とする情報処理方法。
【請求項１９】
複数のプロセッサコアを用いて、ＰＤＬデータから印刷データを生成しながら印刷を行う印刷システムの実行する印刷方法であって、
前記ＰＤＬデータを処理単位データに分割して第１保持手段に保持させる分割工程と、前記複数のプロセッサコアの一部のプロセッサコアを用いて、前記処理単位データを解釈し中間データを生成し、第２保持手段に保持させる第１処理工程と、
前記複数のプロセッサコアの前記一部のプロセッサコアを除くプロセッサコアを用いて、前記中間データを解釈し前記印刷データを生成し、第３保持手段に保持させる第２処理工程と、
前記第３保持手段に保持された印刷データの印刷を行う印刷工程と、
前記第２保持手段で保持された前記中間データの量に基づいて、前記第２保持手段で保持された前記中間データの量を、第１の閾値および当該第１の閾値よりも小さい第２の閾値で定まる所定の範囲内とするように前記複数のプロセッサコアのうち前記第１処理工程にも前記第２処理工程にも用いられていないプロセッサコアを前記第１処理工程で用いらせ、前記第３保持手段で保持される前記印刷データの量に基づいて、前記第３保持手段で保持される前記印刷データの量を第３の閾値および当該第３の閾値よりも小さい第４の閾値で定まる所定の範囲内とするように前記複数のプロセッサコアのうち前記第１処理工程にも前記第２処理工程にも用いられていないプロセッサコアを前記第２処理工程で用いらせる制御工程と、
を有し、
前記制御工程による前記増減によって、前記第１処理工程で用いられたプロセッサコアのうちの少なくとも一部は、前記第２処理工程でも用いられることが可能であり、前記第２処理工程で用いられたプロセッサコアのうちの少なくとも一部は、前記第１処理工程でも用いられることが可能であり、
前記制御工程は、前記第２処理工程で用いられているプロセッサコアが存在している状況において、前記第３保持手段で保持される前記印刷データの量が前記第４の閾値以下であることに少なくとも基づいて、前記複数のプロセッサコアのうち前記第１処理工程にも前記第２処理工程にも用いられていないプロセッサコアを前記第２処理工程で用いらせることで、前記第２処理工程で用いられるプロセッサコアの数を増やすことを特徴とする印刷方法。
【請求項２０】
１つ以上のコンピュータに請求項１８に記載された情報処理方法を実行させるためのプログラム。
【請求項２１】
１つ以上のコンピュータに請求項１９に記載された情報処理方法を実行させるためのプログラム。
【請求項２２】
１つ以上のコンピュータに請求項２０に記載された印刷方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理リソースを管理する情報処理装置、情報処理方法、プログラムに関する。
【背景技術】
【０００２】
従来、一方の処理部による処理済みデータに対して他方の処理部が処理を実行する、パイプライン構造の印刷システムが存在する。
特許文献１は、複数のＣＰＵコアを用いて中間データ生成部および描画部を起動して、中間データ生成部がＰＤＬデータから中間データを生成し、生成された中間データを描画部が描画して出力する印刷システムを開示する。この印刷システムは、生成された中間データを一時的に保持（スプール）し、スプールされた中間データの量が十分にある場合に描画部による描画処理を行う。そしてこの印刷システムは、描画処理後の画像データを印刷装置によって印刷する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１６７８５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の開示する印刷システムでは、描画部による描画処理の実行は、スプールされた中間データの量に基づいて制御され、描画処理後の画像データの過多に基づいて制御されてはいない。そのため、特許文献１の開示する印刷システムにおいて例えば複数枚数の連続印刷を行う場合、描画処理が遅延すると、印刷装置への描画処理後の画像データの供給が遅延する。その結果、印刷が行われないロスタイムが生じる。
【課題を解決するための手段】
【０００５】
本発明の情報処理システムは、印刷手段に供給される印刷データをＰＤＬデータから生成するための複数のプロセッサコアを有する情報処理システムであって、前記複数のプロセッサコアのうちの一部のプロセッサコアを用いて前記ＰＤＬデータを処理することで中間データを生成し、中間データ保持手段に保持させる第１の処理手段と、前記複数のプロセッサコアのうちの前記一部のプロセッサコアを除くプロセッサコアを用いて前記中間データ保持手段に保持された中間データを処理することで印刷データを生成し、印刷データ保持手段に保持させる第２の処理手段と、前記第１の処理手段の用いるプロセッサコアの数を、前記中間データ保持手段に保持される中間データの量に基づいて増減させ、前記第２の処理手段の用いるプロセッサコアの数を、前記印刷データ保持手段に保持される印刷データの量に基づいて増減させる制御手段と、を有し、前記制御手段による前記増減によって、前記第１の処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第２の処理手段によっても用いられることが可能であり、前記第２の処理手段によって用いられたプロセッサコアのうちの少なくとも一部は、前記第１の処理手段によっても用いられることが可能であり、前記制御手段は、前記第２の処理手段に用いられているプロセッサコアが存在している状況において、前記印刷データ保持手段に保持される印刷データの量が所定の閾値以下であることに基づいて、前記第２の処理手段の用いるプロセッサコアの数を増やすことを特徴とする。
【発明の効果】
【０００６】
本発明は、処理手段による処理済みデータを保持する保持手段を設けることで、処理手段の処理時間のばらつきによる影響を吸収することができる。また、この保持手段に保持されているデータ量に基づいて処理手段へ割り当てるコア数（リソース量）を制御することで、処理手段の処理速度を調整して安定した保持手段へのデータ供給を行うことができる。その結果、処理済みデータをさらに処理する後段の手段が前段からのデータ出力を待つために生じるロスタイムを削減することができる。
【図面の簡単な説明】
【０００７】
【図１】実施例１の印刷システムのハードウェアの構成図
【図２】実施例１の印刷システムのブロック図
【図３】実施例１の印刷システムの動作状態を表す図
【図４】実施例１の印刷システムの動作状態の遷移を表す図
【図５】実施例１の保持プロセスに蓄積されているページ数、閾値、動作タイミングの関係を示す図
【図６】実施例１の印刷システムが実行する処理全体のフローチャート
【図７】処理開始の判定処理のフローチャート
【図８】読込プロセスの処理速度の変更処理のフローチャート
【図９】閾値の更新処理のフローチャート
【図１０】第Ｎ処理プロセスの処理速度の変更処理のフローチャート
【図１１】印刷システムの保持プロセスに保持されるデータのページ数を取得する方式を示すブロック図
【図１２】処理単位データのデータ粒度の一例を示す図
【図１３】実施例２の印刷システムが動作するブレードサーバの構成図の一例を示す図
【発明を実施するための形態】
【０００８】
（実施例１）
本実施例の情報処理システムは、読み込まれたＰＤＬ（Ｐａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）データから印刷装置が印刷できるデータフォーマットである印刷データへの変換処理を行いながら、同時に印刷を行う印刷システムである。はじめにデータ変換処理の処理速度と印刷速度の関係を説明する。
【０００９】
高速印刷機の内部では一定速度で高速に紙送りがされているため、それに伴って印刷データを遅延なく供給する必要がある。一方でＰＤＬデータ投入から速やかに印刷を開始することで印刷完了までの時間を短縮することが望まれる。
【００１０】
印刷機の印刷速度が一定なのに対し、データ変換処理の速度は与えられるジョブに含まれるＰＤＬデータの内容によって変動しやすい。ＰＤＬデータは、複数の描画命令や画像の組み合わせで構成されており、それらの数や複雑さによって必要な処理時間が異なってくる。ここで印刷されるべき時点で印刷データの変換処理が完了できなかった場合は、例えば印刷中のロスタイムが生じる等、生産性が低下する。これを防ぐためには、印刷機の速度以上のデータ変換処理の速度が要求される。
【００１１】
また、並列処理を行う場合は処理単位データごとの処理時間が異なると、処理を開始した時のデータの順序と処理を終了した時のデータの順序が一致するとは限らない。例えばＮページ目、Ｎ＋１ページ目の順序でデータ変換処理すると、Ｎ＋１ページ目、Ｎページ目の順序で印刷データが生成される場合がある。印刷データの生成された順序で印刷を行うと印刷順序の逆転が発生するため、保持部に一定量の印刷データを蓄積し、順序の若いデータから出力することで印刷順序の逆転を防いでいる。保持部に一定量の印刷データを蓄積することには、データ変換処理の速度が変動したときの影響を吸収する働きもある。
【００１２】
保持部に一定量のデータを蓄積するためには、保持部の印刷データの入出力量が影響するので、システム全体での処理速度の調整が必要になる。その処理速度の調整の手段として、後述の並列して動作する第１処理部と第２処理部の動作する数を増減させている。
【００１３】
以下、図面を参照して本発明を実施するための形態について説明する。
【００１４】
本実施例のＰＤＬデータから印刷データに変換しながら印刷する印刷システムは、例えば図１のようにコンピュータ１００、１１０で構成される。コンピュータ１００は、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、１０３と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０５と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１０６と、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）１０７とを備える。これらは、システムバス１０８を介して互いに通信可能に接続された構成としている。ＣＰＵ１０１、１０３は、ＲＡＭ１０５またはＨＤＤ１０６に記憶されたプログラムを実行することで、システムバス１０８に接続された各構成部を総括的に制御する。すなわち、ＣＰＵ１０１、１０３は、前述したような動作を行うための処理プログラムを、ＨＤＤ１０６から読み出して実行することで、本実施形態での動作を実現するための制御を行う。ＲＡＭ１０５は、ＣＰＵ１０１、１０３の主メモリまたはワークエリア等として機能する。ＮＩＣ１０７と１１７は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１２１を介して互いに通信可能に接続された構成としており、不図示のホストコンピュータからＰＤＬデータを受信する。コンピュータ１１０も、コンピュータ１００と同様の構成と動作である。
【００１５】
ここで、本実施例のＣＰＵ１０１は複数のプロセッサコア１０２を持っているマルチコアプロセッサであり、処理プログラムを実行することで実現される各プロセス（動作中のプログラムの実行単位）を動作させる。ＣＰＵ１０３、１１１、１１３も同様である。更に、プロセスの動作は１つ以上のスレッド（プロセス中の処理の実行単位）が動作することで構成されている。なお、各プロセスは処理手段と言い換えることができる。例えば制御プロセス２１０は制御手段と言い換えることができる。同様に読込プロセス、第１処理プロセス２０３、第２処理プロセス２０６は、読込手段、第１処理手段、第２処理手段と言い換えることができる。また同様に第１保持プロセス、第２保持プロセス、第３保持プロセスは、第１保持手段、第２保持手段、第３保持手段と言い換えることができる。また、プロセッサコアのことを以下では単にコアあるいはリソースと呼ぶ。また、以下、図３を用いて行う説明からもわかるように、コンピュータ１００および１１０の有するＣＰＵ１０１、１０３、１１１、１１３の備える複数のプロセッサコアは、ＣＰＵ順に通し番号（１〜２０）が振られることでそれぞれ識別される。通し番号の振り分けの一例として、本実施例では、ＣＰＵ１０１の備えるプロセッサコア、ＣＰＵ１０３の備えるプロセッサコア、ＣＰＵ１１１の備えるプロセッサコア、ＣＰＵ１１３の備えるプロセッサコアの順番で通し番号が割り振られる。
【００１６】
スレッドは、複数あるコアの内１つを使用して処理を行う。複数のプロセスが同時に異なる処理を行うこと、および複数のスレッドが同時に異なる処理を行うことを並列処理と呼ぶ。スレッドのコア割り当て、つまりスレッドがどのコアを使用して処理を行うかの決定は、通常はＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が管理し、コンピュータ内での他のプロセスやスレッドによるコアの使用状況により自動的に行われる。
【００１７】
ＯＳによる管理ではスレッドと使用するコアの対応が多対１となることがある。このとき、複数のスレッドを１つのコア上で動作させるために、動作しているスレッドのメモリ領域とキャッシュを他のメモリ領域に退避させ、以前に退避したスレッドのメモリ領域とキャッシュを元のメモリ領域とキャッシュに復帰させる動作を繰り返し行う。つまり、複数のスレッドの処理を時間軸で分割し短時間に切り替える事で、並行処理（疑似的な並列処理）を行う事になる。
【００１８】
それに対し、処理プログラムの管理で、スレッドと使用するコアの対応が１対１となる並列処理の場合は、複数のスレッドが１つのコア上で動作する並行処理と違い、メモリ領域とキャッシュの退避と復帰の動作が必要無くなるため、処理効率が良い。
【００１９】
制御プロセス２１０による管理によって、１つのスレッドに対して明示的に１つのアフィニティマスク（動作中のスレッドとそのスレッドの処理において使用されるコアとの対応関係表）が設定される。これにより、スレッドが使用できるコアをアフィニティマスクで指定した１つ以上のコアだけに限定できる。本実施例ではアフィニティマスクによって使用できるコアをただ１つに設定することで、スレッドと使用するコアを１対１に対応付けることができる。つまり、複数動作するスレッドに対してそれぞれのアフィニティマスクが設定されることによって、スレッドの使用するコア同士が重複しないように制御される。
【００２０】
本実施例では、「スレッドにコアを割り当てること」を、「１つのスレッドが特定の１コアを使用して動作し、かつ、他スレッドが当該１コアを使用して動作しないように、制御プロセス２１０がアフィニティマスクを設定すること」と定義する。また、各プロセスにコアを割り当てることを、当該プロセスに含まれる１つ以上のスレッドに当該コアを割り当てることと定義する。プロセスに割り当てるコア数と当該プロセスに含まれるスレッド数は同じである。例えば、プロセスに２コアが割り当てられる場合、そのプロセス内部では２つのスレッドが動作し、２つのスレッドにはそれぞれのアフィニティマスクによって、２つのコアが１コアずつ重複せずに割り当てられる。
【００２１】
図２に、パイプライン構造で動作する印刷システムのシステムブロック図を示す。本実施例の印刷システムは、ＣＰＵ１０１、１０３がＨＤＤ１０６に記憶される処理プログラムを実行することで実現され、次の各プロセス（各処理部）を有する。読込プロセス２０１（読込部）２０１、第１保持プロセス２０２（第１保持部）２０２、第１処理プロセス２０３（第１処理部）２０３、第２保持プロセス２０５（第２保持部）２０５、第２処理プロセス（第２処理部）２０６、第３保持プロセス２０８（第３保持部）２０８である。に第３保持プロセス２０８は印刷部２０９と通信する。なお本実施例では、第１保持プロセスおよび第２保持プロセスは、ＨＤＤ１０６を用いてコンピュータ１００内で動作し、第３保持プロセスは、ＨＤＤ１１６を用いてコンピュータ１１０内で動作するものとするが、動作する場所はこれに限定されない。
【００２２】
読込プロセス２０１はＮＩＣ１０７を通じて受信したＰＤＬデータを読み込み、ページ単位のＰＤＬデータなどの処理単位データに分割する。そして読込プロセス２０１は、第１保持プロセス２０２へ処理単位データを送信する。この第１保持プロセス２０２は、後段の第１処理プロセス２０３へ供給される処理単位データを保持する処理単位データ保持手段として機能する。処理単位データが分割されたＰＤＬデータであった場合、処理谷データ保持手段は、ＰＤＬデータ保持手段とも呼ばれる。
【００２３】
第１処理プロセス２０３は第１保持プロセス２０２に保持された処理単位データを読み込み、内部の処理スレッド２０４によって、処理単位データ中のレンダリング単位（例えばオブジェクト）ごとの情報がまとめられたディスプレイリストなどの中間データに変換処理を行う。そして第１処理プロセス２０３は、第２保持プロセス２０５へ中間データを送信する。この第２保持プロセス２０５は、中間データを保持するため、中間データ保持手段として機能する。
【００２４】
第２処理プロセス２０６は、第２保持プロセス２０５に保持された中間データを読み込み、内部の処理スレッド２０７によって、中間データを、印刷部２０９が処理できるデータフォーマットであるビットマップデータなどの印刷データへの変換処理（レンダリング）を行う。そして第２処理プロセス２０６は、第３保持プロセス２０８へ印刷データを送信する。この第３保持プロセス２０８は、印刷データを保持するため、印刷データ保持手段として機能する。
【００２５】
印刷部２０９は第３保持プロセス２０８に保持された印刷データを読み込み、一定速度で印刷を行う。なお、印刷部２０９は印刷手段と呼ぶこともある。
【００２６】
制御プロセス２１０はコンピュータ１００、１１０に搭載されている複数のプロセッサコア（コア群２１１）による処理状況を監視する。また、制御プロセス２１０は、第１保持プロセス２０２、第２保持プロセス２０５、第３保持プロセス２０８のメモリの使用状況を監視する。また制御プロセス２１０は、読込プロセス２０１、第１処理プロセス２０３、第２処理プロセス２０６、印刷部２０９の動作状況を監視する。更に制御プロセス２１０は、図を用いて後述するように、メモリの使用状況とコア群２１１による処理状況に基づいて、第１処理プロセス２０３と第２処理プロセス２０６へコア群２１１の一部のコアを割り当てる。この割り当ては、第１処理プロセス２０３に割り当てられるコアは第２処理プロセス２０６には割り当てられず、第２処理プロセス２０６に割り当てられるコアは第１処理プロセス２０３には割り当てられないような、排他的なコアの割り当てである。つまり第２処理プロセス２０６へ割り当てられるコアは、第１処理プロセス２０３に割り当てられる、コア群２１１の一部のコアを除くコアである。
【００２７】
以下、第１処理プロセス２０３、第２処理プロセス２０６を総称して処理プロセスと呼び、第１保持プロセス２０２、第２保持プロセス２０５、第３保持プロセス２０８を総称して保持プロセスと呼ぶ。
【００２８】
なお、第１保持プロセス２０２に保持される処理単位データのことを、第１の処理データと呼ぶことがある。また、第２保持プロセス２０５に保持される中間データのことを、第２の処理データと呼ぶことがあり、この第２保持プロセス２０５のことを、第１データ保持手段と呼ぶことがある。また、第３保持プロセス２０８に保持される印刷データのことを、第３の処理データと呼ぶことがあり、第３保持プロセス２０８のことを、第２データ保持手段と呼ぶことがある。
【００２９】
また、第１処理プロセス２０３のことを、第１の処理データを処理することで第２の処理データを生成する第１の処理手段と呼ぶことがある。また、第２処理プロセス２０６のことを、第２の処理データを処理することで第３の処理データを生成する第２の処理手段と呼ぶことがある。
【００３０】
以下に述べる閾値Ｔ１ａ、Ｔ１ｂ、Ｔ２ａ、Ｔ２ｂ、Ｔ２ｃ、Ｔ３ａ、Ｔ３ｂ、Ｔ３ｃは、印刷部２０９への印刷データ供給が滞ることが無いように設定された値とする。
【００３１】
以下では、処理単位データがＰＤＬデータをページ単位に分割された場合について図３を用いて説明する。図３は、印刷システムの動作状態を表す。
【００３２】
初期動作状態Ａ、初期動作状態Ｂ、初期動作状態Ｃは、ジョブが投入され印刷部２０９が印刷を開始するまでの状態遷移を表している。
【００３３】
通常動作状態Ｄは、ＰＤＬデータをＨＤＤ１０６等から読み出しながら印刷部２０９が印刷を行っている「ＲＩＰ  ｗｈｉｌｅ  Ｐｒｉｎｔ」が実現されている状態を表している。
【００３４】
終了動作状態Ｅ、終了動作状態Ｆ、終了動作状態Ｇは、ＰＤＬデータの読み出しが終了し、処理プロセスで処理しているまたは保持プロセスで蓄積しているデータを順次印刷している状態遷移を表している。
【００３５】
例外動作状態Ｈ、例外動作状態Ｉ、例外動作状態Ｊは、印刷部２０９が印刷を開始する前にＰＤＬデータの読み出しが終了した状態遷移を表している。
【００３６】
ここで、通常動作状態Ｄの図を例に取って図面の説明をする。
【００３７】
第１保持プロセス２０２、第２保持プロセス２０５、第３保持プロセス２０８と記載されている部分の上の数字は、その保持プロセスに蓄積されているページ数を表し、更にその上の棒グラフ（黒塗り部分）はそのページ数を表している。棒グラフに重ねられている矢印は、ページ数の増減を表しており、上向き矢印は増加中、下向き矢印は減少中、両向き矢印は一定の範囲内で変動していることを意味する。印刷済みページと記載されている部分も、保持プロセスと記載されている部分と同様の意味である。つまり、図３の通常動作状態Ｄの図は、第１保持プロセス２０２に保持されている処理単位データのページ数は２５０ページであることを示す。同様に、第２保持プロセス２０５および第３保持プロセス２０８それぞれが保持するデータのページ数と印刷済みのページ数は、２５０ページ、２８５ページ、１５０ページであることが表されている。また図３の通常動作状態Ｄの図は、第１処理プロセス２０３に保持されるページ数が一定の範囲で変動していることを表す。同様に、第２処理プロセスおよび第３処理プロセスに保持されるページ数がそれぞれ一定の範囲で変動していることを示している。印刷済みのページ数は増加中である。
【００３８】
第１処理プロセス２０３、第２処理プロセスと記載されている部分の上の数字は、その処理プロセスに割り当てられているコアの数（印刷システム上で動く全ての各処理プロセスの内部のスレッド数の合計）を表している。更にその上の２０個の矩形は各プロセスに割り当てられるコア（この例では最大２０コア）の動作状況を１矩形１コアで表したものである。これら矩形で表されたコアは、第１処理プロセス２０３および第２処理プロセス間で共有される。つまり、あるときは第１処理プロセス２０３に割り当てられていたコアが、別のときは第２処理プロセスに割り当てられる。なお、黒く塗りつぶされた矩形は各処理プロセスに割り当てられているコアを、白い矩形は処理プロセスに割り当てられていない未使用のコアを表す。なお未使用コアとは、第１処理プロセス２０３としても第２処理プロセス２０６としても機能していないコアである。
【００３９】
また全てのコアはそれぞれが識別可能である。説明の便宜上、例えば、図３に示されるように、全てのコアに通し番号（１〜２０）を割り振ったとする。すると、図３の通常動作状態Ｄの図は、番号１〜６、７に対応するコアが第１処理プロセス２０３に割り当てられており、番号１０〜１２、１４、１５、１７〜２０に対応するコアが第２処理プロセスに割り当てられていることを表している。なおこのような、各プロセスへのコアの割り当てが制御できるのは、制御プロセス２１０が、処理プロセス１つに対しアフィニティマスク１つを設定し、全ての処理プロセスへのコア割り当ての状況を管理しているためである。したがって制御プロセス２１０は、未割り当て（未使用）のコアを常に把握できる。
【００４０】
なお本実施例では、制御プロセス２１０は、未割り当てのコアのうち、第１処理プロセス２０３には通し番号が小さい方から対応するコアを選択して割り当て、第２処理プロセスには通し番号が大きい方から対応するコアを選択して割り当てる。また、本実施例の第１保持プロセスおよび第２保持プロセス２０５は、通し番号が小さいコアを持つコンピュータに、第３保持プロセス２０８を通し番号が大きいコアを持つコンピュータに配置する。本実施例では、通し番号１〜１０のコアがコンピュータ１００の有するプロセッサコア、通し番号１１〜２０のコアがコンピュータ１１０の有するプロセッサコアであるとする。
【００４１】
このコアの割り当て方法について説明する。処理プロセスにコアが割り当てられるということは、処理プロセスが動作するコンピュータ（例えばコンピュータ１００）が特定されるということである。例えば処理プロセスが、保持プロセスが動作しているコンピュータと同一のコンピュータ（例えばコンピュータ１００）内で動作する場合、処理プロセスと保持プロセスの間のデータ転送にはシステムバス１０８のみが使用される。一方、処理プロセスが、保持プロセスが動作しているコンピュータと異なるコンピュータ（例えばコンピュータ１１０）内で動作する場合、処理プロセスと保持プロセスの間のデータ転送には、システムバス１０８、ＬＡＮ１２１、システムバス１１８が使用される。
【００４２】
例えば本実施例のように、各保持プロセスの動作場所を、図２に示すパイプライン構造に従ったものにすることで、各処理プロセスとそのデータ転送先の保持プロセスとの間のデータ転送距離を短くすることができる。すなわち、第１保持プロセス２０２と第１処理プロセス２０３と第２保持プロセス２０５とを同一コンピュータ１００内で動作させ、第２処理プロセス２０６と第３保持プロセス２０８を同一コンピュータ１１０内で動作させることができる。なお前述したように、コンピュータ１００の有するコアの通し番号は、コンピュータ１１０の有するコアの通し番号より小さい。したがって、前述の制御プロセス２１０による各処理プロセスへのコア割り当ての結果、システムバス１０９と比べて通信速度の遅いＬＡＮ１２１を用いてデータ転送する回数を減らし、通信スループットの向上が見込める。この方法は、転送するデータサイズが大きく、ＬＡＮの通信帯域の不足が想定される時に有効である。
【００４３】
上記説明した制御プロセス２１０の未割り当てのコアの割り当て方は、未割り当てコアの割り当て先が第１処理プロセス２０３であるか、第２処理プロセス２０６であるかという被利用属性に応じて決まる。
【００４４】
一方で、第１処理部と第２処理部を区別せずに使用するコアを分散させた場合は、コアからのメモリアクセス等のシステムバス１０９の通信負荷が分散するため、処理プロセスの処理速度の向上が見込める。この方法は、コア数やＬＡＮの通信帯域等のハードウェアリソースに余裕がある時に有効である。
【００４５】
次に、図４と図５でシステムの動作状態とプロセッサコアの割り当ての概略を説明する。
まず、図４に印刷システムの動作状態を表す状態遷移図を示し、実際の処理動作の例を元にシステムの状態を順に説明する。
【００４６】
待機状態（Ｓ４０１）の印刷システムに印刷指示を行うためのジョブが投入されると、印刷システムは初期動作状態Ａ（Ｓ４０２）に移行する。初期動作状態Ａでは、読込プロセス２０１がＰＤＬデータの読み込みと分割処理を開始し、生成された処理単位データが第１保持プロセス２０２に蓄積される。初期動作状態Ａにて第１保持プロセス２０２のページ数Ｐ１が閾値Ｔ１ｂ以上になったとき、システムは初期動作状態Ｂ（Ｓ４０３）へ移行する。初期動作状態Ｂでは、第１処理プロセス２０３がコア群２１１のすべてのコアを使用して動作を開始し、生成された中間データが第２保持プロセス２０５に蓄積される。初期動作状態Ｂにて第２保持プロセス２０５のページ数Ｐ２が閾値Ｔ２ｂ以上になったとき、システムは初期動作状態Ｃ（Ｓ４０４）へ移行する。初期動作状態Ｃでは、第２処理プロセスが動作を開始し、生成された印刷データが第３保持プロセス２０８に蓄積される。初期動作状態Ｃにて第３保持プロセス２０８のページ数Ｐ３が閾値Ｔ３ｂ以上になったとき、システムは通常動作状態Ｄ（Ｓ４０５）へ移行する。
【００４７】
通常動作状態Ｄでは、印刷部２０９が動作を開始し、「ＲＩＰ  ｗｈｉｌｅ  Ｐｒｉｎｔ」による印刷が行われる。通常動作状態Ｄにて読込プロセス２０１が全ＰＤＬデータの読み込みと分割が終了したとき、読込プロセス２０１は停止し、システムは終了動作状態Ｅ（Ｓ４１５）へ移行する。
【００４８】
終了動作状態Ｅでは、第１保持プロセス２０２への処理単位データの流入が無くなり、第１処理プロセス２０３と第２処理プロセスと印刷部２０９だけの動作となる。終了動作状態Ｅにて第１保持プロセス２０２が蓄積するページ数がゼロになったとき、全ての第１処理プロセス２０３は待機状態になり、終了動作状態Ｆ（Ｓ４２５）へ移行する。終了動作状態Ｆでは、第２保持プロセス２０５への中間データの流入が無くなり、第２処理プロセスと印刷部２０９だけの動作となる。終了動作状態Ｆにて第２保持プロセス２０５が蓄積するページ数がゼロになったとき、全ての第２処理プロセスは待機状態になり、終了動作状態Ｇ（Ｓ４３５）へ移行する。終了動作状態Ｇでは、第３保持プロセス２０８への印刷データの流入が無くなり、印刷部２０９だけの動作となる。終了動作状態Ｇにて第３保持プロセス２０８が蓄積するページ数がゼロになったとき、全てのページの印刷が完了してジョブが完了したことになり、待機状態（Ｓ４０１）へ移行する。
【００４９】
また、例外動作状態は、通常動作状態Ｄ（Ｓ４０５）を経ない動作状態であり、「ＲＩＰ  ｗｈｉｌｅ  Ｐｒｉｎｔ」による印刷は行われていない。つまり全ページのＰＤＬデータが読み込まれて分割処理が行われた後に、印刷部２０９による印刷が開始される。印刷ジョブとして入力されたＰＤＬデータのページ数に対し保持プロセスの閾値が大きいとき、または入力されたＰＤＬデータのページ数が少ないときに生じやすい。初期動作状態Ａ（Ｓ４０２）または初期動作状態Ｂ（Ｓ４０３）にて読込プロセス２０１が停止したとき、例外動作状態Ｈ（Ｓ４１３）へ移行する。
【００５０】
例外動作状態Ｈでは、第１処理プロセス２０３だけの動作となる。初期動作状態Ｃ（Ｓ４０４）にて読込プロセス２０１が停止、または例外動作状態Ｈ（Ｓ４１３）にて第２保持プロセス２０５のページ数Ｐ２が閾値Ｔ２ｂ以上になったとき、例外動作状態Ｉ（Ｓ４１４）へ移行する。例外動作状態Ｉでは、第１処理プロセス２０３と第２処理プロセスだけの動作となる。例外動作状態Ｉにて第３保持プロセス２０８のページ数Ｐ３が閾値Ｔ３ｂ以上になったとき、終了動作状態Ｅ（Ｓ４１５）に移行する。例外動作状態Ｈ（Ｓ４１３）または例外動作状態Ｉ（Ｓ４１４）にて第１保持プロセス２０２が蓄積するページ数が無くなったとき、全ての第１処理プロセス２０３は待機状態になり、例外動作状態Ｊ（Ｓ４２４）へ移行する。例外動作状態Ｊでは、第２処理プロセスだけの動作となる。例外動作状態Ｊにて第３保持プロセス２０８のページ数Ｐ３が閾値Ｔ３ｂ以上になったとき、終了動作状態Ｆ（Ｓ４２５）に移行する。例外動作状態Ｊにて第２保持プロセス２０５が蓄積するページ数が無くなったとき、全ての第２処理プロセスは待機状態になり、終了動作状態Ｇ（Ｓ４３５）へ移行する。
【００５１】
次に、本実施例の制御プロセス２１０によるコア配分の概略について、図５の保持プロセスに蓄積されているページ数、閾値、動作タイミングの関係を示す図を用いて説明する。
【００５２】
制御プロセス２１０は、保持プロセスの状態が変化する、第１処理プロセス２０３または第２処理プロセスの処理終了のタイミングで、第１処理プロセス２０３および第２処理プロセスに割り当てるコアの数を調整する。
【００５３】
制御プロセス２１０はＰＤＬデータを含む印刷ジョブを受信すると、はじめに読込プロセス２０１へ、ＰＤＬデータの読み込みと処理単位データへ分割する処理の開始を指示する（初期動作状態Ａ）。すると、読込プロセス２０１が生成する処理単位データが第１保持プロセス２０２へと蓄積されていくので、制御プロセス２１０は読込プロセス２０１の処理完了報告を受けたときに各保持プロセスに蓄積されているページ数を確認する。このページ数が閾値以上になったときに、処理プロセスや印刷部２０９の処理開始の指示と、読込プロセス２０１の処理速度の調整を行う。第１保持プロセス２０２が持つ閾値は、大きいほうからＴ１ａ、Ｔ１ｂであり、蓄積するページ数がＴ１ａとＴ１ｂの間にあれば十分なページの蓄積が行われ、かつデータの入出力の速度が安定していることを意味する。同様に、第２保持プロセス２０５は、Ｔ２ａ、Ｔ２ｂ、Ｔ２ｃ、第３保持プロセス２０８はＴ３ａ、Ｔ３ｂ、Ｔ３ｃの閾値を持つ。制御プロセス２１０は、第１保持プロセス２０２のページ数がＴ１ｂ以上となったときに第１処理プロセス２０３へ処理開始を指示する（初期動作状態Ｂ）。また、第２保持プロセス２０５のページ数がＴ２ｂ以上となったときに第２処理プロセスへ処理開始を指示する（初期動作状態Ｃ）。また、第３保持プロセス２０８のページ数がＴ３ｂ以上となったときに印刷部２０９へ処理開始を指示する（通常動作状態Ｄ）。つまり、システムが動作開始した直後は読込プロセス２０１のみが動作しているが、徐々に第１処理プロセス２０３、第２処理プロセス、印刷部２０９へと処理が伝搬していき、ＰＤＬデータの入力と印刷部２０９への出力が同時に行われることになりＲＩＰ  ｗｈｉｌｅ  Ｐｒｉｎｔが実現される。さらに、第２処理プロセスが動作開始するまでは、第１処理プロセス２０３には２コアずつ最大限割り当てることで高速に処理し、ＰＤＬデータの読み込みを開始してから印刷部２０９が動作開始するまでのスタートアップタイムの短縮を図る。
【００５４】
読込プロセス２０１と制御プロセス２１０は、データフローの前後に存在する保持プロセスの格納するページ数またはデータ量に基づき、制御プロセス２１０によって処理速度が調整される。
【００５５】
読込プロセス２０１は、処理プロセスと比べ短時間で処理が終わるため、第１保持プロセス２０２へのデータ流出に対してデータ流入が大きくなる傾向がある。読込プロセス２０１が単純に処理を続け、第１保持プロセス２０２の蓄積する処理単位データのデータ量（例えば処理単位データのページ数）が際限なく増えると、第１保持プロセス２０２が処理単位データの蓄積に使用するメモリ量も増えてしまう。これを防ぐために制御プロセス２１０は第１保持プロセス２０２のページ数を監視し、ページ数が閾値Ｔ１ａ以上となったときに読込プロセス２０１へ一時停止を指示する。逆にＴ１ａ未満になったら、読込プロセス２０１へ処理再開を指示する。こうすることで、閾値Ｔ１ａを大きく上回るページ数を蓄積してしまうことによる、多量のメモリ使用を防ぐことができる。
【００５６】
第１処理プロセス２０３と第２処理プロセスは、コアの割当てを効率良く行うことで、無駄なくスループットを向上させる工夫がなされている。制御プロセス２１０は、第１処理プロセス２０３と第２処理プロセスのいずれかから処理完了の報告を受けると、その処理プロセスの直後の保持プロセスに蓄積されているページ数を取得した上で、処理を分岐する。第１処理プロセス２０３を例に取ると、ページ数Ｐ２が閾値Ｔ２ｃ以下であれば印刷部２０９による印刷中に中間データが不足する可能性が高いと見なして第１処理プロセス２０３の処理を大幅に加速する。同様にＰ２が閾値Ｔ２ｂ以下であれば通常の加速、Ｔ２ａ以下であれば速度を維持、Ｔ２ａを超える場合は第２保持プロセス２０５の使用メモリ量を抑制するために減速する。なおここでいう処理の加速および減速は、後述するように、各処理プロセスに割り当てるコアの数を増減することで行われる。
【００５７】
大幅に加速するときは、制御プロセス２１０は、同一コンピュータ内の２コアの未使用コアが複数コンピュータ内で２組あるかを、アフィニティマスクを用いて確認する。そして制御プロセス２１０は、２つの第１処理プロセス２０３それぞれに２コアを割り当てるようにアフィニティマスクを設定し、２つの第１処理プロセス２０３に処理開始を指示する。処理完了した第１処理プロセス２０３が１コアで動作していた場合、２つの第１処理プロセス２０３が４コアで動作することになるので、処理速度は４倍となる。
【００５８】
通常の加速をするときは、制御プロセス２１０は、同一コンピュータ内に２コアの未使用コアがあるかを、アフィニティマスクを用いて確認する。そして制御プロセス２１０は、１つの第１処理プロセス２０３に２コアを割り当てるようにアフィニティマスクを設定し、１つの第１処理プロセス２０３に処理開始を指示する。処理完了した第１処理プロセス２０３が１コアで動作していた場合、１つの第１処理プロセス２０３が２コアで動作することになるので、処理速度は２倍となる。
【００５９】
速度を維持するときは、制御プロセス２１０は、１コアの未使用コアがあるかを、アフィニティマスクを用いて確認する。そして制御プロセス２１０は、１つの第１処理プロセス２０３に１コアを割り当てるようにアフィニティマスクを設定し、１つの第１処理プロセス２０３に処理開始を指示する。処理完了した第１処理プロセス２０３が１コアで動作していた場合、１つの第１処理プロセス２０３が１コアで動作することになるので、処理速度は変わらない。
【００６０】
減速するときは、制御プロセス２１０は、処理完了を報告した第１処理プロセス２０３を待機状態にし、使用していたコアを未使用状態にする。処理完了した第１処理プロセス２０３が１コアで動作していた場合、１つの第１処理プロセス２０３が動作を停止することになるので、処理速度は低下する。
【００６１】
第１保持プロセス２０２の蓄積するページ数がＴ１ｂより少なくなると、処理速度を加速させる必要性が少なくなるため、制御プロセス２１０は、図５に示す第２保持プロセスにおける閾値Ｔ２ｂのように閾値Ｔ２ｂをページ数と同じ値まで減少させる。また、制御プロセス２１０は、Ｔ２ｃもＴ２ｂの値の減少量と同じ量だけ減少させる。これにより、第１処理プロセス２０３に割り当てられるコアの数が少なくなり、第２処理プロセス２０６に割り当てることができる未割り当て（未使用）コア数が増え、パイプライン上で印刷部２０９に近く影響の大きい第２処理プロセスを優先的に動作させられる。
【００６２】
次に、制御プロセス２１０が第１処理プロセス２０３と第２処理プロセスへのコア割り当ての判定を行い、処理の指示を行うアルゴリズムを説明する。
【００６３】
図６〜図１０は、本実施例の制御アルゴリズムのフローチャートであって、制御プロセスによる統括管理のもと実行される。なお、このフローチャートを実行するための各プロセス（各処理部）は、ＣＰＵ１０１、１０３、１１１、１１３が処理プログラムを実行することで実現されている。
【００６４】
＜全体の処理フロー＞
図６は、本実施例のコンピュータが実行する処理の全体を示すフローチャートである。このフローチャートの処理は制御プロセス２１０によって制御される。
【００６５】
まず、図６のステップＳ６０１では、制御プロセス２１０が読込プロセス２０１に処理開始の指示をし、ステップＳ６０２へ進む。
【００６６】
ステップＳ６０２では、制御プロセス２１０が処理開始の判定のサブルーチンＳ６２１（図７）を呼び出す。
【００６７】
ステップＳ６０３では、制御プロセス２１０が読込プロセス２０１または処理プロセスからの処理完了報告を待ち、ステップＳ６０４へ進む。
【００６８】
ステップＳ６０４では、制御プロセス２１０が処理プロセスからの報告か判定する。結果が偽であればステップＳ６０５へ進み、真であればＳ６０６へ進む。
【００６９】
ステップＳ６０５では、制御プロセス２１０が読込プロセス２０１の処理速度を変更するサブルーチンＳ６４１（図８）を呼び出す。
【００７０】
ステップＳ６０６では、制御プロセス２１０が閾値を更新するサブルーチンＳ６６１（図９）を呼び出す。
【００７１】
ステップＳ６０７では、制御プロセス２１０がＮを２としたときの第Ｎ処理プロセスの処理速度すなわち第２処理プロセスの処理速度を変更するサブルーチンＳ６８１（図１０）を呼び出す。なお第２処理プロセスの処理速度の変更は、第２処理プロセスへのコアの割り当てを制御（調整）することによって行われる。
【００７２】
ステップＳ６０８では、制御プロセス２１０がＮを１としたときの第Ｎ処理プロセスの処理速度すなわち第１処理プロセスの処理速度を変更するサブルーチンＳ６８１（図１０）を呼び出す。なお第１処理プロセスの処理速度の変更は、第１処理プロセスへのコアの割り当てを制御（調整）することによって行われる。
【００７３】
ステップＳ６０８による第１処理プロセスの処理速度の変更がステップＳ６０８による第２処理プロセスの変更よりも先に行われている。これは、第２処理プロセスへのコアの割り当て制御が、第１処理プロセスへのコアの割り当て制御よりも優先的に行われることを意味する。
【００７４】
ステップＳ６０９では、制御プロセス２１０が保持プロセスにページが蓄積されている、または処理プロセスが処理中か判定する。結果が真であれば処理を終了し、偽であればステップＳ６０２へ進む。
【００７５】
以上が全体の処理フローである。
【００７６】
＜処理開始の判定のサブルーチン＞
Ｓ６０２において呼び出されるサブルーチンＳ６２１の処理フローを図７に示す。
【００７７】
ステップＳ６２２では、制御プロセス２１０が、第１処理プロセス２０３の動作状況が処理開始前であり、かつ、第１保持プロセス２０２のページ数が閾値Ｔ１ｂ以上か判定する。ここで「第１処理プロセス２０３の動作状況が処理開始前」というのは、「ＰＤＬデータを含む印刷ジョブが入力されてから、この印刷ジョブに含まれるＰＤＬデータが第１処理プロセス２０３により中間データへ初めて変換されるまでの期間」のことである。もし結果が真であればステップＳ６２３へ進み、偽であればステップＳ６２４へ進む。
【００７８】
ステップＳ６２３では、制御プロセス２１０が、コア群２１１におけるコア割り当てが可能なすべてのコアを使用して、第１処理プロセス２０３に２コアでの処理開始を指示し、ステップＳ６２４へ進む。すなわち、制御プロセス２１０は、１つ以上の第１処理プロセス２０３を起動して、各第１処理プロセス２０３に対して２コアを割り当てて処理を開始させる。
【００７９】
ステップＳ６２４では、制御プロセス２１０が、第２処理プロセス２０６の動作状況が処理開始前であり、かつ、第２保持プロセス２０５のページ数が閾値Ｔ２ｂ以上か判定する。もし結果が真であればステップＳ６２５へ進み、偽であればステップＳ６２６へ進む。
【００８０】
ステップＳ６２５では、制御プロセス２１０が、コア群２１１におけるコア割り当てが可能なコアを使用して、第２処理プロセス２０６に１コアでの処理開始を指示し、ステップＳ６２６へ進む。すなわち、制御プロセス２１０は、第２処理プロセス２０６を起動して、この第２処理プロセス２０６に対して１コアを割り当てて処理を開始させる。
【００８１】
ステップＳ６２６では、制御プロセス２１０が、印刷部２０９の動作状況が印刷開始前であり、かつ、第３保持プロセス２０８のページ数が閾値Ｔ３ｂ以上か判定する。結果が真であればステップＳ６２７へ進み、偽であればサブルーチンＳ６２１の呼び出し元のステップＳ６０３に進む。
【００８２】
ステップＳ６２７では、制御プロセス２１０が印刷部２０９に印刷開始を指示し、サブルーチンＳ６２１の呼び出し元のステップＳ６０３に進む。
【００８３】
以上が処理開始の判定のサブルーチンＳ６２１である。
【００８４】
＜読込プロセスの処理速度の変更のサブルーチン＞
Ｓ６０５において呼び出されるサブルーチンＳ６４１の処理フローを図８に示す。
【００８５】
ステップＳ６４２では、制御プロセス２１０が、第１保持プロセス２０２に蓄積されているページ数Ｐを取得し、ステップＳ６４３へ進む。
【００８６】
ステップＳ６４３では、制御プロセス２１０が、ＮＩＣ１０７を通じて受信した全てのＰＤＬデータを処理単位データへ分割したかを判定する。すなわち、全てのジョブの分割処理が完了したかが判定される。結果が真であればステップＳ６４４へ進み、偽であればステップＳ６４５へ進む。
【００８７】
ステップＳ６４４では、制御プロセス２１０が、読込プロセス２０１へ終了を指示し、サブルーチンＳ６４１の呼び出し元のステップＳ６０９に進む。
【００８８】
ステップＳ６４５では、制御プロセス２１０が、Ｓ６４２で取得されたページ数Ｐが閾値Ｔ１ａ以上か判定する。結果が真であればステップＳ６４６へ進み、偽であればステップＳ６４７へ進む。
【００８９】
ステップＳ６４６では、制御プロセス２１０が、読込プロセス２０１へ一時停止を指示し、サブルーチンＳ６４１の呼び出し元のステップＳ６０９に進む。
【００９０】
ステップＳ６４７では、制御プロセス２１０が、読込プロセス２０１が一時停止中か判定する。結果が真であればステップＳ６４８へ進み、偽であればサブルーチンＳ６４１の呼び出し元のステップＳ６０９に進む。
【００９１】
ステップＳ６４８では、制御プロセス２１０が、読込プロセス２０１へ処理再開を指示し、サブルーチンＳ６４１の呼び出し元のステップＳ６０９に進む。
【００９２】
以上が読込プロセスの処理速度の変更のサブルーチンＳ６４１である。
【００９３】
＜閾値更新のサブルーチン＞
Ｓ６０６において呼び出されるサブルーチンＳ６６１の処理フローを図９に示す。
【００９４】
ステップＳ６６２では、制御プロセス２１０が、読込プロセス２０１の処理が未完了か判定する。結果が真であればサブルーチンＳ６６１の呼び出し元のステップＳ６０７へ進み、偽であればステップＳ６６３へ進む。
【００９５】
ステップＳ６６３では、制御プロセス２１０が、第１保持プロセス２０２に蓄積されているページ数Ｐを取得し、ステップＳ６６４へ進む。
【００９６】
ステップＳ６６４では、制御プロセス２１０が、ステップＳ６６３で取得されたページ数Ｐが閾値Ｔ２ｂ以下か判定する。結果が真であればステップＳ６６５へ進み、偽であればサブルーチンＳ６６１の呼び出し元のステップＳ６０７へ進む。
【００９７】
ステップＳ６６５では、制御プロセス２１０が、閾値Ｔ２ｂからステップＳ６６３で取得されたページ数Ｐを減じた値を変数Ｄとする。そして制御プロセス２１０は、閾値Ｔ２ｂを、閾値Ｔ２ｂから変数Ｄを減じた値で更新し、閾値Ｔ２ｃを、閾値Ｔ２ｃから変数Ｄを減じた値で更新して、ステップＳ６６６へ進む。
【００９８】
ステップＳ６６６では、制御プロセス２１０が閾値Ｔ２ｂ、閾値Ｔ２ｃのそれぞれについて０未満のときは０で各閾値Ｔ２ｂ、Ｔ２ｃを更新し、サブルーチンＳ６６１の呼び出し元のステップＳ６０７へ進む。
【００９９】
以上が閾値更新のサブルーチンＳ６６１である。
【０１００】
＜第Ｎ処理プロセスの処理速度の変更のサブルーチン＞
Ｓ６０７、Ｓ６０８において呼び出されるサブルーチンＳ６８１の処理フローを図１０に示す。すなわち、第Ｎ処理プロセスの処理速度の変更のサブルーチンＳ６８１について説明する。なお、Ｎを１とした場合、第Ｎ処理プロセス、第Ｎ保持プロセス、第Ｎ＋１保持プロセス、閾値Ｔ（Ｎ＋１）ａ、Ｔ（Ｎ＋１）ｂ、Ｔ（Ｎ＋１）ｃは、第１処理プロセス、第１保持プロセス、第２保持プロセス、閾値Ｔ２ａ、Ｔ２ｂ、Ｔ２ｃのことを示す。また、Ｎを２とした場合も同様に、第Ｎ処理プロセス、第Ｎ保持プロセス、第Ｎ＋１保持プロセス、閾値Ｔ（Ｎ＋１）ａ、Ｔ（Ｎ＋１）ｂ、Ｔ（Ｎ＋１）ｃは、第２処理プロセス、第２保持プロセス、第３保持プロセス、閾値Ｔ３ａ、Ｔ３ｂ、Ｔ３ｃのことを示す。
【０１０１】
ステップＳ６８２では、制御プロセス２１０が、第Ｎ保持プロセスのページ数が０か判定する。結果が真であればサブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進み、偽であればステップＳ６８３へ進む。
【０１０２】
ステップＳ６８３では、制御プロセス２１０が、第Ｎ＋１保持プロセスに蓄積されているページ数Ｐを取得し、ステップＳ６８４へ進む。
【０１０３】
ステップＳ６８４では、制御プロセス２１０が、ステップＳ６８３で取得されたページ数Ｐが閾値Ｔ（Ｎ＋１）ｃ以下か判定する。結果が真であればステップＳ６８５へ進み、偽であればステップＳ６８８へ進む。
【０１０４】
ステップＳ６８５では、制御プロセス２１０が、同一コンピュータ内に２コア以上の未使用コア（未割り当てコア）が２組以上あるか判定する。結果が真であればステップＳ６８６へ進み、偽であればステップＳ６８９へ進む。
【０１０５】
ステップＳ６８６では、制御プロセス２１０が、未使用コアのうち物理的に近い２つのコアを１つの第Ｎ処理プロセスに割り当てる。そして制御プロセス２１０は、さらに残った未使用コアのうち物理的に近い２つのコアを１つの第Ｎ処理プロセスに割り当てて、ステップＳ６８７へ進む。すなわちこれは、制御プロセス２１０が同一のコンピュータ内の２組それぞれの２コアを２つの第Ｎ処理プロセスに割り当てることを示している。言い換えれば、制御プロセス２１０は、図３に示される通し番号の振られた全ての未使用コアについて、同一のコンピュータ内の通し番号の近い２つの未使用のコアの１組を、１つの第Ｎ処理プロセスに割り当てる。また同様に制御プロセス２１０は、さらに、未使用のコアのうち同一のコンピュータ内の通し番号の近いもう１組の２つの未使用のコアを、もう１つの第Ｎ処理プロセスに割り当てる。これは第Ｎ処理プロセスを同一コンピュータ内で動作させた方がデータ転送のロスが少ないためである。
【０１０６】
ステップＳ６８７では、制御プロセス２１０が、２つの第Ｎ処理プロセスそれぞれに２コアでの処理開始を指示し、サブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進む。
【０１０７】
ステップＳ６８８では、制御プロセス２１０が、ステップＳ６８３で取得されたページ数Ｐが閾値Ｔ（Ｎ＋１）ｂ以下か判定する。結果が真であればステップＳ６８９へ進み、偽であればステップＳ６９２へ進む。
【０１０８】
ステップＳ６８９では、制御プロセス２１０が、同一コンピュータコンピュータ内に２コア以上の未使用コアが１組以上あるか判定する。結果が真であればステップＳ６９０へ進み、偽であればステップＳ６９３へ進む。
【０１０９】
ステップＳ６９０では、制御プロセス２１０が、未使用コアのうち物理的に近い２つのコアを２つの第Ｎ処理プロセスに割り当て、ステップＳ６９１へ進む。すなわちこれは、制御プロセス２１０が同一のコンピュータ内の２つの未使用コアを２つの第Ｎ処理プロセスに割り当てることを示している。言い換えれば、制御プロセス２１０は、図３に示される通し番号の振られた全ての未使用コアのうち、１つの未使用コアを１つの第Ｎ処理プロセスに割り当てる。また同様に制御プロセス２１０は、さらに、未使用のコアのうち割り当てられたコアの通し番号と近いもう１つの未使用のコアを、もう１つの第Ｎ処理プロセスに割り当てる。これは第Ｎ処理プロセスを同一コンピュータ内で動作させた方がデータ転送のロスが少ないためである。
【０１１０】
ステップＳ６９１では、制御プロセス２１０が２つの第Ｎ処理プロセスそれぞれに１コアでの処理開始を指示し、サブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進む。
【０１１１】
ステップＳ６９２では、制御プロセス２１０が、ステップＳ６８３で取得されたページ数Ｐが閾値Ｔ（Ｎ＋１）ａ以下か判定する。結果が真であればステップＳ６９３へ進み、偽であればサブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進む。
【０１１２】
ステップＳ６９３では、制御プロセス２１０が、１コア以上の未使用コアがあるか判定する。結果が真であればステップＳ６９４へ進み、偽であればサブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進む。
【０１１３】
ステップＳ６９４では、制御プロセス２１０が、１つの未使用コアを１つの第Ｎ処理プロセスに割り当てて、第Ｎ処理プロセスに１コアでの処理開始を指示する。処理は、サブルーチンＳ６８１の呼び出し元のステップＳ６０８へ進む。
【０１１４】
以上が第Ｎ処理プロセスの処理速度の変更のサブルーチンＳ６８１である。
【０１１５】
以上説明したように、本実施例の印刷システムは、２種類の処理プロセスのパイプライン構造を有する。そして本実施例の印刷システムは、処理プロセスによって処理された処理後データを保持プロセスによって保持させ、処理プロセスに割り当てるプロセッサコアの数を保持プロセスの保持する処理後データの量によって制御する。この結果、処理手段による処理済みデータを保持する保持手段を設けることで、処理手段の処理時間のばらつきによる影響を吸収することができる。また、この保持手段に保持されているデータ量に基づいて処理手段へ割り当てるコア数を制御することで、処理手段の処理速度を調整して安定した保持手段へのデータ供給を行うことができる。その結果、処理済みデータをさらに処理する後段の手段が前段からのデータ出力を待つために生じるロスタイムを削減することができる。
【０１１６】
さらに、本実施例の印刷システムは、保持プロセスに保持されるデータ量が閾値（例えばＴ２ａ、Ｔ３ａ）を超える場合、処理プロセスに割り当てるコア数を減らすことで、処理プロセスの処理速度を減速させる。その結果、処理プロセスは、後段の保持プロセスに保持するデータ量を所定の範囲に収めるような処理速度で処理を実行し、保持プロセスに保持されるデータ量をむやみに増やすことなく、保持プロセスの省メモリ化を図ることができる。
【０１１７】
なお本実施例では、１つの処理プロセスに割り当てるコア数は１コアまたは２コアであったが、本発明はこれに限られない。
【０１１８】
（変形例１）
実施例１では、制御プロセス２１０が保持プロセスの蓄積しているページ数を取得する方法として、処理プロセスが処理を完了したタイミングで保持プロセスの状況を確認する方法を採っていた。以下に、その他の制御プロセス２１０が保持プロセスの蓄積しているページ数を取得する方法を説明する。
【０１１９】
図１１に示される各機能ブロックは、実施例１の図２で説明した第２処理プロセス２０６、第３保持プロセス２０８、制御プロセス２１０に対応している。図１１は、制御プロセス２１０が保持プロセスの蓄積しているページ数を取得する方法を、第２処理プロセスと第３保持プロセス２０８によるフィードバック制御の場合を例に２つ示している。
【０１２０】
図１１（Ａ）は実施例１のように制御プロセス８０３は、タイマ動作などで一定時間ごとにページ数の状況を把握して第３保持プロセス８０２から直接的にページ数を取得している。そして、制御プロセス８０３は、取得したページ数に基づいて、第２処理プロセス８０１へのコアの割り当てを行うフィードバック処理を行う。ページ数を取得する時間間隔小さくすることによって制御プロセス８０３が動作状況を把握する精度は上がるが、保持プロセス８０２へのアクセス回数が増えるためシステム負荷も高くなる。
【０１２１】
図１１（Ｂ）は実施例１の変形例１を示しており、第３保持プロセス８１２のデータの流入量と流出量を取得することで間接的にページ数を得る。そして、前後の第２処理プロセス８１１や印刷部２０９の動作タイミングに応じた即応性の高い動作状況を制御プロセス８１３が把握できる。データの送受信のタイミングで取得するため、取得時間の誤差は小さくなるが、大きなデータ送受信の最中に更に負荷をかけることになる。
【０１２２】
（変形例２）
実施例１では、ＰＤＬデータをページ単位の処理単位データに分割して複数の処理プロセスで並列処理をする動作例を示していた。以下にページ単位以外のデータの粒度に分割する方法と、処理プロセスに複数のスレッドが並列処理を行うときのデータ分割の粒度について説明する。
【０１２３】
図１２（Ａ）、（Ｂ）は、実施例１の図２で説明した読込プロセス２０１、保持プロセス、処理プロセスと対応した図面であり、それぞれのプロセスが処理または保持するデータ粒度の分割例を示した機能ブロック図である。読込プロセス２０１でＰＤＬデータを分割した後、第１処理プロセス２０３と第２処理プロセスで処理する処理対象となるデータを更に細かい粒度に分割することができ、それぞれデータの粒度は任意に組み合わせることができる。例えば、単一ページデータ単位、描画オブジェクト単位、タイル単位、バンド単位であり、複数の前記単位データを束ねた、ページデータ群、描画オブジェクト群、タイル群、バンド群でも良い。
【０１２４】
ブロック９０１、９１１は読込プロセス２０１に対応する。ブロック９０２、９１２は第１保持プロセス２０２に対応する。ブロック９０３、９１３は第１処理プロセス２０３に対応する。ブロック９０４、９１４は処理スレッド２０４に対応する。ブロック９０５、９１５は第２保持プロセス２０５に対応する。ブロック９０６、９１６は第２処理プロセス２０６に対応する。ブロック９０７、９１７は処理スレッド２０７に対応する。ブロック９０８、９１８は第３保持プロセス２０８に対応する。
【０１２５】
図１２（Ａ）では、読込プロセス９０１にてＰＤＬデータを読み込み、単一ページデータに分割して第１保持プロセス９０２に保持する。第１処理プロセス９０３では、受け取った単一ページデータを描画オブジェクトに分割することで、処理スレッド９０４にて並列処理を行う。処理スレッド９０４がそれぞれ処理した結果を第１処理プロセス９０３がマージし中間データを生成して、第２保持プロセス９０５へ蓄積する。第２処理プロセス９０６では、受け取った中間データをタイルに分割することで、処理スレッド９０７にて並列処理を行う。処理スレッド９０７がそれぞれ処理した結果を、第２処理プロセス９０６がマージし印刷データを生成して、第３保持プロセス９０８へ蓄積する。
【０１２６】
図１２（Ｂ）では、読込プロセス９１１にてＰＤＬデータを読み込み、複数ページデータに分割して第１保持プロセス９１２に保持する。第１処理プロセス９１３では、受け取った複数ページデータを単一ページデータに分割することで、処理スレッド９１４にて並列処理を行う。処理スレッド９１４がそれぞれ処理した結果から、第１処理プロセス２０３が中間データを生成して、第２保持プロセス９１５へ蓄積する。第２処理プロセス９１６では、受け取った中間データをバンドに分割することで、処理スレッド９１７にて並列処理を行う。処理スレッド９１７がそれぞれ処理した結果を第２処理プロセスがマージし印刷データを生成して、第３保持プロセス９１８へ蓄積する。
【０１２７】
データの分割する粒度を小さくすることで、１つのデータを処理する時間が短くなるため１つのコアを占有することが少なくなり、第１処理プロセスおよび第２処理プロセスへのコア割り当てするアルゴリズムが適用しやすくなる。さらにデータサイズを小さくすることで低速な回線でも転送スループットを高めることができるため、ＬＡＮやＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、クラスタ計算機を使用した分散処理にも応用が可能となる。
【０１２８】
また、データサイズによってはＰＤＬデータを１ページずつ分割する場合に長い処理時間が必要なことがあるため、粒度を粗い複数ページを一単位として分割することも処理時間の短縮のために有効な手段になる。
【０１２９】
分割するデータの粒度は、印刷システムの納入時、オペレータのジョブ投入時、動作中等に、納入する際の顧客の要望、シミュレータによる算出、オペレータの経験に基づいた手動入力等の方法で決定することができる。
【０１３０】
（実施例２）
実施例１では、処理プログラムの動作するハードウェアの構成と処理について説明した。以下に、印刷システムを実現するためのハードウェア構成の一例を説明する。なお以下説明する読込プロセス、第１処理プロセス、第２処理プロセス、第１保持プロセス、第２保持プロセス、第３保持プロセス、印刷部は、実施例１で説明した各プロセスおよび印刷部と同様である。
【０１３１】
図１３は、本発明を複数のコンピュータで実施した例を示し、各コンピュータは読込プロセスあるいは第１処理プロセスあるいは第２処理プロセスの何れか１種類のプロセスを実行する。また各コンピュータは、それぞれが実行する前述のプロセスの後段の保持プロセスも実行する。すなわち、コンピュータ１３０１は、読込プロセスおよび第１保持プロセスを実行する。またコンピュータ１３０２、１３０３、１３０４は、第１処理プロセスおよび第２保持プロセスを実行する。またコンピュータ１３０５は、制御プロセスを実行する。またコンピュータ１３０６、１３０７、１３０８は、第２処理プロセスおよび第３保持プロセスを実行する。そして印刷機１３０９は印刷部２０９の機能を有する印刷装置である。
【０１３２】
図１３のような構成のため、各処理プロセスから後段の保持プロセスへのデータ転送に使われる通信経路は、同一の計算機内の場合はデータバス等が使用される。また、異なる計算機間のデータ転送の場合はデータバス等に加えＬＡＮ等も使用される。
【０１３３】
高解像度の印刷が求められるとき、入力されるＰＤＬデータや印刷機に転送される印刷データは大きなデータサイズとなる（例えば、１２００ｄｐｉの印刷データは約５００ＭＢ）。このような大容量のデータのやりとりが、データバス等に比べて低速なＬＡＮ等の通信経路に集中することは、データ転送の遅延が生じるため、避けることが望ましい。
【０１３４】
本実施例の印刷システムのコンピュータ１３０５の実行する制御プロセスは、処理プロセスのコアの使用状況や保持プロセスの蓄積しているページ数を取得する機能を有している。更に、計算機とコアの物理的な所在を把握した上で使用するコアを決定して処理プロセスへコア割り当てを行えるため、同様に使用する通信経路を決定することも可能である。
【０１３５】
保持プロセスから処理プロセスへデータを転送するとき、保持プロセスと同一の計算機に未使用コアがある場合は、当該コアを処理プロセスに割り当てて変換処理を行う。保持プロセスと同一の計算機に未使用コアが無い場合は、未使用コアが最も多い他の計算機を探し、当該コアを処理プロセスに割り当てて変換処理を行う。
【０１３６】
処理プロセスから保持プロセスへデータを転送するとき、処理プロセスと同一の計算機にデータを格納する未使用メモリを持つ保持プロセスがある場合は、当該保持プロセスへデータを蓄積する。
【０１３７】
処理プロセスと同一の計算機にデータを格納する未使用メモリを持つ保持プロセスが無い場合は、他の計算機からデータを格納する未使用メモリを持つ保持プロセスを探し、当該保持プロセスへデータを蓄積する。
【０１３８】
（その他の実施例）
上記実施例および変形例において、制御プロセスが保持プロセスから取得するコア割り当ての判定をするための情報は、ページ数の代わりにデータ数またはデータ量であっても良い。
【０１３９】
保持プロセスから処理プロセスへデータを転送するときの処理プロセスへのコア割り当てを決定する際に、未使用コアが最も少ない他の計算機を探す。そして当該コアを処理プロセスに割り当てて変換処理を行うことで、なるべく少ない数の計算機に処理を集中させても良い。
【０１４０】
処理プロセスから保持プロセスへデータを転送するときの保持プロセスを決定する際に、データを格納する未使用メモリが最も多い保持プロセスへデータを蓄積することで、計算機ごとの格納データ量を平準化させても良い。
【０１４１】
なお、上記の実施例および変形例は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【０１４２】
また、本発明は、以下の処理を実行することによっても実現される。その処理は、上述した実施例の機能を実現させるソフトウェア（コンピュータプログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0006341628.tif 000002
【図２】
0006341628.tif 000003
【図３】
0006341628.tif 000004
【図４】
0006341628.tif 000005
【図５】
0006341628.tif 000006
【図６】
0006341628.tif 000007
【図７】
0006341628.tif 000008
【図８】
0006341628.tif 000009
【図９】
0006341628.tif 000010
【図１０】
0006341628.tif 000011
【図１１】
0006341628.tif 000012
【図１２】
0006341628.tif 000013
【図１３】
0006341628.tif 000014