Całkiem możliwe jest zrozumienie i optymalizacja pamięci podręcznych. Zaczyna się od zrozumienia sprzętu i kontynuuje kontrolę nad systemem. Im mniej masz kontroli nad systemem, tym mniejsze prawdopodobieństwo, że odniesiesz sukces. Linux lub Windows z uruchomionymi pakietami aplikacji / wątków, które nie pracują na biegu jałowym.
Większość pamięci podręcznych jest nieco podobnych pod względem właściwości. Użyj części pola adresu do wyszukiwania trafień, mają głębokość (sposoby) i szerokość (linia pamięci podręcznej). Niektóre mają bufory zapisu, niektóre można skonfigurować tak, aby zapisywały lub omijały pamięć podręczną zapisów itp.
Musisz być bardzo świadomy wszystkich transakcji pamięciowych, które dochodzą do tej pamięci podręcznej (niektóre systemy mają niezależne pamięci podręczne instrukcji i danych, co ułatwia zadanie).
Możesz łatwo uczynić pamięć podręczną bezużyteczną, nie starannie zarządzając pamięcią. Na przykład, jeśli masz wiele bloków danych, które przetwarzasz, mając nadzieję na zachowanie ich w pamięci podręcznej, ale są one w pamięci pod adresami, które są nawet wielokrotnościami względem sprawdzania trafień / braków w pamięci podręcznej, powiedzmy 0x10000 0x20000 0x30000, a masz więcej te niż sposoby w pamięci podręcznej mogą bardzo szybko spowodować, że coś będzie działało dość wolno przy włączonej pamięci podręcznej, wolniej niż przy wyłączonej pamięci podręcznej. Ale zmień to na być może 0x10000, 0x21000, 0x32000 i to może wystarczyć, aby w pełni wykorzystać pamięć podręczną, zmniejszając eksmisje.
Podsumowując, kluczem do optymalizacji pod kątem pamięci podręcznej (cóż, oprócz znajomości systemu całkiem dobrze) jest utrzymanie wszystkich rzeczy, dla których potrzebujesz wydajności w pamięci podręcznej w tym samym czasie, uporządkowanie tych danych w taki sposób, aby możliwe było posiadanie wszystko w pamięci podręcznej naraz. I zapobieganie eksmisji znacznych części tych danych, których używasz, takich jak wykonywanie kodu, przerwania i inne regularne lub losowe zdarzenia.
To samo dotyczy kodu. Jest to jednak trochę trudniejsze, ponieważ musisz kontrolować lokalizacje, w których żyje kod, aby uniknąć kolizji z innym kodem, który chcesz przechowywać w pamięci podręcznej. Podczas testowania / profilowania dowolnego kodu, który przechodzi przez pamięć podręczną, dodając tu i tam jeden wiersz kodu lub nawet pojedynczy nop, wszystko, co przesuwa lub zmienia adresy, w których kod znajduje się z jednej kompilacji na drugą dla tego samego kodu, zmienia się, gdy wiersze pamięci podręcznej mieszczą się w tym kodzie i zmieniają to, co zostanie eksmitowane, a co nie w przypadku sekcji krytycznych.