2 項進行中

115-1 選課時程

進行中

  • 初選第一階段 6/15 – 6/18
  • 初選第二階段 6/22 – 6/25
  • 校際選修 進行中 8/24 – 9/18
  • 初選第三階段 8/31 – 9/3
  • 開學後加退選 進行中 9/7 – 9/21
  • 逾期加退選 9/21 – 9/24
選課資源

加入行事曆

選擇訂閱 Google Calendar,或下載通用的 ICS 檔案。

使用 Google Calendar 時,Google 會收到這份課表的公開連結。

數值軟體開發(英文授課)

Numerical Software Development

學期
109-1
學分
0 學分
當期課號
5285
永久課號
IDS5008
開課單位
數據科學與工程研究所碩士班
授課教師
陳永昱
校區
光復
類別
選修
上課時間表
週一
Z
07:00–07:50
數值軟體開發(英文授課)
EC115(光復)
3 節連堂
1
08:00–08:50
2
09:00–09:50

* 根據陽明交大上課時間表所列

概述

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. Cherk course notes for details: https://github.com/yungyuc/nsd/tree/master/notebook/20au_nctu .

先修科目

This is a graduate or senior level course open to students who have taken computer architecture, engineering mathematics or equivalents. 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.

備註

無備註

教學方式

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. AWS Machine Image (AMI) and AWS educate will be used.

評分方式

* You are expected to learn programming languages yourself. Python is never a problem, but you could find it challenging to self-teach C++. 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 14 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 practices

    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.

  • 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.

  • Array-oriented design

    Software architecture that take advantage of array-based code.

  • Advanced Python

    Advanced topics in Python programming.

週次計畫
週次主題
第 1 週

Lecture 1: Introduction

9/14
第 2 週

Lecture 2: Fundamental engineering practices (homework #1)

9/21
第 3 週

Lecture 3: Python and numpy (term project proposal start)

9/28
第 4 週

Lecture 4: C++ and computer architecture (homework #2)

10/5
第 5 週

Lecture 5: Matrix operations

10/12
第 6 週

Lecture 6: Cache optimization (homework #3)

10/19
第 7 週

Lecture 7: SIMD (term project proposal due)

10/26
第 8 週

Mid-term examination

11/2
第 9 週

Lecture 8: Memory management (homework #4)

11/9
第 10 週

Lecture 9: Smart pointers

11/16
第 11 週

Lecture 10: Modern C++ (homework #5)

11/23
第 12 週

Lecture 11: C++ and C for Python

11/30
第 13 週

Lecture 12: Array code in C++ (homework #6)

12/7
第 14 週

Lecture 13: Array-oriented design

12/14
第 15 週

Lecture 14: Advanced Python

12/21
第 16 週

Term project presentation

12/28
第 17 週

No meeting (optional lecture is not planned)

1/4
第 18 週

No meeting (optional lecture is not planned)

1/11
教科書

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 * Source code: cpython, numpy, xtensor, and pybind11

Office Hours
地點
By appointment
時間
N/A
聯絡方式
Send email to yyc at solvcon.net, with "[nsd]" prefix in the subject line.