Tôi đã cố gắng tối ưu hóa một số mã cực kỳ quan trọng về hiệu suất (một thuật toán sắp xếp nhanh được gọi hàng triệu triệu lần bên trong mô phỏng monte carlo) bằng cách mở vòng lặp. Đây là vòng lặp bên trong mà tôi đang cố gắng tăng tốc:
// Search for elements to swap.
while(myArray[++index1] < pivot) {}
while(pivot < myArray[--index2]) {}
Tôi đã thử hủy cuộn đến một cái gì đó như:
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
}
Điều này hoàn toàn không có gì khác biệt vì vậy tôi đã thay đổi nó trở lại dạng dễ đọc hơn. Tôi đã có trải nghiệm tương tự lần khác, tôi đã thử mở vòng lặp. Với chất lượng của các bộ dự đoán nhánh trên phần cứng hiện đại, khi nào, nếu có, việc giải nén vòng lặp vẫn là một tối ưu hóa hữu ích?