Copyright 2019, Yung-Yu Chen [email protected]. All rights reserved.
Objectives: This course discusses the art to build numerical software, i.e., computer programs applying numerical methods for solving mathematical or physical problems. We will be using the combination of Python and C++ and related tools (e.g., bash, git, make, etc.) to learn the modern development processes. By completing this course, students will acquire the fundamental skills for developing modern numerical software.
Prerequisites: This is a graduate or senior level course open to students who have taken engineering mathematics or equivalence. Working knowledge of Linux and Unix-like is required. Prior knowledge to numerical methods is recommended. The instructor uses English in the lectures and discussions.
- This is a practical course. No textbook is available for this specific interdisciplinary subject.
- To study the subject, students are required to research with online documents and source code, and write programs to practice.
- In-class instruction and course notes are provided for guidance.
- References:
- Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron: https://csapp.cs.cmu.edu/
- Python documentation: https://docs.python.org/3/
- Cppreference: https://en.cppreference.com/
- Effective Modern C++, Scott Meyer, O'Reilly, 2014
- Source code: cpython, numpy, xtensor, and pybind11
- There are 15 or more lectures for the subjects of numerical software developing using Python and C++.
- There is usually homework given after a lecture to exercise the lectured materials, and it usually requires students to write computer programs in Python and/or C++.
- Mid-term examination will be conducted to assess students' understandings to the analytical materials.
- Term project will be used to assess students' overall coding skills. Presentation is required. Failure to present results in 0 point for this part.
- Grading: homework 30%, mid-term exam: 30%, term project: 40%.
- Lectures:
- Python and numpy
- C++ and computer architecture
- Fundamental engineering practices
- Memory management
- Matrix operations
- Cache optimization
- SIMD
- Modern C++ I: ownership and meta-programming
- Modern C++ II: more than templates
- xtensor: arrays in C++
- pybind11: binding between Python and C++
- cpython API: operate Python from C
- Profiling
- Array-oriented design
- Advanced Python
- (Optional) useful architectures for hybrid code
- (Optional) application embedding Python