説明

描画処理装置及び描画処理方法

【課題】 共有メモリを介した複数のCPUコア間で処理を行う場合、データ授受や処理のスケジューリングが必要なため、入力データデータによっては、1つのCPUコアで処理を行った場合より効率が低下するという課題があった。また、複数のCPUコアを用いて複数ページのレンダリング処理を行う場合、メモリに1ページ分のラスターデータを格納出来る空き領域が無ければ待機しなければならないという課題があった。
【解決手段】 入力データのページ数に応じて1つのCPUコアで処理を行うか、2つ以上のCPUコアで処理を行うかを切り替える。また、複数のCPUコアを用いて複数ページのレンダリング処理を行う場合、メモリの空き状況に応じてレンダリングする領域を決定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は描画処理装置及び描画処理方法、詳しくは入力データからラスターデータを生成する描画処理装置及び方法に関するものである。
【背景技術】
【0002】
ページ内の文字やイメージが記述されたページ記述言語(PDL:Page Description Language)からラスターデータを生成する描画処理において、処理の高速化や効率化を図るための提案は従来よりなされている。また、複数のCPUコアを用いた処理分担や処理の並列化による方法や、入力PDLを後段で処理しやすい形式の中間データに変換し効率化を図る方法も幾つか提案されている。例えば、特許文献1においては、プリントエンジンの処理を複数ステージに分割し、各処理ステージを複数組み合わせたパイプライン処理構成を構築する。そして、ページをバンド単位で領域分割し、分割したバンド領域毎に文字、図形を処理するパイプライン構造と、画像を処理するパイプライン構造とを描画要素に必要な処理に応じて構築する。各処理ステージの処理時間をプリントエンジンの出力速度に応じたものとすることにより効率的な処理構成を実現している。
【0003】
また、特許文献2では、メインプロセッサとサブプロセッサを有する構成において、受信データから作成された中間データのレンダリング処理の実行を、ページ単位でメインプロセッサの処理状況に応じて処理を行うプロセッサを切り替えている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2000-255117号公報
【特許文献2】特開2007-196468号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
入力されたPDLを中間データに変換し、中間データ生成処理とレンダリング処理を複数のCPUコアを用いて行う従来の構成において、CPUコア間の同期やデータ授受、パイプライン処理のスケジューリング、各CPUコアの状態検出が必要であった。そのため、入力データが1ページの場合などには、1つのCPUコアで処理を行う場合より効率が低下するという課題があった。
【0006】
また、ページ単位で中間データを生成する際に、入力PDLを解析し中間データを生成する中間データ生成処理が、中間データからラスターデータを生成するレンダリング処理よりも高速である場合がある。その際、中間データはレンダリング待ちの状態としてメモリに格納されるが、メモリに格納可能な中間データ量には上限値がある。そのため、メモリに格納している中間データが上限値に達した場合、従来技術では、中間データ生成処理を担当していたCPUコアがメモリに格納されているレンダリング待ちの中間データから最適な中間データを選択する。そして、選択した中間データを用いて1ページ分のレンダリングを行うようになっていた。ただし、前ページのラスターデータの印刷エンジンへの送信が完了するまで、次ページのラスターデータは印刷エンジンへ送信できない。そのため、メモリに1ページ分のラスターデータを格納出来る空き領域が無ければ、メモリに1ページ分のラスターデータを格納出来る空き領域が出来るまで、若しくは格納出来る中間データ数に空きが出来るまで待機しなければならないという課題があった。
【課題を解決するための手段】
【0007】
本発明はかかる問題点に鑑みなされたものであり、
2つ以上のCPUコアを有する描画処理装置及び描画処理方法において、入力PDLのページ数に応じて1つのCPUコアで処理を行うか、2つ以上のCPUコアで処理を行うかを切り替え処理の効率化を図る。
【0008】
また、2つ以上のCPUコアで処理を行う場合は、入力PDLからページを一定サイズのタイル単位でレンダリング可能な中間データを生成する。更に、中間データ生成処理を担当するCPUコアと、中間データからラスターデータを生成するレンダリング処理を担当するCPUコアに割当てる。そして、メモリに格納された中間データが上限数に達した場合、或いは入力PDLの全ページの中間データ生成が完了した時点で、処理待ちとなっている中間データが残っているか確認する。中間データが残っていた場合、中間データ生成処理を担当するCPUコアはメモリの空き状況に応じて、処理待ちでメモリに格納されている中間データの一部・または全部をレンダリングすることにより効率的に描画処理を行う。
【発明の効果】
【0009】
本発明によれば、入力PDLのページ数に応じて処理に用いるコア数を一意に切り替えることにより、CPUコアの状態検出、CPUコア間でのデータ授受の負荷を軽減し処理を効率化することが出来る。
【0010】
また、中間データ生成処理を担当するCPUコアが、処理待ちでメモリに格納されている中間データをレンダリングする際に、メモリの空き状況に応じてレンダリングするサイズを決める。これにより、メモリの空き容量が足りずにレンダリング出来ないといった状況を軽減し、効率的にレンダリングする事を可能とする。
【図面の簡単な説明】
【0011】
【図1】本発明の実施形態における構成を示した図の例
【図2】中間データの概略を示した図の例
【図3】本アルゴリズムにおけるCP1の処理の概略フローチャート例
【図4】CP1におけるmバンド分のレンダリング処理の概略フローチャート例
【図5】本アルゴリズムにおけるCP2の処理の概略フローチャート例
【発明を実施するための形態】
【0012】
以下、添付図形に従って本発明にかかる実施例の処理内容を以下に説明する。
【0013】
図1は本発明において、2つのCPUコア(以下CP1, CP2)を有するシステムを想定した場合の全体概略図である。
【0014】
まず、PDLデータ101が入力データとして描画処理装置に入力される。該PDLデータ101には、描画コマンドや文字、図形等の情報が含まれる。ブロック102は、CP1における中間データ生成部であり、前記PDLデータ101を解析し、ページ毎に後段のラスターデータ生成処理に適した形式の中間データに変換する。前記ブロック102で生成される中間データは、図2(b)に示す様に、入力されたPDLデータが図2(a)の様であった場合、PDLデータの各ページを一定サイズ矩形のタイル単位で分割されており、タイル単位でのレンダリングが可能な形式となっている。ブロック103は前記中間データ生成部102で生成された前記中間データからラスターデータ106生成するラスターデータ生成部である。前記中間データ生成部102で生成された前記中間データを受け取り、解釈・レンダリングを行い印刷エンジン109で印刷処理可能な前記ラスターデータ106を生成し、前記印刷エンジン109に受け渡すことが可能である。
【0015】
共有メモリ104は前記2つのCPUコアでデータの受け渡しを行う際に使用されるメモリであり、前記2つのCPUコアから共通にアクセス可能である。また、前記CP1で生成された前記中間データ105を、前記CP2でレンダリングする際には、前記中間データ 105は前記共有メモリ 104に一時的に格納される。
【0016】
ブロック107は前記CP2でレンダリングする際に、前記共有メモリ104に格納された前記中間データ105を受取り、ラスターデータ108を生成するラスターデータ生成部であり、生成したデータを前記印刷エンジン109に受け渡す事が可能である。
【0017】
次に、図3、4、5のフローチャートに沿って本実施例の詳細を説明する。
【0018】
まず描画処理が指示されPDLデータが入力されるとCP1では図3、図4記載のステップが実行される。
【0019】
CP1では処理が開始されると、図3のステップS301において、入力PDLデータからページ数Nを取得する。次いでステップS302で入力されたPDLのページ数Nが1であるか否かを判断し、N=1であれば1つのCPUコアを用いて描画処理を行うのが適当と判断しステップS303へと進む。また、N > 1であれば2つのCPUコアを用いて処理を行うステップS306へ進む。
【0020】
ステップS303では、入力されたPDLの解析し、記述されている描画オブジェクトを中間データに変換する処理を行い1ページ分の中間データを生成する。次にステップS304では前記ステップS303で生成された中間データを解釈・レンダリングしラスターデータを生成する。この時、前記共有メモリ104にラスターデータを格納するための出力バッファを確保する。そして、ステップS305では、前記ステップS304のレンダリング処理により生成されたラスターデータを次工程処理を行う前記印刷エンジン109に送信することにより、1ページ分の描画処理を行う。
【0021】
また、前記ステップS302において N = 1でないと判断された場合には、ステップS306に進む。ステップS306では、図1の前記共有メモリ104に現在一時的に格納されている中間データの数Qnumが、前記共有メモリ104に格納できる中間データ数の上限Qmax以下であるかを判断する。もし、m < Qmax であれば、前記メモリ104に格納出来る中間データ数に空きがあると判断し、ステップS307に進む。ここで、前記共有メモリ104に格納出来る中間データ数の上限値Qmaxは前記共有メモリ104の容量から予め定めておく。ステップS307では前記ステップS303同様に入力されたPDLデータから1ページ分の中間データを生成する。続くステップS308では前記ステップS307で生成した中間データを図1の前記共有メモリ104に格納し、共有メモリに格納されている中間データ数Qnumに1を加算する。ステップS309では上記ステップS306〜S308をNページ分繰り返す。そして、Nページ分の中間データの生成完了後に、ステップS310において前記共有メモリ104に処理待ちの中間データが存在する場合はCP1を用いて中間データの一部、または全部のレンダリングを実施する処理A(図4)に進む。そうでなければ処理を終了する。また、前記ステップS306においてQnumが上限値Qmaxに達した場合には、前記共有メモリ104上にこれ以上中間データを格納することが出来ないと判断し、CP1で中間データのレンダリングを実施する処理A(図4)へ移行する。
【0022】
図4の処理Aでは、先ずステップS401で現在CP2が処理を行っているページ番号nを取得する。次にステップS402において、nがPDLの最終ページかどうか(n = N)を判断し、最終ページと判断されれば処理Aを終了し、最終ページでないと判断されればステップS403に進む。ステップS403では図1の前記共有メモリ104の空き容量M_freeと、1バンド分の出力バッファサイズM_bandから共有メモリ104内に新たに確保出来る出力バンド数m(m < M_free/M_band)を算出する。算出されたバンド数mをレンダリングするバンド数とする。そして、バンド数mの決定後、前記共有メモリ104からmバンド分の出力バッファを確保する。続くステップS404では、CP2が処理を行っている次のページn+1の中間データFn+1を共有メモリから取得する。そして、ステップS405では、前記中間データFn+1を用いてn+1ページ目の上部mバンド分のレンダリングを実施しラスターデータを生成する。ラスターデータの生成後、ステップS406ではCP2がnページ目の処理を完了しているかを確認し、完了していればステップS407にて前記印刷エンジン108にラスターデータを受け渡す。次にステップS408では、レンダリングしたバンド数mが1ページ分であるかを判断し、1ページ分であればステップS409で前記共有メモリ104から中間データFn+1を削除し、Qnumから1減算し処理Aを終了する。前記ステップS408においてバンド数mが1ページ分よりも少なければそのまま処理Aを終了する。
【0023】
CP2では図5記載のステップが実行される。
【0024】
先ず、ステップS501において前記共有メモリ104に中間データが格納されているかどうか(Qnum>0)を確認する。前記共有メモリ104に中間データが格納されている場合、先ずステップS502で、CP1が中間データのレンダリング処理中かを確認する。CP1がnページ目の上部mバンド分をレンダリング中であった場合、ステップS505に進む。ステップS505では、前記バンド数mが1ページ分であるかを判断し、1ページ分であればステップS506においてn=n+1として前記共有メモリ104からCP1の処理中の次ページの中間データFnの取得と出力バッファの確保を行う。そして、続くステップS507で前記中間データFnのレンダリングを実施しラスターデータを生成する。ステップS510においてCP1がmバンド分の処理を完了するのを待ってステップS511で前記印刷エンジン108へラスターデータを送信し、ステップS512で前記共有メモリ104から中間データFnを削除し、Qnumから1を減算する。
【0025】
ステップS505において、前記バンド数mが1ページ分でないと判断された場合には、ステップS508において共有メモリ104から中間データFnの少なくともm+1バンド以降のデータを取得すると共に、出力バッファの確保を行う。そして、続くステップS509でnページ目のm+1バンド目以降をレンダリングしてラスターデータを生成し、前記ステップS510へと移行する。
【0026】
また、前記ステップS502において、CP1が中間データの処理を行っていない場合、ステップS503に進み、前記共有メモリ104に一時的に格納されている中間データの内、先頭ページnの中間データFnの取得と出力バッファの確保を行う。続くステップS504で前記中間データFnのレンダリングを実施し、nページ目のラスターデータを生成する。ラスターデータの生成後、前記ステップS511へと進みラスターデータを印刷エンジンへと送信する。
【0027】
ステップS513にて、上記の処理ステップS501〜S512を入力PDLの全ページの処理が完了するまで繰り返す。
【符号の説明】
【0028】
101 PDLデータ
102 ブロック


