One of the promises of OpenCL is one we should be familiar with. Portability. However, like many attempts before it, it cannot truly deliver. While it is true that if you stick to the OpenCL API, the code will run any any device that supports it. The problem is that this is only half the story. The main reason to implement heterogeneous computing topologies is for throughput performance. Here lies the rub. If you write a a performant kernel optimized for some platform architecture, it will assuredly run much slower on another architecture. For instance, code optimized for performance on a graphics/compute card will possibly run slower on a CPU than standard serial code. In the past most portable computing solutions were “write once, and recompile everywhere”. In this case it is worse. For OpenCL it becomes “write once, and rewrite everywhere”. With this in mind I believe the biggest positive of OpenCL is the idea of a single API for all platforms. Even this is an unsure proposition taking into account the support for native kernels in OpenCL. Who knows, perhaps just-in-time compilation can make all this work. I for one am not holding my breath.
OldGhost Guitars