///|
/// Naive GEMM: C = A @ B
/// A: (M, K) row-major, B: (K, N) row-major, C: (M, N) row-major
pub fn gemm(
a : Array[Double],
b : Array[Double],
m : Int,
k : Int,
n : Int,
) -> Array[Double] {
let c = Array::make(m * n, 0.0)
for i = 0; i < m; i = i + 1 {
for j = 0; j < n; j = j + 1 {
let mut sum = 0.0
for p = 0; p < k; p = p + 1 {
sum = sum + a[i * k + p] * b[p * n + j]
}
c[i * n + j] = sum
}
}
c
}