The aim of the tutorial is to teach participants the basics of how
computers work, and how it affects the code they write. Focus will be
on concepts and terminology, not so much on a bag of tricks. A
basic understanding of what really goes on is useful both for
debugging, overall program design and optimization.
Topics:
- What sits inside your computer and how is it connected
- The abstraction layer stack: Programming language, assembly,
instructions, pointers, registers...
- How does CPU cache work (and when does it matter for your code)
- Understanding when you are CPU-bound and when you are
memory-bandwidth-bound
- What is multi-threading (OpenMP) really? How does it play with MPI
and Non-Uniform Memory Machines? How should the code ideally be
split between OpenMP and MPI?
The working language for a few examples will be C simply because it is
closest to hardware; all the knowledge can be carried over to Fortran
(or IDL, Perl, Python...) easily. Ideally, make sure that you can do
"Hello world" and count to 10 in C before attending (I can provide
additional resources on that upon request).
You may bring your laptop and play with the code examples as we go but
it is not required.