【发布时间】:2015-03-18 11:25:03
【问题描述】:
我试图了解在 LOAD 和/或 STORE 指令期间发生了什么。因此,我进行了 4 次测试,每次都测量 CPU 周期数 (CC)/缓存命中数 (CH)/未命中数 (CM)/数据读取数 (DR)/写入数 (DW)。
读取不同的计数器后,我只刷新 L1(I/D 缓存)。
测试1:
LDRB R3, [R4,#1]!
STR R3, [SP,#0x48+var_34]
Results: 4 (CC) 3(CH) 1(CM) 1(DR) 2(DW)
测试2:
LDR R3, [SP,#0x48+var_34]
LDR R3, [R3]
Results: 4 3 1 2 1
测试3:
LDR R3, [SP,#0x48+var_38]
LDR R3, [R3]
STR R3, [SP,#0x48+var_30]
Results: 4 4 1 2 2
var_30 is returned at the end of the current function.
测试4:
LDR R2, [SP,#0x48+var_34]
LDR R3, [R2]
Results: 4 3 1 2 1
这是我的理解:
1.缓存未命中
在每个测试中,我们都有 1 次缓存未命中,因为当一次执行时
LDR reg, something
"Something" 将被缓存,并且会出现缓存未命中。
而且……这几乎是我能做出的唯一“合乎逻辑”的解释…… 我不明白缓存命中、数据读取和数据写入的不同值。
有什么想法吗?
【问题讨论】: