我正在编写使用共享内存的CUDA内核代码,但是很难声明共享内存变量.
当我尝试静态分配多个共享内存时,会发生这种情况,如下所示.
__global__
void kernel_func(float *global_matrix) {
__shared__ float sm_mat1[4][4];
__shared__ float sm_mat2[6][6];
__shared__ float sm_mat3[3][3][3];
if ( blockIdx.x==0 && blockIdx.y==0 && theradIdx.x==0 && threadIdx.y==0 )
printf("sizeof(sm_mat1)=%d, sizeof(sm_mat2)=%d, sizeof(sm_mat3)=%d.\n",
sizeof(sm_mat1), sizeof(sm_mat2), sizeof(sm_mat3));
...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我执行时,它输出奇怪的消息如下.sizeof(sm_mat1)= 64,sizeof(sm_mat2)= 0,sizeof(sm_mat3)= 128
似乎没有分配第二矩阵,第三矩阵被分配为第二.实际上,访问第二个矩阵不能正常工作.(无法读/写数据).
我正在使用GTX 480和cuda2.0.(我正在使用编译选项-arch = sm_20打印消息).
有没有人有任何想法?