91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

對(duì)比NEON匯編與NEON Intrinsics編程的優(yōu)缺點(diǎn)

安芯教育科技 ? 來源:安謀科技學(xué)堂 ? 作者:安謀科技學(xué)堂 ? 2022-12-14 09:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


本文選自極術(shù)專欄《Infrastructure開源軟件 on Arm》的Arm NEON學(xué)習(xí)系列。前面我們學(xué)習(xí)了如何快速上手開始NEON編程以及ArmNEON優(yōu)化技術(shù)本篇我們將對(duì)比NEON匯編與NEON Intrinsics編程的優(yōu)缺點(diǎn)。

1.簡(jiǎn)介

ARMNEON編程主要有兩種最常用的方式手寫匯編和Intrinsics。本文將對(duì)比NEON匯編與NEON Intrinsics編程的優(yōu)缺點(diǎn)。

2.NEON匯編與Intrinsics

NEON匯編與Intrinsics各有優(yōu)缺點(diǎn):

47ea516c-7b4b-11ed-8abf-dac502259ad0.png

NEON匯編與Intrinsics各有優(yōu)缺點(diǎn):但實(shí)際情況遠(yuǎn)遠(yuǎn)比這些復(fù)雜很多,特別是涉及到ARM v7-A/v8-A跨平臺(tái)的時(shí)候。下面我們結(jié)合實(shí)例做一些更深入的分析。

2.1 編程

對(duì)于初學(xué)者來說,Intrinsics比較易學(xué)易用。但是對(duì)于有匯編經(jīng)驗(yàn)的開發(fā)者來說,可能更熟悉NEON匯編編程,切換到Intrinsics反倒需要有個(gè)適應(yīng)過程。下文列出了實(shí)際開發(fā)中的一些問題。

2.1.1 指令靈活性

從指令使用角度來說,匯編指令比Intrinsics指令更靈活,主要體現(xiàn)在數(shù)據(jù)加載/存儲(chǔ)上,比如下例:

  • Intrinsics指令

    • 加載數(shù)據(jù)到一個(gè)64位寄存器 vld1_s8/u8/s16/u16/s32…etc

    • 加載數(shù)據(jù)到一個(gè)128位寄存器vld1q_s8/u8/s16/u16/s32…etc

  • ARM v7-A匯編

VLD1 { Dd}, [Rn]
VLD1 { Dd, D(d+1) }, [Rn]
VLD1 { Dd, D(d+1), D(d+2)}, [Rn]
VLD1 { Dd, D(d+1), D(d+2), D(d+3) }, [Rn]
  • ARM v8-A匯編

LD1 { .]
LD1 { ., .}, []
LD1 { ., ., . }, []
LD1 { ., ., ., . }, []

這個(gè)問題主要針對(duì)現(xiàn)在,相信隨著編譯器的升級(jí)這些問題會(huì)逐漸解決的。

在一些情況下,有的編譯器已經(jīng)能把兩條指令解析成一條匯編指令,比如:


48055d4a-7b4b-11ed-8abf-dac502259ad0.png
因此,我們有理由由相信,隨著ARM v8-A編譯器的不斷升級(jí),intrinsics指令會(huì)完善到跟匯編指令一樣靈活的。

2.1.2 寄存器分配

NEON匯編編程時(shí),需要自己分配寄存器,用戶必須清楚寄存器的使用情況。而Intrinsics編程的一個(gè)好處就是,用戶只需要定義變量即可,編譯器會(huì)自動(dòng)分配寄存器。這是優(yōu)點(diǎn),但有時(shí)也會(huì)變成弱點(diǎn)。實(shí)踐證明,因?yàn)锳RMv7-A只有16個(gè)128位NEON寄存器,在Intrinsics編程時(shí),如果用戶同時(shí)使用過多的NEON寄存器,會(huì)導(dǎo)致gcc編譯器的寄存器分配問題。主要表現(xiàn)是編譯器會(huì)把很多數(shù)據(jù)存儲(chǔ)到堆棧中,這樣會(huì)極大的影響程序性能。因此用戶在使用Intrinsics編程時(shí)要注意這個(gè)問題。在性能出現(xiàn)異常時(shí)(比如C程序的性能比NEON程序的性能要好),檢查反匯編,看是否有寄存器分配的問題出現(xiàn)。在ARM64中,有32個(gè)128位NEON寄存器,這個(gè)問題的影響大大減弱。

2.2 性能與編譯器

在同一平臺(tái)下,NEON匯編的性能與編譯器無關(guān),只由NEON的實(shí)現(xiàn)方式?jīng)Q定。好處是用戶在調(diào)整代碼時(shí),用戶可以預(yù)測(cè)、控制自己程序的性能,但沒有驚喜。

