<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Arm Helium技術誕生的由來 為何不直接采用Neon?

瑞薩MCU小百科 ? 來源:Arm社區 ? 2024-02-29 17:01 ? 次閱讀

經過 Arm 研究團隊多年的不懈努力,Arm 于 2019 年推出了適用于 Armv8?M 架構的 Arm Cortex-M 矢量擴展技術 (MVE)——Arm Helium 技術。起初,當我們面臨 Cortex?M 處理器數字信號處理 (DSP) 性能亟待提升的需求時,我們首先想到的是采用現有的 Neon 技術。

然而,面對典型的 Cortex?M 應用的面積限制條件下又需要支持多個性能的需求,意味著我們仍需從頭開始。作為一種較輕的惰性氣體,以氦氣 (Helium) 作為研究項目的名稱似乎再合適不過了。該研究項目主要針對中端處理器,旨在實現數據路徑寬度增加兩倍的情況下將性能提高四倍,而這正與氦氣的原子量 (4) 和原子序數 (2) 不謀而合。

最終,在許多數字信號處理 (DSP) 和機器學習 (ML) 內核上,我們成功地實現了提升四倍的目標。毋庸置疑,“Helium” 已經深入人心,成為 Cortex-M 處理器系列 MVE 的品牌名。

要想打造具備良好 DSP 性能的處理器,主要關鍵在于可為其提供足夠的數據處理帶寬。在 Cortex?A 處理器上,128 位 Neon 負載可以輕松地從數據緩存中直接提取。

但是,Cortex?M 處理器通常沒有緩存,而是使用低延遲靜態隨機存取存儲器 (SRAM) 作為主內存。對于許多系統來說,無法將 SRAM 路徑(通常只有 32 位)拓寬到 128 位,因此導致面臨內存操作停滯長達四個周期的可能性。同樣,乘加 (MAC) 指令中使用的乘法器需要很大的面積,在小型 Cortex?M 處理器上使用四個 32 位乘法器是不切實際的。

就面積限制層面而言,最小的 Cortex-M 處理器與能夠亂序執行指令且功能強大的 Cortex?A 處理器的大小可能相差幾個數量級。因此,在創建 M 系列架構時,我們必須認真考慮充分利用每一個 gate。

為了充分利用現有硬件,我們需要確保高成本資源(如通往內存的連接和乘法器)在每個周期都保持同時繁忙的狀態。在高性能處理器(如 Cortex?M7)上,可以通過矢量 MAC 雙發射來達成這一目標。

此外,還有一個重要的目標,即在一系列不同的產品上提高 DSP 性能,而不僅局限于高端產品上。想要解決以上這些問題,需要借鑒參考幾十年前的矢量鏈理念中的一些技術。

44d96f8c-d6ba-11ee-a297-92fbcf53809c.png

上圖顯示了在四個時鐘周期內交替執行的矢量負載 (VLDR) 和矢量 MAC (VMLA) 指令序列。這需要 128 位寬的內存帶寬和四個 MAC 塊,并且它們有一半時間處于空閑狀態??梢钥吹?,每條 128 位寬的指令被分成大小相等的四個片段,MVE 架構稱之為“節拍”(標為 A 至 D)。無論元素大小如何,這些節拍始終是 32 位計算值,因此一個節拍可以包含一個 32 位 MAC,或四個 8 位 MAC。由于負載和 MAC 硬件是分開的,這些節拍的執行可以重疊,如下圖所示。

44eae46a-d6ba-11ee-a297-92fbcf53809c.png

即使 VLDR 加載的值被隨后的 VMLA 使用,指令仍可以重疊。這是因為 VMLA 的節拍 A 只依賴于上一個周期發生的 VLDR 的節拍 A,因此節拍 A 和 B 與節拍 C 和 D 便會自然重疊。在這個例子中,我們可以獲得與 128 位數據帶寬處理器相同的性能,但硬件數量只有后者的一半?!肮澟氖健眻绦械母拍羁梢愿咝У貙嵤┒鄠€性能點。例如,下圖顯示了只有 32 位數據帶寬的處理器如何處理相同的指令。這一點充滿吸引力,因為它能使單發射標量處理器的性能翻倍(在八個周期內對八個 32 位值加載和執行 MAC),但卻沒有雙發射標量指令那樣的面積和功耗需求。

