數值軟體開發
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. Students are required to attend all meetings. If you don't feel comfortable expressing yourself publicly, this course is not designed for you. Read the full syllabus at https://yyc.solvcon.net/en/latest/nsd/schedule/25au_nycu/schedule25au.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. Students are required to use English for the homework assignments and term project, including the presentation, and pro-actively speak English. The lecture meetings are not only for lecturing but also for discussing. Students are required to attend every meeting to discuss ideas and progress of the project. Discussion requires hard-learning skills, and students are **strongly recommended** to also take the course Academic English Writing (course code 562045: https://timetable.nycu.edu.tw/?r=main/crsoutline&Acy=114&Sem=1&CrsNo=562045 ) if they have not.
The instructor will use English. Students are required to use English for the homework assignments and term project, including the presentation, and pro-actively speak English. Students should attend all meetings. 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
- Fundamental engineering
- Python and numpy
- C++ and computer architecture
- Matrix operations
- Cache optimization
- SIMD (vector processing)
- Memory management
- Ownership and smart pointers
- Modern C++
- C++ and C for Python
- Array code in C++
- Advanced Python
| 週次 | 主題 |
|---|---|
| 第 1 週 | Introduction (proposal open) and Unit 1: Fundamental Engineering |
| 第 2 週 | Unit 2: Python and Numpy |
| 第 3 週 | Unit 3: C++ and Computer Architecture |
| 第 4 週 | Unit 4: Matrix Operations |
| 第 5 週 | No meeting |
| 第 6 週 | No meeting (mid-autumn holiday) |
| 第 7 週 | Unit 5: Cache Optimization |
| 第 8 週 | Mid-term examination |
| 第 9 週 | Unit 6: SIMD (Vector Processing) |
| 第 10 週 | Unit 7: Memory Management |
| 第 11 週 | Unit 8: Ownership and Smart Pointers |
| 第 12 週 | Unit 9: Modern C++ |
| 第 13 週 | Unit 10: C++ and C for Python |
| 第 14 週 | Unit 11: Array Code in C++ |
| 第 15 週 | Unit 12: Advanced Python |
| 第 16 週 | Project presentation |
| 第 17 週 | No meeting |
| 第 18 週 | No meeting |
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 meetup at NYCU (see https://sciwork.dev/meetup/ )
- 聯絡方式
- Send email to yyc at sciwork.dev, with "[nsd-course]" prefix in the subject line. Or go to sciwork meetup: https://sciwork.dev/meetup/ .