0

jcudaで共有メモリを使用して、非常に単純なことをしようとしています。私のカーネル:

__shared__ int testMe;

extern "C"
__global__ void test() {
  testMe = 5;
}

共有メモリをグローバルにすると、デバイス関数で使用できるようになりますが、残念ながら、共有メモリをグローバルに宣言することさえできません。カーネルが起動できないという問題で Cuda がクラッシュするだけです。私もやってみました:

extern __shared__ int test

ただし、nvcc コンパイラは、共有メモリを外部リンクできないというエラーを返します。カーネルの記述を容易にするためにこれを機能させたいのですが、方法がわかりません。

4

1 に答える 1

1

翻訳単位スコープで静的共有メモリを定義することはできません。カーネル スコープで宣言する必要があります。そうする場合、共有メモリは、同じブロック内のすべてのスレッドに対して同じメモリになります。すべてのブロックのすべてのスレッドで同じメモリを使用する場合は、グローバル メモリを使用する必要があります (ホスト コードで cudaMalloc() を呼び出し、メモリのポインタをカーネルに渡します)。

于 2015-06-26T09:01:50.970 に答える