You are on page 1of 10

Kỹ thuật xử lý đường ống (Pipeline)

1.1.Kỹ thuậ t xử lý lệnh kiểu đườ ng ố ng (Pipeline)


1.1.1. Nguyên tắc chung của kỹ thuật đường ống
Kỹ thuật xử lý lệnh kiểu đường ống tương tự như việc sử dụng một dây chuyền sản xuất.
Người ta chia một dây chuyền sản xuất thành nhiều công đoạn. Mỗi công đoạn thực hiện một
thao tác sản xuất cụ thể. Sản phẩm được hình thành dần sau từng công đoạn sản xuất và được
chuyển tới công đoạn tiếp theo cho tới công đoạn cuối cùng thì được hoàn thành. Quy trình này
tương tự như một đường ống nước (pipelining) vì trong ống nước, các phần của dòng nước lần
lượt trôi qua các ống cho tới phần cuối cùng.
Với cách tiếp cận như vậy, người ta phân chia các tiến trình, các lệnh, các dữ liệu thành
những công đoạn (stage) khác nhau. Mỗi công đoạn sẽ được xử lý trên một bộ phận nào đó. Kết
quả của công đoạn trước trở thành đầu vào của công đoạn sau. Như vậy, khi thực hiện nhiều lệnh
trong cơ chế Pipeline thì các lệnh được thực hiện gối đầu nhau.
Ví dụ sau đây cho phép ta tiếp cận kĩ thuật này một cách đơn giản. Giả sử một lệnh được chia
thành hai công đoạn nhỏ: nạp lệnh (Fetch Instruction – IF) và thực thi lệnh (Execute Instruction
– EI). Sau khi lệnh thứ nhất được nạp và trong thời gian thực thi nó thì bộ nhớ chính được truy
nhập. Khi đó lệnh thứ hai sẽ được nạp song song với thời gian thực thi lệnh thứ nhất. Hình 1.4.1.
mô tả cách tiếp cận này.

Hình 1.0-1: Các mô tả đơn giản đường ống lệnh hai công đoạn
Đường ống chia làm hai công đoạn độc lập. Công đoạn thứ nhất nạp lệnh và lưu trữ nó tạm
thời. Khi công đoạn hai bắt đầu rỗi thì công đoạn một truyền lệnh đang được lưu trữ vào công
đoạn hai. Trong khi công đoạn hai đang thực thi lệnh thì công đoạn một tiếp tục nạp lệnh tiếp
theo. Công việc đó gọi là nạp trước lệnh (instruction prefetch) hoặc là nạp gối đầu (fetch
overlap).

Hình 1.0-2: Mô tả chi tiết đường ống lệnh gồm hai công đoạn
Rõ ràng là quá trình này làm tăng tốc độ thực thi lệnh. Nếu thời gian hoạt động của các công
đoạn nạp và công đoạn thực thi bằng nhau thì chu kì lệnh sẽ giảm đi một nửa. Tuy nhiên, trong
thực tế thì tốc độ thực thi không thể tăng gấp đôi (xem minh hoạ trên hình 4-2).
Đó là do hai nguyên nhân sau đây:
 Thời gian thực thi nói chung sẽ dài hơn thời gian nạp lệnh. Việc thực thi bao gồm việc đọc
và lưu trữ các toán hạng và thực hiện một vài phép toán. Do đó công đoạn nạp lệnh phải
đợi một lúc trước khi nó có thể truyền sang công đoạn hai.
 Lệnh rẽ nhánh có điều kiện không cho biết địa chỉ của lệnh tiếp theo sẽ được nạp. Do đó
