Produit scalaire simple

Intuitivement, il suffirait de combiner zip(), map() et sum()

#![allow(unused)]
fn main() {
let x = [2.4; 1024];
let y = [4.2; 1024];
let dot = x.into_iter().zip(y)
           .map(|(x, y)| x * y)
           .sum::<f32>();
println!("{dot}");
}

…mais on a vu que sum() n’est pas optimal en virgule flottante !

Et as_simd() n’aidera pas ici car il y a deux entrées x et y d’alignement a priori distinct.

La solution ? Basculer vers un format de données nativement SIMD (et donc bien aligné) :

type Vector = Simd<f32, 8>;
let x = [Vector::splat(2.4); 1024 / 8];
let y = [Vector::splat(4.2); 1024 / 8];
// ... et on calcule comme précédemment ...