色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

部署CoreMark從未這么簡單

技術讓夢想更偉大 ? 來源:裸機思維 ? 2023-06-06 14:24 ? 次閱讀

在枯燥的MCU生態里,有沒這樣一個往群里大叫一聲“不服?跑個分看看”,然后搬個小板凳躲在角落里吃瓜的機會呢?

簡單來說,Coremark是一個專門測量嵌入式MCU(或者CPU)性能的跑分軟件,用來替代已經過時且充滿爭議的Dhrystone跑分。Coremark包含了一系列算法:列表操作(查找和排序)、常用的矩陣運算、狀態機以及CRC——這樣做的目的據說是為了克服Dhrystone過于依賴libc庫的缺點。

這里記住結論就行:Dhrystone低級、過時、踩一腳;Coremark高級拉一把!

【部署CoreMark從未這么簡單】

雖然Coremark的源代碼在Github上可以直接下載,但拿回家后還需要針對你的目標處理器進行一番移植。總的來說,移植需要解決兩類問題:

提供對printf的重映射支持

提供一個足夠精準的時間測量手段

哎,巧了不是。如果你使用的是Cortex-M處理器,并且習慣了在MDK環境下耕耘,只要借助 perf_counter 的幫助,在RTE里簡單的勾選幾下就可以迅速的在任意Cortex-M處理器中部署 Coremark。

首先,關于MDK下實現通用的printf功能

從 v2.0.0開始perf_counter 內置了 Coremark,并針對Cortex-M處理器完成了幾乎所有的移植工作,這意味著你只需要在RTE中勾選對應的模塊,即可完成對Coremark的部署(如下圖所示):

4cd74c3c-042d-11ee-90ce-dac502259ad0.png

如果你已經通過往期文章《【喂到嘴邊了的模塊】超級嵌入式系統“性能/時間”工具箱》熟悉過perf_counter的使用,那么接下來只要在超級循環里加入如下的代碼就大功告成了:

#include"perf_counter.h"


int main(void)
{
    
    printf("Coremark 1.0
");
    
    coremark_main();
    
    while(1) {


    }
    
}
對應的運行效果如下(這里以Cortex-M55 r0p0為例,r0p1跑分會更高一些):

4cef5002-042d-11ee-90ce-dac502259ad0.png

可以看到,這里的跑分結果是4.367429

如果你之前從未用過 perf_counter,則推薦通過文章《【喂到嘴邊了的模塊】超級嵌入式系統“性能/時間”工具箱》來了解詳細的部署和使用方式。這里就不再贅述。 值得特別強調的是,perf_counter 已經加入 KEIL的官方索引列表,因此小伙伴可以直接從 Pack Installer 中找并安裝它的最新版本:

4cf8dd2a-042d-11ee-90ce-dac502259ad0.png

如果你的網絡不太好,無法通過Pack Installer直接安裝,也可以在關注公眾號【裸機思維】后向后臺發送關鍵字 perf_counter 來獲取網盤鏈接【常見問題】

Coremark雖然簡單直接,但在使用上仍然存在一些注意事項:

Coremark跑分的制約因素

一般來說,Coremark的結果肯定會受到以下幾個因素的影響: 1. 優化等級

不要奢望 -O0 能跑出多高的結果。但如果你的項目從來都只用 -O0 那么跑Coremark時也一定要用 -O0 ——因為這反應了你使用時候的真實狀況。

很多芯片公司Arm一樣都會用最好的編譯器在最高的速度優化下跑Coremark,這意味著,我們通常可以在 Arm Compiler 6下使用 -Omax跑出當前硬件平臺的最佳結果。

很多小伙伴可能不知道如何在 MDK 環境下使用 -Omax,因為Optimisation下拉列表中根本沒有 -Omax-Omax 是一個比 -Ofast要更上一個臺階的優化等級(用過都說好),可以說是MDK的一個隱藏技巧:

請在 Msc Controls 中直接添加 -Omax,同時

勾選 Link-Time-Optmisation

4d116174-042d-11ee-90ce-dac502259ad0.png

需要強調的是,一旦在 Misc Controls文本框中添加了 -Omax,無論你在 Optimization 下拉列表中選擇了哪個優化等級,都會被 -Omax 覆蓋掉。為了避免誤導后來人,推薦在這種情況下在該列表中選擇

2. 程序存儲器的速度以及RAM的訪問速度

其實用腳指頭想也知道:Coremark的跑分會受到存儲器訪問速度的影響。很多大公司會將程序保存在0 wait state 的 RAM中來跑 Coremark,以求獲得最佳的結果。

我猜很多小伙伴看到這里可能就炸了:我們平時都是在Flash里跑代碼,你拿RAM跑出來的數據糊弄我?這不是欺負老實人么?

實際并非如此,原因如下:

1)對很多大公司來說,他要給客戶提供理想狀況下所能達到的最高評分,方便用戶選型的時候了解芯片的能力上限(如果上限都達不到就別勉強了)

