If-Koubou

Kiedy pamięć podręczna procesora przepłukana jest z powrotem do pamięci głównej?

Kiedy pamięć podręczna procesora przepłukana jest z powrotem do pamięci głównej? (Jak)

Jeśli dopiero zaczynasz się uczyć, jak działają wielordzeniowe procesory, pamięć podręczna, spójność pamięci podręcznej i pamięć, na początku może się wydawać nieco niejasna. Mając to na uwadze, dzisiejszy post pytań i odpowiedzi dla SuperUser zawiera odpowiedzi na ciekawe pytanie czytelnika.

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.

Pytanie

Czytnik SuperUser CarmeloS chce wiedzieć, kiedy pamięć podręczna procesora jest przepuszczana z powrotem do pamięci głównej:

Jeśli mam procesor z dwoma rdzeniami i każdy rdzeń ma własną pamięć podręczną L1, czy możliwe jest, że Core1 i Core2 jednocześnie buforują tę samą część pamięci w tym samym czasie? Jeśli to możliwe, jaka będzie wartość pamięci głównej, jeśli zarówno Core1, jak i Core2 edytują swoje wartości w pamięci podręcznej?

Kiedy pamięć podręczna procesora jest spłukana z powrotem do pamięci głównej?

Odpowiedź

Współautorzy SuperUser David Schwartz, sleske i Kimberly W mają dla nas odpowiedź. Po pierwsze, David Schwartz:

Jeśli mam procesor z dwoma rdzeniami i każdy rdzeń ma własną pamięć podręczną L1, czy możliwe jest, że Core1 i Core2 jednocześnie buforują tę samą część pamięci w tym samym czasie?

Tak, wydajność byłaby straszna, gdyby tak nie było. Rozważ dwa wątki z tym samym kodem. Chcesz tego kodu w obu pamięciach podręcznych L1.

Jeśli to możliwe, jaka będzie wartość pamięci głównej, jeśli zarówno Core1, jak i Core2 edytują swoje wartości w pamięci podręcznej?

Stara wartość będzie w pamięci głównej, co nie ma znaczenia, ponieważ żaden rdzeń jej nie odczyta. Przed wyrzuceniem zmodyfikowanej wartości z pamięci podręcznej, musi ona zostać zapisana w pamięci. Zazwyczaj używany jest pewien wariant protokołu MESI. W tradycyjnej implementacji MESI, jeśli wartość jest modyfikowana w jednej pamięci podręcznej, nie może być w ogóle w jakiejkolwiek innej pamięci podręcznej na tym samym poziomie.

Następująca odpowiedź od sleske:

Tak, mając dwie pamięci podręczne pamięci podręcznej, ten sam obszar pamięci może się zdarzyć i jest to faktycznie problem, który często występuje w praktyce. Istnieją różne rozwiązania, na przykład:

  • Dwie pamięci podręczne mogą się komunikować, aby się upewnić, że się nie zgadzają
  • Możesz mieć jakiegoś nadzorcę, który monitoruje wszystkie pamięci podręczne i odpowiednio je aktualizuje
  • Każdy procesor monitoruje obszary pamięci, które ma w pamięci podręcznej, a po wykryciu zapisu wyrzuca swoją (teraz nieważną) pamięć podręczną

Problem ten nazywa się koherencją pamięci podręcznej, a artykuł w Wikipedii na ten temat zawiera ładny przegląd problemu i możliwych rozwiązań.

I nasza ostateczna odpowiedź od Kimberly W:

Aby odpowiedzieć na pytanie w tytule wpisu, zależy to od protokołu buforowania. Jeśli jest to zapis zwrotny, pamięć podręczna zostanie opróżniona z powrotem do pamięci głównej, gdy kontroler pamięci podręcznej nie ma innego wyboru, jak tylko umieścić nowy blok pamięci podręcznej w już zajętym miejscu. Blok, który poprzednio zajmował miejsce, jest usuwany, a jego wartość jest zapisywana z powrotem do pamięci głównej.

Drugi protokół to zapis. W takim przypadku w dowolnym momencie blok pamięci podręcznej jest zapisywany na poziomie n, odpowiedni blok na poziomie n + 1 jest zaktualizowane. Podobna koncepcja polega na wypełnianiu formy papierem węglowym pod spodem; cokolwiek napiszesz na górze, jest kopiowane na arkuszu poniżej. Jest to wolniejsze, ponieważ w oczywisty sposób wiąże się z większą liczbą operacji zapisu, ale wartości między pamięciami podręcznymi są bardziej spójne. W schemacie zapisu tylko pamięć podręczna najwyższego poziomu miałaby najbardziej aktualną wartość dla określonego bloku pamięci.

Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.

Zdjęcie: Lemsipmatt (Flickr)