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

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

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

關(guān)于CPU運(yùn)行速度計(jì)算詳解

FPGA之家 ? 來源: 裸機(jī)思維 ? 作者:GorgonMeducer 傻孩子 ? 2021-04-09 18:19 ? 次閱讀

【說在前面的話】

相對人的感官來說CPU跑的太快了——即便是人們常常用來描述時(shí)間短暫的“一眨眼功夫”對CPU來說也是及其“漫長”的好幾百毫秒了——仔細(xì)想想有幾個(gè)人能在一秒鐘內(nèi)連續(xù)眨十次眼睛呢?正因?yàn)槿绱?,即便是超級循環(huán)里面順次執(zhí)行的多個(gè)任務(wù),在人類看來也往往是“一瞬間就執(zhí)行完了”。那么CPU究竟跑的有多快呢?是很快、非常快還是快得不得了?如果我們繼續(xù)站在人類的視角考慮這個(gè)問題,其抽象程度無異于思考“無窮大究竟是多大”。

讓我們想象著周圍的時(shí)間相對你突然都慢了下來,從微處理器的視角重新審視這個(gè)世界。

【第一個(gè)參考點(diǎn)】

“1MHz就是 1us”

“1MHz就是1us”是一個(gè)基準(zhǔn)概念,通過修改思考方式,我們就可以利用它快速而有效的解決很多實(shí)際問題。作為練習(xí),我們來嘗試依次快速的回答以下幾個(gè)問題:

假設(shè)每個(gè)時(shí)鐘脈沖都對應(yīng)一個(gè)指令周期:

已知系統(tǒng)頻率是1MHz,請問1us內(nèi)有幾個(gè)指令周期?

已知系統(tǒng)頻率是12MHz,請問1us內(nèi)有幾個(gè)指令周期?

已知系統(tǒng)頻率是11.3728MHz,請問1us內(nèi)有幾個(gè)指令周期?

已知系統(tǒng)頻率是500KHz,請問1us內(nèi)有幾個(gè)指令周期?

很顯然,如果你試圖首先計(jì)算出系統(tǒng)周期:

2ae6cb60-990f-11eb-8b86-12bb97331649.png

再用1us去相除:

2af41b44-990f-11eb-8b86-12bb97331649.png

這個(gè)過程已經(jīng)慢了。

讓我們來換一種思維模式,既然1MHz對應(yīng)1us(也就是1us對應(yīng)一個(gè)指令周期),那么12MHz就是1MHz的12倍,1us時(shí)間內(nèi)就有12個(gè)指令周期;同理可得,當(dāng)系統(tǒng)頻率分別是11.3728MHz和500KHz(0.5MHz)的時(shí)候,1us時(shí)間內(nèi)對應(yīng)的指令周期數(shù)分別是11.3728個(gè)和0.5個(gè)。

借助這個(gè)等效,我們就可以對CPU的處理能力建立更多量化的感官,比如1ms的時(shí)間內(nèi),CPU能做多少事情呢?由于1ms等于1000us,對1MHz的系統(tǒng)來說,1ms可以完成1000個(gè)指令周期,12MHz的系統(tǒng)可以完成12000個(gè)指令周期。然而1000和12000這樣的數(shù)字對于只有十個(gè)手指的人類大腦來說還是太抽象了,因此我們更進(jìn)一步,把指令周期換算成等效的代碼尺寸:

由于主流的微控制器其指令集中大多是單周期指令,我們不妨假設(shè)所有指令都是單指令周期的,這樣1個(gè)指令周期就對應(yīng)一條指令;

假設(shè)每條指令都是2個(gè)字節(jié)大?。?6位指令);

這樣,1ms時(shí)間內(nèi)1MHz的系統(tǒng)可以運(yùn)行大約2KB的代碼,一個(gè)12MHz的系統(tǒng)可以運(yùn)行24KB的代碼,依次類推。

那么2KB是什么概念呢?如果你平時(shí)有留意編譯后的代碼尺寸,2KB大約是一個(gè)基礎(chǔ)驅(qū)動(dòng)庫的尺寸,可以包含一個(gè)USART的驅(qū)動(dòng)或者實(shí)現(xiàn)電源管理;而24KB幾乎是一個(gè)小型工程應(yīng)用的尺寸了。

借助這些非常具體的數(shù)字,我們很容易拿它們和中斷處理程序進(jìn)行比較,建立直觀的認(rèn)識——比如:

中斷處理程序“執(zhí)行的是不是足夠快”?

“丟中斷的風(fēng)險(xiǎn)究竟有多大”等等?

使用中斷接收外設(shè)數(shù)據(jù)的時(shí)候會不會發(fā)生丟失?

可以肯定的是,這種忽略循環(huán)和條件分支的評估方法幾乎是一個(gè)代碼的最差情況,也就是說,在1MHz的系統(tǒng)中對于一個(gè)1KHz的毫秒中斷,中斷處理程序越接近2KB,就說明系統(tǒng)越可能“丟中斷”。

