8

CUDAの__shared__メモリは、コンパイル時に既知のサイズを必要とするようです。ただし、私の問題では、__shared__メモリサイズは実行時にしかわかりません。つまり、

int size=get_size();
__shared__ mem[size];

これは「エラー: 定数値が不明です」というエラーが発生し、この問題を回避する方法がわかりません。

4

2 に答える 2

8

共有メモリの目的は、ブロック内のスレッドが連携できるようにすることです。配列を として宣言する__shared__と、ブロック内の各スレッドは同じメモリを参照するため、特定のスレッドが共有メモリ内の配列に独自のサイズを設定できるのは意味がありません。

__shared__ただし、すべてのスレッドで同じサイズの単一配列のサイズを動的に指定する特殊なケースはサポートされています。共有メモリの割り当てを参照してください。

スレッドごとにメモリを動的に割り当てる必要がある場合は、(Fermi の) カーネル内で new または malloc を使用できますが、これらはグローバル メモリを割り当てるため、遅くなる可能性があります。

于 2012-03-30T03:31:55.597 に答える
1

extern__shared__ mem[];(静的共有メモリ) の代わりに (動的共有メモリ)を使用する必要があります __shared__ mem[size];。[ https://devblogs.nvidia.com/parallelforall/using-shared-memory-cuda-cc/][1]を参照

于 2016-10-18T18:20:11.207 に答える