程序创建了2条线程,一条线程0负责CPU上image数组的创建和释放,另一条线程1负责将CPU上的image数组异步复制到GPU的二维线性数组src上。
其中image数组是1维的,大小为w*h(表示图片的长宽)。
代码片段如下
线程0的代码是这样的:
//创建CPU空间
cudaMallocHost((void **)&image, w*h * sizeof(float));
…//这里是等待线程1完成
//释放CPU空间
cudaFreeHost(image);
//线程1的代码是这样的
float Src;
size_t pitch
//创建GPU上创建空间Src,之后将image复制过去。
cudaMallocPitch((void*)(&Src), &pitch, wsizeof(float), (size_t)h);
//将image复制复制到2维线性数组Src
cudaMemcpy2DAsync(Src,pitch,image, wsizeof(float), w*sizeof(float), (size_t)h,cudaMemcpyHostToDevice,0);
在运行时会在cudaMemcpy2DAsync报 invalid argument错误。
原因是什么?错误的原因不是和线程上下文有关吧?