Как лучше организовать чтение в общую память вот в таком случае:
Есть матрица t[nx][ny] заведомо больше размера блока(16х16), Каждому потоку требеются
текущее значение t[x][y] и 4 соседа t[x][y+1], t[x][y-1], t[x+1][y], t[x-1][y]. Т.е. в идеале каждый поток читает свое значение в общую память потом делаем синхронизацию блока(те все как в примере с матрицой из sdk). Однако тут получается еще нужны "краевые" значения для блока
Можете что нить лучше предложить такого варианта
- __shared__ float sTimecc[BLOCK_SIDE+2][BLOCK_SIDE+2];
- const int threadX = threadIdx.x+1;
- const int threadY = threadIdx.y+1;
- sTimecc[threadX][threadY]=t[(y)*nz + (z)];
- if(threadX == blockDim.x){
- sTimecc[threadX+1][threadY] = t[(y+1)*nz + (z)];
- }
- if(threadX == 1){
- sTimecc[threadX-1][threadY] = t[(y-1)*nz + (z)];
- }
- if(threadY == blockDim.y){
- sTimecc[threadX][threadY+1] = t[(y)*nz + (z+1)];
- }
- if(threadY == 1){
- sTimecc[threadX][threadY-1] = t[(y)*nz + (z-1)];
- }
- __syncthreads();