天天看點

探索高通骁龍處理器中的Hexagon NPU架構

作者:煙煙聊智車
探索高通骁龍處理器中的Hexagon NPU架構

高通的DSP

芝能智芯出品

現代手機要處理很多電話和視訊的信号,還要盡量省電。數字信号處理器(DSP)是一種專門的晶片,可以幫助手機做這些事情,讓CPU不用太累。

探索高通骁龍處理器中的Hexagon NPU架構

Hexagon處理器是Qualcomm公司設計的一種NPU,用在它們的骁龍産品裡。不僅可以處理信号,還可以處理機器學習的任務,因為它有一種叫做矩陣乘法的功能。

探索高通骁龍處理器中的Hexagon NPU架構

Hexagon是一種可以一次執行四條指令的晶片,而且有一些特别的功能來處理信号。它可以同時運作多個線程,也就是說它可以同時做幾件事情。Hexagon有一個小的協作器來幫助它執行向量和張量的運算,這些運算可以讓它每秒鐘做很多次計算。

Hexagon也支援虛拟記憶體和緩存,這些是一些可以讓它更快地讀寫資料的技術。但是它有一個不同的執行模型,就是它先送出指令,然後再執行。這樣做可以讓它有一個深度的執行管道,但是也有一個缺點,就是如果出現了一些錯誤,可能不能及時發現。

探索高通骁龍處理器中的Hexagon NPU架構

在骁龍8 Gen 2裡,Hexagon可以同時運作6個線程,比一般的CPU強大,但是也沒有GPU那麼強大。每個Hexagon線程預設隻有一個标量上下文,也就是說隻能做一些簡單的計算。如果要用到向量或張量協作器,就要先申請。

探索高通骁龍處理器中的Hexagon NPU架構

在前端,分支預測是一種可以讓它提前知道接下來要執行哪些指令的技術。這樣可以節省時間和能源。Qualcomm為Hexagon實作了分支預測,并且提供了一些性能監控事件來顯示分支預測的效果,大部分分支隻需要兩個周期就能處理好,少數分支需要三個周期。

探索高通骁龍處理器中的Hexagon NPU架構

當分支預測給出了目标位址後,Hexagon就從指令緩存中取出一個128位的VLIW捆綁。每個VLIW捆綁包含最多四條指令,這讓我想知道為什麼Qualcomm選擇了“Hexagon”這個名字。

探索高通骁龍處理器中的Hexagon NPU架構

“Qualcomm Quadrilateral”聽起來更合理,也更好聽。VLIW捆綁可以讓它用簡單的硬體來執行多條指令。解碼器便宜,因為每個VLIW位置隻能放一種類型的指令。硬體不用解決沖突,因為打包到VLIW捆綁中的指令不能互相影響,并且不能寫入同一個寄存器。執行管道選擇邏輯也更簡單,因為每個VLIW位置對應一個執行管道。

指令取出和解碼後,就被發送到相應的機關或協作器進行執行。

探索高通骁龍處理器中的Hexagon NPU架構

Hexagon有一個32位标量單元,每個線程上下文有32個寄存器。這個标量單元很強大,可以獨立處理一些輕量級的DSP任務。因為VLIW打包,它可以每個周期完成最多四條指令,并且每條指令可以做很多事情。有一些專門的指令用于圖像處理和視訊解碼等任務。“标量”單元甚至可以執行向量操作。比如說,它可以把幾個小的資料放到一個寄存器裡,然後一起處理。标量單元的兩個管道也可以處理浮點運算。這有點像Intel的MMX,隻是它用的是通用寄存器。

探索高通骁龍處理器中的Hexagon NPU架構

有一些專用的控制寄存器可以讓它自動循環,這樣就不用每次都檢查循環條件。循環緩沖區也是一種可以讓它更快地通路資料的技術。一個特殊的“全局指針”寄存器可以幫助它通路全局或靜态資料。這些技術可以減少寄存器的壓力。

探索高通骁龍處理器中的Hexagon NPU架構

Hexagon矢量擴充(HVX)為更重的DSP任務提供了更多支援。HVX提供32個1024位矢量寄存器和一組執行管道,可以做一些向量運算。Hexagon的矢量上下文比标量多,是以線程要用到HVX就要先申請。

探索高通骁龍處理器中的Hexagon NPU架構

向量化應用程式需要通路很多資料,Qualcomm甚至不在L1裡緩存向量通路。相反,矢量單元直接用L2緩存作為它的第一級緩存。除了L2緩存,Hexagon還有一個大型TCM(緊密耦合記憶體)。這是一種軟體管理的臨時存儲器,類似于AMD GCN的LDS,但更大。在骁龍8 Gen 2的Hexagon上,有一個8 MB的TCM。

探索高通骁龍處理器中的Hexagon NPU架構

TCM對于Hexagon的散點和聚集操作很重要。散點和聚集操作是一種可以把資料從記憶體中的不連續位置放到向量裡,或者反過來的操作。對于緩存來說,散點和聚集操作很難處理,因為一個1024位向量可能需要通路128個不同的位址。在關聯組緩存中查找一行需要比較很多次。最壞的情況下,散點操作可能需要比較1024次。因為TCM不是緩存,它不用比較,是以更快。Hexagon甚至不在可緩存的記憶體上執行散點和聚集操作,隻在TCM上執行。

探索高通骁龍處理器中的Hexagon NPU架構

除了大型矢量寄存器檔案,HVX為每個線程提供了四個128位謂詞寄存器。謂詞寄存器可以儲存向量比較的結果,并且可以用作某些指令的掩碼,例如條件累積。

探索高通骁龍處理器中的Hexagon NPU架構

過去的Hexagon實作主要做向量整數操作,但為了讓HVX更靈活,Qualcomm增加了浮點功能。

探索高通骁龍處理器中的Hexagon NPU架構

機器學習促使Qualcomm在Hexagon中添加了一個張量協作器。張量協作器可以做矩陣乘法這樣的運算,這樣每條指令就可以做更多的事情,而且省電。累加器也得到了特殊處理,因為它們隻用來儲存結果,而不用讀取。

探索高通骁龍處理器中的Hexagon NPU架構

總結:Hexagon讓我們看到了DSP奇妙世界的一部分。它介于CPU和GPU之間,既有CPU舒适功能,又有GPU強大功能。它使用VLIW執行來平衡靈活性和性能。它有一個強大的标量單元來處理輕量級DSP任務。

随着處理要求的增加,Qualcomm增加了HVX和張量協作器來提高DSP吞吐量。這些協作器可以處理向量和張量運算,并且有專門的記憶體技術來支援它們。