gpt4 book ai didi

c++ - opencl clCreateImage clCreateImage2D

转载 作者:太空狗 更新时间:2023-10-29 23:16:58 24 4
gpt4 key购买 nike

我是使用 C++ 的 OpenCl 的新手,我正在尝试创建一个图像的 cl_mem,但我无法让它工作:

首先我像这样使用 clCreateImage2D:

Mat image=imread("pic.jpg",CV_32FC1);
int width = image.rows;
int height = image.cols;

char *buffer = reinterpret_cast<char *>(image.data);

cl_image_format clImageFormat;
clImageFormat.image_channel_order = CL_INTENSITY ;
clImageFormat.image_channel_data_type = CL_FLOAT;
cl_mem Image2DBuffer =clCreateImage2D(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, &clImageFormat, width,height,0,buffer,&error);

但它没有编译,Visual Studio 2012 给了我这个错误:“error C4996: 'clCreateImage2D': was declared deprecated”。

我寻找解决方案,发现 OpenCL 1.2 已将 clCreateImage2D 和 clCreateImage3D 替换为 clCreateImage(或者至少我是这么理解的),因此我更改了以下代码:

cl_image_desc image_desc;
image_desc.image_type = CL_MEM_OBJECT_IMAGE2D;
image_desc.image_width = width;
image_desc.image_height = height;
image_desc.image_array_size = 1;
image_desc.image_row_pitch = 0;
image_desc.image_slice_pitch = 0;
image_desc.num_mip_levels = 0;
image_desc.num_samples = 0;
image_desc.buffer = NULL;

cl_mem ImageBuffer=clCreateImage(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, &clImageFormat, &image_desc, buffer,&error);

但程序在最后一行崩溃(未处理的异常在 0x0000000000000000),我不知道为什么。

如果有人能提供帮助,我将不胜感激。我想我已经写下了您理解问题可能需要的所有内容,但如果缺少某些内容,请告诉我,我会提供额外信息。

最佳答案

下面的代码适用于 VS12,AMD APP SDK v2。使用第一个分配标志,我的 GPU 使用共享内存,所以我选择 CL_MEM_ALLOC_HOST_PTR。

//Let image constructor select row pitch
std::size_t row_pitch = 0, rows = 768, cols = 1024;

Mat image(rows, cols, CV_32F, cv::Scalar(0.0f));
try{
cl::Image2D img(context, CL_MEM_ALLOC_HOST_PTR | CL_MEM_COPY_HOST_PTR, cl::ImageFormat(CL_LUMINANCE, CL_FLOAT), image.cols, image.rows, row_pitch, (void*)image.data);
}catch(cl::Error &e){
cerr <<e.what()<<endl;
}

关于c++ - opencl clCreateImage clCreateImage2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21134677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com