newsence

利用 ARM NEON 實現每秒數 GB 的前綴和運算

Hacker News·28 天前

這篇文章探討如何利用 ARM 架構下的 NEON SIMD 指令集來優化前綴和運算,進而實現每秒數 GB 的高吞吐量效能。

背景

本文探討如何利用 ARM NEON 指令集在 AArch64 架構上實現高效能的前綴和(Prefix Sum)運算,使其處理速度達到每秒數 GB。討論的核心圍繞在 ARM 指令集的演進,特別是從傳統的 NEON 到較新的 SVE(可伸縮向量擴展)與 SME(可伸縮矩陣擴展)之間的技術差異與硬體普及現況。

社群觀點

針對 ARM 生態系中向量擴展指令集的支援現況,社群展開了深入的討論。許多開發者對於 SVE2 的普及速度感到困惑,特別是 Apple 在最新的 M5 晶片中依然未提供 SVE2 支援,而是選擇跳過並直接推廣 SME 指令集。對此,有觀點指出這反映了 Apple 與 ARM 原生設計路徑的分歧。Apple 似乎認為源自富士通 Aarch64 擴展的 SVE2 並非最佳解法,轉而發展其私有的 SME 擴展。SME2 在單執行緒應用中展現了極高的效能潛力,但在多執行緒環境下,由於 SME 核心通常是由一組 CPU 核心共享的獨立單元,其效能擴展性反而不如 SVE2。

在硬體普及度方面,雖然自 2022 年以來基於 Armv9-A 架構的 Cortex 核心(如 A720)理論上都支援 SVE2,但實際市場情況卻相當複雜。嵌入式設備往往仍停留在 Cortex-A78 等舊型核心,而高通在過去幾年的晶片中即便硬體具備能力,也會選擇禁用 SVE。直到最近的 Snapdragon 8 Elite 與 X2 系列,高通才正式實作 SVE2 與 SME。目前 SVE2 的主要推動力來自雲端伺服器晶片(如 AWS Graviton4、Google Axion)以及高性能智慧型手機晶片(如聯發科天璣 9000 系列與三星 Exynos 2200 以後版本)。

此外,社群對於 SVE 指令集最初的設計目標也產生了反思。SVE 的初衷是讓程式碼能無視硬體向量暫存器寬度而運行,但有評論者認為這種「寬度無關」的理想在追求極致效能時顯得徒勞。要達到硬體極限,開發者仍需針對快取行寬度或暫存器特性進行參數化優化。相較之下,SME2 的定位更偏向矩陣運算,其「串流 SVE」模式主要是為了在矩陣運算前後進行資料預處理。對於開發者而言,選擇哪種指令集取決於應用場景:若追求最低延遲,SVE2 仍是首選;若追求高吞吐量,SME2 或 GPU 則更具優勢。

延伸閱讀

在演算法實作方面,留言者補充指出,若讀者希望深入了解此類向量化前綴和運算的通用形式,可以參考 Hillis-Steele 前綴和演算法。這是一種經典的並行演算法,透過對數級別的步驟實現前綴和計算,是理解現代 SIMD 優化技術的重要基礎。

https://lemire.me/blog/2026/03/08/prefix-sums-at-tens-of-gigabytes-per-second-with-arm-neon/