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

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

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

70行代碼來打造MCU性能分析利器!

5RJg_mcuworld ? 來源:未知 ? 作者:胡薇 ? 2018-07-12 14:52 ? 次閱讀

前面小編對純軟件性能分析的理論與實(shí)踐的分享,希望給大家找到了豪華待遇的感覺。當(dāng)然了,自己當(dāng)土豪爽一下也就過去了,但是性能的問題還擺在那里等待解決,接下來怎么辦呢?

改善性能可以改進(jìn)代碼的寫法或算法,這就要結(jié)合實(shí)際問題,各顯神通了。但畢竟大牛人是來仰望的,咱們還需要更加立竿見影的招數(shù),那就是給CPU占用最大的一些函數(shù)提供VIP的待遇,把它們放在VIP區(qū)中——執(zhí)行性能更高的存儲(chǔ)器。

以前介紹性能分析時(shí)曾提到,VIP區(qū)其實(shí)也是分等級的。不同的單片機(jī),在存儲(chǔ)器的設(shè)計(jì),總線連接方式,訪問控制策略都各有特色,對性能的影響也不一而足。嵌入式IoT的開發(fā),處處彰顯出碎片化和粉末化的特色,這可讓人怎么整?

幸好,即使世界這么紛紛擾擾,還是有大類可循的。小編也試著結(jié)合NXPLPC54000系列和i.MX RT1050系列,給各類VIP區(qū)分了5類VIP特權(quán)等級。

VIP:C級(小V)

這主要是針對外置QSPI Flash的升級。

對于LPC540xx和LPC18x0/43x0系列,它們沒有內(nèi)置Flash。如果跑不動(dòng)了,可以考慮升級到其對應(yīng)的有內(nèi)置Flash的pin2pin型號,比如LPC546xx,LPC18xx/43xx(尾號非0)。內(nèi)置Flash跑血常規(guī)(CoreMark)的性能一般在外置QSPI的1.5倍以上,對于查表較多的程序甚至在數(shù)倍以上。內(nèi)部Flash的帶寬往往在128位甚至256位,還帶有專用于加速循環(huán)結(jié)構(gòu)的特制小cache,執(zhí)行程序的性能還是很棒的。

為了呈現(xiàn)更高的性價(jià)比,i.MX RT系列全部沒有內(nèi)置Flash。不過,i.MX RT的FlexSPI支持高性能的DDR模式、雙Flash交火、以及8線Flash模式。就拿EVK上的hyper flash為例,可高達(dá)332MB/s,而一般的QSPI Flash通常不過60MB/s。此外,i.MX RT的SEMC對于從SDRAM執(zhí)行代碼的性能也比較給力,如果系統(tǒng)中存在SDRAM,也可以使一些數(shù)據(jù)表和代碼放在SDRAM中。

VIP:B級(中V)

各型Flash和SDRAM對于小循環(huán)體的性能盡管還可以,但是當(dāng)程序跳轉(zhuǎn)不規(guī)則,或者順序結(jié)構(gòu)較長時(shí),以及數(shù)據(jù)訪問隨機(jī)性強(qiáng)時(shí),性能的表現(xiàn)就變得很不均勻,讓人有“雖然我表達(dá)不了太多的愛,唯有好多眼淚流出來”的感覺。

這個(gè)時(shí)候,可以使用單片機(jī)片上的系統(tǒng)RAM。對于LPC54系列的Cortex-M4/M0+單片機(jī),可以放在內(nèi)存地址為0x2000-0000開頭的RAM中,對于i.MX RT系列則是地址為0x2020-0000的OCRAM中。這些RAM的工作頻率和隨機(jī)訪問性能比Flash好得很多。但是因?yàn)樵谶@個(gè)地址范圍使用的AHB (LPC)或AXI (i.MX RT)系統(tǒng)總線的啟動(dòng)時(shí)序開銷大,總線往往又比較忙,還要和諸多帶DMA的總線主機(jī)搶帶寬,性能加速可能得不到保證,因此充其量也就算是中V級吧。

VIP:A級(大V)

和中V級相比,大V的待遇就更好了,有了專屬的緊密耦合RAM區(qū)。

以LPC5411x為例,它有32KB的”SRAMX”,這塊SRAMX和192KB的全部容量相比只占1/6,但絕對配得上大V的待遇。它直接連接到Cortex-M4的I-Code和D-Code總線上。這兩條總線也是“特供”于快速代碼執(zhí)行的綠色通道,其它總線主設(shè)備是沒資格用的。

