去年進博會期間,瑞薩發(fā)布了RA8系列芯片。瑞薩說這是行業(yè)內首款基于Arm Cortex-M85的MCU。當時瑞薩向我們詳細介紹了這顆MCU,著重強調借助于Arm Helium技術,RA8系列的DSP, AI/ML性能獲得大幅提升。eZ3esmc
原本《國際電子商情》4月刊封面故事相關智慧城市主題撰寫,我們采訪了瑞薩——其時撰寫計劃變更致采訪內容被擱置。最近筆者整理這份來自瑞薩的采訪問卷,發(fā)現瑞薩多番提到了智慧城市對于AI技術的需求。王均峰(瑞薩電子全球系統(tǒng)及解決方案事業(yè)部總監(jiān))列舉瑞薩有關智慧城市領域內的產品,涵蓋通信(如Wi-Fi)、模擬(電源管理等相關)、AI,當然還有瑞薩擅長的解決方案。eZ3esmc
AI戰(zhàn)略部分引起我們的關注,“我們2022年收購Reality AI,且與EdgeCortix建立戰(zhàn)略合作關系等,這是我們AI戰(zhàn)略執(zhí)行的體現。”王均峰表示,“我們推出性能達到6.49 CoreMark/MHz的基于Arm Cortex-M85處理器的MCU RA8,是我們對于邊緣AI在保證一定算力前提下對實時響應和超低功耗更高要求的反饋。”eZ3esmc
我們一直都很好奇,MCU作為一種對實時性有要求的控制器,是如何實現邊緣AI處理工作的。所以這篇文章,我們期望借著RA8來談談Arm Helium技術。這篇文章對于基于MCU做應用開發(fā)可能沒什么價值,因為Helium的技術實現這部分是工程師完全不需要關心的;但對于芯片技術愛好者而言可能會有收獲:一個聽起來簡單的加速技術,實則是設計層面多維度的考量。eZ3esmc
先談談RA8
首先還是從高層架構審視一下瑞薩RA8系列MCU。基于Arm Cortex-M85決定了RA8在MCU里面是屬于性能彪悍的那一波。此前我們采訪瑞薩時,瑞薩將Cortex-M85和Cortex-M7做了性能對比,對比參數涵蓋Arm v8.1-M內核架構,TrustZone支持,不同精度浮點數硬件支持及每周期數學性能提升,CoreMarks/MHz。eZ3esmc
eZ3esmc
來源:瑞薩電子eZ3esmc
當然還有對于Helium的支持。相較M7,M85最大的亮點應該是DSP/ML性能提升4倍,標量性能提升30%。eZ3esmc
具體到瑞薩RA8M1, 2MB Flash, 1MB SRAM資源也充足;通信接口包括以太網、USB、CAN-FD等主流外設,還有個Octal SPI,可接Octal Flash或HyperRAM。具體的功能安全、信息安全特性此處不再詳述,可見下圖。eZ3esmc
eZ3esmc
總體來看,這是個很多配置在向MPU靠攏,但開發(fā)更容易的產品。瑞薩此前告訴我們,有不少客戶都需要此類產品,因為市場上以前是沒有同類選擇的,以前“就只能選外置flash的MPU方案”,“RA8相當于填補了市場需求的空白。尤其近一年AI火了以后,終端AI的需求越來越強烈。”eZ3esmc
王均峰在解釋瑞薩對AI智慧城市的態(tài)度時,提到了技術層面更具體的兩個例子。其一是瑞薩對于Reality AI的收購;其二就是推出了RA8。有關前者,Reality AI提供嵌入式AI和TinyML解決方案,用于汽車、工業(yè)及消費類產品,“完美適配瑞薩嵌入式處理及物聯網產品”,“適用于小型MCU和強大MPU。”基于此,瑞薩也有了更全面的AI解決方案。eZ3esmc
有關RA8系列MCU,王均峰 用“具有里程碑式的意義” 形容,“標志著高性能微控制器領域的一次重要突破”。除了前文都已經提到的基于Cortex-M85,性能強,他還補充說:“RA8系列MCU針對圖形顯示和外設功能進行了優(yōu)化,能夠更好地滿足樓宇自動化、家用電器、智能家居等領域的需求,特別是在圖形顯示和語音/視覺多模態(tài)AI應用方面。”加上強調安全性,RA8的應用領域還包括消費電子、醫(yī)療設備等。eZ3esmc
Helium和Neon之間
在此前的采訪中我們就問過瑞薩,Arm Helium是否是指令級別實現,瑞薩的回答是不只是這樣,并且表示開發(fā)者和用戶并不需要關心這些——“現在的開發(fā)流程和以前不一樣了”。Arm官網解釋中提到,Helium是Arm Cortex-M系列產品的MVE(M-Profile Vector Extension)——一種新的矢量指令集擴展,是Armv8.1-M的可選項,主要是為了機器學習和DSP應用提供性能支持的。eZ3esmc
Cortex-M55和Cortex-M85是兩顆最早支持Helium的處理器,“讓小型、低功耗嵌入式系統(tǒng)能夠在諸多應用,如音頻設備、傳感器hub、關鍵詞識別、語音指令控制、功率電子、通信和靜態(tài)圖片處理等領域,解決計算挑戰(zhàn)。”eZ3esmc
Armv8.1-M架構白皮書中提到,Helium和Neon之間有諸多共同之處。對Cortex-A系列熟悉的同學對Neon應該不會陌生。但Arm強調Helium是在小型處理器內實現有效信號處理的全新設計,其中包含了不少新的架構特性,用以加強嵌入式使用場景中的計算性能,兼顧到面積和功耗——所以是“把Neon能力(Cortex-A的SIMD指令)帶到了M-Profile架構”。eZ3esmc
Helium和Neon同樣都是128-bit矢量size,用浮點單元的寄存器作為矢量寄存器,另外Helium和Neon都有對應的一些矢量處理指令。eZ3esmc
但兩者的差別在于,Helium在設計理念上主要考慮對現有硬件的最大化利用,用的矢量寄存器也少于Neon;Helium的某些操作會用上矢量寄存器和標量寄存器組中的寄存器;Helium支持的數據類型會更多;此外,Helium還支持諸如循環(huán)預測、通路預測(lane predication)、復雜數學和scatter-gather內存訪問。eZ3esmc
eZ3esmc
白皮書中列舉了Helium新增的一些指令和特性。比如說交錯(interleaving)和去交錯(de-interleaving)load/store指令;支持證書和浮點矢量復雜值處理的指令;eZ3esmc
還特別提到lane predication,對于矢量每條lane做條件執(zhí)行支持的MVE特性——為了達成這項特性,需要專門的寄存器(名為VPR)來保持每條lane的條件;還有大整數支持,引入了大整數處理指令;以及低開銷分支擴展,引入了低開銷循環(huán)和額外的分支指令等。eZ3esmc
Arm引入Helium的目標是期望用單顆處理器,取代過去部分開發(fā)者需要將專用DSP和Cortex-M處理器一起用的方案。這應該也是瑞薩所說填補市場空白的關鍵。因為這么做可以簡化軟件開發(fā),也降低了芯片設計的復雜性和成本。另外Cortex-M處理器具備了高度通用性,執(zhí)行某些通用非DSP負載還是比很多老的DSP更快。eZ3esmc
應該說Helium技術,以及RA8這樣的產品,在嵌入式領域就開發(fā)者角度來看是具備了相當吸引力的。eZ3esmc
關鍵特性:beatwise
了解到這個程度還是不夠的,我們更想搞清楚,Helium在更具體的處理器架構上有哪些變化。Arm工程師在Arm社區(qū)更新過系列文章專門談Helium技術的,起始篇章就是,如果說要提升DSP和ML性能,為什么不直接給Cortex-M加個Neon?其關鍵還是在于具體實施方案上,Helium和Neon的差異。eZ3esmc
要有出色的DSP數字信號處理性能,有相當一部分工作應該是喂足夠的數據。所以Cortex-A處理器直接從數據cache里拉128bit Neon負載就會顯得游刃有余。但Cortex-M不同,cache資源少,主存追求低延遲——將SRAM路徑擴展到128bit對于很多系統(tǒng)而言首先就是不可接受的。另外,MAC指令所需的乘法器占用的芯片面積不小,要在面積敏感的Cortex-M處理器上做4x 32bit乘法器相當的不靠譜。eZ3esmc
這些都決定了Helium的設計必須是對資源的物盡其用,把資源用在刀刃上,尤其存儲、乘法之類的用了就要保證每周期執(zhí)行的高效。像Cortex-M7的方案是,通過雙發(fā)射矢量負載(矢量MAC)來確保資源占用;但Helium的目標是要在不同的性能水平上增加DSP性能,而不僅僅是面向M7這樣的高端處理器。所以Arm想到了古早的一些技術。eZ3esmc
eZ3esmc
上面這張圖展示了VLDR矢量加載和VMLA矢量MAC指令執(zhí)行序列要超過4個時鐘周期,還要求通向存儲128bit位寬的通路,4個MAC block,其中有倆一半時間還是閑置的。這張圖中,每條128bit寬度的指令切成了4等分,MVE架構稱其為beat。這些beats總是做32bit計算,可以是1 x32-bit MAC,也可以是4 x8bit MAC。eZ3esmc
eZ3esmc
考慮到load和MAC執(zhí)行單元是分開的,這些beats的執(zhí)行過程其實是可以重疊的。在C, D beat執(zhí)行VLDR的時候,A, B就可以執(zhí)行VMLA。如此一來性能就能達到128bit數據通路處理器的水平,但卻只需要一半的硬件資源。eZ3esmc
基于這種叫做“beatwise”的執(zhí)行概念,32bit數據路徑的處理器,也能處理上述相同指令。Arm的說法是如此實現了單發(fā)射標量處理器的性能翻番(8個周期以8 x32bit值加載和執(zhí)行MAC),卻完全不需要考慮雙發(fā)射標量指令的面積和功耗懲罰問題。MVE支持最多每周期4個beat實施方案,在某些情況下這種beatwise的執(zhí)行方式就類似于傳統(tǒng)的SIMD。eZ3esmc
不過beatwise執(zhí)行也誕生了一些問題,比如說多個部分執(zhí)行的指令同時進行,打斷和錯誤處理就會很復雜;再比如如果一個指令跨beat,則仍然需要考慮空閑時間或者stall等待的問題;另外要確保執(zhí)行上的重疊,對應的每條指令都應當操作128bit數據...這些挑戰(zhàn)都需要在設計時做考量。具體的受限于篇幅,就不多做解釋了。eZ3esmc
但總的來說,這種beatwise執(zhí)行方案,是MVE達成PPA平衡的基礎。eZ3esmc
配合beatwise的其他特性
有關Helium還有幾個配套關鍵技術是值得一談的。比如前面提到每條指令應當盡可能操作等長數據:DSP處理是需要面向不同的數據格式的。就像圖像數據,一般是以交錯的紅、綠、藍,外加alpha通道像素值做存儲的。eZ3esmc
為了對計算做矢量化,需要讓所有的紅色像素為一個矢量,所有綠色像素為另一個矢量等等…在Neon結構里,VLD4/VST4指令是用于執(zhí)行這類轉換的。還有像是VST2指令,用于交錯立體聲音頻的左右兩個通道。這類指令支持8-32bit的不同尺寸。eZ3esmc
前面我們提到了MVE的beatwise執(zhí)行,是讓存儲和ALU操作重疊進行。為了確保這種重疊,每條指令都應該操作128bit數據。此時VST4這樣的指令store數據位數過多,會讓ALU長時間處在空閑狀態(tài)。eZ3esmc
MVE的方案是將store再切分成塊,與ALU操作達成平衡,每個塊都僅存儲128bit數據。512bit的store,也就是4-way交錯,MVE有4條指令VST40, VST41, VST42, VST43。eZ3esmc
不過這么做還是會帶來一些問題:比如說這4條指令存儲不同的通道,對8bit像素數據而言意味著每條指令可能存儲了非連續(xù)的數據,這樣的訪問模式對于存儲子系統(tǒng)而言會很悲劇。以及和其他矢量指令合作,寄存器堆port需要設定為訪問行,而不是列等。Arm在blog文章里具體探討了此類問題的解決方案。eZ3esmc
eZ3esmc
此外,數據訪問和存儲也是Helium技術關注的重點之一。畢竟在beatwise大前提下,4-beat矢量架構需要考慮如何處理數據load為矢量及存儲操作。所以要進行“連續(xù)load”操作,針對每個beat,從標量寄存器中指定的base地址開始,連續(xù)訪問內存。無論目標數據類型如何,這都將有效利用總線帶寬。eZ3esmc
有關數據存取,Helium引入了所謂的size變化內存操作(size-changing memory operations):數據可存儲為面向每個beat的8, 16或32bit單次訪問,基于置0或者符號擴展來達到預期的數據類型。而對于store,數據也可以縮減到預期的size。配套的load和store指令覆蓋了比較豐富的尋址模式,特性方面涵蓋pre或者post-incrementing和指針回寫支持,在絕大部分情況下也就不需要進行單獨的指針操作。eZ3esmc
最后設計上還考慮并行度瓶頸問題。Arm在blog中列舉了內存復制代碼的一個例子:具體是循環(huán)迭代次數遞減,循環(huán)過程中,條件分支回到循環(huán)開頭占到了指令的50%。許多小型Cortex-M處理器是沒有分支預測器的,受制于分支懲罰,runtime開銷實際上就超過了這50%。Helium也考量了對應的解決方案——和Armv8.1-M引入低開銷循環(huán)和新增條件指令應該有關,相關因素在代碼層面比較具體,包括各類方法的利弊,有興趣的同學還是建議去讀一讀Arm的blog。eZ3esmc
本文最后再給出瑞薩就應用層面的一些信息。畢竟從芯片設計企業(yè)的角度,還是更能看出技術效果的。瑞薩在去年4月的兩篇blog中,給出了有關Cortex-M85和Helium-MVE的闡釋和實測。eZ3esmc
瑞薩也認為Helium是用于替代低端到中端DSP核心的方案,“8個128bit矢量寄存器,針對不同的應用支持廣泛的矢量數據類型”,“特性諸如重疊的pipeline,加強的分支預測,和循環(huán)優(yōu)化,都為性能提升有助益”,“加強的存儲訪問指令和復雜值處理支持,令Helium成為Cortex-M85的強有力擴展。”eZ3esmc
eZ3esmc
這段話基本也總結了我們整篇文章提到的有關Helium的關鍵特性。瑞薩在blog中列舉了兩個demo——這里我們談其中的一個,進博會上瑞薩展示過:人物識別AI套件,基于RA8D1:展示的是檢測攝像頭拍到的人,據說檢測距離能達到20米,支持180°攝像頭,各種光線和環(huán)境下都沒問題。eZ3esmc
這個demo是瑞薩和PlumerAI合作完成的。演示基于TinyML模型——當時瑞薩的現場工作人員告訴我們,模型訓練超過3200萬張圖片。要知道這個演示完全沒有用到任何的加速器,單憑藉MCU完成。這就屬于典型的低成本、低功耗AI解決方案了。eZ3esmc
eZ3esmc
上面這張圖是瑞薩給出Cortex-M85與其他Cortex-M核的性能比較,柱狀圖中的藍色柱子表示用PlumerAI的推理引擎來跑,紅色表示用TensorFlow Lite for Microcontrollers來跑。另外最右邊的兩列CM85,分別表示啟用Helium MVE和不用Helium MVE。M85相比M7,此處性能差距最大有3.37倍。更快的推理速度,自然意味著CPU可以更早回到睡眠模式,實現總體的低能耗。eZ3esmc
當然在嵌入式應用中,若有更高AI性能需求,王均峰也談到還是可以用AI加速器配合MCU使用,瑞薩也提供AI SDK,其中有各種常見AI算法和工具。不過Helium技術,及RA8系列MCU的出現,的確還是為嵌入式應用提供了更多的可能性;也是現如今我們談AI everywhere的實現組成部分之一。eZ3esmc
責編:Elaine