數值軟體開發
Numerical Software Development
| 節 | 週一 |
|---|---|
Z 07:00–07:50 | 數值軟體開發 EC114(光復) 3 節連堂 |
1 08:00–08:50 | |
2 09:00–09:50 |
* 根據陽明交大上課時間表所列
The course introduces the art of building numerical software, i.e., computer programs applying numerical methods for solving mathematical, scientific, or engineering problems. We will be using Python, C++, and other tools (bash, git, make, etc.) to show the development process. You will learn: * practical software development by starting an open-source project * real-world applications of C++ * software engineering for scientific and high-performance computing * essentials of professional software development
Critical discussion is required for the practical course and the project development. If you don't feel comfortable expressing yourself publicly, this course is not designed for you. Please read the full syllabus at https://yyc.solvcon.net/en/latest/nsd/schedule/25sp_nycu/schedule25sp.html before taking the course. Students should have taken computer architecture and engineering mathematics or equivalents. Working knowledge of Linux and Unix-like is required. Prior knowledge to numerical methods is good to have. The instructor uses English in the lectures and discussions.
無備註
The instructor will use English. It is OK for students to use Mandarin in the class, but English is preferred. Computer program for homework and project should be developed against the latest Ubuntu LTS system.
* You are expected to learn programming languages yourself. Students are encouraged to form study groups for practicing C++, and discuss with the instructor and/or the teaching assistant. * Grading: homework 30%, mid-term exam: 30%, term project: 40%. * There are 12 lectures for the subjects of numerical software developing using Python and C++. * There will be 6 homework assignments for you to exercise. Programming in Python and/or C++ is required. * 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.
Introduction
What is numerical software.
Fundamental engineering
A large chunk of efforts is spent in the infrastructure for coding. The key to the engineering system is automation.
Python and numpy
Python is a popular choice for the scripting engine that makes the numerical software work as a platform.
C++ and computer architecture
The low-level code of numerical software must be high-performance. The industries chose C++ because it can take advantage of everything that a hardware architecture offers while using any level of abstraction.
Matrix operations
Matrices are everywhere in numerical analysis. Arrays are the fundamental data structure and used for matrix-vector, matrix-matrix, and other linear algebraic operations.
Cache optimization
How cache works, its importance to performance, and optimization with cache.
SIMD (vector processing)
Parallelism and x86 assembly for SIMD.
Memory management
Numerical software tends to use as much memory as a workstation has. The memory has two major uses: (i) to hold the required huge amount of data, and (ii) to gain speed.
Ownership and smart pointers
Ownership and memory management using C++ smart pointers.
Modern C++
Copy elision and move semantics. Variadic template and perfect forwarding. Closure.
C++ and C for Python
Use C++ and C to control the CPython interpreter.
Array code in C++
Dissect the array-based code and element-based code and when to use them.
Advanced Python
Advanced topics in Python programming.
| 週次 | 主題 |
|---|---|
| 第 1 週 | Introduction (proposal open) (start to prototype) 2025-02-17(一) |
| 第 2 週 | Unit 1: Fundamental Engineering (assignment #1) 2025-02-24(一) |
| 第 3 週 | Unit 2: Python and Numpy (proposal open) 2025-03-03(一) |
| 第 4 週 | Unit 3: C++ and Computer Architecture (assignment #2) (proposal due) 2025-03-10(一) |
| 第 5 週 | Unit 4: Matrix Operations 2025-03-17(一) |
| 第 6 週 | Unit 5: Cache Optimization (assignment #3) (prototype review) 2025-03-24(一) |
| 第 7 週 | Unit 6: SIMD (Vector Processing) 2025-03-31(一) |
| 第 8 週 | Mid-term examination 2025-04-07(一) |
| 第 9 週 | Update project porgress 2025-04-14(一) |
| 第 10 週 | Unit 7: Memory Management (assignment #4) 2025-04-21(一) |
| 第 11 週 | Unit 8: Ownership and Smart Pointers 2025-04-28(一) |
| 第 12 週 | Unit 9: Modern C++ (assignment #5) 2025-05-05(一) |
| 第 13 週 | Unit 10: C++ and C for Python 2025-05-12(一) |
| 第 14 週 | Unit 11: Array Code in C++ (assignment #6) 2025-05-19(一) |
| 第 15 週 | Unit 12: Advanced Python 2025-05-26(一) |
| 第 16 週 | Project presentation 2025-06-02(一) |
| 第 17 週 | No meeting 2025-06-09(一) |
| 第 18 週 | No meeting 2025-06-16(一) |
Course notes: https://yyc.solvcon.net/en/latest/nsd/ Textbook: None References: * Computer Systems: A Programmer's Perspective: 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 * modmesh (example system of this course) source code: https://github.com/solvcon/modmesh * pybind11 source code: https://github.com/pybind/pybind11 * cpython source code: https://github.com/python/cpython * numpy source code: https://github.com/numpy/numpy
- 地點
- 教師未提供此項資料
- 時間
- Use the sciwork community
- 聯絡方式
- Send email to yyc at sciwork.dev, with "[nsd-course]" prefix in the subject line. Or go to sciwork meetup: https://sciwork.dev/meetup/ .
