gpt4 book ai didi

c++ - 在 OpenCL 库中找不到 cl::Error 类

转载 作者:行者123 更新时间:2023-12-01 15:13:48 26 4
gpt4 key购买 nike

我在一些代码中看到,在OpenCL库中,有一个名为cl::Error的类,通过它可以捕获OpenCL代码中的错误和错误类型.但是当我在我的代码中添加时,就像这样

#include <CL/cl.hpp>
#include <fstream>
#include <iostream>
#include <cassert>
#include <exception>
#define __CL_ENABLE_EXCEPTIONS

int main()
{
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);

assert(platforms.size() > 0);

auto myPlatform = platforms.front();
std::cout << "Using platform: " << myPlatform.getInfo<CL_PLATFORM_NAME>() << std::endl;

std::vector<cl::Device> devices;
myPlatform.getDevices(CL_DEVICE_TYPE_GPU, &devices);

auto myDevice = devices.front();
std::cout<< "Using device: "<< myDevice.getInfo<CL_DEVICE_NAME>() << std::endl;

std::ifstream helloworldfile("helloWorldKernel.cl");
std::string src(std::istreambuf_iterator<char>(helloworldfile), (std::istreambuf_iterator<char>()));

cl::Program::Sources source(1,std::make_pair(src.c_str(), src.length() + 1));

cl::Context context(myDevice);
cl::Program program(context,source);

cl::CommandQueue queue(context,myDevice);

try
{
program.build("-cl-std=CL1.2");
} catch(cl::Error& e)
{
std::cout << e.what() << std::cout;
}

int err;
int szChar = 16;
char buf[szChar];

cl::Buffer memBuf(context, CL_MEM_READ_WRITE, sizeof(char) * szChar);

cl::Kernel kernel(program, "helloWorld", &err);

if(err != CL_SUCCESS)
{
std::cout<<" Error in creating kernel, error: "<< err << std::endl;
exit(1);
}


kernel.setArg(0,memBuf);

queue.enqueueTask(kernel);

err = queue.enqueueReadBuffer(memBuf,CL_TRUE, 0, sizeof(buf), buf);

if(err != CL_SUCCESS)
{
std::cout<<" Error in reading from device, error: "<< err << std::endl;
exit(1);
}

std::cout << buf;
std::cin.get();

return 0;

}

我得到的错误是

helloWorld.cc:46:12: error: expected type-specifier
} catch (cl::Error& e)
^
helloWorld.cc:46:21: error: expected unqualified-id before ‘&’ token
} catch (cl::Error& e)
^
helloWorld.cc:46:21: error: expected ‘)’ before ‘&’ token
helloWorld.cc:46:21: error: expected ‘{’ before ‘&’ token
helloWorld.cc:46:23: error: ‘e’ was not declared in this scope
} catch (cl::Error& e)
^
helloWorld.cc:46:24: error: expected ‘;’ before ‘)’ token
} catch (cl::Error& e)

我想知道该类是否存在或至少存在于特定版本的库 OpenCL 中,如果存在,应该如何调用它。

最佳答案

你需要定义__CL_ENABLE_EXCEPTIONS或者如果您使用的是最新的 #include <CL/cl2.hpp>你需要CL_HPP_ENABLE_EXCEPTIONS .

定义需要在包含 opencl header 之前。

关于c++ - 在 OpenCL 库中找不到 cl::Error 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224203/

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