女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內(nèi)不再提示

在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON

IAR愛亞系統(tǒng) ? 來源:IAR愛亞系統(tǒng) ? 2025-06-05 09:57 ? 次閱讀

隨著嵌入式系統(tǒng)變得越來越智能,對嵌入式處理器的要求也越來越高。為了更好應(yīng)對汽車、醫(yī)療和工業(yè)機器人等領(lǐng)域?qū)η度胧教幚砥鞯囊螅?a target="_blank">Arm推出了采用Armv8-R架構(gòu)的Cortex-R52。Cortex-R52相對之前的處理器引入了很多新的特性,其中一個就是NEON。

本文主要介紹如何在IAR Embedded Workbench for Arm中使用Arm Cortex-R52NEON。

注意:由于Cortex-R52和Cortex-R52+具有相同的指令集并且軟件兼容, 除非特別說明,本文中的Cortex-R52同時包括Cortex-R52和Cortex-R52+。

01Arm Cortex-R52 NEON介紹

Arm NEON概述

大多數(shù)Arm指令是單指令單數(shù)據(jù) (SISD,Single Instruction Single Data):即每條指令對單個數(shù)據(jù)執(zhí)行指定的操作,因此,處理多個數(shù)據(jù)需要多條指令,相對較慢。為了提高性能和效率,Arm推出了對應(yīng)的高級單指令多數(shù)據(jù) (SIMD, Single Instruction Multiple Data)架構(gòu)擴展NEON。Arm NEON 是針對Armv8架構(gòu)Cortex-A和Cortex-R處理器的高級單指令多數(shù)據(jù)架構(gòu)擴展。

4a7353c0-3b79-11f0-b715-92fbcf53809c.png

單指令多數(shù)據(jù)指令可同時對多個數(shù)據(jù)執(zhí)行相同的操作,如果數(shù)據(jù)處理很簡單并且重復多次,單指令多數(shù)據(jù)指令可以帶來顯著的性能提升。如下圖所示,單指令多數(shù)據(jù)指令 (ADD V10.4S, V8.4S, V9.4S)可以同時對4個數(shù)據(jù)進行加法運算:

4a89d122-3b79-11f0-b715-92fbcf53809c.png

Arm NEON寄存器(Registers), 向量(Vectors), 通道(Lanes)和元素(Elements)

Arm處理器有通用寄存器(R0-R15),AArch32的通用寄存器寬度是32位,AAarch64的通用寄存器寬度是64位。Arm NEON有對應(yīng)的NEON寄存器(NEON寄存器數(shù)目跟對應(yīng)處理器相關(guān)),NEON寄存器寬度是128位,同時NEON寄存器可以8位、16位、32位、64位或128位寄存器訪問。NEON寄存器包含相同數(shù)據(jù)類型元素(Elements)的向量(Vectors),輸入和輸出NEON寄存器中相同的元素(Elements)位置稱為通道(Lanes)。

通常,每條NEON指令會并行執(zhí)行n個操作,其中n是輸入向量被劃分為的通道數(shù)。每個操作都包含在通道中,從一個通道到另一個通道不能有進位或溢出。NEON向量中的通道數(shù)量取決于向量的大小和向量中的元素大小。

128位NEON向量可以包含以下元素大?。?/p>

16個8位元素(操作數(shù)后綴.16B,其中B表示字節(jié)Byte)

8個16位元素(操作數(shù)后綴.8H,其中H表示半字Half word)

4個32位元素(操作數(shù)后綴.4S,其中S表示單字Single word)

2個64位元素(操作數(shù)后綴.2D,其中D表示雙字Double word)

64位NEON向量可以包含以下元素大小(128位寄存器的高64位清零):

8個8位元素(操作數(shù)后綴.8B,其中B表示字節(jié)Byte)

4個16位元素(操作數(shù)后綴.4H,其中H表示半字Half word)

2個32位元素(操作數(shù)后綴.2S,其中S表示單字Single word)

4a9b2a9e-3b79-11f0-b715-92fbcf53809c.png

向量中的元素從最低有效位開始排序,元素0使用最低有效位。

