This course will cover a large number of topics in a somewhat superficial manner. The main goals are to:
- Introduce a number of concepts related to machine architecture, programming languages, etc. that necessary to understand if one plans to write computer programs beyond simple exercises, where it is important that they run efficiently.
- Introduce a variety of software tools that are useful to programmers working in scientific computing.
- Gain a bit of hands on experience with these tools so that at the end of the quarter students will be able to continue working with them and be in a good position to learn more on their own from available resources.
Warning
This is a tentative outline that is subject to change.
Week 1:
- Overview and introduction of some main ideas.
- Using the Virtual Machine.
- Unix / Linux
- Version control systems
- Using Mercurial and Bitbucket.
Week 2:
- Reproducible research
- Compiled vs. interpreted languages
- Fortran 90
Week 3:
- Binary, floating point numbers, memory
- Fortran 90
- Makefiles
- Computer architecture: CPU, memory access, cache hierachy, pipelining
Week 4:
- Optimizing Fortran
- BLAS, LAPACK
- Iterative methods for linear systems
- Parallel computing
Week 5:
- OpenMP
Week 6:
- OpenMP
- MPI
Week 7:
- MPI
Week 8:
- Other parallel languages, GPUs
- Python
Week 9:
- Python
- I/O, Binary output
- Graphics and visualization
Week 10:
- Python + Fortran, f2py
- Reproducible research techniques