【特許請求の範囲】
【請求項1】
少なくとも2つ以上のCPUコアを有し、PDLを入力としてラスターデータを生成する描画処理装置であり、前記CPUコアのうち1つ目のCPUコアで前記PDLに記述されている各ページを一定サイズのタイル単位で分割した中間データを生成し、前記CPUコアのうち2つ目のCPUコアで、前記中間データからタイル単位にラスターデータを生成するレンダリング手段を有し、少なくとも前記2つのCPUコアで、前記中間データ生成と、前記レンダリングを並列に実行する手段を有し、且つ前記1つ目のCPUコアで、前記中間データからタイル単位にページの一部、又は全部のラスターデータを生成するレンダリング手段を有する描画処理装置。
【請求項2】
CPUコア間での中間データ授受のために、2つのCPUから共通にアクセス可能なメモリを有することを特徴とする請求項1に記載の描画処理装置。
【請求項3】
入力されたPDLのページ数に応じて、前記1つ目のCPUコアで前記中間データを生成し、前記中間データから前記ラスターデータ生成を実行するか、前記1つ目のCPUコアを含む少なくとも2つ以上のCPUコアを用いて前記中間データから前記ラスターデータを生成するかを判断する手段を有し、前記判断に従ってラスターデータを生成する手段を有することを特徴とする請求項1に記載の描画処理装置。
【請求項4】
少なくとも2つ以上のCPUコアを用いて前記中間データから前記ラスターデータ生成を実行すると判断された場合において、前記1つ目のCPUコアが中間データのレンダリングを行う場合に、前記共通にアクセス可能なメモリの空き領域から中間データのレンダリングバンド数を決定する手段を有し、現在処理待ちのページのうち先頭ページの前記中間データを前記1つ目のCPUコアが前記レンダリングバンド数分レンダリングし、前記1つ目のCPUコア以外のCPUコアは前記1つ目のCPUコアが前記レンダリングバンド数分レンダリングを実施したページの残りのバンドをレンダリングするする手段を有することを特徴とする請求項3に記載の描画処理装置。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−240214(P2012−240214A)
【公開日】平成24年12月10日(2012.12.10)
【国際特許分類】
【出願番号】特願2011−108983(P2011−108983)
【出願日】平成23年5月16日(2011.5.16)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】