Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Kỹ thuật ống dẫn là kỹ thuật mà nhiều lệnh được thực hiện theo dạng nạp chồng (overlap). Kỹ thuật này được sử dụng phổ biến trong các kiến trúc CPU hiện nay.

Như các phần trên đã trình bày, một lệnh MIPS được thực hiện trong 5 bước:

  1. Duyệt lệnh từ bộ nhớ
  2. Giải mã lệnh, đồng thời đọc các thanh ghi
  3. Thực thi lệnh hoặc tính địa chỉ
  4. Truy cập toán hạng trong bộ nhớ
  5. Ghi kết quả vào thanh ghi

Để đơn giản trong kỹ thuật ống dẫn, chúng ta chỉ xét đến các lệnh: load word (lw), store word (sw), add (add), substract (sub), AND (and), OR (or), set less than (slt) và beq.

Giả sử thời gian thực hiện từng thành phần như sau: thao tác truy cập bộ nhớ cần 200 ps, các phép toán ALU cần 200 ps và 100 ps để đọc hoặc ghi vào thanh ghi. Thời gian thực hiện mỗi lệnh được thể hiện như bảng 3.2. Trong hình này thì lệnh lw có thời gian thực hiện lớn nhất (800 ps).

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Bảng 3.2: Tổng thời gian thực hiện của mỗi lệnh

Giả sử chúng ta xét ví dụ với ba lệnh như sau: LW $1,100($0)

LW $2,200($0)
LW $3,300($0)

Các lệnh này được thực hiện theo hai cách: tuần tự và theo kỹ thuật ống dẫn. Hình 3.10 thể hiện so sánh giữa hai cách này. Ở phần trên của hình cho thấy ba lệnh được thực hiện tuần tự có tổng thời gian là 800 × 3 = 2400 ps, thời gian giữa mỗi lệnh là 800 ps. Trong khi ở phần dưới của hình cho thấy nếu ba lệnh này được thực hiện trong kỹ thuật ống dẫn thì chỉ cần 1400 ps, thời gian giữa mỗi lệnh chỉ là 200 ps.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Hình 3.10: Thực hiện tuần tự so với kỹ thuật ống dẫn

Đường đi dữ liệu của kỹ thuật ống dẫn (pipelined datapath)

Một lệnh được thực hiện bao gồm 5 giai đoạn:

− Duyệt lệnh (IF)

− Giải mã lệnh (ID) và đọc các thanh ghi

− Thực thi lệnh (EX)

− Truy cập bộ nhớ (MEM)

− Ghi kết quả trở lại thanh ghi (WB)

Các giai đoạn này được thể hiện như hình 3.11 theo chiều từ trái sang phải. Ngoại trừ ở giai đoạn WB giá trị được ghi vào thanh ghi ngược trở lại giai đoạn ID và thao tác câp nhật giá trị PC đến giá trị kế tiếp hoặc địa chỉ của lệnh nhảy ở giai đoạn MEM.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Giả sử chúng ta có ba lệnh được thực thi theo kỹ thuật ống dẫn: lw $1,100($0) lw $2,200($0) lw $3,300($0) Hình 3.12 thể hiện các lệnh này trong kỹ thuật ống dẫn. Trong hình này các giai đoạn của mỗi lệnh được thể hiện bằng tên tương ứng: IM (instruction memory), Reg (Register), ALU (Algorithm Logic Unit) và DM (Data Memory). Với quy ước phân nữa bên trái thể hiện quá trình ghi, trong khi phân nữa bên phải thể hiện quá trình đọc. Giai đoạn nào sử dụng quá trình ghi hay đọc thì được tô đậm tương ứng, không sử dụng thì bỏ trắng. Như giai đoạn thực thi EX thì biểu tượng Reg được tô đen bên phải, bỏ trắng bên trái thể hiện ở giai đoạn này có quá trình đọc thanh ghi nhưng không có quá trình ghi thanh ghi.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Hình 3.12: Ba lệnh được thực thi trong kỹ thuật ống dẫn

