1. 程式人生 > >翻譯《計算機體系結構--量化研究方法》第四版附錄F向量化部分

翻譯《計算機體系結構--量化研究方法》第四版附錄F向量化部分

1. 何出向量處理器?

在第23章我們看到了如何通過每個時鐘週期發射多條指令和利用更深的執行單元流水線來開發指令級並行(ILP)以顯著提高效能。(這個附錄假定你已經完整閱讀了第23章和附錄G。另外,對向量處理器的記憶體系統的討論需要你閱讀附錄C和第5章。)不幸的是,我們看到在挖掘更大程度的 ILP
的時候遇到了各種各樣的困難。


隨著我們增加指令發射的寬度和流水線的級數,我們同時也需要更多的不相關指令以保持流水線忙碌。這意味著可以同時 in flight 的指令數目的增長。對於一個動態排程的處理器而言,這意味著硬體資源比如指令視窗(instruction window),ROB,重新命名暫存器

renaming register file)也要相應增長以保持足夠的能力去維護所有 in flight 的指令的資訊。更糟的是每一個硬體單元的埠都要隨著發射寬度的增長而增長。跟蹤所有  in flight 的指令之間依賴性(dependency)的邏輯隨著指令的數目以 2次方的關係增長。即使對於一個把更多的排程工作轉移到了編譯器上的靜態排程的VLIW 處理器而言,它仍然需要更多的暫存器,更多的暫存器埠,更多的 hazard interlock 邏輯(我們假定由硬體在指令發射的時候檢測是否需要 interlock)來支援更多的 in flight 指令。這同樣導致了電路規模和複雜度的 2 次方
增長[1]。如此快速的電路複雜度的增長使得設計一個能夠控制大量 in flight 指令的處理器困難重重,而且這反過來實際上也限制了發射寬度和流水線深度。


向量處理器早在 ILP 處理器之前就已經成功商業化了。它採用了一種不同的策略來控制多個深度流水的功能部件。向量處理器提供了高層的對於向量--線性陣列--的操作。一個典型的向量操作是兩個 64 個浮點元素的向量相加得到一個新的 64 個元素的向量。這條向量指令等同於一整個迴圈,每一次迭代計算出一個元素的結果,更新迴圈變數,然後跳轉回迴圈頭部繼續執行。


向量處理器有以下幾個重要的特性使得它能夠解決大多數上面提到的問題:

  • 一條向量指令能夠做很多事情
    --它等價於一整個迴圈。每條指令代表了數十上百條的操作,所以為了保持多個深度流水化的功能單元忙碌而需要的 instruction fetch instruction decode 的頻寬急劇減少了。
  • 通過使用一條向量指令,編譯器或者程式設計師顯式地指出了在一個向量之中的各個元素之間的計算互相獨立,所以硬體不需要檢測一個向量內部的 data hazard。可以使用一組並行的功能單元或者一個非常深度流水的功能單元或者任何以上兩種方式的組合來計算向量中的各個元素。
  • 硬體只需要檢測兩條向量指令之間的 data hazard,而不是每個向量之中的元素之間的 hazard。這意味著所需的依賴檢測邏輯的規模其實和標量處理器所需的大致相同,但是現在更多的(對於向量元素)操作可以同時 in flight
  • 向量指令的訪存有固定可知的模式。如果一個向量的元素是相鄰的,那麼從一組高度 interleaved memory bank 中取那個向量會效果非常好。相對於訪問 cache 而言更高的訪問主存的延遲被均攤了,因為一個向量訪存操作是為向量中的所有元素髮起的,而不只是一個元素。
  • 因為一整個迴圈都被一條向量指令代替了,而這條向量指令的行為是可預期的,所以通常由迴圈分支而引起的 control hazard 現在不存在了。



因為這些原因,向量操作對於同樣數目的資料進行操作的時候比相應的一系列標量指令要快得多,所以設計者們如果發現他們的應用程式會經常進行向量操作的話會在設計中包含有向量單元。


向量處理器尤其對於大規模的科學工程計算特別有效,包括汽車碰撞模擬和天氣預報。這些應用程式通常需要一臺超級計算機跑上幾打個小時來處理 Gigabyte 級別的資料。高速的標量處理器依賴於 cache 來減少訪問主存的延遲,但是大規模長時間執行的科學計算程式通常有很大規模的工作集,並且通常區域性性非常低,這導致memory hierarchy 的效能非常糟糕。所以標量處理器會提供旁路 cache 的機制如果軟體發現訪存的區域性性很差。但是使得主存飽和需要硬體跟蹤數百上千條的 in flight 的標量訪存操作,而這在標量處理器 ISA 中已被證實開銷是非常大的。相反,向量 ISA可以只使用一條向量指令就可以發起對於一整個向量中元素的訪存操作,所以非常簡單的邏輯就可以提供很高的頻寬[2]。


當這個附錄上一次在 2001 年寫的時候,詭異的向量超級計算機已經慢慢地從超級計算機領域中淡出了,取而代之的是超標量處理器。但是在 2002 年,日本造出了當時世界上最快的超級計算機,the Earth Simulator。它是為創造一個“虛擬星球”來分析和預測世界環境和氣候變化而設計的。它比之前最快的超級計算機還要快 5 倍,並且比身後的 12 個超級計算機加起來還要快。這在高效能運算領域引起了一陣騷亂,特別是在美國。美國人被如此之快地就丟失如此具有戰略意義的高效能運算陣地而感到震驚。The Earth Simulator 比那些與之競爭的機器有更少的處理器,但是每一個節點都是一個單晶片的向量微處理器。它對於很多具有重要意義的超級計算程式碼都有非常高的效能--原因就像之前提到的。The Earth Simulator 以及Cray 釋出的新一代向量處理器的影響力導致了對於向量處理器的重新關注和重視。