無號 (unsigned) 8 位整數的除法 (★ 100 分)
這篇文章主要探討瞭如何在 8 位無號整數的情境下進行除法最佳化,包括透過浮點數運算與 long division 演算法來達成向量化計算。文中詳細解釋了將 8 位整數轉成 32 位整數後,再轉成浮點數進行除法,並以位移或截斷方式避免小數捨入誤差的流程,也提到使用近似倒數指令 RCPPS 搭配微調乘數,能在特定範圍內維持較好的計算正確性。對於 long division,作者示範如何逐位比較並更新商與餘數,進一步提出 SSE、AVX2、以及 AVX-512 等版本的平行化實作範例。
效能測試部分則涵蓋 Ryzen 7、Skylake-X、IceLake 等不同處理器平臺,結果顯示在 Intel 上使用 AVX-512 的 long division 執行速度最快,而在 Ryzen 上則以 AVX2 並結合近似倒數的做法效能最佳。此外,作者還發現部分編譯器在自動化向量化時,能產生與手動撰寫 SIMD 程式碼不相上下甚至更高效的結果,顯示編譯器最佳化在部分情況下相當成熟。
👥 55 則討論、評論 💬
https://news.ycombinator.com/item?id=42481612