They solve the same problem, enabling you to leverag the GPU compute power, but their approaches to doing so are completely different. CUDA are natural language extensions on top of C that compiles directly down to nVidia PTX instructions. OpenCL is a language in and of itself, using a C based syntax, whose source is then handed to drivers at runtime from some stream (file or embedded resource) which the driver then compiles into native instructions for the target hardware which, in the case of nVidia, would be PTX again.
"While Nvidia might have been making headway with its Cuda compilers, even it has pledged support for OpenCL. The last few generations of AMD graphics cards have supported OpenCL and the language can be run on other massively parallel chips such as the Cell.
Big Blue's OpenCL SDK could mark a turning point in such languages as Nvidia grapples with heat issues in its Tesla equipped servers. "
Did you read it or what?
They don't paint as pretty a picture as you do for Nvidia.