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 丢失或页面错误,通常不会提取数据。

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

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

Intel’s documentation