44fdfff0-d6ba-11ee-a297-92fbcf53809c.png

MVE 支持擴展到每周期四拍的實現方式,此時節拍式執行將簡化為更傳統的 SIMD 方法。這有助于在高性能處理器上保持可控的實現復雜度。

節拍式執行聽起來很不錯,但也會給架構的其他部分帶來一些值得關注的挑戰。

由于多條部分執行的指令可以同時運行,因此中斷和故障處理可能會變得相當復雜。例如,如果上圖中 VLDR 的節拍 D 出現故障,通常情況下,實施必須回滾 VMLA 的節拍 A 在上一周期對寄存器文件的寫入。我們的理念是讓每個 gate 都物盡其用,而在回滾的情況下緩沖舊數據值與這一理念相悖。

為了避免這種情況,處理器會針對異常情況存儲一個特殊的 ECI 值,用于指示已經執行了后續指令的哪些節拍。在異常返回時,處理器便以此來確定要跳過哪些節拍。能夠快速跳出指令而無需回滾或等待指令完成,基于此保持 Cortex-M 具備的快速和確定性中斷處理能力。

如果指令會跨越節拍邊界,我們又會遇到時間跨越問題。這種交叉行為通常出現在拓寬/縮窄運算中。Neon 架構中的 VMLAL 指令就是一個典型的例子,它可以將 32 位值矢量乘加到 64 位累加器中。遺憾的是,為了保持乘法器輸出的完整范圍,通常需要進行這類拓寬運算。MVE 使用通用的 “R” 寄存器文件來處理累加器,從而解決了這一問題。

此外,這樣還減少了對矢量寄存器的寄存壓力,使 MVE 只需使用 Neon 架構中一半的矢量寄存器就能獲得良好的性能。在矢量架構中,通常不會像 MVE 一樣廣泛使用通用的寄存器文件,因為寄存器文件往往與矢量單元相距甚遠。在亂序執行指令的高性能處理器上尤為如此,因為物理距離過大會限制性能。不過,正因如此,我們恰恰能夠將典型 Cortex?M 處理器的較小規模特性轉化為我們的優勢。

為確保重疊執行達到良好的平衡且無停滯,每條指令都應嚴格描述 128 位的工作,不能多也不能少。由此也會帶來一些挑戰。

憑借研究員們辛勤不懈的努力,以及充分參考架構書籍中所涉的所有內容,MVE 成功地將一些非??量痰墓?、面積和中斷延遲限制轉化為優勢。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    18512

    瀏覽量

    223331
  • 寄存器
    +關注

    關注

    30

    文章

    5141

    瀏覽量

    118055
  • sram
    +關注

    關注

    6

    文章

    749

    瀏覽量

    114013
  • 數字信號處理

    關注

    15

    文章

    522

    瀏覽量

    45363
  • 乘法器
    +關注

    關注

    8

    文章

    193

    瀏覽量

    36634

