小编Yos*_*oto的帖子

无法分配CUDA共享内存

我正在编写使用共享内存的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打印消息).

有没有人有任何想法?

memory cuda

1
推荐指数
1
解决办法
111
查看次数

标签 统计

cuda ×1

memory ×1