I've just started working in opencl and I'm currently working on what should be a relatively basic hello_world program in opencl. Unfortunately the program is not outputting the proper phrase or anything at all it instead hangs with no output.
Any idea on why that is the case?
Below is: openglsource.cpp and hello.cl
#define CL_USE_DEPRECATED_OPENCL_2_0_APIS
#include<CL/cl.hpp>
#include<iostream>
#include <fstream>
int main()
{
std::vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
auto platform = platforms.front();
std::vector<cl::Device> devices;
platform.getDevices(CL_DEVICE_TYPE_CPU, &devices);
auto device = devices.front();
std::ifstream helloWorldFile("hello.cl");
std::string src(std::istreambuf_iterator<char>(helloWorldFile), (std::istreambuf_iterator<char>()));
cl::Program::Sources sources( 1, std::make_pair(src.c_str(), src.length() + 1));
cl::Context context(device);
cl::Program program(context, sources);
auto err = program.build("-cl-std=CL1.2");
char buf[16];
cl::Buffer memBuf(context, CL_MEM_WRITE_ONLY | CL_MEM_HOST_READ_ONLY, sizeof(buf));
cl::Kernel kernel(program, "Hello", &err);
kernel.setArg(0, memBuf);
cl::CommandQueue queue(context, device);
queue.enqueueTask(kernel);
queue.enqueueReadBuffer(memBuf, GL_TRUE, 0, sizeof(buf), buf);
std::cout << "hello";
std::cin.get();
}
hello.cl
__kernel void HelloWorld(__global char* data)
{
data[0] = 'H';
data[1] = 'E';
data[2] = 'L';
data[3] = 'L';
data[4] = 'O';
data[5] = ' ';
data[6] = 'W';
data[7] = 'O';
data[8] = 'R';
data[9] = 'L';
data[10] = 'D';
data[11] = '!';
data[12] = '\n';
}
The issue was in
cl::Kernel kernel(program, "Hello", &err);
it should be
cl::Kernel kernel(program, "HelloWorld", &err);
The string that goes there is not just an arbitrary name as I had inferred it should be the function that you want to call from the specified kernel. Which makes sense give that a kernel can hold multiple functions!
Such a simple fix.....I feel bad for posting!
You should also change GL_TRUE
to CL_TRUE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With