công đoạn nạp phải đợi cho đến khi nó nhận được địa chỉ của lệnh tiếp theo từ công đoạn
thực thi. Sau đó công đoạn thực thi có thể phải đợi trong khi lệnh mới được nạp.
Để giảm sự mất thời gian vì lý do thứ hai có thể khắc phục nhờ quy tắc đơn giản sau: Khi một
lệnh rẽ nhánh có điều kiện được chuyển từ công đoạn nạp sang công đoạn thực thi thì công đoạn
nạp sẽ nạp lệnh tiếp theo trong bộ nhớ chính sau lệnh rẽ nhánh. Nếu lệnh rẽ nhánh không được
thực hiện thì không bị mất thời gian. Nếu lệnh rẽ nhánh được thực hiện thì lệnh được nạp vào bị
loại bỏ và lệnh mới sẽ được nạp.
Để tăng tốc độ thực thi lệnh, đường ống phải có nhiều công đoạn hơn. Chúng ta hãy tách quá
trình thực hiện một lệnh thành các giai đoạn sau:
 Fetch Instruction (FI): đọc lệnh tiếp theo vào bộ đệm
 Decode Instruction (DI): giải mã lệnh
 Calculate Operands (CO): tính các địa chỉ thực của từng toán hạng nguồn. Các địa chỉ này
có thể là địa chỉ trực tiếp, địa chỉ thanh ghi trực tiếp, địa chỉ thay thế hoặc các dạng địa chỉ
khác.
 Fetch Operands (FO): nạp từng toán hạng từ bộ nhớ. Các toán hạng trong thanh ghi không
được nạp.
 Execute Instruction (EI) : thực hiện phép toán được chỉ định và lưu trữ kết quả vào vị trí
toán hạng đích.
 Write Operand (WO): lưu trữ kết quả vào bộ nhớ.
Với cách phân chia này, thời gian thực hiện các công đoạn khác nhau sẽ gần bằng nhau hơn.
Hình 3.3 cho thấy đường ống 6 công đoạn có thể giảm thời gian thực thi 9 lệnh từ 54 đơn vị thời
gian xuống còn 14 đơn vị thời gian.

Lệ 1 2 3 4 5 6 7 8 9 10 11 12 13 14
nh
1 F D C F E W
I I O O I O
2 F D C F E W
I I O O I O
3 F D C F EI W
I I O O O
4 F D C FO E W
I I O I O
5 F D CO F E W
I I O I O
6 F DI C F EI WO
I O O
7 FI D C FO EI WO
I O
8 F D CO FO EI W
I I O
9 F DI CO FO EI WO
I
Hình 1.0-3: Giản đồ thời gian thực hiện lệnh đường ống 6 công đoạn
Chú ý rằng trên sơ đồ của hình 1.4-3 chúng ta đã giả thiết rằng mỗi lệnh đều phải đi qua tất cả
6 công đoạn của đường ống. Điều đó không phải lúc nào cũng xảy ra. Ví dụ, lệnh nạp không cần
công đoạn WO. Tuy nhiên, để làm đơn giản phần cứng của đường ống, thời gian được cài đặt với
giả thiết rằng mỗi lệnh đều đòi hỏi tất cả 6 công đoạn. Cũng như vậy, trên giản đồ giả thiết rằng
tất cả các công đoạn có thể được thực hiện một cách song song. Đặc biệt, nó giả thiết rằng không
có xung đột bộ nhớ. Ví dụ, các công đoạn FI, FO và WO đều đòi hỏi truy nhập bộ nhớ. Trên giản
đồ giả thiết rằng tất cả các quá trình truy nhập có thể xảy ra đồng thời. Thực tế, hầu hết các hệ
thống nhớ đều không cho phép điều đó. Tuy nhiên, các giá trị cần truy nhập có thể ở trong cache
hoặc các công đoạn FO/WO có thể rỗng. Vì vậy, phần lớn thì các xung đột bộ nhớ sẽ không làm
giảm tốc độ của đường ống.
Có một vài yếu tố có thể làm giảm hiệu suất đường ống:
 Nếu thời gian thực hiện 6 công đoạn không bằng nhau thì tại một số công đoạn có hiện
tượng phải đợi tương tự như trong ví dụ đường ống có hai công đoạn ở trên.
 Câu lệnh rẽ nhánh có điều kiện có thể làm mất hiệu lực một số lần nạp lệnh.
 Sự ngắt sẽ làm giảm hiệu suất của đường ống.
Hình 1.4.4. minh hoạ hiệu ứng rẽ nhánh có điều kiện sử dụng cùng một chương trình như hình
4.3.
1 2 3 4 5 6 7 8 9 1 1 12 1 14 15
0 1 3

