Jak działa pamięć cache?

Równie mało znana, jak skomplikowana, pamięć podręczna (cache) procesora odgrywa zasadniczą rolę jeśli chodzi o wydajność systemu komputerowego.

Równie mało znana, jak skomplikowana, pamięć podręczna (cache) procesora odgrywa zasadniczą rolę jeśli chodzi o wydajność systemu komputerowego.

Pamięć cache ma stosunkowo niewielką pojemność w porównaniu z pojemnością pamięci głównej komputera i jest - w porównaniu z nią - bardzo skomplikowana technologicznie. Zwykle pojemność tej pamięci wynosi 256 kB, podczas gdy pamięć RAM komputera w typowej konfiguracji wynosi 4, 8 lub więcej MB. Właściwie jako użytkownicy komputera nic nie wiemy na temat pamięci cache, którą wbudował konstruktor. Ufamy mu trochę na ślepo, w przekonaniu, że zrobi wszystko, aby komputer był wydajny. Tymczasem, jak pokazuje afera z niektórymi komputerami na rynku niemieckim (a nie wiadomo wcale czy nie trafiły one także do Polski), nieuczciwy dostawca mówi, że komputer jest wyposażony w pamięć cache, podczas gdy faktycznie założył jej atrapę, nie spełniającą żadnych funkcji.

Dwa zasadnicze zadania

Pamięć cache powinna spełniać dwa podstawowe zadania: zmniejszać czas dostępu do danych dla procesora i minimalizować obciążenie szyny pamięci, w celu udostępnienia jej innym urządzeniom.

Konieczność wyposażania komputerów w pamięć cache wynika z potrzeby zmniejszania różnic między rosnącą wydajnością procesora a szybkością dostępnych . Dla przykładu Pentium 100 MHz, mające wydajność 8-10 razy większą niż 486SX, 25 MHz musi pobierać dane z pamięci o tej samej szybkości. Obecne pamięci główne komputerów budowane są przy użyciu kostek tzw. pamięci dynamicznych DRAM, o czasie dostępu zawartym między 60 a 70 nanosekund. Stąd też idea pamięci podręcznej, konstruowanej przy użyciu kostek pamięci statycznej (Static RAM) o czasie dostępu ok. 12 ns. Wprawdzie ich koszt jest znacznie większy niż koszt pamięci dynamicznej, ale przez umiejętne wykorzystanie kilkudziesięciu lub kilkuset kilobajtów takiej pamięci można doprowadzić do tego, że procesor (prawie) nie będzie musiał oczekiwać na dane.

Zastosowanie pamięci podręcznej przynosi dwie korzyści: zmniejszenie czasu dostępu i lepsze jej wykorzystanie dzięki wbudowanemu w nią algorytmowi inteligentnego przechowywania danych. Kontroler pamięci cache identyfikuje ciąg instrukcji często powtarzających się w trakcie wykonywania programu i przechowuje je właśnie u siebie. Po wykryciu odwołania do pamięci zawierającej te instrukcje, kontroler cache je przechwytuje i podstawia dane z cache'a.

Tak więc procesorowi oszczędza się długiej drogi dostępu do pamięci głównej, odciążając szynę pamięci dla innych urządzeń, a w szczególności dla dostępu przez układy wyświetlania.

Aby wykorzystać wszystkie możliwości, jakie daje pamięć cache, konieczne jest właściwe przygotowanie programu.

Jeżeli wielokrotnie wykonywana pętla mieści się w całości w pamięci cache, jest wykonywana wielokrotnie szybciej, niż gdyby była pobierana z pamięci głównej (nawet tylko jej część). Procentowy stosunek trafionych odniesień lokalnych (instrukcje lub dane w cache'u) do ogólnej liczby odwołań procesora do pamięci nosi nazwę "stosunku trafień" (hit rate). Im jest on wyższy, tym wyższa jakość konstrukcji pamięci cache oraz tym lepsze przygotowanie programu do współpracy z taką pamięcią.

Dwa poziomy pamięci podręcznej

Typowa wartość stosunku trafień dla systemów pracujących pod DOS (lub innym jednozadaniowym systemem operacyjnym) zawiera się między 90 a 100%. Jednakże ten wysoki stosunek trafień udaje się osiągać jedynie w pamięci cache zintegrowanej na kostce procesora (tzw. cache 1. poziomu lub L1). Zmiana rodzaju aplikacji i systemu operacyjnego np. na Windows powoduje konieczność przetwarzania znacznie większych masywów danych i liczby instrukcji. Powoduje to zmniejszenie stosunku trafień i konieczność dodania zewnętrznej pamięci podręcznej (2. poziomu - L2) o większej pojemności, współpracującej z jednej strony z pamięcią główną oraz pamięcią podręczną 1. poziomu z drugiej strony.

W samym systemie i aplikacjach dla Windows osiąga się typową wartość stosunku trafień ok. 60% w pamięci cache L1 i ok. 90%, jeżeli stosuje się pamięć podręczną obydwu poziomów. Typowy procesor 486 ma wbudowane 8 kB pamięci podręcznej L1, ale typowe współczesne komputery mają 256 kB pamięci L2.

Uzyskiwany stosunek trafień zależy od właściwości konstrukcyjnych pamięci i sposobu jej współpracy z procesorem. Konstrukcje pamięci podręcznej różnią się architekturą i organizacją logiczną (asocjacyjna, odwzorowana w pamięci, in.) wpływające na częstość odczytów z pamięci głównej oraz sposób zapisu danych z pamięci głównej.


TOP 200