Here's what I used while doing an undergrad independent study a couple years ago (except for the books; at the time, books on the subject didn't exist yet):
If you decide to go the CUDA route, as opposed to OpenCL, then NVIDIA has a lot of solid documentation that will help you get to a "Hello, World" level pretty quickly. This StackOverflow thread should help if you choose to go with an AMD OpenCL solution: http://stackoverflow.com/questions/780978/opencl-books-tutor.... Personally, I would stick with NVIDIA; they seem much more dedicated to advancing the cause and you have support for both API's.
Online Tutorials:
Dr. Dobbs - CUDA, Supercomputing For the Masses: http://www.drdobbs.com/high-performance-computing/207200659
GTC Video Tutorials / Presentations: http://www.nvidia.com/object/gpu_technology_conference.html
University Courses:
GaTech ECE4893 - Multicore and GPU Programming for Video Games (not CUDA specific, but covered): http://users.ece.gatech.edu/lanterma/mpg/
UIUC ECE498AL - Applied Parallel Programming: http://courses.engr.illinois.edu/ece498/al/
Books:
Programming Massively Parallel Processors: http://www.amazon.com/Programming-Massively-Parallel-Process...
CUDA By Example: http://www.amazon.com/CUDA-Example-Introduction-General-Purp...
If you decide to go the CUDA route, as opposed to OpenCL, then NVIDIA has a lot of solid documentation that will help you get to a "Hello, World" level pretty quickly. This StackOverflow thread should help if you choose to go with an AMD OpenCL solution: http://stackoverflow.com/questions/780978/opencl-books-tutor.... Personally, I would stick with NVIDIA; they seem much more dedicated to advancing the cause and you have support for both API's.