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

學期
108-1
學分
0 學分
當期課號
5262
永久課號
IDS5008
開課單位
數據科學與工程研究所碩士班
授課教師
陳永昱
校區
光復
類別
選修
上課時間表
週一
Z
07:00–07:50
數值軟體開發(英文授課)
EC122(光復)
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.

先修科目

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.

備註

無備註

教學方式

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. Course notes: https://github.com/yungyuc/nsd .

評分方式

* 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%.

課程大綱
  • Python and numpy

    organize Python modules, use numpy for array-oriented code, use tools for numerical analysis

  • C++ and computer architecture

    fundamental data types, object-oriented programming, standard template library

  • fundamental engineering practices

    automation, version control and regression, work that cannot be automated

  • memory management

    stack and heap, Linux and POSIX API, C++ memory manager, object and memory statistics

  • matrix operations

    POD arrays and majoring, matrix-vector and matrix-matrix operations, linear algebra

  • cache optimization

    cache for performance, stride analysis, tiling

  • SIMD: vector processing

    Single instruction and multiple data (SIMD) with modern hardware, compiler options to generate SIMD assemblies, SIMD-friendly memory layout

  • modern C++ I: ownership and meta-programming

    pointers and ownership, revisit shared pointer, template meta-programming and compile-time computing

  • modern C++ II: more than templates

    copy elision / RVO, move semantics, variadic template and perfect forwarding, anonymous function, closure, lambda expression

  • xtensor: arrays in C++

    xtensor, carry arrays between Python and C++, speed up array-based Python code using C++

  • pybind11: binding between Python and C++

    wrapping API, Python objects, reference counting, Python containers

  • cpython API: operate Python from C

    built-in types, memory manager, threading and global interpreter lock

  • profiling

    avoid memory allocation and data copy, home brew profiling, assembly inspection

  • array-oriented design

    design interface with arrays, struct arrays between Python and C++, conversion between dynamic and static semantics

週次計畫
週次主題
第 1 週

lecture 0: introduction

9/9
第 2 週

skip due to instructor out of town

9/16
第 3 週

lecture 1: Python and numpy

9/23
第 4 週

lecture 2: c++ and computer architecture

9/30
第 5 週

lecture 3: fundamental engineering practices

10/7
第 6 週

lecture 4: memory management

10/14
第 7 週

lecture 5: matrix operations

10/21
第 8 週

lecture 6: cache optimization

10/28
第 9 週

mid-term examination

11/4
第 10 週

lecture 7: SIMD

11/11
第 11 週

lecture 8: modern C++ I: ownership and meta-programming

11/18
第 12 週

lecture 9: modern C++ II: more than templates

11/25
第 13 週

lecture 10: xtensor: arrays in C++

12/2
第 14 週

lecture 11: pybind11: binding between Python and C++

12/9
第 15 週

lecture 12: cpython API: operate Python from C

12/16
第 16 週

lecture 13: profiling

12/23
第 17 週

lecture 14: array-oriented design

12/30
第 18 週

term project presentation

1/6
教科書

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.