Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำไม sorted array เร็วกว่า unsorted array ใน C++


เพราะ Branch Prediction (การคาดการณ์分支) ใน CPU architecture

Branch predictor พยายามทายว่า conditional branch (if/else) จะถูกทำหรือไม่ เพื่อโหลด instruction ล่วงหน้า (pipeline)

ตัวอย่าง

if (arr[i] > 50) { do_B(); } else { do_A(); }

Sorted array: 1, 2, 3... 50, 51... 100

A, A, A, A... A, B, B, B...  (pattern สม่ำเสมอ ง่ายต่อการคาดการณ์)

Branch predictor ทายถูกเกือบทุกครั้ง pipeline ทำงานเต็มที่

Unsorted array: 5, 51, 6, 90, 4, 49, 60...

A, B, A, B, A, A, B...  (pattern สลับซับซ้อน ยากต่อการคาดการณ์)

Branch predictor ทายผิดบ่อย pipeline flush บ่อย → ช้าลงมาก

สรุป: Sorted data ทำให้ branch pattern เป็นไปได้มากขึ้น branch predictor ทำงานได้ดี → เร็วกว่า