在 Arm 體系結(jié)構(gòu)中,我們知道大多數(shù)的 normal memory 的配置都是 write allocation 和 read allocation 的,即當(dāng)寫一塊內(nèi)存或讀一塊內(nèi)存的時(shí)候,如果 miss 了,那么會(huì)將該物理內(nèi)存緩存到 cache 中。
那么就帶來一個(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),也許是真的存在此問題的。然后在近些年的微架構(gòu)中,可通過 “Write streaming mode” 解決。具體介紹如下,我們就以 Cortex-A720 為例,進(jìn)一步說明。
Cortex-A720 核心支持 Write streaming mode,有時(shí)也稱為讀分配模式,對(duì)于 L1 和 L2 緩存都支持。
在讀不命中或?qū)懖幻袝r(shí),會(huì)向 L1 或 L2 緩存分配緩存行。然而,寫入大塊數(shù)據(jù)可能會(huì)使緩存中充滿不必要的數(shù)據(jù)。這不僅會(huì)浪費(fèi)電力,也會(huì)降低性能,因?yàn)檎麄€(gè)線路會(huì)被后續(xù)寫入覆蓋(例如使用 memset() 或 memcpy())。
在某些情況下,不需要在寫入時(shí)分配緩存行。例如,當(dāng)執(zhí)行 C 標(biāo)準(zhǔn)庫的 memset() 函數(shù)來將大塊內(nèi)存清零為已知值時(shí)。
為了防止不必要的緩存行分配,內(nèi)存系統(tǒng)會(huì)檢測(cè) core 何時(shí)寫入了一系列完整的緩存行。如果在可配置數(shù)量的連續(xù)線路填充上檢測(cè)到這種情況,那么它會(huì)切換到寫入流模式。
在寫入流模式下,加載操作行為與正常情況相同,仍然可能引起線路填充。
寫入仍然在緩存中查找,但如果未命中,則會(huì)寫入 L2 或 L3 緩存,而不會(huì)啟動(dòng)線路填充 L1。
在內(nèi)存系統(tǒng)切換到寫入流模式之前,CHI 主控器或 AXI 主控器接口可能會(huì)觀察到超過指定數(shù)量的線路填充。
寫入流模式保持啟用,直到以下情況之一發(fā)生:
檢測(cè)到一個(gè)不是完整緩存行的可緩存寫入突發(fā)。
存在后續(xù)加載操作,其目標(biāo)與未完成的寫入流相同。
當(dāng) Cortex-A720 核心切換到寫入流模式后,內(nèi)存系統(tǒng)會(huì)繼續(xù)監(jiān)視總線流量。當(dāng)它觀察到一系列完整的緩存行寫入時(shí),會(huì)向 L2 或 L3 緩存發(fā)出信號(hào),以進(jìn)入寫入流模式。
寫入流閾值定義了在存儲(chǔ)操作停止引起緩存分配之前,連續(xù)寫入的緩存行數(shù)量。您可以通過寫入寄存器 IMP_CPUECTLR_EL1 來配置每個(gè)緩存(L1、L2 和 L3)的寫入流閾值。
-
寄存器
+關(guān)注
關(guān)注
31文章
5369瀏覽量
121274 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28448 -
Cortex-A7
+關(guān)注
關(guān)注
0文章
34瀏覽量
16555
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
C語言內(nèi)存知識(shí)總結(jié):memset函數(shù)和calloc函數(shù)
STM32h7開啟Cache后,串口發(fā)送DMA會(huì)導(dǎo)致中斷觸發(fā)如何解決?
FPGA 開發(fā)板上幾個(gè)裸露焊盤的疑惑
18F24K22查找表不工作怎么辦
在Windows Vista里如何實(shí)現(xiàn)一登錄就自動(dòng)連接寬帶?
什么是Instructions Cache/IMM/ID
pool-allocator分析
超級(jí)強(qiáng)悍:自己動(dòng)手DIY液晶電視
iOS10.3救不了小內(nèi)存,iPhone6 32G幫你解決
一種有效的Cache優(yōu)化替換策略
![<b class='flag-5'>一</b>種有效的<b class='flag-5'>Cache</b>優(yōu)化替換策略](https://file.elecfans.com/web2/M00/49/68/poYBAGKhwK-AHePmAAAV_kXCPRg787.jpg)
全面屏設(shè)計(jì)是如何發(fā)展的
Cache內(nèi)容鎖定是什么
內(nèi)存池的使用場(chǎng)景
![<b class='flag-5'>內(nèi)存</b>池的使用場(chǎng)景](https://file1.elecfans.com/web2/M00/AD/85/wKgaomVN8seAbA1CAAGdsOo4fN0809.jpg)
評(píng)論