Function core::arch::x86_64::_mm_prefetch
1.27.0 · source · pub unsafe fn _mm_prefetch(p: *const i8, const STRATEGY: i32)
Available on (x86 or x86-64) and target feature
sse
and x86-64 only.Expand description
使用给定的 STRATEGY
获取包含地址 p
的缓存行。
STRATEGY
必须是以下之一:
-
_MM_HINT_T0
: 获取缓存层次结构的所有级别。 -
_MM_HINT_T1
: 提取到 L2 及更高版本。 -
_MM_HINT_T2
: 获取 L3 和更高版本或特定于实现的选择 (例如,如果没有 L3,则为 L2)。 -
_MM_HINT_NTA
: 使用非临时访问 (NTA) 提示获取数据。它可能比主存储器更近,但不在高速缓存层次结构之外。 这用于减少访问延迟而不污染高速缓存。 -
_MM_HINT_ET0
和_MM_HINT_ET1
与_MM_HINT_T0
和_MM_HINT_T1
类似,但表示预期写入地址。
实际的实现取决于特定的 CPU。该指令被认为是提示,因此 CPU 也可以随意忽略该请求。
预取的数据量取决于特定 CPU 的高速缓存行大小,但至少为 32 个字节。
常见警告:
-
大多数现代 CPU 已经根据预测的访问模式自动预取数据。
-
如果这会导致 TLB 丢失或页面错误,通常不会提取数据。
-
过多的预取会导致不必要的缓存逐出。
-
如果没有足够的内存子系统资源 (例如,请求缓冲区),则预取也可能会失败。