chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內不再提示

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

瑞薩嵌入式小百科 ? 來源:瑞薩嵌入式小百科 ? 2024-05-15 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Helium指令集

這里介紹的是Helium的匯編語言指令集,雖然大部分程序員不會直接使用這些指令,而是通過C語言或者高級語言編程實現,但是了解匯編語言指令集,可以有如下收獲:

在優(yōu)化C代碼時,為了確定其是否被充分地矢量化,能夠審視編譯器的輸出以及熟悉指令集是非常有幫助的。

當調試不能正常工作的代碼時,通過閱讀反匯編代碼去理解每一行發(fā)生了什么,對于尋找代碼的問題是非常有用的。

了解指令集可能有助于編寫高效的代碼,甚至節(jié)省功耗,尤其是在使用原語函數的情況下。

Helium指令結構和其他Cortex-M處理器中的VFP(浮點)指令結構是相似的。

Helium指令格式如下:

abc3fc8e-1284-11ef-a297-92fbcf53809c.png

Helium指令都是以字母V開始的,然后跟著如下符號,符合中的{}是可選的,<>是必須出現的:

mod:指令修飾符,可能沒有,也可能是Q(saturating)飽和,H(halving)減半,D(doubling)加倍,R(rounding)四舍五入中的一個。

op:具體操作,例如ADD(相加),SUB(相減),CMP(比較)等。

shape:有些指令中,可以選擇性的指定L(long)或N(narrow),這是 “形態(tài)” 相關的修飾符。

- L:Long表示輸入元素在操作前會被擴寬。1個8位的元素可能會被擴寬為16位或32位,或者1個16位元素被擴寬為32位。

- N:Narrow表示輸入元素在操作前會被壓縮。

extra:有些指令中的特定修飾符,可能是T(top),B(bottom),A(accumulate),X(exchange)或者V(across)中的一個。

cond:此處指定的條件僅適用于VPT(Predication)模塊??赡苁荰(Then)或者E(Else)。

.dt:數據類型,可能是F(float)浮點,I(integer)整數,S(signed)有符號,U(unsigned)無符號。

dst:目標寄存器,可以是通用寄存器(R)或者矢量寄存器(Q)。

src:源寄存器,可以是通用寄存器(R)或者矢量寄存器(Q)。

rot:旋轉,用于一些操作復數的指令。

下面給出一條指令示例展示:

VLDRW.U32 Q0, [R0]

abef041a-1284-11ef-a297-92fbcf53809c.png

該指令中的首字母是V,表示這是一條Helium(或是Neon,或者浮點)指令,LDR表示寄存器從內存加載內容,W表示按字大小操作,,,都為空,數據類型是U32,無符號32位整數。加載的目標是128位寄存器Q0(矢量寄存器),源是標量寄存器R0指向的內存地址。該指令表示將從R0存儲的地址中加載4個32位寬的數據到Q0寄存器中。

Helium指令分類如下:

ac12e772-1284-11ef-a297-92fbcf53809c.png

Helium編程方式

Helium編程方式目前來說,一共4種。

矢量庫

自動矢量化

原語函數(intrinsics)編程

匯編指令編程

矢量庫

目前,ARM CMSIS DSP和NN是已經對Helium優(yōu)化好的Helium矢量庫。使用矢量庫來進行Helium編程,是最簡單的方法。

CMSIS DSP是數字信號處理函數庫,具有針對8位整數,16位整數,32位整數和32位浮點數的不同函數,提供了豐富的函數,包括基本數學函數,復數數學函數,濾波器函數,變換函數,矩陣操作函數,電機控制函數,插值函數,統(tǒng)計函數等。該庫包含了這些函數的Helium優(yōu)化版本,并不斷更新迭代中。

CMSIS NN是神經網絡函數庫,以最小的內存開銷針對Cortex-M處理器優(yōu)化的軟件內核,同樣地,這些函數也可以利用Helium得到最優(yōu)性能。

CMSIS矢量庫中的函數代碼有3個C預處理器定義來選擇Helium版本。

#define ARM_MATH_HELIUM
#define ARM_MATH_MVEI    //支持整型Helium
#define ARM_MATH_MVEF    //支持浮點型Helium

比如CMSIS DSP中的 arm_clip_f32函數,可以看到該函數已經使用了Helium原語函數。

ac23090e-1284-11ef-a297-92fbcf53809c.png

比如CMSIS NN中的arm_nn_lstm_update_cell_state_s16函數,可以看到該函數使用了Helium原語函數。

ac6828fe-1284-11ef-a297-92fbcf53809c.png