下面是8個通道16位元素(8*16 =128)相加的示例:

4ab2eaa8-3b79-11f0-b715-92fbcf53809c.png

Arm Cortex-R52 NEON概述

Arm Cortex-R52屬于Armv8-R架構(gòu),Armv8-R架構(gòu)本身支持NEON,Cortex-R52具有對應(yīng)的NEON配置選項:只支持單精度浮點運算或者支持單精度、雙精度浮點運算和NEON。

4ad2415a-3b79-11f0-b715-92fbcf53809c.png

4ae5b230-3b79-11f0-b715-92fbcf53809c.png

Cortex-R52 NEON包含16個128位的寄存器,這些寄存器可以當作32位的單精度寄存器S0-S31,64位的雙精度寄存器D0-D31或者128位的四字寄存器Q0-Q15:

4af82ac8-3b79-11f0-b715-92fbcf53809c.png

02Arm NEON使用介紹

作為程序員,您可以有多種方法使用Arm NEON:

支持Arm NEON的庫

使用支持Arm NEON的庫(比如Arm Compute Library, Ne10等庫)可以很快捷方便地使用Arm NEON。

編譯器自動向量化(Auto-vectorization)

編譯器自動向量化可以自動優(yōu)化代碼,充分利用Arm NEON。編譯器自動向量化一般包含兩部分:

循環(huán)向量化(Loop vectorization):展開循環(huán)以減少迭代次數(shù),同時在每次迭代中執(zhí)行更多操作;

超字并行向量化(SLP,Superword-Level Parallelism vectorization):將多個標量運算綁定到一起,使其成為向量運算,以充分利用高級單指令多數(shù)據(jù)指令。

NEON內(nèi)在(intrinsics)函數(shù)

NEON內(nèi)在函數(shù)是編譯器用適當?shù)?NEON指令替換的函數(shù)調(diào)用。NEON內(nèi)在函數(shù)提供的控制幾乎與編寫匯編語言一樣多,但將寄存器的分配留給編譯器,以便開發(fā)人員可以更專注于算法。NEON內(nèi)在函數(shù)在arm_neon.h中定義。

NEON匯編

為了獲得非常高的性能,對于經(jīng)驗豐富的程序員來說,編寫 NEON匯編也是一種選擇。

03在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON

前面介紹了Arm NEON的基本概念和對應(yīng)的使用方法,下面介紹如何在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON,主要包括使用編譯器自動向量化和NEON內(nèi)在函數(shù)。

編譯器自動向量化

編譯器自動向量化需要指定對應(yīng)的編譯器選項才能讓編譯器進行對應(yīng)的自動向量化優(yōu)化:

對應(yīng)的處理器支持NEON

對應(yīng)的編譯選項使能編譯器自動向量化

首先要確保對應(yīng)的處理器支持NEON:

對應(yīng)的Core要選擇為Cortex-R52/Cortex R52+:

4b0fe2ee-3b79-11f0-b715-92fbcf53809c.png

同時對應(yīng)FPU要選擇為VFPv5 double precision, D registers要選擇為32,并且要勾選Advanced SIMD (NEON/HELIUM)選項:

4b24d29e-3b79-11f0-b715-92fbcf53809c.png

對應(yīng)CPU和FPU的編譯器選項分別為:--cpu=Cortex-R52/Cortex-R52+和--fpu=VFPv5。

然后對應(yīng)的編譯器優(yōu)化選項要使能編譯器自動向量化:

編譯器優(yōu)化等級需要選擇為High Speed,并且勾選Vectorization選項才會使能編譯器自動向量化:

4b3fc4b4-3b79-11f0-b715-92fbcf53809c.png

對應(yīng)編譯器優(yōu)化等級和自動向量化的編譯器選項分別為:-Ohs和--vectorize。

另外可以通過#pragma vectorize命令對后面的循環(huán)單獨使能/不使能編譯器自動向量化(只有在編譯器優(yōu)化等級為High的時候#pragma vectorize命令才會生效):

4b60243e-3b79-11f0-b715-92fbcf53809c.png

下面通過一個簡單的示例進行介紹:

