Warum ist eine Schleife über ein Array mit 240+ Elementen in Rust 10-mal langsamer?
Hallo Kollegen! Ich lerne Rust und bin auf ein seltsames Performance-Problem beim Durchlaufen von Arrays gestoßen. Ich habe einen einfachen Benchmark geschrieben, der die Elemente eines Arrays in einer `for`-Schleife summiert. Für Arrays mit weniger als 240 Elementen wird der Code sehr schnell ausgeführt, aber sobald die Größe 240 oder mehr erreicht, fällt die Leistung drastisch ab – etwa um den Faktor 10. Hier ist mein Code:
```rust
fn sum_array(arr: &[i32]) -> i32 {
let mut sum = 0;
for &x in arr {
sum += x;
}
sum
}
fn main() {
let size = 240;
let arr: Vec = (0..size).collect();
let start = std::time::Instant::now();
let result = sum_array(&arr);
let duration = start.elapsed();
println!("Summe: {}, Zeit: {:?}", result, duration);
}
```
Ich habe versucht, `size` von 239 auf 240 zu ändern, und der Unterschied ist enorm. Zuerst dachte ich, es läge am CPU-Cache, aber dann sollte der Abfall allmählich und nicht sprunghaft sein. Ich verwende Rust 1.75 und kompiliere mit `--release`. Vielleicht ist es ein LLVM-Bug?