共有変数の仕組みについて質問があります。
このようにカーネルで共有変数を宣言すると
__shared__ int array1[N]
、各アクティブ ブロックのすべての一意の共有メモリに、サイズ N の array1 のインスタンスが含まれるようになりました。つまり、各アクティブ ブロックのすべての共有メモリに N*sizeof(int) バイトが割り当てられたことを意味します。N*sizeof(int) は、計算能力 1.3 の GPU の場合、最大で 16KB でなければなりません。
したがって、上記が正しいと仮定し、次のようにホストで割り当てられた 2D スレッドと 2D ブロックを使用します。
dim3 block_size(22,22);
dim3 grid_size(25,25);
それぞれサイズ N*sizeof(int) の array1 の 25x25 インスタンスがあり、ブロックの各共有メモリにアクセスできるほとんどのスレッドは 22x22 です。これは私の最初の質問であり、回答がありました。
Q: array1 に値を代入すると
array1[0]=1;
次に、すべてのアクティブなブロックがその値を独自の共有メモリに即座に割り当てますか?