JP2010244096A - データ処理装置、印刷システムおよびプログラム - Google Patents
データ処理装置、印刷システムおよびプログラム Download PDFInfo
- Publication number
- JP2010244096A JP2010244096A JP2009088709A JP2009088709A JP2010244096A JP 2010244096 A JP2010244096 A JP 2010244096A JP 2009088709 A JP2009088709 A JP 2009088709A JP 2009088709 A JP2009088709 A JP 2009088709A JP 2010244096 A JP2010244096 A JP 2010244096A
- Authority
- JP
- Japan
- Prior art keywords
- data
- host
- processing
- transfer
- memory area
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Multi Processors (AREA)
- Facsimiles In General (AREA)
Abstract
【課題】CPUとGPUとの間で、大量のデータを効率良く処理する。
【解決手段】複数の処理を非同期で並列に実行可能なデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2には、システムメモリ12内にデバイス3との間でデータ転送を行うためメモリ領域が確保され、デバイス3は、ホスト2からのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、メモリ領域への書き込みを行う。
【選択図】図1
【解決手段】複数の処理を非同期で並列に実行可能なデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2には、システムメモリ12内にデバイス3との間でデータ転送を行うためメモリ領域が確保され、デバイス3は、ホスト2からのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、メモリ領域への書き込みを行う。
【選択図】図1
Description
本発明は、データ処理装置、印刷システムおよびプログラムに関する。
コンピュータ内に取り付けられてグラフックスを処理するデバイスとして、従来から、GPU(Graphics Processing Unit)が利用されている。GPUは、本来はグラフィックス処理のためのものであるが、近年になって、汎用計算に使用するための開発環境がメーカーから提供されている。このように、汎用計算にGPUを利用する技術は、GPGPU(General Purpose computing on GPU)として知られている。現在、GPGPUは、計算物理学、映像および画像の処理、データベース管理、生命工学等の分野で利用されている。
GPUは、汎用の処理装置であるCPU(中央処理装置:Central Processing Unit)に比べ、浮動小数点演算を並列かつ高速に実行することができる。しかし、GPUは、CPUのように分岐予測や非順次命令実行などの制御ハードウェアを多く備えているわけではないので、そのような処理は不得手である。また、GPUは、CPUとは異なり、キャッシュの効率化などの複雑な処理はできない。すなわち、GPUは、大量のデータに並列に同じ演算を繰り返すような用途であれば、CPUに比べ非常に効率よく高速に処理を実行できる。
CPUとGPUとの間で大量のデータを効率良く処理するためには、相互間のデータ転送を効率よく行う必要がある。データ転送、特に画像データの転送を効率よく行うための技術として、特許文献1には、画像メモリとハードディスクドライブ(HDD)との間での画像の同時転送技術が開示されている。特許文献1に開示の技術によれば、単位画像の分割転送を行うことで、個々の画像によるHDDの占有時間を分散し、複数画像の同時処理を並行して効率よく実行させることができる。ただ、特許文献1に記載の技術は、HDDの特性を利用した技術であり、CPUとGPUとの間のデータ転送に利用できるものではない。
本発明は、CPUとGPUとの間で大量のデータを効率良く処理することのできるデータ処理装置およびデータ処理プログラムを提供することを目的とする。
本発明の第1の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、ホストにはデバイスとの間でデータ転送を行うためメモリ領域が確保され、デバイスは、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホストでは、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行うことを特徴とするデータ処理装置が提供される。
すなわち、デバイスでデータを処理している間に、ホストからデバイスへのデータ転送を行うだけでなく、ホスト内でのメモリ領域への書き込みも行う。これにより、データ転送に要する時間を遮蔽することができ、ホストとデバイスとの全体としての処理時間を短縮することができる。
ホストでは、分割された個々のデータに対してデバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、デバイスで次のデータが処理されている間にメモリ領域からの読み出しを行うことが望ましい。これにより、ホスト内でのメモリ領域への書き込みに要する時間だけでなく、メモリ領域からの読み出しに要する時間も遮蔽することができ、全体としての処理時間をさらに短縮することができる。
ホストは、データの分割数が3以上であり、その分割数で分割されたデータのホストとデバイスとの間の転送時間と、分割されたデータのホスト内でのメモリ領域と間の転送時間との和が、デバイス内での分割されたデータの処理に要する時間より短く、かつメモリ領域として分割されたデータを転送できる容量を確保できることを条件として、データの分割を行うことが望ましい。この条件であれば、ホスト内でのメモリ領域との間のデータ転送時間と、ホストとデバイスとの間のデータ転送時間とを、完全に遮蔽することができる。
データの分割を行う条件としてさらに、分割されたデータの量が、ホストとデバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、分割数を決定することが望ましい。分割数を大きくしすぎると、1度に転送するデータ量が少なくなり、データ転送に伴う処理のオーバーヘッドが大きくなるため、転送効率が低下してしまう。このような状態でデータ転送を行うことは、処理負荷の増加を伴ってしまう。このような事態を避けるために、最適な転送速度を維持できるように分割数を決定する。
ホストからデバイスに転送されるデータが画像データであり、デバイスは、色変換処理および2値化処理を行って印刷用のハーフトーンデータをホストに転送する構成とすることができる。すなわち、データ処理装置を印刷コントローラーとして利用することができる。
本発明の第2の観点によると、画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から印刷用のデータを受け取って印刷を実行する印刷装置とを有し、データ処理装置は、画像データを印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、デバイスにより得られた印刷用のデータを印刷装置に出力するホストとを有し、ホストにはデバイスへの画像データの転送およびデバイスからの印刷用データの転送を行うためメモリ領域が確保され、デバイスは、ホストからの画像データを処理している間に並列してメモリ領域へのアクセスを行って印刷用データの転送を行い、ホストでは、デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、デバイスで前回の画像データが処理されている間に、メモリ領域への書き込みを行うことを特徴とする印刷システムが提供される。
本発明の他の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせることを特徴とするプログラムが提供される。
以下、本発明の実施の形態について、図面を参照して説明する。以下の説明においては、GPUとそれに関連する電子部品が搭載されたボードあるいはカードの形態の装置を「デバイス」、このデバイスが装着されるコンピュータの主要部(CPU(中央処理装置)およびとそれに関連する電子部品)を「ホスト」という。
[システム構成]
図1は、本発明の実施の形態に係るデータ処理装置のブロック構成図である。このデータ処理装置1は、ホスト2とデバイス3とを有し、表示装置4および印刷装置5が接続される。データ処理装置1にはまた、図示していないが、キーボードやマウスなど、各種の入出力装置が接続される。
図1は、本発明の実施の形態に係るデータ処理装置のブロック構成図である。このデータ処理装置1は、ホスト2とデバイス3とを有し、表示装置4および印刷装置5が接続される。データ処理装置1にはまた、図示していないが、キーボードやマウスなど、各種の入出力装置が接続される。
ホスト2は、CPU11、システムメモリ12、およびチップセットを構成するノースブリッジ13、サウスブリッジ14を有する。ノースブリッジ13は、CPU11とシステムモメリ12とを接続し、また、これらとデバイス3とを接続する。サウスブリッジ14は、ノースブリッジ13と印刷装置5とを接続する。サウスブリッジ14はまた、ノースブリッジ13と、図外の内部記憶装置、グラフィックス表示以外の入出力装置、ネットワークインターフェース等の各種インターフェース等とを接続する。
デバイス3は、GPU21と、グラフィックスメモリ22とを有する。GPU21は、ノースブリッジ13を介して、CPU11およびシステムメモリ12に接続される。GPU21にはまた、表示装置4が接続される。GPU21は、CPU11からノースブリッジ13を介して送られてきたグラフィックスデータ、あるいはノースブリッジ13を介してシステムメモリ12から読み込んだグラフィックスデータを処理し、表示装置4へ出力することができる。
デバイス3は、複数の処理を非同期で並列に実行可能な構成であり、ホスト2は、このデバイス2との間でデータの授受を行う。ホスト2内では、システムメモリ12内に、デバイス3との間でデータ転送を行うためメモリ領域が確保される。デバイス3は、ホスト2からのデータを処理している間に並列してシステムメモリ12内に確保されたメモリ領域へのアクセスを行ってデータ転送を行い、ホスト2では、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行う。
また、デバイス3内のGPU21には、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられている。ホスト2は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数のストリーリングプロセッサー37のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
図1に示すデータ処理装置1は、印刷装置5と共に、印刷システムを構成することができる。すなわち、データ処理装置1は、画像データを印刷用のデータに変換する処理を行い、印刷装置5が、データ処理装置1から印刷用のデータを受け取って印刷を実行する。この場合、デバイス3が、画像データを印刷用のデータに変換するための処理を複数並列に実行する。ホスト2は、デバイス3に転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイス3で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行うとともに、GPU21内の複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、画像データの順序を操作する。デバイス3は、画像データを印刷用のデータに変換するための処理を複数並列に実行し、ホスト2は、デバイス3から印刷用のデータを受け取って、印刷装置5に出力する。
[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でも同じある。
図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でも同じある。
[GPGPU]
図3は、GPGPUの処理の流れを説明する図である。GPGPUにより処理を行う場合、まず、必要なデータをホスト2からデバイス3に転送し、デバイス3内のグラフィックスメモリ22に書き込む(ステップS1)。デバイス3では、グラフィックスメモリ22に書き込まれたデータをGPU21により演算処理し(ステップS2)、その結果などをホスト2に書き戻す(ステップS3)。
図3は、GPGPUの処理の流れを説明する図である。GPGPUにより処理を行う場合、まず、必要なデータをホスト2からデバイス3に転送し、デバイス3内のグラフィックスメモリ22に書き込む(ステップS1)。デバイス3では、グラフィックスメモリ22に書き込まれたデータをGPU21により演算処理し(ステップS2)、その結果などをホスト2に書き戻す(ステップS3)。
ホスト2とデバイス3との間のデータ転送方法としては、同期転送と非同期転送とがある。同期転送では、ホスト2内のCPU11とデバイス3との間で、ノースブリッジ13のみを経由して、データを転送する。これに対して非同期転送では、CPU11がシステムメモリ12へデータを書き込み、デバイス3のGPU21がそれを読み出す、あるいは、GPU21がシステムメモリ12へデータを書き込むことで、データを転送する。同期転送では、システムメモリ12への書き込みおよび読み出しの必要がない分だけ、データを高速に転送することができる。しかし、データ転送の間、CPU11およびGPU21が占有されることになる。一方、非同期転送では、データ転送時にはCPU11が解放されており、他の処理を行うことができる。また、GPU21では、複数のストリーミングマルチプロセッサー32が互いに非同期で処理を行うことができ、GPU21上でのプログラムであるカーネルの実行と、ホスト2との間のデータ転送とを、同時に実行することができる。
[GPUの非同期処理]
図4および図5はGPU21による非同期処理を説明する図である。ここで、非同期で実行される個々の処理を「ストリーム」と呼ぶ。図4に示す例では、4つのストリーム#0〜#3でそれぞれ、配列の初期化というカーネルとデータ転送という命令が指定されている。GPU21は、同じストリームで指定された命令(カーネルまたはデータ転送)は、指定された順序で実行する。別のストリームで指定された命令は、どのストリームから実行するかは未定である。もし、あるストリームのカーネルと他のストリームのデータ転送が実行できるのであれば、それらを同時に実行する。
図4および図5はGPU21による非同期処理を説明する図である。ここで、非同期で実行される個々の処理を「ストリーム」と呼ぶ。図4に示す例では、4つのストリーム#0〜#3でそれぞれ、配列の初期化というカーネルとデータ転送という命令が指定されている。GPU21は、同じストリームで指定された命令(カーネルまたはデータ転送)は、指定された順序で実行する。別のストリームで指定された命令は、どのストリームから実行するかは未定である。もし、あるストリームのカーネルと他のストリームのデータ転送が実行できるのであれば、それらを同時に実行する。
したがって、図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)を実行する。
ホスト2とデバイス3との間でデータの非同期転送を行うためには、ホスト2側のメモリがページロックド・ホストメモリであることが必要であり、システムメモリ12内に専用の領域として確保する必要がある。しかし、システムメモリ12内に大容量のページロックド・ホストメモリを確保することは難しく、確保できたとしても、CPU11の処理に影響がでる可能性がある。また、デバイス3側のグラフィックスメモリ22にも限度がある。そこで、大量なデータを処理する場合には、それを分割して、ホスト2からデバイス3へのデータ転送、デバイス3でのカーネル実行、デバイス3からホスト2へのデータ転送を繰り返す必要がある。このとき、上述したように、ホスト2とデバイス3との間のデータ転送と、デバイス3でのカーネル実行とを同時に実行することで、ホスト2とデバイス3とのデータ転送に要する時間を隠蔽でき、全体としての処理速度を高速化することができる。さらに、本実施の形態では、ホスト2で処理する命令も同時に実行し、ホスト2内でのデータ転送に要する時間も隠蔽する。
[非同期処理の流れ]
図6から図15は、ホスト2内でのデータ転送と、ホスト2とデバイス3との間のデータ転送と、デバイス3内でのカーネル実行との処理タイミングを説明する図である。ここでは、データを3つに分割して処理する場合を例に説明する。また、カーネルには、順に処理される第1処理と第2処理とが含まれるものとする。なお、第1処理および第2処理は、データ転送とのタイミングを説明するために便宜的に区分したものであり、必ずしも別々の処理である必要はない。また、第1処理および第2処理の少なくとも一方が複数の異なる処理を含んでもよく、1または複数の処理のひとつが第1処理と第2処理とにまたがってもよい。
図6から図15は、ホスト2内でのデータ転送と、ホスト2とデバイス3との間のデータ転送と、デバイス3内でのカーネル実行との処理タイミングを説明する図である。ここでは、データを3つに分割して処理する場合を例に説明する。また、カーネルには、順に処理される第1処理と第2処理とが含まれるものとする。なお、第1処理および第2処理は、データ転送とのタイミングを説明するために便宜的に区分したものであり、必ずしも別々の処理である必要はない。また、第1処理および第2処理の少なくとも一方が複数の異なる処理を含んでもよく、1または複数の処理のひとつが第1処理と第2処理とにまたがってもよい。
CPU11は、処理すべきデータ量とデバイス3で実行できるストリーム数に応じてデータを入力データ#0、#1、#2に分割し、分割されたデータ量に対応して、システムメモリ12内にページロックド・ホストメモリ15を確保する。ページロックド・ホストメモリ15を確保すると、CPU11は、図6に示すように、入力データ#0をページロックド・ホストメモリ15に書き込む。ページロックド・ホストメモリ15への書き込みがあると、デバイス3では、第1のストリームが、図7に示すように、書き込まれたデータ、すなわち入力データ#0を読み出す。
入力データ#0を読み出した第1のストリームは、続いて、図8に示すように、第1処理を実行する。この第1処理が行われている間に、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第1のストリームは、第1処理を終了すると、図9に示すように、第2処理を実行して出力データ#0を生成する。この間に、第2のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#1を読み出す。
入力データ#1を読み出した第2のストリームは、続いて、図10に示すように、第1処理を実行する。この第1処理が行われている間に、先ほどの第1のストリームは、出力データ#0をホスト2内のページロックド・ホストメモリ15に書き込み、CPU11は、入力データ#1をページロックド・ホストメモリ15に書き込む。第2のストリームは、第1処理を終了すると、図11に示すように、第2処理を実行して出力データ#1を生成する。この間に、第3のストリームが、ページロックド・ホストメモリ15に書き込まれた入力データ#2読み出し、CPU11は、ページロックド・ホストメモリ15から出力データ#0を読み出す。
入力データ#2を読み出した第3のストリームは、続いて、図12に示すように、第1処理を実行する。この第1処理が行われている間に、第2のストリームは、出力データ#1をホスト2内のページロックド・ホストメモリ15に書き込む。第3のストリームは、第1処理を終了すると、図13に示すように、第2処理を実行して出力データ#2を生成する。この間に、CPU11は、ページロックド・ホストメモリ15から出力データ#1を読み出す。
第3のストリームは、第2処理が終了すると、図14に示すように、第2処理で生成した出力データ#2をページロックド・ホストメモリ15に書き込む。そして、図15に示すように、CPU11が、ページロックド・ホストメモリ15から出力データ#2を読み出す。
図16は、図6から図15を参照して説明した一連の処理の流れを示す図である。ここでは、入力データが画像データであり、第1処理として色変換処理、第2処理として2値化処理を行って、出力データとして印刷用のハーフトーンデータを得る場合を例に示す。この処理の流れは図6から図15を参照した通りである。なお、図6、図7、図14および図15の説明では、分割された最初の入力データ#0と最後の出力データ#2とを非同期で転送するものとしたが、これらのデータに関しては、ホスト2内(CPU11とページロックド・ホストメモリ15との間)のデータ転送時間を減らすため、同期転送を行っても良い。
[非同期転送の可否判断]
図17は、非同期転送を行うか否かの判断の処理フローを示す図である。この判断は、データ転送を開始する前に、CPU11で行う。
図17は、非同期転送を行うか否かの判断の処理フローを示す図である。この判断は、データ転送を開始する前に、CPU11で行う。
まず、CPU11は、3以上のデータの分割数nを決定する(ステップS11)。この分割数は、任意に決定してもよく、あらかじめ設定された値を用いてもよい。あらかじめ設定された値としては、デバイス3側で処理可能なストリーム数に応じて決定した値を用いることもできる。分割数nを3以上とするのは、デバイス3側でカーネルを実行している間にデータ転送を行うためである。一方、分割数nを大きくしすぎると、1度に転送するデータ量が少なくなる。分割されたデータ量が少なすぎると、データ転送に伴う処理のオーバーヘッドが大きくなるため、ホスト2とデバイス3との間のデータ転送効率が低下してしまう。最適転送速度を得るには、分割されたデータ量が所定値以上である必要がある(ステップS12でYes)。
次に、CPU11は、最適転送速度とデータ量とから、分割されたデータのホスト2とデバイス3との間の転送時間T1を求める(ステップS13)。また、同じデータについて、ホスト2内でのCPU11とページロックド・ホストメモリ15との間の転送時間T2を求める(ステップS14)。さらに、デバイス3側におけるカーネル処理速度から、分割されたデータに対するカーネル処理時間T3を推定する(ステップS15)。そして、T1+T2≦T3であり(ステップS16でYes)、分割されたデータ量に相当するページロックド・ホストメモリ15を転送領域として確保できる場合(ステップS17でYes)には、非同期転送が可能であると判断する。
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に示すフローを所定回数繰り返した時点で行ってもよい。
データの分割は、均等である必要はない。特に、最初に転送されるデータのサイズは小さいことが望ましい。また、GPU21の入力データサイズは一般に出力データサイズより大きいので、転送時間T1としては、ホスト2からデバイス3への転送時間を考えれば十分である。GPU21の出力データサイズが入力データサイズより大きくなるような場合には、CPU11でデバイス3からホスト2への転送時間を予測し、それを転送時間T1とする。また、ホスト2内の転送時間T2についても、CPU11からページロックド・ホストメモリ15への書き込み時間を考慮すれば十分であるが、必要であれば、ページロックド・ホストメモリ15からCPU11への読み出し時間も考慮することができる。
[処理時間の隠蔽効果]
図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%の処理時間を隠蔽することができる。
図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%の処理時間を隠蔽することができる。
[データ処理の順序の操作]
CPU11で入力データを複数に分割する際に、GPU21の処理特性を考慮して、そのデータ順を入れ替えることができる。そのような実施の形態について以下に説明する。
CPU11で入力データを複数に分割する際に、GPU21の処理特性を考慮して、そのデータ順を入れ替えることができる。そのような実施の形態について以下に説明する。
図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スレッドの処理の進捗状況は同じとなる。
このように、GPU21のスレッド実行は、CPUの処理と異なり、スレッド間で関連をもっている。このような例のひとつが、メモリの結合である。GPU21が使用するメモリには、読み書き可能でキャッシュは使用しないグローバルメモリ、読み取り専用でキャッシュを使用するテクスチャーメモリ、読み取り専用でキャッシュを使用するコンスタントメモリがある。コンスタントメモリは、サイズは小さいが、キャッシュからデータを読み出せる場合には、レジスタと同じくらい高速である。これらのメモリのうち、グローバルメモリに関しては、特定の条件に基づいてアクセスした場合に、それらのアクセスを結合して、アクセス速度を最大で10倍程度に高速化することができる。
図20は、GPU21によるメモリの結合を説明する図である。GPU21によりメモリの結合を行うことができるのは、4、8または16バイト単位のアクセスであり、スレッドが順次アクセスし、半ワープ(16スレッド)毎のアドレスの先頭が64の倍数である場合である。すなわち、GPU21は、32ビット、64ビット、128ビットのデータを1命令でレジスタに読み込むことができる。このため、たとえば整数型(32ビット)の16データ(64バイト)の配列を読み込む場合に、結合しなければ32ビットのロード命令を16回繰り返す必要があるが、結合すれば、128ビットのロード命令を4回で実行することができる。
図21は、各スレッドを実行するストリーミングプロセッサ37へのデータの読み込みを説明する図である。メモリ結合により、ひとつのストリーミングマルチプロセッサー32内の8個のストリーミングプロセッサ37が、連続して、ID=0〜7、8〜15、16〜23、24〜32のデータを読み出すことができる。しかし、データ配列内のひとつの方向にデータの関連性がある場合には、メモリ結合を有効に利用することができない。たとえば、図21に示す例において、IDの値が連続する方向にデータの関連性がある場合には、その連続する方向のデータをひとつのストリーミングプロセッサ37に読み込む必要がある。
図22は、横方向のデータに関連性のあるデータ配列例を示す図である。ここでは、m行n列の配列を示す。たとえば、画像データをラスター方向に処理する場合に、ディザ処理やスムージング処理では、データ配列の横方向のデータ(0,0)〜(n,0)、(0,1)〜(n,1)、..(0,m)〜(n,m)にそれぞれ関連性がある。一方、高速処理のためには、1ラスターあるいは場合によっては少数ラスターを1スレッドで処理することが望ましい。このような場合には、データ配列を転置し、関連のあるデータが連続してひとつのストリーミングプロセッサ37に読み込まれるようにする。
図23は、図22に示すデータ配列を転置したデータ配列を示す図である。このようにデータ配列を転置することで、データ(0,0)〜(n,0)をひとつのストリーミングプロセッサ37に、データ(0,1)〜(n,1)を次のストリーミングプロセッサ37にと、関連のあるデータを同じストリーミングプロセッサ37にシーケンシャルに読み込むことができる。このように、関連のあるデータをシーケンシャルに読み込んで結合できるので、高速のメモリアクセスが可能となる。この方法は、グローバルメモリだけでなく、テクスチャーメモリにも有効である。テクスチャーメモリの場合は、キャッシュに長いデータを取り込むことができ、キャシュを有効活用できるようになる。
データ配列の転置は、分割する前の入力データに対して行ってもよく、分割した後のデータに対して行ってもよい。データ配列の各要素のサイズは、データの関連性によって決定される。
[他の実施の形態]
以上説明したデータ処理装置および印刷システムは、GPUを有するデバイスが設けられた汎用のコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせるプログラム、および、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段(ストリーミングプロセッサー37)のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させるプログラムをインストールすることにより、実現することができる。
以上説明したデータ処理装置および印刷システムは、GPUを有するデバイスが設けられた汎用のコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせるプログラム、および、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段(ストリーミングプロセッサー37)のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させるプログラムをインストールすることにより、実現することができる。
以上、本発明の実施の形態に係るデータ処理装置、印刷システムおよびプログラムについて説明したが、本発明は要旨を変更しない限り種々変更実施できる。たとえば、GPUとしては、上述の特定のものだけでなく、GPGPUのためのツールが提供されるどのようなGPUを用いてもよい。また、処理対象とするデータとしては、画像データを印列用のデータに変換する場合だけでなく、計算物理学、映像および画像の処理、データベース管理、生命工学等でも利用できる。
1 データ処理装置、2 ホスト、3 デバイス、4 表示装置、5 印刷装置、11 CPU、12 システムメモリ、13 ノースブリッジ、14 サウスブリッジ、15 ページロッグド・ホストメモリ(メモリ領域)、21 GPU、22 グラフィックスメモリ、31 テクスチャープロセッサークラスター、32 ストリーミングマルチプロセッサー、33 コンスタントキャッシュ、34 テクスチャーキャッシュ、35 シェアードメモリ、36 命令ユニット、37 ストリーミングプロセッサ
Claims (7)
- 複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、
上記ホスト内には上記デバイスとの間でデータ転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行い、
上記ホストでは、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行う、
ことを特徴とするデータ処理装置。 - 請求項1記載のデータ処理装置において、
前記ホストでは、分割された個々のデータに対して前記デバイスが処理することにより得られる個々の出力データのうち、最後から2番目までのデータについて、上記デバイスで次のデータが処理されている間に前記メモリ領域からの読み出しを行う、
ことを特徴とするデータ処理装置。 - 請求項1または2記載のデータ処理装置において、
前記ホストは、データの分割数が3以上であり、その分割数で分割されたデータの前記ホストと前記デバイスとの間の転送時間と、上記分割されたデータの前記ホスト内での前記メモリ領域と間の転送時間との和が、前記デバイス内での上記分割されたデータの処理に要する時間より短く、かつ前記メモリ領域として上記分割されたデータを転送できる容量を確保できることを条件として、データの分割を行う、
ことを特徴とするデータ処理装置。 - 請求項3記載のデータ処理装置において、
前記ホストは、前記分割されたデータの量が、前記ホストと前記デバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、前記分割数を決定する、
ことを特徴とするデータ処理装置。 - 請求項1から4のいずれか1項記載のデータ処理装置において、
前記ホストから前記デバイスに転送されるデータは画像データであり、
前記デバイスは色変換処理および2値化処理を行って印刷用のハーフトーンデータを前記ホストに転送する、
ことを特徴とするデータ処理装置。 - 画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から上記印刷用のデータを受け取って印刷を実行する印刷装置とを有し、
上記データ処理装置は、上記画像データを上記印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、上記デバイスにより得られた印刷用のデータを上記印刷装置に出力するホストとを有し、
上記ホスト内には上記デバイスへの画像データの転送および上記デバイスからの印刷用データの転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからの画像データを処理している間に並列して上記メモリ領域へのアクセスを行って印刷用データの転送を行い、
上記ホストでは、上記デバイスに転送する画像データを3以上に分割し、分割された2番目以降の画像データについて、上記デバイスで前回の画像データが処理されている間に、上記メモリ領域への書き込みを行う
ことを特徴とする印刷システム。 - 複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、
上記ホストに上記デバイスとの間でデータ転送を行うためメモリ領域を確保し、
上記デバイスには、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行わせ、
上記ホストには、上記デバイスに転送するデータを3以上に分割し、分割された2番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行わせる、
ことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009088709A JP2010244096A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009088709A JP2010244096A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010244096A true JP2010244096A (ja) | 2010-10-28 |
Family
ID=43097081
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009088709A Withdrawn JP2010244096A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010244096A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013058025A (ja) * | 2011-09-07 | 2013-03-28 | Ricoh Co Ltd | 情報処理装置、プログラムおよび制御方法 |
JP2014505946A (ja) * | 2011-01-14 | 2014-03-06 | クゥアルコム・インコーポレイテッド | 汎用グラフィクス処理装置における計算リソースパイプライン化 |
US9367361B2 (en) | 2013-11-08 | 2016-06-14 | Fujitsu Limited | Information processing device, method for processing information, and non-transitory computer-readable recording medium having stored therein information processing program |
WO2017043284A1 (ja) * | 2015-09-10 | 2017-03-16 | 富士フイルム株式会社 | 情報処理システム、情報処理方法、情報処理プログラム、及び記憶媒体 |
WO2022009741A1 (ja) * | 2020-07-07 | 2022-01-13 | 日立Astemo株式会社 | 電子制御装置 |
-
2009
- 2009-04-01 JP JP2009088709A patent/JP2010244096A/ja not_active Withdrawn
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014505946A (ja) * | 2011-01-14 | 2014-03-06 | クゥアルコム・インコーポレイテッド | 汎用グラフィクス処理装置における計算リソースパイプライン化 |
JP2016006657A (ja) * | 2011-01-14 | 2016-01-14 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | 汎用グラフィクス処理装置における計算リソースパイプライン化 |
US9804995B2 (en) | 2011-01-14 | 2017-10-31 | Qualcomm Incorporated | Computational resource pipelining in general purpose graphics processing unit |
JP2013058025A (ja) * | 2011-09-07 | 2013-03-28 | Ricoh Co Ltd | 情報処理装置、プログラムおよび制御方法 |
US9367361B2 (en) | 2013-11-08 | 2016-06-14 | Fujitsu Limited | Information processing device, method for processing information, and non-transitory computer-readable recording medium having stored therein information processing program |
WO2017043284A1 (ja) * | 2015-09-10 | 2017-03-16 | 富士フイルム株式会社 | 情報処理システム、情報処理方法、情報処理プログラム、及び記憶媒体 |
CN107949838A (zh) * | 2015-09-10 | 2018-04-20 | 富士胶片株式会社 | 信息处理系统、信息处理方法、信息处理程序及存储介质 |
US10191776B2 (en) | 2015-09-10 | 2019-01-29 | Fujifilm Corporation | Information processing system, information processing method, information processing program, and storage medium |
CN107949838B (zh) * | 2015-09-10 | 2021-02-19 | 富士胶片株式会社 | 信息处理系统、信息处理方法及存储介质 |
WO2022009741A1 (ja) * | 2020-07-07 | 2022-01-13 | 日立Astemo株式会社 | 電子制御装置 |
JP7425685B2 (ja) | 2020-07-07 | 2024-01-31 | 日立Astemo株式会社 | 電子制御装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11604649B2 (en) | Techniques for efficiently transferring data to a processor | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
DE102013022712B4 (de) | Virtuelle Speicherstruktur für Coprozessoren, die Speicherallokationsbegrenzungen haben | |
US8817031B2 (en) | Distributed stream output in a parallel processing unit | |
US8751771B2 (en) | Efficient implementation of arrays of structures on SIMT and SIMD architectures | |
JP5461533B2 (ja) | ローカル及びグローバルのデータ共有 | |
US9348762B2 (en) | Technique for accessing content-addressable memory | |
US8760455B2 (en) | Restart index that sets a topology | |
TWI533222B (zh) | 處理任務的工作分配控制 | |
TWI488118B (zh) | 處理系統中動態產生任務的傳訊、排序和執行 | |
US9798543B2 (en) | Fast mapping table register file allocation algorithm for SIMT processors | |
US11275662B2 (en) | Fault injection architecture for resilient GPU computing | |
US20120331470A1 (en) | Emitting coherent output from multiple threads for printf | |
US9626191B2 (en) | Shaped register file reads | |
US8370845B1 (en) | Method for synchronizing independent cooperative thread arrays running on a graphics processing unit | |
US20140232729A1 (en) | Power efficient attribute handling for tessellation and geometry shaders | |
US8195858B1 (en) | Managing conflicts on shared L2 bus | |
US9513923B2 (en) | System and method for context migration across CPU threads | |
US20230185570A1 (en) | Techniques for efficiently transferring data to a processor | |
TW201435581A (zh) | 透過管線狀態繫結觸發的效能事件擷取 | |
JP2010244096A (ja) | データ処理装置、印刷システムおよびプログラム | |
CN116775518A (zh) | 用于高效访问多维数据结构和/或其他大型数据块的方法和装置 | |
US9697044B2 (en) | Application programming interface to enable the construction of pipeline parallel programs | |
US8321618B1 (en) | Managing conflicts on shared L2 bus | |
DE102013201195A1 (de) | Zuvor-geplante Wiederholungen von divergenten Operationen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20120605 |