ฉันพยายามเพิ่มประสิทธิภาพโค้ดที่มีความสำคัญอย่างยิ่ง (อัลกอริธึมการเรียงลำดับอย่างรวดเร็วที่ถูกเรียกเป็นล้าน ๆ ล้านครั้งในการจำลองมอนติคาร์โล) โดยการคลายการวนซ้ำ นี่คือวงในที่ฉันพยายามเร่งความเร็ว:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
ฉันพยายามยกเลิกการเล่นบางอย่างเช่น:
while(true) {
if(myArray[++index1] < pivot) break;
if(myArray[++index1] < pivot) break;
// More unrolling
}
while(true) {
if(pivot < myArray[--index2]) break;
if(pivot < myArray[--index2]) break;
// More unrolling
}
สิ่งนี้ไม่แตกต่างอย่างแน่นอนดังนั้นฉันจึงเปลี่ยนกลับเป็นรูปแบบที่อ่านได้มากขึ้น ฉันเคยมีประสบการณ์คล้าย ๆ กันในครั้งอื่น ๆ ฉันได้ลองคลายการวนซ้ำ เมื่อพิจารณาถึงคุณภาพของตัวทำนายสาขาบนฮาร์ดแวร์สมัยใหม่เมื่อใดถ้าเคยการคลายการวนซ้ำยังคงเป็นการเพิ่มประสิทธิภาพที่มีประโยชน์หรือไม่?