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

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

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

memset會(huì)導(dǎo)致一大塊內(nèi)存進(jìn)cache嗎?

冬至子 ? 來(lái)源:Arm精選 ? 作者:baron ? 2023-11-07 16:00 ? 次閱讀

Arm 體系結(jié)構(gòu)中,我們知道大多數(shù)的 normal memory 的配置都是 write allocation 和 read allocation 的,即當(dāng)寫(xiě)一塊內(nèi)存或讀一塊內(nèi)存的時(shí)候,如果 miss 了,那么會(huì)將該物理內(nèi)存緩存到 cache 中。

那么就帶來(lái)一個(gè)這樣的思考,如果我執(zhí)行 memset(a, b, len),len 是一個(gè)很大的數(shù),即對(duì)一大塊內(nèi)存清 0,那么這一大塊內(nèi)存數(shù)據(jù) (此時(shí)都是 0 的數(shù)據(jù)) 都需要被緩存到 cache 嗎?這豈不是造成 cache 的浪費(fèi)?一下就把 cache 占滿了?

在之前的微架構(gòu),也許是真的存在此問(wèn)題的。然后在近些年的微架構(gòu)中,可通過(guò) “Write streaming mode” 解決。具體介紹如下,我們就以 Cortex-A720 為例,進(jìn)一步說(shuō)明。

Cortex-A720 核心支持 Write streaming mode,有時(shí)也稱(chēng)為讀分配模式,對(duì)于 L1 和 L2 緩存都支持。

在讀不命中或?qū)懖幻袝r(shí),會(huì)向 L1 或 L2 緩存分配緩存行。然而,寫(xiě)入大塊數(shù)據(jù)可能會(huì)使緩存中充滿不必要的數(shù)據(jù)。這不僅會(huì)浪費(fèi)電力,也會(huì)降低性能,因?yàn)檎麄€(gè)線路會(huì)被后續(xù)寫(xiě)入覆蓋(例如使用 memset() 或 memcpy())。

在某些情況下,不需要在寫(xiě)入時(shí)分配緩存行。例如,當(dāng)執(zhí)行 C 標(biāo)準(zhǔn)庫(kù)的 memset() 函數(shù)來(lái)將大塊內(nèi)存清零為已知值時(shí)。

為了防止不必要的緩存行分配,內(nèi)存系統(tǒng)會(huì)檢測(cè) core 何時(shí)寫(xiě)入了一系列完整的緩存行。如果在可配置數(shù)量的連續(xù)線路填充上檢測(cè)到這種情況,那么它會(huì)切換到寫(xiě)入流模式。

在寫(xiě)入流模式下,加載操作行為與正常情況相同,仍然可能引起線路填充。
寫(xiě)入仍然在緩存中查找,但如果未命中,則會(huì)寫(xiě)入 L2 或 L3 緩存,而不會(huì)啟動(dòng)線路填充 L1。

在內(nèi)存系統(tǒng)切換到寫(xiě)入流模式之前,CHI 主控器或 AXI 主控器接口可能會(huì)觀察到超過(guò)指定數(shù)量的線路填充。

寫(xiě)入流模式保持啟用,直到以下情況之一發(fā)生:

檢測(cè)到一個(gè)不是完整緩存行的可緩存寫(xiě)入突發(fā)。

存在后續(xù)加載操作,其目標(biāo)與未完成的寫(xiě)入流相同。

當(dāng) Cortex-A720 核心切換到寫(xiě)入流模式后,內(nèi)存系統(tǒng)會(huì)繼續(xù)監(jiān)視總線流量。當(dāng)它觀察到一系列完整的緩存行寫(xiě)入時(shí),會(huì)向 L2 或 L3 緩存發(fā)出信號(hào),以進(jìn)入寫(xiě)入流模式。

