|N9VV webpages are an expression of my personal enthusiasm and
excitement about the Apache Labs projects. I am editing the pages every day
to make them attractive and accurate so that you will consider Apache Labs
products when you purchase Ham Radio equipment. These pages are not sponsored by
OpenHPSDR or Apache Labs. Copyright N9VV© 2012.
** IMAGES AND LINKS SHOWN HERE ARE SHARED WITH YOU
using OpenCL for Hermes
What is OpenCL anyway?
For those new to it, OpenCL is an open, royalty-free standard for
parallel programming in a heterogeneous computing environment. The most
common use you’ve probably heard of is to run arbitrary C code on your
system’s GPU. These days GPU’s are more powerful than CPU’s, having been
designed to pump out hundreds of thousands of textured triangles per
second in your favorite shoot-em-up video game. To do this, the GPU has
access to parallel vector processing that far exceeds the capability of
x86/SSE or ARM/NEON instructions on your average CPU.
For years, shader languages like GLSL have made the vector capabilities
of the GPU available for arbitrary shader effects in OpenGL, but you are
basically limited to whatever parameters a “draw triangle” call takes.
It’s also quite typical for OpenGL implementations to cut corners by
using fixed-point and lower precisions. The shader source code may say
“float”, but it could be as little as 8 bits of actual precision. While
great for pumping out triangles where you won’t notice an “off-by-0.001?
error, this isn’t very useful for supercomputing, common mathematical
algorithms, and super-precise pixel blending.
Enter OpenCL. It defines a new C-style language that is more precise as
to mathematical precision, and which allows arbitrary arguments to be
provided to an OpenCL function – known as a kernel – to do almost
anything that C can do. Special vector types like “float4? are provided
as well as an extensive mathematical library. But its most impressive
feature is work sizes – it is very easy to split your task up into small
chunks that the GPU can scatter across all of its compute units (compute
units include whatever CPUs and GPUs OpenCL can find, OpenCL uses
everything available). Unlike regular C where you can spend a lot of
time writing outer loops and launching worker threads for subparts of
your problem, OpenCL does it for you. We’ll see how that works shortly.
Beautiful Graphics in pdf format to explain basic OpenCL
gatech.edu explanation of OpenCL in pdf format
FOR ENTERTAINMENT PURPOSES ONLY **