A CPU (Central Processing Unit) typically has 2-6 cores that operate at a frequency between 1.5-3.5 GHz. A Graphics Processing Unit (GPUs) consist of 100s of cores that operate at a frequency of 500-900 MHz and it is typically used to compute the textures or even physics in computer games. The strong competition in the computer gaming market has increased the performance of GPUs to a very high level and together with their highly parallel structure, more engineers and scientists have started writing software for this hardware. The most popular libraries for harnessing the power of GPUs are those provided through CUDA.
Dr. Anthony Morse has a background in robotics research and has used CUDA for deep neural network development. He delivered the workshop over the course of two days as a part of the NGCM Summer Academy 2016. The materials used are available here.
The workshop started with the motivation of using GPUs which offer processing speeds of up to 10 TFLOPS with a NVIDIA Tesla GPU, which is 1000-10000 times faster than a typical CPU. CUDA is a set of libraries that can be used in C/C++ programs to access this computational power. The functions in these libraries were introduced and the attendees switched between following the presentations and doing exercises to better understand how to best use the features of CUDA. Dr. Morse helped the students with questions and further expanded on topics that were not very clear. The hardware features of GPUs (texture memory, grids, blocks, memory levels) were described before each new relevant CUDA feature was introduced as this helped clarify why some of these features required slightly different ways of writing the code than for standard C/C++. The workshop helped students understand the computational advantages of using CUDA and the situations in which its use would be most fruitful.