Kiedy pamięć podręczna procesora jest opróżniana z powrotem do pamięci głównej?

18

Jeśli mam procesor z dwoma rdzeniami, każdy rdzeń ma własną pamięć podręczną L1, czy jest możliwe, że Core1 i Core2 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 dokonały edycji swojej wartości w pamięci podręcznej?

CarmeloS
źródło

Odpowiedzi:

26

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

Tak. Wydajność byłaby okropna, gdyby tak nie było. Rozważ dwa wątki z tym samym kodem. Chcesz ten kod 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 dokonały edycji swojej wartości w pamięci podręcznej?

Stara wartość znajdzie się w pamięci głównej, co nie będzie miało znaczenia, ponieważ żaden procesor jej nie odczyta. Przed wyrzuceniem zmodyfikowanej wartości z pamięci podręcznej należy ją zapisać w pamięci. Zazwyczaj stosuje się niektóre warianty 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 obecna w żadnej innej pamięci podręcznej na tym samym poziomie.

David Schwartz
źródło
15

Tak, może się to zdarzyć (posiadanie dwóch buforów buforujących ten sam region pamięci), w rzeczywistości jest to problem, który występuje w praktyce bardzo często. Istnieją różne rozwiązania, na przykład:

  • dwie pamięci podręczne mogą się komunikować, aby upewnić się, że się nie zgadzają
  • możesz mieć jakiegoś opiekuna, który monitoruje wszystkie pamięci podręczne i odpowiednio je aktualizuje
  • każdy procesor monitoruje obszary pamięci, które buforował, a gdy wykryje zapis, wyrzuca swoją (teraz niepoprawną) pamięć podręczną

Problem nazywa się spójnością pamięci podręcznej . Artykuł w Wikipedii na ten temat zawiera ładny przegląd problemu i możliwych rozwiązań.

Śleske
źródło
2

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

Drugi protokół to zapisywanie. W takim przypadku za każdym razem, gdy blok pamięci podręcznej jest zapisywany na poziomie n, odpowiedni blok na poziomie (n + 1) jest aktualizowany. (Podobna jest koncepcja wypełniania naszego formularza papierem węglowym pod spodem; wszystko, co piszesz na górze, jest kopiowane na poniższym arkuszu). Jest to wolniejsze, ponieważ oczywiście wymaga więcej operacji pisania, ale wartości między buforami są bardziej spójne. W schemacie zapisu zwrotnego tylko pamięć podręczna najwyższego poziomu miałaby najbardziej aktualną wartość dla określonego bloku pamięci.

Kimberly W.
źródło
1
Zastanawiam się, jaki procent czytelników tutaj kiedykolwiek używał bibuły. :)
Barmar