Professional Documents
Culture Documents
HÀ NỘI 8/11/2022
1
MỤC LỤC
2
Pipeline: Basic/Intermediate Concepts and Implementatio
I. Đặt vấn đề
Các vấn đề trong đời sống
Các kiến trúc sư máy tính không ngừng nỗ lực để cải thiện hiệu suất
của những chiếc máy tính (CPU) mà họ thiết kế: 2tuỳ chọn:
Cách 1: Cải thiện phần cứng, làm cho chip chạy nhanh hơn
bằng cách tăng tốc độ xung nhịp của chúng.
Cách 2: Sắp xếp phần cứng sao cho có thể thực hiện nhiều
thao tác(nhiều công việc) cùng một lúc: cơ chế song song, là
một cách để cóđược hiệu suất cao hơn đối với một tốc độ xung
nhịp nhất định.
Vì có giới hạn về tốc độ phần cứng và chi phí của các mạch nhanh
hơn khá cao, tùy chọn thứ 2.
Cơ chế song song có hai dạng chung:
Song song mức lệnh.
Song song mức lệnh.
Tính song song được khai thác trong các lệnh để có thêm nhiều
lệnh/giây được thực hiện.
Có 2 phương thức tiếp cận:
Cơ chế ống lệnh (Pipelining).
Các kiến trúc Superscalar.
Pipelining là quá trình sắp xếp các thành phần phần cứng của CPU
sao cho hiệu suất tổng thể của nó được tăng lên. Việc thực thi đồng
thời nhiều lệnh sẽ được diễn ra trong một bộ xử lý ống lệnh.
Giả sử một phòng có nhiều người, mỗi người đều cần giặt quần áo
bẩn của mình. Quá trình giặt quần áo boa gồm 4 công đoạn:
1. Đặt quần áo bẩn vào máy giặt để giặt.
2. Khi máy giặt hoàn thành, đưa quần áo ướt vào máy sấy.
3. Khi máy sấy hoàn thành, đặt quần áo khô lên bàn và ủi.
4. Khi ủi hoàn tất, xếp quần áo vào tủ.
3
Nếu một người hoàn tất tất cả các công đoạn giặt quần áo (xong
công đoạn ủi, xếp quần áo vào tủ) thì người khác mới bắt đầu (bắt
đầu đặt quần áo bẩn vào máy giặt), quá trình thực hiện này gọi là
không pipeline.
Tuy nhiên, rõ ràng rằng khi người trước hoàn thành công đoạn 1,
sang công đoạn 2 thì máy giặt đã trống, lúc này người tiếp theo có
thể đưa quần áo bẩn vào giặt. Như vậy, người tiếp theo không cần
phải chờ người trước xong công đoạn thứ 4 mới có thể bắt đầu,
mà ngay khi người trước đến công đoạn thứ 2 thì người tiếp theo
đã có thể bắt đầu công đoạn thứ nhất và cứ tiếp tục như vậy. Quá
trình thực hiện chồng lấn này gọi là pipeline.
Trong một bộ xử lý pipelined, một đường ống có hai đầu, đầu vào và đầu ra. Giữa các
đầu này, có nhiều giai đoạn / phân đoạn sao cho đầu ra của một giai đoạn được kết
nối với đầu vào của giai đoạn tiếp theo và mỗi giai đoạn thực hiện một hoạt động cụ
thể.
Thanh ghi giao diện được sử dụng để giữ đầu ra trung gian giữa hai giai đoạn. Các
thanh ghi giao diện này còn được gọi là chốt hoặc bộ đệm.
Tất cả các giai đoạn trong đường ống cùng với các thanh ghi giao diện được điều
khiển bởi một đồng hồ chung.
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 (trong ví
dụ 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.
Khó khăn
Khó khăn trong kỹ thuật ống dẫn:
5
Khó khăn do cấu trúc: Đây là khó khăn do thiếu bộ phận
chức năng, ví dụ trong một máy tính dùng kỹ thuật ống dẫn phải có nhiều ALU,
nhiều PC, nhiều thanh ghi lệnh IR . Do vậy cần thêm các bộ phận chức năng cần
thiết và hữu hiệu.
Khó khăn do số liệu: Toán tử kết quả của lệnh trước có thể
chỉ có thể được dùng cho lệnh sau sau giai đoạn MEM của nó, nhưng toán tử được
dùng cho lệnh sau vào giai đoạn EX của lệnh trước. Để khắc phục khó khăn này,
một bộ phận phần cứng được dùng để đưa kết quả từ ngã ra ALU trực tiếp vô một
trong các thanh ghi ngã vào.
Khó khăn do điều khiển: Các lệnh làm thay đổi tính thi
hành các lệnh một cách tuần tự (nghĩa là PC tăng đều đặn sau mỗi lệnh), gây khó
khăn về điều khiển. Các lệnh này là lệnh nhảy đến một địa chỉ tuyệt đối chứa trong
một thanh ghi, hay lệnh nhảy đến một địa chỉ xác định một cách tương đối so với
địa chỉ hiện tại của bộ đếm chương trình PC. Các lệnh nhảy trên có thể có hoặc
không điều kiện.
Xung đột cấu trúc
Giả sử rằng chúng ta có một bộ nhớ đơn duy nhất thay vì hai bộ nhớ lệnh và dữ
liệu rời rạc nhau. Nếu pipeline trong ví dụ ở hình trên có thêm lệnh thứ tư thì
trong chu kỳ pipeline từ 600 tới 800 khi lệnh thứ nhất thực hiện truy xuất bộ
nhớ lấy dữ liệu thì lệnh thứ tư sẽ thực hiện truy xuất bộ nhớ lấy lệnh. Do không
có bộ nhớ lệnh và dữ liệu riêng lẻ, trong trường hợp này sẽ có xung đột cấu trúc
xảy ra.
6
Xung đột dữ liệu
Trong ví dụ trên, nếu áp dụng pipeline bình thường thì công đoạn ID của
lệnh sub sẽ thực hiện cùng lúc với cộng đoạn EX của lệnh add. Trong công
đoạn ID, lệnh sub sẽ cần đọc giá trị của thanh ghi
$s0, trong khi đó giá trị mới của thanh ghi $s0 phải tới công đoạn WB của
lệnh add mới sẵn sàng. Vì vậy, nếu thực hiện pipeline thông thường, trường
hợp này sẽ xảy ra xung đột dữ liệu
Thay vì chờ một số chu kỳ đến khi dữ liệu cần sẵn sàng, một kỹ thuật có thể
được áp dụng để rút ngắn số chu kỳ rỗi, gọi là kỹ thuật nhìn trước (forwarding
hay bypassing).
Như trong ví dụ trước, thay vì chờ sau hai chu kỳ rỗi mới nạp lệnh sub vào, ngay
khi ALU hoàn thành tính toán tổng cho lệnh add thì tổng này cũng được cung
cấp ngay cho công đoạn EX của lệnh sub (thông qua một bộ đệm dữ liệu gắn
thêm bên trong) để ALU tính toán kết quả cho sub nhanh.
7
Kỹ thuật nhìn trước: một phương pháp giải quyết xung đột dữ liệu bằng đưa
thêm vào các bộ đệm phụ bên trong, các dữ liệu cần có thể được truy xuất từ bộ
đệm này hơn là chờ đợi đến khi nó sẵn sàng trong bộ nhớ hay trong thanh ghi.
Lưu ý, với lệnh lw và các lệnh có chức năng tương tự, thông thường kết quả cuối của
nó không phải khi hoàn tất công đoạn EX mà là khi hoàn tất công đoạn MEM.
Xét ví dụ sau : lw $s0, 20($t1)
Sub $t2,$s0,$t3
Với lệnh lw, dữ liệu mong muốn sẽ chỉ sẵn sàng sau 4 chu kỳ pipeline (tức sau khi
công đoạn MEM hoàn tất). Vì vậy, giả sử dữ liệu đầu ra của công đoạn MEM
của lệnh lw được truyền tới đầu vào công đoạn EX của lệnh sub theo sau, thì lệnh
sub vẫn phải chờ sau một chu kỳ rỗi mới được nạp vào.
8
Kỹ thuật forwarding có thể hỗ trợ giải quyết xung đột dữ liệu hiệu quả, tuy
nhiên nó không thể ngăn chặn tất cả các trường hợp chu kỳ rỗi.
Tóm lại, với kỹ thuật forwarding có:
ALU-ALU forwarding hay EX-EX forwarding (hình 1)
MEM-ALUforwarding hay MEM-EX forwarding (hình 2)
Hình 1
Hình 2
9
Xung đột điều khiển
Một số lệnh nhảy có điều kiện và không điều kiện trong MIPS (branches,
jumps) tạo ra xung đột điều kiển này
Ví dụ xét đoạn chương trình sau: add $4 ,$5,$6
Beq $1,$2,lable
Lw $3 ,300($s0)
Nếu áp dụng pipeline thông thường, tại chu kỳ thứ ba của pipeline, khi beq đang
thực thi công đoạn ID thì lệnh lw sẽ được nạp vào. Nhưng nếu điều kiện bằng
của lệnh beq xảy ra thì lệnh thực hiệp tiếp sau đó không phải là lw mà là lệnh
được gán nhãn ‘label’, lúc này xảy ra xung đột điều khiển.
Các giải pháp giải quyết xung đột điều khiển cho lệnh nhảy có điều kiện, ví dụ
với beq:
Cơ bản nhất là chờ cho tới khi điều kiện bằng được tính toán thì lệnh tiếp theo
mới được nạp vào. Luôn lãng phí một chu kỳ xung clock để chờ điều kiện bằng
xảy ra.
Cải tiến hơn, có thể dùng phương pháp dự đoán. Có hai cách dự đoán: dự đoán
điều kiện bằng sẽ xảy ra (tức nhánh nhảy tới sẽ được lấy); hoặc dự đoán điều kiện
bằng sẽ không xảy ra (tức nhánh nhảy tới sẽ không được lấy). Nếu dự đoán đúng,
chương trình sẽ không lãng phí chu kỳ xung clock nào; còn nếu dự đoán sai, lệnh
đúng sẽ được nạp lại và lãng phí một chu kỳ xung clock.
Các giải pháp giải quyết xung đột điều khiển (tham khảo thêm mục 4.8, sách tham
khảo chính)
Ví dụ giải quyết xung đột điều khiển theo kiểu dự đoán điều kiện bằng sẽ
không xảy ra, tức nhánh nhảy tới sẽ không được lấy (Predict Not Taken):
10
Dự đoán đúng
Dự đoán sai
Công nghệ pipelining tăng tốc độ thực thi các lệnh. Nhưng pipelining có một số hạn
chế:
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ó tể 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 (trong ví dụ
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à
một 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 khó khăn mà ta đề
cập tới.
Cần phải giải mã các lệnh một các đơn giản để có thể giải mã và đọc các toán
hạng trong một chi 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
11
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ưu trữ 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.
Giải thích:
- Ta thấy trong một chu kỳ Tc, máy dùng kỹ thuật siêu ống dẫn
làm 2 lệnh thay vì làm1 lệnh trong máy dùng kỹ thuật ống dẫn
bình thường.
- Trong máy tính siêu ống dẫn, tốc độ thực hiện lệnh tương
đương với việc thực hiện một lệnh trong khoảng thời gian
Tc/n. Các bất lợi của siêu ống dẫn là thời gian thực hiện một
12
giai đoạn con ngắn Tc/n và việc trì hoãn trong thi hành lệnh
nhảy lớn.
- Nếu lệnh thứ i là một lệnh nhảy tương đối thì lệnh này được
giải mã trong giai đoạn ID, địa chỉ nhảy đến được tính vào giai
đoạn EX, lệnh phải được nhảy tới là lệnh thứ i+4, vậy có trì
trệ 3 lệnh thay vì 1 lệnh trong kỹ thuật ống dẫn bình thường.
V. Đặc điểm Pipeline
Trong trường hợp tương tự, đối với bộ xử lý không pipelined, thời gian
thực hiện lệnh 'n' sẽ là:
Vì hiệu suất của bộ xử lý tỷ lệ nghịch với thời gian thực thi, chúng tôi có:
trong đó 'k' là số giai đoạn trong đường ống. Ngoài ra, Hiệu quả = Tăng tốc cho
trước / Tăng tốc tối đa = S / S tối đa Chúng ta biết rằng Smax = k Vậy, Hiệu quả = S /
14
k Thông lượng = Số lệnh / Tổng thời gian để hoàn thành các lệnh Vì vậy, Thông
lượng = n / (k + n - 1)
VI. SUPERSCALAR
Các khái niệm
Siêu vô hướng: Máy tính siêu vô hướng có thể thực hiện đồng thời
nhiều lệnh lệnh trong một chu kỳ xung nhịp.
Trong một máy tính siêu vô hướng phần cứng phải quản lý việc đọc
và thi hành đồng thời nhiều lệnh => phải có khả năng quản lý các
quan hệ giữa số liệu với nhau.
Cần phải chọn các lệnh có khả năng được thi hành cùng một lúc.
Năm 1992 người ta thấy xuất hiện các bộ xử lý có nhiều bộ thực hiện
tác vụ độc lập với nhau (nhiều ALU, bộ tính toán số lẻ, nạp dữ liệu,
lưu dữ liệu, nhảy), có thể thực hiện song song nhiều lệnh (lệnh tính
số nguyên, số lẻ, lệnh bộ nhớ, lệnh nhảy...). Số lệnh có thể được thi
hành song song càng nhiều thì phần cứng thực hiện việc này càng
phức tạp.
Những bộ xử lý đầu tiên đưa ra thị trường dùng kỹ thuật này là các
bộ xử lý Intel i860 và IBM RS/6000. Các bộ xử lý này có khả năng
thực hiện song song nhiều tác vụ trên số nguyên và trên số lẻ.
Ví dụ so sánh giữa superscalar và pineline
Trong đó có bạn: Đỗ Hoàng Phong (nhóm trưởng), Đỗ Thành An là những bạn hoạt
động năng nổ trong nhóm.
16