Go 編譯器的 GOAMD64 等級實測:v2 是最佳平衡點,AVX-512 尚無效益
lemire.me · 2026-06-06
Daniel Lemire 針對 Go 程式的 AMD64 微架構等級(GOAMD64=v1/v2/v3/v4)進行基準測試,發現 v2 在多數情境下可帶來 21–43% 的效能提升,而 v4(AVX-512)目前在 Go 生態中幾乎沒有收益,原因是 Go 編譯器對 AVX-512 指令的支援極為有限。
四個微架構等級的定義
- v1:AMD64 基準線,含 SSE2(2003 年以後的 x86-64 CPU)
- v2:加入
POPCNT、LZCNT、SSE4.2(Intel Nehalem/2008 後) - v3:加入 AVX2(256-bit SIMD,Intel Haswell/2013 後)
- v4:加入 AVX-512(512-bit SIMD,Intel Skylake-SP/2017 後)
基準測試結果
| 情境 | v1→v2 | v2→v3 | v3→v4 |
|---|---|---|---|
| Population Count(bit 計數) | −43%(單指令 POPCNT) | 0% | 0% |
| FromDense 陣列建構 | −21% | −38%(AVX2 向量化) | 0% |
| Intersection Cardinality | −微幅 | −22%(256-bit 寬化) | 0% |
v4 的零增益直接反映了 Go 編譯器目前對 AVX-512 的支援缺口。Go 的後端(SSA pass)能自動向量化部分迴圈到 AVX2 層級,但不會生成 EVEX 前綴的 512-bit 指令;即使硬體支援,編譯器路徑尚未完整實作。
Python 型別檢查工具的多元化困境
Pyrefly 部落格(2026-06-09)提出目前 Python 生態有五套主流型別檢查工具:mypy、Pyrefly、Pyright、ty、Zuban,各自對嚴格度的預設不同,導致同一段程式碼需要不同的 # type: ignore 注解才能通過各別工具。
作者以 DataType.__eq__ 為例,說明在 source code 層面同時滿足五套工具代價高昂;但透過 test suite 測試 public API 時,五套工具均無報錯。建議函式庫維護者改為「在測試中驗證型別正確性」,而非在 source 中對抗各工具差異。
Linux Kernel 7.1-rc7
Linux 7.1-rc7 於 2026-06-08 發布(LWN),Linus Torvalds 表示若無重大問題,下一個版本即為穩定版。此輪 RC 包含 fanotify 的階層式儲存管理改進;Amir Goldstein 提交了 FAN_MARK_FILESYSTEM 的 per-mount 事件過濾增強,讓 HSM daemon 可更精確訂閱特定掛載點的 inode 事件而不汙染其他掛載。
原始來源:Daniel Lemire — GOAMD64 benchmarks、Pyrefly — Too many type checkers、LWN — Kernel prepatch 7.1-rc7