You are on page 1of 3

Bài Tập

Bài 1: Vì sao nói khi sử dụng kiến trúc Pipeline, trong trường hợp không
có xung đột xảy ra, tốc độ xử lý của máy tính có thể tăng lên 400%? Hãy
chứng minh cho ý kiến này.

-Theo kỹ thuật pipeline, các lệnh được thực thi theo kiểu chồng lấn lên nhau, tận
dụng tối đa thời gian CPU. Quá trình thực hiện lệnh được chia thành các công
đoạn, mỗi công đoạn thực hiện một tác vụ cụ thể. Dữ liệu hoặc thông tin được
chuyển từ công đoạn này sang công đoạn khác để tiếp tục xử lý hoặc biến đổi. Mỗi
công đoạn trong pipeline có thể có các thành phần riêng biệt như mã nguồn, công
cụ và quy trình được thiết kế để thực hiện một tác vụ cụ thể.
Ví dụ, nếu một lệnh cần 5 chu kỳ để hoàn thành, thì 4 lệnh liên tiếp sẽ cần 20 chu
kỳ nếu không dùng pipeline. Nhưng nếu dùng pipeline, thì 4 lệnh chỉ cần 8 chu kỳ,
vì mỗi chu kỳ có thể xử lý một công đoạn của một lệnh khác nhau. Do đó, tốc độ
xử lý của máy tính có thể tăng lên gấp 2,5 lần, tức là 250%. Nếu số lệnh càng
nhiều, thì tốc độ xử lý càng tăng lên gần bằng số công đoạn, tức là 500%. Tuy
nhiên, điều này chỉ đúng trong trường hợp không có xung đột xảy ra, tức là không
có trường hợp một lệnh phụ thuộc vào kết quả của lệnh trước đó, hoặc có lệnh
nhảy làm thay đổi luồng thực thi. Nếu có xung đột, thì tốc độ xử lý sẽ giảm xuống
do phải dừng pipeline để xử lý xung đột.
Bài2: Khi sử dụng kiến trúc Pipeline, có những loại xung đột nào có thể xảy ra?
Lấy ví dụ cho từng loại xung đột.

Xung đột cấu trúc (Structural hazard): là khi một lệnh dự kiến không thể thực thi trong
đúng chu kỳ pipeline của nó do phần cứng cần không thể hỗ trợ. Nói cách khác, xung
đột cấu trúc xảy ra khi có hai lệnh cùng truy xuất vào một tài nguyên phần cứng nào đó
cùng một lúc.

Ví dụ: khi hai lệnh cùng cần truy xuất vào bộ nhớ trong cùng một chu kỳ.

Xung đột dữ liệu (Data hazard): là khi một lệnh dự kiến không thể thực thi trong đúng
chu kỳ pipeline của nó do dữ liệu mà lệnh này cần vẫn chưa sẵn sàng.

Ví dụ: khi một lệnh cần sử dụng kết quả của một lệnh trước đó nhưng kết quả đó chưa
được ghi vào thanh ghi.

Xung đột điều khiển (Control/Branch hazard): là khi một lệnh dự kiến không thể thực thi
trong đúng chu kỳ pipeline của nó do lệnh nạp vào không phải là lệnh được cần.
Ví dụ: khi một lệnh nhảy có điều kiện được thực thi nhưng pipeline đã nạp vào các lệnh
theo luồng thực thi mặc định

Câu 3:Có các trường hợp xung đột dữ liệu nào có thể xảy ra đối với kiến trúc Pipeline?
Hãy phân tích rõ từng trường hợp xung đột, vẽ sơ đồ minh họa và giải thích rõ xung đột
ở khâu nào?

có ba trường hợp xung đột dữ liệu có thể xảy ra đối với kiến trúc Pipeline, đó là:

 Xung đột đọc-sau-ghi (Read-after-write - RAW): là khi một lệnh cần sử dụng kết quả
của một lệnh trước đó nhưng kết quả đó chưa được ghi vào thanh ghi. Ví dụ:

Assembly
add $t0, $s0, $s1 # Lệnh 1: $t0 = $s0 + $s1
sub $t1, $t0, $s2 # Lệnh 2: $t1 = $t0 - $s2

Lệnh 2 cần sử dụng giá trị của $t0 nhưng lệnh 1 chưa ghi kết quả vào $t0. Xung đột này
xảy ra ở khâu ID của lệnh 2.

 Xung đột ghi-sau-đọc (Write-after-read - WAR): là khi một lệnh cần ghi kết quả vào một
thanh ghi nhưng thanh ghi đó đang được sử dụng bởi một lệnh trước đó. Ví dụ:

Assembly
sub $t1, $t0, $s2 # Lệnh 1: $t1 = $t0 - $s2
add $t0, $s0, $s1 # Lệnh 2: $t0 = $s0 + $s1

Lệnh 2 cần ghi kết quả vào $t0 nhưng lệnh 1 đang sử dụng $t0. Xung đột này xảy ra ở
khâu WB của lệnh 2.

 Xung đột ghi-sau-ghi (Write-after-write - WAW): là khi hai lệnh cần ghi kết quả vào
cùng một thanh ghi nhưng thứ tự ghi không đúng. Ví dụ:

Assembly.
add $t0, $s0, $s1 # Lệnh 1: $t0 = $s0 + $s1
sub $t0, $t0, $s2 # Lệnh 2: $t0 = $t0 - $s2

Lệnh 1 và lệnh 2 cần ghi kết quả vào $t0 nhưng nếu lệnh 2 ghi trước lệnh 1 thì kết quả
sẽ sai. Xung đột này xảy ra ở khâu WB của lệnh 2.

Sơ đồ minh họa các trường hợp xung đột dữ liệu:


RAW:
IF ID EX MEM WB
L1 L1 L1 L1 L1
L2 S L2 L2
WAR:
IF ID EX MEM WBRAW:
IF ID EX MEM WB
L1 L1 L1 L1 L1
L2 S L2 L2

WAR:
IF ID EX MEM WB
L1 L1 L1 L1 L1
L2 L2 L2 S

WAW:
IF ID EX MEM WB
L1 L1 L1 L1 L1
L2 L2 L2 L2
S
L1 L1 L1 L1 L1
L2 L2 L2 S

WAW:
IF ID EX MEM WB
L1 L1 L1 L1 L1
L2 L2 L2 L2
S

Trong sơ đồ, L1 và L2 là hai lệnh liên tiếp, S là khâu chèn trễ (stall) để giải quyết xung
đột.

You might also like