cuda二维存储空间的分配cudaMallocPitch和cudaMemcpy2D

梧桐栖鸦
博客专家认证
2017-06-12 07:51:15
在做图像处理时,想直接用二维的存储空间进行计算,在分配存储空间和数据复制时,一直出错,代码如下:
Mat left_image = imread("AVT60.bmp", IMREAD_GRAYSCALE);
Mat right_image = imread("AVT61.bmp", IMREAD_GRAYSCALE);

//判断图像文件是否加载成功
if (left_image.empty() || right_image.empty())
{
cout << "图像加载失败,程序即将退出...";
exit(EXIT_FAILURE);
}
else
cout << "图像加载成功!" << endl << endl;

//图像基本信息
const int width = left_image.cols;
const int height = left_image.rows;
//cout << left_image.size();

//声明device存储图像数据
uchar* left_data_device = NULL;
uchar* right_data_device = NULL;

size_t pitch;
checkCudaErrors(cudaMallocPitch(&left_data_device, &pitch, width*sizeof(int), height));
checkCudaErrors(cudaMallocPitch(&right_data_device, &pitch, width*sizeof(int), height));

checkCudaErrors(cudaMemcpy2D(left_data_device, pitch, left_image.data, width*sizeof(int), width*sizeof(int), height, cudaMemcpyHostToDevice));
checkCudaErrors(cudaMemcpy2D(right_data_device, pitch, right_image.data, width*sizeof(int), width*sizeof(int), height, cudaMemcpyHostToDevice));

checkCudaErrors(cudaFree(left_data_device));
checkCudaErrors(cudaFree(right_data_device));


编译没错,运行就出错,应该是内存分配或数据复制出问题,在注释掉两句cudaMemcpy2D后,程序编译和运行均没有问题,不知道具体是什么地方出错了
...全文
732 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