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

เหตุใดการประมวลผลอาร์เรย์ที่เรียงลำดับจึงเร็วกว่าอาร์เรย์ที่ไม่เรียงลำดับใน C ++


ใน C ++ การประมวลผลอาร์เรย์ที่เรียงลำดับได้เร็วกว่าอาร์เรย์ที่ไม่เรียงลำดับเนื่องจากการทำนายสาขา ในสถาปัตยกรรมคอมพิวเตอร์ การคาดคะเนสาขาจะกำหนดว่าสาขาตามเงื่อนไข (ข้าม) ในโฟลว์คำสั่งของโปรแกรมมีแนวโน้มที่จะเกิดขึ้นหรือไม่

มาดูตัวอย่างกัน −

if(arr[i] > 50) {
   Do some operation B
} else {
   Do some operation A
}

หากเราเรียกใช้รหัสนี้สำหรับ 100 องค์ประกอบในลำดับที่ไม่เรียงลำดับและเรียงลำดับด้านล่าง สิ่งต่าง ๆ จะเกิดขึ้น –

สำหรับการจัดเรียงอาร์เรย์ -

1, 2, 3, 4, 5, …… 50, 51………100
A, A, A, A, A A, B B

มันจะโหลดสาขาที่ถูกต้องในไปป์ไลน์และลำดับที่ถูกต้อง

A, A, A, A, A, A, A, A A, B B

สำหรับอาร์เรย์ที่ไม่เรียงลำดับ -

5, 51, 6, 90, 4, 49, 60…
A, B, A, B, A, A, A, B

การทำนายสาขาไม่ได้มีบทบาทสำคัญที่นี่ เป็นการยากมากที่จะคาดเดาการดำเนินการที่ถูกต้องระหว่าง A และ B