1:我在核函数中设置线程块的大小为128,我需要将float类型的变量定义为共享内存变量,发现当将共享内存数组定义写成数组长度__shared__ float S_A[128]时程序运行是错误的,当把定义写为__shared__ float S_A[sizeof(float)*320]时可以得到正确的结果。共享内存不是可以直接定义数组长度吗?
2:我在核函数中共享内存使用如下kernel2(float* A,float* M, float* Y,float* X)
{
const int n = blockDim.x * blockIdx.x + threadIdx.x;
__shared__ float S_A[sizeof(float) * 320];
for (int j = 0; j < 12; j++)
{
S_A[threadIdx.x * 12 + j] = A[n * 12 + j];
S_A[threadIdx.x * 12 + j]=M[Y[n]]+X[n * 12 + j];
}
__syncthreads();
}
因该怎么修改程序消除或减轻共享内存的bank冲突?