Trang chủ » làm thế nào để » Khi bộ nhớ cache của CPU bị xóa trở lại bộ nhớ chính?

    Khi bộ nhớ cache của CPU bị xóa trở lại bộ nhớ chính?

    Nếu bạn mới bắt đầu tìm hiểu cách CPU đa lõi, bộ đệm, bộ nhớ đệm và bộ nhớ hoạt động, ban đầu có vẻ hơi khó hiểu. Với ý nghĩ đó, bài hỏi và trả lời của SuperUser ngày nay có câu trả lời cho câu hỏi của người đọc tò mò.

    Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.

    Câu hỏi

    Trình đọc siêu người dùng CarmeloS muốn biết khi nào bộ đệm của CPU bị xóa trở lại bộ nhớ chính:

    Nếu tôi có CPU có hai lõi và mỗi lõi có bộ đệm L1 riêng, có thể cả Core1 và Core2 đều lưu cùng một phần bộ nhớ cùng một lúc không? Nếu có thể, giá trị của bộ nhớ chính sẽ là gì nếu cả Core1 và Core2 đều chỉnh sửa giá trị của chúng trong bộ đệm?

    Khi nào bộ đệm của CPU bị xóa trở lại bộ nhớ chính?

    Câu trả lời

    Những người đóng góp cho SuperUser David Schwartz, sleske và Kimberly W có câu trả lời cho chúng tôi. Đầu tiên, David Schwartz:

    Nếu tôi có CPU có hai lõi và mỗi lõi có bộ đệm L1 riêng, có thể cả Core1 và Core2 đều lưu cùng một phần bộ nhớ cùng một lúc?

    Vâ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à gì nếu cả Core1 và Core2 đều 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 quan trọng vì cả lõi 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 đó.

    Tiếp theo là câu trả lời từ sleske:

    Có, có hai bộ nhớ cache trong cùng một vùng bộ nhớ có thể xảy ra và thực sự 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ụ:

    • Hai bộ đệm có thể giao tiếp với nhau để đảm bảo chúng không đồng ý
    • Bạn có thể có một số loại giám sát viên theo dõi tất cả các bộ đệm và cập nhật chúng cho phù hợp
    • Mỗi bộ xử lý giám sát các vùng nhớ mà nó đã lưu trong bộ nhớ cache và khi phát hiện ghi, nó sẽ xóa bộ đệm (bây giờ không hợp lệ)

    Vấn đề được gọi là sự gắn kết bộ đệm và bài viết Wikipedia về chủ đề này có một cái nhìn tổng quan đẹp về vấn đề và các giải pháp có thể.

    Và câu trả lời cuối cùng của chúng tôi từ Kimberly W:

    Để trả lời câu hỏi trong tiêu đề bài viết 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 đã chiếm dụng. Khối chiếm chỗ trước đó bị xóa 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ứ lúc nào khối bộ đệm được ghi ở mức n, khối tương ứng trên cấp n + 1 đã cập nhật. Khái niệm này tương tự như điền vào mẫu bằng giấy carbon bên dưới; bất cứ điều gì bạn viết trên đầu được sao chép trên tờ dưới đây. Điều này chậm hơn vì rõ ràng nó liên quan đến nhiều thao tác viết hơn, nhưng các giá trị giữa các bộ đệm thì phù hợp hơn. Trong lược đồ 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ể.


    Có một cái gì đó để thêm vào lời giải thích? Tắt âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.

    Tín dụng hình ảnh: Lemsipmatt (Flickr)