【发布时间】:2017-02-19 18:40:59
【问题描述】:
在传递指向数组的指针时,出现以下错误: “float ”类型的参数与“float ()”类型的参数不兼容[32768]
我的代码的相关片段是:
#define N 32768
__global__ void op(float k_a[][N])
{
//some operation
}
float *ptr_a=(float*)malloc(N*N*sizeof(float));
float *d_ptr_a;cudaMalloc((void**)&d_ptr_a,N*N*sizeof(float));
cudaMemcpy(d_ptr_a,ptr_a,N*N*sizeof(float),cudaMemcpyHostToDevice);
op<<<nblocks,nthreadsperblock>>>(d_ptr_a)
有人能告诉我出了什么问题吗?我是 CUDA 的初学者。
【问题讨论】:
-
我应该补充一下,这与CUDA无关。如果您只定义一个常规的
void op(float k_a[][N])并将float*参数传递给它,您会收到相同(或相似)的错误消息。 Clang 给我error: cannot convert ‘float*’ to ‘float (*)[32768]’ for argument ‘1’ to ‘void op(float (*)[32768])’ -
如果我使用float*,那么我对如何访问二维数组有点困惑。
-
@CygnusX1:如果您不使用 C 标记它(这就是我删除它的原因),每个人的生活都会轻松得多。否则某个C标签的巨魔会从他的桥下出现,并在cmets中掀起一场关于“CUDA不是C”的火焰战,就像他之前做过很多次一样
-
我完全理解其中的道理,但这就是我们生活的现实。自我审查,或者每次提到C和CUDA时都享受一场火焰战争
标签: cuda