Lệnh 1 FI DI CO FO EI W
O

Lệnh 2 FI DI C FO EI WO
O

Lệnh 3 FI DI CO FO EI W
O

Lệnh 4 FI DI CO FO

Lệnh 5 FI DI CO
Lệnh 6 FI DI

Lệnh 7 FI

Lệnh FI D C FO EI WO
15 I O

Lệnh FI D CO F EI W
16 I O O

Hình 1.0-4: . Hiệu ứng của lệnh rẽ nhánh có điều kiện trong việc thực hiện đường ống
lệnh
Giả thiết rằng lệnh 3 là lệnh rẽ nhánh có điều kiện tới lệnh 15. Trước khi lệnh được thực thi
thì không có cách nào biết được lệnh tiếp theo sẽ là lệnh nào. Trong ví dụ này, đường ống gọi
lệnh tuần tự tiếp theo (lệnh 4) và tiếp tục gọi các lệnh tuần tự khác.
Nạp lệnh - FI

Giải mó lệnh - DI

Tớnh cỏc toỏn


hạng - CO

Rẽ nhánh có
điều kiện ?

C
K

Nạp toán hạng -


FO

Thực thi lệnh -


EI
Cập nhật PC

Viết toỏn hạng


WO

Làm rỗng
C
đường ống Rẽ nhánh
hoặc K
ngắt ?

Hình 1.0-5: Đường ống lệnh CPU gồm 6 công đoạn


Trên hình 1.4.3 không có lệnh rẽ nhánh nên hiệu suất hoạt động của đưòng ống cao. Trên hình
3.4. phải đến hết lệnh 7 mới xác định được lệnh tiếp theo. Tại điểm này, đường ống cần phải xoá
sạch những lệnh không cần sử dụng. Cho đến đơn vị thời gian thứ 8 thì lệnh 15 mới đựoc nạp
vào đường ống. Không có lệnh nào đựoc thực hiện trong các đơn vị thời gian từ 9 đến 12. Đó là
nhược điểm phải chấp nhận vì chúng ta không thể đoán trước được lệnh sẽ rẽ nhánh tới đâu.
Hình 1.4.5. mô tả thuật toán đường ống thực hiện lệnh rẽ nhánh và thực hiện ngắt.
Một vấn đề khác có thể xuất hiện ở đây. Đó là nếu công đoạn CO phụ thuộc vào nội dung của
thanh ghi có thể bị thay thế bởi lệnh trước đó. Do đó các xung đột thanh ghi và xung đột bộ nhớ
có thể xảy ra. Hệ thống phải chứa một logic để tính toán các xung đột này.
Từ hai ví dụ trên, chúng ta thấy rằng nếu đường ống chia thành càng nhiều công đoạn thì tốc
độ thực thi lệnh càng nhanh. Kĩ thuật đường ống làm tăng hiệu suất làm việc của CPU nhưng nó
đòi hỏi phải thiết kế cẩn thận để cho kết quả tối ưu với độ phức tạp có thể chấp nhận được.
Tóm lại, các hiện tượng bất thường với PipeLine là:
 Xung đột về cấu trúc: trên thực tế trong chương trình không chỉ có các lệnh tuần tự mà còn
chứa những lệnh rẽ nhánh hoặc lệnh lặp. Nhưng theo nguyên lý của Pipeline thì các lệnh được
nạp tuần tự và được xử lý liên tiếp nhau. Khi gặp các lệnh có cấu trúc trên sẽ xảy ra khả năng
lệnh đã được đưa vào đường ống không phải là lệnh mà chương trình sẽ cần thực hiện. Khi đó
người ta phải tìm cách loại bỏ những lệnh đã được đưa vào đường ống và thực hiện quá trình
nạp lại từ đầu (refill). Để nâng cao hiệu quả của đường ống trong trường hợp này thì ta sử
dụng thuật toán để dò trước các cấu trúc lặp (detect predict) hoặc cấu trúc rẽ nhánh để xử lý
hoặc nạp trước các lệnh cần thiết.
 Bất thường về dữ liệu: xảy ra khi lệnh đang thực hiện cần nạp một dữ liệu nhưng dữ liệu ấy