Để lưu lại giá trị ở từng giai đoạn của mỗi lệnh, trong kỹ thuật ống dẫn bổ sung thêm các thanh ghi nằm giữa các giai đoạn như hình 3.13 (các thanh ghi này còn được gọi là thanh ghi ống dẫn – pipelined register). Các thanh ghi này được đặt tên bằng cách kết hợp tên giữa hai giai đoạn kề. Ví dụ thanh ghi ống dẫn giữa giai đoạn IF và ID được đặt tên là IF/ID. Thanh ghi IF/ID có độ dài 64 bit (32 bit lưu lệnh được duyệt từ bộ nhớ và 32 bit lưu địa chỉ PC kế tiếp), các thanh ghi ống dẫn còn lại ID/EX, EX/MEM và MEM/WB có độ dài tương ứng là 128 bit, 97 bit và 64 bit.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Để hiểu rõ cách thức hoạt động trong kỹ thuật ống dẫn, chúng ta xét lênh lw được thực hiện trong kỹ thuật ống dẫn thông qua năm giai đoạn như sau:

− Duyệt lệnh: hình 3.14 thể hiện lệnh được đọc từ bộ nhớ dùng địa chỉ chứa trong PC, sau đó lệnh đọc được được lưu vào thanh ghi ống dẫn IF/ID. Địa chỉ PC tăng lên 4 và được lưu trở lại PC để chỉ đến lệnh kế tiếp. Đồng thời kết quả này cũng được lưu vào thanh ghi ống dẫn IF/ID để xử lý trong trường hợp một lệnh nhảy tương ứng. Máy tính không thể biết được loại lệnh sẽ được duyệt tiếp theo nên phải lưu lại các thông tin cần thiết vào thanh ghi ống dẫn để xử lý cho bất kỳ loại lệnh nào. Trong giai đoạn này lệnh được đọc từ bộ nhớ lệnh nên phân nửa cuối của bộ nhớ này được tô đậm. Đối với thanh ghi ống dẫn IF/ID được ghi dữ liệu vào nên phân nửa đầu của thanh ghi ống dẫn này được tô đậm.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

− Giải mã lệnh và đọc các thanh ghi: Trong hình 3.15 địa chỉ offset 16 bit được đọc từ IF/ID và được mở rộng thành 32 bit tương ứng. Đồng thời xác định các thanh ghi để đọc dữ liệu. Dữ liệu được đọc từ thanh ghi cùng với địa chỉ offset 32 bit và giá trị PC được ghi vào thanh ghi ống dẫn ID/EX. Mặc dù lệnh lw chỉ đọc một thanh ghi nguồn (Read data 1) ở giai đoạn này, bộ xử lý không biết được loại lệnh đang được giải mã. Vì thế, giá trị hằng 16 bit (được mở rộng thành 32 bit) và đọc cả hai thanh ghi được lưu vào thanh ghi ống dẫn ID/EX. Chúng ta không cần cả ba toán hạng, nhưng để đơn giản trong điều khiển thì giữ lại cả ba thành phần này. Trong giai đoạn này lệnh được đọc từ thanh ghi ống dẫn IF/ID nên phân nửa cuối của thanh ghi này được tô đậm. Đối với thanh ghi ống dẫn ID/EX được ghi dữ liệu vào nên phân nửa đầu của thanh ghi ống dẫn này được tô đậm. Trong khi đó thanh ghi nguồn (Read data 1) trong tập thanh ghi được đọc nên phân nửa cuối của tập thanh ghi này được tô đậm.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

− Thực thi hoặc tính địa chỉ: hình 3.16 thể hiện giai đoạn ba trong kỹ thuật ống dẫn của lệnh lw. Lệnh này đọc nội dung thanh ghi (register 1) để đưa vào thanh phần đầu vào thứ nhất của ALU. Còn thành phần đầu vào thứ hai của ALU được lấy từ giá trị địa chỉ offset 32 bit từ thanh ghi ống dẫn ID/EX (trường hợp này giá trị đầu vào của bộ điều hợp (Mux) có giá trị 1). Sau đó ALU thực hiện phép toán cộng để xác định địa chỉ trong bộ nhớ dữ liệu cần truy cập. Kết quả của phép toán cộng trong ALU được ghi vào thanh ghi ống dẫn EX/MEM. Trong giai đoạn này thanh ghi ống dẫn ID/EX được đọc dữ liệu nên phân nửa cuối của thanh ghi này được tô đậm. Sau đó dữ liệu được ghi vào thanh ghi ống dẫn EX/MEM nên phân nửa đầu của thanh ghi ống dẫn này được tô đậm.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