再看i.MX RT,它的Cortex-M7內(nèi)核更是有過之而無不及,把I-Code和D-Code升級到64位的ITCM(指令緊密耦合存儲(chǔ)器)和DTCM(數(shù)據(jù)緊密耦合存儲(chǔ)器),并且片上的512KB內(nèi)存可以自由分割,全部配置成ITCM和DTCM也可以。那沒有了其它RAM,外設(shè)要訪問怎么辦呢?Cortex-M7留了個(gè)小后門——AHB-Slave給其它DMA主機(jī)訪問TCM,當(dāng)然是看M7臉色行事。

總之,大V待遇對于大多數(shù)程序代碼已經(jīng)相當(dāng)有面兒了,性能提升也是杠杠的!

VIP:S級(超V)啥,還有超V級?難道還有比TCM更快的,莫非小編你瘋到想把R0-R14也給賣了?

倒也不是,超V級其實(shí)可以看作是上述VIP的組合,給最關(guān)鍵的模塊提供服務(wù),占用多塊RAM。比如一個(gè)壓縮jpeg的模塊,它既有代碼又有只讀數(shù)據(jù)。如果把代碼與只讀數(shù)據(jù)全放在一塊RAM,就不能發(fā)揮M4/M7雙總線的優(yōu)勢,比如沒法取指令的同時(shí)訪問數(shù)據(jù)。小編于是把代碼放ITCM,只讀數(shù)據(jù)放DTCM,相當(dāng)于它自己左手一個(gè)右手一個(gè)擁抱了整個(gè)芯片中性能最強(qiáng)的兩塊RAM,讓600MHz的M7火力全開,跑到QVGA分辨率下60幀每秒以上的圖片壓縮性能。

VIP:PS級(公共超V)

(僅適用于Cortex-M7)

在Cortex-M7內(nèi)核的i.MX RT系列中,支持指令高速緩存(I-Cache)和數(shù)據(jù)高速緩存(D-Cache),各有32KB。這兩個(gè)Cache的性能完全是TCM級別的。這是一項(xiàng)超V級水準(zhǔn)的平民福利,獻(xiàn)給全部沒有享受到大V和超V待遇的代碼和數(shù)據(jù),就稱作公共超V級吧。

有趣的是,它是全自動(dòng)的——不管是什么代碼和數(shù)據(jù),上鏡率越高,就越有機(jī)會(huì)多享受超V級待遇。但若是如果什么時(shí)候起受冷落了,就最終會(huì)被掃出門。

打個(gè)不嚴(yán)謹(jǐn)?shù)谋确剑@就好比假設(shè)高鐵中以商務(wù)座的標(biāo)準(zhǔn)建餐車,即使沒買一等座和商務(wù)座,只要搶到了餐車座席吃飯,吃飯期間也享受商務(wù)座待遇。只不過,若是吃完飯想再歇會(huì),又沒空位子了,那就祈禱別人不要來吃飯吧,否則就會(huì)被趕走。

因此,這項(xiàng)復(fù)用型超V待遇是按需分配的。值得注意的是,在替換cache內(nèi)容時(shí)會(huì)花時(shí)間,既對確定性產(chǎn)生影響,也降低平均性能。所以雖然比超V級弱一點(diǎn),但它把福利普照給公眾,這是前面任何VIP特權(quán)也提供不了的。

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

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347801
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209382

