データ処理装置、印刷システムおよびプログラム
【課題】CPUとGPUとの間で、大量のデータを効率良く処理する。
【解決手段】複数の処理を非同期で並列に実行可能なデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2には、システムメモリ12内にデバイス3との間でデータ転送を行うためメモリ領域が確保され、デバイス3は、ホスト2からのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、メモリ領域への書き込みを行う。
【解決手段】複数の処理を非同期で並列に実行可能なデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2には、システムメモリ12内にデバイス3との間でデータ転送を行うためメモリ領域が確保され、デバイス3は、ホスト2からのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、メモリ領域への書き込みを行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置、印刷システムおよびプログラムに関する。
【背景技術】
【0002】
コンピュータ内に取り付けられてグラフックスを処理するデバイスとして、従来から、GPU(Graphics Processing Unit)が利用されている。GPUは、本来はグラフィックス処理のためのものであるが、近年になって、汎用計算に使用するための開発環境がメーカーから提供されている。このように、汎用計算にGPUを利用する技術は、GPGPU(General Purpose computing on GPU)として知られている。現在、GPGPUは、計算物理学、映像および画像の処理、データベース管理、生命工学等の分野で利用されている。
【0003】
GPUは、汎用の処理装置であるCPU(中央処理装置:Central Processing Unit)に比べ、浮動小数点演算を並列かつ高速に実行することができる。しかし、GPUは、CPUのように分岐予測や非順次命令実行などの制御ハードウェアを多く備えているわけではないので、そのような処理は不得手である。また、GPUは、CPUとは異なり、キャッシュの効率化などの複雑な処理はできない。すなわち、GPUは、大量のデータに並列に同じ演算を繰り返すような用途であれば、CPUに比べ非常に効率よく高速に処理を実行できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2003−198818号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
CPUとGPUとの間で大量のデータを効率良く処理するためには、相互間のデータ転送を効率よく行う必要がある。データ転送、特に画像データの転送を効率よく行うための技術として、特許文献1には、画像メモリとハードディスクドライブ(HDD)との間での画像の同時転送技術が開示されている。特許文献1に開示の技術によれば、単位画像の分割転送を行うことで、個々の画像によるHDDの占有時間を分散し、複数画像の同時処理を並行して効率よく実行させることができる。ただ、特許文献1に記載の技術は、HDDの特性を利用した技術であり、CPUとGPUとの間のデータ転送に利用できるものではない。
【0006】
本発明は、CPUとGPUとの間で大量のデータを効率良く処理することのできるデータ処理装置およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第1の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、ホストにはデバイスとの間でデータ転送を行うためメモリ領域が確保され、デバイスは、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホストでは、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行うことを特徴とするデータ処理装置が提供される。
【0008】
すなわち、デバイスでデータを処理している間に、ホストからデバイスへのデータ転送を行うだけでなく、ホスト内でのメモリ領域への書き込みも行う。これにより、データ転送に要する時間を遮蔽することができ、ホストとデバイスとの全体としての処理時間を短縮することができる。
【0009】
ホストでは、分割された個々のデータに対してデバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、デバイスで次のデータが処理されている間にメモリ領域からの読み出しを行うことが望ましい。これにより、ホスト内でのメモリ領域への書き込みに要する時間だけでなく、メモリ領域からの読み出しに要する時間も遮蔽することができ、全体としての処理時間をさらに短縮することができる。
【0010】
ホストは、データの分割数が3以上であり、その分割数で分割されたデータのホストとデバイスとの間の転送時間と、分割されたデータのホスト内でのメモリ領域と間の転送時間との和が、デバイス内での分割されたデータの処理に要する時間より短く、かつメモリ領域として分割されたデータを転送できる容量を確保できることを条件として、データの分割を行うことが望ましい。この条件であれば、ホスト内でのメモリ領域との間のデータ転送時間と、ホストとデバイスとの間のデータ転送時間とを、完全に遮蔽することができる。
【0011】
データの分割を行う条件としてさらに、分割されたデータの量が、ホストとデバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、分割数を決定することが望ましい。分割数を大きくしすぎると、1度に転送するデータ量が少なくなり、データ転送に伴う処理のオーバーヘッドが大きくなるため、転送効率が低下してしまう。このような状態でデータ転送を行うことは、処理負荷の増加を伴ってしまう。このような事態を避けるために、最適な転送速度を維持できるように分割数を決定する。
【0012】
ホストからデバイスに転送されるデータが画像データであり、デバイスは、色変換処理および2値化処理を行って印刷用のハーフトーンデータをホストに転送する構成とすることができる。すなわち、データ処理装置を印刷コントローラーとして利用することができる。
【0013】
本発明の第2の観点によると、画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から印刷用のデータを受け取って印刷を実行する印刷装置とを有し、データ処理装置は、画像データを印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、デバイスにより得られた印刷用のデータを印刷装置に出力するホストとを有し、ホストにはデバイスへの画像データの転送およびデバイスからの印刷用データの転送を行うためメモリ領域が確保され、デバイスは、ホストからの画像データを処理している間に並列してメモリ領域へのアクセスを行って印刷用データの転送を行い、ホストでは、デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、デバイスで前回の画像データが処理されている間に、メモリ領域への書き込みを行うことを特徴とする印刷システムが提供される。
【0014】
本発明の他の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせることを特徴とするプログラムが提供される。
【図面の簡単な説明】
【0015】
【図1】本発明の実施の形態に係るデータ処理装置のブロック構成図である。
【図2】図1に示すデータ処理装置内のGPUの構成例を示すブロック図である。
【図3】図1に示すデータ処理装置におけるGPGPUの処理の流れを説明する図である。
【図4】図1に示すデータ処理装置内のGPUによる非同期処理を説明する図である。
【図5】図5に示すストリームの実行順序を説明する図である。
【図6】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図7】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図8】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図9】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図10】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図11】図1に示すデータ処理装置内のホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図12】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図13】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図14】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図15】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図16】図6から図15を参照して説明した一連の処理の流れを示す図である。
【図17】図1に示すデータ処理内のCPUが実行する非同期転送を行うか否かの判断の処理フローを示す図である。
【図18】GPGPUにおける処理時間の割合の例を示す図である。
【図19】一般的なCPUと図2に示すGPUとの並列処理の違いを説明する図であり、画像を1スレッド1ラスターで塗りつぶす場合の進捗状況を示す。
【図20】図2に示すGPUによるメモリの結合を説明する図である。
【図21】各スレッドを実行するストリーミングプロセッサへのデータの読み込みを説明する図である。
【図22】横方向のデータに関連性のあるデータ配列例を示す図である。
【図23】図22に示すデータ配列を転置したデータ配列を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施の形態について、図面を参照して説明する。以下の説明においては、GPUとそれに関連する電子部品が搭載されたボードあるいはカードの形態の装置を「デバイス」、このデバイスが装着されるコンピュータの主要部(CPU(中央処理装置)およびとそれに関連する電子部品)を「ホスト」という。
【0017】
[システム構成]
図1は、本発明の実施の形態に係るデータ処理装置のブロック構成図である。このデータ処理装置1は、ホスト2とデバイス3とを有し、表示装置4および印刷装置5が接続される。データ処理装置1にはまた、図示していないが、キーボードやマウスなど、各種の入出力装置が接続される。
【0018】
ホスト2は、CPU11、システムメモリ12、およびチップセットを構成するノースブリッジ13、サウスブリッジ14を有する。ノースブリッジ13は、CPU11とシステムモメリ12とを接続し、また、これらとデバイス3とを接続する。サウスブリッジ14は、ノースブリッジ13と印刷装置5とを接続する。サウスブリッジ14はまた、ノースブリッジ13と、図外の内部記憶装置、グラフィックス表示以外の入出力装置、ネットワークインターフェース等の各種インターフェース等とを接続する。
【0019】
デバイス3は、GPU21と、グラフィックスメモリ22とを有する。GPU21は、ノースブリッジ13を介して、CPU11およびシステムメモリ12に接続される。GPU21にはまた、表示装置4が接続される。GPU21は、CPU11からノースブリッジ13を介して送られてきたグラフィックスデータ、あるいはノースブリッジ13を介してシステムメモリ12から読み込んだグラフィックスデータを処理し、表示装置4へ出力することができる。
【0020】
デバイス3は、複数の処理を非同期で並列に実行可能な構成であり、ホスト2は、このデバイス2との間でデータの授受を行う。ホスト2内では、システムメモリ12内に、デバイス3との間でデータ転送を行うためメモリ領域が確保される。デバイス3は、ホスト2からのデータを処理している間に並列してシステムメモリ12内に確保されたメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行う。
【0021】
また、デバイス3内のGPU21には、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられている。ホスト2は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数のストリーリングプロセッサー37のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
【0022】
図1に示すデータ処理装置1は、印刷装置5と共に、印刷システムを構成することができる。すなわち、データ処理装置1は、画像データを印刷用のデータに変換する処理を行い、印刷装置5が、データ処理装置1から印刷用のデータを受け取って印刷を実行する。この場合、デバイス3が、画像データを印刷用のデータに変換するための処理を複数並列に実行する。ホスト2は、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行うとともに、GPU21内の複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、画像データの順序を操作する。デバイス3は、画像データを印刷用のデータに変換するための処理を複数並列に実行し、ホスト2は、デバイス3から印刷用のデータを受け取って、印刷装置5に出力する。
【0023】
[GPUの構成例]
図2は図1に示すGPU21の構成例を示すブロック図である。ここでは、NVIDIA社のGeForce(登録商標)8800GTXを例に説明する。このGPU21は、8個のテクスチャープロセッサークラスター(TPC)31を有する。各テクスチャープロセッサークラスター31は、2つのストリーミングマルチプロセッサー(SM)32と、コンスタントキャッシュ33およびテクスチャーキャッシュ34とにより構成される。ストリーミングマルチプロセッサー32はそれぞれ、シェアードメモリ35、命令ユニット36および8個のストリーミングプロセッサ(SP)37により構成される。この構成において、ストリーミングプロセッサ37が個々の計算ユニットとなり、8×2×8=128個の処理を並列に実行することができる。ここでは市販されている特定の製品の構成例を示しているが、基本的な構成、すなわち複数の計算ユニットが並列に処理する構成は、どのGPUでも同じある。
【0024】
[GPGPU]
図3は、GPGPUの処理の流れを説明する図である。GPGPUにより処理を行う場合、まず、必要なデータをホスト2からデバイス3に転送し、デバイス3内のグラフィックスメモリ22に書き込む(ステップS1)。デバイス3では、グラフィックスメモリ22に書き込まれたデータをGPU21により演算処理し(ステップS2)、その結果などをホスト2に書き戻す(ステップS3)。
【0025】
ホスト2とデバイス3との間のデータ転送方法としては、同期転送と非同期転送とがある。同期転送では、ホスト2内のCPU11とデバイス3との間で、ノースブリッジ13のみを経由して、データを転送する。これに対して非同期転送では、CPU11がシステムメモリ12へデータを書き込み、デバイス3のGPU21がそれを読み出す、あるいは、GPU21がシステムメモリ12へデータを書き込むことで、データを転送する。同期転送では、システムメモリ12への書き込みおよび読み出しの必要がない分だけ、データを高速に転送することができる。しかし、データ転送の間、CPU11およびGPU21が占有されることになる。一方、非同期転送では、データ転送時にはCPU11が解放されており、他の処理を行うことができる。また、GPU21では、複数のストリーミングマルチプロセッサー32が互いに非同期で処理を行うことができ、GPU21上でのプログラムであるカーネルの実行と、ホスト2との間のデータ転送とを、同時に実行することができる。
【0026】
[GPUの非同期処理]
図4および図5はGPU21による非同期処理を説明する図である。ここで、非同期で実行される個々の処理を「ストリーム」と呼ぶ。図4に示す例では、4つのストリーム#0〜#3でそれぞれ、配列の初期化というカーネルとデータ転送という命令が指定されている。GPU21は、同じストリームで指定された命令(カーネルまたはデータ転送)は、指定された順序で実行する。別のストリームで指定された命令は、どのストリームから実行するかは未定である。もし、あるストリームのカーネルと他のストリームのデータ転送が実行できるのであれば、それらを同時に実行する。
【0027】
したがって、図4に示すストリーム#0〜#3に対して、GPU21は、図5に示すような順序で命令を実行する。すなわち、GPU21は、まず、ストリーム#0で指定されたカーネルを実行する。続いて、GPU21は、ストリーム#0で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#1で指定されたカーネルとを実行する。次に、GPU21は、ストリーム#1で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#2で指定されたカーネルとを実行する。その後、GPU21は、ストリーム#2で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#3で指定されたカーネルとを実行し、最後に、ストリームストリーム#3で指定されたデータ転送(デバイス3からホスト2)を実行する。
【0028】
ホスト2とデバイス3との間でデータの非同期転送を行うためには、ホスト2側のメモリがページロックド・ホストメモリであることが必要であり、システムメモリ12内に専用の領域として確保する必要がある。しかし、システムメモリ12内に大容量のページロックド・ホストメモリを確保することは難しく、確保できたとしても、CPU11の処理に影響がでる可能性がある。また、デバイス3側のグラフィックスメモリ22にも限度がある。そこで、大量なデータを処理する場合には、それを分割して、ホスト2からデバイス3へのデータ転送、デバイス3でのカーネル実行、デバイス3からホスト2へのデータ転送を繰り返す必要がある。このとき、上述したように、ホスト2とデバイス3との間のデータ転送と、デバイス3でのカーネル実行とを同時に実行することで、ホスト2とデバイス3とのデータ転送に要する時間を隠蔽でき、全体としての処理速度を高速化することができる。さらに、本実施の形態では、ホスト2で処理する命令も同時に実行し、ホスト2内でのデータ転送に要する時間も隠蔽する。
【0029】
[非同期処理の流れ]
図6から図15は、ホスト2内でのデータ転送と、ホスト2とデバイス3との間のデータ転送と、デバイス3内でのカーネル実行との処理タイミングを説明する図である。ここでは、データを3つに分割して処理する場合を例に説明する。また、カーネルには、順に処理される第1処理と第2処理とが含まれるものとする。なお、第1処理および第2処理は、データ転送とのタイミングを説明するために便宜的に区分したものであり、必ずしも別々の処理である必要はない。また、第1処理および第2処理の少なくとも一方が複数の異なる処理を含んでもよく、1または複数の処理のひとつが第1処理と第2処理とにまたがってもよい。
【0030】
CPU11は、処理すべきデータ量とデバイス3で実行できるストリーム数に応じてデータを入力データ#0、#1、#2に分割し、分割されたデータ量に対応して、システムメモリ12内にページロックド・ホストメモリ15を確保する。ページロックド・ホストメモリ15を確保すると、CPU11は、図6に示すように、入力データ#0をページロックド・ホストメモリ15に書き込む。ページロックド・ホストメモリ15への書き込みがあると、デバイス3では、第1のストリームが、図7に示すように、書き込まれたデータ、すなわち入力データ#0を読み出す。
【0031】
入力データ#0を読み出した第1のストリームは、続いて、図8に示すように、第1処理を実行する。この第1処理が行われている間に、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第1のストリームは、第1処理を終了すると、図9に示すように、第2処理を実行して出力データ#0を生成する。この間に、第2のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#1を読み出す。
【0032】
入力データ#1を読み出した第2のストリームは、続いて、図10に示すように、第1処理を実行する。この第1処理が行われている間に、先ほどの第1のストリームは、出力データ#0をホスト2内のページロックド・ホストメモリ15に書き込み、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第2のストリームは、第1処理を終了すると、図11に示すように、第2処理を実行して出力データ#1を生成する。この間に、第3のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#2読み出し、CPU11は、ページロックド・ホストメモリ15から出力データ#0を読み出す。
【0033】
入力データ#2を読み出した第3のストリームは、続いて、図12に示すように、第1処理を実行する。この第1処理が行われている間に、第2のストリームは、出力データ#1をホスト2内のページロックド・ホストメモリ15に書き込む。第3のストリームは、第1処理を終了すると、図13に示すように、第2処理を実行して出力データ#2を生成する。この間に、CPU11は、ページロックド・ホストメモリ15から出力データ#1を読み出す。
【0034】
第3のストリームは、第2処理が終了すると、図14に示すように、第2処理で生成した出力データ#2をページロックド・ホストメモリ15に書き込む。そして、図15に示すように、CPU11が、ページロックド・ホストメモリ15から出力データ#2を読み出す。
【0035】
図16は、図6から図15を参照して説明した一連の処理の流れを示す図である。ここでは、入力データが画像データであり、第1処理として色変換処理、第2処理として2値化処理を行って、出力データとして印刷用のハーフトーンデータを得る場合を例に示す。この処理の流れは図6から図15を参照した通りである。なお、図6、図7、図14および図15の説明では、分割された最初の入力データ#0と最後の出力データ#2とを非同期で転送するものとしたが、これらのデータに関しては、ホスト2内(CPU11とページロックド・ホストメモリ15との間)のデータ転送時間を減らすため、同期転送を行っても良い。
【0036】
[非同期転送の可否判断]
図17は、非同期転送を行うか否かの判断の処理フローを示す図である。この判断は、データ転送を開始する前に、CPU11で行う。
【0037】
まず、CPU11は、3以上のデータの分割数nを決定する(ステップS11)。この分割数は、任意に決定してもよく、あらかじめ設定された値を用いてもよい。あらかじめ設定された値としては、デバイス3側で処理可能なストリーム数に応じて決定した値を用いることもできる。分割数nを3以上とするのは、デバイス3側でカーネルを実行している間にデータ転送を行うためである。一方、分割数nを大きくしすぎると、1度に転送するデータ量が少なくなる。分割されたデータ量が少なすぎると、データ転送に伴う処理のオーバーヘッドが大きくなるため、ホスト2とデバイス3との間のデータ転送効率が低下してしまう。最適転送速度を得るには、分割されたデータ量が所定値以上である必要がある(ステップS12でYes)。
【0038】
次に、CPU11は、最適転送速度とデータ量とから、分割されたデータのホスト2とデバイス3との間の転送時間T1を求める(ステップS13)。また、同じデータについて、ホスト2内でのCPU11とページロックド・ホストメモリ15との間の転送時間T2を求める(ステップS14)。さらに、デバイス3側におけるカーネル処理速度から、分割されたデータに対するカーネル処理時間T3を推定する(ステップS15)。そして、T1+T2≦T3であり(ステップS16でYes)、分割されたデータ量に相当するページロックド・ホストメモリ15を転送領域として確保できる場合(ステップS17でYes)には、非同期転送が可能であると判断する。
【0039】
CPU11はさらに、ステップS12、S16またはS17でNoの場合には、分割数nを変更し(ステップS18)、3以上の分割数n(ステップS19でYes)について、ステップS12からステップS18を繰り返す。分割数nが1または2、あるいはステップS12、S16およびS17の条件をすべて満たす分割数nが存在しない場合(ステップS19でNo)には、非同期転送は不可であると判断する。なお、ステップS12、S16、S17の条件をすべて満たす分割数nが存在しないとの判断は、図17に示すフローを所定回数繰り返した時点で行ってもよい。
【0040】
データの分割は、均等である必要はない。特に、最初に転送されるデータのサイズは小さいことが望ましい。また、GPU21の入力データサイズは一般に出力データサイズより大きいので、転送時間T1としては、ホスト2からデバイス3への転送時間を考えれば十分である。GPU21の出力データサイズが入力データサイズより大きくなるような場合には、CPU11でデバイス3からホスト2への転送時間を予測し、それを転送時間T1とする。また、ホスト2内の転送時間T2についても、CPU11からページロックド・ホストメモリ15への書き込み時間を考慮すれば十分であるが、必要であれば、ページロックド・ホストメモリ15からCPU11への読み出し時間も考慮することができる。
【0041】
[処理時間の隠蔽効果]
図18は、GPGPUにおける処理時間の割合の例を示す図である。ここでは、画像データを入力とし、GPGPUにより色変換処理と2値化処理を行って、印刷用のハーフトーンデータを得る場合の例を示す。この例では、入力画像データのホスト2内での転送A1に10%、入力画像データのホスト2からデバイス3への転送A2に4%、色変換処理B1に33%、2値化処理B2に45%、ハーフトーンデータのデバイス3からホスト2への転送A3に3%、ハーフトーンデータのホスト2内の転送A4に5%の時間がかかっている。このような処理において、ホスト2とデバイス3との間のデータ転送A2、A3と、デバイス3でのカーネル実行とを同時に実行することで、7%の処理時間を隠蔽し、全体としての処理速度を高速化することができる。さらに、ホスト2内でのデータ転送A1、A4についても、デバイス3でのカーネル実行とを同時に行うことで、15%の処理時間を隠蔽することができる。
【0042】
[データ処理の順序の操作]
CPU11で入力データを複数に分割する際に、GPU21の処理特性を考慮して、そのデータ順を入れ替えることができる。そのような実施の形態について以下に説明する。
【0043】
図19は、一般的なCPUとGPUとの並列処理の違いを説明する図であり、画像を1スレッド1ラスターで塗りつぶす場合の進捗状況を示す。図2に示すGPU21の構成例を参照して説明すると、GPU21は、個々のストリーミングプロセッサー37により、128個の一連の処理を並列に実行することができる。この一連の処理を「スレッド」と呼ぶ。CPUも複数のスレッドを並列に(マルチコアで別々に、あるいは個々のコアで時分割で)実行できるが、GPU21の並列処理は、CPUのものとは少し異なる。CPUでは、図19(A)に示すように、個々のスレッドを独立して実行させることができる。このため、スレッド毎に処理の進捗状況は異なったものとなる。一方、図2に示すGPU21では、ストリーミングマルチプロセッサー32単位で、4クロックにわたり同じ命令を実行する。すなわち、4クロック×8ストリーミングプロセッサ=32スレッドであり、32スレッド単位で同じ命令が実行される。4クロックという値は、ハードウェアの制約である。たとえば、画像を塗りつぶす処理を各スレッドで1ラスターずつ行う場合、GPU21では、32スレッド単位で実行するため、図19(B)に示すように、連続する32スレッドの処理の進捗状況は同じとなる。
【0044】
このように、GPU21のスレッド実行は、CPUの処理と異なり、スレッド間で関連をもっている。このような例のひとつが、メモリの結合である。GPU21が使用するメモリには、読み書き可能でキャッシュは使用しないグローバルメモリ、読み取り専用でキャッシュを使用するテクスチャーメモリ、読み取り専用でキャッシュを使用するコンスタントメモリがある。コンスタントメモリは、サイズは小さいが、キャッシュからデータを読み出せる場合には、レジスタと同じくらい高速である。これらのメモリのうち、グローバルメモリに関しては、特定の条件に基づいてアクセスした場合に、それらのアクセスを結合して、アクセス速度を最大で10倍程度に高速化することができる。
【0045】
図20は、GPU21によるメモリの結合を説明する図である。GPU21によりメモリの結合を行うことができるのは、4、8または16バイト単位のアクセスであり、スレッドが順次アクセスし、半ワープ(16スレッド)毎のアドレスの先頭が64の倍数である場合である。すなわち、GPU21は、32ビット、64ビット、128ビットのデータを1命令でレジスタに読み込むことができる。このため、たとえば整数型(32ビット)の16データ(64バイト)の配列を読み込む場合に、結合しなければ32ビットのロード命令を16回繰り返す必要があるが、結合すれば、128ビットのロード命令を4回で実行することができる。
【0046】
図21は、各スレッドを実行するストリーミングプロセッサ37へのデータの読み込みを説明する図である。メモリ結合により、ひとつのストリーミングマルチプロセッサー32内の8個のストリーミングプロセッサ37が、連続して、ID=0〜7、8〜15、16〜23、24〜32のデータを読み出すことができる。しかし、データ配列内のひとつの方向にデータの関連性がある場合には、メモリ結合を有効に利用することができない。たとえば、図21に示す例において、IDの値が連続する方向にデータの関連性がある場合には、その連続する方向のデータをひとつのストリーミングプロセッサ37に読み込む必要がある。
【0047】
図22は、横方向のデータに関連性のあるデータ配列例を示す図である。ここでは、m行n列の配列を示す。たとえば、画像データをラスター方向に処理する場合に、ディザ処理やスムージング処理では、データ配列の横方向のデータ(0,0)〜(n,0)、(0,1)〜(n,1)、..(0,m)〜(n,m)にそれぞれ関連性がある。一方、高速処理のためには、1ラスターあるいは場合によっては少数ラスターを1スレッドで処理することが望ましい。このような場合には、データ配列を転置し、関連のあるデータが連続してひとつのストリーミングプロセッサ37に読み込まれるようにする。
【0048】
図23は、図22に示すデータ配列を転置したデータ配列を示す図である。このようにデータ配列を転置することで、データ(0,0)〜(n,0)をひとつのストリーミングプロセッサ37に、データ(0,1)〜(n,1)を次のストリーミングプロセッサ37にと、関連のあるデータを同じストリーミングプロセッサ37にシーケンシャルに読み込むことができる。このように、関連のあるデータをシーケンシャルに読み込んで結合できるので、高速のメモリアクセスが可能となる。この方法は、グローバルメモリだけでなく、テクスチャーメモリにも有効である。テクスチャーメモリの場合は、キャッシュに長いデータを取り込むことができ、キャシュを有効活用できるようになる。
【0049】
データ配列の転置は、分割する前の入力データに対して行ってもよく、分割した後のデータに対して行ってもよい。データ配列の各要素のサイズは、データの関連性によって決定される。
【0050】
[他の実施の形態]
以上説明したデータ処理装置および印刷システムは、GPUを有するデバイスが設けられた汎用のコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせるプログラム、および、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段(ストリーミングプロセッサー37)のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させるプログラムをインストールすることにより、実現することができる。
【0051】
以上、本発明の実施の形態に係るデータ処理装置、印刷システムおよびプログラムについて説明したが、本発明は要旨を変更しない限り種々変更実施できる。たとえば、GPUとしては、上述の特定のものだけでなく、GPGPUのためのツールが提供されるどのようなGPUを用いてもよい。また、処理対象とするデータとしては、画像データを印列用のデータに変換する場合だけでなく、計算物理学、映像および画像の処理、データベース管理、生命工学等でも利用できる。
【符号の説明】
【0052】
1 データ処理装置、2 ホスト、3 デバイス、4 表示装置、5 印刷装置、11 CPU、12 システムメモリ、13 ノースブリッジ、14 サウスブリッジ、15 ページロッグド・ホストメモリ(メモリ領域)、21 GPU、22 グラフィックスメモリ、31 テクスチャープロセッサークラスター、32 ストリーミングマルチプロセッサー、33 コンスタントキャッシュ、34 テクスチャーキャッシュ、35 シェアードメモリ、36 命令ユニット、37 ストリーミングプロセッサ
【技術分野】
【0001】
本発明は、データ処理装置、印刷システムおよびプログラムに関する。
【背景技術】
【0002】
コンピュータ内に取り付けられてグラフックスを処理するデバイスとして、従来から、GPU(Graphics Processing Unit)が利用されている。GPUは、本来はグラフィックス処理のためのものであるが、近年になって、汎用計算に使用するための開発環境がメーカーから提供されている。このように、汎用計算にGPUを利用する技術は、GPGPU(General Purpose computing on GPU)として知られている。現在、GPGPUは、計算物理学、映像および画像の処理、データベース管理、生命工学等の分野で利用されている。
【0003】
GPUは、汎用の処理装置であるCPU(中央処理装置:Central Processing Unit)に比べ、浮動小数点演算を並列かつ高速に実行することができる。しかし、GPUは、CPUのように分岐予測や非順次命令実行などの制御ハードウェアを多く備えているわけではないので、そのような処理は不得手である。また、GPUは、CPUとは異なり、キャッシュの効率化などの複雑な処理はできない。すなわち、GPUは、大量のデータに並列に同じ演算を繰り返すような用途であれば、CPUに比べ非常に効率よく高速に処理を実行できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2003−198818号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
CPUとGPUとの間で大量のデータを効率良く処理するためには、相互間のデータ転送を効率よく行う必要がある。データ転送、特に画像データの転送を効率よく行うための技術として、特許文献1には、画像メモリとハードディスクドライブ(HDD)との間での画像の同時転送技術が開示されている。特許文献1に開示の技術によれば、単位画像の分割転送を行うことで、個々の画像によるHDDの占有時間を分散し、複数画像の同時処理を並行して効率よく実行させることができる。ただ、特許文献1に記載の技術は、HDDの特性を利用した技術であり、CPUとGPUとの間のデータ転送に利用できるものではない。
【0006】
本発明は、CPUとGPUとの間で大量のデータを効率良く処理することのできるデータ処理装置およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第1の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、ホストにはデバイスとの間でデータ転送を行うためメモリ領域が確保され、デバイスは、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホストでは、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行うことを特徴とするデータ処理装置が提供される。
【0008】
すなわち、デバイスでデータを処理している間に、ホストからデバイスへのデータ転送を行うだけでなく、ホスト内でのメモリ領域への書き込みも行う。これにより、データ転送に要する時間を遮蔽することができ、ホストとデバイスとの全体としての処理時間を短縮することができる。
【0009】
ホストでは、分割された個々のデータに対してデバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、デバイスで次のデータが処理されている間にメモリ領域からの読み出しを行うことが望ましい。これにより、ホスト内でのメモリ領域への書き込みに要する時間だけでなく、メモリ領域からの読み出しに要する時間も遮蔽することができ、全体としての処理時間をさらに短縮することができる。
【0010】
ホストは、データの分割数が3以上であり、その分割数で分割されたデータのホストとデバイスとの間の転送時間と、分割されたデータのホスト内でのメモリ領域と間の転送時間との和が、デバイス内での分割されたデータの処理に要する時間より短く、かつメモリ領域として分割されたデータを転送できる容量を確保できることを条件として、データの分割を行うことが望ましい。この条件であれば、ホスト内でのメモリ領域との間のデータ転送時間と、ホストとデバイスとの間のデータ転送時間とを、完全に遮蔽することができる。
【0011】
データの分割を行う条件としてさらに、分割されたデータの量が、ホストとデバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、分割数を決定することが望ましい。分割数を大きくしすぎると、1度に転送するデータ量が少なくなり、データ転送に伴う処理のオーバーヘッドが大きくなるため、転送効率が低下してしまう。このような状態でデータ転送を行うことは、処理負荷の増加を伴ってしまう。このような事態を避けるために、最適な転送速度を維持できるように分割数を決定する。
【0012】
ホストからデバイスに転送されるデータが画像データであり、デバイスは、色変換処理および2値化処理を行って印刷用のハーフトーンデータをホストに転送する構成とすることができる。すなわち、データ処理装置を印刷コントローラーとして利用することができる。
【0013】
本発明の第2の観点によると、画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から印刷用のデータを受け取って印刷を実行する印刷装置とを有し、データ処理装置は、画像データを印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、デバイスにより得られた印刷用のデータを印刷装置に出力するホストとを有し、ホストにはデバイスへの画像データの転送およびデバイスからの印刷用データの転送を行うためメモリ領域が確保され、デバイスは、ホストからの画像データを処理している間に並列してメモリ領域へのアクセスを行って印刷用データの転送を行い、ホストでは、デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、デバイスで前回の画像データが処理されている間に、メモリ領域への書き込みを行うことを特徴とする印刷システムが提供される。
【0014】
本発明の他の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせることを特徴とするプログラムが提供される。
【図面の簡単な説明】
【0015】
【図1】本発明の実施の形態に係るデータ処理装置のブロック構成図である。
【図2】図1に示すデータ処理装置内のGPUの構成例を示すブロック図である。
【図3】図1に示すデータ処理装置におけるGPGPUの処理の流れを説明する図である。
【図4】図1に示すデータ処理装置内のGPUによる非同期処理を説明する図である。
【図5】図5に示すストリームの実行順序を説明する図である。
【図6】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図7】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図8】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図9】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図10】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図11】図1に示すデータ処理装置内のホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図12】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図13】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図14】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図15】図1に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図16】図6から図15を参照して説明した一連の処理の流れを示す図である。
【図17】図1に示すデータ処理内のCPUが実行する非同期転送を行うか否かの判断の処理フローを示す図である。
【図18】GPGPUにおける処理時間の割合の例を示す図である。
【図19】一般的なCPUと図2に示すGPUとの並列処理の違いを説明する図であり、画像を1スレッド1ラスターで塗りつぶす場合の進捗状況を示す。
【図20】図2に示すGPUによるメモリの結合を説明する図である。
【図21】各スレッドを実行するストリーミングプロセッサへのデータの読み込みを説明する図である。
【図22】横方向のデータに関連性のあるデータ配列例を示す図である。
【図23】図22に示すデータ配列を転置したデータ配列を示す図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施の形態について、図面を参照して説明する。以下の説明においては、GPUとそれに関連する電子部品が搭載されたボードあるいはカードの形態の装置を「デバイス」、このデバイスが装着されるコンピュータの主要部(CPU(中央処理装置)およびとそれに関連する電子部品)を「ホスト」という。
【0017】
[システム構成]
図1は、本発明の実施の形態に係るデータ処理装置のブロック構成図である。このデータ処理装置1は、ホスト2とデバイス3とを有し、表示装置4および印刷装置5が接続される。データ処理装置1にはまた、図示していないが、キーボードやマウスなど、各種の入出力装置が接続される。
【0018】
ホスト2は、CPU11、システムメモリ12、およびチップセットを構成するノースブリッジ13、サウスブリッジ14を有する。ノースブリッジ13は、CPU11とシステムモメリ12とを接続し、また、これらとデバイス3とを接続する。サウスブリッジ14は、ノースブリッジ13と印刷装置5とを接続する。サウスブリッジ14はまた、ノースブリッジ13と、図外の内部記憶装置、グラフィックス表示以外の入出力装置、ネットワークインターフェース等の各種インターフェース等とを接続する。
【0019】
デバイス3は、GPU21と、グラフィックスメモリ22とを有する。GPU21は、ノースブリッジ13を介して、CPU11およびシステムメモリ12に接続される。GPU21にはまた、表示装置4が接続される。GPU21は、CPU11からノースブリッジ13を介して送られてきたグラフィックスデータ、あるいはノースブリッジ13を介してシステムメモリ12から読み込んだグラフィックスデータを処理し、表示装置4へ出力することができる。
【0020】
デバイス3は、複数の処理を非同期で並列に実行可能な構成であり、ホスト2は、このデバイス2との間でデータの授受を行う。ホスト2内では、システムメモリ12内に、デバイス3との間でデータ転送を行うためメモリ領域が確保される。デバイス3は、ホスト2からのデータを処理している間に並列してシステムメモリ12内に確保されたメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行う。
【0021】
また、デバイス3内のGPU21には、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられている。ホスト2は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数のストリーリングプロセッサー37のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
【0022】
図1に示すデータ処理装置1は、印刷装置5と共に、印刷システムを構成することができる。すなわち、データ処理装置1は、画像データを印刷用のデータに変換する処理を行い、印刷装置5が、データ処理装置1から印刷用のデータを受け取って印刷を実行する。この場合、デバイス3が、画像データを印刷用のデータに変換するための処理を複数並列に実行する。ホスト2は、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行うとともに、GPU21内の複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、画像データの順序を操作する。デバイス3は、画像データを印刷用のデータに変換するための処理を複数並列に実行し、ホスト2は、デバイス3から印刷用のデータを受け取って、印刷装置5に出力する。
【0023】
[GPUの構成例]
図2は図1に示すGPU21の構成例を示すブロック図である。ここでは、NVIDIA社のGeForce(登録商標)8800GTXを例に説明する。このGPU21は、8個のテクスチャープロセッサークラスター(TPC)31を有する。各テクスチャープロセッサークラスター31は、2つのストリーミングマルチプロセッサー(SM)32と、コンスタントキャッシュ33およびテクスチャーキャッシュ34とにより構成される。ストリーミングマルチプロセッサー32はそれぞれ、シェアードメモリ35、命令ユニット36および8個のストリーミングプロセッサ(SP)37により構成される。この構成において、ストリーミングプロセッサ37が個々の計算ユニットとなり、8×2×8=128個の処理を並列に実行することができる。ここでは市販されている特定の製品の構成例を示しているが、基本的な構成、すなわち複数の計算ユニットが並列に処理する構成は、どのGPUでも同じある。
【0024】
[GPGPU]
図3は、GPGPUの処理の流れを説明する図である。GPGPUにより処理を行う場合、まず、必要なデータをホスト2からデバイス3に転送し、デバイス3内のグラフィックスメモリ22に書き込む(ステップS1)。デバイス3では、グラフィックスメモリ22に書き込まれたデータをGPU21により演算処理し(ステップS2)、その結果などをホスト2に書き戻す(ステップS3)。
【0025】
ホスト2とデバイス3との間のデータ転送方法としては、同期転送と非同期転送とがある。同期転送では、ホスト2内のCPU11とデバイス3との間で、ノースブリッジ13のみを経由して、データを転送する。これに対して非同期転送では、CPU11がシステムメモリ12へデータを書き込み、デバイス3のGPU21がそれを読み出す、あるいは、GPU21がシステムメモリ12へデータを書き込むことで、データを転送する。同期転送では、システムメモリ12への書き込みおよび読み出しの必要がない分だけ、データを高速に転送することができる。しかし、データ転送の間、CPU11およびGPU21が占有されることになる。一方、非同期転送では、データ転送時にはCPU11が解放されており、他の処理を行うことができる。また、GPU21では、複数のストリーミングマルチプロセッサー32が互いに非同期で処理を行うことができ、GPU21上でのプログラムであるカーネルの実行と、ホスト2との間のデータ転送とを、同時に実行することができる。
【0026】
[GPUの非同期処理]
図4および図5はGPU21による非同期処理を説明する図である。ここで、非同期で実行される個々の処理を「ストリーム」と呼ぶ。図4に示す例では、4つのストリーム#0〜#3でそれぞれ、配列の初期化というカーネルとデータ転送という命令が指定されている。GPU21は、同じストリームで指定された命令(カーネルまたはデータ転送)は、指定された順序で実行する。別のストリームで指定された命令は、どのストリームから実行するかは未定である。もし、あるストリームのカーネルと他のストリームのデータ転送が実行できるのであれば、それらを同時に実行する。
【0027】
したがって、図4に示すストリーム#0〜#3に対して、GPU21は、図5に示すような順序で命令を実行する。すなわち、GPU21は、まず、ストリーム#0で指定されたカーネルを実行する。続いて、GPU21は、ストリーム#0で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#1で指定されたカーネルとを実行する。次に、GPU21は、ストリーム#1で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#2で指定されたカーネルとを実行する。その後、GPU21は、ストリーム#2で指定されたデータ転送(デバイス3からホスト2)と、ストリーム#3で指定されたカーネルとを実行し、最後に、ストリームストリーム#3で指定されたデータ転送(デバイス3からホスト2)を実行する。
【0028】
ホスト2とデバイス3との間でデータの非同期転送を行うためには、ホスト2側のメモリがページロックド・ホストメモリであることが必要であり、システムメモリ12内に専用の領域として確保する必要がある。しかし、システムメモリ12内に大容量のページロックド・ホストメモリを確保することは難しく、確保できたとしても、CPU11の処理に影響がでる可能性がある。また、デバイス3側のグラフィックスメモリ22にも限度がある。そこで、大量なデータを処理する場合には、それを分割して、ホスト2からデバイス3へのデータ転送、デバイス3でのカーネル実行、デバイス3からホスト2へのデータ転送を繰り返す必要がある。このとき、上述したように、ホスト2とデバイス3との間のデータ転送と、デバイス3でのカーネル実行とを同時に実行することで、ホスト2とデバイス3とのデータ転送に要する時間を隠蔽でき、全体としての処理速度を高速化することができる。さらに、本実施の形態では、ホスト2で処理する命令も同時に実行し、ホスト2内でのデータ転送に要する時間も隠蔽する。
【0029】
[非同期処理の流れ]
図6から図15は、ホスト2内でのデータ転送と、ホスト2とデバイス3との間のデータ転送と、デバイス3内でのカーネル実行との処理タイミングを説明する図である。ここでは、データを3つに分割して処理する場合を例に説明する。また、カーネルには、順に処理される第1処理と第2処理とが含まれるものとする。なお、第1処理および第2処理は、データ転送とのタイミングを説明するために便宜的に区分したものであり、必ずしも別々の処理である必要はない。また、第1処理および第2処理の少なくとも一方が複数の異なる処理を含んでもよく、1または複数の処理のひとつが第1処理と第2処理とにまたがってもよい。
【0030】
CPU11は、処理すべきデータ量とデバイス3で実行できるストリーム数に応じてデータを入力データ#0、#1、#2に分割し、分割されたデータ量に対応して、システムメモリ12内にページロックド・ホストメモリ15を確保する。ページロックド・ホストメモリ15を確保すると、CPU11は、図6に示すように、入力データ#0をページロックド・ホストメモリ15に書き込む。ページロックド・ホストメモリ15への書き込みがあると、デバイス3では、第1のストリームが、図7に示すように、書き込まれたデータ、すなわち入力データ#0を読み出す。
【0031】
入力データ#0を読み出した第1のストリームは、続いて、図8に示すように、第1処理を実行する。この第1処理が行われている間に、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第1のストリームは、第1処理を終了すると、図9に示すように、第2処理を実行して出力データ#0を生成する。この間に、第2のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#1を読み出す。
【0032】
入力データ#1を読み出した第2のストリームは、続いて、図10に示すように、第1処理を実行する。この第1処理が行われている間に、先ほどの第1のストリームは、出力データ#0をホスト2内のページロックド・ホストメモリ15に書き込み、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第2のストリームは、第1処理を終了すると、図11に示すように、第2処理を実行して出力データ#1を生成する。この間に、第3のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#2読み出し、CPU11は、ページロックド・ホストメモリ15から出力データ#0を読み出す。
【0033】
入力データ#2を読み出した第3のストリームは、続いて、図12に示すように、第1処理を実行する。この第1処理が行われている間に、第2のストリームは、出力データ#1をホスト2内のページロックド・ホストメモリ15に書き込む。第3のストリームは、第1処理を終了すると、図13に示すように、第2処理を実行して出力データ#2を生成する。この間に、CPU11は、ページロックド・ホストメモリ15から出力データ#1を読み出す。
【0034】
第3のストリームは、第2処理が終了すると、図14に示すように、第2処理で生成した出力データ#2をページロックド・ホストメモリ15に書き込む。そして、図15に示すように、CPU11が、ページロックド・ホストメモリ15から出力データ#2を読み出す。
【0035】
図16は、図6から図15を参照して説明した一連の処理の流れを示す図である。ここでは、入力データが画像データであり、第1処理として色変換処理、第2処理として2値化処理を行って、出力データとして印刷用のハーフトーンデータを得る場合を例に示す。この処理の流れは図6から図15を参照した通りである。なお、図6、図7、図14および図15の説明では、分割された最初の入力データ#0と最後の出力データ#2とを非同期で転送するものとしたが、これらのデータに関しては、ホスト2内(CPU11とページロックド・ホストメモリ15との間)のデータ転送時間を減らすため、同期転送を行っても良い。
【0036】
[非同期転送の可否判断]
図17は、非同期転送を行うか否かの判断の処理フローを示す図である。この判断は、データ転送を開始する前に、CPU11で行う。
【0037】
まず、CPU11は、3以上のデータの分割数nを決定する(ステップS11)。この分割数は、任意に決定してもよく、あらかじめ設定された値を用いてもよい。あらかじめ設定された値としては、デバイス3側で処理可能なストリーム数に応じて決定した値を用いることもできる。分割数nを3以上とするのは、デバイス3側でカーネルを実行している間にデータ転送を行うためである。一方、分割数nを大きくしすぎると、1度に転送するデータ量が少なくなる。分割されたデータ量が少なすぎると、データ転送に伴う処理のオーバーヘッドが大きくなるため、ホスト2とデバイス3との間のデータ転送効率が低下してしまう。最適転送速度を得るには、分割されたデータ量が所定値以上である必要がある(ステップS12でYes)。
【0038】
次に、CPU11は、最適転送速度とデータ量とから、分割されたデータのホスト2とデバイス3との間の転送時間T1を求める(ステップS13)。また、同じデータについて、ホスト2内でのCPU11とページロックド・ホストメモリ15との間の転送時間T2を求める(ステップS14)。さらに、デバイス3側におけるカーネル処理速度から、分割されたデータに対するカーネル処理時間T3を推定する(ステップS15)。そして、T1+T2≦T3であり(ステップS16でYes)、分割されたデータ量に相当するページロックド・ホストメモリ15を転送領域として確保できる場合(ステップS17でYes)には、非同期転送が可能であると判断する。
【0039】
CPU11はさらに、ステップS12、S16またはS17でNoの場合には、分割数nを変更し(ステップS18)、3以上の分割数n(ステップS19でYes)について、ステップS12からステップS18を繰り返す。分割数nが1または2、あるいはステップS12、S16およびS17の条件をすべて満たす分割数nが存在しない場合(ステップS19でNo)には、非同期転送は不可であると判断する。なお、ステップS12、S16、S17の条件をすべて満たす分割数nが存在しないとの判断は、図17に示すフローを所定回数繰り返した時点で行ってもよい。
【0040】
データの分割は、均等である必要はない。特に、最初に転送されるデータのサイズは小さいことが望ましい。また、GPU21の入力データサイズは一般に出力データサイズより大きいので、転送時間T1としては、ホスト2からデバイス3への転送時間を考えれば十分である。GPU21の出力データサイズが入力データサイズより大きくなるような場合には、CPU11でデバイス3からホスト2への転送時間を予測し、それを転送時間T1とする。また、ホスト2内の転送時間T2についても、CPU11からページロックド・ホストメモリ15への書き込み時間を考慮すれば十分であるが、必要であれば、ページロックド・ホストメモリ15からCPU11への読み出し時間も考慮することができる。
【0041】
[処理時間の隠蔽効果]
図18は、GPGPUにおける処理時間の割合の例を示す図である。ここでは、画像データを入力とし、GPGPUにより色変換処理と2値化処理を行って、印刷用のハーフトーンデータを得る場合の例を示す。この例では、入力画像データのホスト2内での転送A1に10%、入力画像データのホスト2からデバイス3への転送A2に4%、色変換処理B1に33%、2値化処理B2に45%、ハーフトーンデータのデバイス3からホスト2への転送A3に3%、ハーフトーンデータのホスト2内の転送A4に5%の時間がかかっている。このような処理において、ホスト2とデバイス3との間のデータ転送A2、A3と、デバイス3でのカーネル実行とを同時に実行することで、7%の処理時間を隠蔽し、全体としての処理速度を高速化することができる。さらに、ホスト2内でのデータ転送A1、A4についても、デバイス3でのカーネル実行とを同時に行うことで、15%の処理時間を隠蔽することができる。
【0042】
[データ処理の順序の操作]
CPU11で入力データを複数に分割する際に、GPU21の処理特性を考慮して、そのデータ順を入れ替えることができる。そのような実施の形態について以下に説明する。
【0043】
図19は、一般的なCPUとGPUとの並列処理の違いを説明する図であり、画像を1スレッド1ラスターで塗りつぶす場合の進捗状況を示す。図2に示すGPU21の構成例を参照して説明すると、GPU21は、個々のストリーミングプロセッサー37により、128個の一連の処理を並列に実行することができる。この一連の処理を「スレッド」と呼ぶ。CPUも複数のスレッドを並列に(マルチコアで別々に、あるいは個々のコアで時分割で)実行できるが、GPU21の並列処理は、CPUのものとは少し異なる。CPUでは、図19(A)に示すように、個々のスレッドを独立して実行させることができる。このため、スレッド毎に処理の進捗状況は異なったものとなる。一方、図2に示すGPU21では、ストリーミングマルチプロセッサー32単位で、4クロックにわたり同じ命令を実行する。すなわち、4クロック×8ストリーミングプロセッサ=32スレッドであり、32スレッド単位で同じ命令が実行される。4クロックという値は、ハードウェアの制約である。たとえば、画像を塗りつぶす処理を各スレッドで1ラスターずつ行う場合、GPU21では、32スレッド単位で実行するため、図19(B)に示すように、連続する32スレッドの処理の進捗状況は同じとなる。
【0044】
このように、GPU21のスレッド実行は、CPUの処理と異なり、スレッド間で関連をもっている。このような例のひとつが、メモリの結合である。GPU21が使用するメモリには、読み書き可能でキャッシュは使用しないグローバルメモリ、読み取り専用でキャッシュを使用するテクスチャーメモリ、読み取り専用でキャッシュを使用するコンスタントメモリがある。コンスタントメモリは、サイズは小さいが、キャッシュからデータを読み出せる場合には、レジスタと同じくらい高速である。これらのメモリのうち、グローバルメモリに関しては、特定の条件に基づいてアクセスした場合に、それらのアクセスを結合して、アクセス速度を最大で10倍程度に高速化することができる。
【0045】
図20は、GPU21によるメモリの結合を説明する図である。GPU21によりメモリの結合を行うことができるのは、4、8または16バイト単位のアクセスであり、スレッドが順次アクセスし、半ワープ(16スレッド)毎のアドレスの先頭が64の倍数である場合である。すなわち、GPU21は、32ビット、64ビット、128ビットのデータを1命令でレジスタに読み込むことができる。このため、たとえば整数型(32ビット)の16データ(64バイト)の配列を読み込む場合に、結合しなければ32ビットのロード命令を16回繰り返す必要があるが、結合すれば、128ビットのロード命令を4回で実行することができる。
【0046】
図21は、各スレッドを実行するストリーミングプロセッサ37へのデータの読み込みを説明する図である。メモリ結合により、ひとつのストリーミングマルチプロセッサー32内の8個のストリーミングプロセッサ37が、連続して、ID=0〜7、8〜15、16〜23、24〜32のデータを読み出すことができる。しかし、データ配列内のひとつの方向にデータの関連性がある場合には、メモリ結合を有効に利用することができない。たとえば、図21に示す例において、IDの値が連続する方向にデータの関連性がある場合には、その連続する方向のデータをひとつのストリーミングプロセッサ37に読み込む必要がある。
【0047】
図22は、横方向のデータに関連性のあるデータ配列例を示す図である。ここでは、m行n列の配列を示す。たとえば、画像データをラスター方向に処理する場合に、ディザ処理やスムージング処理では、データ配列の横方向のデータ(0,0)〜(n,0)、(0,1)〜(n,1)、..(0,m)〜(n,m)にそれぞれ関連性がある。一方、高速処理のためには、1ラスターあるいは場合によっては少数ラスターを1スレッドで処理することが望ましい。このような場合には、データ配列を転置し、関連のあるデータが連続してひとつのストリーミングプロセッサ37に読み込まれるようにする。
【0048】
図23は、図22に示すデータ配列を転置したデータ配列を示す図である。このようにデータ配列を転置することで、データ(0,0)〜(n,0)をひとつのストリーミングプロセッサ37に、データ(0,1)〜(n,1)を次のストリーミングプロセッサ37にと、関連のあるデータを同じストリーミングプロセッサ37にシーケンシャルに読み込むことができる。このように、関連のあるデータをシーケンシャルに読み込んで結合できるので、高速のメモリアクセスが可能となる。この方法は、グローバルメモリだけでなく、テクスチャーメモリにも有効である。テクスチャーメモリの場合は、キャッシュに長いデータを取り込むことができ、キャシュを有効活用できるようになる。
【0049】
データ配列の転置は、分割する前の入力データに対して行ってもよく、分割した後のデータに対して行ってもよい。データ配列の各要素のサイズは、データの関連性によって決定される。
【0050】
[他の実施の形態]
以上説明したデータ処理装置および印刷システムは、GPUを有するデバイスが設けられた汎用のコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせるプログラム、および、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段(ストリーミングプロセッサー37)のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させるプログラムをインストールすることにより、実現することができる。
【0051】
以上、本発明の実施の形態に係るデータ処理装置、印刷システムおよびプログラムについて説明したが、本発明は要旨を変更しない限り種々変更実施できる。たとえば、GPUとしては、上述の特定のものだけでなく、GPGPUのためのツールが提供されるどのようなGPUを用いてもよい。また、処理対象とするデータとしては、画像データを印列用のデータに変換する場合だけでなく、計算物理学、映像および画像の処理、データベース管理、生命工学等でも利用できる。
【符号の説明】
【0052】
1 データ処理装置、2 ホスト、3 デバイス、4 表示装置、5 印刷装置、11 CPU、12 システムメモリ、13 ノースブリッジ、14 サウスブリッジ、15 ページロッグド・ホストメモリ(メモリ領域)、21 GPU、22 グラフィックスメモリ、31 テクスチャープロセッサークラスター、32 ストリーミングマルチプロセッサー、33 コンスタントキャッシュ、34 テクスチャーキャッシュ、35 シェアードメモリ、36 命令ユニット、37 ストリーミングプロセッサ
【特許請求の範囲】
【請求項1】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、
上記ホスト内には上記デバイスとの間でデータ転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行い、
上記ホストでは、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行う、
ことを特徴とするデータ処理装置。
【請求項2】
請求項1記載のデータ処理装置において、
前記ホストでは、分割された個々のデータに対して前記デバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、上記デバイスで次のデータが処理されている間に前記メモリ領域からの読み出しを行う、
ことを特徴とするデータ処理装置。
【請求項3】
請求項1または2記載のデータ処理装置において、
前記ホストは、データの分割数が3以上であり、その分割数で分割されたデータの前記ホストと前記デバイスとの間の転送時間と、上記分割されたデータの前記ホスト内での前記メモリ領域と間の転送時間との和が、前記デバイス内での上記分割されたデータの処理に要する時間より短く、かつ前記メモリ領域として上記分割されたデータを転送できる容量を確保できることを条件として、データの分割を行う、
ことを特徴とするデータ処理装置。
【請求項4】
請求項3記載のデータ処理装置において、
前記ホストは、前記分割されたデータの量が、前記ホストと前記デバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、前記分割数を決定する、
ことを特徴とするデータ処理装置。
【請求項5】
請求項1から4のいずれか1項記載のデータ処理装置において、
前記ホストから前記デバイスに転送されるデータは画像データであり、
前記デバイスは色変換処理および2値化処理を行って印刷用のハーフトーンデータを前記ホストに転送する、
ことを特徴とするデータ処理装置。
【請求項6】
画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から上記印刷用のデータを受け取って印刷を実行する印刷装置とを有し、
上記データ処理装置は、上記画像データを上記印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、上記デバイスにより得られた印刷用のデータを上記印刷装置に出力するホストとを有し、
上記ホスト内には上記デバイスへの画像データの転送および上記デバイスからの印刷用データの転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからの画像データを処理している間に並列して上記メモリ領域へのアクセスを行って印刷用データの転送を行い、
上記ホストでは、上記デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、上記デバイスで前回の画像データが処理されている間に、上記メモリ領域への書き込みを行う
ことを特徴とする印刷システム。
【請求項7】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、
上記ホストに上記デバイスとの間でデータ転送を行うためメモリ領域を確保し、
上記デバイスには、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行わせ、
上記ホストには、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行わせる、
ことを特徴とするプログラム。
【請求項1】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、
上記ホスト内には上記デバイスとの間でデータ転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行い、
上記ホストでは、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行う、
ことを特徴とするデータ処理装置。
【請求項2】
請求項1記載のデータ処理装置において、
前記ホストでは、分割された個々のデータに対して前記デバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、上記デバイスで次のデータが処理されている間に前記メモリ領域からの読み出しを行う、
ことを特徴とするデータ処理装置。
【請求項3】
請求項1または2記載のデータ処理装置において、
前記ホストは、データの分割数が3以上であり、その分割数で分割されたデータの前記ホストと前記デバイスとの間の転送時間と、上記分割されたデータの前記ホスト内での前記メモリ領域と間の転送時間との和が、前記デバイス内での上記分割されたデータの処理に要する時間より短く、かつ前記メモリ領域として上記分割されたデータを転送できる容量を確保できることを条件として、データの分割を行う、
ことを特徴とするデータ処理装置。
【請求項4】
請求項3記載のデータ処理装置において、
前記ホストは、前記分割されたデータの量が、前記ホストと前記デバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、前記分割数を決定する、
ことを特徴とするデータ処理装置。
【請求項5】
請求項1から4のいずれか1項記載のデータ処理装置において、
前記ホストから前記デバイスに転送されるデータは画像データであり、
前記デバイスは色変換処理および2値化処理を行って印刷用のハーフトーンデータを前記ホストに転送する、
ことを特徴とするデータ処理装置。
【請求項6】
画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から上記印刷用のデータを受け取って印刷を実行する印刷装置とを有し、
上記データ処理装置は、上記画像データを上記印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、上記デバイスにより得られた印刷用のデータを上記印刷装置に出力するホストとを有し、
上記ホスト内には上記デバイスへの画像データの転送および上記デバイスからの印刷用データの転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからの画像データを処理している間に並列して上記メモリ領域へのアクセスを行って印刷用データの転送を行い、
上記ホストでは、上記デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、上記デバイスで前回の画像データが処理されている間に、上記メモリ領域への書き込みを行う
ことを特徴とする印刷システム。
【請求項7】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、
上記ホストに上記デバイスとの間でデータ転送を行うためメモリ領域を確保し、
上記デバイスには、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行わせ、
上記ホストには、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行わせる、
ことを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2010−244096(P2010−244096A)
【公開日】平成22年10月28日(2010.10.28)
【国際特許分類】
【出願番号】特願2009−88709(P2009−88709)
【出願日】平成21年4月1日(2009.4.1)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
【公開日】平成22年10月28日(2010.10.28)
【国際特許分類】
【出願日】平成21年4月1日(2009.4.1)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
[ Back to top ]