(57)【要約】【課題】ＣＰＵとＧＰＵとの間で、大量のデータを効率良く処理する。【解決手段】複数の処理を非同期で並列に実行可能なデバイス３と、このデバイス３との間でデータの授受を行うホスト２とを有し、ホスト２には、システムメモリ１２内にデバイス３との間でデータ転送を行うためメモリ領域が確保され、デバイス３は、ホスト２からのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホスト２では、デバイス３に転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイス３で前回のデータが処理されている間に、メモリ領域への書き込みを行う。【選択図】図１
2010244096.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、
上記ホスト内には上記デバイスとの間でデータ転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行い、
上記ホストでは、上記デバイスに転送するデータを３以上に分割し、分割された２番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行う、
ことを特徴とするデータ処理装置。
【請求項２】
請求項１記載のデータ処理装置において、
前記ホストでは、分割された個々のデータに対して前記デバイスが処理することにより得られる個々の出力データのうち、最後から２番目までのデータについて、上記デバイスで次のデータが処理されている間に前記メモリ領域からの読み出しを行う、
ことを特徴とするデータ処理装置。
【請求項３】
請求項１または２記載のデータ処理装置において、
前記ホストは、データの分割数が３以上であり、その分割数で分割されたデータの前記ホストと前記デバイスとの間の転送時間と、上記分割されたデータの前記ホスト内での前記メモリ領域と間の転送時間との和が、前記デバイス内での上記分割されたデータの処理に要する時間より短く、かつ前記メモリ領域として上記分割されたデータを転送できる容量を確保できることを条件として、データの分割を行う、
ことを特徴とするデータ処理装置。
【請求項４】
請求項３記載のデータ処理装置において、
前記ホストは、前記分割されたデータの量が、前記ホストと前記デバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、前記分割数を決定する、
ことを特徴とするデータ処理装置。
【請求項５】
請求項１から４のいずれか１項記載のデータ処理装置において、
前記ホストから前記デバイスに転送されるデータは画像データであり、
前記デバイスは色変換処理および２値化処理を行って印刷用のハーフトーンデータを前記ホストに転送する、
ことを特徴とするデータ処理装置。
【請求項６】
画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から上記印刷用のデータを受け取って印刷を実行する印刷装置とを有し、
上記データ処理装置は、上記画像データを上記印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、上記デバイスにより得られた印刷用のデータを上記印刷装置に出力するホストとを有し、
上記ホスト内には上記デバイスへの画像データの転送および上記デバイスからの印刷用データの転送を行うためメモリ領域が確保され、
上記デバイスは、上記ホストからの画像データを処理している間に並列して上記メモリ領域へのアクセスを行って印刷用データの転送を行い、
上記ホストでは、上記デバイスに転送する画像データを３以上に分割し、分割された２番目以降の画像データについて、上記デバイスで前回の画像データが処理されている間に、上記メモリ領域への書き込みを行う
ことを特徴とする印刷システム。
【請求項７】
複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、
上記ホストに上記デバイスとの間でデータ転送を行うためメモリ領域を確保し、
上記デバイスには、上記ホストからのデータを処理している間に並列して上記メモリ領域へのアクセスを行ってデータ転送を行わせ、
上記ホストには、上記デバイスに転送するデータを３以上に分割し、分割された２番目以降のデータについて、上記デバイスで前回のデータが処理されている間に、上記メモリ領域への書き込みを行わせる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、印刷システムおよびプログラムに関する。
【背景技術】
【０００２】
コンピュータ内に取り付けられてグラフックスを処理するデバイスとして、従来から、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が利用されている。ＧＰＵは、本来はグラフィックス処理のためのものであるが、近年になって、汎用計算に使用するための開発環境がメーカーから提供されている。このように、汎用計算にＧＰＵを利用する技術は、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｏｎ  ＧＰＵ）として知られている。現在、ＧＰＧＰＵは、計算物理学、映像および画像の処理、データベース管理、生命工学等の分野で利用されている。
【０００３】
ＧＰＵは、汎用の処理装置であるＣＰＵ（中央処理装置：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に比べ、浮動小数点演算を並列かつ高速に実行することができる。しかし、ＧＰＵは、ＣＰＵのように分岐予測や非順次命令実行などの制御ハードウェアを多く備えているわけではないので、そのような処理は不得手である。また、ＧＰＵは、ＣＰＵとは異なり、キャッシュの効率化などの複雑な処理はできない。すなわち、ＧＰＵは、大量のデータに並列に同じ演算を繰り返すような用途であれば、ＣＰＵに比べ非常に効率よく高速に処理を実行できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１９８８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＣＰＵとＧＰＵとの間で大量のデータを効率良く処理するためには、相互間のデータ転送を効率よく行う必要がある。データ転送、特に画像データの転送を効率よく行うための技術として、特許文献１には、画像メモリとハードディスクドライブ（ＨＤＤ）との間での画像の同時転送技術が開示されている。特許文献１に開示の技術によれば、単位画像の分割転送を行うことで、個々の画像によるＨＤＤの占有時間を分散し、複数画像の同時処理を並行して効率よく実行させることができる。ただ、特許文献１に記載の技術は、ＨＤＤの特性を利用した技術であり、ＣＰＵとＧＰＵとの間のデータ転送に利用できるものではない。
【０００６】
本発明は、ＣＰＵとＧＰＵとの間で大量のデータを効率良く処理することのできるデータ処理装置およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有し、ホストにはデバイスとの間でデータ転送を行うためメモリ領域が確保され、デバイスは、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行い、ホストでは、デバイスに転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行うことを特徴とするデータ処理装置が提供される。
【０００８】
すなわち、デバイスでデータを処理している間に、ホストからデバイスへのデータ転送を行うだけでなく、ホスト内でのメモリ領域への書き込みも行う。これにより、データ転送に要する時間を遮蔽することができ、ホストとデバイスとの全体としての処理時間を短縮することができる。
【０００９】
ホストでは、分割された個々のデータに対してデバイスが処理することにより得られる個々の出力データのうち、最後から２番目までのデータについて、デバイスで次のデータが処理されている間にメモリ領域からの読み出しを行うことが望ましい。これにより、ホスト内でのメモリ領域への書き込みに要する時間だけでなく、メモリ領域からの読み出しに要する時間も遮蔽することができ、全体としての処理時間をさらに短縮することができる。
【００１０】
ホストは、データの分割数が３以上であり、その分割数で分割されたデータのホストとデバイスとの間の転送時間と、分割されたデータのホスト内でのメモリ領域と間の転送時間との和が、デバイス内での分割されたデータの処理に要する時間より短く、かつメモリ領域として分割されたデータを転送できる容量を確保できることを条件として、データの分割を行うことが望ましい。この条件であれば、ホスト内でのメモリ領域との間のデータ転送時間と、ホストとデバイスとの間のデータ転送時間とを、完全に遮蔽することができる。
【００１１】
データの分割を行う条件としてさらに、分割されたデータの量が、ホストとデバイスとの間で最適な転送速度を維持できる程度の大きさとなるように、分割数を決定することが望ましい。分割数を大きくしすぎると、１度に転送するデータ量が少なくなり、データ転送に伴う処理のオーバーヘッドが大きくなるため、転送効率が低下してしまう。このような状態でデータ転送を行うことは、処理負荷の増加を伴ってしまう。このような事態を避けるために、最適な転送速度を維持できるように分割数を決定する。
【００１２】
ホストからデバイスに転送されるデータが画像データであり、デバイスは、色変換処理および２値化処理を行って印刷用のハーフトーンデータをホストに転送する構成とすることができる。すなわち、データ処理装置を印刷コントローラーとして利用することができる。
【００１３】
本発明の第２の観点によると、画像データを印刷用のデータに変換する処理を行うデータ処理装置と、このデータ処理装置から印刷用のデータを受け取って印刷を実行する印刷装置とを有し、データ処理装置は、画像データを印刷用のデータに変換するための処理を複数並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行い、デバイスにより得られた印刷用のデータを印刷装置に出力するホストとを有し、ホストにはデバイスへの画像データの転送およびデバイスからの印刷用データの転送を行うためメモリ領域が確保され、デバイスは、ホストからの画像データを処理している間に並列してメモリ領域へのアクセスを行って印刷用データの転送を行い、ホストでは、デバイスに転送する画像データを３以上に分割し、分割された２番目以降の画像データについて、デバイスで前回の画像データが処理されている間に、メモリ領域への書き込みを行うことを特徴とする印刷システムが提供される。
【００１４】
本発明の他の観点によると、複数の処理を非同期で並列に実行可能なデバイスと、このデバイスとの間でデータの授受を行うホストとを有するコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせることを特徴とするプログラムが提供される。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係るデータ処理装置のブロック構成図である。
【図２】図１に示すデータ処理装置内のＧＰＵの構成例を示すブロック図である。
【図３】図１に示すデータ処理装置におけるＧＰＧＰＵの処理の流れを説明する図である。
【図４】図１に示すデータ処理装置内のＧＰＵによる非同期処理を説明する図である。
【図５】図５に示すストリームの実行順序を説明する図である。
【図６】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図７】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図８】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図９】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１０】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１１】図１に示すデータ処理装置内のホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１２】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１３】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１４】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１５】図１に示すデータ処理装置内の、ホスト内でのデータ転送と、ホストとデバイスとの間のデータ転送と、デバイス内でのカーネル実行との処理タイミングを説明する図である。
【図１６】図６から図１５を参照して説明した一連の処理の流れを示す図である。
【図１７】図１に示すデータ処理内のＣＰＵが実行する非同期転送を行うか否かの判断の処理フローを示す図である。
【図１８】ＧＰＧＰＵにおける処理時間の割合の例を示す図である。
【図１９】一般的なＣＰＵと図２に示すＧＰＵとの並列処理の違いを説明する図であり、画像を１スレッド１ラスターで塗りつぶす場合の進捗状況を示す。
【図２０】図２に示すＧＰＵによるメモリの結合を説明する図である。
【図２１】各スレッドを実行するストリーミングプロセッサへのデータの読み込みを説明する図である。
【図２２】横方向のデータに関連性のあるデータ配列例を示す図である。
【図２３】図２２に示すデータ配列を転置したデータ配列を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について、図面を参照して説明する。以下の説明においては、ＧＰＵとそれに関連する電子部品が搭載されたボードあるいはカードの形態の装置を「デバイス」、このデバイスが装着されるコンピュータの主要部（ＣＰＵ（中央処理装置）およびとそれに関連する電子部品）を「ホスト」という。
【００１７】
［システム構成］
図１は、本発明の実施の形態に係るデータ処理装置のブロック構成図である。このデータ処理装置１は、ホスト２とデバイス３とを有し、表示装置４および印刷装置５が接続される。データ処理装置１にはまた、図示していないが、キーボードやマウスなど、各種の入出力装置が接続される。
【００１８】
ホスト２は、ＣＰＵ１１、システムメモリ１２、およびチップセットを構成するノースブリッジ１３、サウスブリッジ１４を有する。ノースブリッジ１３は、ＣＰＵ１１とシステムモメリ１２とを接続し、また、これらとデバイス３とを接続する。サウスブリッジ１４は、ノースブリッジ１３と印刷装置５とを接続する。サウスブリッジ１４はまた、ノースブリッジ１３と、図外の内部記憶装置、グラフィックス表示以外の入出力装置、ネットワークインターフェース等の各種インターフェース等とを接続する。
【００１９】
デバイス３は、ＧＰＵ２１と、グラフィックスメモリ２２とを有する。ＧＰＵ２１は、ノースブリッジ１３を介して、ＣＰＵ１１およびシステムメモリ１２に接続される。ＧＰＵ２１にはまた、表示装置４が接続される。ＧＰＵ２１は、ＣＰＵ１１からノースブリッジ１３を介して送られてきたグラフィックスデータ、あるいはノースブリッジ１３を介してシステムメモリ１２から読み込んだグラフィックスデータを処理し、表示装置４へ出力することができる。
【００２０】
デバイス３は、複数の処理を非同期で並列に実行可能な構成であり、ホスト２は、このデバイス２との間でデータの授受を行う。ホスト２内では、システムメモリ１２内に、デバイス３との間でデータ転送を行うためメモリ領域が確保される。デバイス３は、ホスト２からのデータを処理している間に並列してシステムメモリ１２内に確保されたメモリ領域へのアクセスを行ってデータ転送を行い、ホスト２では、デバイス３に転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイス３で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行う。
【００２１】
また、デバイス３内のＧＰＵ２１には、連続するデータを指定されたデータ量ずつ順次読み出して並列に処理する複数の処理手段が設けられている。ホスト２は、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数のストリーリングプロセッサー３７のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作する。
【００２２】
図１に示すデータ処理装置１は、印刷装置５と共に、印刷システムを構成することができる。すなわち、データ処理装置１は、画像データを印刷用のデータに変換する処理を行い、印刷装置５が、データ処理装置１から印刷用のデータを受け取って印刷を実行する。この場合、デバイス３が、画像データを印刷用のデータに変換するための処理を複数並列に実行する。ホスト２は、デバイス３に転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイス３で前回のデータが処理されている間に、確保されたメモリ領域への書き込みを行うとともに、ＧＰＵ２１内の複数の処理手段のそれぞれがラスター方向のデータを連続して読み取るように、画像データの順序を操作する。デバイス３は、画像データを印刷用のデータに変換するための処理を複数並列に実行し、ホスト２は、デバイス３から印刷用のデータを受け取って、印刷装置５に出力する。
【００２３】
［ＧＰＵの構成例］
図２は図１に示すＧＰＵ２１の構成例を示すブロック図である。ここでは、ＮＶＩＤＩＡ社のＧｅＦｏｒｃｅ（登録商標）８８００ＧＴＸを例に説明する。このＧＰＵ２１は、８個のテクスチャープロセッサークラスター（ＴＰＣ）３１を有する。各テクスチャープロセッサークラスター３１は、２つのストリーミングマルチプロセッサー（ＳＭ）３２と、コンスタントキャッシュ３３およびテクスチャーキャッシュ３４とにより構成される。ストリーミングマルチプロセッサー３２はそれぞれ、シェアードメモリ３５、命令ユニット３６および８個のストリーミングプロセッサ（ＳＰ）３７により構成される。この構成において、ストリーミングプロセッサ３７が個々の計算ユニットとなり、８×２×８＝１２８個の処理を並列に実行することができる。ここでは市販されている特定の製品の構成例を示しているが、基本的な構成、すなわち複数の計算ユニットが並列に処理する構成は、どのＧＰＵでも同じある。
【００２４】
［ＧＰＧＰＵ］
図３は、ＧＰＧＰＵの処理の流れを説明する図である。ＧＰＧＰＵにより処理を行う場合、まず、必要なデータをホスト２からデバイス３に転送し、デバイス３内のグラフィックスメモリ２２に書き込む（ステップＳ１）。デバイス３では、グラフィックスメモリ２２に書き込まれたデータをＧＰＵ２１により演算処理し（ステップＳ２）、その結果などをホスト２に書き戻す（ステップＳ３）。
【００２５】
ホスト２とデバイス３との間のデータ転送方法としては、同期転送と非同期転送とがある。同期転送では、ホスト２内のＣＰＵ１１とデバイス３との間で、ノースブリッジ１３のみを経由して、データを転送する。これに対して非同期転送では、ＣＰＵ１１がシステムメモリ１２へデータを書き込み、デバイス３のＧＰＵ２１がそれを読み出す、あるいは、ＧＰＵ２１がシステムメモリ１２へデータを書き込むことで、データを転送する。同期転送では、システムメモリ１２への書き込みおよび読み出しの必要がない分だけ、データを高速に転送することができる。しかし、データ転送の間、ＣＰＵ１１およびＧＰＵ２１が占有されることになる。一方、非同期転送では、データ転送時にはＣＰＵ１１が解放されており、他の処理を行うことができる。また、ＧＰＵ２１では、複数のストリーミングマルチプロセッサー３２が互いに非同期で処理を行うことができ、ＧＰＵ２１上でのプログラムであるカーネルの実行と、ホスト２との間のデータ転送とを、同時に実行することができる。
【００２６】
［ＧＰＵの非同期処理］
図４および図５はＧＰＵ２１による非同期処理を説明する図である。ここで、非同期で実行される個々の処理を「ストリーム」と呼ぶ。図４に示す例では、４つのストリーム＃０〜＃３でそれぞれ、配列の初期化というカーネルとデータ転送という命令が指定されている。ＧＰＵ２１は、同じストリームで指定された命令（カーネルまたはデータ転送）は、指定された順序で実行する。別のストリームで指定された命令は、どのストリームから実行するかは未定である。もし、あるストリームのカーネルと他のストリームのデータ転送が実行できるのであれば、それらを同時に実行する。
【００２７】
したがって、図４に示すストリーム＃０〜＃３に対して、ＧＰＵ２１は、図５に示すような順序で命令を実行する。すなわち、ＧＰＵ２１は、まず、ストリーム＃０で指定されたカーネルを実行する。続いて、ＧＰＵ２１は、ストリーム＃０で指定されたデータ転送（デバイス３からホスト２）と、ストリーム＃１で指定されたカーネルとを実行する。次に、ＧＰＵ２１は、ストリーム＃１で指定されたデータ転送（デバイス３からホスト２）と、ストリーム＃２で指定されたカーネルとを実行する。その後、ＧＰＵ２１は、ストリーム＃２で指定されたデータ転送（デバイス３からホスト２）と、ストリーム＃３で指定されたカーネルとを実行し、最後に、ストリームストリーム＃３で指定されたデータ転送（デバイス３からホスト２）を実行する。
【００２８】
ホスト２とデバイス３との間でデータの非同期転送を行うためには、ホスト２側のメモリがページロックド・ホストメモリであることが必要であり、システムメモリ１２内に専用の領域として確保する必要がある。しかし、システムメモリ１２内に大容量のページロックド・ホストメモリを確保することは難しく、確保できたとしても、ＣＰＵ１１の処理に影響がでる可能性がある。また、デバイス３側のグラフィックスメモリ２２にも限度がある。そこで、大量なデータを処理する場合には、それを分割して、ホスト２からデバイス３へのデータ転送、デバイス３でのカーネル実行、デバイス３からホスト２へのデータ転送を繰り返す必要がある。このとき、上述したように、ホスト２とデバイス３との間のデータ転送と、デバイス３でのカーネル実行とを同時に実行することで、ホスト２とデバイス３とのデータ転送に要する時間を隠蔽でき、全体としての処理速度を高速化することができる。さらに、本実施の形態では、ホスト２で処理する命令も同時に実行し、ホスト２内でのデータ転送に要する時間も隠蔽する。
【００２９】
［非同期処理の流れ］
図６から図１５は、ホスト２内でのデータ転送と、ホスト２とデバイス３との間のデータ転送と、デバイス３内でのカーネル実行との処理タイミングを説明する図である。ここでは、データを３つに分割して処理する場合を例に説明する。また、カーネルには、順に処理される第１処理と第２処理とが含まれるものとする。なお、第１処理および第２処理は、データ転送とのタイミングを説明するために便宜的に区分したものであり、必ずしも別々の処理である必要はない。また、第１処理および第２処理の少なくとも一方が複数の異なる処理を含んでもよく、１または複数の処理のひとつが第１処理と第２処理とにまたがってもよい。
【００３０】
ＣＰＵ１１は、処理すべきデータ量とデバイス３で実行できるストリーム数に応じてデータを入力データ＃０、＃１、＃２に分割し、分割されたデータ量に対応して、システムメモリ１２内にページロックド・ホストメモリ１５を確保する。ページロックド・ホストメモリ１５を確保すると、ＣＰＵ１１は、図６に示すように、入力データ＃０をページロックド・ホストメモリ１５に書き込む。ページロックド・ホストメモリ１５への書き込みがあると、デバイス３では、第１のストリームが、図７に示すように、書き込まれたデータ、すなわち入力データ＃０を読み出す。
【００３１】
入力データ＃０を読み出した第１のストリームは、続いて、図８に示すように、第１処理を実行する。この第１処理が行われている間に、ＣＰＵ１１は、入力データ＃１をページロックド・ホストメモリ１５に書き込む。第１のストリームは、第１処理を終了すると、図９に示すように、第２処理を実行して出力データ＃０を生成する。この間に、第２のストリームが、ページロックド・ホストメモリ１５に書き込まれた入力データ＃１を読み出す。
【００３２】
入力データ＃１を読み出した第２のストリームは、続いて、図１０に示すように、第１処理を実行する。この第１処理が行われている間に、先ほどの第１のストリームは、出力データ＃０をホスト２内のページロックド・ホストメモリ１５に書き込み、ＣＰＵ１１は、入力データ＃１をページロックド・ホストメモリ１５に書き込む。第２のストリームは、第１処理を終了すると、図１１に示すように、第２処理を実行して出力データ＃１を生成する。この間に、第３のストリームが、ページロックド・ホストメモリ１５に書き込まれた入力データ＃２読み出し、ＣＰＵ１１は、ページロックド・ホストメモリ１５から出力データ＃０を読み出す。
【００３３】
入力データ＃２を読み出した第３のストリームは、続いて、図１２に示すように、第１処理を実行する。この第１処理が行われている間に、第２のストリームは、出力データ＃１をホスト２内のページロックド・ホストメモリ１５に書き込む。第３のストリームは、第１処理を終了すると、図１３に示すように、第２処理を実行して出力データ＃２を生成する。この間に、ＣＰＵ１１は、ページロックド・ホストメモリ１５から出力データ＃１を読み出す。
【００３４】
第３のストリームは、第２処理が終了すると、図１４に示すように、第２処理で生成した出力データ＃２をページロックド・ホストメモリ１５に書き込む。そして、図１５に示すように、ＣＰＵ１１が、ページロックド・ホストメモリ１５から出力データ＃２を読み出す。
【００３５】
図１６は、図６から図１５を参照して説明した一連の処理の流れを示す図である。ここでは、入力データが画像データであり、第１処理として色変換処理、第２処理として２値化処理を行って、出力データとして印刷用のハーフトーンデータを得る場合を例に示す。この処理の流れは図６から図１５を参照した通りである。なお、図６、図７、図１４および図１５の説明では、分割された最初の入力データ＃０と最後の出力データ＃２とを非同期で転送するものとしたが、これらのデータに関しては、ホスト２内（ＣＰＵ１１とページロックド・ホストメモリ１５との間）のデータ転送時間を減らすため、同期転送を行っても良い。
【００３６】
［非同期転送の可否判断］
図１７は、非同期転送を行うか否かの判断の処理フローを示す図である。この判断は、データ転送を開始する前に、ＣＰＵ１１で行う。
【００３７】
まず、ＣＰＵ１１は、３以上のデータの分割数ｎを決定する（ステップＳ１１）。この分割数は、任意に決定してもよく、あらかじめ設定された値を用いてもよい。あらかじめ設定された値としては、デバイス３側で処理可能なストリーム数に応じて決定した値を用いることもできる。分割数ｎを３以上とするのは、デバイス３側でカーネルを実行している間にデータ転送を行うためである。一方、分割数ｎを大きくしすぎると、１度に転送するデータ量が少なくなる。分割されたデータ量が少なすぎると、データ転送に伴う処理のオーバーヘッドが大きくなるため、ホスト２とデバイス３との間のデータ転送効率が低下してしまう。最適転送速度を得るには、分割されたデータ量が所定値以上である必要がある（ステップＳ１２でＹｅｓ）。
【００３８】
次に、ＣＰＵ１１は、最適転送速度とデータ量とから、分割されたデータのホスト２とデバイス３との間の転送時間Ｔ１を求める（ステップＳ１３）。また、同じデータについて、ホスト２内でのＣＰＵ１１とページロックド・ホストメモリ１５との間の転送時間Ｔ２を求める（ステップＳ１４）。さらに、デバイス３側におけるカーネル処理速度から、分割されたデータに対するカーネル処理時間Ｔ３を推定する（ステップＳ１５）。そして、Ｔ１＋Ｔ２≦Ｔ３であり（ステップＳ１６でＹｅｓ）、分割されたデータ量に相当するページロックド・ホストメモリ１５を転送領域として確保できる場合（ステップＳ１７でＹｅｓ）には、非同期転送が可能であると判断する。
【００３９】
ＣＰＵ１１はさらに、ステップＳ１２、Ｓ１６またはＳ１７でＮｏの場合には、分割数ｎを変更し（ステップＳ１８）、３以上の分割数ｎ（ステップＳ１９でＹｅｓ）について、ステップＳ１２からステップＳ１８を繰り返す。分割数ｎが１または２、あるいはステップＳ１２、Ｓ１６およびＳ１７の条件をすべて満たす分割数ｎが存在しない場合（ステップＳ１９でＮｏ）には、非同期転送は不可であると判断する。なお、ステップＳ１２、Ｓ１６、Ｓ１７の条件をすべて満たす分割数ｎが存在しないとの判断は、図１７に示すフローを所定回数繰り返した時点で行ってもよい。
【００４０】
データの分割は、均等である必要はない。特に、最初に転送されるデータのサイズは小さいことが望ましい。また、ＧＰＵ２１の入力データサイズは一般に出力データサイズより大きいので、転送時間Ｔ１としては、ホスト２からデバイス３への転送時間を考えれば十分である。ＧＰＵ２１の出力データサイズが入力データサイズより大きくなるような場合には、ＣＰＵ１１でデバイス３からホスト２への転送時間を予測し、それを転送時間Ｔ１とする。また、ホスト２内の転送時間Ｔ２についても、ＣＰＵ１１からページロックド・ホストメモリ１５への書き込み時間を考慮すれば十分であるが、必要であれば、ページロックド・ホストメモリ１５からＣＰＵ１１への読み出し時間も考慮することができる。
【００４１】
［処理時間の隠蔽効果］
図１８は、ＧＰＧＰＵにおける処理時間の割合の例を示す図である。ここでは、画像データを入力とし、ＧＰＧＰＵにより色変換処理と２値化処理を行って、印刷用のハーフトーンデータを得る場合の例を示す。この例では、入力画像データのホスト２内での転送Ａ１に１０％、入力画像データのホスト２からデバイス３への転送Ａ２に４％、色変換処理Ｂ１に３３％、２値化処理Ｂ２に４５％、ハーフトーンデータのデバイス３からホスト２への転送Ａ３に３％、ハーフトーンデータのホスト２内の転送Ａ４に５％の時間がかかっている。このような処理において、ホスト２とデバイス３との間のデータ転送Ａ２、Ａ３と、デバイス３でのカーネル実行とを同時に実行することで、７％の処理時間を隠蔽し、全体としての処理速度を高速化することができる。さらに、ホスト２内でのデータ転送Ａ１、Ａ４についても、デバイス３でのカーネル実行とを同時に行うことで、１５％の処理時間を隠蔽することができる。
【００４２】
［データ処理の順序の操作］
ＣＰＵ１１で入力データを複数に分割する際に、ＧＰＵ２１の処理特性を考慮して、そのデータ順を入れ替えることができる。そのような実施の形態について以下に説明する。
【００４３】
図１９は、一般的なＣＰＵとＧＰＵとの並列処理の違いを説明する図であり、画像を１スレッド１ラスターで塗りつぶす場合の進捗状況を示す。図２に示すＧＰＵ２１の構成例を参照して説明すると、ＧＰＵ２１は、個々のストリーミングプロセッサー３７により、１２８個の一連の処理を並列に実行することができる。この一連の処理を「スレッド」と呼ぶ。ＣＰＵも複数のスレッドを並列に（マルチコアで別々に、あるいは個々のコアで時分割で）実行できるが、ＧＰＵ２１の並列処理は、ＣＰＵのものとは少し異なる。ＣＰＵでは、図１９（Ａ）に示すように、個々のスレッドを独立して実行させることができる。このため、スレッド毎に処理の進捗状況は異なったものとなる。一方、図２に示すＧＰＵ２１では、ストリーミングマルチプロセッサー３２単位で、４クロックにわたり同じ命令を実行する。すなわち、４クロック×８ストリーミングプロセッサ＝３２スレッドであり、３２スレッド単位で同じ命令が実行される。４クロックという値は、ハードウェアの制約である。たとえば、画像を塗りつぶす処理を各スレッドで１ラスターずつ行う場合、ＧＰＵ２１では、３２スレッド単位で実行するため、図１９（Ｂ）に示すように、連続する３２スレッドの処理の進捗状況は同じとなる。
【００４４】
このように、ＧＰＵ２１のスレッド実行は、ＣＰＵの処理と異なり、スレッド間で関連をもっている。このような例のひとつが、メモリの結合である。ＧＰＵ２１が使用するメモリには、読み書き可能でキャッシュは使用しないグローバルメモリ、読み取り専用でキャッシュを使用するテクスチャーメモリ、読み取り専用でキャッシュを使用するコンスタントメモリがある。コンスタントメモリは、サイズは小さいが、キャッシュからデータを読み出せる場合には、レジスタと同じくらい高速である。これらのメモリのうち、グローバルメモリに関しては、特定の条件に基づいてアクセスした場合に、それらのアクセスを結合して、アクセス速度を最大で１０倍程度に高速化することができる。
【００４５】
図２０は、ＧＰＵ２１によるメモリの結合を説明する図である。ＧＰＵ２１によりメモリの結合を行うことができるのは、４、８または１６バイト単位のアクセスであり、スレッドが順次アクセスし、半ワープ（１６スレッド）毎のアドレスの先頭が６４の倍数である場合である。すなわち、ＧＰＵ２１は、３２ビット、６４ビット、１２８ビットのデータを１命令でレジスタに読み込むことができる。このため、たとえば整数型（３２ビット）の１６データ（６４バイト）の配列を読み込む場合に、結合しなければ３２ビットのロード命令を１６回繰り返す必要があるが、結合すれば、１２８ビットのロード命令を４回で実行することができる。
【００４６】
図２１は、各スレッドを実行するストリーミングプロセッサ３７へのデータの読み込みを説明する図である。メモリ結合により、ひとつのストリーミングマルチプロセッサー３２内の８個のストリーミングプロセッサ３７が、連続して、ＩＤ＝０〜７、８〜１５、１６〜２３、２４〜３２のデータを読み出すことができる。しかし、データ配列内のひとつの方向にデータの関連性がある場合には、メモリ結合を有効に利用することができない。たとえば、図２１に示す例において、ＩＤの値が連続する方向にデータの関連性がある場合には、その連続する方向のデータをひとつのストリーミングプロセッサ３７に読み込む必要がある。
【００４７】
図２２は、横方向のデータに関連性のあるデータ配列例を示す図である。ここでは、ｍ行ｎ列の配列を示す。たとえば、画像データをラスター方向に処理する場合に、ディザ処理やスムージング処理では、データ配列の横方向のデータ（０，０）〜（ｎ，０）、（０，１）〜（ｎ，１）、．．（０，ｍ）〜（ｎ，ｍ）にそれぞれ関連性がある。一方、高速処理のためには、１ラスターあるいは場合によっては少数ラスターを１スレッドで処理することが望ましい。このような場合には、データ配列を転置し、関連のあるデータが連続してひとつのストリーミングプロセッサ３７に読み込まれるようにする。
【００４８】
図２３は、図２２に示すデータ配列を転置したデータ配列を示す図である。このようにデータ配列を転置することで、データ（０，０）〜（ｎ，０）をひとつのストリーミングプロセッサ３７に、データ（０，１）〜（ｎ，１）を次のストリーミングプロセッサ３７にと、関連のあるデータを同じストリーミングプロセッサ３７にシーケンシャルに読み込むことができる。このように、関連のあるデータをシーケンシャルに読み込んで結合できるので、高速のメモリアクセスが可能となる。この方法は、グローバルメモリだけでなく、テクスチャーメモリにも有効である。テクスチャーメモリの場合は、キャッシュに長いデータを取り込むことができ、キャシュを有効活用できるようになる。
【００４９】
データ配列の転置は、分割する前の入力データに対して行ってもよく、分割した後のデータに対して行ってもよい。データ配列の各要素のサイズは、データの関連性によって決定される。
【００５０】
［他の実施の形態］
以上説明したデータ処理装置および印刷システムは、ＧＰＵを有するデバイスが設けられた汎用のコンピュータに、ホストにデバイスとの間でデータ転送を行うためメモリ領域を確保し、デバイスには、ホストからのデータを処理している間に並列してメモリ領域へのアクセスを行ってデータ転送を行わせ、ホストには、デバイスに転送するデータを３以上に分割し、分割された２番目以降のデータについて、デバイスで前回のデータが処理されている間に、メモリ領域への書き込みを行わせるプログラム、および、ひとつの方向に関連のあるデータが配置されたデータ配列の入力に対し、複数の処理手段（ストリーミングプロセッサー３７）のそれぞれが連続して関連のあるデータを読み取るように、データ配列の順序を操作させるプログラムをインストールすることにより、実現することができる。
【００５１】
以上、本発明の実施の形態に係るデータ処理装置、印刷システムおよびプログラムについて説明したが、本発明は要旨を変更しない限り種々変更実施できる。たとえば、ＧＰＵとしては、上述の特定のものだけでなく、ＧＰＧＰＵのためのツールが提供されるどのようなＧＰＵを用いてもよい。また、処理対象とするデータとしては、画像データを印列用のデータに変換する場合だけでなく、計算物理学、映像および画像の処理、データベース管理、生命工学等でも利用できる。
【符号の説明】
【００５２】
１  データ処理装置、２  ホスト、３  デバイス、４  表示装置、５  印刷装置、１１  ＣＰＵ、１２  システムメモリ、１３  ノースブリッジ、１４  サウスブリッジ、１５  ページロッグド・ホストメモリ（メモリ領域）、２１  ＧＰＵ、２２  グラフィックスメモリ、３１  テクスチャープロセッサークラスター、３２  ストリーミングマルチプロセッサー、３３  コンスタントキャッシュ、３４  テクスチャーキャッシュ、３５  シェアードメモリ、３６  命令ユニット、３７  ストリーミングプロセッサ
【図１】
2010244096.tif 000003
【図２】
2010244096.tif 000004
【図３】
2010244096.tif 000005
【図４】
2010244096.tif 000006
【図５】
2010244096.tif 000007
【図６】
2010244096.tif 000008
【図７】
2010244096.tif 000009
【図８】
2010244096.tif 000010
【図９】
2010244096.tif 000011
【図１０】
2010244096.tif 000012
【図１１】
2010244096.tif 000013
【図１２】
2010244096.tif 000014
【図１３】
2010244096.tif 000015
【図１４】
2010244096.tif 000016
【図１５】
2010244096.tif 000017
【図１６】
2010244096.tif 000018
【図１７】
2010244096.tif 000019
【図１８】
2010244096.tif 000020
【図１９】
2010244096.tif 000021
【図２０】
2010244096.tif 000022
【図２１】
2010244096.tif 000023
【図２２】
2010244096.tif 000024
【図２３】
2010244096.tif 000025