原文標(biāo)題:改善MCU性能,可以為一些函數(shù)提供VIP待遇!

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何簡單快速的打造MCU性能分析利器的詳細(xì)資料概述

    說出來不確定大家信不信,實(shí)現(xiàn)起來也就70算上大括號的代碼,是不是很激動(dòng)人心? 言歸正傳,再小的程序,也是數(shù)據(jù)結(jié)構(gòu)+代碼。咱們先來由表及
    的頭像 發(fā)表于 07-05 09:23 ?4584次閱讀
    如何簡單快速的<b class='flag-5'>來</b><b class='flag-5'>打造</b><b class='flag-5'>MCU</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b><b class='flag-5'>利器</b>的詳細(xì)資料概述

    8位MCU——且且珍惜!

    細(xì)分產(chǎn)品啊!而且我們做工程研發(fā)的,只要性能夠用就可以了,成本節(jié)約,用好用盡器件的每項(xiàng)性能才是真正該考慮的。很多8位MCU性能也很強(qiáng)大的。例如,世強(qiáng)研討會(huì)上推薦的Silicon Lab
    發(fā)表于 06-26 17:32

    代碼致敬,尋找你的第83

    那天代碼評審現(xiàn)場,看到某代碼片段最后結(jié)尾,多隆突然補(bǔ)上一句,往上翻看下第83。代碼一般都是幾百,他看到最后,居然還記得第83
    發(fā)表于 05-04 16:36

    代碼致敬,尋找你的第83!

    結(jié)尾,多隆突然補(bǔ)上一句,往上翻看下第83。代碼一般都是幾百,他看到最后,居然還記得第83的一個(gè)細(xì)微瑕疵,這得是對代碼懷著怎樣的敬畏之心
    發(fā)表于 05-07 17:32

    消滅EMC三大利器的原理

    來源:互聯(lián)網(wǎng)濾波電容器、共模電感、磁珠在 EMC 設(shè)計(jì)電路中是常見的身影,也是消滅電磁干擾的三大利器。文章從設(shè)計(jì)中詳細(xì)分析了消滅 EMC 三大利器的原理。
    發(fā)表于 10-22 08:55

    探求NVIDIA GPU極限性能利器

    1、探求 NVIDIA GPU 極限性能利器  在通常的 CUDA 編程中,用戶主要通過 CUDA C/C++ 或 python 語言實(shí)現(xiàn) CUDA 功能的調(diào)用。在 NVIDIA 對 CUDA C
    發(fā)表于 10-11 14:35

    如何從SPC584B70 MCU的Simulink模型生成C代碼?

    在我們的項(xiàng)目中,我們選擇了 SPC584B70 作為 MCU。您能否提供幫助以支持使用 MATLAB/Simulink 為 SPC584B70 MCU 進(jìn)行基于模型的設(shè)計(jì)和
    發(fā)表于 12-30 07:50

    全新代碼生成工具(MG32CoGen 2.0)來啦! 輕松開發(fā)MCU最佳利器!

    全新MG32CoGen 2.0啦! 輕松開發(fā)MCU最佳利器! MG32CoGen是什么?“能否縮短開發(fā)時(shí)間?”是客戶挑選MCU的主要考慮因素之一,為了協(xié)助
    發(fā)表于 10-23 09:50

    用于MPLAB X IDE代碼性能分析插件的工作原理和代碼性能分析參考

    MPLAB X IDE提供收集有關(guān)C代碼函數(shù)的函數(shù)級性能分析(Function Level Profiling, FLP)數(shù)據(jù)的功能。但是,該數(shù)據(jù)無法在未安裝MPLAB X IDE插件——代碼
    發(fā)表于 06-11 04:28 ?11次下載
    用于MPLAB X IDE<b class='flag-5'>代碼</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>插件的工作原理和<b class='flag-5'>代碼</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>參考

    消滅EMC三大利器的原理分析

    濾波電容器、共模電感、磁珠在EMC設(shè)計(jì)電路中是常見的身影,也是消滅電磁干擾的三大利器。對于這三者在電路中的作用,相信還有很多工程師搞不清楚,文章從設(shè)計(jì)中詳細(xì)分析了消滅EMC三大利器的原理。
    發(fā)表于 09-09 14:33 ?1358次閱讀

    Python代碼性能分析的命令合集

    。注意,在本教程中,我建議使用 Anaconda。1.分析代碼要檢查一 python 代碼的執(zhí)行時(shí)間,請使用**%timeit**。下
    發(fā)表于 11-25 10:43 ?10次下載

    用于MPLABX IDE的代碼性能分析插件

    MPLAB X IDE提供收集有關(guān)C代碼函數(shù)的函數(shù)級性能分析(Function Level Profiling,F(xiàn)LP)數(shù)據(jù)的功能。但是,該數(shù)據(jù)無法在未安裝MPLAB X IDE插件——代碼
    發(fā)表于 05-12 10:38 ?15次下載

    幾種檢查代碼質(zhì)量的利器介紹

    工欲善其事,必先利其器,因此,這篇文章給大家介紹幾種檢查代碼質(zhì)量的利器,Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs
    的頭像 發(fā)表于 11-02 11:04 ?1221次閱讀

    怎么用模塊觀察代碼性能表現(xiàn)

    這個(gè)神奇的模塊能讓你實(shí)時(shí)可視化地觀察Python程序執(zhí)行時(shí)每一代碼性能表現(xiàn)。 左邊的數(shù)字是每行被擊中的次數(shù)。條形顯示最近被擊中的次數(shù),較長的條意味著其被擊中的次數(shù)更多。 顏色的深淺代表著命中
    的頭像 發(fā)表于 10-21 10:53 ?285次閱讀
    怎么用模塊<b class='flag-5'>來</b>觀察<b class='flag-5'>代碼</b><b class='flag-5'>性能</b>表現(xiàn)

    鍵盤模組ATE手感測試機(jī):打造舒適鍵盤的關(guān)鍵利器

    鍵盤模組ATE手感測試機(jī):打造舒適鍵盤的關(guān)鍵利器?|深圳磐石
    的頭像 發(fā)表于 12-13 09:11 ?690次閱讀
    鍵盤模組ATE手感測試機(jī):<b class='flag-5'>打造</b>舒適鍵盤的關(guān)鍵<b class='flag-5'>利器</b>