當我們從前面的問題知道:Does it make any sense instruction LFENCE in processors x86/x86_64?什麼機制禁用LFENCE使不可能重新排序?
那我們不能用SFENCE
代替MFENCE
的順序一致性。並且,如果沒有這些,我們不能提供順序一致性,並且做了一些事情,並且mainaly MFENCE
= SFENCE
+ LFENCE
。
LFENCE
使得不可能重新排序:
SFENCE
LFENCE
MOV reg, [addr]
- 至 - >
MOV reg, [addr]
SFENCE
LFENCE
對於MOV [addr], reg
LFENCE
例如重排序 - 通過機構提供>LFENCE
MOV [addr], reg
- 存儲緩衝器,這會重新排序Store - Loads以提高性能,並且因爲LFENCE
不能阻止它。並且SFENCE
禁用此機制。
什麼機制禁止LFENCE
使不可能的重新排序(x86沒有機制 - 無效隊列)?
而且是重新排序的SFENCE
MOV reg, [addr]
- >MOV reg, [addr]
SFENCE
可能只有在理論上或可能在現實中?如果可能的話,現實中,什麼機制,它是如何工作的?
我想L/S/M FENCE是由'memory controller'實施的。柵欄用於協調系統內存和高速緩存內存。我認爲這種緩存一致性是「內存控制器」的責任。 –
@Peng Zhang Cache一致性通過MOESI/MESIF cc協議自動**提供,更具體地說這些協議 - 提供獲取釋放一致性。正如我所知'L/S/MFENCE'與高速緩存一致性無關,因爲'SFENCE'會刷新與高速緩存一致性無關的Store-Buffer。在某些CPU(不是x86)中加載FENCE flush Invalidate-Queue,但是x86沒有。在互聯網上,我發現LFENCE在處理器x86中沒有任何意義,即它什麼都不做。然後,對於「SFENCE」MOV reg,[addr]' - >'MOV reg,[addr]'SFENCE'重新排序只能在理論上,而不是現實中,這是真的嗎? – Alex