− Truy cập bộ nhớ: hình 3.17 thể hiện giai đoạn bốn trong kỹ thuật ống dẫn của lệnh lw. Địa chỉ 32 bit được đọc từ thanh ghi EX/MEM dùng để xác định nội dung cần đọc trong bộ nhớ dữ liệu. Dữ liệu được đọc từ bộ nhớ sẽ được ghi vào thanh ghi ống dẫn MEM/WB. Trong trường hợp của lệnh lw, dữ liệu ghi vào bộ nhớ (write data) không hoạt động. Tương tự các trường hợp trên, đọc dữ liệu từ thanh ghi ống dẫn EX/MEM nên phân nửa cuối của thanh ghi này được tô đậm và ghi dữ liệu vào thanh ghi ống dẫn MEM/WB nên phân nửa đầu của thanh ghi này được tô đậm

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

− Ghi kết quả: hình 3.18 thể hiện giai đoạn cuối cùng trong kỹ thuật ống dẫn của lệnh lw. Dữ liệu được đọc từ thanh ghi ống dẫn MEM/WB và ghi trở lại thanh ghi đích trong tập các thanh ghi (Registers) ở giai đoạn hai. Bộ điều hợp (Mux) trong trường hợp này có giá trị đầu vào tương ứng 1. Do dữ liệu được đọc từ thanh ghi ống dẫn MEM/WB nên phân nửa cuối của thanh ghi này được tô đậm. Trong khi đó, thao tác ghi thanh ghi được thực hiện trong tập thanh ghi nên phân nửa đầu của tập thanh ghi được tô đậm.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Như vậy, đường đi dữ liệu kết hợp cả năm giai đoạn của lệnh lw trong kỹ thuật ống dẫn được thể hiện như hình 3.19. Trong hình này, cả bộ nhớ lệnh (instruction memory) và bộ nhớ dữ liệu (data memory) đều có quá trình đọc dữ liệu nhưng không có quá trình ghi dữ liệu nên phân nửa cuối của các bộ nhớ này được tô đậm. Trong khi đó cả bốn thanh ghi ống dẫn IF/ID, ID/EX, EX/MEM, MEM/WB đều có cả hai quá trình đọc và ghi nên toàn bộ các thanh ghi này được tô đậm.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Để biểu diễn đường đi dữ liệu trong kỹ thuật ống dẫn thường dùng hai loại giản đồ: giản đồ ống dẫn đa chu kỳ (multiple-clock-cycle pipeline diagram) và giản đồ ống dẫn đơn chu kỳ (single-clock-cycle pipeline diagram). Hình 3.12 là giản đồ ống dẫn biểu diễn bằng đa chu kỳ. Trong khi các hình từ hình 3.14 đến hình 3.19 là giản đồ ống dẫn biểu diễn bằng đơn chu kỳ. Giản đồ ống dẫn biểu diễn bằng đơn chu kỳ thể hiện trạng thái đường đi dữ liệu trong một chu kỳ. Giản đồ biểu diễn bằng đa chu trình thì thể hiện cách nhìn tổng quan trong kỹ thuật ống dẫn. Xét ví dụ với năm lệnh sau đây được thực hiện trong kỹ thuật ống dẫn: lw $10, 20($1) sub $11, $2, $3 add $12, $3, $4 lw $13, 24($1) add $14, $5, $6 Hình 3.20 thể hiện giản đồ ống dẫn đa chu kỳ của năm lệnh trên. Thời gian theo chiều từ trái sang phải và thứ tự lệnh theo chiều từ trên xuống dưới. Biểu diễn của các giai đoạn ống dẫn được thể hiện mỗi phần theo chiều thẳng đứng, diễn ra trong những chu kỳ xung nhịp tương ứng.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Hình 3.20: Giản đồ ống dẫn biểu diễn bằng đa chu kỳ

