Skip to main content

Section 2 What will I learn in this course?

Computers are now essential in everyday life. Incorrect and/or slow programs lead to frustration in the best case and disaster in the worst. Thus, how to construct correct programs that can attain high performance is a skill that all who program computers must master.
In this course, we teach “goal-oriented programming” the way Edsger Dijkstra intended: You will learn how to derive programs hand-in-hand with their proofs of correctness. Matrix computations (linear algebra) is the domain from which we draw examples. Typically, we end up with a family of algorithms (programs) all of which compute a given operation. From this family we can then pick the algorithm that has desirable properties. For example, one algorithm may be easier to parallelize than another algorithm or it may inherently be able to attain better performance on a given architecture. You will then learn techniques for mapping the appropriate algorithms to computer architectures so that they can attain high performance.

Subsection 2.1 Prerequisites

You need to have taken a course on linear algebra. You need to have prior experience with basic proof techniques and predicate logic as taught in CS311 or a discrete mathematics class. Major programming assignments will be in the C programming language. You need to either know rudimentary C, or be able to learn it quickly.

Subsection 2.2 Text/Materials

This class is based on materials developed by Prof. Robert van de Geijn, Dr. Maggie Myers, and Dr. Devangi N. Parikh. You can access these materials from ulaff.net.
You need to install Matlab on your computer. UT has a site license. Instructions on how to access the license will be provided.

Subsection 2.3 Learning Objectives

By the end of the semester you should be able to:
  • Analyze architecture features that effect performance.
  • Calcuate the peak performance of your machine
  • Implement various linear algebra operations.
  • Transform your implementation such that it takes advantage of the various architecture features available.
  • Prove that simple code segments of your code are correct.
  • Derive your code to be correct.
  • Derive a family of algorithms for a given linear algebra operation.
  • Compare/contrast/analyze the performance of the members of a family of algorithms and reason which algorithm will perform better.

Subsection 2.4 Detailed Calendar

Date Day Topic
Jan 13, 2025 Monday
Motivating Activity
Jan 15, 2025 Wednesday
Computer Arch Features; Vector registers, instruction latency and througput
Jan 20, 2025 Monday
MLK Day - No Class
Jan 22, 2025 Wednesday
Benchmarks; Peak Performance
Jan 27, 2025 Monday
Review of Linear Algebra; Matrix multiplication as a loop around other matrix operations
Jan 29, 2025 Wednesday
Floating point error; Loop Ordering
Feb 03, 2025 Monday
Importance of hiding instruction latency, microkernels
Feb 05, 2025 Wednesday
Memory hierarchy; Cache layout
Feb 10, 2025 Monday
Amortizing data movement
Feb 12, 2025 Wednesday
Imporance of contiguous memory access
Feb 18, 2025 Monday
Multicore programming
Feb 19, 2025 Wednesday
Review
Feb 24, 2025 Monday
Review: logic and reasoning
Feb 26, 2025 Wednesday
Hoare triple and weakest precondition
Mar 03, 2025 Monday
Deriving simple code segments
Mar 05, 2025 Wednesday
Deriving if statements
Mar 10, 2025 Monday
Deriving while loops
Mar 12, 2025 Wednesday
FLAME worksheet
Mar 17, 2025 Monday
Spring Break - No Class
Mar 19, 2025 Wednesday
Spring Break - No Class
Mar 24, 2025 Monday
FLAME worksheet
Mar 26, 2025 Wednesday
Advanced Matrix Operations
Mar 31, 2025 Monday
Advanced Matrix Operations
Apr 02, 2025 Wednesday
Advanced Matrix Operations
Apr 07, 2025 Monday
Review
Apr 09, 2025 Wednesday
Exam
Apr 14, 2025 Monday
Explorations: Extrapolating Goto Algorithm to other operations
Apr 16, 2025 Wednesday
Explorations: Beyond linear algebra operations
Apr 21, 2025 Monday
Project Presentations
Apr 23, 2025 Wednesday
Project Presentations
Apr 28, 2025 Monday
Project Presentations