Produit scalaire optimisé
On peut gagner encore un facteur ≤ 2 en tirant parti du FMA (fused multiply-add) :
#![allow(unused)] fn main() { type Vector = f32; let x = [2.4f32; 1024]; let y = [4.2; 1024]; let dot = x.into_iter().zip(y) .fold(Vector::default(), |acc, (x, y)| x.mul_add(y, acc)); }
Et un peu de parallélisme d’instructions plus tard, on obtient des performances satisfaisantes1 :
1
Le speedup FMA est assez loin de 2x pour la même raison qu’AVX-512 avant : calcul trop simple…