私は、Simon Greenによる CUDAを使用した粒子シミュレーション というタイトルのNVIDIAホワイトペーパーを読んでいます。
SDKパーティクルの例と使用されるアルゴリズムについて説明します。
コードのパフォーマンスについて議論している間、著者は、粒子の位置と速度のグローバルメモリ配列がテクスチャに「バインド」されていると述べています。
今、私はテクスチャメモリの概念に非常に混乱しています。 NVIDIA CUDAプログラミングガイドでは、例がなくても、非常に厄介で難しい説明がいくつかあります。
したがって、2つの質問があります。
テクスチャがどのように使用されるかおよびがパフォーマンスを向上させる非常に単純な(ダミー用のテクスチャメモリ)例を誰かに教えてもらえますか?.
40ページのCUDAプログラミングガイド4.0には、「テクスチャは線形メモリまたはCUDA配列の任意の領域にすることができます」と記載されています。さて、(言われているように)テクスチャメモリがグローバルメモリよりも優れたパフォーマンスを提供するのであれば、グローバルメモリ全体をテクスチャメモリに「バインド」してみませんか?
simpleTexture
が含まれています。したがって、計算は通常、ローカルの相互作用が考慮されるセルまたはコントロールボリュームで実行され、隣接するパーティクルは相互に速度と加速度にアクセスする必要があるため、パーティクルシミュレーションのようなものはテクスチャの恩恵を受けることができます。これには、単純な線形メモリキャッシュよりも、空間的にローカルなキャッシュの方が適しています。ただし、他のアプリケーションの場合、メモリアクセスパターンには固有の空間的局所性はなく、テクスチャは従来のキャッシュメモリに比べてほとんどまたはまったくメリットがありません。