2)很多芯片會專門提供用于運行代碼的 PRAMSRAM或者 TCM(Tightly Couple Memory),因此,只要合理安排程序的存儲器布局,在核心應用和算法上,的確可以跑出官方給出的最大性能

從另外一個角度來說,以Cortex-M處理器為例,通過Coremark,對比Arm提供的最高跑分,我們可以很容易的評估當前芯片的 Flash速度是否拖累了處理器——從跑分的差異上判斷拖累的程度。比如,很多時候,使用片內Flash跑 CoremarkXIPQSPI)連接的片外FlashCoremark 可以看出巨大的跑分差異,給了我們一個定量判斷性能損失的參考手段——注意,只是參考,不是絕對的。

此外,RAM的速度也會對Coremark產生很大的影響,簡單來說,0 wait stateRAM1~2wait state RAM以及 SDRAMCoremark的結果是截然不同的——這同樣給了我們一個直觀感受不同RAM性能差異的參考手段。

3. 是否存在cache

有沒有cache,有多大的cache,以及cache覆蓋ROM還是RAMCoremark結果的影響是巨大的。比如,哪怕你用 XIP 來跑 Coremark(或者用SDRAM來存儲數據),只要你Cache到位,其跑分幾乎和理想狀況相差無幾。

以上內容用腳趾都能想出來。接下來給大家說一個由cache引起的反直覺的現象:

前面我們說過,如果你想跑出最佳的跑分,就應該使用編譯器的最高性能優化,對Cortex-MArm Compiler 6來說就是 -Omax + Link Time Optimisation

有些芯片雖然為Flash提供了一個專門的Cache,但由于其尺寸有限(通常是為了降低功耗或者芯片面積),會出現 -Omax + Link Time Optimisation優化下跑分反而不如 -Oz 或者 -Os 的情況。

首先這不是編譯器的BUG,也不是你忘記給電腦開光導致來了臟東西。原因其實很簡單:很多編譯器在面向性能優化的時候會進行瘋狂的循環展開,這會導致原本小巧的循環體突然體積暴漲——如果循環展開后的體積超過了cache所能容忍的程度,就會在這個關鍵的循環中頻繁出現 cache miss——相當于處理器是直接從Flash上讀取代碼。

相反,在-Oz-Os 通常不會進行此類循環展開,因此在執行循環熱點時,0 wait statecache發揮了高速緩存應有的作用,與直接在Flash上讀取代碼相比,極大的提高了程序的運行速度。

這里的關鍵其實是 cache 的大小以及循環展開后的體積。一般來說,大家常用的一線廠商芯片其 Flash Cache尺寸還是很得體的,一般不會出現上述情況,可以放心食用。

Coremark必須跑夠10秒以上

這是Coremark為了跑出有效跑分而在算法中做出的硬性規定,如果你的芯片頻率過高,則很可能會出現類似如下的提示:

4d50131a-042d-11ee-90ce-dac502259ad0.png

ERROR! Must execute for at least 10 secs for a valid result.

觀察Total time (secs)可以知道Coremark實際運行了多少秒。

要解決這一問題也很簡單:直接在工程中定義宏 ITERATIONS,并給出一個較大的值即可,比如3000:

4d610d00-042d-11ee-90ce-dac502259ad0.png

重新編譯,調試:

4d6e33f4-042d-11ee-90ce-dac502259ad0.png

Coremark的結果處理

細心的小伙伴可能會發現一個現象,在很多新聞報道中,某些芯片廠商會聲稱自己的芯片Coremark跑分高達幾千分,為什么我們這里所展示的Coremark跑分只有個位數呢? 其實二者都沒錯,幾千分的那個結果是將芯片的頻率考慮在內,而這里個位數的跑分是以1MHz作為參考——也就是所謂的 “每兆赫茲Coremark”——顯然,將結果換算成 1MHz 為單位的結果更為直觀,也方便大家將不同頻率的芯片拿到一起作比較,因此 perf_counter 在移植 Coremark 時也選擇以 每MHz Coremark作為結果輸出的標準格式。




審核編輯:劉清

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

    關注

    68

    文章

    19312

    瀏覽量

    230035
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9104

    瀏覽量

    367794
  • 存儲器
    +關注

    關注

    38

    文章

    7494

    瀏覽量

    163916
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114752
  • Cortex-M
    +關注

    關注

    2

    文章

    229

    瀏覽量

    29776

原文標題:【嵌入式】不服?跑個分看看!——Coremark篇