lại là kết quả của lệnh trước nhưng chưa được xử lý hoặc các dữ liệu đó chưa sẵn sàng. Khi đó
người ta phải sử dụng bộ làm trễ có tác dụng làm chậm các lệnh đang cần dữ liệu.

1.1.2. Sơ đồ cấu trúc của đường ống


Nguyên lý hoạt động như sau: dữ liệu hoặc lệnh cần xử lý được đưa vào đầu vào (Input). Khi
có xung đồng hồ thì mạch lật sẽ mở. Dữ liệu hoặc lệnh được đưa vào bộ xử lý 1. Dữ liệu hoặc
lệnh tiếp theo sẽ nằm chờ sẵn ở đầu vào. Sau một thời gian thực hiện, đến xung đồng hồ tiếp theo
thì kết quả của bộ xử lý 1 được đưa vào bộ xử lý 2 và dữ liệu sau đó được đưa vào bộ xử lý 1.
Quá trình này được thực hiện liên tiếp nhau cho đến khi tất cả các lệnh được xử lý.
Đầ
Mạch Xử Mạch Xử
u Mạch Xử Đầu ra
lật lý 1 ... lật lý
vào lật lý 2 n

Xung nhịp
đồng hồ

Xung nhịp
điều khiển
tl tb

Hình 1.0-6: Sơ đồ cấu trúc đường ống


Trong đó:
 tl là thời gian mở mạch lật.
 tb là thời gian của một công đoạn chậm nhất.
 p là chu kì đồng hồ (Period): p=tl+tb.
Tốc độ xung đồng hồ phụ thuộc vào công đoạn chậm nhất.
1.1.3. Tiêu chuẩn đánh giá Pipeline
Các thông số của Pipeline:
 Thời gian để thực hiện n lệnh trên hệ thống Pipeline có m công đoạn là:
TPipe = m*p + (n-1)*p
 Thời gian thực hiện n lệnh không sử dụng Pipeline là
m
Tseq  n *  t i
i 1

Giả sử ti =  với mọi i và tl < tb thì p = tb = 


Từ đó suy ra Tpipe =( m+n-1)*p và Tseq = m*n*p
 Hệ số tăng tốc S (Speed Up)
Tseq n*m* p m*n
S  
T pipe m * p  p * ( n  1) m  n  1
S m
n (*)
Khi thực hiện rất nhiều lệnh trên hệ thống Pipeline có m công đoạn thì tốc độ hệ thống tăng
lên m lần.
Các hệ số trên chỉ áp dụng trong lý thuyết. trong thực tế, Pipeline phụ thuộc nhiều vào yếu tố
khác. Giả sử n=1 thì S=1.

Lện (1 (2 (3) (4) (5) (6) (7) (8) (9) Ch


h ) ) u
kỳ

1 FI DI F EI W
O O

2 FI DI F EI W
O O

3 FI DI FO EI W
O

4 FI DI FO EI W
O

5 FI DI FO EI W
O

Bảng 4-1
Ví dụ1: Tính S khi thực hiện 5 lệnh trên hệ thống 5 công đoạn: FI, DI, FO, EI, WO
Bảng 4-1 là bảng trạng thái biểu diễn thời gian thực hiện hết 5 lệnh.
Biết tb =  =80 ns.
Ta có: Tseq = 5*5*80 và Tpipe = (m+n-1)*p = (5+4)*80
Vậy theo công thức (*) và bảng trạng thái, chúng ta có:
Tseq 5 * 5 25
S tt   
TPipe 9 9
Ví dụ 2: Tính S cho dãy lệnh sau
1) MOV R1,x R1  x
2) MOV R2,y R2  y
3) ADD R2, R1, R2 R2  R1+R2
4) SUB R5,R4,R3 R5  R4 – R3
5) MPY R5, R2, R5 R5 R2 * R5
Bảng 1.4-2 là bảng trạng thái biểu diễn thời gian thực hiện xong dãy lệnh trên.

