2009-06-03 12 views
28

Mam kilka pytań dotyczących pamięci podręcznej używanych w procesorach wielordzeniowych lub systemach wieloprocesorowych. (Chociaż nie bezpośrednio związane z programowaniem, posiada wiele reperkusje gdy jeden pisze oprogramowanie dla procesorów wielordzeniowych/systemów wieloprocesorowych, dlatego prosząc tutaj!)W jaki sposób pamięci podręczne są współużytkowane w wielordzeniowych procesorach Intel?

  1. W systemach wieloprocesorowych lub procesorów wielordzeniowych (Intel Core Quad Core dwóch Duo itp.) Czy każdy procesor/procesor cpu ma swoją własną pamięć podręczną (pamięć podręczną danych i programów)?

  2. Czy jeden procesor/rdzeń może uzyskać dostęp do pamięci podręcznej drugiej strony, ponieważ jeśli mają one dostęp do pamięci podręcznej drugiej strony, to uważam, że mogą występować mniejsze pomyłki w pamięci podręcznej, w scenariuszu, że jeśli ta pamięć podręczna niektórych procesorów nie ma niektórych danych, ale niektóre inne pamięci podręczne drugiego procesora może to w ten sposób uniknąć odczytu z pamięci do pamięci podręcznej pierwszego procesora? Czy to założenie jest prawdziwe i prawdziwe?

  3. Czy wystąpią problemy z zezwoleniem dowolnym procesorom na dostęp do pamięci podręcznej innego procesora?

+0

Semi-related: [Jakie są opóźnienia i koszty wydajności dzielenia przez producenta i konsumenta miejsca w pamięci pomiędzy hiper-siblings a non-hyper rodzeństwem?] (Https://stackoverflow.com/questions/45602699/what-are -opóźnienie-i-przepustowość-koszty-producent-konsument-udostępnianie-a-memo). a także [Co będzie używane do wymiany danych między wątkami w jednym rdzeniu z HT?] (https://stackoverflow.com/questions/32979067/what-will-be-used-for-data-exchange-between- wątki są wykonywane na jednym rdzeniu) –

Odpowiedz

2

Aby odpowiedzieć na to pierwsze, wiem, że Core 2 Duo posiada system buforowania 2-tier, w którym każdy procesor posiada własną pamięć podręczną pierwszego poziomu, a oni dzielą pamięci podręcznej drugiego poziomu. Pomaga to w synchronizacji danych i wykorzystaniu pamięci.

Aby odpowiedzieć na twoje drugie pytanie, uważam twoje założenie za poprawne. Jeśli procesor miałby mieć dostęp do pamięci podręcznej drugiej strony, to oczywiście byłoby mniejszy brak pamięci podręcznej, ponieważ byłoby więcej danych dla procesorów do wyboru. Rozważmy jednak współdzieloną pamięć podręczną. W przypadku Core 2 Duo posiadanie współużytkowanej pamięci podręcznej pozwala programistom bezpiecznie umieszczać powszechnie używane zmienne w tym środowisku, dzięki czemu procesory nie będą musiały uzyskiwać dostępu do swoich indywidualnych pamięci podręcznych pierwszego poziomu.

Aby odpowiedzieć na trzecie pytanie, może wystąpić problem z dostępem do pamięci podręcznej innych procesorów, która przechodzi do zasady "Single Write Multiple Read". Nie możemy pozwolić, aby więcej niż jeden proces zapisywał do tej samej lokalizacji w pamięci w tym samym czasie.

Aby uzyskać więcej informacji na temat duetu 2, przeczytaj ten artykuł.

http://software.intel.com/en-us/articles/software-techniques-for-shared-cache-multi-core-systems/

10

Szybkie odpowiedzi 1) Tak 2) Nie, ale to wszystko może zależeć od tego, co pamięć instancja/zasobu którego się odnosimy, dane mogą występować w kilku miejscach w tym samym czasie. 3) Tak.

