我的代码中存在问题,更准确地说,两个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);
}
你可以帮帮我吗?
答案 0 :(得分:1)
只需将数组声明为指针
double *d_doc, *d_vec_res, *d_req;
在你的内核中,将这些数组作为线性数组访问,而不是作为多维数组访问。