I came to it from a supercomputing background (generally for scientific and engineering uses). The two main styles of parallelism are shared memory, where one program runs with multiple threads in the same address space -- a frequent way to implement that is OPENMP -- and message passing, with MPI being the most popular software.
If you only care about utilizing a few processors, say the number you can get on a dual socket machine, which supports 2 chips, I'd start with OPENMP. You usually use this by adding directives (pragmas) to for loops. Sometimes you can take an existing application and in a piecemeal fashion parallelize it, one loop at a time.
Message passing, with MPI or some other package, is usually more difficult, although you are guaranteed that the difference processes have independent memory spaces. But, whenever data has to be shared, it must be buffered, and sent out to one or more other processes, which must make calls to receive the data. Message passing parallelism, usually requires that the application be designed from the ground up for parallelism. But given a sufficiently parallel application the number of processors that it can scale to is essentially unlimited. Clusters of hundreds to thousands of cores are not uncommon.
You can also mix methods, with each MPI process, utilizing several processors to compute its own locally parallelized piece of a larger parallel application.
I haven't used OpenCL, but isn't it a way to use the graphics chip to perform calculations? Cuda is currently used to program what are being called GPGPUs (General Purpose Graphical Processing Units), such as are provided by the NVidia Fermi.
Personally, I think efforts to learn and write Cuda are likely to be wasted. I think that the numbers of true general purpose (x86) cores per chip on offer, will continue to rise, and the number of floating point units per core (accessible via AVX) will also grow several fold in the next few years. So IMHO, using GPGPUs to make up for a dearth of floating point units per chip, will probably only a preferred short term solution. There may be some good jobs available for good Cuda programmers, just be prepared for the whole field to change drastically within a few years.