In this post I would like to cover some of the difficulties that a developer, working on GPU computing, might encounter.
Here is some background fist.
There exists a nonprofit organisation The Khronos Group that creates open standards for cross-platform technologies which are then used by all the major players, like Apple, Nvidia, ATI, Intel, ARM, etc. Khronos itself doesn’t develop any software, it’s just a medium for discussions of standards for different technologies and is a kind of mediator.
After the members of Khronos agree on the API, each of the hardware manufacturers starts implementing this API for its platform. When all is ready and Khronos certifies it, a manufacturer can indicate that they support this technology on their product. This indication is a sign to developers, who are interested in it, that they can start using this API for their programs or games.
Khronos’s biggest projects are OpenGL, OpenCL, WebGL, WebCL and many others (Vulkan®, COLLADA™, glTF™, EGL™, OpenSL ES™, OpenMAX™, SPIR™, SYCL™, NNEF™, OpenVX™, Safety Critical, OpenKCam™, OpenVG™, Data Format).