20Aug

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

click fraud protection

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 SuperUser Q & A ma odpowiedzi na ciekawe pytanie czytelnika.

Dzisiejsze pytanie &Sesja odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupy Q & A.

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 będą buforować to samoczęść 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ź Autor

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

instagram viewer

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.

Po odpowiedzi od sleske:

Tak, posiadanie dwóch pamięci podręcznych pamięci podręcznej może dotyczyć tego samego regionu pamięci i faktycznie jest to 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 nie zgadzają się z
  • 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, orazpo wykryciu zapisu wyrzuca swoją( obecnie nieważną) pamięć podręczną

Problem ten nazywa się spójnością 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 twojego posta, 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, za każdym razem, gdy blok pamięci podręcznej jest zapisywany na poziomie n , aktualizowany jest odpowiedni blok na poziomie n + 1 .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 chcesz coś dodać 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.

Image Credit: Lemsipmatt( Flickr)