לדלג לתוכן

פתרון סכימה וקטורית

הבדיקה הבאה מצטרפת לקובץ ההרצאה. היא בודקת גבולות אורך והיסט בלי לדרוש יישור מסוים מהמשתמש.

#[test]
fn all_small_lengths_and_offsets() {
    for value in [0u8, 255] {
        let data = vec![value; 1100];
        for offset in 0..32 {
            for length in 0..=1024 {
                let input = &data[offset..offset + length];
                assert_eq!(sum(input), scalar(input));
            }
        }
    }
}

בבדיקת AoS מול SoA נשתמש באותה פונקציית סכום לוגית ונאמת את התוצאה לפני מדידת זמן. אם המהדר יצר כבר לולאה וקטורית לשתי הגרסאות, ההבדל יכול עדיין לנבוע מרוחב פס או מצפיפות הנתונים שנצרכים. אם אין תמיכת AVX2, הדוגמה מפעילה את fallback, ולכן בדיקות שעוברות במכונה כזאת אינן בדיקה של גוף הפונקציה הווקטורית.