數據塊衝突

Bank_Conflict 表示一種懲罰狀態。

在奔騰(R) 處理器的數據快取中,數據包含八個數據塊,各數據塊之間有四個位元組的邊界重疊。U 管道V 管道中的指令可以同時訪問數據快取。不過,兩條指令訪問相同的數據快取數據塊時,將發生數據塊衝突。發生數據塊衝突時,指令對暫停一個週期。

僅當指令的基址或變址暫存器值相差 32(或 32 的倍數)位元組時,“VTune(TM) 效能分析器”才指出存在此懲罰狀態。

建議

要避免數據塊衝突:

此例顯示如何通過在 SAL 移位指令之後插入 CMP 指令(寫入所有標誌)來避免暫停。

示例:

原始程式碼

週期

優化程式碼

週期

1. mov ecx, mem 2. mov edx, mem+32 3. add eax, 4 4. add ebx ,4

1

2

2

3

1. mov ecx, mem

3. add eax, 4

2. mov edx, mem+32

4. 4 add ebx ,4

1 1 2 2

儘管“指令 1”與“指令 2”可以成對。但由於訪問 MEM 與 MEM+32 時將發生數據塊衝突,所以此指令對暫停一個週期。

執行時間總計:3 個週期

在優化的程式碼中,程式碼序列經過重新調整,從而避免“指令 1”與“指令 2”之間的數據塊衝突。

執行時間總計:2 個週期

 

記憶體懲罰

影響的處理器