Since OpenCL get announced by Apple 6 months ago a lot of expectations grow up in the developer community but from my point of view it is firstly the result of the enthusiasm of the whole industry for parallel computing that makes OpenCL reaching our world.
OpenCL have been designed on a fast track that's for sure! 6 month is roughly the time the Khronos Group used to give birth to it. However, it is obvious that OpenCL doesn't come from nowhere, it amazingly looks like CUDA ...
Honestly, that's perfectly fine for me, especially because everyone seems to be really involved in OpenCL development and to agree on it. A side news but a good news is that the Kronos Group demonstrate for the first time that it can be more efficient than Microsoft, Direct3D 11 Compute Shaders are not here yet.
One fear could be that OpenCL is just a cheap CUDA. It is definitely not! OpenCL is kind of CUDA + new features. A good example is the API to share data between OpenGL and OpenCL. It is so such more complete. With CUDA we could just work on "buffers". Now with OpenCL we can work on buffers and images. This changes everything! It makes OpenCL a lot more suitable for post processing effects than CUDA. With CUDA we have to use Pixel Buffer Object to read back the framebuffer into a buffer which involved useless copies and lost of the GPU 2D cache.
OpenCL could even be some kind of salvation for OpenGL. A lot of requests from the OpenGL community just match with OpenCL design. A good example really complicated to changed in OpenGL is the texture model. We asked for a while for separated images and filter objects. It's done in OpenCL! On the feature side, OpenCL allows to load binary programs instead of just building on software startup.
One word on the language library. The number of functions is just huge! So much more complete than any shading languages. It gave me some ideas for GLM!
OpenCL is really a flexible API. It could be use on GPU but also on CPU, Cell, Larabee, DSPs, etc... An extension mechanistic is already available and a wide range of features is available just through extensions. This allows to use OpenCL even on embedded devices.
What about the portability issue then? First of all, just the idea writing a parallel oriented program involved always the same kind of software architecture so that whether if it is multi-threaded or/SIMD based. OpenCL can managed these two senarios so maybe a good guideline would be to write all software with multitple thread AND SIMD in minded. Then a program is design for a specific purpose which means that there is few reasons to expected all programs running on any device.
nVidia plans to release its first OpenCL drivers within 6 months and will be included as part of CUDA. I bet on a close fellowing from AMD, S3, Intel and IBM. I hope Imagination Technologies follows too. Apple is really into it too first for Snow Leopard but OpenCL on the next iPhone... that could be reasonable.