Jak obliczyć liczbę bitów znacznika, indeksu i przesunięcia różnych pamięci podręcznych?

20

Konkretnie:

1) Bezpośrednio odwzorowana pamięć podręczna z 4096 blokami / liniami, w których każdy blok ma 8 32-bitowych słów. Ile bitów potrzeba na pola znaczników i indeksów, przyjmując adres 32-bitowy?

2) To samo pytanie co 1), ale dla w pełni asocjacyjnej pamięci podręcznej ?

Popraw mnie, jeśli się mylę, czy to:

znaczniki = długość bitu adresu - wykładnik indeksu - wykładnik przesunięcia?

[Czy przesunięcie = 3 wynika z 2 ^ 3 = 8 czy jest to 5 z 2 ^ 5 = 32?]

compski
źródło
kilka wyjaśnień na temat tagu, indeksu i offsetu w cs.stackexchange.com/questions/33818/...
Ran G.

Odpowiedzi:

20

Pytanie, o którym mowa, nie jest całkiem możliwe do odpowiedzi. Słowo zostało zdefiniowane jako 32-bitowe. Musimy wiedzieć, czy system jest „adresowalny bajtowo” (można uzyskać dostęp do 8-bitowego fragmentu danych), czy „adresowany słowem” (najmniejszy dostępny fragment to 32 bity), a nawet „adresowalny w połowie słowa” ( najmniejsza część danych, do której możesz uzyskać dostęp, to 16-bitów.) Musisz to wiedzieć, aby wiedzieć, co mówi ci bit adresu najniższego rzędu.

Następnie pracujesz od dołu do góry. Załóżmy, że system jest adresowalny bajtowo .

Następnie każdy blok pamięci podręcznej zawiera 8 słów * (4 bajty / słowo) = 32 = 25 bajtów, więc przesunięcie wynosi 5 bitów.

Wskaźnik do bezpośredniego odwzorowanym cache jest liczba bloków w pamięci podręcznej (12 bitów, w tym przypadku, ponieważ 2 12 = 4096).

Następnie znacznikiem są wszystkie bity, które pozostały, jak wskazałeś.

Ponieważ pamięć podręczna staje się coraz bardziej asocjacyjna, ale utrzymuje ten sam rozmiar, jest mniej bitów indeksu i więcej bitów znaczników.

Wędrująca logika
źródło
tak, to bajt adresowalny, ale pytanie, na które patrzyłem, nie
precyzowało
3

Twoja formuła dla bitów znaczników jest poprawna.

To, czy przesunięcie wynosi trzy lub pięć bitów, zależy od tego, czy procesor używa adresowania bajtowego (oktetowego), czy adresowania słów. Poza procesorami DSP prawie wszystkie najnowsze procesory używają adresowania bajtów, więc bezpiecznie byłoby założyć adresowanie bajtów (i pięć bitów przesuniętych).

Paul A. Clayton
źródło
Nie wiedziałem, że istnieją takie rozróżnienia, tak, to adresowanie bajtów
compski
1
Przed połową lat siedemdziesiątych możemy rozsądnie założyć, że „słowo” było wielkością najmniejszej adresowalnej jednostki danych. Ta tabela na stronie wikipedii poświęconej słowu jest zabawna (jeśli lubisz tego rodzaju rzeczy (co robię.))
Wandering Logic
1

Uczę się do końcowego egzaminu z przedmiotu System komputerowy, poszukałem go przez chwilę i znalazłem to pytanie. I ta część pytania jest myląca: „w której każdy blok ma 8 32-bitowych słów”. Słowo ma 4 bajty (lub 32 bity), więc pytanie musi brzmieć „…, w którym każdy blok ma 8 słów”

Odpowiedź brzmi: - Każdy blok ma 32 bajty (8 słów), więc potrzebujemy 5 bitów przesunięcia, aby określić, który bajt w każdym bloku - Bezpośrednio odwzorowany => liczba zestawów = liczba bloków = 4096 => potrzebujemy 12 bitów indeksu, aby określić, który zestaw

=> bit znacznika = 32–12–5 = 15

Dla pełnego asocjacji liczba zestawów wynosi 1 => brak bitu indeksu => bit znacznika = 32 - 0 - 5 = 27

Hoang Trinh
źródło
1

Nie ma żadnych bitów indeksu w pełni asocjacyjnej pamięci podręcznej. Bity indeksu służą do jednoznacznej identyfikacji, do którego zestawu należy blok. W pełni asocjacyjnej pamięci podręcznej wszystkie bloki są zasadniczo częścią tego samego zestawu.

Steph
źródło
-1

w pełnym powiązaniu indeks odwzorowania wynosi 0 b / s, jak mówisz set = 1, więc index = log 1 w bazie 2 = 0 set offset = log wielkości bloku bajtu base 2, więc użyj 8 = 2 ^ 3 lub 32 = 2 ^ 5 tag = 32-0-5 = 27 dla bezpośredniego indeksu = 2 ^ 12 = 12 offset = 0 bitów tag = 32-12-0 = 20

użytkownik96559
źródło
Uważam to za bardzo niemożliwe do odczytania. Proszę użyć interpunkcji.
David Richerby