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
It will load the correct branch in pipeline and correct sequence 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