263-2300-00L  How To Write Fast Numerical Code

SemesterSpring Semester 2015
LecturersM. Püschel
Periodicityyearly recurring course
Language of instructionEnglish
CommentPrerequisite: Master student, solid C programming skills.



Catalogue data

AbstractThis course introduces the student to the foundations and state-of-the-art techniques in developing high performance software for numerical functionality such as linear algebra and others. The focus is on optimizing for the memory hierarchy and for special instruction sets. Finally, the course will introduce the recent field of automatic performance tuning.
ObjectiveSoftware performance (i.e., runtime) arises through the interaction of algorithm, its implementation, and the microarchitecture the program is run on. The first goal of the course is to provide the student with an understanding of this interaction, and hence software performance, focusing on numerical or mathematical functionality. The second goal is to teach a general systematic strategy how to use this knowledge to write fast software for numerical problems. This strategy will be trained in a few homeworks and semester-long group projects.
ContentThe fast evolution and increasing complexity of computing platforms pose a major challenge for developers of high performance software for engineering, science, and consumer applications: it becomes increasingly harder to harness the available computing power. Straightforward implementations may lose as much as one or two orders of magnitude in performance. On the other hand, creating optimal implementations requires the developer to have an understanding of algorithms, capabilities and limitations of compilers, and the target platform's architecture and microarchitecture.

This interdisciplinary course introduces the student to the foundations and state-of-the-art techniques in high performance software development using important functionality such as linear algebra functionality, transforms, filters, and others as examples. The course will explain how to optimize for the memory hierarchy, take advantage of special instruction sets, and, if time permits, how to write multithreaded code for multicore platforms. Much of the material is based on state-of-the-art research.

Further, a general strategy for performance analysis and optimization is introduced that the students will apply in group projects that accompany the course. Finally, the course will introduce the students to the recent field of automatic performance tuning.

Performance assessment

Performance assessment information (valid until the course unit is held again)
Performance assessment as a semester course
ECTS credits6 credits
ExaminersM. Püschel
Typegraded semester performance
Language of examinationEnglish
RepetitionRepetition only possible after re-enrolling for the course unit.
Additional information on mode of examinationThe grade for the course is determined by several homeworks (35%), one midterm exam (25%), and one semester long project with final report and presentation (40%).

Learning materials

 
Main linkCourse information
Only public learning materials are listed.

Courses

NumberTitleHoursLecturers
263-2300-00 VHow To Write Fast Numerical Code3 hrs
Mon10-12CHN C 14 »
Thu09-10CAB G 51 »
28.05.09-11CAB G 11 »
M. Püschel
263-2300-00 UHow To Write Fast Numerical Code2 hrs
Wed13-15HG D 3.2 »
M. Püschel

Groups

No information on groups available.

Restrictions

There are no additional restrictions for the registration.

Offered in

ProgrammeSectionType
Certificate of Advanced Studies in Computer ScienceFocus Courses and ElectivesWInformation
Doctoral Department of Computer ScienceDoctoral and Post-Doctoral CoursesWInformation
Computer Science MasterFocus Core Courses Computational ScienceWInformation
Computer Science MasterFocus Elective Courses Software EngineeringWInformation
Computational Science and Engineering MasterCore Courses (Programme Regulations 2014)WInformation