JP2010244095A - データ処理装置、印刷システムおよびプログラム - Google Patents
データ処理装置、印刷システムおよびプログラム Download PDFInfo
- Publication number
- JP2010244095A JP2010244095A JP2009088708A JP2009088708A JP2010244095A JP 2010244095 A JP2010244095 A JP 2010244095A JP 2009088708 A JP2009088708 A JP 2009088708A JP 2009088708 A JP2009088708 A JP 2009088708A JP 2010244095 A JP2010244095 A JP 2010244095A
- Authority
- JP
- Japan
- Prior art keywords
- data
- host
- processing
- gpu
- array
- 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
- Image Processing (AREA)
Abstract
【課題】CPUとGPUとの間で、大量のデータを効率良く処理する。
【解決手段】連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
【選択図】図1
【解決手段】連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイス3と、このデバイス3との間でデータの授受を行うホスト2とを有し、ホスト2は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
【選択図】図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の観点によると、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、ホストは、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作することを特徴とするデータ処理装置が提供される。
データ配列の順序を操作することで、並列処理を行う個々の処理手段が、関連のあるデータを連続して読み取って結合することができ、高速のメモリアクセスが可能となる。なお、2次元データの順序を操作する技術として、特許文献1に開示されたものがある。ただし、特許文献1に開示の技術は、ブロック画像を連続的に回転処理するためのものである。特許文献1に開示の技術は、ひとつの方向に関連のあるデータが配置されたデータ配列を処理するためのものではなく、そのような処理を、複数の処理手段が並列処理するものでもない。
データ配列は行方向に関連のあるデータ(0,0)〜(n,0)、(0,1)〜(n,1)、..、(0,m)〜(n,m)、..(n,m)を要素とするm行n列の2次元データ配列であり、ホストは、2次元データ配列を、(0,0)〜(0,m)、(1,0)〜(1,m)、..、(n,0)〜(n,m)を要素とするn行m列の2次元データ配列に転置することが望ましい。これにより、行方向に関連のあるデータを、1または複数の行ごとに別々の処理手段が読み取って、並列に処理することができる。
データ配列は画像データであり、ホストは、複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、画像データを転置することが望ましい。これにより、デバイスでは、個々の処理手段がそれぞれラスター方向のデータを高速に読み取ることができ、それを並列に処理することができる。
本発明の第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から印刷用のデータを受け取って印刷を実行する。この場合、ホスト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 (5)
- 連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイスと、
このデバイスとの間でデータの授受を行うホストと
を有し、
上記ホストは、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、上記複数の処理手段のそれぞれが連続して関連のあるデータを読み取るように、上記データ配列の順序を操作する
ことを特徴とするデータ処理装置。 - 請求項1記載のデータ処理装置において、前記データ配列は行方向に関連のあるデータ(0,0)〜(n,0)、(0,1)〜(n,1)、..、(0,m)〜(n,m)、..(n,m)を要素とするm行n列の2次元データ配列であり、前記ホストは、上記2次元データ配列を、(0,0)〜(0,m)、(1,0)〜(1,m)、..、(n,0)〜(n,m)を要素とするn行m列の2次元データ配列に転置することを特徴とするデータ処理装置。
- 請求項1または2記載のデータ処理装置において、前記データ配列は画像データであり、上記ホストは、上記複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、上記画像データを転置することを特徴とするデータ処理装置。
- 画像データを印刷用のデータに変換するデータ処理装置と、このデータ装置から上記印刷用のデータを受け取って印刷を実行する印刷装置とを有し、
上記データ処理装置は、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、
上記ホストは、上記複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、上記画像データの順序を操作する
ことを特徴とする印刷処理システム。 - 連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられたデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、
ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、上記複数の処理手段のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させる
ことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009088708A JP2010244095A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009088708A JP2010244095A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010244095A true JP2010244095A (ja) | 2010-10-28 |
Family
ID=43097080
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009088708A Withdrawn JP2010244095A (ja) | 2009-04-01 | 2009-04-01 | データ処理装置、印刷システムおよびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010244095A (ja) |
Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02181860A (ja) * | 1989-01-09 | 1990-07-16 | Nippon Telegr & Teleph Corp <Ntt> | 並列データ処理装置 |
JPH0522629A (ja) * | 1991-06-21 | 1993-01-29 | Sony Corp | ビデオ信号用プロセツサ |
JPH06274607A (ja) * | 1993-03-22 | 1994-09-30 | Toshiba Corp | 並列信号処理装置 |
JPH1074141A (ja) * | 1996-08-30 | 1998-03-17 | Matsushita Electric Ind Co Ltd | 信号処理装置 |
JP2000069478A (ja) * | 1998-08-18 | 2000-03-03 | Canon Inc | 画像処理装置及び方法並びに記憶媒体 |
JP2001092790A (ja) * | 1999-09-24 | 2001-04-06 | Sony Corp | 画像処理装置 |
JP2002094794A (ja) * | 2000-09-18 | 2002-03-29 | Ricoh Co Ltd | 画像処理装置 |
JP2006099232A (ja) * | 2004-09-28 | 2006-04-13 | Renesas Technology Corp | 半導体信号処理装置 |
JP2006127460A (ja) * | 2004-06-09 | 2006-05-18 | Renesas Technology Corp | 半導体装置、半導体信号処理装置、およびクロスバースイッチ |
JP2006150912A (ja) * | 2004-12-01 | 2006-06-15 | Seiko Epson Corp | 画像出力システム、および情報報知方法 |
JP2006154884A (ja) * | 2004-11-25 | 2006-06-15 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006154885A (ja) * | 2004-11-25 | 2006-06-15 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006164183A (ja) * | 2004-12-10 | 2006-06-22 | Renesas Technology Corp | 半導体信号処理装置 |
JP2006202083A (ja) * | 2005-01-21 | 2006-08-03 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006228088A (ja) * | 2005-02-21 | 2006-08-31 | Seiko Epson Corp | 印刷データ出力装置、および印刷データ出力方法 |
JP2007080314A (ja) * | 2005-09-12 | 2007-03-29 | Renesas Technology Corp | 半導体記憶装置 |
JP2007094812A (ja) * | 2005-09-29 | 2007-04-12 | Renesas Technology Corp | 並列演算装置 |
JP2007140750A (ja) * | 2005-11-16 | 2007-06-07 | Renesas Technology Corp | 直交変換回路 |
JP2009505575A (ja) * | 2005-08-15 | 2009-02-05 | マイクロソフト コーポレーション | ハードウェア加速されたカラー・データ処理 |
JP2009104521A (ja) * | 2007-10-25 | 2009-05-14 | Mitsubishi Electric Corp | 並列処理装置 |
JP2010130696A (ja) * | 2008-11-28 | 2010-06-10 | Thomson Licensing | グラフィックス処理ユニットによってサポートされるビデオ復号方法 |
-
2009
- 2009-04-01 JP JP2009088708A patent/JP2010244095A/ja not_active Withdrawn
Patent Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02181860A (ja) * | 1989-01-09 | 1990-07-16 | Nippon Telegr & Teleph Corp <Ntt> | 並列データ処理装置 |
JPH0522629A (ja) * | 1991-06-21 | 1993-01-29 | Sony Corp | ビデオ信号用プロセツサ |
JPH06274607A (ja) * | 1993-03-22 | 1994-09-30 | Toshiba Corp | 並列信号処理装置 |
JPH1074141A (ja) * | 1996-08-30 | 1998-03-17 | Matsushita Electric Ind Co Ltd | 信号処理装置 |
JP2000069478A (ja) * | 1998-08-18 | 2000-03-03 | Canon Inc | 画像処理装置及び方法並びに記憶媒体 |
JP2001092790A (ja) * | 1999-09-24 | 2001-04-06 | Sony Corp | 画像処理装置 |
JP2002094794A (ja) * | 2000-09-18 | 2002-03-29 | Ricoh Co Ltd | 画像処理装置 |
JP2006127460A (ja) * | 2004-06-09 | 2006-05-18 | Renesas Technology Corp | 半導体装置、半導体信号処理装置、およびクロスバースイッチ |
JP2006099232A (ja) * | 2004-09-28 | 2006-04-13 | Renesas Technology Corp | 半導体信号処理装置 |
JP2006154884A (ja) * | 2004-11-25 | 2006-06-15 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006154885A (ja) * | 2004-11-25 | 2006-06-15 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006150912A (ja) * | 2004-12-01 | 2006-06-15 | Seiko Epson Corp | 画像出力システム、および情報報知方法 |
JP2006164183A (ja) * | 2004-12-10 | 2006-06-22 | Renesas Technology Corp | 半導体信号処理装置 |
JP2006202083A (ja) * | 2005-01-21 | 2006-08-03 | Seiko Epson Corp | 画像データ生成装置、および印刷装置 |
JP2006228088A (ja) * | 2005-02-21 | 2006-08-31 | Seiko Epson Corp | 印刷データ出力装置、および印刷データ出力方法 |
JP2009505575A (ja) * | 2005-08-15 | 2009-02-05 | マイクロソフト コーポレーション | ハードウェア加速されたカラー・データ処理 |
JP2007080314A (ja) * | 2005-09-12 | 2007-03-29 | Renesas Technology Corp | 半導体記憶装置 |
JP2007094812A (ja) * | 2005-09-29 | 2007-04-12 | Renesas Technology Corp | 並列演算装置 |
JP2007140750A (ja) * | 2005-11-16 | 2007-06-07 | Renesas Technology Corp | 直交変換回路 |
JP2009104521A (ja) * | 2007-10-25 | 2009-05-14 | Mitsubishi Electric Corp | 並列処理装置 |
JP2010130696A (ja) * | 2008-11-28 | 2010-06-10 | Thomson Licensing | グラフィックス処理ユニットによってサポートされるビデオ復号方法 |
Non-Patent Citations (4)
Title |
---|
CSNG200700887003; 尾形泰彦,遠藤敏夫,松岡聡: 'CPUおよびGPUを併用するFFTライブラリの提案と評価' 情報処理学会研究報告 Vol:2007,No:80,(2007-HPC-111), 20070801, Pages:13-18, 社団法人情報処理学会 * |
CSNG200900044004; 尾形泰彦,遠藤敏夫,丸山直也,松岡聡: '性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ' 情報処理学会論文誌 論文誌トランザクション 平成20年度(1) コンピューティングシステム Vol:1,No:1, 20081115, Pages:40-50, 社団法人情報処理学会 * |
JPN6013045414; 尾形泰彦,遠藤敏夫,松岡聡: 'CPUおよびGPUを併用するFFTライブラリの提案と評価' 情報処理学会研究報告 Vol:2007,No:80,(2007-HPC-111), 20070801, Pages:13-18, 社団法人情報処理学会 * |
JPN6013045415; 尾形泰彦,遠藤敏夫,丸山直也,松岡聡: '性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ' 情報処理学会論文誌 論文誌トランザクション 平成20年度(1) コンピューティングシステム Vol:1,No:1, 20081115, Pages:40-50, 社団法人情報処理学会 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6977239B2 (ja) | 行列乗算器 | |
US11604649B2 (en) | Techniques for efficiently transferring data to a processor | |
US10255228B2 (en) | System and method for performing shaped memory access operations | |
US8817031B2 (en) | Distributed stream output in a parallel processing unit | |
US8760455B2 (en) | Restart index that sets a topology | |
US9348762B2 (en) | Technique for accessing content-addressable memory | |
US20120089792A1 (en) | Efficient implementation of arrays of structures on simt and simd architectures | |
US20110072211A1 (en) | Hardware For Parallel Command List Generation | |
TWI533222B (zh) | 處理任務的工作分配控制 | |
JPH06509893A (ja) | 画像処理及びグラフィック処理システム | |
US9798543B2 (en) | Fast mapping table register file allocation algorithm for SIMT processors | |
US8752018B2 (en) | Emitting coherent output from multiple threads for printf | |
US11669421B2 (en) | Fault injection architecture for resilient GPU computing | |
US9513923B2 (en) | System and method for context migration across CPU threads | |
US8370845B1 (en) | Method for synchronizing independent cooperative thread arrays running on a graphics processing unit | |
US11907717B2 (en) | Techniques for efficiently transferring data to a processor | |
CN116775518A (zh) | 用于高效访问多维数据结构和/或其他大型数据块的方法和装置 | |
TW201337829A (zh) | 暫存器檔案型讀取 | |
JP2010244096A (ja) | データ処理装置、印刷システムおよびプログラム | |
US10152329B2 (en) | Pre-scheduled replays of divergent operations | |
CN110377874B (zh) | 卷积运算方法及系统 | |
US20200264873A1 (en) | Scalar unit with high performance in crypto operation | |
US8473948B1 (en) | Method for synchronizing independent cooperative thread arrays running on a graphics processing unit | |
CN116774968A (zh) | 具有一组线程束的高效矩阵乘法和加法 | |
Wu et al. | Optimizing dynamic programming on graphics processing units via data reuse and data prefetch with inter-block barrier synchronization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120402 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130829 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130917 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20131114 |