You're not currently signed in. Sign in »

Languages and Abstractions for High-Performance Scientific Computing (CS 598APK) Spring 2025

What Where
Time/place Tue/Thu 11:00-12:15 106B3 Engineering Hall / Catalog
Class URL https://bit.ly/hpcabstr-s25
Class recordings Illinois Mediaspace
Discussion forum Discuss »
Administrative Help Help Desk (click "Message" on the top right)
Calendar View »

Assignments

Why You Should Take this Class

Visualization of an array access pattern

GPU kernel source code

Software for large-scale problems is stretched between three key requirements: high-performacne, typically parallel implementation, asymptotically optimal algorithms, and often highly technical application domains. This tension contributes considerably to making HPC software difficult to write and hard to maintain. If you are faced with this problem, this class can help you find and develop possible solution approaches.

Abstractions, tools, and languages can help restore separation of concerns and ease creation and maintenance of such software. Proven approaches to this problem include domain-specific mini-languages (`DSLs'), code generation, as well as 'active' libraries.

This class begins with a quick, but thorough examination of the problem setting: What machines are we realistically confronted with now and in the foreseeable future? What are determinants of performance? How can we measure and understand performance?

From the hardware level, we will then move towards a view of abstractions: Concepts and simplifications of complex hardware realities that are sufficiently thin to allow user/developer to reason about expected performance while achieving a substantial simplification of the programming task.

We will discuss, design, and evaluate a number of such systems, with the goal of putting you in a position to

  • know the available landscape of tools
  • make informed choices among them for a computational task at hand
  • design your own abstractions and place them in context with respect to the state of the art.

As we progress, we will examine a number of increasingly high-level program representations, ranging from instruction sets to compiler IRs, through CUDA/OpenCL/'SIMT' models, to polyhedral and other higher-level representations. Along the way, you will design toy program representations and transformations for limited-scale tasks and examine your achievable and practically achieved performance.

We will pay careful attention to semantics and correctness in the context of program representation and ultimate code generation, but we will prefer the definition of specialized or simplified semantics over extensive compiler analyses that might help prove the validity of transformations.

To complement the many excellent distributed-memory offerings in the department (e.g. CS 484, CS 554), this class focuses more on 'on-node'/shared-memory performance.

Prerequisites / What You Should Already Know

  • C
  • Python
  • Familiarity with parallel programming: You should have measured and wondered about the performance of a code you wrote
  • Having taken a class on compiler construction (such as CS 426) will be helpful, but is not required.

While this class is being offered in a CS department, it is deliberately open to graduate students in the engineering disciplines who do extensive computational work and face this range of problems every day.

Suggested Papers for Student Presentations

See this list for an idea on the focus of this class. These papers can also serve as the basis for mid-semester paper presentations.

Instructor

Andreas Kloeckner

Andreas Kloeckner

(Instructor)

Email: andreask@illinois.edu

Office: 4318 Siebel

Grading Policies

View grading policies »

Course Outline

I will insert links to class material, books, and papers into this tree as time goes on.

Note: the section headings in this tree are clickable to reveal more detail.

  • Introduction
    • Notes
    • Notes (unfilled, with empty boxes)
    • Notes (source code on Github)
    • About This Class
    • Why Bother with Parallel Computers?
    • Lowest Accessible Abstraction: Assembly
    • Architecture of an Execution Pipeline
    • Architecture of a Memory System
    • Shared-Memory Multiprocessors
    • Demo: Assembly Reading Comprehension
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FCache+Organization+on+Your+Machine.ipynb">Demo: Cache Organization on Your Machine</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Cache Organization on Your Machine.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FCache+Organization+on+Your+Machine.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FCache+Organization+on+Your+Machine.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Cache Organization on Your Machine.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Cache Organization on Your Machine.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FDGEMM+Performance.ipynb">Demo: DGEMM Performance</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/DGEMM Performance.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FDGEMM+Performance.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FDGEMM+Performance.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/DGEMM Performance.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/DGEMM Performance.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FLock+Contention.ipynb">Demo: Lock Contention</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Lock Contention.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FLock+Contention.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FLock+Contention.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Lock Contention.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Lock Contention.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FMore+Pipeline+Performance+Mysteries.ipynb">Demo: More Pipeline Performance Mysteries</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/More Pipeline Performance Mysteries.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FMore+Pipeline+Performance+Mysteries.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FMore+Pipeline+Performance+Mysteries.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/More Pipeline Performance Mysteries.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/More Pipeline Performance Mysteries.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FNUMA+and+Bandwidths.ipynb">Demo: NUMA and Bandwidths</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/NUMA and Bandwidths.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FNUMA+and+Bandwidths.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FNUMA+and+Bandwidths.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/NUMA and Bandwidths.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/NUMA and Bandwidths.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FPipeline+Performance+Mysteries.ipynb">Demo: Pipeline Performance Mysteries</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Pipeline Performance Mysteries.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FPipeline+Performance+Mysteries.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FPipeline+Performance+Mysteries.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Pipeline Performance Mysteries.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Pipeline Performance Mysteries.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FTalk+Time+Assignment.ipynb">Demo: Talk Time Assignment</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Talk Time Assignment.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FTalk+Time+Assignment.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FTalk+Time+Assignment.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Talk Time Assignment.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Talk Time Assignment.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FTalk+Topic+Assignment.ipynb">Demo: Talk Topic Assignment</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Talk Topic Assignment.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FTalk+Topic+Assignment.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FTalk+Topic+Assignment.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Talk Topic Assignment.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Talk Topic Assignment.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
        <li data-jstree='{"icon": "bi bi-keyboard"}'>
          <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FThreads+vs+Cache.ipynb">Demo: Threads vs Cache</a>
          <ul>
            <li data-jstree='{"icon": "bi bi-newspaper"}'>
              <a href="repocur:demos/upload/intro/Threads vs Cache.html">View on the web</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/intro%2FThreads+vs+Cache.ipynb">Run interactively</a>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/intro%2FThreads+vs+Cache.ipynb">Run interactively with cleared input</a>
            </li>
            <li data-jstree='{"icon": "bi bi-terminal"}'>
              <a href="repocur:demos/upload/intro/Threads vs Cache.py">Download Python script</a>
            </li>
            <li data-jstree='{"icon": "bi bi-download"}'>
              <a href="repocur:demos/upload/intro/Threads vs Cache.ipynb">Download Jupyter notebook</a>
            </li>
          </ul>
        </li>
      </ul>
      

    • Machine Abstractions
      • C
      •   <li data-jstree='{"icon": "bi bi-file-earmark"}'>
            OpenCL/CUDA
          </li>
          <li data-jstree='{"icon": "bi bi-file-earmark"}'>
            Convergence, Differences in Machine Mapping
          </li>
          <li data-jstree='{"icon": "bi bi-file-earmark"}'>
            Lower-Level Abstractions: SPIR-V, PTX
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FAVX+Playground.ipynb">Demo: AVX Playground</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/AVX Playground.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FAVX+Playground.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FAVX+Playground.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/AVX Playground.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/AVX Playground.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FHello+GPU.ipynb">Demo: Hello GPU</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/Hello GPU.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FHello+GPU.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FHello+GPU.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/Hello GPU.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/Hello GPU.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FObject+Orientation+vs+Performance.ipynb">Demo: Object Orientation vs Performance</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/Object Orientation vs Performance.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FObject+Orientation+vs+Performance.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FObject+Orientation+vs+Performance.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/Object Orientation vs Performance.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/Object Orientation vs Performance.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FPTX+and+SASS.ipynb">Demo: PTX and SASS</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/PTX and SASS.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FPTX+and+SASS.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FPTX+and+SASS.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/PTX and SASS.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/PTX and SASS.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FPointer+Aliasing.ipynb">Demo: Pointer Aliasing</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/Pointer Aliasing.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FPointer+Aliasing.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FPointer+Aliasing.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/Pointer Aliasing.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/Pointer Aliasing.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FRegister+Pressure.ipynb">Demo: Register Pressure</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/Register Pressure.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FRegister+Pressure.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FRegister+Pressure.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/Register Pressure.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/Register Pressure.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
          <li data-jstree='{"icon": "bi bi-keyboard"}'>
            <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FWays+to+SIMD.ipynb">Demo: Ways to SIMD</a>
            <ul>
              <li data-jstree='{"icon": "bi bi-newspaper"}'>
                <a href="repocur:demos/upload/machabstr/Ways to SIMD.html">View on the web</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/machabstr%2FWays+to+SIMD.ipynb">Run interactively</a>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/machabstr%2FWays+to+SIMD.ipynb">Run interactively with cleared input</a>
              </li>
              <li data-jstree='{"icon": "bi bi-terminal"}'>
                <a href="repocur:demos/upload/machabstr/Ways to SIMD.py">Download Python script</a>
              </li>
              <li data-jstree='{"icon": "bi bi-download"}'>
                <a href="repocur:demos/upload/machabstr/Ways to SIMD.ipynb">Download Jupyter notebook</a>
              </li>
            </ul>
          </li>
        </ul>
        

      • Performance: Expectation, Experiment, Observation
        • Forming Expectations of Performance
        •   <li data-jstree='{"icon": "bi bi-file-earmark"}'>
              Timing Experiments and Potential Issues
            </li>
            <li data-jstree='{"icon": "bi bi-file-earmark"}'>
              Profiling and Observable Quantities
            </li>
            <li data-jstree='{"icon": "bi bi-file-earmark"}'>
              Practical Tools: perf, toplev, likwid
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/perf%2FForming+Architectural+Performance+Expectations.ipynb">Demo: Forming Architectural Performance Expectations</a>
              <ul>
                <li data-jstree='{"icon": "bi bi-newspaper"}'>
                  <a href="repocur:demos/upload/perf/Forming Architectural Performance Expectations.html">View on the web</a>
                </li>
                <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/perf%2FForming+Architectural+Performance+Expectations.ipynb">Run interactively</a>
                </li>
                <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/perf%2FForming+Architectural+Performance+Expectations.ipynb">Run interactively with cleared input</a>
                </li>
                <li data-jstree='{"icon": "bi bi-terminal"}'>
                  <a href="repocur:demos/upload/perf/Forming Architectural Performance Expectations.py">Download Python script</a>
                </li>
                <li data-jstree='{"icon": "bi bi-download"}'>
                  <a href="repocur:demos/upload/perf/Forming Architectural Performance Expectations.ipynb">Download Jupyter notebook</a>
                </li>
              </ul>
            </li>
            <li data-jstree='{"icon": "bi bi-keyboard"}'>
              <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/perf%2FUsing+Performance+Counters.ipynb">Demo: Using Performance Counters</a>
              <ul>
                <li data-jstree='{"icon": "bi bi-newspaper"}'>
                  <a href="repocur:demos/upload/perf/Using Performance Counters.html">View on the web</a>
                </li>
                <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/perf%2FUsing+Performance+Counters.ipynb">Run interactively</a>
                </li>
                <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/perf%2FUsing+Performance+Counters.ipynb">Run interactively with cleared input</a>
                </li>
                <li data-jstree='{"icon": "bi bi-terminal"}'>
                  <a href="repocur:demos/upload/perf/Using Performance Counters.py">Download Python script</a>
                </li>
                <li data-jstree='{"icon": "bi bi-download"}'>
                  <a href="repocur:demos/upload/perf/Using Performance Counters.ipynb">Download Jupyter notebook</a>
                </li>
              </ul>
            </li>
          </ul>
          

        • Performance-Oriented Languages and Abstractions
          • Expression Trees
          •   <li data-jstree='{"icon": "bi bi-file-earmark"}'>
                Parallel Patterns and Array Languages
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F01+Expression+Trees.ipynb">Demo: 01 Expression Trees</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/01 Expression Trees.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F01+Expression+Trees.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F01+Expression+Trees.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/01 Expression Trees.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/01 Expression Trees.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F02+Traversing+Trees.ipynb">Demo: 02 Traversing Trees</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/02 Traversing Trees.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F02+Traversing+Trees.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F02+Traversing+Trees.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/02 Traversing Trees.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/02 Traversing Trees.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F03+Defining+Custom+Node+Types.ipynb">Demo: 03 Defining Custom Node Types</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/03 Defining Custom Node Types.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F03+Defining+Custom+Node+Types.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F03+Defining+Custom+Node+Types.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/03 Defining Custom Node Types.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/03 Defining Custom Node Types.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F04+Common+Operations.ipynb">Demo: 04 Common Operations</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/04 Common Operations.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F04+Common+Operations.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F04+Common+Operations.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/04 Common Operations.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/04 Common Operations.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F05+Reflection+in+Python.ipynb">Demo: 05 Reflection in Python</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/05 Reflection in Python.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F05+Reflection+in+Python.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F05+Reflection+in+Python.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/05 Reflection in Python.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/05 Reflection in Python.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F06+Towards+Execution.ipynb">Demo: 06 Towards Execution</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/06 Towards Execution.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2F06+Towards+Execution.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2F06+Towards+Execution.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/06 Towards Execution.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/06 Towards Execution.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
              <li data-jstree='{"icon": "bi bi-keyboard"}'>
                <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2FExpression+Templates.ipynb">Demo: Expression Templates</a>
                <ul>
                  <li data-jstree='{"icon": "bi bi-newspaper"}'>
                    <a href="repocur:demos/upload/lang/Expression Templates.html">View on the web</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/lang%2FExpression+Templates.ipynb">Run interactively</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-keyboard"}'>
                    <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/lang%2FExpression+Templates.ipynb">Run interactively with cleared input</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-terminal"}'>
                    <a href="repocur:demos/upload/lang/Expression Templates.py">Download Python script</a>
                  </li>
                  <li data-jstree='{"icon": "bi bi-download"}'>
                    <a href="repocur:demos/upload/lang/Expression Templates.ipynb">Download Jupyter notebook</a>
                  </li>
                </ul>
              </li>
            </ul>
            

          • Polyhedral Representation and Transformation
            • Polyhedral Model: What?
            •   <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/poly%2FDiamond+tiling.ipynb">Demo: Diamond tiling</a>
                  <ul>
                    <li data-jstree='{"icon": "bi bi-newspaper"}'>
                      <a href="repocur:demos/upload/poly/Diamond tiling.html">View on the web</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-keyboard"}'>
                      <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/poly%2FDiamond+tiling.ipynb">Run interactively</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-keyboard"}'>
                      <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/poly%2FDiamond+tiling.ipynb">Run interactively with cleared input</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-terminal"}'>
                      <a href="repocur:demos/upload/poly/Diamond tiling.py">Download Python script</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-download"}'>
                      <a href="repocur:demos/upload/poly/Diamond tiling.ipynb">Download Jupyter notebook</a>
                    </li>
                  </ul>
                </li>
                <li data-jstree='{"icon": "bi bi-keyboard"}'>
                  <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/poly%2FOperating+on+Presburger+Sets.ipynb">Demo: Operating on Presburger Sets</a>
                  <ul>
                    <li data-jstree='{"icon": "bi bi-newspaper"}'>
                      <a href="repocur:demos/upload/poly/Operating on Presburger Sets.html">View on the web</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-keyboard"}'>
                      <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/demos/poly%2FOperating+on+Presburger+Sets.ipynb">Run interactively</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-keyboard"}'>
                      <a href="https://scicomp-jupyterlab.cs.illinois.edu/lab/?path=cs450-kloeckner/cleared/poly%2FOperating+on+Presburger+Sets.ipynb">Run interactively with cleared input</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-terminal"}'>
                      <a href="repocur:demos/upload/poly/Operating on Presburger Sets.py">Download Python script</a>
                    </li>
                    <li data-jstree='{"icon": "bi bi-download"}'>
                      <a href="repocur:demos/upload/poly/Operating on Presburger Sets.ipynb">Download Jupyter notebook</a>
                    </li>
                  </ul>
                </li>
              </ul>
              

CAUTION!

These scribbled PDFs are an unedited reflection of what we wrote during class. They need to be viewed in the context of the class discussion that led to them. See the lecture videos for that.

If you would like actual, self-contained class notes, look in the outline above.

These scribbles are provided here to provide a record of our class discussion, to be used in perhaps the following ways:

  • as a way to cross-check your own notes
  • to look up a formula that you know was shown in a certain class
  • to remind yourself of what exactly was covered on a given day

By continuing to read them, you acknowledge that these files are provided as supplementary material on an as-is basis.

Computing

If you have submitted your SSH key, an account has been created you on a family of machines managed by members of the scientific computing area. See the linked page for more information on access and usage.