Obliczanie pamięci podręcznej

Uczę się logiki pamięci podręcznej. Zastanawiam się, czy możesz sprawdzić, czy dobrze zrozumiałem. Jeśli pamięć podręczna w polu tagu ma 16 bitów, ustawione pole ma 10 bitów, a bajt w polu bloku to 6 bitów, wtedy mogę wywnioskować tylko z tych informacji że pojemność wynosi 128 kB i jest 2-kierunkowo ustawiana asocjacyjnie z rozmiarem bloku 64 bajty, ponieważ 2⁶ = 64 bajty z bajtu w polu bloku. 2¹ but = 1024, ale czy inna pojemność z innym numerem skojarzenia może spełnić wymagania?

Dowiedziałem się, że formuły to

liczba bloków = pojemność / rozmiar bloku

liczba zestawów = liczba bloków / # skojarzenie

Dlatego Mógłbym podwoić zarówno asocjatywność do 4-way, ale nie mogłem spełnić wymagań z 4-way cache, ponieważ to wo uld wymagają innej liczby bitów w ustawionym polu.

Czy dobrze zrozumiałem?

Odpowiedź

Czy to zdjęcie pomoże ci zrozumieć, jak działają asocjacyjne pamięci podręczne strukturalnie?

tutaj wprowadź opis obrazu wypożyczonego z tutaj

Krótko mówiąc, bity przesunięcia bloku określają rozmiar twojego bloku (ile bajtów znajduje się w wierszu pamięci podręcznej, ile kolumn, jeśli chcesz). Bity indeksu określają, ile wierszy znajduje się w każdym zestawie. Pojemność pamięci podręcznej wynosi zatem 2 ^ (bity przesunięcia bloku + bity indeksu) * #sets. W tym przypadku jest to 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobajt.

Dla tej samej wielkości pamięci podręcznej (pojemności), gdybyś miał przejść z 4 do sposób zestaw asocjacyjny, to dwukierunkowy asocjacyjny, możesz to zrobić, podwajając wiersze w każdym zestawie lub podwajając kolumny w każdym zestawie, co oznacza podwojenie liczby wierszy pamięci podręcznej lub podwojenie rozmiaru bloku.

Jeśli zdecydujesz się podwoić liczbę wierszy, Twój 12-bitowy adres zostanie podzielony na 5-bitowy indeks i 4-bitowe przesunięcie bloku, pozostawiając 3-bitowy znacznik.

Gdybyś zdecydował się podwoić rozmiar bloku, skończyłbyś z rozbiciem 12-bitowego adresu na 4-bitowy indeks, 5-bitowe przesunięcie bloku, pozostawiając 3-bitowy znacznik.

Aby powtórzyć, myślę, że formuły rządzące dla asocjacyjnych pamięci podręcznych są następujące:

Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits) 

W twoim pierwotnie podanym przykładzie nie ” myślę, że możesz wydedukować rozmiar pamięci podręcznej na podstawie rozmiaru odpowiednich pól bitowych adresu bez robienia założeń ut asocjatywności. Jeśli jest skojarzony dwukierunkowo, możesz powiedzieć:

Pojemność pamięci podręcznej = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobajtów = 256 kilobajtów. Nie jestem pewien, skąd wzięło się 128 kilobajtów. Byłoby tak, gdyby była to jednokierunkowa asocjacja (bezpośrednie mapowanie).

W przypadku 128kB (2 ^ 17 bajtów) pamięci podręcznej mógłby utworzyć czterokierunkową asocjacyjną pamięć podręczną o rozmiarze bloku 64 bajtów, mówiąc:

2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512 

… a zatem przydzielając 9 bitów indeksu, 4 bity przesunięcia bloku a pozostałe (19) bity znaczników.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *