1

CUDAのメモリ階層には、共有メモリ、テクスチャメモリ、定数メモリ、レジスタ、そしてもちろんcudaMalloc()を使用して割り当てるグローバルメモリなどがあることを理解しています。

私は見つけたドキュメントを探してきましたが、グローバルメモリとは何かを明確に説明しているドキュメントはまだ見つかりません。

ドキュメントの1つにポインタをホスト側で逆参照できないと記載されていたため、割り当てられたグローバルメモリはグラフィックカード自体のGDDRにあり、CPUと共有されるRAMにはないと思います。私は正しいですか?

4

3 に答える 3

4

グローバルメモリは、デバイスメモリ(グラフィックカード上のメモリ)またはページロック(固定)ホストメモリにマップできる仮想アドレス空間です。後者にはCC>1.0が必要です。

ローカル、定数、テクスチャ、およびローカルメモリはグローバルメモリに割り当てられますが、異なるアドレス空間とキャッシュを介してアクセスされます。

CC> 2.0では、汎用アドレス空間により、共有メモリをグローバルアドレス空間にマッピングできます。ただし、共有メモリは常にSMごとのオンチップメモリ​​に存在します。

于 2012-06-24T16:02:59.643 に答える
2

グローバルメモリはオフチップですが、グラフィックカード上にあります。

ローカルメモリはグローバルメモリに格納されますが、アドレスは、配列がそこに格納されているときに、ワープの各スレッドがその配列の同じインデックスから読み取るときにアクセスが合体するようにインターリーブされます。

コンスタントメモリとテクスチャメモリも(最初は)グローバルメモリに保存されますが、オンチップキャッシュにキャッシュされます。

共有メモリとL1およびL2キャッシュはオンチップです。

于 2012-06-24T15:30:33.237 に答える
0

これについては、 CUDACプログラミングガイドのセクション3.2.2で説明されています。つまり、すべてのタイプのメモリ、つまり共有、定数、テクスチャ、グローバルは、デバイスのメモリ、つまりGPU自体に存在します。

ただし、メモリの一部を「マップ」するように具体的に宣言することはできます。つまり、デバイスからアクセスできるようにホスト上のメモリを宣言できます。これについては、プログラミングガイドのセクション3.2.4を参照してください。

于 2012-06-24T15:12:11.107 に答える