Có vẻ như một câu hỏi lạ ..Bộ nhớ cache CPU: khoảng cách giữa hai địa chỉ có nhỏ hơn 8 byte để có lợi thế bộ đệm không?
Nói kích thước của dòng bộ nhớ cache là 64 byte. Hơn nữa, giả sử rằng L1, L2, L3 có cùng kích thước đường bộ nhớ cache (this bài viết cho biết đó là trường hợp của Intel Core i7).
Có hai đối tượng A
, B
trên bộ nhớ có địa chỉ (vật lý) cách nhau N cách nhau byte. Để đơn giản, chúng ta hãy giả A
là trên ranh giới bộ nhớ cache, có nghĩa là, địa chỉ của nó là bội số của 64.
1) Nếu N
< 64, khi A
được nạp bởi CPU, B
sẽ được đọc vào bộ nhớ cache, quá. Vì vậy, nếu cần B
và dòng bộ nhớ cache chưa được gỡ bỏ, CPU sẽ tìm nạp B
trong một thời gian rất ngắn. Mọi người đều hạnh phúc.
2) Nếu N
>> 64 (ví dụ: nhiều lớn hơn 64), khi A
được lấy bởi CPU, B
không được đọc vào dòng bộ nhớ cache cùng với A
. Vì vậy, chúng tôi nói "CPU không thích các con trỏ theo dõi" và đó là một trong những lý do để tránh cấu trúc dữ liệu dựa trên nút được phân bổ heap, chẳng hạn như std::list
.
Câu hỏi của tôi là, nếu N
> 64 nhưng vẫn còn nhỏ, nói N
= 70, nói cách khác, A
và B
không phù hợp trong một dòng bộ nhớ cache nhưng không quá xa nhau, khi A
được tải bởi CPU, việc lấy B
có cùng số lượng chu kỳ đồng hồ vì nó sẽ mất khi N
lớn hơn 64?
rephrase - khi A
được nạp, chúng ta hãy t đại diện cho trôi qua thời điểm lấy B
, là t (N = 70) nhỏ hơn nhiều hơn, hoặc gần như tương đương với, t (N = 9999999)?
Tôi hỏi câu hỏi này vì tôi nghi ngờ t (N = 70) là nhỏ hơn nhiều so t (N = 9.999.999), kể từ CPU Cache là thứ bậc.
Thậm chí còn tốt hơn nếu có nghiên cứu định lượng.
Vì vậy, .. trong câu trả lời ngắn gọn, t (N = 70) có nhiều khả năng nhỏ hơn t (N = 999999), phải không? – user8385554
@ user8385554 Đúng. Nó sẽ có xu hướng có TLB hit và có thể tận dụng lợi thế của prefetching đầu cơ của dòng bộ nhớ cache tiếp theo và thậm chí có khả năng khai thác một hàng DRAM vẫn mở (nếu A và B bỏ lỡ gần nhau). Nếu A hits trong L3, lợi ích TLB có thể sẽ là primary/only (tìm nạp trước dòng tiếp theo có thể được thực hiện tại bộ điều khiển bộ nhớ và hàng DRAM sẽ không được kích hoạt để truy cập A). Nếu B nằm trên một trang khác (4 ranh giới KiB trên x86 với các trang cơ sở), thì không có lợi ích nào có thể có sẵn. –