Với mã:Vòng unrolling & tối ưu hóa
for (int i = 0; i < n; ++i)
{
A(i) ;
B(i) ;
C(i) ;
}
Và phiên bản tối ưu hóa:
for (int i = 0; i < (n - 2); i+=3)
{
A(i)
A(i+1)
A(i+2)
B(i)
B(i+1)
B(i+2)
C(i)
C(i+1)
C(i+2)
}
Cái gì là không rõ ràng với tôi: đó là tốt hơn? Tôi không thể thấy bất cứ thứ gì hoạt động nhanh hơn bằng phiên bản khác. Am i thiếu cái gì ở đây ?
Tất cả tôi thấy là mỗi hướng dẫn là tùy thuộc vào hướng dẫn trước, có nghĩa là tôi cần phải chờ mà các hướng dẫn trước sẽ kết thúc để bắt đầu một sau khi ...
Cảm ơn
Ngôn ngữ nào? – Bytemain
Wikipedia có một bài viết tốt về ý tưởng đằng sau vòng lặp bỏ vòng cho những gì nó có giá trị: http://en.wikipedia.org/wiki/Loop_unwinding –
Nói chung, đây không phải là tương đương. Nên là A (i); B (i); C (i); A (i + 1); B (i + 1); v.v. – gnasher729