Skip to content

Instantly share code, notes, and snippets.

@realies
Created April 11, 2023 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save realies/9289f548f5dc798787b7eb6f48cd5354 to your computer and use it in GitHub Desktop.
Save realies/9289f548f5dc798787b7eb6f48cd5354 to your computer and use it in GitHub Desktop.
asking chatgpt 4 to >write a rust application that will circumvent L1, L2, and L3 and test memory latency, read and write speeds
#![feature(asm)]
use std::time::Instant;
const BUFFER_SIZE: usize = 1024 * 1024 * 128; // 128 MB
fn main() {
let mut buffer = vec![0u8; BUFFER_SIZE];
let start_time = Instant::now();
unsafe { write_memory_avx(&mut buffer); }
let write_duration = start_time.elapsed();
let start_time = Instant::now();
let sum = unsafe { read_memory_avx(&buffer) };
let read_duration = start_time.elapsed();
let read_speed = (BUFFER_SIZE as f64) / read_duration.as_secs_f64() / 1024.0 / 1024.0;
let write_speed = (BUFFER_SIZE as f64) / write_duration.as_secs_f64() / 1024.0 / 1024.0;
println!("Read duration: {:?}", read_duration);
println!("Write duration: {:?}", write_duration);
println!("Read speed: {:.2} MB/s", read_speed);
println!("Write speed: {:.2} MB/s", write_speed);
println!("Sum: {}", sum);
}
#[inline(never)]
unsafe fn read_memory_avx(buffer: &[u8]) -> u64 {
let mut sum = 0;
let len = buffer.len() / 32;
asm!(
"xor %rax, %rax",
"mov $0, %rcx",
"1:",
"vmovntdqa (%rsi), %ymm0",
"add $32, %rsi",
"vpaddq %ymm0, %ymm1, %ymm1",
"loop 1b",
"vextracti128 $1, %ymm1, %xmm2",
"vpaddq %xmm1, %xmm2, %xmm1",
"movq %xmm1, %rax",
inout("rsi") buffer.as_ptr() => _,
inout("rcx") len => _,
out("rax") sum,
);
sum
}
#[inline(never)]
unsafe fn write_memory_avx(buffer: &mut [u8]) {
let len = buffer.len() / 32;
asm!(
"1:",
"vmovntdq %ymm0, (%rdi)",
"add $32, %rdi",
"loop 1b",
inout("rdi") buffer.as_mut_ptr() => _,
inout("rcx") len => _,
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment