prerequisites to learn CUDA

What are the prerequisites i should have to learn CUDA, openCL

Are there any books available for these

You need to know C/C++ and the basics of programing. The included documentation/SDK is enough to get a solid grasp on CUDA.

And knowledge about general parallel programming (how to distribute work, how to find fine-grained parallelism, what are race conditions, synchronization etc.)

The knowledge of using punctuation is also useful. Maybe not for programming in CUDA but sure in real life. ;)

The knowledge of using punctuation is also useful. Maybe not for programming in CUDA but sure in real life. ;)
(Edit: Sorry for double posting.)

If you read every line of the cuda programming guide in the sdk, and you have a solid grasp of the C language (You have actually written something non trivial in C) then you should be set. I read the cuda programming guide at least 4 times which I would recommend. Also, older versions of the document contain different things. I would suggest reading at least once each of versions 2.2, 2.1 and 2.0.

In my experience, the forum helped incredibly too (by that I dont mean posting every question you have, but instead searching and reading through all the conversations held elsewhere). the programming guide mainly helped me get something running.

A complete and total knowledge of memory management is a must!