void vec_mul_int (int* vec_A, int* vec_B, int* vec_C, int len_vec)

{

int i;

for (i=0; i

{

vec_C[i] = vec_A[i] * vec_B[i];

}

}

首先不使能編譯器自動向量化進行編譯,然后查看對應(yīng)的反匯編代碼(可以使用ielfdumparm xxx.o xxx.txt --code --source命令將對應(yīng)的.o文件輸出為對應(yīng)的.txt文件),對應(yīng)的乘法操作采用的是普通的乘法指令MULS R5, R4, R5:

4b7c06ea-3b79-11f0-b715-92fbcf53809c.png

然后使能編譯器自動向量化進行編譯,查看對應(yīng)的反匯編代碼使用了NEON相關(guān)的高級單指令多數(shù)據(jù)指令,其中乘法操作使用了VMUL.I32 Q0,Q0,Q1指令,同時對4個32位整型數(shù)據(jù)(.I32)進行乘法操作(VMUL):

4ba08038-3b79-11f0-b715-92fbcf53809c.png

NEON內(nèi)在函數(shù)

使用NEON內(nèi)在函數(shù)需要包含對應(yīng)的頭文件 arm_neon.h:

#include

void vec_mul_int(int* vec_A, int* vec_B, int* vec_C, int len_vec)
{
int i;

for (i=0; i<(len_vec / 4); i++)
{
*((int32x4_t*)vec_C) = vmulq_s32(*((int32x4_t*)vec_A), *((int32x4_t*)vec_B));

vec_A = vec_A + 4;
vec_B = vec_B + 4;
vec_C = vec_C + 4;
}
}

其中int32x4_t表示的是4個32位整型數(shù)據(jù),vmulq_s32表示的是對s32(32位整型)數(shù)據(jù)進行向量乘法操作。

查看對應(yīng)的反匯編代碼,對應(yīng)的vmulq_s32 NEON內(nèi)在函數(shù)被翻譯為對應(yīng)NEON相關(guān)的高級單指令多數(shù)據(jù)指令,其中乘法操作使用了VMUL.I32 Q0,Q1,Q0指令,同時對4個32位整型數(shù)據(jù)(.I32)進行乘法操作(VMUL):

4bfa761a-3b79-11f0-b715-92fbcf53809c.png

04總結(jié)

本文首先介紹了Arm NEON的基本概念,然后介紹了使用Arm NEON的通用方法,最后詳細介紹了如何在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON,包括使用編譯器自動向量化和NEON內(nèi)在函數(shù),用戶可以根據(jù)項目具體情況選擇合適的策略。

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

    關(guān)注

    134

    文章

    9312

    瀏覽量

    375161
  • 嵌入式
    +關(guān)注

    關(guān)注

    5141

    文章

    19542

    瀏覽量

    315166
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    370

    瀏覽量

    37261
  • Embedded
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    22658
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1656

    瀏覽量

    49900

原文標題:在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 NEON

文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    IAR Systems支持全新Arm Cortex-M85處理器

    IAR Embedded Workbench for Arm 支持全新 Arm Cortex-M
    發(fā)表于 06-14 10:38 ?2013次閱讀
    <b class='flag-5'>IAR</b> Systems支持全新<b class='flag-5'>Arm</b> <b class='flag-5'>Cortex</b>-M85處理器

    ARM發(fā)布實時處理用CPU內(nèi)核Cortex-R52 瞄準自動駕駛汽車

    英國ARM公司2016年9月20日(當?shù)貢r間)發(fā)布了瞄準自動駕駛汽車、醫(yī)療及工業(yè)機器人等領(lǐng)域、可用于實時處理的CPU內(nèi)核“Cortex-R52”。ARM日本公司于9月21日面向日本的新聞媒體舉行
    發(fā)表于 09-29 10:12 ?2801次閱讀
    <b class='flag-5'>ARM</b>發(fā)布實時處理用CPU內(nèi)核<b class='flag-5'>Cortex-R52</b> 瞄準自動駕駛汽車

    IAR Embedded Workbench中進行ARM+RISC-V多核調(diào)試

    之前的文章中,我們介紹了如何在IAR Embedded Workbench for Arm中進行多核調(diào)試,其中所有的CPU內(nèi)核都是基于
    發(fā)表于 06-13 17:38 ?1529次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>IAR</b> <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b>中進行<b class='flag-5'>ARM</b>+RISC-V多核調(diào)試

    IAR Embedded Workbench中進行ARM+RISC-V多核調(diào)試

    之前的文章中,我們介紹了如何在IAR Embedded Workbench for Arm中進行多核調(diào)試,其中所有的CPU內(nèi)核都是基于
    發(fā)表于 06-14 16:55

    Arm Cortex-R52處理器技術(shù)參考手冊

    ARMv8-R AArch32兼容處理元件(PE)。 Cortex-R52的背景下,PE和核心概念上是相同的。 多個受保護的內(nèi)存系統(tǒng)架構(gòu)(PMSA)上下文可以
    發(fā)表于 08-17 06:24

    ARM Cortex-R52處理器技術(shù)參考手冊

    ARMv8-R標準的處理元件(PE)。 Cortex-R52的背景下,PE和核心概念上是相同的。 多個受保護的內(nèi)存系統(tǒng)架構(gòu)(PMSA)上下文可以
    發(fā)表于 08-18 07:07

    Cortex-R52循環(huán)模型用戶指南

    Cortex-R52硬件的以下功能在Cortex-R52循環(huán)模型中完全實現(xiàn): ·支持最多四個CPU的配置。 ·可配置的中斷次數(shù)(32至960,增量為32)。 ·AXI主端口。 ·通過從端口訪問TCM
    發(fā)表于 08-18 06:27

    IAR Systems發(fā)布 IAR Embedded Wor

    IAR Systems發(fā)布 IAR Embedded Workbench for ARM新版本  IA
    發(fā)表于 02-11 09:14 ?1427次閱讀

    IAR_embedded_Workbench用戶指南介紹

    IAR embedded Workbench for ARMIAR Systems 公司為 ARM
    發(fā)表于 11-09 18:08 ?90次下載

    ARM Cortex-R52專屬汽車安全管理程序面世

    OpenSynergy通過虛擬化ARM最先進的實時處理器為下一代無人駕駛設(shè)備奠定基礎(chǔ)。ARM表示OpenSynergy公司正在為其最先進的實時安全處理器ARM? Cortex?-
    發(fā)表于 02-14 17:57 ?2390次閱讀
    <b class='flag-5'>ARM</b> <b class='flag-5'>Cortex-R52</b>專屬汽車安全管理程序面世

    Embedded Workbench for ARM training

    Embedded Workbench for ARM training
    發(fā)表于 10-27 09:38 ?10次下載
    <b class='flag-5'>Embedded</b> <b class='flag-5'>Workbench</b> for <b class='flag-5'>ARM</b> training

    IAR ARM集成開發(fā)環(huán)境學習教程

    IAR Embedded Workbench for ARMIAR Systems 公司為ARM
    發(fā)表于 08-24 16:47 ?34次下載
    <b class='flag-5'>IAR</b> <b class='flag-5'>ARM</b>集成開發(fā)環(huán)境學習教程

    Arm Cortex-R52+ 增強時間關(guān)鍵型汽車設(shè)計

    Arm近日發(fā)布了Arm? Cortex?-R系列的最新產(chǎn)品Cortex-R52+,可支持汽車電子設(shè)計的演變,幫助汽車研發(fā)人員
    發(fā)表于 03-05 11:17 ?2736次閱讀

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    瑞典烏普薩拉,2024年2月20日 – 全球領(lǐng)先的嵌入式系統(tǒng)開發(fā)軟件解決方案供應(yīng)商IAR宣布:推出其旗艦產(chǎn)品IAREmbedded Workbench for Arm功能安全版的最新版本9.50.3。
    的頭像 發(fā)表于 02-21 13:47 ?1098次閱讀

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系統(tǒng)開發(fā)軟件解決方案供應(yīng)商IAR Systems近日宣布,其旗艦產(chǎn)品IAR Embedded Workbench for Arm
    的頭像 發(fā)表于 02-22 17:29 ?1765次閱讀