Avatar ·

لماذا تعمل الحلقة على مصفوفة تحتوي على أكثر من 240 عنصرًا أبطأ بـ 10 مرات في Rust؟

مرحبًا أيها الزملاء! أنا أدرس Rust وواجهت مشكلة غريبة في الأداء عند تكرار المصفوفات. كتبت اختبار أداء بسيطًا يجمع عناصر المصفوفة في حلقة `for`. بالنسبة للمصفوفات التي يقل حجمها عن 240 عنصرًا، يتم تنفيذ الكود بسرعة كبيرة، ولكن بمجرد أن يصل الحجم إلى 240 أو أكثر، ينخفض الأداء بشكل حاد — حوالي 10 مرات. إليك الكود الخاص بي: ```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!("Sum: {}, Time: {:?}", result, duration); } ``` لقد جربت تغيير `size` من 239 إلى 240، وكان الفرق هائلاً. في البداية اعتقدت أن الأمر يتعلق بذاكرة التخزين المؤقت للمعالج، لكن في هذه الحالة يجب أن يكون الانخفاض تدريجيًا وليس مفاجئًا. أستخدم Rust 1.75 وأقوم بالتجميع مع `--release`. هل يمكن أن يكون هذا خطأ في LLVM؟