Có thể tạo một cách rõ ràng các đối tượng tĩnh trong bộ nhớ cache CPU hay không, để đảm bảo rằng các đối tượng đó luôn ở trong bộ nhớ đệm, vì vậy không có hiệu suất nào được thực hiện từ việc đưa tất cả các cách vào RAM hoặc bộ nhớ ảo - bộ nhớ ảo hdd?Phân bổ bộ nhớ tĩnh trong bộ nhớ cache CPU trong c/C++: có thể không?
Tôi đặc biệt quan tâm đến việc nhắm mục tiêu bộ nhớ cache chia sẻ L3 lớn, không có ý định nhắm mục tiêu L1, L2, hướng dẫn hoặc bất kỳ bộ nhớ cache nào khác, chỉ là bộ nhớ lớn nhất trên bộ nhớ.
Và chỉ cần làm rõ để phân biệt từ chủ đề khác mà tôi đã tìm kiếm trước khi gửi bài này, tôi không quan tâm đến việc tư nhân hóa toàn bộ bộ nhớ cache, chỉ là một nhỏ, vài lớp giá trị của khu vực.
Tôi nghĩ tốt nhất bạn có thể làm là sử dụng [__builtin_prefetch macro của GCC] (http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Other-Builtins.html). Bộ nhớ cache IIRC không thể định địa chỉ theo mã, CPU tự quản lý nó (ít nhất là trên x86). –
Loại bộ xử lý nào? Một số kiến trúc có hướng dẫn đưa ra gợi ý bộ nhớ cache hoặc hướng dẫn tìm nạp trước bộ nhớ cache trước khi dữ liệu là cần thiết. – TJD
Anwer ngắn: không bạn không thể. Điều duy nhất bạn có thể làm là giữ cho địa phương tham chiếu chặt chẽ. Đừng nhảy vào bộ nhớ, nhưng cố gắng truy cập dữ liệu gần với dữ liệu đã được truy cập bởi thao tác trước đó. Ngoài ra: việc giữ cho dữ liệu của bạn được căn chỉnh trên các ranh giới bộ nhớ cache có thể giúp bạn tránh được việc tìm nạp bộ nhớ cache khác. BTW bộ nhớ cache * khe * không cần phải liên tiếp. Trên x86, có IIRC bốn khe L1 và hàng trăm hoặc hàng nghìn khe cắm L2. (mà bạn phải chia sẻ với các quy trình khác trên máy đa xử lý). – wildplasser