Crate mem_prefetch

Crate mem_prefetch 

Source
Expand description

§mem_prefetch

This crate provides a simple platform agnostic wrapper for memory prefetching.

§Cargo.toml

[dependencies]
mem_prefetch = "0.1"

§Usage

mem_prefetch::prefetch_read_data::<_, 3>(reference);  // most local
mem_prefetch::prefetch_write_data::<_, 3>(reference); // most local 

mem_prefetch::prefetch_read_data::<_, 2>(reference);
mem_prefetch::prefetch_write_data::<_, 2>(reference);

mem_prefetch::prefetch_read_data::<_, 1>(reference);
mem_prefetch::prefetch_write_data::<_, 1>(reference);

mem_prefetch::prefetch_read_data::<_, 0>(reference);  // least local
mem_prefetch::prefetch_write_data::<_, 0>(reference); // least local


// Or raw ptr variants:
unsafe {
    mem_prefetch::prefetch_read_data_raw::<_, 0>(ptr);
    mem_prefetch::prefetch_write_data_raw::<_, 0>(ptr);
}

§Features

  • fallback: Use fallback ptr::read_volatile for prefetching if no prefetch instruction is available. (Enabled by default).
  • nightly: Use llvm intrinsics from core_intrinsics for prefetching.

§Notes

  • read/write variants map to same instructions on x86.

Functions§

prefetch_read_data
LOCALITY is a value between 0-3, where 0 is the least local, and 3 is the most local.
prefetch_read_data_raw
LOCALITY is a value between 0-3, where 0 is the least local, and 3 is the most local.
prefetch_write_data
LOCALITY is a value between 0-3, where 0 is the least local, and 3 is the most local.
prefetch_write_data_raw
LOCALITY is a value between 0-3, where 0 is the least local, and 3 is the most local.