next up previous contents
Next: Eksperymenty Up: Projekt implementacji maszyny typu Previous: Synchronizacja procesorów   Spis rzeczy

Projekt implementacji pamięci dzielonej i procesorów

Przy założeniu o podziale procesorów na grupy podczas operacji dostępu do pamięci dzielonej konieczne staje się określenie, czy wszystkie procesory należące do danej grupy już zgłosiły odpowiednie zlecenie i czy w związku z tym można je wykonać. Rozproszenie pamięci dzielonej wymusza przeprowadzenie w tym celu dodatkowej komunikacji pomiędzy procesorami. Załóżmy, że pamięć jest podzielona między kilka maszyn fizycznych. Każda z nich po otrzymaniu zlecenia od jednego z procesorów wirtualnych musiałby powiadomić o tym pozostałe jednostki, a to oznacza kolejne komunikaty przesyłane siecią i dalsze opóźnienie. Dopiero po otrzymaniu komunikatu, że wszystkie procesory wirtualne zgłosiły się do operacji, mogłaby zakończyć operację. Nie można pominąć również faktu, że procesor wirtualny musiałby wyliczać, do której z jednostek wysyłać dane zlecenie. To powoduje kolejne opóźnienia. Scentralizowanie pamięci globalnej oraz połączenie jej z jednostką odpowiadającą za synchronizację redukuje dużą część komunikatów sieciowych. Może to co prawda doprowadzić do obniżenia wydajności niektórych operacji (głównie blokowych), jednak sytuacje, w których to następuje zdarzają się niezwykle rzadko i problem ten można zazwyczaj obejść.

Komunikacja między procesorami a pamięcią odbywa się z użyciem komunikacji sieciowej. Jest ona bardzo kosztowna. W skrajnych przypadkach może okazać się, że procesor większość swojego czasu spędza na oczekiwaniu na zakończenie komunikacji z pamięcią globalną. Dlatego też w takich programach wskazane staje się uruchomienie kilku ,,procesorów wirtualnych'' na jednej maszynie fizycznej, zbieranie ich zleceń a następnie łączne wysyłanie ich do pamięci. Dzięki temu średni czas komunikacji w przeliczeniu na jeden procesor wirtualny staje się zdecydowanie mniejszy (sumaryczny czas przesłania pojedynczych komunikatów jest większy od czasu przesłania jednego ale większego, jest to związane z protokołami transmisji sieciowej). Takie rozwiązanie daje ponadto możliwość uruchomienia programu na dużo większej liczbie procesorów wirtualnych. Jeśli mamy na przykład sieć złożoną z 12 maszyn fizycznych to w zależności od konfiguracji można na niej uruchomić nawet około \( 12*220=2640 \) procesorów wirtualnych (dotyczy standardowo skonfigurowanych maszyn działających pod systemem Linux na procesorach firmy Intel, przy innej konfiguracji może to być maksymalnie do około \( 12*4000=48000 \) procesorów). Może to nie spowodować co prawda przyspieszenia wykonywanych obliczeń, ale daje możliwość testowania bardziej złożonych algorytmów.


next up previous contents
Next: Eksperymenty Up: Projekt implementacji maszyny typu Previous: Synchronizacja procesorów   Spis rzeczy
Łukasz Maśko
2000-04-17