Câu trả lời:
Nếu tôi có CPU có hai lõi, mỗi lõi có bộ đệm L1 riêng, có thể Core1 và Core2 lưu trữ cùng một phần bộ nhớ không?
Đúng. Hiệu suất sẽ là khủng khiếp nếu đây không phải là trường hợp. Hãy xem xét hai luồng chạy cùng một mã. Bạn muốn mã đó trong cả bộ đệm L1.
Nếu có thể, giá trị của bộ nhớ chính sẽ là bao nhiêu nếu cả Core1 và Core2 đã chỉnh sửa giá trị của chúng trong bộ đệm?
Giá trị cũ sẽ nằm trong bộ nhớ chính, điều này sẽ không thành vấn đề vì cả CPU sẽ không đọc nó. Trước khi đẩy một giá trị được sửa đổi từ bộ đệm, nó phải được ghi vào bộ nhớ. Thông thường một số biến thể của giao thức MESI được sử dụng. Trong triển khai MESI truyền thống, nếu một giá trị được sửa đổi trong một bộ đệm, thì nó không thể xuất hiện ở tất cả các bộ đệm khác ở cùng cấp đó.
Vâng, điều này (có hai bộ nhớ cache trong cùng một vùng bộ nhớ) có thể xảy ra, thực sự nó là một vấn đề xảy ra rất nhiều trong thực tế. Có nhiều giải pháp khác nhau, ví dụ:
Vấn đề được gọi là sự kết hợp bộ nhớ cache . Các bài viết trên Wikipedia về chủ đề này có một cái nhìn tổng quan tốt đẹp của các vấn đề và giải pháp khả thi.
Để trả lời câu hỏi trong tiêu đề của bạn, nó phụ thuộc vào giao thức bộ đệm. Nếu nó được ghi lại, bộ đệm sẽ chỉ được xóa trở lại bộ nhớ chính khi bộ điều khiển bộ đệm không có lựa chọn nào khác ngoài việc đặt một khối bộ đệm mới vào không gian đã bị chiếm dụng. Khối chiếm chỗ trước đó được loại bỏ và giá trị của nó được ghi lại vào bộ nhớ chính.
Giao thức khác là ghi qua. Trong trường hợp đó, bất cứ khi nào khối bộ đệm được ghi ở cấp n, khối tương ứng ở cấp (n + 1) được cập nhật. . Trong sơ đồ ghi lại, chỉ bộ đệm cấp cao nhất mới có giá trị cập nhật nhất cho một khối bộ nhớ cụ thể.