Aby uzyskać pełne wyjaśnienie problemu, należy zapoznać się z artykułem 9-częściowym "Co każdy programista powinien wiedzieć o pamięci" Ulricha Dreppera (http://lwn.net/Articles/250967/), otrzymasz pełny obraz problemów, które wydają się być pytaniem o w dobrym i dostępnym detalu.

+1

+1 za wskazanie doskonałego papieru. – sybreon

29

W systemach wieloprocesorowych lub wielordzeniowy procesor (Intel Quad Core, Rdzeń dwa Duo etc ..) nie każdy rdzeń CPU/Procesor posiada własnej pamięci cache (dane i pamięć podręczną programu)?

  1. Tak. Różni się on w zależności od dokładnego modelu układu, ale najczęstszym rozwiązaniem jest, aby każdy rdzeń procesora posiadał własne prywatne pamięci podręczne danych i instrukcji L1. Zunifikowana pamięć podręczna L2 jest zwykle dzielona między wszystkie rdzenie.

można procesor/rdzeń dostęp wzajemnie pamięć cache, bo jeśli oni mają dostęp do siebie nawzajem cache, to uważam, że może być mniejsze chybienia pamięci podręcznej, w scenariuszu, że jeśli ten konkretny pamięć podręczna procesorów nie zawiera niektórych danych, ale niektóre inne pamięci podręczne procesorów mogą w ten sposób uniknąć odczytu z pamięci do pamięci podręcznej pierwszego procesora o wartości ? Czy to założenie jest prawdziwe i prawdziwe?

  1. nr pamięci podręcznej L1 każdego CPU są w tej samej matrycy, jak rdzeń i nie mogą być dostępne inne rdzenie. Każdy rdzeń jest połączony z pamięcią podręczną L2 poprzez współdzieloną magistralę danych.

Czy będą jakieś problemy w dowolny procesor umożliwiający dostęp do innych pamięci cache procesora?

  1. Tak - po prostu nie ma przewodów łączących różne pamięci podręczne procesora z innymi rdzeniami. Jeśli rdzeń chce uzyskać dostęp do danych w pamięci podręcznej innego rdzenia, jedyną ścieżką danych, przez którą może to zrobić, jest magistrala systemowa.

Bardzo ważnym pokrewnym zagadnieniem jest cache coherency problem. Rozważmy następujące: załóżmy, że jeden rdzeń procesora ma określone miejsce w pamięci podręcznej i zapisuje w tej lokalizacji pamięci. Następnie inny rdzeń odczytuje tę lokalizację pamięci. Jak zapewnić, że drugi rdzeń widzi zaktualizowaną wartość? To jest problem z koherencją pamięci podręcznej. Istnieje wiele różnych rozwiązań; patrz Wikipedia i in.

+1

"Różnorodność" rozwiązań nie jest tak różnorodna. Prawie wszystko wykorzystuje niewielką odmianę [protokołu MESI] (https://en.wikipedia.org/wiki/MESI_protocol).Wiele pamięci podręcznych może mieć kopię linii wspólnej, ale tylko jedna pamięć podręczna w domenie koherencji (tj. System) może mieć linię w stanie zmodyfikowanym lub wykluczającym. Tak więc, aby napisać linię, procesor wykonuje operację Read-For-Ownership, aby upewnić się, że żadna inna pamięć podręczna w systemie nie ma kopii tej linii. Powiązane: jak działa atom-odczyt-modyfikuj-zapis ('lock inc [mem]'): https://stackoverflow.com/questions/39393850/can-num-be-atomic-for-in-num –

+1

Aktualizacja 8 lat później : w dzisiejszych czasach typowe jest, że procesory mają prywatne pamięci podręczne L1 i L2 na rdzeń z dzielonym L3. (Intel od Nehalem). L3 może cofnąć ruch koherentny, więc nie musi iść całą drogę do pamięci. –

+1

Również NUMA (https://en.wikipedia.org/wiki/Non-uniform_memory_access) jest interesującym i istotnym tematem. – HongboZhu

3

Firma Intel dzwoni na główną technologię udostępniania pamięci podręcznej Intel Smart Cache. W witrynie znajduje się encyklopedia strony wiki: https://en.wikipedia.org/wiki/Smart_Cache

Następnie na przykład dla procesora i5-3210M, ark page ma pole "Intel Smart Cache: 3 MB".

i "Szczegóły Wyposażenie Processor" Datasheet Volume 1 1.1 mówi:

  • Rozkaz 32-KB i 32 KB danych pierwszego poziomu cache (L1) dla każdego rdzenia
  • 256-KB wspólna instrukcja/dane pamięci podręcznej drugiego poziomu (L2) dla każdego rdzenia
  • do 8 MB współdzielonej Instruction/danych pamięci podręcznej trzeciego poziomu (L3), wspólny wśród wszystkich rdzeni
Powiązane problemy