Avatar ·

كيفية قياس أداء الكود في Rust بشكل صحيح: المقارنة المعيارية والتنميط

مرحبًا أيها الزملاء! أكتب بلغة Rust منذ حوالي ستة أشهر وواجهت مشكلة: لا أستطيع قياس الوقت الذي يستغرقه كودي بشكل صحيح. حاولت استخدام std::time::Instant، لكن النتائج تتغير من تشغيل إلى آخر، خاصةً في الدوال الصغيرة. على سبيل المثال، أريد مقارنة طريقتين لجمع متجه: ```rust use std::time::Instant; fn sum_for(v: &[i32]) -> i32 { let mut sum = 0; for x in v { sum += x; } sum } fn sum_iter(v: &[i32]) -> i32 { v.iter().sum() } fn main() { let data = vec![1; 1_000_000]; let start = Instant::now(); let _ = sum_for(&data); println!("for: {:?}", start.elapsed()); let start = Instant::now(); let _ = sum_iter(&data); println!("iter: {:?}", start.elapsed()); } ``` على حاسوبي المحمول (Ryzen 5، Linux)، يُظهر القياس الأول 0.5-1.2 مللي ثانية، والثاني 0.3-0.9 مللي ثانية، وأحيانًا يتغير الترتيب. أفهم أن هذا بسبب العمليات الخلفية، وذاكرة التخزين المؤقت، وما إلى ذلك، ولكن كيف يمكنني الحصول على أرقام مستقرة؟