Giản đồ ống dẫn đơn chu kỳ thể hiện toàn bộ trạng thái đường dẫn dữ liệu trong một chu kỳ xung nhịp, và tất cả năm lệnh trong kỹ thuật ống dẫn được xác định bằng nhãn ở phía trên các giai đoạn ống dẫn tương ứng của họ. Chúng ta dùng loại giản đồ này để thể hiện chi tiết những gì xảy ra trong kỹ thuật ống dẫn thông qua mỗi chu kỳ xung nhịp. Giản đồ ống dẫn đơn chu kỳ thể hiện một phần thẳng đứng trong giản đồ ống dẫn biểu diễn bằng đa chu kỳ, thể hiện đường dẫn dữ liệu của mỗi lệnh trong kỹ thuật ống dẫn ứng với một chu kỳ xung nhịp cụ thể. Ví dụ, hình 3.21 thể hiện giản đồ ống dẫn đơn chu kỳ tương ứng với chu kỳ thứ 5 (CC5) của hình 3.20

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Điều khiển trong kỹ thuật ống dẫn (pipelined control)

Các đường điều khiển trong kỹ thuật ống dẫn được thể hiện như hình 3.22. Trong đó 6 bit thấp của trường funct (function code) trong 16 bit được mở rộng dấu thành 32 bit được lưu lại thanh ghi ống dẫn ID/EX dùng làm tín hiệu vào cho ALU control.

Đối với bộ điều hợp (Mux) có 2 ngõ vào và một ngõ ra cùng với tín hiệu điều khiển.

Nếu tín hiệu điều khiển có giá trị 1 thì ngõ ra sẽ tương ứng với ngõ vào 1 và ngược lại tín hiệu điều khiển có giá trị 0 thì ngõ ra sẽ tương ứng với ngõ vào 0. Tín hiệu PCSrc được thiết lập bởi cổng AND. Tín hiệu được thiết lập (giá trị 1) khi cả hai tín hiệu Branch và Zero đều được thiết lập (giá trị 1), ngược lại tín hiệu này sẽ có giá trị 0. Tín hiệu Branch chỉ được thiết lập cho lệnh beq nên trong trường hợp này PCSrc sẽ có giá trị 1. Các trường hợp khác PCSrc sẽ có giá trị 0.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Dựa vào 2 bit điều khiển ALUOp và 6 bit của trường mã lệnh (function code) mà các bit ALU control được thiết lập khác nhau như thể hiện trong bảng 3.3

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Bảng 3.3: Thiết lập các bit ALU control

Các tín hiệu điều khiển có ý nghĩa như sau:

− RegDst: giá trị 0 xác định thanh ghi để ghi được xác định bởi toán hạng rt (bit 20:16). Ngược lại giá trị 1 thì thanh ghi để ghi được xác định bởi toán hạng rd (bit 15:11).

− RegWrite: giá trị 0 không ảnh hưởng. Giá trị 1 thể hiện ghi dữ liệu vào thanh ghi.

− ALUSrc: giá trị 0 xác định toán hạng thứ hai của ALU lấy từ thanh ghi thứ hai (Read data 2). Ngược lại, giá trị 1 thì toán hạng thứ hai của ALU lấy giá trị mở rộng dấu 16 bit thấp của lệnh.

− PCSrc: giá trị 0 thì PC được thay thế bởi PC+4. Ngược lại, giá trị 1 thì PC được thay thế bởi kết quả tính tổng của ALU để nhảy đến địa chỉ đích.

− MemRead: giá trị 0 không ảnh hưởng. Giá trị 1 thì dữ liệu được đọc từ bộ nhớ.

− MemWrite: giá trị 0 không ảnh hưởng. Giá trị 1 thì dữ liệu được ghi vào bộ nhớ.

− MemtoReg: giá trị 0 xác định dữ liệu để ghi vào thanh ghi được lấy từ kết quả của ALU. Ngược lại, giá trị 1 xác định dữ liệu để ghi vào thanh ghi được đọc từ bộ nhớ.

Các tín hiệu điều khiển này cũng có thể được chia theo ba giai đoạn cuối trong kỹ thuật ống dẫn như bảng 3.4:

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Bảng 3.4: Các tín hiệu điều khiển tương ứng theo 3 giai đoạn sau cùng

Cũng giống như mô hình thực thi tuần tự, PC được ghi ở mỗi chu kỳ xung nhịp (clock cycle). Do đó trong kỹ thuật ống dẫn không có thêm tín hiệu điều khiển ghi đối với PC. Tương tự không có tín hiệu điều khiển ghi đối với các thanh ghi ống dẫn (IF/ID,  ID/EX,  EX/MEM, và  MEM/WB) bởi vì các thanh ghi này cũng được ghi ở mỗi chu kỳ xung nhịp.