在這種情況下,除非你通過編譯器提供的等效匯編代碼仔細(xì)的計(jì)算過實(shí)際的周期數(shù),或者是通過perf_counter這樣的工具實(shí)際測量過代碼的周期消耗——確信時(shí)間上處理周期不會大于1ms且這期間不會存在其它中斷處理程序,否則你的中斷處理程序還是比2KB越小越好。

【一個(gè)真實(shí)的案例】

在一個(gè)72MHz的Cortex-M3/M4系統(tǒng)下,使用中斷模式來接收串口數(shù)據(jù),波特率為115200的情況下:

最大允許屏蔽中斷多長時(shí)間?

中斷處理程序允許的理論最大安全尺寸是多少?

首先,我們要搞清楚系統(tǒng)的指令大小和指令集的周期數(shù)情況。以ARM Cortex M3/M4為例,其指令大部分為單周期指令,支持16位指令和32位指令。為了評估中斷處理程序的尺寸上線,我們可以分別以16位指令和32位指令為基礎(chǔ)計(jì)算出兩個(gè)結(jié)果作為參考范圍;

其次,系統(tǒng)頻率為72MHz,假設(shè)USART沒有硬件FIFO,則115200的波特率在典型的“1起始位+1終止位+無校驗(yàn)位+8數(shù)據(jù)位”的配置下(每個(gè)數(shù)據(jù)幀對應(yīng)10個(gè)bit),實(shí)際上對應(yīng)最大11.52KB/s的數(shù)據(jù)率——或者說,USART完成中斷每秒鐘發(fā)生 11.52K次。至此,我們可以回答第一個(gè)問題,即在這一系統(tǒng)中最大允許屏蔽中斷多長時(shí)間——1/11.52KHz ≈87us。

也就是說,假設(shè)中斷屏蔽的時(shí)間為87us則中斷處理程序的理論最大尺寸范圍是(72 * 87 * 2)字節(jié)到(72 * 87 * 4)字節(jié),即12.528KB到25.056KB之間。取最小值12KB。

結(jié)論,中斷處理程序及其調(diào)用的子函數(shù),其尺寸總和至少要小于12KB才能確保115200波特率的接收完成中斷得到及時(shí)的響應(yīng)。由于未考慮循環(huán)、分支以及其它任務(wù)的存在,以上結(jié)果僅用于粗略的快速評估,實(shí)際代碼通常應(yīng)該遠(yuǎn)小于這一上線值。當(dāng)實(shí)際尺寸接近或者超過13KB時(shí)基本可以判定該系統(tǒng)存在無法及時(shí)穩(wěn)定的響應(yīng)中斷的可能——需要對代碼進(jìn)行進(jìn)一步的具體分析。

【結(jié)語】

“1MHz就是1us”的等效為我們提供了一個(gè)基準(zhǔn),建立了關(guān)于“CPU跑多快”最直觀的感受,同時(shí)也為評估代碼尺寸、系統(tǒng)可靠性提供了有力的參考。掌握了這個(gè)基準(zhǔn),作為一個(gè)合格的程序員,不應(yīng)該僅憑人類的感覺毫無依據(jù)評價(jià)CPU的處理能力了,“72MHz足夠快了吧?”“我已經(jīng)用了芯片的最高頻率”這種話再也不能輕易說了,我們應(yīng)該定量而不是定性的去看待這類問題。
編輯:lyn

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

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209417
  • 1Mhz
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8894

