Pipelining và Các Nguy cơ (Hazards)
Pipelining chồng lấn việc thực thi các lệnh liên tiếp bằng cách chia quá trình xử lý lệnh thành các giai đoạn, làm tăng thông lượng; các nguy cơ (hazards) là những tình huống — xung đột tài nguyên, phụ thuộc dữ liệu và các lệnh rẽ nhánh — ngăn cản lệnh tiếp theo tiến hành trong chu kỳ tiếp theo.
Definition
Pipelining là một kỹ thuật chồng lấn việc thực thi nhiều lệnh bằng cách phân chia quá trình xử lý của chúng thành các giai đoạn tuần tự, và một nguy cơ (hazard) là bất kỳ điều kiện nào buộc một giai đoạn phải tạm dừng vì nó không thể tiến hành chính xác trong chu kỳ xung nhịp tiếp theo.
Scope
Chủ đề này bao gồm đường ống lệnh cổ điển và ba loại nguy cơ giới hạn nó: nguy cơ cấu trúc (xung đột tài nguyên), nguy cơ dữ liệu (sự phụ thuộc giữa các lệnh) và nguy cơ điều khiển (các lệnh rẽ nhánh). Nó bao gồm các biện pháp khắc phục tiêu chuẩn — chuyển tiếp/bỏ qua (forwarding/bypassing), tạm dừng (stalling) và xử lý rẽ nhánh. Nó không bao gồm việc phát hành song song nâng cao (song song mức lệnh), dự đoán hướng rẽ nhánh chuyên sâu (dự đoán rẽ nhánh) và sắp xếp lại động (thực thi ngoài thứ tự).
Core questions
- Việc chia quá trình thực thi lệnh thành các giai đoạn làm tăng thông lượng như thế nào mà không làm giảm độ trễ?
- Nguy cơ cấu trúc, dữ liệu và điều khiển là gì, và nguyên nhân của mỗi loại là gì?
- Chuyển tiếp (forwarding) giải quyết nhiều nguy cơ dữ liệu như thế nào mà không cần tạm dừng?
- Chi phí của các lệnh rẽ nhánh trong đường ống là gì, và làm thế nào để giảm thiểu nó?
Key concepts
- các giai đoạn đường ống (tìm nạp, giải mã, thực thi, bộ nhớ, ghi lại)
- thông lượng so với độ trễ
- nguy cơ cấu trúc
- nguy cơ dữ liệu
- nguy cơ điều khiển
- chuyển tiếp và bỏ qua
- tạm dừng và bong bóng đường ống
- hình phạt rẽ nhánh
Key theories
- Thông lượng đường ống và các nguy cơ
- Một đường ống k giai đoạn lý tưởng hoàn thành một lệnh mỗi chu kỳ sau khi nạp đầy, nhưng các nguy cơ cấu trúc, dữ liệu và điều khiển gây ra các tạm dừng làm giảm thông lượng dưới mức lý tưởng; thiết kế đường ống tập trung vào việc giảm thiểu các tạm dừng này.
Mechanisms
Quá trình xử lý lệnh được chia thành các giai đoạn để trong khi một lệnh đang được thực thi, các lệnh khác đang được tìm nạp và giải mã. Nguy cơ cấu trúc phát sinh khi hai lệnh cần cùng một tài nguyên; nguy cơ dữ liệu khi một lệnh cần một kết quả chưa được tạo ra; nguy cơ điều khiển khi lệnh tiếp theo phụ thuộc vào một lệnh rẽ nhánh chưa được giải quyết. Chuyển tiếp (forwarding) định tuyến kết quả trực tiếp giữa các giai đoạn, tạm dừng (stalls) chèn các bong bóng (bubbles) khi chuyển tiếp không đủ, và xử lý rẽ nhánh làm giảm các hình phạt nguy cơ điều khiển.
Clinical relevance
Pipelining là kỹ thuật hiệu suất nền tảng trong hầu hết mọi bộ xử lý, và việc hiểu các nguy cơ giải thích tại sao thứ tự lệnh và hành vi rẽ nhánh ảnh hưởng đến tốc độ. Lập lịch lệnh của trình biên dịch và nhận thức của lập trình viên về các phụ thuộc và mẫu rẽ nhánh có thể cải thiện đáng kể hiệu suất trên phần cứng có đường ống.
History
Pipelining xuất hiện trong các máy hiệu suất cao đời đầu như IBM Stretch và CDC 6600 vào đầu những năm 1960. Đường ống năm giai đoạn đơn giản đã trở thành một mô hình giảng dạy và thiết kế kinh điển với các bộ xử lý RISC vào những năm 1980, và việc phân loại có hệ thống các nguy cơ và biện pháp khắc phục chúng đã được hệ thống hóa trong các văn bản của Hennessy-Patterson.
Key figures
- John L. Hennessy
- David A. Patterson
- Seymour Cray
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- Pipelining có làm cho một lệnh đơn chạy nhanh hơn không?
- Không. Pipelining không làm giảm thời gian hoàn thành một lệnh (độ trễ); nó làm tăng số lượng lệnh hoàn thành trên một đơn vị thời gian (thông lượng) bằng cách chồng lấn việc thực thi của chúng, giống như một dây chuyền lắp ráp làm tăng sản lượng mà không làm tăng tốc bất kỳ sản phẩm đơn lẻ nào.
- Chuyển tiếp (forwarding) là gì?
- Chuyển tiếp, hay bỏ qua (bypassing), định tuyến một kết quả vừa được tính toán trực tiếp từ giai đoạn tạo ra nó đến một giai đoạn sau cần nó, thay vì chờ nó được ghi lại vào tệp thanh ghi. Điều này giải quyết nhiều nguy cơ dữ liệu mà không làm tạm dừng đường ống.