beginning CUDA programming

i bought a nvidia 8800 GT GPU which has got CUDA.can someone tell me what is CUDA and why is it used for?
and what is this CUDA programming all about?
what am i suppose to know before i venture into this?

CUDA is a way to run general purpose, data-parallel computing tasks on an NVIDIA graphics card. The DirectX and OpenGL APIs are designed for doing 3D rendering calculations, and somewhat awkward for non-graphical work. NVIDA released the CUDA API and toolkit in Feb 2007 to offer a more direct interface to the GPU, while still being high-level enough to apply to current and future devices.

CUDA does not accelerate programs automatically. You have to write some CUDA code, and then compile it into your application to see any benefit. For current GPUs, CUDA is most beneficial when you have time consuming tasks which require you to perform similar mathematical operations on many data elements in parallel. (Matrix operations, Fourier transforms, Video compression, etc.) Tasks which do not have this data-parallel aspect to them, or which involve data sets which are too small, tend to see little benefit from CUDA.

CUDA programs look a lot like C, so you should be pretty familiar with C programming (including pointers and memory management) before starting with CUDA. This link has some good tutorials on CUDA programming:

I should also point out that CUDA is very similar to OpenCL, a cross-platform standard for data-parallel programming on CPU and GPU devices. (It is managed by the same standards body that controls OpenGL.) OpenCL, however, is much newer than CUDA and still not at the same level of support or performance as CUDA. In the future, though, it will be fully supported on both CPUs, as well as NVIDA and ATI graphics cards.

In the meantime, learning CUDA is still useful, as many of the concepts will transfer over when OpenCL is more mature. (NVIDIA contributed a lot of CUDA experience to the OpenCL specification.)