3

DirectX のコンテキストで使用されるテクスチャ メモリとは対照的に、Cuda のコンテキストで使用されるテクスチャ メモリの違いを説明してください。グラフィックス カードに 512 MB のアドバタイズ メモリがあるとします。定数メモリ/テクスチャ メモリとグローバル メモリにどのように分割されますか。

たとえば、totalConstMem が 64KB、totalGlobalMem が 4GB の tesla カードを cudaGetDeviceProperties でクエリしたところ、必要なテクスチャ メモリの量を示す変数がありません。

また、DirectX などのグラフィックス API 経由でアクセスした場合の「テクスチャ メモリ」はどれくらいですか。私はこれらの API でプログラミングした経験がないので、どのようなメモリにどのようにアクセスできるのかわかりません。しかし、私の知る限り、すべてのメモリへのアクセスはハードウェアキャッシュです。私が間違っている場合は、私を修正してください。

KoppeKTop の回答の後:CUDA と DirectX の両方の場合、共有メモリはテクスチャ メモリの自動キャッシュとして機能しますか? とにかく、別のハードウェアキャッシュを持つことは意味がないと思います。また、カーネルで共有メモリ全体を使用している場合、テクスチャ メモリがキャッシュされないということですか?

ありがとう。

4

2 に答える 2

2

実は、DirectX を扱ったことはありませんでしたが、CUDA テクスチャで状況を説明できました。テクスチャは、キャッシュされた読み取り専用アクセスを持つ単純な配列 (cudaArray またはピッチ付き配列) であり、グローバル メモリに格納されます。したがって、512 MB カードの 1 つの大きなテクスチャの最大サイズは 512 MB です (実際には少し小さくなりますが、十分ではありません)。2D 空間のデータにアクセスするように最適化されています (2D スライスとしてキャッシュされます)。また、アクセス時に座標と値を変換することもできます (詳細については、CUDA プログラミング ガイドを参照してください)。

いいえ、すべてのメモリがアクセス時にキャッシュされるわけではありません (コンピューティング機能 1.x を備えた CUDA デバイスの場合)。定数とテクスチャ メモリのみ。コンピューティング機能 >= 2.0 (Fermi) を持つデバイスは、L1 および L2 キャッシュ (または L2 のみ - 構成可能) を使用してすべてのメモリ アクセスをキャッシュします。

于 2010-08-03T14:44:42.407 に答える
2

KoppeKTop の回答の後:CUDA と DirectX の両方の場合、共有メモリはテクスチャ メモリの自動キャッシュとして機能しますか? とにかく、別のハードウェアキャッシュを持つことは意味がないと思います。また、カーネルで共有メモリ全体を使用している場合、テクスチャ メモリがキャッシュされないということですか?

GF100 より前の世代 (G80) の場合、GPU には専用のグローバル定数キャッシュとグローバル テクスチャ キャッシュがあります (どちらも読み取り専用です)。共有メモリには専用のメモリ バンクがあります。

GF100 世代では、専用のテクスチャ キャッシュがまだありますが、同じオンチップ メモリが共有メモリと L1 キャッシュ (キャッシュ グローバル メモリ) の間で共有されるようになりました。CUDA を使用する場合、このメモリの分割方法を構成できます。DirectX/OpenGL の場合、グラフィックス ドライバーは 48KB の共有メモリ/16KB の L1 キャッシュ構成を使用します。

いずれにせよ、共有メモリは常にソフトウェアで管理され (GF100 の L1 キャッシュ専用の部分を除く)、テクスチャ キャッシュを消費しません。

于 2010-08-03T23:46:40.513 に答える