Function core::arch::x86::_mm_prefetch1.27.0[][src]

pub unsafe fn _mm_prefetch<const STRATEGY: i32>(p: *const i8)
This is supported on x86 and target feature sse 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 丢失或页面错误,通常不会提取数据。

  • 过多的预取会导致不必要的缓存逐出。

  • 如果没有足够的内存子系统资源 (例如,请求缓冲区),则预取也可能会失败。

Intel’s documentation