當使用矢量庫的時候,不同編譯器中的MVE設置

Keil MDK 5(5.38以上版本)

在圖標acc11d7e-1284-11ef-a297-92fbcf53809c.png“Options for target”中選擇“Target”頁面中的“Vector Extensions”,通過下拉列表選擇

“Not Used”(不使用helium,即宏ARM_MATH_HELIUM沒有被定義,使用標量相關函數)。

“Integer”(宏ARM_MATH_HELIUM和ARM_MATH_MVEI被定義,使用整型Helium)。

“Integer + Floating Point” (宏ARM_MATH_HELIUM,ARM_MATH_MVEI和ARM_MATH_MVEF被定義,使用整型和浮點型Helium)。

ace0969a-1284-11ef-a297-92fbcf53809c.png

IAR EWARM(v9.40.1以上版本)

通過右鍵選擇項目名稱后,在 “Options”中的“General Options”頁面下的“32-bit”中的“Advanced SIMD(NEON/HELIUM)”。

勾選(即選中,ARM_MATH_HELIUM,ARM_MATH_MVEI和ARM_MATH_MVEF被定義,使用整型和浮點型Helium)。

不勾選(即不選中),編譯的時候會報“MVE support not enable”錯誤。

e2 studio

e2 studio中可以使用LLVM或者GCC工具鏈,在使用矢量庫的時候,不需要設置,默認是啟用的。如果通過設置編譯參數來禁用,編譯的時候會報“MVE support not enable”錯誤。

自動矢量化

自動矢量化就是編譯器在C/C++代碼中自動檢測到可以使用Helium指令并執(zhí)行優(yōu)化的過程。優(yōu)化后的代碼在速度和尺寸方面可能與手工優(yōu)化的匯編代碼或包含原語函數的C代碼一樣高效,這只需要很少的時間去編寫和調試代碼,而且無須對目標微架構有詳細了解。C代碼也更有可移植性。

如下面的代碼,這是一種很常見的普通寫法,一個for循環(huán)里面做一些邏輯判斷處理。

ad3d3968-1284-11ef-a297-92fbcf53809c.png

點擊可查看大圖

通過使用自動矢量化后的反匯編代碼如下,紅色框部分的代碼里面已經出現了Helium的匯編指令。

ad4d4aec-1284-11ef-a297-92fbcf53809c.png

自動矢量化和編譯器的優(yōu)化等級設置有關,當Arm Complier 6和LLVM編譯器的優(yōu)化等級為-O2或者更高時,自動矢量化默認使能,在MDK ArmComplier 6中可以使用“-fno-vectorize”選項可以禁止自動矢量化。當優(yōu)化等級為-O1時,自動矢量化默認禁止,使用“-fvectorize”選項可以使能自動矢量化,當優(yōu)化等級為-O0時,自動矢量化總是被禁止。其他編譯器的行為可能不同,具體可以查閱對應的文檔。

原語函數(intrinsics)編程

原語函數是允許利用Helium而不必直接編寫匯編代碼的一組C/C++函數。ACLE文檔中包括Helium原語規(guī)范。目前最新的文檔為mve-2021Q4。原語函數的實現包含在arm_mve.h文件中。函數包含簡短的匯編語言部分,它們被內聯(lián)到調用的代碼中。

使用原語函數有如下優(yōu)點:

程序員能夠直接訪問Helium指令集,這允許編寫充分優(yōu)化的代碼,利用所有Helium特性。

C/C++可用于大多數代碼,只有當需要優(yōu)化而矢量化C編譯器無法執(zhí)行優(yōu)化時,才會使用Helium原語。這就意味著只有在必要時才使用底層代碼。

相比于采用匯編語言編寫的代碼,含有Helium原語的C和C++代碼可以移植到一個新的平臺,僅需要少量修改,甚至無須修改。

使用原語避免了很多與直接使用匯編語言編碼相關的難點。

原語函數中,Helium矢量數據類型名字模式如下所示,這在“arm_mve.h”中有詳細定義和描述。

x_t

type:元素類型,可能是int整形,uint無符號整形,float浮點。

size:元素大小,可能是8位,16位,32位。

number_of_lanes:通道總數??梢允?6通道,8通道,或者4通道。

如:

uint8x16_t是一個描述16個無符號8位的矢量。

int16x8_t是一個描述8個16位的矢量。

float16x8_t是一個描述4個16位浮點數(半精度)的矢量。

float32x4_t是一個描述4個32位浮點數(單精度)的矢量。

