The earlier blog-post was about how to use Qt Creator with OpenCL. The examples are all around Images, but nowhere a simple Hello World. So here it is: AMD’s infamous OpenCL Hello World in Qt. Thank’s to linuxjunk for glueing the parts together.
int main(int argc, char *argv[]) {
// Define the kernel. Take a good look what it does.
QByteArray prog(
"#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enablen"
"__constant char hw[] = "Hello World from Qt!"; n"
"__kernel void hello(__global char * out) {n"
" size_t tid = get_global_id(0); n"
" out[tid] = hw[tid]; n"
"}n"
);
// Get a context on the first available GPU.
QCLContext context;
if (!context.create(QCLDevice::GPU))
qFatal("Could not create OpenCL context");
// Allocate 100 bytes of memory on the Host.
size_t mem_size = 100;
char* outH = new char[mem_size];
// Allocate buffer on the Device.
QCLBuffer outCL = context.createBufferHost(outH, sizeof(char) * mem_size,
QCLMemoryObject::WriteOnly);
// Compile program against device
QCLProgram program = context.buildProgramFromSourceCode(prog);
// Create a kernel object, tell it we are using the kernel called "hello".
QCLKernel kernel = program.createKernel("hello");
// Set the necessary global memory. In this case it is the buffer-size.
kernel.setGlobalWorkSize(outCL.size(), 1);
// Turn on profiling.
QCLCommandQueue queue = context.commandQueue();
queue.setProfilingEnabled(true);
// Queue the kernel up to run.
// Give it an argument which is the memory we allocated above.
QCLEvent event = kernel(outCL);
// Use the event object above to block until processing has completed.
event.waitForFinished();
// Timing only works with profiling on. runTime is unsigned.
printf(" time '%u'n", event.runTime());
// Read the results out of the shared memory area.
outCL.read(outH, mem_size);
// Write to screen.
printf(" result = '%s'", outH);
}
Have fun!
Related Posts
Avoiding false dependencies in only two steps
... of the times you begin with this. Your first program after Hello World can probably end up being a huge file with one long serialized ...
Using Qt Creator for OpenCL
... but I promise it gets easier after this. Check out our Hello World, the provided examples and http://doc.qt.nokia.com/opencl-snapshot/ ...
OpenCL at SC14
... 16 November 8:30 - 17:00 Tutorial From "Hello World" to Exascale Using x86, GPUs and Intel Xeon Phi Coprocessors (probably ...
StreamComputing exists 5 years!
... in 2017), by registering the website and writing a hello-world article. About 4 months of preparations and paperwork later the ...