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

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

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

Linux中提高指令緩存命中率

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux充電站 ? 作者: Vincent ? 2023-10-04 15:45 ? 次閱讀

提高指令緩存命中率

前面說(shuō)的是數(shù)據(jù)緩存,現(xiàn)在看看指令緩存命中率該如何提高。

有一個(gè)數(shù)組array,數(shù)組元素內(nèi)容為0-255之間的隨機(jī)數(shù):

int array[N];
for (i = 0; i < TESTN; i++) 
 array[i] = rand() % 256;

現(xiàn)在,要把數(shù)組中數(shù)字小于128的元素置為0,并且對(duì)數(shù)組排序。

大家應(yīng)該都能想到,有兩種方法:

  • 先遍歷數(shù)組,把小于128的元素置為0,然 后排序 。
  • 先對(duì)數(shù)組排序再遍歷數(shù)組 ,把小于128的元素置為0。
for(i = 0; i < N; i++) {
 if (array [i] < 128) 
  array[i] = 0;
}
sort(array, array +N);

先排序后遍歷的速度會(huì)比較快,為什么?

因?yàn)樵?code>for循環(huán)中會(huì)執(zhí)行很多次if分支判斷語(yǔ)句,而CPU擁有分支預(yù)測(cè)器。

如果分支預(yù)測(cè)器可以預(yù)測(cè)接下來(lái)要執(zhí)行的分支(執(zhí)行if還是執(zhí)行else),那么就可以提前把這些指令放到緩存中,CPU執(zhí)行的時(shí)候就會(huì)很快了。

如果一個(gè)數(shù)組的內(nèi)容完全隨機(jī)的話,那么分支預(yù)測(cè)器就很難進(jìn)行正確的預(yù)測(cè)。但如果數(shù)組內(nèi)容是有序的,它就會(huì)根據(jù)歷史命中數(shù)據(jù)的情況對(duì)未來(lái)進(jìn)行預(yù)測(cè),那命中率就會(huì)很高,所以先排序后遍歷的速度會(huì)比較快。

怎么驗(yàn)證指令緩存命中率的情況呢?

Linux下,可以使用Perf性能分析工具進(jìn)行驗(yàn)證。通過(guò)-e選項(xiàng),指定branch-loadsbranch-loads-misses事件,可以分別統(tǒng)計(jì)出分支預(yù)測(cè)成功的次數(shù)分支預(yù)測(cè)失敗的次數(shù) ,通過(guò)L1-icache-load-misses事件也能統(tǒng)計(jì)一級(jí)緩存中指令未命中的次數(shù)。但是,這些性能事件都屬于硬件事件,perf工具能否統(tǒng)計(jì)這些事件取決于CPU是否支持以及芯片原廠是否去實(shí)現(xiàn)了該接口,我看很多都是不支持或者沒(méi)實(shí)現(xiàn)的。

另外,在Linux內(nèi)核中,可以看到大量的likelyunlikely宏,并且它們都出現(xiàn)if語(yǔ)句中,這 兩個(gè)宏的作用就是為了提高性能 。

這是顯示預(yù)測(cè)概率的宏,如果你覺(jué)得CPU的分支預(yù)測(cè)不準(zhǔn),但if中條件為"真"的概率很高,那么你就可以使用likely()括起來(lái),以此提升性能。

