I have heard many complaints about the verbosity of the OpenCL API. This claim in not unwarranted.

This is partially due to the low level nature of OpenCL. It is written in the C programming language; the <a href="http://joelonsoftware.com/articles/CollegeAdvice.html">lingua franca</a> of programming languages. While this allows you to run an OpenCL program on virtually any platform, it has some disadvantages.

In order to get a traditional OpenCL program setup, you need to:
<ol>
	<li>Query for the platform</li>
	<li>Get the device IDs from the platform</li>
	<li>Create a context from a set of device IDs</li>
	<li>Create a command queue from the context</li>
	<li>Create buffer objects for your data</li>
	<li>Transfer the data to the buffer</li>
	<li>Create and build a program from source</li>
	<li>Extract the kernels</li>
	<li>Launch the kernels</li>
	<li>Transfer the data to the host</li>
</ol>
This can be a daunting task for anyone who is not familiar with the OpenCL API. I was actually surprised how long this list turned out to be. I figured it would consist of 6-7 items.

&nbsp;

Fortunately the <a href="http://www.khronos.org">Khronos</a> group provides us with a C++