Do you enjoy watching High Definition (HD) movies or playing games on your computer? I am sure many of us have experienced the great visual quality created by movies and games with the support of ever improving graphics processing units (GPU) cards. However, do you realize that GPU is actually a supercomputer with hundreds to thousands of cores, which are within your reach? In this course, we are going to learn about the architecture of GPU and how to program it for various applications. The course begins with basic understanding of GPU hardware, the memory architecture and how to utilize them efficiently for different types of algorithms. Techniques to convert serial programs into parallel versions will also be covered in this course, with significant emphasis on hands-on programming. At the end of the course, we will have a chance to work on a project to solve the real-world application, using GPU.