天天看點

SIMD處理器設計技巧SIMD處理器設計技巧

SIMD處理器設計技巧

  • SIMD處理器設計技巧
    • 向量長度寄存器:處理不等于SIMD硬體帶寬的循環
    • 向量遮罩寄存器:處理向量循環中的IF語句
    • 并行存儲器組:提供足夠帶寬
    • 步幅:處理SIMD中的多元數組
    • 集中-分散:用SIMD處理稀疏矩陣
    • 多種操作數位寬支援
    • 參考文獻

SIMD(single instruction multi data)結構的處理器,一條指令同時控制多條并行的資料通道進行運算。該結構的處理器相比普通指令集處理器相比具有如下優點:相同可并行循環所需指令數更少;通過增加存儲器帶寬來換取存儲器延遲的減少。

為了發揮SIMD并行計算的能力,SIMD處理器有如下一些設計技巧。

向量長度寄存器:處理不等于SIMD硬體帶寬的循環

SIMD處理器的datapath有一個固定的硬體向量長度,該長度由SIMD并行的datapath通路數決定。在實際程式中這個長度和需要處理的向量長度是不相同的。為了解決這個問題,SIMD處理器可以引入向量長度這樣一個變量,用來記錄目前需要處理的向量的長度。向量長度可以用一個單獨的向量長度寄存器來定義,也可以在指令表示。使用向量長度寄存器的好處是當SIMD處理器結構優化後,向量長度發生改變的話,也不需要修改指令集。

向量遮罩寄存器:處理向量循環中的IF語句

在循環程式中,很多時候循環内需要執行的指令包含條件執行(if)指令,這些指令會破壞程式的并行度。如下面的程式:

for (i=; i<; i++)
    if (X[i] != )
        X[i] = X[i] - Y[i]
           

對于條件執行指令的問題可以通過向量遮罩控制解決。引入向量遮罩寄存器,儲存一個布爾向量,向量遮罩寄存器裡的每一位的bool值控制SIMD相對應的一個datapath通路,隻有該datapath通路對應的遮罩寄存器值為1時,才對該datapath通路進行計算。

并行存儲器組:提供足夠帶寬

SIMD處理器的存儲系統通常使用由多個存儲單元并行組成的并行存儲器組,存儲器組中的每個存儲單元可以獨立通路。這樣的存儲結構有以下原因:

  • SIMD有多個通道,需要同時載入、存儲多個資料,為了對其進行支援,減少存儲延遲,存儲系統要能夠同時通路多組。
  • SIMD處理器常常需要支援對存儲器的非連續資料的通路,這樣的通路需要需要多個存儲器單元要獨立尋址。
  • SIMD有時候會多個SIMD處理器共享一套存儲系統,而SIMD各自又有自己的獨立的尋址特性。

步幅:處理SIMD中的多元數組

并行計算中常常碰到多元數組,比如二維矩陣相乘。對此進行尋址時,通常資料位址不是連續的。比如A*B,假設A和B都是按行存儲,那麼計算時對于A進行向量通路的時候是按行的,則向量内元素的位址是連續的,即步幅為1。而對于B則是按列通路,向量内元素的位址的非連續的,步幅等于行寬。對于這樣的情況,可能會出現通路沖突的問題。對于該問題可以根據實際應用的需求對存儲器進行無沖突通路優化,具體見 并行存儲器知識總結

集中-分散:用SIMD處理稀疏矩陣

稀疏矩陣的存儲采用壓縮表示,并通過索引形式間接通路。SIMD對稀疏矩陣的支援機制為采用索引向量的集中-分散操作。這種運算可以在稀疏矩陣的壓縮表示和正常表示之間進行轉換。集中操作是取得索引向量,并在此向量中提取元素,元素位置的确定是将基礎位址加上索引向量中給定的偏移量。其結果是向量寄存器中的一個密集向量。在以密集形式對這些元素進行操作之後,再使用同一索引向量,通過分散存儲操作,以擴充方式存儲這一稀疏向量。

由于每個元素都有各自的位址,是以存儲系統中會産生很多沖突,需要更多的硬體資源來優化存儲。

多種操作數位寬支援

對于不同的應用,需要處理的向量中元素的位寬可能是不同的,比如圖形系統采用8位表示三基色的一種,音頻采用8位或16位來表示采樣信号。為了SIMD處理器可以通過對datapath進行融合來相容多種位寬的計算。例如,假設有一個256位的加法器,通過劃分加法器中的進位鍊,處理器可以同時支援32個8位操作數、16個16為操作數、8個32位操作數或者4個64位操作數。這些經過劃分的加法器的額外成本很小。

參考文獻

J.L.Hennessy. 計算機系統結構:量化研究方法[M] 第四章. 人們郵電出版社, 2013.

繼續閱讀