При передаче моего указателя указать массив, я получаю ошибку foll: аргумент типа «float » несовместим с параметром типа «с плавающей точкой () [32768]CUDA: аргумент типа 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
Сообщение об ошибке очень явное - тип, который вы передаете в качестве аргумента, не совпадает с типом, требуемым ядром. – talonmies
Я должен добавить, это не имеет ничего общего с CUDA. Если вы просто определяете регулярный 'void op (float k_a [] [N])' и передаете ему аргумент 'float * ', вы получаете то же (или подобное) сообщение об ошибке. Clang дает мне 'error: can not convert 'float *' to 'float (*) [32768]' для аргумента '1' to 'void op (float (*) [32768])'' – CygnusX1
И почему 'k_a' должен быть этой «странной» вещью? Будет 'float *' не работать? – Matso