cudaMemcpy返回的cudaErrorInvalidValue

时间:2016-02-17 12:15:36

标签: cuda

我的代码中存在问题,更准确地说,两个cudaMemcpy调用都返回以下代码中的cudaErrorInvalidValue:

const int N = 3 ;
double d_doc[N][4][2500];
double d_vec_res[N][2];
double d_req[4][100];.
.
.
.    
void similarity (double doc[][4][2500], double req[4][100], double vec_res[][2]) 
    {         
        int r =  cudaMalloc((void **)&d_req , 4*100*sizeof(double) ); // r = cudaSuccess
        cudaMalloc((void **)&d_doc , N*2500*4*sizeof(double) );
        cudaMalloc((void **)&d_vec_res , N*2*sizeof(double) );         
        int err =  cudaMemcpy(d_req, req, 4*100*sizeof(double), cudaMemcpyHostToDevice); // err = cudaErrorInvalidValue
        int err2 = cudaMemcpy(d_doc, doc, N*4*2500*sizeof(double), cudaMemcpyHostToDevice); // err = cudaErrorInvalidValue               
        sim<<<1, N>>>(d_doc,d_req,d_vec_res);        
        cudaMemcpy(vec_res, d_vec_res, 2*N*sizeof(double),cudaMemcpyDeviceToHost); 
         cudaFree(d_req);
         cudaFree(d_doc);
         cudaFree(d_vec_res);
     }
你可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

只需将数组声明为指针

double *d_doc, *d_vec_res, *d_req;

在你的内核中,将这些数组作为线性数组访问,而不是作为多维数组访问。