CUDAで共有変数を割り当てる方法は? 特定のブロックに属するスレッド間でデータを共有する必要があるカーネルがあります。sid
とという名前の 2 つの共有変数が必要ですeid
。私はこのように使用します:
extern __shared__ int sid, eid
__shared__
しかし、変数に外部リンケージを設定できないというエラーが表示されます。
CUDAで共有変数を割り当てる方法は? 特定のブロックに属するスレッド間でデータを共有する必要があるカーネルがあります。sid
とという名前の 2 つの共有変数が必要ですeid
。私はこのように使用します:
extern __shared__ int sid, eid
__shared__
しかし、変数に外部リンケージを設定できないというエラーが表示されます。
共有メモリを割り当てるには、静的と動的の 2 つの方法があります。
1、静的
__shared__ int Var1[10]
2、dynamic : 「extern」キーワードを追加する必要があります
extern __shared__ int Var1[]
共有メモリを動的に割り当てる場合は、関数を呼び出すときに共有メモリのサイズを設定する必要があります。たとえば
testKernel <<< grid, threads, size>>>(...)
、3 番目のパラメタは共有メモリのサイズです。このように、すべての共有メモリは同じアドレスから始まります。複数の共有メモリを定義したい場合。次のようなコードを書く必要があります。
__global__ void func(...)
{
extern __shared__ char array[];
short * array0 = (short*)array;
float * array1 = (float*)(&array0[128]);
}