向量處理器(vector processor)
想像一隊老式的挖溝工人。純量處理器是一個工人一把鏟子,挖一個洞,再挖下一個,再下一個。向量處理器則是一個工頭,下一道命令——「把整排挖開」——給一排相同的挖溝工,他們各佔一個位置一起挖。一道命令就移走一整排泥土。向量處理器就建立在這個構想上:一條指令對一整個數字陣列(一個「向量」)下達運算命令。
這套機制有兩個關鍵零件。第一是向量暫存器——寬暫存器,每個裝的不是一個數字而是一整串,譬如 64 個元素。第二是深度管線化的車道——不必等一次加法做完才開始下一次,元素像走裝配線那樣流過一台加法器,幾乎每個週期就吐出一個新結果。一條向量加法指令說「把暫存器 V1 逐元素加到 V2,存進 V3」,硬體只用一次指令提取就把全部 64 個元素輾過去,常以又長又有效率的爆發從記憶體拉取與存回運算元。1970、1980 年代經典的 Cray 超級電腦就是這樣造的。
它與你在今日 CPU 上看到的 SIMD 擴展之間誠實的區別微妙卻真實。SIMD 擴展把固定寬度烤進指令裡(恰好加 8 個浮點數);真正的向量指令則指名一個程式可設定的向量長度,於是同一份程式能在向量單元更寬或更窄的硬體上跑——這正是現代可擴展向量指令集(如 RISC-V 的向量擴展與 ARM 的 SVE)背後的哲學。無論哪種,好處與限制都跟所有資料層級平行同屬一族:在又長又規律又獨立的陣列上輝煌;在資料很短、零散,或每一步依賴上一步時則無用。
一條長度 64 的向量加法:一條指令 vadd V3, V1, V2,對 i 從 0 到 63 算出 V3[i] = V1[i] + V2[i]。純量機器需要一個 64 次迭代的迴圈,每次一個載入、一個加法、一個儲存、一個分支——每個元素四條以上的指令,而非對全部 64 個只用一條。
一條向量指令做完整個純量迴圈的工作,深度管線化的車道讓結果源源流出。
向量處理器不是「只是一個寬的算術邏輯單元」。它真正的勝利在於把一條指令攤分到許多元素上、並以長爆發串流記憶體;在很短或零散的資料上這些好處消失,純量核心反而可能更快。