#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::*;
#[target_feature(enable = "avx2")]
pub unsafe fn gemm_f32(a: &[f32], b: &[f32], c: &mut [f32], m: usize, n: usize, k: usize) {
for i in 0..m {
for j in 0..n {
let mut sum = _mm256_setzero_ps();
let mut l = 0;
while l + 8 <= k {
let va = _mm256_loadu_ps(&a[i * k + l]);
let vb = _mm256_loadu_ps(&b[j * k + l]);
sum = _mm256_fmadd_ps(va, vb, sum);
l += 8;
}
let mut tmp = [0f32; 8];
_mm256_storeu_ps(&mut tmp[0], sum);
let mut res = tmp.iter().sum::<f32>();
while l < k {
res += a[i * k + l] * b[j * k + l];
l += 1;
}
c[i * n + j] = res;
}
}
}