NEON Intrinsics 的性能則極大的依賴于編譯器,不同的編譯器,性能可能有極大的差別。一般來說,越老版本的編譯器,性能越差。如果用戶需要保留對(duì)老版本編譯器兼容性時(shí),需要慎重考慮使用Intrinsics。此外,當(dāng)用戶優(yōu)化代碼細(xì)節(jié)的時(shí)候,編譯器的介入,使用戶很難預(yù)測(cè)程序性能的變化,但有時(shí)候會(huì)有驚喜,有時(shí)Intrinsics的性能會(huì)比匯編的性能要好。盡管很少見,但確實(shí)存在。

編譯器主要對(duì)優(yōu)化NEON程序造成影響。下圖是NEON實(shí)現(xiàn)及優(yōu)化的一般流程:

481e5a48-7b4b-11ed-8abf-dac502259ad0.png

對(duì)于NEON匯編或是Intrinsics來講,實(shí)現(xiàn)流程是一樣的,編程——調(diào)試——測(cè)試。但是調(diào)優(yōu)的步驟是不一樣的。

NEON匯編的調(diào)優(yōu)方式主要有:

? 改變實(shí)現(xiàn)方式,比如改變所用指令,調(diào)整并行方式。

? 調(diào)整指令順序,以降低數(shù)據(jù)依賴性

? 上文第二章所介紹的方式都可以嘗試

在匯編調(diào)優(yōu)時(shí),最精細(xì)方式是:

? 確定匯編指令數(shù)目和指令的時(shí)序

? 使用PMU (Performance Monitoring Unit)測(cè)量程序執(zhí)行的周期數(shù)

? 根據(jù)使用指令的時(shí)序,調(diào)整程序,盡量減少指令延時(shí)

這種方式的缺點(diǎn)是,針對(duì)指定微架構(gòu)的調(diào)整,換到另外的平臺(tái)性能不一定會(huì)好。經(jīng)?;ㄙM(fèi)很大的工作量而只能取得很小的性能提升。

NEON intrinsics的調(diào)優(yōu)則比較困難,

? 嘗試NEON匯編所用的調(diào)優(yōu)方式,然后

? 觀察反匯編,看看數(shù)據(jù)依賴性、寄存器使用等情況

? 判斷優(yōu)化效果是否達(dá)到預(yù)期, 如果符合預(yù)期則工作結(jié)束。此時(shí),需要測(cè)試多種編譯器,檢查性能的異同。

在使用intrinsics轉(zhuǎn)換ARMv7-A的匯編時(shí),優(yōu)化效果判斷比較簡(jiǎn)單,只要Intrinsics性能接近匯編性能即可。但是,在使用Intrinsics優(yōu)化ARM v8-A的代碼時(shí),我們沒有性能參考的對(duì)象,較難判斷代碼是否調(diào)整到最優(yōu)狀態(tài)了。可能會(huì)有疑問,會(huì)不會(huì)匯編實(shí)現(xiàn)的性能會(huì)更好?但隨著整個(gè)ARM v8-A環(huán)境的成熟,這個(gè)問題帶來的影響會(huì)越來越小。另外,如果更看重Intrinsics的其它優(yōu)點(diǎn),對(duì)性能也不是錙銖必較的話,這個(gè)問題的影響也不大。

2.3 跨平臺(tái)與可移植性

現(xiàn)在,現(xiàn)有的大部分NEON匯編代碼只能運(yùn)行在ARM v7-A或是ARM v8-A AArch32模式的平臺(tái)上。想要運(yùn)行在ARM v8-A AArch64模式的平臺(tái),我們必須重寫代碼,這帶來了很大的工作量。這時(shí),NEON Intrinsics代碼的好處就體現(xiàn)出來了,在ARM v8-A AArch64模式下,我們可以直接運(yùn)行這些代碼,減少了重寫代碼的工作量。同時(shí),我們可以只維護(hù)一套代碼,這樣也減少了維護(hù)的工作量。

然而,由于ARMv7-A/ARMv8-A的硬件資源不同,即使用Intrinsics,有時(shí)我們也需要兩套代碼。Ne10中FFT實(shí)現(xiàn)就是一個(gè)例子:

// radix 4 butterfly with twiddles
scratch[0].r = scratch_in[0].r;
scratch[0].i = scratch_in[0].i;
scratch[1].r = scratch_in[1].r * scratch_tw[0].r - scratch_in[1].i * scratch_tw[0].i;
scratch[1].i = scratch_in[1].i * scratch_tw[0].r + scratch_in[1].r * scratch_tw[0].i;
scratch[2].r = scratch_in[2].r * scratch_tw[1].r - scratch_in[2].i * scratch_tw[1].i;
scratch[2].i = scratch_in[2].i * scratch_tw[1].r + scratch_in[2].r * scratch_tw[1].i;
scratch[3].r = scratch_in[3].r * scratch_tw[2].r - scratch_in[3].i * scratch_tw[2].i;
scratch[3].i = scratch_in[3].i * scratch_tw[2].r + scratch_in[3].r * scratch_tw[2].i;

上述代碼描述了32位浮點(diǎn)復(fù)數(shù)FFT算法的基本元——基4蝶形運(yùn)算。從代碼中我們可以看出:

? 如果在一次循環(huán)中,兩個(gè)基4蝶形運(yùn)算并行,需要20個(gè) 64位寄存器。

? 如果在一次循環(huán)中,四個(gè)基4蝶形運(yùn)算并行,需要20個(gè) 128位寄存器。

由于ARM v7-A只有16個(gè)128位寄存器,因此,該平臺(tái)的FFT實(shí)現(xiàn)僅能一次循環(huán)兩個(gè)基4蝶形運(yùn)算并行。而ARM v8-A有32個(gè)128位寄存器,該平臺(tái)的FFT實(shí)現(xiàn)能一次循環(huán)四個(gè)基4蝶形運(yùn)算并行。因此,即使用Intrinsics,我們也需要兩套代碼。

上例可以說明,在實(shí)現(xiàn)一套代碼跨ARM v7-A/v8-A平臺(tái)時(shí),我們需要注意一些類似的特例。

2.4 將來

上面已經(jīng)分析了NEON匯編與Intrinsics的很多問題,但是這些問題都是暫時(shí)的。長遠(yuǎn)來看,使用intrinsics還是更好。Intrinsics能帶來硬件以及編譯器發(fā)展的好處。經(jīng)典算法只要實(shí)現(xiàn)一次即可,不用隨著硬件的升級(jí)而重新編程,大大減少了工作量。

2.5 總結(jié)

結(jié)合實(shí)例,上文對(duì)NEON匯編和Intrinsics做了一些分析??傮w來說,使用intrinsics利大于弊。特別是與匯編相比,Intrinsics更容易編程,且能夠更好地兼容ARMv7-A/ARMv8-A。

下面再總結(jié)一下NEON Intrinsics使用時(shí)的一些注意事項(xiàng):

? 使用的寄存器數(shù)量

? 編譯器選擇

? 查看反匯編

3.總結(jié)

本文通過實(shí)際程序分析了NEON匯編與Intrinsics的優(yōu)缺點(diǎn)。希望能對(duì)用戶在NEON實(shí)際開發(fā)中有些借鑒意義。

審核編輯 :李倩


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

    關(guān)注

    31

    文章

    5608

    瀏覽量

    130001
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3716

    瀏覽量

    97191

