Réductions
Les itérateurs Rust fournissent de nombreuses méthodes de réduction, comme
sum()
:
#![allow(unused)] fn main() { let numbers = [4.2; 10]; println!("Before: {numbers:?}"); let sum = numbers.into_iter() .sum::<f32>(); println!("After: {sum:?}"); }
Mais ces réductions font l’équivalent d’une boucle simple, dans le cas de
sum()
…
#![allow(unused)] fn main() { let numbers = [4.2; 10]; let mut sum = 0.0f32; for x in numbers { sum += x; } }
Elles ont donc une mauvaise performance en virgule flottante :( Pour faire mieux, on peut :
- Augmenter le parallélisme d’instruction (cf
std::reduce
de C++20,iterator_ilp
en Rust…) - Arrêter de jouer aux dés avec le compilateur et passer au SIMD explicite