#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
if (likely(a == 1)) …
聲明:本文內(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)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207920
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    598

    瀏覽量

    35507
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    223

    瀏覽量

    26580
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    411

    瀏覽量

    25824
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CPU一級(jí)緩存與二級(jí)緩存深度分析

    CPU緩存:通過(guò)優(yōu)化的的讀取機(jī)制,可以使CPU讀取緩存命中率非常高,也就是說(shuō)CPU下一次要讀取的數(shù)據(jù)90%都在緩存中,只有大約10%需要從內(nèi)存讀取。
    的頭像 發(fā)表于 04-16 10:52 ?1.9w次閱讀
    CPU一級(jí)<b class='flag-5'>緩存</b>與二級(jí)<b class='flag-5'>緩存</b>深度分析

    AM335x SDK關(guān)于cache的命中率,請(qǐng)問(wèn)有能改善cache命中率的有效方法嗎?請(qǐng)問(wèn)怎么才能控制RAM映射到cache?

    ()④CP15DCacheEnable()⑤CP15DCacheCleanFlush()①~④確定能使cache無(wú)效/有效嗎?⑤是否有清除cache的功能?■二:關(guān)于cache的命中率 請(qǐng)問(wèn)有能改善cache命中率的有效方法
    發(fā)表于 06-21 04:06

    緩存命中率低的原因是什么?

    匯編中加載數(shù)據(jù)用的是LDW,5個(gè)cycle之后就會(huì)到達(dá)寄存器,并沒(méi)有體現(xiàn)出緩存命中率的問(wèn)題。LDW是固定5個(gè)cycle,請(qǐng)問(wèn)緩存命中率低,帶來(lái)的延遲體現(xiàn)在什么地方?難道是LDW之前,有
    發(fā)表于 05-25 08:46

    緩存的作用和設(shè)計(jì)模式

    ,高并發(fā)查詢這個(gè)key,擊穿緩存,直接請(qǐng)求數(shù)據(jù)庫(kù);緩存雪崩:緩存Key大批量到過(guò)期時(shí)間,導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大;命中率緩存設(shè)計(jì)的是否合理要看
    發(fā)表于 01-05 17:57

    架構(gòu)設(shè)計(jì)應(yīng)用級(jí)緩存回收策略

    命中率。什么是緩存命中率緩存命中率是從緩存中讀取數(shù)據(jù)的次數(shù)與總讀取次數(shù)的比例,
    發(fā)表于 01-14 17:08

    一種高能效的結(jié)構(gòu)不對(duì)稱指令緩存

    據(jù)不完全對(duì)應(yīng)的簡(jiǎn)化標(biāo)記管理位。該結(jié)構(gòu)采用了命中推斷和變長(zhǎng)指令取指兩種創(chuàng)新技術(shù),其中基于命中推斷技術(shù)解決了指令緩存
    發(fā)表于 11-22 10:52 ?2次下載
    一種高能效的結(jié)構(gòu)不對(duì)稱<b class='flag-5'>指令</b><b class='flag-5'>緩存</b>

    基于節(jié)點(diǎn)中心性度量的緩存機(jī)制

    為了降低內(nèi)容中心網(wǎng)絡(luò)的緩存內(nèi)容冗余度和提高緩存內(nèi)容命中率,提出一種基于節(jié)點(diǎn)中心性度量的緩存機(jī)制(CMC)。CMC利用控制器獲取整個(gè)網(wǎng)絡(luò)的拓?fù)?/div>
    發(fā)表于 01-17 11:00 ?0次下載
    基于節(jié)點(diǎn)中心性度量的<b class='flag-5'>緩存</b>機(jī)制

    基于概率存儲(chǔ)的啟發(fā)式住處中心網(wǎng)絡(luò)內(nèi)容緩存方法

    概率時(shí)綜合考慮內(nèi)容熱度和緩存放置收益,即內(nèi)容熱度越高,放置收益越大的內(nèi)容被緩存的概率越高。實(shí)驗(yàn)結(jié)果表明,PCP在緩存服務(wù)、緩存
    發(fā)表于 02-11 11:16 ?0次下載

    Web代理服務(wù)器緩存優(yōu)化

    Web代理服務(wù)器緩存能在一定程度上減少網(wǎng)絡(luò)擁塞現(xiàn)象和用戶的訪問(wèn)延遲,減輕服務(wù)器負(fù)載。然而Web代理緩存緩存命中率和字節(jié)命中率較低,并不能很
    發(fā)表于 03-06 10:00 ?0次下載
    Web代理服務(wù)器<b class='flag-5'>緩存</b>優(yōu)化

    基于節(jié)點(diǎn)熱度與緩存替換的ICN協(xié)作緩存

    內(nèi)容,考慮網(wǎng)絡(luò)流量在不同區(qū)域和不同時(shí)間段內(nèi)的差異性,周期性地計(jì)算節(jié)點(diǎn)熱度和緩存替換,并將其作為內(nèi)容是否被緩存在節(jié)點(diǎn)上的度量指標(biāo)。實(shí)驗(yàn)結(jié)果表明,相對(duì)于LCE和CLFM策略,該策略能有效降低平均請(qǐng)求跳數(shù)和源端
    發(fā)表于 03-29 15:17 ?1次下載

    Linux文件緩存使用情況和命中率查看的工具詳細(xì)概述

    這里總結(jié)幾個(gè)Linux文件緩存(page cache)使用情況、命中率查看的工具。
    的頭像 發(fā)表于 06-18 17:51 ?8837次閱讀
    <b class='flag-5'>Linux</b>文件<b class='flag-5'>緩存</b>使用情況和<b class='flag-5'>命中率</b>查看的工具詳細(xì)概述

    一種基于內(nèi)容優(yōu)先級(jí)的緩存替換策略PFC

    ,將其作為緩存替換的參考因子進(jìn)行緩存替換決策,以提高重要內(nèi)容的命中率和可用性。在 ndnsim仿真平臺(tái)上的測(cè)試結(jié)果表明,相比LRU和FIFO策略,PF℃策略在不影響全局
    發(fā)表于 03-24 14:48 ?9次下載
    一種基于內(nèi)容優(yōu)先級(jí)的<b class='flag-5'>緩存</b>替換策略PFC

    把進(jìn)程綁定到某個(gè) CPU 上運(yùn)行是怎么實(shí)現(xiàn)?

    、L2緩存,而L3緩存是共用的。如果一個(gè)進(jìn)程在核心間來(lái)回切換,各個(gè)核心的緩存命中率就會(huì)受到影響。相反如果進(jìn)程不管如何調(diào)度,都始終可以在一個(gè)核心上執(zhí)行,那么其數(shù)據(jù)的L1、L2
    的頭像 發(fā)表于 07-02 09:55 ?2316次閱讀

    一個(gè)GPU工作負(fù)載的調(diào)查

    通過(guò)減少指令緩存命中提高 GPU 性能
    的頭像 發(fā)表于 07-05 16:30 ?620次閱讀
    一個(gè)GPU工作負(fù)載的調(diào)查

    CPU緩存那些事兒

    拜訪過(guò)之后,與它相鄰地址的數(shù)據(jù)有很大概率也會(huì)被拜訪,將更多或許被拜訪的數(shù)據(jù)存入緩存,可以進(jìn)步緩存命中率
    的頭像 發(fā)表于 09-10 10:57 ?584次閱讀
    CPU<b class='flag-5'>緩存</b>那些事兒