Optimizing algorithms for both single and multi-processors systems as well as accellerators such as GPUs. Choosing numerical algoriths, use of optimized libraries, compiler optimizations and program profiling. How to take advantage of PC-clusters and graphics cards for computationally large tasks which cannot be run on a single processor system will also be covered. The course includes parallel programming asignments.
Understanding parallel programing is becoming increasingly more important as PCs and desktops incorporate multicore and multichip multiprocessor technology. Knowledge: The goal of this course is hence: To give the students a good understanding of optimzing serial programs and algorithms within computational science. Skills: Develop the students programming skills for and future multi- and many-core processor systems.
