.. _outline: ===================== Overview and syllabus ===================== 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. Outline and schedule -------------------- .. 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