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

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

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

應(yīng)對(duì)分支預(yù)測(cè)有哪些優(yōu)化措施

麥辣雞腿堡 ? 來(lái)源:軒哥談芯 ? 作者:義軒 ? 2023-11-29 17:32 ? 次閱讀

應(yīng)對(duì)分支預(yù)測(cè)有哪些優(yōu)化措施

下面再來(lái)看一下分支預(yù)測(cè),這也是 ChatGPT 給出的一個(gè)簡(jiǎn)易答案

// 不利于流水線的循環(huán)結(jié)構(gòu)
for (int i = 0; i < N; ++i) {
    if (condition) {
        // 循環(huán)體
    }
}


// 更有利于流水線的循環(huán)結(jié)構(gòu)
if (condition) {
    for (int i = 0; i < N; ++i) {
        // 循環(huán)體
    }
}

上面的案例就是說(shuō)明,我們應(yīng)該在循還外進(jìn)行條件判斷,這樣即便是預(yù)測(cè)失敗概率 10%,也只有 10%的回滾情況,但是如果放到循環(huán)體內(nèi)部,那么這個(gè) 10%的回滾操作將被執(zhí)行 N 次。

除了把判斷語(yǔ)句從循環(huán)體中挪出來(lái),還有一些小的技巧供大家參考一下。

合并條件,盡可能減少分支預(yù)測(cè)失敗時(shí)對(duì)效率的影響

優(yōu)化前:

if(case1){    if( case2 )    {        do();    }}

優(yōu)化后:

if( case1 && case2 ){    do();}

優(yōu)化前:

if( case1 == 0 && case2 == 0 && case3 == 0 ){    do();}

優(yōu)化后:

if( ( case1 | case2 | case3 ) == 0 ){    do();}

跳轉(zhuǎn)避免分支預(yù)測(cè)

if else改寫成switch形式(switch使用的指針 list 進(jìn)行跳轉(zhuǎn)的指令,直接跳轉(zhuǎn)到對(duì)應(yīng)分支)。這樣就相當(dāng)于將多個(gè)函數(shù)使用函數(shù)指針的形式存儲(chǔ)到數(shù)組中,然后通過(guò) case 查表,直接進(jìn)行調(diào)用。

直接運(yùn)算,避免判斷

先說(shuō)明一些基本位運(yùn)算知識(shí):

|x| > > 31 = 0     // 非負(fù)數(shù)右移31為一定為0
~(|x| > > 31) = -1 // 0取反為-1


-|x| > > 31 = -1   // 負(fù)數(shù)右移31為一定為0xffff = -1
~(-|x| > > 31) = 0 // -1取反為0


-1 = 0xffff
-1 & x = x        // 以-1為mask和任何數(shù)求與,值不變

如對(duì)于

if(value < 0 ) value = 0

可改成

value &= ~(value > > 31 )

再比如:

if (data[c] >= 128){    sum += data[c];}

可以優(yōu)化為:

