Dlaczego istnieją osobne pamięci podręczne L1 dla danych i instrukcji?


Odpowiedzi:


28

Jest tak naprawdę kilka powodów.

Po pierwsze i prawdopodobnie przede wszystkim dane przechowywane w pamięci podręcznej instrukcji są na ogół nieco inne niż dane przechowywane w pamięci podręcznej danych - wraz z samymi instrukcjami znajdują się adnotacje dotyczące np. Miejsca, w którym zaczyna się kolejna instrukcja, aby pomóc dekoderom. Niektóre procesory (np. Netburst, niektóre SPARC) używają „pamięci podręcznej śledzenia”, która przechowuje wynik dekodowania instrukcji zamiast przechowywać oryginalną instrukcję w jej zakodowanej formie.

Po drugie, nieco upraszcza obwody - pamięć podręczna danych musi radzić sobie z odczytami i zapisami, ale pamięć podręczna instrukcji dotyczy tylko odczytów. (Jest to częściowo spowodowane tym, że samodomodujący kod jest tak drogi - zamiast bezpośredniego nadpisywania danych w pamięci podręcznej instrukcji, zapis przechodzi przez pamięć podręczną do pamięci podręcznej L2, a następnie wiersz w pamięci podręcznej instrukcji jest unieważniany i ponownie - ładowany z L2).

Po trzecie, zwiększa przepustowość: większość nowoczesnych procesorów może jednocześnie odczytywać dane z pamięci podręcznej instrukcji i pamięci podręcznej danych. Większość ma także kolejki przy „wejściu” do pamięci podręcznej, dzięki czemu mogą faktycznie wykonać dwa odczyty i jeden w dowolnym cyklu.

Po czwarte, może oszczędzać energię. Podczas gdy musisz utrzymać zasilanie samych komórek pamięci, aby zachować ich zawartość, niektóre procesory mogą / powodują wyłączenie niektórych powiązanych obwodów (dekoderów itp.), Gdy nie są używane. Dzięki oddzielnym pamięciom podręcznym mogą zasilać te obwody osobno dla instrukcji i danych, zwiększając szanse, że obwód pozostanie bez zasilania podczas dowolnego cyklu (nie jestem pewien, czy robią to procesory x86 - AFAIK, to raczej ARM rzecz).


3
Należy również wspomnieć, że kod i dane mogą wykazywać różne wzorce dostępu; na przykład instrukcje sumowania wszystkich elementów w tablicy wykazują lokalizację czasową (te same instrukcje są często używane (jeśli robisz to przez pętlę)), a dane w tablicy wykazują lokalizację przestrzenną (następne dane są używane).
— gablin

1
@gablin: chociaż prawda, te różnice we wzorcach często sprzyjają zunifikowanej pamięci podręcznej. W ciasnej pętli, jak wspomniałeś, większość pamięci podręcznej instrukcji siedzi bezczynnie. Ujednolicona pamięć podręczna zasadniczo podwoiłaby rozmiar pamięci podręcznej danych na czas trwania pętli.
— Jerry Coffin,

Nie bardzo, bo jest więcej kodu po tej małej pętli i to również może pracować z tablicy. To charakteryzuje bardzo dużo kodu (np. Obsługa ciągu). W rzeczywistości pierwsze pamięci podręczne w procesorach były ujednoliconymi pamięciami podręcznymi - znajdowały się między głównym interfejsem pamięci procesora a zewnętrzną magistralą, co było prostym miejscem do ich umieszczenia - ale teraz używamy partycjonowanej pamięci podręcznej, ponieważ jest szybsza w praktyce .
— Donal Fellows

@Donal Fellows: Tak, naprawdę. Doskonale zdaję sobie sprawę z tego, jak wczesne buforowanie zostało wykonane i dlaczego zmieniono je na podzieloną pamięć podręczną.
— Jerry Coffin

5

Podobnie jak w przypadku nieruchomości, użycie pamięci podręcznej zależy od trzech rzeczy: lokalizacji, lokalizacji, lokalizacji. Chodzi o to, że większość programów wykazuje wzorce lokalizacji: jeśli uzyskają dostęp do bajtu 1111111, to następny bajt, do którego uzyskają dostęp, to prawdopodobnie 1111110 lub 1111112, a nie tyle bajtu 9999999. Jednak większość programów będzie się bardzo różnić wzorce lokalizacji dla ich instrukcji i ich danych. Oznacza to, że jest mało prawdopodobne, aby instrukcje i dane mogły efektywnie współdzielić pamięć podręczną. Ponieważ instrukcje i dane niekoniecznie znajdują się blisko siebie w pamięci. Dostęp do danych spowodowałby podbicie instrukcji z pamięci podręcznej, a instrukcje ładowania podniosłyby dane z pamięci podręcznej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.