High Performance Computing
High Performance Computing was a course taught by Jan Prins for the Computer Science Department at the University of North Carolina in the Fall of 2007. The course covered several aspects of high-performance computing, primarily focused on parallel computing. Students learned to design and analyze parallel algorithms for a variety of problems and computational models, as well as the fundamentals of the architecture and systems software of high-performance parallel computing systems. The course also gave students hands-on experience implementing parallel applications on actual high-performance computing systems using UNC’s Topsail cluster. Other topics included how to measure, tune, and report on the performance of parallel application.
As a final project in the course, I chose to learn CUDA – nvidia’s GPU programming language that allows programmers to tap into the massive amount of parallelization found in GPUs. Specifically, I implemented a phasing application, which generates the sharing matrices used in the sharing approach to phasing. Calculating these matrices is the most computationally intensive part of the phasing operation. I decided on this project because it would be desirable to ship this calculation off to the GPU, freeing up CPU cycles and reducing the calculation time to boot. My final paper from the class can be found below.
Phasing with CUDA – Adobe Acrobat (.pdf) – 68KB