web-dev-qa-db-ja.com

CUDAのテクスチャメモリ:パフォーマンスを実証するための概念と簡単な例

私は、Simon Greenによる CUDAを使用した粒子シミュレーション というタイトルのNVIDIAホワイトペーパーを読んでいます。

SDKパーティクルの例と使用されるアルゴリズムについて説明します。

コードのパフォーマンスについて議論している間、著者は、粒子の位置と速度のグローバルメモリ配列がテクスチャに「バインド」されていると述べています。

今、私はテクスチャメモリの概念に非常に混乱しています。 NVIDIA CUDAプログラミングガイドでは、例がなくても、非常に厄介で難しい説明がいくつかあります。

したがって、2つの質問があります。

  1. テクスチャがどのように使用されるかおよびがパフォーマンスを向上させる非常に単純な(ダミー用のテクスチャメモリ)例を誰かに教えてもらえますか?.

  2. 40ページのCUDAプログラミングガイド4.0には、「テクスチャは線形メモリまたはCUDA配列の任意の領域にすることができます」と記載されています。さて、(言われているように)テクスチャメモリがグローバルメモリよりも優れたパフォーマンスを提供するのであれば、グローバルメモリ全体をテクスチャメモリに「バインド」してみませんか?

17
smilingbuddha
  1. Cuda SDKには、テクスチャを使用して簡単な2D座標変換を実行する方法を示す簡単な例simpleTextureが含まれています。
  2. 最初に覚えておくべきことは、テクスチャメモリisグローバルメモリです。唯一の違いは、テクスチャは専用の読み取り専用キャッシュを介してアクセスされることと、キャッシュには読み取りプロセスの一部として線形浮動小数点補間を実行できるハードウェアフィルタリングが含まれていることです。ただし、キャッシュは、メモリ内の局所性ではなく、空間的局所性(テクスチャの座標系)に対して最適化されているという点で、従来のキャッシュとは異なります。一部のアプリケーションでは、これは理想的であり、フィルタリングハードウェアから取得できるキャッシュと無料のFLOPの両方のためにパフォーマンス上の利点がありますが、他のアプリケーションではそうではなく、テクスチャは遅いアクセスには、グローバルメモリ読み取りに加えてキャッシュミスペナルティが含まれ、補間は必要ないためです。

したがって、計算は通常、ローカルの相互作用が考慮されるセルまたはコントロールボリュームで実行され、隣接するパーティクルは相互に速度と加速度にアクセスする必要があるため、パーティクルシミュレーションのようなものはテクスチャの恩恵を受けることができます。これには、単純な線形メモリキャッシュよりも、空間的にローカルなキャッシュの方が適しています。ただし、他のアプリケーションの場合、メモリアクセスパターンには固有の空間的局所性はなく、テクスチャは従来のキャッシュメモリに比べてほとんどまたはまったくメリットがありません。

24
talonmies