文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Cortex-M的CoreMark性能測試

    1 CoreMark簡介 CoreMark是由EEMBC(Embedded Microprocessor Benchmark Consortium)的Shay Gla-On于2009年提出的一項基準
    的頭像 發表于 05-01 01:24 ?8407次閱讀
    基于Cortex-M的<b class='flag-5'>CoreMark</b>性能測試

    程序簡單,電路也簡單這么就是達不到效果

    程序簡單,電路也簡單這么就是達不到效果,求大神指出錯誤
    發表于 06-09 17:50

    如何將CoreMark程序移植到STM32

    轉載 一個比較好的資料,正好自己也要研究這塊CoreMark是一項測試處理器性能的基準測試。代碼使用C語言寫成,包含:列舉,數學矩陣操作和狀態及CRC等運算法則。目前CoreMark已迅速成為測量
    發表于 11-17 00:54

    【NUCLEO-F412ZG試用體驗】終結之CoreMark跑分

    。比較簡單的是利用systick,如果使用標準庫函數,可以寫一個類似HAL庫中HAL_GetTick()函數功能。這樣修改CoreMark代碼會比較少,如下圖所示還有就是stm32工程得stack
    發表于 12-25 20:38

    GD32F450_Coremark

    GD32F450_Coremark
    發表于 01-30 07:39

    至簡設計法為什么這么簡單

    至簡設計法為什么這么簡單
    發表于 02-07 13:27

    GD32F450_Coremark

    GD32F450_Coremark
    發表于 02-08 09:32

    電源變動測試,就是這么簡單

    電源變動測試,就是這么簡單!一臺搞定
    發表于 05-30 15:30

    如何將CoreMark程序移植到STM32

    說起CoreMarK,可能對于很多人來說并不陌生。經常看到有人在談及一些中央處理器時往往會提到它的COREMARK是多少多少。它其實就是一項用來測試各類中央處理器性能的基準代碼。代碼使用C語言寫成
    發表于 11-29 19:53 ?487次閱讀
     如何將<b class='flag-5'>CoreMark</b>程序移植到STM32

    電機軸維修原來這么簡單

    電機軸維修原來這么簡單
    發表于 02-28 16:17 ?15次下載

    APM32F407xG移植coremark教程

    APM32F407xG移植coremark教程
    發表于 09-29 15:51 ?1次下載

    【先楫半導體HPM6750EVKMINI評估板試用體驗】三、coremark跑分測試

    本文來源電子發燒友社區,作者:dql2016, 帖子地址: https://bbs.elecfans.com/jishu_2289243_1_1.html HPM6750宣稱是目前coremark
    的頭像 發表于 11-17 15:27 ?952次閱讀
    【先楫半導體HPM6750EVKMINI評估板試用體驗】三、<b class='flag-5'>coremark</b>跑分測試

    【試用報告】龍芯先鋒板:CPU性能測試—CoreMark和計算質數

    簡單而又精密的基準測試程序,是專門為測試處理器核功能而設計的。運行CoreMark會產生一個“單個數字”的分數,(從而)允許用戶在(不同)CPU之間進行快速比較。 簡單來說,就是一個
    的頭像 發表于 02-21 16:35 ?6116次閱讀

    大神測評 | 結果出乎意料! 先楫HPM6750 CoreMark 跑分測試

    周末福利大放送!本期特別分享先楫產品體驗官@xusiwei1236在EEWORLD測評活動中針對HPM6750CoreMark跑分測試,來看看HPM6750在這場“芯片賽跑”中如何突出重圍
    的頭像 發表于 06-13 10:14 ?2356次閱讀
    大神測評 | 結果出乎意料! 先楫HPM6750 <b class='flag-5'>CoreMark</b> 跑分測試

    RK3566的CoreMark測試

    EEMBC 的 CoreMark? 評分是一種比較通用的基準測試方式,用于測量嵌入式系統中使用的微控制器(MCU)和中央處理單元(CPU)的性能,可以幫助人們比較不同的 CPU 架構的性能表現
    的頭像 發表于 10-09 17:52 ?2320次閱讀
    RK3566的<b class='flag-5'>CoreMark</b>測試
    主站蜘蛛池模板: 国产午夜精品一区二区理论影院 | 国产精品人妻无码久久久蜜桃| 久久久久久久电影| 香港论理午夜电影网| 高H各种PLAY全肉NP| 碰超成人在线公开免费视频| 91夫妻交友论坛| 两性午夜刺激爽爽视频| 在线视频 亚洲| 97久久久久| 久久人妻AV一区二区软件| 亚洲免费无码av线观看| 国产亚洲精品久久久无码狼牙套| 网址在线观看你懂我意思吧免费的| 福利社的阿姨| 无码人妻视频又大又粗欧美| 国产成人自产拍免费视频| 天天躁日日躁狠狠躁午夜剧场| 姉调无修版ova国语版| 丰满大爆乳波霸奶| 日韩AV片无码一区二区三区不卡| 插曲的痛30分钟视频最新章节| 日韩成人黄色| 国产激情视频在线播放| 性色香蕉AV久久久天天网| 国产在线精品亚洲第一区| 亚洲中文有码字幕日本| 久久免费看少妇高潮A片特爽| 2021国产精品视频| 啪啪羞羞GIF男女0OXX动态图| 高挑人妻无奈张开腿| 日韩高清一区二区三区不卡| 高肉黄暴NP文公交车| 亚欧洲乱码视频一二三区| 精品国产三级a| 99国产精品欲AV蜜桃臀麻豆| 三级黄色a| 久久88综合| silk118中文字幕无删减| 毛片手机在线看| 成人免费小视频|