(1 (2 (3 (4 (5) (6) (7 (8 (9) (1 (1 (1 (1


) ) ) ) ) ) 0) 1) 2) 3)
1 F D F EI W
) I I O O
2 F D F EI W
) I I O O
3 FI D - - F EI W
) I O O
4 FI DI - - F EI W
) O O
5 FI DI - - - - FO EI W
) O

Bảng 1.0-2
Từ đó chúng ta tính được hệ số tăng tốc theo lý thuyết và trên thực tế như sau:
5∗5 25 5∗5 25
S lt = = S tt = =
5+5−1 9 và 13 13

1.1.4. Các kiểu Pipeline


Pipeline chia ra thành một số loại chính sau:
 Pipeline tĩnh (Static pipeline): chỉ thực hiện một loại lệnh tại một thời điểm. Ví dụ như chỉ
thực hiện một loại lệnh cộng. Nếu muốn chuyển sang loại lệnh khác thì nhất thiết phải làm
sạch Pipeline, sau đó thực hiện từ đầu. Do đó, tốc độ sẽ chậm.
 Pipeline động (Dynamic Pipeline): có thể thực hiện được nhiều loại lệnh (phép toán) trong
cùng một thời điểm. Khi đó ta có các cơ chế lựa chọn các đường đi đến các công đoạn
trong Pipeline. Kĩ thuật chế tạo loại này phức tạp hơn.
Các khuynh hướng Pipeline trong tương lai:
 Siêu đẳng hướng (super Scalar): đây là phương pháp xử lý song song cho phép thực hiện
nhiều lệnh trong một chu kì trên nhiều phần cứng khác nhau.
 Siêu Pipeline( Super Pipeline): tăng tốc độ xử lý bằng cách phân chia Pipeline thành nhiều
công đoạn, đồng thời tăng tốc độ điều khiển Pipeline.
BÀI TẬP
1. Hãy tính hệ số tăng tốc S=Tseq/Tpipe theo lý thuyết và thực tế khi thực hiện các lệnh sau:
1) MOV R1,a 4) MPY R2,R2,R1
2) MOV R2,b 5) ADD R2,R2,R3
3) ADD R3,R1,R2
Trên hệ thống PipeLine có
*) 5 công đoạn: FI, DI, FO, EI, WO
*) 6 công đoạn: FI, DI, CO, FO, EI, WO

2. Hãy tính hệ số tăng tốc S=Tseq/Tpipe theo lý thuyết và thực tế khi thực hiện các lệnh sau:
1) MOV R1,a 4) MPY R2,R2,R2
2) MOV R2,b 5) ADD R2,R1,R2
3) ADD R2,R2,R1
Trên hệ thống PipeLine có
*) 5 công đoạn: FI, DI, FO, EI, WO
*) 6 công đoạn: FI, DI, CO, FO, EI, WO

(Đọc và giải thích ví dụ ở trang 795 (C-21) trongTLTK tiếng Anh- Nam và Cảnh)

3. Hóy tính hệ số tăng tốc S=Tseq/Tpipe theo lý thuyết và thực tế khi thực hiện các lệnh sau:
1) ADD R1,R2,R3 3) MPY R6,R1,R5
2) ADD R5,R2,R4
Trªn hÖ thèng PipeLine cã
*) 5 c«ng ®o¹n: FI, DI, FO, EI, WO
*) 6 c«ng ®o¹n: FI, DI, CO, FO, EI, WO
6. H·y tÝnh hÖ sè t¨ng tèc S=Tseq/Tpipe theo lý thuyÕt vµ thùc tÕ khi thùc hiÖn c¸c lÖnh
sau:
1) ADD R1,R2,R3 3) ADD R3,R1,R2
2) ADD R4,R1,R4 4) ADD R1, R1, R4
Trªn hÖ thèng PipeLine cã
*) 5 c«ng ®o¹n: FI, DI, FO, EI, WO
*) 6 c«ng ®o¹n: FI, DI, CO, FO, EI, WO
7. Tr×nh bµy kü thuËt xö lý song song møc lÖnh.
8.C¸ch ph©n lo¹i c¸c hÖ thèng ®a xö lý
9.Nªu nh÷ng ®Æc ®iÓm chÝnh vµ c¬ chÕ ho¹t ®éng cña ®a bé xö lý.

You might also like