Tính nhất quán của bộ nhớ so với kết hợp bộ nhớ cache


16

Có đúng là Tính nhất quán tuần tự là một thuộc tính mạnh hơn so với Cache Coherence không?

Dựa theo

Sorin, Daniel J; Đồi, Mác D; Wood, David A: Primer về tính nhất quán của bộ nhớ và sự gắn kết bộ nhớ cache , Morgan & Claypool, 2011

tính nhất quán tuần tự có thể được mô tả là (không chính thức):

Mô hình bộ nhớ thống nhất tuần tự xác định rằng hệ thống phải xuất hiện để thực hiện tất cả các lần tải và lưu trữ của tất cả các vị trí bộ nhớ theo tổng thứ tự tuân theo thứ tự chương trình của từng luồng. Mỗi tải được giá trị của cửa hàng gần đây nhất trong tổng đơn hàng đó.

Nói cách khác, hệ thống nhất quán theo tuần tự, nếu có các sự kiện bộ nhớ (tải và lưu trữ) của mỗi luồng, chúng ta có thể sắp xếp tất cả các sự kiện này sao cho: 1) cho mỗi luồng, thứ tự các sự kiện của nó được giữ nguyên và 2) thứ tự toàn cầu là nối tiếp (bất kỳ tải trả về giá trị mới nhất được lưu trữ).

Bây giờ họ tiếp tục và mô tả sự gắn kết:

Một định nghĩa về sự kết hợp tương tự như định nghĩa về Tính nhất quán tuần tự là một hệ thống kết hợp phải xuất hiện để thực hiện tất cả các tải của luồng và lưu trữ vào một vị trí bộ nhớ theo thứ tự tổng thể theo thứ tự chương trình của mỗi luồng.

Nói cách khác, hệ thống được kết hợp, nếu có các sự kiện bộ nhớ của từng luồng cho từng vị trí, chúng ta có thể sắp xếp các sự kiện cho vị trí đó, sao cho: 1) cho mỗi luồng, thứ tự các sự kiện của nó đến vị trí đó được giữ nguyên và 2) cho mỗi luồng vị trí đặt hàng là nối tiếp.

Cuối cùng, họ chỉ ra sự khác biệt:

Định nghĩa này nêu bật một sự khác biệt quan trọng giữa sự kết hợp và tính nhất quán : sự kết hợp được chỉ định trên cơ sở vị trí trên mỗi bộ nhớ, trong khi tính nhất quán được chỉ định đối với tất cả các vị trí bộ nhớ.

Vì vậy, có vẻ như sự khác biệt là đối với các hệ thống kết hợp, chúng ta cần tổng thứ tự cho tất cả các sự kiện cho từng vị trí (do đó, thứ tự giữa các sự kiện cho vị trí cụ thể), trong khi đối với các hệ thống nhất quán, tổng số thứ tự phải được xác định trên tất cả các sự kiện (và do đó đặt hàng cũng là giữa các sự kiện cho các địa điểm khác nhau)?

Điều đó có nghĩa là sự gắn kết ít nghiêm ngặt hơn mà nhất quán? (có vẻ thú vị!) Có dấu vết nào mạch lạc nhưng không nhất quán không?


2
Lưu ý rằng chúng tôi không thích các câu hỏi có dạng "vui lòng kiểm tra câu trả lời của tôi!". Bạn có thể thêm một câu hỏi cụ thể hơn? Nơi nào bạn cảm thấy khoảng cách của bạn có thể được?
Raphael

@Raphael bạn nói đúng, và cảm giác không được tốt lắm khi tôi viết câu hỏi. Nhưng phải làm gì nếu tôi không thể tìm thấy câu trả lời trên Internet (ngoại trừ những tuyên bố mơ hồ như 'sự kết hợp nói về một bit, khác với tính nhất quán nói về tất cả các bit'), và vì vậy đã cố gắng tìm câu trả lời và khi nào để tìm thấy nó không chắc chắn nếu nó là chính xác. Tôi có nên đưa ra một câu hỏi tanh? Hoặc không cung cấp câu trả lời trong câu hỏi? :)
Ayrat

@Ayrat Tôi đọc phần cuối của câu hỏi của bạn dưới dạng câu trả lời bạn muốn kiểm tra. Nếu đó là trường hợp, nên có một số nghi ngờ (khác, tại sao hỏi?) Mà bạn nên xác định chính xác cho độc giả. Có lẽ tôi đã đọc sai?
Raphael

@Raphael 'phần cuối cùng muốn được kiểm tra' - có. 'Hỏi làm gì?' - chủ đề là mới và tôi không chắc kết luận đó là chính xác. Tôi sẽ cố gắng tránh loại câu hỏi này trong tương lai và có thể tìm ai đó xung quanh để kiểm tra nó.)
Ayrat

Câu trả lời:


9

Như bạn đã chỉ ra, sự kết hợp là một thuộc tính của một vị trí bộ nhớ riêng lẻ trong khi tính nhất quán đề cập đến thứ tự truy cập vào tất cả các vị trí bộ nhớ. Tính nhất quán tuần tự là một tài sản mạnh mẽ hơn so với sự gắn kết. Đó là: mọi hệ thống phù hợp tuần tự cũng được kết hợp chặt chẽ tại mọi vị trí bộ nhớ. Điều ngược lại là không đúng, một bộ nhớ được kết hợp ở mọi vị trí không nhất thiết phải liên tục theo thứ tự. Trong thực tế, có nhiều bộ xử lý kết hợp bộ nhớ cache thực sự trong đó mô hình bộ nhớ chỉ nhất quán yếu (có những trường hợp bộ xử lý khác nhau quan sát truy cập vào các vị trí khác nhau xảy ra theo các thứ tự khác nhau.)

Bằng chứng liên tục liên tục ngụ ý mạch lạc:

xx

xyx0y0xyxyyx

Điều này có thể dẫn đến kết quả đáng ngạc nhiên. Ví dụ

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

Dấu vết này là mạch lạc:

  • cho A thứ tự là : proc2 loads A(gets 0),proc1 stores A:=1
  • cho B thứ tự là : proc1 stores B:=1,proc2 loads B(gets 1)

Nhưng nó không nhất quán! Vì nếu proc2 load Btrả về 1, thì proc1 store A := 1đã xảy ra và proc2 load Acũng nên trả về 1.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.