檢討第五次作業
fork 仍需要時間成本,尤其是在遞迴期間才做 fork ,因此會不斷的進行 fork 直到 fork_count 到達設定值或者 partition 結束。不過剛剛有看到若設定值過大,執行時間會變很長的同時還會導致排序錯誤,但為什麼會導致排序錯誤 ?
invoke mmap(2) to share among forked processes.
sudo sysctl -w kernel.sched_child_runs_first=1,以便要求 Linux 排程器 (CFS) 讓 child process 優先於 parent process 執行
改進 concurrent (fork) merge sort:
ioctl
demand paging
page size: 4KB (trade-off)
Arm64: 4KB, 16KB, 64KB
CS:APP Chapter 9 (virtual memory)
https://docs.kernel.org/admin-guide/mm/hugetlbpage.html (HugeTLB)
KPTI dramatically increased this cost: directly, by switching the active page table at each context transition
=> ESCA: Effective System Call Aggregation for Event-Driven Servers
"The purpose of computing is insight, not numbers." by Richard Hamming, Numerical Methods for Scientists and Engineers (1962).
第 9 週測驗 中提及的矩陣乘法,為何不同大小的方陣不能相乘?簡單歸納兩個結論:
線性代數(linear algebra) 字面意思是在討論線性性質與代數結構,與一般工程數學或是工程學中的線性代數不同,數學系相關的線性代數出發點是向量空間(vector space),所謂向量空間其實就是代數中的體(field)的延伸,對於一個體 與一個集合 會滿足十個公理。
從向量空間開始接續會討論到線性相依、線性獨立、基底,再來到線性這個性質
線性組合、基底等等這些概念都是息息相關。由有序基底 生成的向量空間 ,藉由係數 對基底元素的線性組合,組合出任意向量 表示為
且每個係數皆唯一。
而以 為基底的 座標向量表示為
讓向量空間 的有序基底為 和向量空間 的有序基底為 ,以及一線性轉換 則對 存在唯一係數 對 使得
舉書本 p.81 例子 3,對線性轉換
讓 和 為標準有序基底。則 由基底 和基底 構成的矩陣表示法為
如果把有序基底的順序改一下變成 則矩陣表示法為
再來探討下矩陣乘向量這個操作的數學含意。令 則
可以看到 的行向量,藉由 中的元素為係數做線性組合。
回到線性轉換以函數觀點來思考
其實就是先將基底 中的元素線性組合出 後以線性轉換得到函數映射至 基底元素的線性組合。
總結就是矩陣是線性轉換的有序基底間的映射關係,而矩陣乘向量是將一空間的座標向量映射至另一個空間的座標向量
接續討論矩陣乘矩陣是什麼?先講結論矩陣乘矩陣代表線性轉換的合成,也因為是函數合成,除非特定情況下矩陣相乘不滿足交換律。
其中 為矩陣相乘的結果,也是線性轉換 的矩陣表示式。至此我們可以瞭解矩陣乘矩陣和線性轉換合成之間的關聯。
而關於行列式的部分,強烈建議看看 行列式 | 線性代數的本質 第五章 by 3Blue1Brown 從幾何座標的角度講解 和 行列式值在幾何上的意義。
其中很重要的一個部分 也就是矩陣 中的行或列向量並非線性獨立,這告訴我們矩陣的 。換言之 並非以有序基底映射的矩陣表示式,也因為並非基底所以無法生成(span)原本線性轉換定義域的全空間。
在影片 3:05 處 可以看到兩向量張開的面積被壓縮成一條線,就是在告訴我們這個矩陣中的行或是列向量有線性相依的情況,無法生成原本的全空間,並非一組基底形成的矩陣表示式。
最後討論下影片最後的問題:
行列式 與 和 的關係,其中 和 不為零,且 和 為大小相同的方陣可以寫成
從計算可以證明這件事情,但從線性轉換跟幾何的角度思考,這件事情解釋起來就很簡單。由於皆為方陣,定義域和對應域的向量空間大小皆相同, 以線性轉換角度來看只是把一個有序基底 換成另一個有序基底 。將上述行列式的等號改以基底變換呈現為
等式右邊 是將面/體積從有序基底 映射至 伸縮的係數,同理 。則兩個行列式相乘的過程就是,從 映射至 做一次伸縮後得到的面/體積變化係數,乘上以基底 為坐標系做一次映射至 坐標系的面/體積變化係數。