注:Helium是128位寄存器,它的元素大小和通道總數相乘的結果只能是128,不能是64,也就是說,不支持int8x8_t/uint8x8_t/int16x4_t/uint16x4_t/float16x4_t/float32x2_t數據類型。這點和Neon是不同的。Neno可以支持64和128。

Helium矢量數組結構體類型如下:

xx_t

可以發(fā)現,矢量數組結構體名字只比單個矢量數據類型多了一個length_of_array。它表示一共有幾個helium寄存器組成,即helium寄存器的數量。在該結構體中,包含一個名為val的元素,此結構體類型映射Helium加載和存儲操作訪問的寄存器,Helium可以用一條指令加載/存儲多達4個寄存器。結構定義示例如下:

struct int16x8x2_t

{

int16x8_t val[2];

};

此結構類型僅由加載、存儲、轉置、交織和去交織指令使用;要對實際數據執(zhí)行操作,請從各個寄存器中選擇元素。如:.val[0] 和.val[1]。

下圖代碼片段是使用原語函數進行矢量相乘的例子。

ad734c92-1284-11ef-a297-92fbcf53809c.png

原語編程里面還涉及原語預測,原語尾部處理等知識,本處不在展開說明,詳細信息可以訪問arm官網查閱相關文檔了解和學習。

匯編語言編程

在匯編代碼中直接編寫Helium指令是很沒有必要的,通常只會在特殊的場景下才會這樣做。即當編程人員可以比編譯器更好地分配寄存器時,比如有太多重寫變量和輸入輸出變量。

下圖所示為復數矢量點積的匯編語言代碼。

