我有下面的代码,我试图存储我的内核,我编译成一个变量函数,然后可以访问。不幸的是,当我在结构中声明自动kernelTest时,它会抛出一个错误,指出“非静态成员声明为auto”。 cl :: make_kernel实际返回什么,以及如何将它作为私有变量存储?Opencl make_Kernel实际返回什么?我如何存储它?
struct OCLData
{
cl::Device device;
cl::Context context;
cl::CommandQueue queue;
cl::Program program;
auto kernelTest; (PROBLEM)
const char *kernelTestSource = MULTILINE(
__kernel void kernelTest(const int N, __global float* A, __global float* B, __global float* C)
{
int i = get_global_id(0);
int j = get_global_id(1);
}
);
OCLData(){
try{
// Set Device
cl_uint deviceIndex = 0;
std::vector<cl::Device> devices;
unsigned numDevices = getDeviceList(devices);
if (deviceIndex >= numDevices)
{
std::cout << "Invalid device index (try '--list')\n";
return;
}
this->device = devices[deviceIndex];
// Set Context and Queue
std::vector<cl::Device> chosen_device;
chosen_device.push_back(device);
this->context = cl::Context(chosen_device);
this->queue = cl::CommandQueue(context, device);
// Print Device Name
std::string name;
getDeviceName(this->device, name);
std::cout << "\nUsing OpenCL device: " << name << "\n";
// Compile GPU Code
this->program = cl::Program(this->context, this->kernelTestSource, true);
//auto kernel = cl::make_kernel<int, cl::Buffer, cl::Buffer, cl::Buffer>(this->program, "kernelTest");
this->test = cl::make_kernel<int, cl::Buffer, cl::Buffer, cl::Buffer>(this->program, "kernelTest");
//cl::make_kernel<int, cl::Buffer, cl::Buffer, cl::Buffer> naive_mmul(this->program, "kernelTest");
std::cout << "GPU Code Compiled: " << "\n";
} catch (cl::Error err)
{
std::cout << "Exception\n";
std::cerr << "ERROR: "
<< err.what()
<< "("
<< err_code(err.err())
<< ")"
<< std::endl;
}
}
};
不知道,它创建了什么,但可以使用decltype创建适当类型的成员变量。 – MikeMB