Dữ liệu cập nhật thường xuyên thực sự là ứng dụng hoàn hảo của bộ nhớ cache. Như đã đề cập, bộ nhớ cache CPU hiện đại khá lớn và 0.5mb có thể phù hợp với bộ nhớ cache. Quan trọng hơn, mặc dù, đọc-sửa đổi-ghi vào bộ nhớ uncached là RẤT chậm - đọc ban đầu đã chặn trên bộ nhớ, sau đó hoạt động ghi ALSO đã chặn trên bộ nhớ để cam kết. Và chỉ để thêm sự xúc phạm vào thương tích, CPU có thể thực hiện bộ nhớ không có bộ nhớ đệm bằng cách tải dữ liệu vào bộ nhớ cache, sau đó ngay lập tức làm mất hiệu lực của dòng bộ nhớ cache - do đó sẽ khiến bạn ở vị trí được đảm bảo tồi tệ hơn trước.
Trước khi bạn cố gắng outsmarting CPU như thế này, bạn thực sự nên điểm chuẩn toàn bộ chương trình, và xem nơi chậm thực sự là. Hồ sơ hiện đại như valgrind's cachegrind có thể đo nhớ cache, vì vậy bạn có thể tìm thấy nếu đó là một nguồn đáng kể chậm lại là tốt.
Trên một lưu ý thực tế khác, nếu bạn đang thực hiện 30 RMW mỗi giây, đây là trường hợp xấu nhất theo thứ tự 1920 byte bộ nhớ cache. Đây chỉ là 1/16 kích thước L1 của bộ vi xử lý Core 2 hiện đại và có khả năng bị mất trong tiếng ồn chung của hệ thống. Vì vậy, đừng lo lắng về nó quá nhiều :)
Điều đó nói rằng, nếu 'truy cập đồng thời' bạn có nghĩa là 'truy cập bởi nhiều chủ đề cùng một lúc', hãy cẩn thận về dòng bộ nhớ cache nảy giữa các CPU. Điều này sẽ không được giúp đỡ bởi RAM không có bộ nhớ - nếu bất cứ điều gì nó sẽ tồi tệ hơn, vì dữ liệu sẽ phải di chuyển trở lại RAM vật lý mỗi lần thay vì có thể đi qua bus liên CPU nhanh hơn - và cách duy nhất để tránh vấn đề này là giảm thiểu tần suất truy cập vào dữ liệu được chia sẻ. Để biết thêm về điều này, hãy xem http://www.ddj.com/hpc-high-performance-computing/217500206
Tôi nghĩ điều này sẽ làm tổn thương sự hoàn hảo - bằng cách đánh dấu là không thể lưu vào bộ nhớ tất cả các bản cập nhật thường xuyên sẽ phải chuyển sang bộ nhớ thay vì ghi vào bộ nhớ cache. – Michael
Bộ nhớ cache chỉ hữu ích trong trường hợp này nếu các ghi không tuần tự và nhiều ghi sẽ rơi trên cùng một dòng bộ nhớ cache. Nếu viết được bán ngẫu nhiên và do thời gian cùng một vị trí được viết một lần nữa rằng vị trí đã được flushed từ bộ nhớ cache có rất ít điểm. –
@Michael - các bản cập nhật được * giả định * để bỏ qua bộ nhớ cache trong trường hợp này. – Tom