ada6b50a-1284-11ef-a297-92fbcf53809c.png


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

    關注

    68

    文章

    20142

    瀏覽量

    246618
  • 電機控制
    +關注

    關注

    3593

    文章

    2053

    瀏覽量

    274954
  • C語言
    +關注

    關注

    183

    文章

    7642

    瀏覽量

    144524
  • LDR
    LDR
    +關注

    關注

    0

    文章

    100

    瀏覽量

    8132
  • Cortex-M85
    +關注

    關注

    0

    文章

    15

    瀏覽量

    777
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RA8 Cortex-M85 Helium技術入門指南(1)

    瑞薩電子在2023年10月底推出強大的RA8系列MCU,具備突破性的3000 CoreMark,并可滿足客戶應用所需的完全確定性、低延遲及實時操作要求。
    的頭像 發(fā)表于 05-14 14:30 ?2661次閱讀
    <b class='flag-5'>RA8</b> <b class='flag-5'>Cortex-M85</b> <b class='flag-5'>Helium</b>技術<b class='flag-5'>入門</b><b class='flag-5'>指南</b>(1)

    瑞薩RA8快速上手指南Cortex-M85內核瑞薩RA8開發(fā)環(huán)境搭建 并點亮一個LED

    因為Cortex-M內核,瑞薩RA8系列單片機支持多種市面上常見的開發(fā)環(huán)境,像Keil MDK、IAR EWARM等,而本文講述的是瑞薩自家官方的IDE(e2 studio)。
    的頭像 發(fā)表于 03-17 14:35 ?1540次閱讀
    瑞薩<b class='flag-5'>RA8</b>快速上手<b class='flag-5'>指南</b>:<b class='flag-5'>Cortex-M85</b>內核瑞薩<b class='flag-5'>RA8</b>開發(fā)環(huán)境搭建 并點亮一個LED

    瑞薩電子RA8M2 MCU的架構解析與應用場景

    隨著嵌入式系統(tǒng)對性能、安全性與連接能力的要求不斷提升,傳統(tǒng)單核MCU已難以滿足新一代工業(yè)與智能應用的需求。Arm Cortex-M85 RA8系列于2025年10月推出RA8M2RA8D2
    的頭像 發(fā)表于 10-31 15:32 ?4671次閱讀

    瑞薩推出全新RA8入門級MCU產品群, 提供極具性價比的高性能Arm Cortex-M85處理器

    :6723)今日宣布,推出RA8E1和RA8E2微控制器(MCU)產品群,進一步擴展其業(yè)界卓越和廣受歡迎的MCU系列。2023年推出的RA8系列MCU是首批采用Arm? Cortex?
    發(fā)表于 11-07 15:51 ?880次閱讀

    Arm Cortex-M處理器—Cortex-M85介紹

    Arm發(fā)布了新一代的Cortex-M處理器,Cortex-M85。簡單粗暴的打個比方:Cortex-M85Cortex-M7TrustZoneHelium(
    發(fā)表于 07-15 14:59

    IAR為瑞薩RA8系列MCU開發(fā)提供支持

    嵌入式開發(fā)軟件和服務的全球領導者IAR今日宣布,其最新發(fā)布的IAR Embedded Workbench for Arm 9.40.2版本中無縫集成了對瑞薩(Renesas)RA8系列MCU的支持,為基于Arm Cortex-M85R
    的頭像 發(fā)表于 11-02 17:08 ?1642次閱讀

    業(yè)界首款基于Arm Cortex-M85的超高性能MCU

    瑞薩電子重磅發(fā)布了業(yè)界首款基于Arm Cortex-M85處理器的全新超高性能MCU:RA8M1系列微處理器。 RA8系列產品具備業(yè)界卓越的6.39 CoreMark/MHz測試分數,縮小了MCU與MPU之間的性能差距。
    發(fā)表于 11-10 09:44 ?1161次閱讀

    瑞薩電子推出全新RA MCU家族產品RA8

    瑞薩電子推出的全新RA MCU家族產品RA8,是業(yè)界首款搭載Arm Cortex-M85內核超高性能MCU,可滿足工業(yè)自動化、家電、智能家居、消費電子、樓宇/家庭自動化、醫(yī)療和AI領域的各種計算密集型應用。
    的頭像 發(fā)表于 12-20 12:25 ?1939次閱讀
    瑞薩電子推出全新<b class='flag-5'>RA</b> MCU家族產品<b class='flag-5'>RA8</b>

    瑞薩電子發(fā)布業(yè)界首款基于Cortex-M85處理器的全新超高性能MCU

    去年10月,瑞薩電子重磅發(fā)布了業(yè)界首款基于Cortex-M85處理器的全新超高性能MCU:RA8M1系列微處理器。 今年,瑞薩將舉辦RA8巡回技術研討會。
    的頭像 發(fā)表于 02-26 10:27 ?1189次閱讀
    瑞薩電子發(fā)布業(yè)界首款基于<b class='flag-5'>Cortex-M85</b>處理器的全新超高性能MCU

    Cortex-M85內核單片機如何快速上手

    2022年4月,Arm推出了全新的MCU級內核Cortex-M85。截止目前(2024年2月),Cortex-M85是最新、最強的Cortex-M內核。
    發(fā)表于 02-29 09:35 ?1637次閱讀
    <b class='flag-5'>Cortex-M85</b>內核單片機如何快速上手

    業(yè)界首款基于Arm Cortex-M85處理器的MCU

    所有RA8系列MCU均利用Arm Cortex-M85處理器和Arm的Helium技術所帶來的高性能,結合矢量/SIMD指令集擴展,能夠在數字信號處理器(DSP)和機器學習(ML)的實施方面獲得相比
    發(fā)表于 03-05 14:14 ?1490次閱讀
    業(yè)界首款基于Arm <b class='flag-5'>Cortex-M85</b>處理器的MCU

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

    我們將通過一個RGBA圖像數據中的R(紅色),G(綠色),B(藍色)3種色彩通道數據分離的例子,介紹使用helium原語函數的解交織(deinterleaving)功能。
    的頭像 發(fā)表于 05-16 14:33 ?1551次閱讀
    <b class='flag-5'>RA8</b> <b class='flag-5'>Cortex-M85</b> <b class='flag-5'>Helium</b><b class='flag-5'>入門</b><b class='flag-5'>指南</b>(3)

    瑞薩電子全新RA8系列MCU產品介紹

    Arm Cortex-M85 RA8系列于2024年11月推出RA8E1和RA8E2兩款新產品。這兩款新產品已正式量產上市,將高算力的RA8
    的頭像 發(fā)表于 11-09 17:04 ?2124次閱讀
    瑞薩電子全新<b class='flag-5'>RA8</b>系列MCU產品介紹

    瑞薩電子RA8E1和RA8E2 MCU新品解讀

    Arm Cortex-M85 RA8系列于2024年11月推出RA8E1和RA8E2兩款新產品。這兩款新產品已正式量產上市,將高算力的RA8
    的頭像 發(fā)表于 12-09 10:35 ?1641次閱讀
    瑞薩電子<b class='flag-5'>RA8</b>E1和<b class='flag-5'>RA8E2</b> MCU新品解讀

    瑞薩RA8系列教程 | 瑞薩 RA8 開發(fā)環(huán)境搭建,并點亮一個LED

    今天就給大家講講基于Cortex-M85內核瑞薩RA8單片機快速上手指南。
    的頭像 發(fā)表于 06-04 17:32 ?1436次閱讀
    瑞薩<b class='flag-5'>RA8</b>系列教程 | 瑞薩 <b class='flag-5'>RA8</b> 開發(fā)環(huán)境搭建,并點亮一個LED