6

Theo câu trả lời của câu hỏi this, có vẻ như LOCK CMPXCHG trên x86 thực sự gây ra một rào cản đầy đủ. Có lẽ, đây là những gì Unsafe.compareAndSwapInt() tạo ra dưới mui xe là tốt. Tôi đang gặp khó khăn để xem tại sao đó là trường hợp: với giao thức MESI, sau khi bạn cập nhật dòng bộ nhớ cache, CPU có thể vô hiệu hóa chỉ dòng cache trên các lõi khác, thay vì thoát khỏi ALL store/load buffer của lõi đã thực hiện CAS? Có vẻ khá lãng phí đối với tôi ...So sánh và hoán đổi trên x86 - tại sao nó là một rào cản đầy đủ?

+0

Với một rào cản đầy đủ, bạn sẽ thực sự tuôn ra tất cả các thay đổi dự đoán bị nhỡ, thay vì một dòng bộ nhớ cache, vì vậy sẽ không tồi tệ hơn với hàng rào đầy đủ? Nhưng rõ ràng tôi đang thiếu sth ở đây :) – Bober02

+0

[So sánh và trao đổi] (https://en.wikipedia.org/wiki/Compare-and-swap) trên Wikipedia bao gồm điều này, * Nó so sánh nội dung của một vị trí bộ nhớ với một giá trị đã cho và, chỉ khi chúng giống nhau, hãy sửa đổi nội dung của vị trí bộ nhớ đó thành một giá trị mới nhất định. Điều này được thực hiện như một hoạt động nguyên tử duy nhất. Nguyên tử đảm bảo rằng giá trị mới được tính toán dựa trên thông tin cập nhật; nếu giá trị đã được cập nhật bởi một luồng khác trong khi chờ đợi, quá trình ghi sẽ thất bại. * Không có hàng rào đầy đủ, nó có thể bị gián đoạn (hoặc được cập nhật khác) và điều đó có thể làm mất hiệu lực atomicitiy. –

Trả lời

1

Câu trả lời của bạn theo như tôi có thể thấy trong phần bình luận - Bản cập nhật MESI lưu trữ, chứ không phải Store/Load buffers. Nhưng khóa LOCK CMPXCHG nói: locked operations serialize all outstanding load and store operation - đây là lý do tại sao nó cần phải thoát khỏi bộ đệm cửa hàng/tải từ CPU này (và không phải những người khác như chi tiết here).

Vì vậy, CPU hiện tại phải thực hiện thao tác nguyên tử trên giá trị gần đây nhất - có thể nằm trong bộ đệm cửa hàng/tải, đó là lý do tại sao cần có hàng rào để thực sự thoát.

+0

Tôi nhận được ya! chúng tôi cần phải đồng bộ hóa gully lên, chúng tôi trao đổi các dòng bộ nhớ cache, mát mẻ! Một điều nữa - O toàn bộ rào cản mem thực sự khiến bộ đệm cửa hàng của CPU khác bị bị xóa? Hoặc chỉ một chủ đề đang hoạt động? Nói cách khác, tôi đã có ấn tượng rằng những thay đổi đang chờ xử lý từ các CPU khác nằm trong bộ đệm tải của CPU, vì vậy rào cản mem chỉ thoát ra những cái – Bober02

+0

@ Bober02 Tôi đã cập nhật câu trả lời để làm rõ hơn một chút - theo sự hiểu biết của tôi. – Eugene

Các vấn đề liên quan