操作碼 |
指令 |
說明 |
0F AE /6 |
MFENCE |
序列化載入與儲存操作。 |
對 MFENCE 指令之前發出的所有載入與儲存指令執行序列化操作。此序列化操作確保:在全域性範圍內看到 MFENCE 指令後面(按程式順序)的任何載入與儲存指令之前,可以在全域性範圍內看到 MFENCE 指令前面的每一條載入與儲存指令。MFENCE 指令的順序根據所有的載入與儲存指令、其它 MFENCE 指令、任何 SFENCE 與 LFENCE 指令以及任何序列化指令(如 CPUID 指令)確定。
通過使用無序發出、推測性讀取、寫入組合以及寫入摺疊等技術,弱序型別的記憶體可獲得更高的效能。數據使用者對數據弱序程式的認知或瞭解因應用程式的不同而異,並且可能不為此數據的產生者所知。對於確保產生弱序結果的例程與使用此數據的例程之間的順序,MFENCE 指令提供了一種高效的方法。
應該注意的是,對於指定為允許推測性讀取的記憶體型別(即 WB、WC 及 WT 記憶體型別)的系統記憶體區域,處理器可以隨意憑推測從該區域獲取與快取數據。PREFETCHh 指令被視作對此推測行為的提示。由於此種推測性獲取隨時可能發生,並且與指令執行沒有聯繫,因此確定 MFENCE 指令的順序時,不考慮 PREFETCHh 或任何推測性獲取機制(也就是說,可以憑推測在執行 MFENCE 指令之前、之中或之後將數據載入到快取)。
Wait_On_Following_Loads_And_Stores_Until(preceding_loads_and_stores_globally_visible);
void_mm_mfence(void)
無。