Để thiết lập điều khiển trong kỹ thuật ống dẫn, chúng ta chỉ cần thiết lập các tín hiệu điều khiển trong mỗi giai đoạn của ống dẫn do các đường điều khiển này chỉ hoạt động trong mỗi giai đoạn tương ứng. Chúng ta có thể chia các tín hiệu điều khiển này vào 5 giai đoạn ống dẫn tương ứng như sau:

  1. Duyệt lệnh (Instruction fetch): các tín hiệu điều khiển để đọc lệnh trong bộ nhớ để ghi vào PC thì luôn luôn được thiết lập. Do đó không cần chỉ định tín hiệu điều khiển trong giai đoạn này.
  2. Giải mã lệnh/đọc thanh ghi (Instruction decode/register file read): giai đoạn này cũng thực hiện tương tự như bước trên nên không có tín hiệu điều khiển nào được bổ sung vào.
  3. Thực thi/tính địa chỉ (Execution/address calculation): Các tín hiệu được thiết lập bao gồm: RegDst dùng để lựa chọn thanh ghi kết quả (thanh ghi đích), ALUOp để lựa chọn phép toán ALU và ALUSrc để đọc từ Read data 2 hoặc từ mở rộng dấu 32 bit.
  4. Truy cập bộ nhớ (Memory access): Các tín hiệu điều khiển được thiết lập trong giai đoạn này gồm có: Branch, MemRead và MemWrite. Các tín hiệu này được thiết lập tương ứng với lệnh beq, load và store. Tín hiệu PCSrc lựa chọn địa chỉ kế tiếp hoặc nhảy đến địa chỉ đích nếu tín hiệu Branch được thiết lập và kết quả của phép toán ALU bằng 0.
  5. Ghi kết quả trở lại (Write-back): hai tín hiệu điều khiển là MemtoReg để di chuyển kết quả ALU hoặc từ bộ nhớ tới thanh ghi và RegWrite để ghi giá trị đã chọn.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Hình 3.23: Các tín hiệu điều khiển của ba giai đoạn ống dẫn sau cùng.

Vì vậy chín tín hiệu điều khiển có thể được lưu lại trong các thanh ghi ống dẫn như hình 3.23. Bốn tín hiệu được dùng trong giai đoạn EX, năm tín hiệu còn lại được lưu vào thanh ghi EX/MEM. Ba tín hiệu được dùng trong giai đoạn MEM, hai tín hiệu còn lại được lưu vào MEM/WB để sử dụng cho giai đoạn này.

Kỹ thuật pipelining trong các thế hệ cpu hiện nay của intel

Để điều khiển trong kỹ thuật ống dẫn, chúng ta thiết lập chín tín hiệu điều khiển này cho mỗi giai đoạn của mỗi lệnh, bằng cách mở rộng các thanh ghi ống dẫn để lưu giữ các tín hiệu điều khiển này. Các tín hiệu điều khiển này bắt đầu từ giai đoạn EX nên chúng ta có thể tạo ra các tín hiệu điều khiển này ở giai đoạn giải mã lệnh.

Hình 3.24 thể hiện đường dẫn đầy đủ với các thanh ghi ống dẫn và những tín hiệu điều khiển được kết nối tới các giai đoạn tương ứng.

Trong bài này giới thiệu tổng quan nguyên lý hoạt động của vi xử lý MIPS.

Trình bày cơ bản đường dẫn dữ liệu của ba loại lệnh: lệnh số học – luận lý, lệnh truyền dữ liệu và lệnh rẽ nhánh. Tổ chức hoạt động của bộ tính toán và luận lý (ALU) để thực hiện phép toán tùy thuộc vào từng loại lệnh . Dựa vào ba loại lệnh cơ bản, thiết lập các tín hiệu điều khiển của bộ điều khiển chính. Kỹ thuật ống dẫn là kỹ thuật mà nhiều lệnh được thực hiện theo dạng nạp chồng. Ưu điểm của kỹ thuật ống dẫn là thực thi lệnh nhanh hơn nhiều lần so với thực hiện lệnh theo tuần tự. Để điều khiển trong kỹ thuật ống dẫn, chúng ta sử dụng các thanh ghi ống dẫn.