CUDA vs OpenCL
CUDA and OpenCL are both GPU programming frameworks that allow to use GPUs for general purpose tasks that can be parallelized.
CUDA is a proprietary GPU architecture and programming framework by Nvidia that is only accelerated on Nvidia hardware. It includes a C-based programming language. OpenCL was Originally developed by Apple, but is now managed by the Khronos group that maintains a number of open standards in audiovisual media.
OpenCL is an open standard that runs on hardware by multiple vendors, including desktop and laptop GPUs by AMD/ATI and Nvidia. OpenCL can fallback to execution on the host CPU, if a supported GPU is not present.
CUDA is said to be more mature and have more convenient high-level APIs. This may change as OpenCL is developed further.
OpenCL has the advantage of being an open standard, allowing any vendor to implement OpenCL support on its products. Intel has announced that it will support OpenCL on future CPU products.
Both CUDA and OpenCL are supported by multiple operating systems (Windows, Linux, and MacOS.)
There is rumor, that OpenCL internals are basically copy-paste work from CUDA. CUDA executes faster on Nvidia GPUs (for a reason or not). But because OpenCL is open standard that works on both major GPU brands, it should be considered more futureproof than CUDA.
[edit] Weblinks
Vincent Hindriksen: OpenCL - the battle and followups
Discussions at stackoverflow: OpenCL and CUDA, c++ - OpenCL or CUDA?