Professional Documents
Culture Documents
KTMT Nguyễn Xuân Huy
KTMT Nguyễn Xuân Huy
KTMT Nguyễn Xuân Huy
A Basic Snooping-Based
Multi-processor Implementation
( Triển Khai đa bộ xử lý trên snooping cơ bản )
Trong hệ thống đa bộ xử lý nơi nhiều quy trình cần một bản sao của cùng
một khối bộ nhớ, việc duy trì tính nhất quán giữa các bản sao này làm phát sinh
một vấn đề được gọi là Sự cố kết hợp bộ nhớ cache.
Điều này xảy ra chủ yếu do những nguyên nhân như :
Chia sẻ dữ liệu có thể ghi.
Quá trình di chuyển.
Sự không nhất quán do I/O.
Ta có những Giao thức kết hợp bộ đệm sau :
-Giao thức MSI :Đây là giao thức kết hợp bộ đệm cơ bản được sử dụng trong hệ
thống đa bộ xử lý. Các chữ cái của tên giao thức xác định các trạng thái có thể có
trong bộ đệm.
-Giao thức MOSI: Giao thức này là phần mở rộng của giao thức MSI.
MOSI chỉ ra rằng bộ xử lý hiện tại sở hữu khối này và sẽ phục vụ các yêu cầu từ
các bộ xử lý khác cho khối.
-Giao thức MESI : là giao thức kết hợp bộ đệm được sử dụng rộng rãi
nhất. Mỗi dòng bộ đệm được đánh dấu bằng một trạng thái.
-Giao thức MOESI: Đây là giao thức kết hợp bộ đệm đầy đủ bao gồm tất
cả các trạng thái có thể thường được sử dụng trong các giao thức khác nhau.
Hình 2 : Sơ đồ chuyển đổi trạng thái MESI
Từ sơ đồ ta có thể thấy trong một cỗ máy thực sự... việc đảm bảo tính nhất
quán một cách hiệu quả rất phức tạp.
Những thách thức và kỹ thuật mà chúng tôi mô tả ngày hôm nay (sự đánh
đổi giữa tính đơn giản và hiệu suất, những thách thức về tính chính xác trong một
hệ thống song song) cũng áp dụng tốt cho việc viết các chương trình song song.
Trong hệ thống phân cấp Intel Core i7, những thay đổi được thực hiện đối
với dữ liệu ở bộ đệm cấp độ thứ nhất có thể không hiển thị đối với bộ điều khiển
bộ đệm cấp độ thứ hai hơn là rình mò kết nối.
Bộ xử lý Intel thế hệ thứ 13 cải tiến cấu trúc kết hợp hiệu suất với tối đa tám
Nhân hiệu suất (P-core) và lên đến 16 Nhân hiệu quả (E-core), kết hợp với khối
lượng công việc được định tuyến thông minh bởi Hệ thống phân luồng của Intel .
Nó được cung cấp bởi các lõi P nhanh hơn và nhiều lõi E hơn với hỗ trợ
DDR4/DDR5 và PCIe 4.0/5.0. Điều đó cung cấp nền tảng có thể tối đa hóa đa
nhiệm và sự lựa chọn cho khả năng cấu hình, tùy chọn cấu trúc linh hoạt cao và
công cụ hàng đầu trong công nghiệp để đạt được hiệu suất tối ưu trong việc tùy
chỉnh.
Hình 3 :Hệ thống phân cấp Intel Core i7
Thuộc tính bao gồm của bộ đệm :
▪ Tất cả các dòng trong bộ đệm [đến bộ xử lý] gần hơn cũng nằm trong bộ đệm [từ
bộ xử lý] xa hơn
- Ví dụ: nội dung của L1 là tập hợp con của nội dung của L2
- Như vậy, mọi giao dịch liên quan đến L1 cũng liên quan đến L2, vậy là đủ chỉ để
L2 rình mò kết nối
▪ Nếu dòng ở trạng thái sở hữu (M trong MSI/MESI) trong L1, thì nó cũng phải ở
trạng thái sở hữu trong L2
- Cho phép L2 xác định xem giao dịch xe buýt có yêu cầu dòng bộ đệm được sửa
đổi hay không trong L1 mà không yêu cầu thông tin từ L1 hay không.
* Việc duy trì tự động sẽ không còn được giữ ngay cả khi L2 lớn hơn L1.
Ví dụ :
+Ta sẽ để Cache L2 lớn hơn L1
+Để L1 và L2 có cùng kích thước dòng, được thiết lập kết hợp 2 chiều và sử dụng
chính sách thay thế LRU
+ Để A, B, C ánh xạ vào cùng một bộ đệm L1.
Bộ xử lý truy cập A (L1+L2 lỗi ).
Bộ xử lý truy cập B (L1+L2 Lỗi ).
Bộ xử lý truy cập A nhiều lần.
Bộ xử lý hiện truy cập C, kích hoạt
L1 và L2
bỏ lỡ. L1 và L2 có thể chọn loại bỏ
các dòng, vì lịch sử truy cập khác
nhau.
Kết quả là, bao gồm không còn giữ
*Và để việc xử lý vô hiệu (handling invalidations) được duy trì bao gồm :
Khi dòng X bị vô hiệu hóa trong
bộ đệm L2 do BusRdX từ một bộ
đệm khác.
Cũng phải vô hiệu hóa dòng X
trong L1.
Tiếp đó ta lên để mỗi dòng L2
chứa một
bit trạng thái bổ sung cho biết nếu
dòng cũng tồn tại trong L1 hay
không .
Bit này cho biết sự vô hiệu hóa L2
của dòng bộ đệm do lưu lượng kết
hợp cần được truyền đến L1
Và chúng tôi đề ra mục tiêu của việc thực hiện mạch lạc của chúng tôi :
1.Thực hiện liên kết bộ đệm chính xác
2. Đạt hiệu suất cao
3. Giảm thiểu “chi phí” (ví dụ: giảm thiểu số lượng phần cứng bổ sung cần thiết để
triển khai tính nhất quán)
Như bạn sẽ thấy... Các kỹ thuật theo đuổi hiệu suất cao có xu hướng làm cho việc
đảm bảo tính chính xác trở nên khó khăn.
▪ Hiểu tại sao việc duy trì sự mạch lạc là một thách thức, ngay cả khi vận hành dưới
các thông số thiết kế máy đơn giản
- Làm thế nào để tối ưu hóa hiệu suất làm cho tính chính xác trở nên khó khăn? (ví
dụ: làm thế nào mà bế tắc, ổ khóa và chết đói có thể xảy ra đồng thời triển khai và
làm thế nào để tránh những vấn đề này?)
Bế tắc và ổ khóa liên quan đến tính chính xác của chương trình. Nạn đói thực sự là
một vấn đề về sự công bằng.
Bế tắc :
Bế tắc là trạng thái trong đó một hệ
thống có các hoạt động nổi bật cần
hoàn thành, nhưng không có hoạt động
nào có thể tiến triển.
Có thể phát sinh khi mỗi thao tác đã có
được tài nguyên dùng chung mà thao
tác khác cần.
Trong các tình huống bế tắc, không có
cách nào để bất kỳ luồng nào (hoặc
trong hình minh họa này là ô tô) tiến
triển trừ khi một số luồng từ bỏ tài
nguyên
Một số minh họa về sự bế tắc :
3. Phản hồi lệnh của một khách hàng bus khác được đặt trên bus
4. Khách hàng tiếp theo có được quyền truy cập bus (phân xử)
Bộ nhớ cache bỏ lỡ logic trên một bộ xử lý
1. Xác định bộ đệm (sử dụng các bit địa chỉ thích hợp)
2. Kiểm tra các thẻ bộ đệm (để xác định xem dòng có trong bộ đệm không) [Giả sử
không có thẻ nào phù hợp, phải đọc dữ liệu từ bộ nhớ]
3. Xác nhận yêu cầu truy cập bus
4. Chờ trợ cấp bus (theo quyết định của trọng tài bus)
5. Gửi địa chỉ + lệnh trên bus
6. Đợi lệnh được chấp nhận
7. Nhận dữ liệu trên bus
Bus nguyên tử có nghĩa là gì trong một kịch bản đa bộ xử lý?
BusRd, BusRdX: không cho phép giao dịch bus nào khác giữa địa chỉ cấp và nhận
dữ liệu
Flush: địa chỉ và dữ liệu được gửi đồng thời, được nhận bởi bộ nhớ
trước khi bất kỳ giao dịch nào khác được phép
Hành vi của bộ điều khiển bộ đệm đa bộ xử lý
Thách thức: cả yêu cầu từ bộ xử lý và bus đều yêu cầu tra cứu thẻ
Đây là một ví dụ khác về sự tranh chấp!
Giảm bớt sự tranh chấp: cho phép đồng thời truy cập bởi bộ điều khiển phía
bộ xử lý và starvation
Tùy chọn 1: lưu trữ các thẻ trùng lặp
Tùy chọn 2: bộ nhớ thẻ nhiều cổng
Lưu ý: các thẻ phải được đồng bộ hóa để đảm bảo tính chính xác, vì vậy việc cập
nhật thẻ bởi một bộ điều khiển sẽ vẫn cần chặn bộ điều khiển kia (nhưng việc sửa
đổi thẻ không thường xuyên so với việc kiểm tra chúng)
Hãy ghi nhớ: trong cả hai trường hợp, chi phí của hiệu suất bổ sung là tài nguyên
phần cứng bổ sung.
Nhiều thread cùng truy cập vào critical section nhưng luôn chủ động
nhường các thread còn lại, điều đó khiến cho tất cả đều không được thực thi
*Starvation
▪ Nhiều bộ xử lý cạnh tranh để có quyền truy cập bus.
- Phải cẩn thận để tránh (hoặc giảm thiểu khả năng) starvation.
- Ví dụ: điều gì sẽ xảy ra nếu bộ xử lý có "id thấp nhất" thắng.
▪ Các chính sách mẫu nhằm đạt được sự công bằng hơn:
- FIFO arbitration.
- Kinh nghiệm dựa trên mức độ ưu tiên (những người sử dụng bus thường xuyên bị
giảm mức độ ưu tiên).
*Design issues
Vấn đề thiết kế
▪ Thiết kế bộ điều khiển bộ nhớ cache và các thẻ
(để hỗ trợ truy cập từ bộ xử lý và bus).
▪ Trình bày kết quả snoop trên bus như thế nào và khi nào.
▪ Đối phó với việc write backs.
▪ Đối phó với sự chuyển đổi trạng thái phi nguyên tử.
▪ Tránh deadlock,livelock,starvation.
Part 2:
Initiating a request
Có thể coi một bus phân chia giao dịch như hai bus riêng biệt:
Một bus request và một bus reply.
Transaction tag
is just the index into
the request table
Read miss: cycle-by-cycle bus behavior (phase 1)
Addr req : Yêu cầu phân xử: bộ điều khiển bộ đệm đưa ra yêu cầu địa chỉ cho xe
buýt
(nhiều bộ đệm có thể làm như vậy trong cùng một chu kỳ)
Grant : Giải quyết yêu cầu: trọng tài bus địa chỉ cấp quyền truy cập cho một trong
những người yêu cầu
Mục nhập bảng yêu cầu được phân bổ cho yêu cầu (xem trang trình bày trước)
Các dòng trọng tài đặc biệt cho biết thẻ được gán cho yêu cầu
Addr : Bus “người chiến thắng” đặt lệnh/địa chỉ trên xe buýt
Addr Ack : Bộ nhớ cache xác nhận kết quả rình mò này đã sẵn sàng
(hoặc báo hiệu rằng họ không thể hoàn thành việc rình mò kịp thời ở đây (ví dụ:
tăng dây ức chế)
Read miss: cycle-by-cycle bus behavior (phase 2)
Bộ phả n hồ i đặ t dữ liệu phả n hồ i trên bus dữ liệu
Bộ nhớ cache hiển thị kết quả rình mò cho yêu cầ u vớ i dữ liệu
Mụ c nhậ p bả ng yêu cầ u đượ c giả i phóng
Ở đây: giả sử dòng bộ đệm 128 byte → 4 chu kỳ trên bus 256 bit
Note out-of-order completion (Lưu ý hoàn thành không theo thứ tự)
Nếu có một yêu cầu chưa xử lý xung đột (được xác định bằng cách kiểm tra bảng
yêu cầu), bộ nhớ cache phải giữ yêu cầu cho đến khi xung đột được xóa
Why do we have queues in a parallel system?
(Tại sao chúng ta có hàng đợi trong một hệ thống song song?)
Answer: để phù hợp với tỷ lệ sản xuất và tiêu dùng thay đổi (không thể đoán trước).
Miễn là A và B, tính trung bình, sản xuất và tiêu dùng với tốc độ như nhau, thì cả
hai công nhân đều có thể làm việc hết công suất.
Không có hàng đợi: thông báo A dừng chờ B chấp nhận đầu vào mới (và đôi khi B
dừng chờ A tạo đầu vào mới).
Kích thướ c củ a
hàng đợ i khi A
hoàn thành mộ t
phầ n công việc
(hoặ c B bắ t đầ u
công việc)