Wydaje mi się, że tak się stanie:
Gdyby dwa rdzenie próbowały uzyskać dostęp do tego samego adresu w pamięci RAM, jeden musiałby poczekać , aż drugi uzyska dostęp do pamięci RAM. Za drugim razem, gdy każdy rdzeń będzie próbował uzyskać dostęp do tego samego adresu, mogą nadal mieć pamięć podręczną RAM, aby mogły jednocześnie uzyskiwać dostęp do odpowiednich pamięci podręcznych .
Gdyby dwa rdzenie próbowały uzyskać dostęp do różnych adresów w tej samej pamięci RAM, jeden musiałby poczekać , aż drugi uzyska dostęp do pamięci RAM.
Innymi słowy, wyobrażam sobie, że w przypadku zadań intensywnie programujących pamięć RAM przetwarzanie wieloprocesowe niewiele pomoże, chyba że wymagałoby wielokrotnego odczytu z tego samego adresu w pamięci RAM na rdzeń.
Czy zatem wiele procesorów / rdzeni może uzyskać dostęp do tej samej pamięci RAM jednocześnie, czy też to, co mówię, jest prawidłowe?
źródło
nop
s w swoim kodzie asembleraOdpowiedzi:
Podsumowanie: generalnie możliwe jest, aby pojedynczy rdzeń nasycił magistralę pamięci, jeśli dostęp do pamięci jest wszystkim, co robi.
Jeśli ustalisz przepustowość pamięci swojego komputera, powinieneś być w stanie sprawdzić, czy proces jednowątkowy naprawdę może to osiągnąć, a jeśli nie, w jaki sposób efektywne wykorzystanie przepustowości skaluje się z liczbą procesorów.
Szczegóły będą zależeć od używanej architektury. Zakładając coś w rodzaju nowoczesnego SMP i SDRAM:
może iść na kilka sposobów:
oboje chcą czytać jednocześnie:
jeśli oboje chcą pisać:
dwa rdzenie na tym samym układzie będą po prostu zapisywać w tej samej pamięci podręcznej, a to musi zostać tylko raz zapisane w pamięci RAM. W rzeczywistości, ponieważ pamięć będzie odczytywana i zapisywana w pamięci RAM na linię pamięci podręcznej, zapisy w odrębnych, ale wystarczająco bliskich adresach mogą zostać połączone w pojedynczy zapis do pamięci RAM
dwa rdzenie na różnych układach mają konflikt, a linia pamięci podręcznej będzie musiała zostać zapisana z powrotem do pamięci RAM przez układ 1, pobrana do pamięci podręcznej układu 2, zmodyfikowana, a następnie ponownie zapisana (nie mam pojęcia, czy zapis / pobieranie można połączyć ze sobą przez szpiegowanie)
W przypadku pojedynczego dostępu opóźnienie CAS oznacza, że dwie operacje mogą być potencjalnie przeplatane, aby nie trwały dłużej (a może tylko trochę dłużej) niż gdyby autobus był bezczynny.
źródło
Istnieje wiele różnych architektur maszyn, z których każda ma własny zestaw funkcji. Jedna kategoria maszyn wieloprocesowych nazywa się MISD , dla danych z wieloma instrukcjami pojedynczych, i takie maszyny są zaprojektowane tak, aby zapewniały te same dane kilku procesorom jednocześnie. Powiązana klasa maszyn zwana architekturami SIMD (Single Instruction Multiple Data) jest znacznie bardziej powszechna i zapewnia dostęp do tej samej pamięci w tym samym czasie, ale pamięć zawiera instrukcje zamiast danych. Zarówno w trybie MIMD, jak i SIMD „dostęp” oznacza dostęp do odczytu - możesz sobie wyobrazić kłopoty, które wystąpiłyby, gdyby dwie jednostki próbowały pisać w tym samym miejscu w tym samym czasie!
źródło
Chociaż większość odpowiedzi pojawia się od strony oprogramowania i / lub modelu sprzętowego, najczystszym sposobem jest rozważenie działania fizycznych układów pamięci RAM. (Pamięć podręczna znajduje się między procesorem a pamięcią i po prostu używa tej samej magistrali adresowej, a jej działanie jest całkowicie przezroczyste dla procesora.) Układy RAM mają jeden dekoder adresu, który odbiera adres komórki pamięci, przybywając na magistrala adresowa (i podobnie magistrala danych, wejściowa lub wyjściowa). Obecne pamięci są wbudowane w „podejście jednoprocesorowe”, tzn. Jeden procesor jest podłączony jedną magistralą do jednego układu pamięci. Innymi słowy, jest to „wąskie gardło von Neumanna”, ponieważ każda instrukcja musi odwoływać się do pamięci przynajmniej raz. Z tego powodu na jednym przewodzie (lub przewodach, czyli szynie) może występować tylko jeden sygnał na raz, więc układ RAM może odbierać jeden adres komórki na raz. Dopóki nie upewnisz się, że dwa rdzenie ustawią ten sam adres na magistrali adresowej, jednoczesny dostęp do magistrali przez dwóch różnych sterowników magistrali (takich jak rdzenie) jest fizycznie niemożliwy. (A jeśli jest to to samo, jest zbędne).
Reszta to tak zwane przyspieszenie sprzętowe. Magistrala koherencji, pamięć podręczna, dostęp do karty SIM itp. To tylko niektóre fajne fasady przed fizyczną pamięcią RAM, o które pytałeś. Wspomniane akceleratory mogą obejmować wyłącznie walkę o użycie magistrali adresowej, a modele programowania nie mają wiele wspólnego z twoim pytaniem. Należy również zauważyć, że jednoczesny dostęp byłby również sprzeczny z abstrakcyjną „prywatną przestrzenią adresową”.
Tak więc na twoje pytania: jednoczesny bezpośredni dostęp do pamięci RAM nie jest możliwy, ani z tym samym, ani z różnymi adresami. Korzystanie z pamięci podręcznej może zasłaniać ten fakt i w niektórych przypadkach umożliwiać pozornie jednoczesny dostęp. Zależy to od poziomu pamięci podręcznej i konstrukcji, a także od przestrzennej i czasowej lokalizacji danych. I tak, masz rację: przetwarzanie wielordzeniowe bez zwiększonego dostępu do pamięci RAM nie pomoże w przypadku aplikacji wymagających dużej ilości pamięci RAM.
Dla lepszego zrozumienia: przypomnij sobie, jak działa bezpośredni dostęp do pamięci. Zarówno procesor, jak i urządzenie DMA mogą umieszczać adres na magistrali, więc muszą się wzajemnie wykluczać z jednoczesnego korzystania z magistrali.
źródło
Nie dbasz o fizycznej pamięci RAM, dbasz bardziej o pamięci wirtualnej i przestrzeni adresowej z procesów lub wątków (wszystkie gwinty samego udziału procesowego wspólna przestrzeń adresowa) w praktyce.
Oczywiście, jeśli kodujesz wielordzeniowe jądro systemu operacyjnego, bardzo zależy ci na pamięci RAM i spójności pamięci podręcznej.
Większość procesorów wielordzeniowych ma jakiś mechanizm koherencji pamięci podręcznej . Szczegóły są specyficzne dla procesora. Ponieważ procesor korzysta z pamięci podręcznej procesora , czasami zachowuje się tak, jakby kilka rdzeni procesora jednocześnie uzyskiwało dostęp do tej samej lokalizacji pamięci.
Najnowsze standardy języków przemysłowych, takich jak C11 lub C ++ 11, mają pewien model pamięci (obsługujący wiele wątków) .
źródło
Nowoczesne procesory są fizycznie powiązane z zewnętrznymi urządzeniami pamięci w celu uzyskania maksymalnej przepustowości transferu danych. Wynika to z wymagań integralności sygnału (długość śladu, zakończenie, pochylenie zegara itp.) Niezbędnych do utrzymania wysokich prędkości transferu. Na przykład na płycie głównej z wieloma procesorami każdy procesor ma dedykowany zestaw gniazd DIMM. Niezależnie od tego, co myślą programiści oprogramowania, jeden procesor nie może po prostu uzyskać dostępu do danych pamięci zewnętrznej innego procesora. Oprogramowanie do zarządzania pamięcią systemu, czy to na poziomie jądra systemu operacyjnego, Hypervisora, rdzeni płaszczyzny danych, czy w inny sposób, obsługuje transfer danych między procesorami.
źródło