共有メモリに同時多数アクセスをしたらどうなるのか。
CUDA:
- __global__ void test
- (
- int size
- , int* nums
- )
- {
- int id = threadIdx.x + threadIdx.y*10;
- __shared__ int data[100];
- data[0] = id;
- nums[id] = data[0];
- }
適当なサイズの共有メモリを確保して、いわゆるスレッド番号みたいなものを書き込んで、取得してみる。
同一の共有メモリにみんなで書き込んでいるため、値がどうなるかわかったもんじゃない。
共有メモリマルチスレッドプログラミングのバグの温床。
のはずなんだけど、値が狂わない。おかしいなあ?
CPUプログラミングで言うとことのスレッドであるCUDAのブロックは互いに同期を取れないらしいんだけど、これって一般的な並列プログラミングの足枷になるよなあ……。協調処理がしにくすぎる。アプリケーションとの相性になるよなぁ。