contributed by < fewletter
>
$ uname -r
5.15.0-67-generic
$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 6
On-line CPU(s) list: 0-5
Thread(s) per core: 1
Core(s) per socket: 6
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
Stepping: 10
CPU MHz: 3000.000
CPU max MHz: 4400.0000
CPU min MHz: 800.0000
BogoMIPS: 6000.00
Virtualization: VT-x
L1d cache: 192 KiB
L1i cache: 192 KiB
L2 cache: 1.5 MiB
L3 cache: 9 MiB
NUMA node0 CPU(s): 0-5
bn_multSSA
bn_multSSA
進行除錯修課心得
學期初抱著決心來修這堂課,給自己的要求是無論如何都不要退選,就算沒有理解或聽懂上課的教材,至少都可以開開眼界,而一開始的功課量就已經讓我應付不來,只能跟自己說走一步算一步,不要放棄一直走,不知不覺就已經走到第五周的作業,而這幾周的一直都有感受到滿滿的挫折,但是就像因為自動飲料機而延畢的那一年中所說的 「你不能現在就放棄,要是現在就放棄的話,你這輩子日後遇到這種等級的困難,就只會想逃避而已。」,所以我會撐下去,撐完就是我的。
在修課期間一直聽到老師說要能夠注重細節才能征服 Linux 核心,而我在寫作業時不斷體會到這句話的意思,就舉這禮拜的作業作為例子,當我在實作大數乘法 bn_multSSA
時,我不停地遇到一堆我沒想到過的 bug,遇到的當下真的非常不爽和不開心,明明在測試時
為了去 debug,我很土法煉鋼的把所有資料一一列出,發現到一個大問題,原來在執行 fast doubling 的時候如果沒有限制大數的 size 大小,size 會一直疊加上去,到
int d = bn_msb(a) + bn_msb(b);
d = DIV_ROUNDUP(d, 32) + !d; // round up, min size = 1
霎那間我完全懂了,我完全懂為什麼這行程式碼要出現在這裡,這行原本被我忽視掉以為沒什麼重要的程式碼在 fast doubling 中會限制大數 size 大小,而我在測試