原文標(biāo)題:Arm NEON學(xué)習(xí)(三)NEON 匯編與Intrinsics編程

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    永磁式抱閘與電磁式抱閘優(yōu)缺點(diǎn)對(duì)比

    永磁式抱閘與電磁式抱閘作為工業(yè)自動(dòng)化領(lǐng)域的關(guān)鍵制動(dòng)裝置,廣泛應(yīng)用于電梯、起重機(jī)械、機(jī)床等設(shè)備中。兩者的核心差異在于勵(lì)磁方式和工作原理,進(jìn)而衍生出性能、成本、適用場(chǎng)景等多方面的區(qū)別。以下從技術(shù)原理、性能表現(xiàn)、經(jīng)濟(jì)性及適用性四個(gè)維度展開深度對(duì)比。
    的頭像 發(fā)表于 02-27 17:09 ?474次閱讀
    永磁式抱閘與電磁式抱閘<b class='flag-5'>優(yōu)缺點(diǎn)</b><b class='flag-5'>對(duì)比</b>

    三防漆稀釋劑替代品對(duì)比優(yōu)缺點(diǎn)+環(huán)保選擇 |鉻銳特實(shí)業(yè)

    鉻銳特實(shí)業(yè)|東莞廠家|三防漆稀釋劑能用什么替代?本文對(duì)比原裝稀釋劑、環(huán)保無苯型、醋酸丁酯、PMA等常見替代品的優(yōu)缺點(diǎn)、成本與性能影響,附行業(yè)數(shù)據(jù)和選擇建議,助您兼顧品質(zhì)與成本。
    的頭像 發(fā)表于 02-26 00:12 ?106次閱讀
    三防漆稀釋劑替代品<b class='flag-5'>對(duì)比</b>:<b class='flag-5'>優(yōu)缺點(diǎn)</b>+環(huán)保選擇 |鉻銳特實(shí)業(yè)

    對(duì)比分析電能質(zhì)量在線監(jiān)測(cè)裝置支持的斷點(diǎn)續(xù)傳文件傳輸協(xié)議的優(yōu)缺點(diǎn)

    優(yōu)缺點(diǎn)對(duì)比分析: 一、各協(xié)議優(yōu)缺點(diǎn)逐一拆解 1. FTP(文件傳輸協(xié)議) 優(yōu)點(diǎn) 斷點(diǎn)續(xù)傳機(jī)制成熟 :依托REST命令可精準(zhǔn)定位字節(jié)偏移量,支持大文件分塊續(xù)傳,且內(nèi)置 CRC 校驗(yàn)保障數(shù)據(jù)完整性,是裝置的基礎(chǔ)標(biāo)配功能,適配性強(qiáng)。
    的頭像 發(fā)表于 12-05 17:49 ?3436次閱讀
    <b class='flag-5'>對(duì)比</b>分析電能質(zhì)量在線監(jiān)測(cè)裝置支持的斷點(diǎn)續(xù)傳文件傳輸協(xié)議的<b class='flag-5'>優(yōu)缺點(diǎn)</b>

    不同類型的電能質(zhì)量在線監(jiān)測(cè)裝置數(shù)據(jù)存儲(chǔ)方式有哪些優(yōu)缺點(diǎn)?

    不同類型的電能質(zhì)量在線監(jiān)測(cè)裝置數(shù)據(jù)存儲(chǔ)方式,核心差異體現(xiàn)在 數(shù)據(jù)控制權(quán)、實(shí)時(shí)性、運(yùn)維成本、擴(kuò)展性 上,主要分為 本地存儲(chǔ)、云端存儲(chǔ)、混合存儲(chǔ) 三類。每類方式的優(yōu)缺點(diǎn)需結(jié)合電能質(zhì)量數(shù)據(jù)特征(時(shí)序性
    的頭像 發(fā)表于 10-30 10:00 ?295次閱讀

    IAR下全志T113-S3 ARM Cortex-A7開啟FPU后異常怎么解決?

    初始化,匯編中調(diào)用 void rt_low_level_init(void) { unsigned int cpacr, fpexc; cpacr = __get_CPACR
    發(fā)表于 10-14 06:18

    不同類型的自動(dòng)化工具在評(píng)估數(shù)據(jù)緩存效果時(shí)有哪些優(yōu)缺點(diǎn)?

    在評(píng)估數(shù)據(jù)緩存效果時(shí),不同類型的自動(dòng)化工具(實(shí)時(shí)監(jiān)控類、性能測(cè)試類、深度分析類、云原生專屬類)因設(shè)計(jì)目標(biāo)和技術(shù)特性不同,存在顯著的優(yōu)缺點(diǎn)差異。以下結(jié)合工具類型與具體場(chǎng)景,系統(tǒng)對(duì)比其核心優(yōu)劣勢(shì),并給出
    的頭像 發(fā)表于 09-25 17:48 ?715次閱讀
    不同類型的自動(dòng)化工具在評(píng)估數(shù)據(jù)緩存效果時(shí)有哪些<b class='flag-5'>優(yōu)缺點(diǎn)</b>?

    無線局域網(wǎng)的優(yōu)缺點(diǎn)和使用要點(diǎn)

    近年來,無線局域網(wǎng) 已普遍應(yīng)用于我們生活的方方面面。本文將介紹無線局域網(wǎng)的基礎(chǔ)知識(shí)、優(yōu)缺點(diǎn)、與 Wi-Fi 及有線局域網(wǎng)的區(qū)別,以及有效使用的要點(diǎn)。全球領(lǐng)先的短距離無線模塊供應(yīng)商 KAGA FEI
    的頭像 發(fā)表于 08-14 16:04 ?2982次閱讀
    無線局域網(wǎng)的<b class='flag-5'>優(yōu)缺點(diǎn)</b>和使用要點(diǎn)

    超級(jí)電容對(duì)比鋰電池的優(yōu)缺點(diǎn)

    本文探討了超級(jí)電容和鋰電池在儲(chǔ)能領(lǐng)域的優(yōu)缺點(diǎn)。超級(jí)電容以高能量密度著稱,但充電速度較慢;鋰電池則具有快充和壽命長的優(yōu)勢(shì),但成本較高。在新能源汽車和電網(wǎng)調(diào)頻等高頻次應(yīng)用中,兩者可以互補(bǔ)。
    的頭像 發(fā)表于 06-30 09:37 ?2649次閱讀
    超級(jí)電容<b class='flag-5'>對(duì)比</b>鋰電池的<b class='flag-5'>優(yōu)缺點(diǎn)</b>

    商業(yè)云手機(jī)核心優(yōu)缺點(diǎn)分析

    商業(yè)云手機(jī)核心優(yōu)缺點(diǎn)分析,綜合技術(shù)性能、成本效率及場(chǎng)景適配性等多維度對(duì)比: 核心優(yōu)勢(shì)? 成本革命? 硬件零投入?:免除實(shí)體手機(jī)采購(旗艦機(jī)均價(jià)6000元),企業(yè)百臺(tái)規(guī)??墒?0萬+ CAPEX
    的頭像 發(fā)表于 06-16 08:11 ?1042次閱讀
    商業(yè)云手機(jī)核心<b class='flag-5'>優(yōu)缺點(diǎn)</b>分析

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

    隨著嵌入式系統(tǒng)變得越來越智能,對(duì)嵌入式處理器的要求也越來越高。為了更好應(yīng)對(duì)汽車、醫(yī)療和工業(yè)機(jī)器人等領(lǐng)域?qū)η度胧教幚砥鞯囊螅珹rm推出了采用Armv8-R架構(gòu)的Cortex-R52。Cortex-R52相對(duì)之前的處理器引入了很多新的特性,其中一個(gè)就是NEON。
    的頭像 發(fā)表于 06-05 09:57 ?1867次閱讀
    在IAR Embedded Workbench for Arm中使用Arm Cortex-R52 <b class='flag-5'>NEON</b>

    PCBA 表面處理:優(yōu)缺點(diǎn)大揭秘,應(yīng)用場(chǎng)景全解析

    一站式PCBA加工廠家今天為大家講講PCBA加工如何選擇合適的表面處理工藝?PCBA表面處理優(yōu)缺點(diǎn)與應(yīng)用場(chǎng)景。在電子制造中,PCBA板的表面處理工藝對(duì)電路板的性能、可靠性和成本都有重要影響。選擇合適
    的頭像 發(fā)表于 05-05 09:39 ?1404次閱讀
    PCBA 表面處理:<b class='flag-5'>優(yōu)缺點(diǎn)</b>大揭秘,應(yīng)用場(chǎng)景全解析

    3D打印耗材種類有哪些?各有什么優(yōu)缺點(diǎn)

    這篇文章將為你詳細(xì)介紹3D打印耗材的基礎(chǔ)知識(shí),幫助你了解這些材料的特性、優(yōu)缺點(diǎn)以及它們適合的應(yīng)用場(chǎng)景。
    的頭像 發(fā)表于 04-29 09:40 ?5.3w次閱讀
    3D打印耗材種類有哪些?各有什么<b class='flag-5'>優(yōu)缺點(diǎn)</b>?

    CMOS,Bipolar,F(xiàn)ET這三種工藝的優(yōu)缺點(diǎn)是什么?

    在我用photodiode工具選型I/V放大電路的時(shí)候,系統(tǒng)給我推薦了AD8655用于I/V,此芯片為CMOS工藝 但是查閱資料很多都是用FET工藝的芯片,所以請(qǐng)教下用于光電信號(hào)放大轉(zhuǎn)換(主要考慮信噪比和帶寬)一般我們用哪種工藝的芯片, CMOS,Bipolar,F(xiàn)ET這三種工藝的優(yōu)缺點(diǎn)是什么?
    發(fā)表于 03-25 06:23

    壓接連接器使用裸銅線的優(yōu)缺點(diǎn)分析?

    壓接連接器使用裸銅線是一種高效、可靠的電氣連接方式,廣泛應(yīng)用于電力、通信和工業(yè)領(lǐng)域。需要我們正確看待它的優(yōu)缺點(diǎn),高效使用。
    的頭像 發(fā)表于 03-18 11:01 ?1173次閱讀

    單頻天線和雙頻天線的對(duì)比

    單頻天線和雙頻天線是無線通信領(lǐng)域中兩種常見的天線類型,它們各自有著特定的應(yīng)用場(chǎng)景和優(yōu)缺點(diǎn)。本期我們將對(duì)這兩種天線進(jìn)行簡(jiǎn)要的對(duì)比。
    的頭像 發(fā)表于 03-17 15:37 ?2055次閱讀