int t = (data[c] - 128) >> 31; // 非負(fù)數(shù)右移 310,負(fù)數(shù)右移則為 -1sum += ~t & data[c];     // 這里利用 0 和 -1,正好等同于條件,大于 128 忽略,小于 128
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227228
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347780
  • 預(yù)測(cè)
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    12331
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CPU分支預(yù)測(cè)對(duì)程序的影響

    分支預(yù)測(cè)的英文名字是“Branch Prediction”,如果大家在Google上搜索這個(gè)關(guān)鍵字,可以看到關(guān)于分支預(yù)測(cè)的很多內(nèi)容。不過(guò),要搞清楚
    發(fā)表于 09-23 14:11 ?1022次閱讀

    嵌入式處理器動(dòng)態(tài)分支預(yù)測(cè)機(jī)制研究與設(shè)計(jì)

    嵌入式處理器動(dòng)態(tài)分支預(yù)測(cè)機(jī)制研究與設(shè)計(jì)針對(duì)嵌入式處理器的特定應(yīng)用環(huán)境,通過(guò)對(duì)傳統(tǒng)神經(jīng)網(wǎng)絡(luò)算法的改進(jìn),結(jié)合定制的分支目標(biāo)緩沖,提出一種復(fù)合式動(dòng)態(tài)分支預(yù)
    發(fā)表于 10-06 09:53

    如何應(yīng)對(duì)歐盟玩具安全新指令的措施

    歐盟玩具安全新指令的措施實(shí)施后,相關(guān)企業(yè)應(yīng)何應(yīng)對(duì)呢?北測(cè)檢測(cè)作為第三方權(quán)威檢測(cè)機(jī)構(gòu),建議相關(guān)企業(yè)積極應(yīng)對(duì)歐盟玩具安全新指令的措施,盡量做到以下幾點(diǎn):  1.加快了解國(guó)際玩具標(biāo)準(zhǔn)體系。玩
    發(fā)表于 01-18 11:22

    優(yōu)化技巧:提前if判斷幫助CPU分支預(yù)測(cè)

    摘要: 在stackoverflow上有一個(gè)非常有名的問(wèn)題:為什么處理有序數(shù)組要比非有序數(shù)組快?,可見(jiàn)分支預(yù)測(cè)對(duì)代碼運(yùn)行效率非常大的影響。要提高代碼執(zhí)行效率,一個(gè)重要的原則就是盡量避免CPU把
    發(fā)表于 06-13 16:27

    ADC輸出雜散的成因是什么?哪些優(yōu)化措施

    Giga ADC 是 TI 推出的采樣率大于 1GHz 的數(shù)據(jù)轉(zhuǎn)換產(chǎn)品系列,主要應(yīng)用于微波通信、衛(wèi)星通信以及儀器儀表。本文介紹了 Giga ADC 的主要架構(gòu)以及 ADC 輸出雜散的成因分析,以及優(yōu)化性能的主要措施
    發(fā)表于 04-07 06:23

    如何對(duì)分布式天線系統(tǒng)(DAS)進(jìn)行優(yōu)化?

    什么是分布式天線系統(tǒng)?如何對(duì)分布式天線系統(tǒng)(DAS)進(jìn)行優(yōu)化?
    發(fā)表于 05-24 06:03

    對(duì)高級(jí)持久性威脅(APT)什么應(yīng)對(duì)措施?

    高級(jí)持久性威脅(APT)的特點(diǎn)是什么?對(duì)高級(jí)持久性威脅(APT)什么應(yīng)對(duì)措施?
    發(fā)表于 05-24 06:40

    什么是內(nèi)存優(yōu)化那些優(yōu)化措施?

    什么是內(nèi)存優(yōu)化?那些優(yōu)化措施?
    發(fā)表于 01-14 06:22

    安騰處理器中多級(jí)分支預(yù)測(cè)機(jī)制

    分支預(yù)測(cè)技術(shù)可消除分支指令之后損失的周期,防止流水線斷流。高比率的分支預(yù)測(cè)精確度是高性能微處理器性能的保證。本文詳細(xì)分析了安騰處理器(Ita
    發(fā)表于 08-21 12:11 ?12次下載

    示波管常見(jiàn)故障分析及其應(yīng)對(duì)措施

    示波管常見(jiàn)故障分析及其應(yīng)對(duì)措施。
    發(fā)表于 05-05 11:12 ?8次下載

    cs優(yōu)化灰色預(yù)測(cè)模型

    cs優(yōu)化灰色預(yù)測(cè)模型,布谷鳥搜索算法,灰色預(yù)測(cè)模型。
    發(fā)表于 08-05 18:37 ?5次下載

    揭秘LDO的噪音類型及應(yīng)對(duì)措施

    揭秘LDO的噪音類型及應(yīng)對(duì)措施
    發(fā)表于 02-09 17:05 ?7次下載

    MOS管開通過(guò)程的米勒效應(yīng)及應(yīng)對(duì)措施

    MOS管開通過(guò)程的米勒效應(yīng)及應(yīng)對(duì)措施
    的頭像 發(fā)表于 11-27 17:52 ?2929次閱讀
    MOS管開通過(guò)程的米勒效應(yīng)及<b class='flag-5'>應(yīng)對(duì)</b><b class='flag-5'>措施</b>

    CPU中什么是分支預(yù)測(cè)

    什么是分支預(yù)測(cè) 在超標(biāo)量的流水線架構(gòu)上,我們得知,CPU 在運(yùn)行指令的時(shí)候,會(huì)在一個(gè)時(shí)鐘上做多個(gè)操作,也就是涉及到調(diào)用前后相關(guān)的指令,比如我們?cè)谝粋€(gè)簡(jiǎn)單的判斷語(yǔ)句中。 if (n > 0 ) { n
    的頭像 發(fā)表于 11-29 17:22 ?877次閱讀

    EMI(電磁干擾):原理、影響與應(yīng)對(duì)措施?

    EMI(電磁干擾):原理、影響與應(yīng)對(duì)措施?|深圳比創(chuàng)達(dá)電子EMC
    的頭像 發(fā)表于 03-26 11:22 ?890次閱讀
    EMI(電磁干擾):原理、影響與<b class='flag-5'>應(yīng)對(duì)</b><b class='flag-5'>措施</b>?