寫(xiě)入流閾值定義了在存儲(chǔ)操作停止引起緩存分配之前,連續(xù)寫(xiě)入的緩存行數(shù)量。您可以通過(guò)寫(xiě)入寄存器 IMP_CPUECTLR_EL1 來(lái)配置每個(gè)緩存(L1、L2 和 L3)的寫(xiě)入流閾值。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    31

    文章

    5343

    瀏覽量

    120376
  • Cache
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    28346
  • Cortex-A7
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    16504
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言內(nèi)存知識(shí)總結(jié):memset函數(shù)和calloc函數(shù)

    memset(翻譯:清零)是計(jì)算機(jī)中C/C++語(yǔ)言初始化函數(shù)。作用是將某一塊內(nèi)存中的內(nèi)容全部設(shè)置為指定的值, 這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作。
    發(fā)表于 10-24 10:40 ?1131次閱讀

    STM32h7開(kāi)啟Cache后,串口發(fā)送DMA會(huì)導(dǎo)致中斷觸發(fā)如何解決?

    STM32h7 開(kāi)啟Cache后,串口使用發(fā)送DMA發(fā)送數(shù)據(jù)會(huì)導(dǎo)致中斷觸發(fā)(只開(kāi)啟接收空閑中斷),接收和發(fā)送的緩存指定在手動(dòng)分配的內(nèi)存區(qū)域(此區(qū)域通過(guò)MPU配置,關(guān)閉了
    發(fā)表于 03-12 07:37

    FPGA 開(kāi)發(fā)板上幾個(gè)裸露焊盤(pán)的疑惑

    ``大家好: 下圖是我從我的開(kāi)發(fā)板上拍下來(lái)的。紅框的背面是一塊DDR,紅框中有很多的小圓形焊盤(pán)。這是做什么用的?做測(cè)試點(diǎn)?然后下面一大塊是FPGA的背面,同樣有很多小圓形焊盤(pán)。還請(qǐng)哪位大神講講是干什么用的。謝啦。``
    發(fā)表于 11-11 10:16

    新人求教|ad pcb輔銅問(wèn)題

    如圖所示怎么把綠色的圈圈內(nèi)的線也起輔銅?就是兩個(gè)元件之間用一大塊輔銅
    發(fā)表于 05-05 09:00

    18F24K22查找表不工作怎么辦

    親愛(ài)的朋友們,我試著用個(gè)大約700字節(jié)的數(shù)據(jù)填充一大塊內(nèi)存。這是給18F43K22的。我試圖用“db”指令來(lái)處理這個(gè)問(wèn)題。但是如果最后個(gè)地址是奇數(shù)的話,它會(huì)增加0。我只能做每行兩個(gè)
    發(fā)表于 05-14 14:24

    在Windows Vista里如何實(shí)現(xiàn)登錄就自動(dòng)連接寬帶?

    在Windows Vista里如何實(shí)現(xiàn)登錄就自動(dòng)連接寬帶? 家里用的電腦,上網(wǎng)占了一大塊。每次開(kāi)機(jī)要把寬帶連接撥通,有什么辦法可以讓它自動(dòng)連接,這樣可
    發(fā)表于 02-12 08:13 ?1042次閱讀

    什么是Instructions Cache/IMM/ID

    什么是Instructions Cache/IMM/ID  Instructions Cache: (指令緩存)由于系統(tǒng)主內(nèi)存的速度較慢,當(dāng)CPU讀取指令的時(shí)候,會(huì)
    發(fā)表于 02-04 11:51 ?627次閱讀

    pool-allocator分析

    首先配置出一大塊內(nèi)存,維護(hù)與之對(duì)應(yīng)的自由鏈表(free-lists),如果有小的內(nèi)存請(qǐng)求,則從free-lists中播出一塊。客戶釋放小區(qū)塊,則由配置器收回,加入free-lists中
    發(fā)表于 04-04 20:44 ?6次下載

    超級(jí)強(qiáng)悍:自己動(dòng)手DIY液晶電視

    超級(jí)強(qiáng)悍:自己DIY液晶電視材料如下液晶屏幕完好的筆記本臺(tái),液晶驅(qū)動(dòng)板一塊,玻璃纖維板一大塊,數(shù)據(jù)線
    發(fā)表于 05-07 15:47 ?8.1w次閱讀

    iOS10.3救不了小內(nèi)存,iPhone6 32G幫你解決

    最近大火的 iOS 10.3 ,其中讓果粉們最看中的就是蘋(píng)果最新的APFS文件系統(tǒng),它能讓儲(chǔ)存空間騰出一大塊地方,簡(jiǎn)直是小內(nèi)存用戶的福音啊!
    發(fā)表于 04-19 09:57 ?1.9w次閱讀

    種有效的Cache優(yōu)化替換策略

    該問(wèn)題,種有效的解決方法是優(yōu)化Cache替換策略,減少Cache中臟被替換出的數(shù)量?,F(xiàn)有研究主要通過(guò)在插入和訪問(wèn)命中時(shí)給臟設(shè)定較高的保
    發(fā)表于 11-27 15:16 ?1次下載
    <b class='flag-5'>一</b>種有效的<b class='flag-5'>Cache</b>優(yōu)化替換策略

    全面屏設(shè)計(jì)是如何發(fā)展的

    如今各手機(jī)品牌,都想屏占比越來(lái)越大,而且最好是前面一大塊的屏幕。是否還知道這幾種的全面屏設(shè)計(jì)嗎?
    的頭像 發(fā)表于 02-15 16:18 ?2162次閱讀

    Cache內(nèi)容鎖定是什么

    的。每個(gè)鎖定中包括cache中每個(gè)組中各個(gè),這樣cache中最多可有ASSOCIATIVITY個(gè)鎖定
    的頭像 發(fā)表于 10-31 11:31 ?750次閱讀

    內(nèi)存池的使用場(chǎng)景

    山中,非常容易出現(xiàn)內(nèi)存泄漏導(dǎo)致mmo的問(wèn)題。 為了解決這兩個(gè)問(wèn)題,內(nèi)存池就應(yīng)運(yùn)而生了。內(nèi)存池預(yù)先分配一大塊
    的頭像 發(fā)表于 11-10 17:19 ?712次閱讀
    <b class='flag-5'>內(nèi)存</b>池的使用場(chǎng)景

    Cache內(nèi)存有什么區(qū)別

    Cache(高速緩存)和內(nèi)存(Memory,通常指主存儲(chǔ)器或RAM)是計(jì)算機(jī)存儲(chǔ)系統(tǒng)中兩個(gè)重要的組成部分,它們?cè)谟?jì)算機(jī)的性能和數(shù)據(jù)處理中扮演著不同的角色。以下是對(duì)Cache內(nèi)存之間區(qū)
    的頭像 發(fā)表于 09-26 15:28 ?1565次閱讀