如果要載入的數據不在數據快取中,載入指令產生的延遲會長相當多。數據快取未命中事件過多將導致效能急劇下降。使用 PLD 指令可以預先獲取所需的數據,有效地消除數據快取未命中現象。
XSC_PLD_S1 - 預取連續載入
連續發出 4 次以上的載入容易產生數據快取未命中。
XSC_PLD_S2 - 預取連續儲存
指定寫回快取時,連續發出 8 次以上的儲存容易產生數據快取未命中。
XSC_PLD_S3 - 預取跨越快取線的相鄰載入指令的記憶體地址。
如果兩條載入指令的記憶體地址跨越快取線(32 個位元組),並且這兩條載入指令相鄰,則很可能產生數據快取未命中。
從理論上說,每條“載入”指令都可能發生數據快取未命中,而在實際執行時,可能性高的指令未必就會導致數據快取未命中。
PLD 是一條提示指令,它不保證將載入數據。
“VTune(TM) 效能分析器”僅指出需要 PLD 指令,它不會建議應該在哪裡插入 PLD 指令。
不顯示 PLD 指令的 XSC_PLD_advice
LDR R0, [R1, #0x0]
LDR R2, [R1, R3]
LDR R4, [R1, #-0xef1]
LDR R6, [R1], R5
LDR R7, [R1, #-0xfff] ;; XSC_SUCC_LoadStore, XSC_PLD_S1
STR R0, [R1, #0x0]
STR R0, [R1, #0xef1]
STR R0, [R1, #-0xef1]
STR R0, [R1, #0xfff]
STR R0, [R1, #0xfff]
STR R0, [R1, R2]
STR R0, [R1, -R2]
STR R0, [R1], -R2, ROR #30
STR R0, [R3, R4, LSL #30] ;; XSC_SUCC_LoadStore, XSC_PLD_S2
LDR R0, [R1, #0x0]
LDR R2, [R1, #0xef1] ;; XSC_PLD_S3
LDC p6,C4,[R0,#0x1*4]
ADD r2, r3, r4
LDC p6,C6,[R0,#0xe1*4] ;; XSC_PLD_S3
LDC p6,C4,[R0,#0x1*4]
ADD r0, r3, r4
LDC p6,C6,[R0,#0xe1*4]
//not showing XSC_PLD_S3 for base register R0 changed
LDR R0, [R1, #0x0]
LDR R2, [R1, #0xef1]
LDR R3, [R1, #-0xef1]
LDR R4, [R1, #0x0]
PLD [R1, #0xfff] ;; XSC_SUCC_LoadStore
//not showing XSC_PLD_Advice for PLD instruction