OpenCL and CUDA are both similar and different. I will be responsible for the GPU part of a course later this fall, where we primarily teach CUDA. Why CUDA and not OpenCL? Because CUDA is a million times easier to get started with. CUDA has a very neat integration between CPU and GPU code, while OpenCL looks more like an OpenGL/GLSL program.

But OpenCL is more open. CUDA can only be used from NVidia's own compiler (which uses GCC for the CPU part). OpenGL can be used from anything, FPC included. (I have working examples using FPC.) The kernels are quite similar between CUDA and OpenCL, but must, sadly, be written in C syntax.