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