我为OpenCL设备的设备,上下文和命令队列创建了一个类。但在我打电话和使用它的过程中,给了我一些问题。
这是我在oclenvironment.h中的课程:
class oclenvironment
{
public:
oclenvironment();
oclenvironment(int& status, int dev_type);
~oclenvironment();
const cl::Device* GetDevice();
const cl::Context *GetContext();
const cl::CommandQueue* GetQueue();
private:
std::vector<cl::Platform> _platform;
std::vector<cl::Device> _devices;
cl::Context _context;
cl::CommandQueue _queue;
};
我的cpp文件,函数声明:
clenvironment::oclenvironment(int& status,int dev_type)
{
status = cl::Platform::get(&_platform);
if(!_platform.empty())
{
auto err = _platform[0].getDevices(dev_type,&_devices);
if(err!=0){
status = err;
return;
}
_context = new cl::Context(&_devices,NULL,0,0,&err);
if(err!=0){
status = err;
return;
}
_queue = new cl::CommandQueue(*_context,_devices[0],CL_QUEUE_PROFILING_ENABLE,&err);
if(err!=0){
status = err;
return;
}
}
}
const cl::Device *oclenvironment::GetDevice()
{
return &_devices[0];
}
const cl::Context *oclenvironment::GetContext()
{
return _context;}
const cl::CommandQueue *oclenvironment::GetQueue()
{
return _queue;
}
现在在我的main.cpp中:
int err = 0;
oclenvironment env(err,CL_DEVICE_TYPE_GPU);
auto devices = env.GetDevice();
auto ctx = env.GetContext();
auto queue = env.GetQueue();
cl::Program::Sources source(1,std::make_pair(code.c_str(),strlen(code.c_str())));
cl::Program prg(*ctx,source);
err = prg.build(*devices,nullptr,0,0); // I am getting error here
在构建期间,我收到错误,因为&#34;没有匹配函数来调用cl :: Program :: build(const cl :: Device&amp;,std :: nullptr_t,int,int)&# 34;
在致电或宣布或定义期间,一定是一些愚蠢的错误。