Kỹ thuật ống dẫn lệnh

Pipelining là một khái niệm rất cơ bản trong máy tính bắt nguồn từ sự cần thiết phải xử lýdữ liệu ở tốc độ nhanh hơn và nhanh hơn so với tốc độ có sẵn từ kiến ​​trúc kiểu bus. Do đó, người ta tạo ra các đường ống dẫn lệnh nhằm cải thiện hiệu suất làm việc của CPU.

 Kỹ thuật ống dẫn lệnh Pipelining là một kỹ thuật được sử dụng để cải thiện thông lượng thực thi của CPU bằng cách sử dụng tài nguyên của bộ xử lý một cách hiệu quả hơn.

Ý tưởng cơ bản là chia các lệnh của bộ xử lý thành một loạt các giai đoạn độc lập nhỏ. Mỗi giai đoạn được thiết kế để thực hiện một phần nhất định của hướng dẫn. Ở cấp độ rất cơ bản, các giai đoạn này có thể được chia thành:

Tìm nạp một lệnh từ bộ nhớ

Giải mã lệnh được thực hiện

Thực hiện lệnh

Ghi kết quả trở lại thanh ghi hoặc bộ nhớ

Ví dụ: Chúng ta có những lệnh đều đặn, mỗi lệnh được thực hiện trong cùng một khoảng thời gian. Giả sử, mỗi lệnh được thực hiện trong 5 giai đoạn và mỗi giai đoạn được thực hiện trong 1 chu kỳ xung nhịp. Các giai đoạn thực hiện một lệnh là: lấy lệnh (IF: Instruction Fetch), giải mã (ID: Instruction Decode), thi hành (EX: Execute), thâm nhập bộ nhớ (MEM: Memory Access), lưu trữ kết quả (RS: Result Storing).

 

Trên một CPU không pipelined, khi một lệnh đang được xử lý ở một giai đoạn cụ thể, các giai đoạn khác ở trạng thái nhàn rỗi – điều này rất kém hiệu quả. Nếu nhìn vào biểu đồ, khi lệnh thứ nhất đang được giải mã, các Đơn vị Tìm nạp, Thực thi và Ghi của CPU không được sử dụng và phải mất 8 chu kỳ đồng hồ để thực hiện 2 lệnh.

Mặt khác, trên một CPU pipelined, tất cả các giai đoạn hoạt động song song. Khi lệnh đầu tiên đang được giải mã bởi Bộ giải mã, lệnh thứ 2 đang được Bộ tìm nạp tìm nạp. Chỉ cần 5 chu kỳ xung nhịp để thực hiện 2 lệnh trên một CPU pipelined.

Lưu ý rằng việc tăng số lượng các giai đoạn trong đường ống không phải lúc nào cũng dẫn đến việc tăng thông lượng thực thi. Trên một CPU không có pipelined, một lệnh có thể chỉ mất 3 chu kỳ, nhưng trên một CPU có pipelined thì có thể mất 4 chu kỳ do các giai đoạn khác nhau liên quan. Do đó, một lệnh đơn lẻ có thể yêu cầu nhiều chu kỳ xung nhịp hơn để thực thi trên một CPU pipelined. Nhưng thời gian cần thiết để hoàn thành việc thực thi nhiều lệnh sẽ nhanh hơn trong các CPU có cấu trúc liên kết. Vì vậy, cần phải có sự cân bằng ở giữa.

Một ví dụ khác bảng dưới đây cho thấy chỉ trong một chu kỳ xung nhịp, bộ xử lý có thể thực hiện một lệnh (bình thường lệnh này được thực hiện trong 5 chu kỳ).

Chuỗi lệnh

Chu kỳ xung nhịp

 

1

2 3 4 5 6 7 8

9

Lệnh thứ i IF ID EX MEM RS        
Lệnh thứ i+1   IF ID EX MEM RS      
Lệnh thứ i+2     IF ID EX MEM RS    
Lệnh thứ i+3       IF ID EX MEM RS  
Lệnh thứ i+4         IF ID EX MEM RS

So sánh với kiểu xử lý tuần tự thông thường, 5 lệnh được thực hiện trong 25 chu kỳ xung nhịp, thì xử lý lệnh theo kỹ thuật ống dẫn thực hiện 5 lệnh chỉ trong 9 chu kỳ xung nhịp.

Như vậy kỹ thuật ống dẫn làm tăng tốc độ thực hiện các lệnh. Tuy nhiên kỹ thuật ống dẫn có một số ràng buộc:

– Cần phải có một mạch điện để thi hành mỗi giai đoạn của lệnh vì tất cả các giai đoạn của lệnh được thi hành cùng lúc. Trong một bộ xử lý không dùng kỹ thuật ống dẫn, ta có thể dùng bộ làm toán ALU để cập nhật thanh ghi PC, cập nhật địa chỉ của toán hạng bộ nhớ, địa chỉ ô nhớ mà chương trình cần nhảy tới, làm các phép tính trên các toán hạng vì các phép tính này có thể xảy ra ở nhiều giai đoạn khác nhau.

– Phải có nhiều thanh ghi khác nhau dùng cho các tác vụ đọc và viết. Trên hình 3.8, tại một chu kỳ xung nhịp, ta thấy cùng một lúc có 2 tác vụ đọc (ID, MEM) và 1 tác vụ viết (RS).

– Trong một máy có kỹ thuật ống dẫn, có khi kết quả của một tác vụ trước đó, là toán hạng nguồn của một tác vụ khác. Như vậy sẽ có thêm những khó khăn mà ta sẽ đề cập ở mục tới.

– Cần phải giải mã các lệnh một cách đơn giản để có thể giải mã và đọc các toán hạng trong một chu kỳ duy nhất của xung nhịp.

– Cần phải có các bộ làm tính ALU hữu hiệu để có thể thi hành lệnh số học dài nhất, có số giữ, trong một khoảng thời gian ít hơn một chu kỳ của xung nhịp.

– Cần phải có nhiều thanh ghi lệnh để lưu giữ lệnh mà chúng ta phải xem xét cho mỗi giai đoạn thi hành lệnh.

– Cuối cùng phải có nhiều thanh ghi bộ đếm chương trình PC để có thể tái tục các lệnh trong trường hợp có ngắt quãng.