1

私は自分のプロジェクトから、__constant__メモリを使用するときにcudaがファイルスコープリンケージを持っていることを知っています。つまり、実行したのと同じファイル内で定数メモリを使用する必要がありますcudaMemcpyToSymbol。では、cuda がファイル スコープ リンクを使用する他のストレージ/メモリ タイプは何ですか? にも使えると思いますtexture。しかし、__shared__メモリとは何ですか?

4

1 に答える 1

2

最初のポイントは、従来の CUDA コンパイル モデルでは、すべてのデバイス シンボルのスコープ要件が翻訳単位スコープであることです。そして、少なくとも少なくとも

  1. __global__ 関数
  2. __デバイス__ 関数
  3. __テクスチャ__ オブジェクト
  4. __constant__ メモリ
  5. __shared__ メモリが extern として宣言されました
  6. __device__ シンボル

これらはすべて、ランタイムが正しく機能するために使用される同じ翻訳単位で定義する必要があります。根本的な理由は、すべてが機能するためには、上記のリストのすべてのオブジェクトが同じ CUDA モジュール (これはドライバー API の概念です) に発行される必要があるためです。

CUDA 5 では、実質的に静的リンケージ モデルである個別のコンパイル モードが導入されています。これは、シンボルを同じ変換単位で定義する必要がなく、前方宣言することができ、リンカーがデバイス コード リンケージ パス中にシンボル マッチングを処理することを意味します。

于 2013-06-27T06:06:45.760 に答える