-- This means, that the devleopment time will be more because you are going to be writing your own primitive functions which are available as a myriad of libraries in CUDA.
2) OpenCL can run on cpus, gpus and more exotic hardware like FPGAs, Cell Processors.
-- On Large clusters, OpenCL's heterogenous capabilities make it more appealing as opposed to CUDA which will essentially require you to write and maintain two code bases (one in CUDA, the other using pthreads or what have you).
3) OpenCL spec is designed by committee (the Khronos group) as opposed to CUDA (developed by NVIDIA).
-- This means CUDA iterates much more quickly than OpenCL. They also have control over the hardware meaning they can introduce some hardware optimizations that may not become standardized in OpenCL.
4) NVIDIA has opened up CUDA a little, implementations of OpenCL remain closed.
-- NVIDIA has thrust which is kind of open source, but their CUBLAS and CUFFT libraries are closed. They recently Open sourced part of their NVCC compiler and hooked it up with LLVM. The OpenCL impelmentations are vendor specific and AFAIK none of them are open.
--------------
Sorry if I am not coherent. Its pretty late and I had to type it forcing myself to stay awake :)