Những loại dự đoán chi nhánh là quan trọng hơn?


11

Tôi đã quan sát thấy rằng có hai loại trạng thái khác nhau trong dự đoán nhánh.

  1. Trong thực thi siêu khối, trong đó dự đoán nhánh là rất quan trọng, và nó chủ yếu là trong độ trễ thực thi thay vì tìm nạp độ trễ.

  2. Trong đường dẫn lệnh, nơi tìm nạp có nhiều vấn đề hơn vì các hướng dẫn không thực sự được thực thi cho đến sau này.

Cái nào trong số này là rất quan trọng (vì cái nào trong số này thực sự quan trọng trong CPU bây giờ)? Nếu cả hai đều quan trọng như nhau hoặc trong trường hợp cái thứ hai quan trọng hơn thì tại sao chúng ta không có hai đường dẫn lệnh (có thể bằng một nửa chiều dài) và sau đó tùy thuộc vào các nhánh, chỉ cần chọn một trong số chúng và sau đó lại bắt đầu dân số từ bắt đầu?


1
Có lẽ cả hai đều quan trọng, tùy thuộc vào hoàn cảnh?
Raphael

Câu trả lời:


6

Tôi không biết trường hợp nào là phổ biến, nhưng tôi muốn đưa ra một vài suy nghĩ về đề xuất của bạn về đường ống đôi.

Trước hết, bạn sẽ cần gấp đôi dây sẽ tiêu thụ gấp đôi năng lượng và tạo ra gấp đôi nhiệt khi hoạt động. Trong khi không cần thiết, mặt khác, nó sẽ hoàn toàn vô dụng. Vì vậy, người ta có thể lập luận rằng nó không phải là một cách sử dụng tốt các tài nguyên hiếm thấy trên các bộ xử lý hiện đại.

Về cơ bản hơn, trừ khi bạn thích một chi nhánh dựa trên xác suất, làm thế nào để bạn biết phiên bản nào sẽ được viết qua? Nếu không, bạn có thể không lưu bất cứ điều gì vì các bộ xử lý khác có thể phải chờ quyết định của bạn, dù sao đi nữa. Nếu bạn gắn bó với một trong số họ, về cơ bản bạn có xác suất rollback và chi phí như hiện tại.

Hãy để chúng tôi làm một tính toán thô. Để đơn giản, chúng ta hãy giả sử rằng việc xử lý hai đường ống thay vì một đường ống không gây ra chi phí quản lý bổ sung. Chi phí dự kiến ​​(ví dụ như năng lượng, nhiệt) là với một đường ống ( chi phí thực hiện một trong hai phương án, xác suất cho rollback và chi phí cho rollback mà không phải trả chi phí cho việc thực hiện khác thay thế) nhưng hoặc thậm chí - hoặc lớn hơn rất nhiều nếu và tương đối nhỏ vàc p c r 2 c 2 c + p c r C p c r p t + p ( t r + t ) t t + p t r pC=c+p(cr+c)cpcr2c2c+pcrCpcrpchắc chắn là (theo như tôi biết, dự đoán chi nhánh hiện đại có độ chính xác trên 90%). Và chúng tôi không nhận được nhiều cho chi phí này! Thời gian thực hiện dự kiến ​​là với một đường ống và resp. với hai; vì là nhỏ, tiết kiệm thời gian là không đáng kể.t+p(tr+t)tt+ptrp


Theo tôi biết, Intel đã thử "đọc hướng dẫn cho cả hai bên của chi nhánh" và thậm chí "thực hiện hướng dẫn cho cả hai bên của chi nhánh" và ngừng thực hiện. Hoặc là vì nó không thu được gì, hoặc vì chi phí và độ phức tạp quá cao nên họ có thể nhận được nhiều lợi nhuận hơn theo những cách khác nhau cho cùng một chi phí.
gnasher729

@ gnasher729 Và đó có lẽ là trước khi chúng ta biết về các lỗi bảo mật gắn liền với các tính năng như thế này?
Raphael

2

Theo một nghĩa nào đó, hiệu quả của dự đoán nhánh là quan trọng hơn trong việc tìm nạp các lệnh vì một lệnh không được tìm nạp không thể được thực thi.

Đối với việc thực hiện cả hai con đường của một nhánh, điều này được gọi là thực thi háo hức và đã được nghiên cứu phần nào. "Thi hành háo hức háo hức: Một hình thức tối ưu của thực thi đầu cơ" của Augustus K. Uht và Vijay Sindagi có thể là một điều đáng xem.

Thực hiện háo hức có một số vấn đề. Đối với đầu cơ sâu, số lượng đường dẫn phải được theo dõi có thể tăng theo cấp số nhân (mỗi đường dẫn nhánh rẽ nhánh có thể gặp một nhánh). Dự đoán chi nhánh cũng thường rất chính xác (> 90% chính xác), vì vậy luôn luôn thực hiện cả hai đường dẫn sẽ lãng phí. Thực thi háo hức cũng có thể "làm ô nhiễm" bộ nhớ cache với nội dung vô dụng. (Bài viết được đề cập ở trên đề xuất thực thi háo hức một cách thông minh để tránh một số vấn đề này.) Giới hạn háo hức tìm đường thay thế có ít vấn đề hơn và có thể hấp dẫn hơn trong việc giảm độ trễ phục hồi sai trong các đường ống ngắn hơn.

Một cách tiếp cận khác đã được đề xuất là dự đoán động các nhánh "võng" (các nhánh chuyển tiếp ngắn nối lại với đường dẫn chính của luồng lệnh). "Dự đoán võng động cho kiến ​​trúc tập lệnh không quy định" của Artur Klauser và cộng sự (1998) có thể đáng để đọc cho ý tưởng đó. (Hyesoon Kim et al. "Các chi nhánh mong muốn: Kết hợp phân nhánh có điều kiện và dự đoán cho việc thực thi theo quy định thích nghi" đề xuất thêm vào các nhánh của ISA để tạo điều kiện thuận lợi cho võng và mở rộng phương pháp dự đoán này cho các nhánh vòng lặp khó dự đoán.)


Đó là một câu trả lời thực sự tốt đẹp! Cảm ơn bạn. :-)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.