-- 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 :)
I would be really interested in these results if you can share them with me (contact@pavanky.com).
Are there options for getting CUDA going on an AMD/ATI chipset?
When it comes to the basics, CUDA and OpenCL are pretty much identical to each other for most parts. There are subtle differences in the API.
When you go deeper, there are a few more differences which mostly come from the hardware. Programming two different devices with OpenCL can be very different if you want to write efficient code. The difference between programming for different pieces of hardware is much larger than the difference between the API's used.
As a single vendor effort, CUDA moves forwards faster and has support for more of the latest GPU features. But it only runs on hardware from that single vendor.