原文標題:Helium技術講堂 | 為何不直接采用Neon?

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RA8 Cortex-M85 Helium入門指南(2)

    這里介紹的是Helium的匯編語言指令集,雖然大部分程序員不會直接使用這些指令,而是通過C語言或者高級語言編程實現
    的頭像 發表于 05-15 14:31 ?691次閱讀
    RA8 Cortex-M85 <b class='flag-5'>Helium</b>入門指南(2)

    Arm Cortex-M52的主要特性和規格

    Arm Cortex-M52是一款采Arm Helium 技術的新型微控制器內核,旨在將AI功能引入更小、成本更低的物聯網設備,而不是基于Arm
    的頭像 發表于 01-02 11:12 ?692次閱讀
    <b class='flag-5'>Arm</b> Cortex-M52的主要特性和規格

    Arm Helium技術誕生由來

    當人工智能 (AI) 下沉到各式各樣的應用當中,作為市場上最大量的物聯網設備也將被賦予智能性。Arm Helium 技術正是為基于 Arm Cortex-M 處理器的設備帶來關鍵機器學
    的頭像 發表于 12-22 14:36 ?581次閱讀
    <b class='flag-5'>Arm</b> <b class='flag-5'>Helium</b><b class='flag-5'>技術</b><b class='flag-5'>誕生</b>的<b class='flag-5'>由來</b>

    ARM NEON在矩陣&amp;向量計算中的加速概述

    NEONARM上使用的一種SIMD(Single Instruction Multiple Data – 單指令多數據)指令集。
    的頭像 發表于 12-01 10:37 ?1014次閱讀
    <b class='flag-5'>ARM</b> <b class='flag-5'>NEON</b>在矩陣&amp;向量計算中的加速概述

    Helium 是什么?優缺點有哪些?

    1. Helium 是什么? Helium 是一款 Web 端自動化開源框架,全稱是:Selenium-Python-Helium,從名字上就可以看出,Helium 似乎和 Selen
    的頭像 發表于 11-02 10:43 ?1183次閱讀
    <b class='flag-5'>Helium</b> 是什么?優缺點有哪些?

    漏極開路為何不在設計芯片的時候就直接把上拉電阻集成在里面?

    為何不在設計芯片的時候就直接把上拉電阻集成在里面,而是在實際使用時接在外面
    發表于 10-17 06:49

    什么是Arm Helium矢量處理技術?

    ArmArm Cortex-M 處理器帶來增強機器學習 (ML) 和數字信號處理 (DSP) 能力的技術 —— Arm? Helium
    發表于 09-26 14:28 ?1182次閱讀

    如何將Arm Neon C#內部函數與Unity Burst編譯器一起使用

    本指南解釋了如何將Arm Neon C#內部函數與Unity Burst編譯器一起使用,以提高Unity Android應用程序的性能。 在本指南結束時,您將了解到: ?單指令多數據(SIMD)指令
    發表于 08-10 07:11

    Arm Neon技術指南

    本指南介紹了Arm Neon技術,即用于執行Armv8-A或Armv8-R結構剖面的高級 SIMD(單一指示多數據)架構擴展,Neon技術
    發表于 08-08 06:13

    如何使用Arm Compiler 6自動矢量化功能為Neon編譯

    作為一名程序員,你可以通過多種方式使用Neon技術: ?霓虹燈支持的開源庫,如Arm計算庫提供了一個最簡單的利用Neon的方法。 ?編譯器中的自動向量化功能可以自動優化您的代碼
    發表于 08-02 19:31

    使用GNU和ARM RealView?編譯工具生成NEON代碼的不同方法

    NEON技術在實現高級SIMD架構擴展的ARM處理器中提供單指令多數據(SIMD)操作。這些操作可以顯著加快對大型數據集的重復操作。這在諸如媒體編解碼器之類的應用中是有用的。 許多使用該技術
    發表于 08-02 16:00

    ARM Cortex-A5 NEON媒體處理引擎技術參考手冊

    Cortex-A5NEON MPE擴展了Cortex-A5功能,為ARM v7 Advanced SIMD v2和Vector Floating Point v4(VFPv4)指令集提供支持
    發表于 08-02 09:58

    Arm Helium技術手冊

    本指南介紹了Arm Helium技術,這是m -剖面矢量擴展(MVE)Arm Cortex-M系列處理器。Arm Cortex-M55處理器
    發表于 08-02 08:27

    如何使用Neon intrinsic的矢量處理代碼遷移到氦intrinsic

    加載和存儲。氦氣不支持此功能。?NeonHelium提供了不同的數據擴展和縮小方案。由于這些差異,沒有簡單的方法可以自動將Neon內部代碼直接轉換為
    發表于 08-02 07:39

    使用Helium網絡的冷鏈物流監控

    電子發燒友網站提供《使用Helium網絡的冷鏈物流監控.zip》資料免費下載
    發表于 06-16 10:05 ?0次下載
    使用<b class='flag-5'>Helium</b>網絡的冷鏈物流監控
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>