操作碼 |
指令 |
說明 |
0F 18 /1 |
PREFETCHT0 m8 |
使用 T0 提示將地址指定的數據移到更接近處理器的位置。 |
0F 18 /2 |
PREFETCHT1 m8 |
使用 T1 提示將地址指定的數據移到更接近處理器的位置。 |
0F 18 /3 |
PREFETCHT2 m8 |
使用 T2 提示將地址指定的數據移到更接近處理器的位置。 |
0F 18 /0 |
PREFETCHNTA m8 |
使用 NTA 提示將地址指定的數據移到更接近處理器的位置。 |
從記憶體獲取包含源運算元指定的位元組的數據線,並將它放入區域性提示指定的快取層次結構中的某個位置:
T0(暫時數據)- 將數據預取到所有的快取級別。
T1(相對於一級快取的暫時數據)- 將數據預取到除 0 級快取以外的所有快取級別。
T2(相對於二級快取的暫時數據)- 將數據預取到除 0 級與 1 級快取以外的所有快取級別。
NTA(相對於所有快取級別的非暫時數據)- 將數據預取到非暫時快取結構。(此提示可用於最大限度降低快取污染)。
源運算元是位元組記憶體位置。(在機器級指令中,區域性提示使用 ModR/M 位元組的位 3 到 5 編碼。使用指定值之外的任何 ModR/M 值都將導致無法預知的行為)。
如果所選快取線已在更接近處理器的快取層次結構級別中,則不發生任何數據移動。從不可快取或 WC 記憶體的預取會被忽略。
PREFETCHh 指令只是一個提示,不會影響程式的行為。如果執行此指令,則將數據移到更接近處理器的位置,以備將來使用。
預取區域性提示的實現取決於具體實現的版本,具體的處理器版本可以過載或忽略它們。預取的數據量也取決於具體的處理器版本。不過,它的最小值是 32 個位元組。
應該注意的是,對於指定為允許推測性讀取的記憶體型別(即 WB、WC 及 WT 記憶體型別)的系統記憶體區域,處理器可以隨意憑推測從該區域獲取與快取數據。PREFETCHh 指令被視作對此推測行為的提示。由於此種推測性獲取隨時可能發生,並且與指令執行沒有聯繫,因此確定 PREFETCHh 指令的順序時,不考慮邊界隔離指令(MFENCE、SFENCE、LFENCE)或帶鎖型記憶體引用。確定它的順序時也不考慮 CLFLUSH 指令、其它 PREFETCHh 指令或其它任何一般指令。它的順序根據 CPUID、WRMSR、OUT 及 MOV CR 等序列化指令確定。
FETCH (m8);
void_mm_prefetch(char *p, int i)
參數 "*p" 給出要預取的位元組(與相應的快取線)的地址。值 "i" 給出常數(_MM_HINT_T0、_MM_HINT_T1、_MM_HINT_T2 或 _MM_HINT_NTA),它指定執行的預取操作型別。
無。
無。
無。
無。