原文標(biāo)題:【實(shí)時(shí)性迷思】CPU究竟跑的有多快?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    EPSON工業(yè)級加速度計(jì)選型

    愛普生加速度計(jì)(Accelerometers)是一種工業(yè)級三軸輸出壓電式加速度傳感器,采用具有專利技術(shù)的雙音叉式石英傳感器元件和Quarts光刻技術(shù),通過壓電效應(yīng)來計(jì)算出諸如此類的內(nèi)容物體運(yùn)動(dòng)的方向
    的頭像 發(fā)表于 09-19 15:31 ?75次閱讀
    EPSON工業(yè)級加<b class='flag-5'>速度計(jì)</b>選型

    筆記本電腦CPU選購指南:如何根據(jù)個(gè)人需求精準(zhǔn)定位

    在挑選筆記本電腦的眾多考量中,CPU(中央處理器)的選擇無疑是核心中的核心。它不僅決定了機(jī)器的運(yùn)行速度與性能表現(xiàn),還直接影響到日常使用的流暢度及多任務(wù)處理的能力。本文將為您詳解如何根據(jù)個(gè)人需求與預(yù)算,在紛繁復(fù)雜的
    的頭像 發(fā)表于 07-15 14:56 ?699次閱讀

    Anthropic 發(fā)布Claude 3.5 Sonnet模型運(yùn)行速度是Claude 3 Opus的兩倍

    Anthropic 發(fā)布Claude 3.5 Sonnet最新模型 新模型在推理、知識和編碼能力評估方面超越了以前的版本和競爭對手GPT 4o模型,同時(shí)其運(yùn)行速度是Claude 3 Opus的兩倍
    的頭像 發(fā)表于 06-21 15:43 ?569次閱讀
    Anthropic 發(fā)布Claude 3.5 Sonnet模型<b class='flag-5'>運(yùn)行速度</b>是Claude 3 Opus的兩倍

    STM32上電啟動(dòng)后,會有幾率出現(xiàn)程序運(yùn)行速度變慢的現(xiàn)象,是為什么?

    大家好: 請教個(gè)問題,我上電啟動(dòng)后,會有幾率出現(xiàn)程序運(yùn)行速度變慢的現(xiàn)象,比如定時(shí)器1s閃爍一次燈,變成了5s閃爍一次。重新上電或軟復(fù)位后正常。 感覺是啟動(dòng)時(shí),STM32有幾率出現(xiàn)時(shí)鐘沒配置正確
    發(fā)表于 04-08 07:47

    stm32cubeide debug和release單片機(jī)運(yùn)行速度不一樣,在哪里進(jìn)行控制的?

    stm32cubeide debug模式和release模式單片機(jī)運(yùn)行速度不一樣,在哪里進(jìn)行控制的
    發(fā)表于 03-28 09:08

    G120電機(jī)運(yùn)行速度怎么設(shè)置?

    G120電機(jī)運(yùn)行速度怎么設(shè)置? 例如我在觸摸屏=1是高速=2中速=3是低速。 這個(gè)速度怎么設(shè)置?
    發(fā)表于 01-09 07:37

    兩軸加速度計(jì)和三軸加速度計(jì)的使用區(qū)別?

    有個(gè)問題請教一下:在靜態(tài)測量的情況下,兩軸的加速度計(jì)在測得X、Y軸上的加速度后,是不是就可以根據(jù)這兩個(gè)值和重力加速度g算出Z軸方向的加速度,這樣的話XYZ三個(gè)方向的角度也可以推導(dǎo)出來。
    發(fā)表于 12-29 06:06

    直流電機(jī)的輸出功率與運(yùn)行速度之間的關(guān)系到底是怎樣的?

    想請教各位高手兩個(gè)問題: 1、直流電機(jī)的輸出功率與運(yùn)行速度之間的關(guān)系到底是怎樣的, 最好能寫出公式 2、我這里的直流電機(jī)是通過6RA70調(diào)速的, 是否能通過降低電機(jī)的運(yùn)行速度來控制電機(jī)的輸出功率,從而節(jié)約生產(chǎn)用電呢??
    發(fā)表于 12-26 06:55

    基于事件的視覺慣性速度計(jì)

    這個(gè)速度計(jì)框架以事件數(shù)據(jù)和IMU測量作為輸入。圖中所示分別為:(a) 無人機(jī)在狹窄走廊中進(jìn)行攻擊行為。(b) 基于事件的流估計(jì)。(c) 相應(yīng)的深度估計(jì)。(d) 歸一化瞬時(shí)線速度估計(jì)結(jié)果。
    的頭像 發(fā)表于 12-18 15:43 ?340次閱讀
    基于事件的視覺慣性<b class='flag-5'>速度計(jì)</b>

    mems加速度計(jì)的量程是指什么

    Mems加速度計(jì)(Micro Electro Mechanical Systems Accelerometer)是一種微型化的加速度傳感器,可以測量物體在三個(gè)軸向上的加速度,并且廣泛地應(yīng)用于許多領(lǐng)域
    的頭像 發(fā)表于 12-15 10:21 ?1279次閱讀

    MEMS加速度計(jì)振動(dòng)校正說明

    電子發(fā)燒友網(wǎng)站提供《MEMS加速度計(jì)振動(dòng)校正說明.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 16:03 ?0次下載
    MEMS加<b class='flag-5'>速度計(jì)</b>振動(dòng)校正說明

    請問使用NRF通信影不影響程序運(yùn)行速度?

    使用NRF通信影不影響程序運(yùn)行速度?
    發(fā)表于 11-06 08:07

    如何加快32的運(yùn)行速度?

    如何會加快32的運(yùn)行速度
    發(fā)表于 11-06 07:58

    如何利用3軸加速度計(jì)計(jì)算Z方向的角度?

    現(xiàn)在想利用3軸加速度計(jì)計(jì)算Z方向的角度,但是網(wǎng)上都說需要磁力計(jì),請教有沒有一位大神知道在沒有磁力計(jì)的情況下如何計(jì)算Z方向角度
    發(fā)表于 10-30 07:05

    如何看單片機(jī)里程序改了之后運(yùn)行速度的變化的?

    請問大家平時(shí)是怎么看單片機(jī)里程序改了之后運(yùn)行速度的變化的?
    發(fā)表于 10-30 07:00