Komputery typu SIMD posiadają jedną jednostkę sterującą i wiele jednostek arytmetyczno-logicznych (ALU), dzięki czemu w danej chwili pojedynczy rozkaz może być wykonywany na wielu zestawach danych równocześnie. Prototypem komputera SIMD była maszyna ILLIAC IV, przedstawiona na rysunku 2.6. Typowe komputery tej kategorii spotyka się coraz rzadziej, lecz wiele konwencjonalnych komputerów posiada w swym repertuarze rozkazy typu SIMD do przetwarzania danych multimedialnych — czego przykładem mogą być rozkazy SSE procesora Pentium. Jest jednak dziedzina, w której technologia SIMD znaleźć może zastosowanie w przy-szłości — mowa o tzw. procesorach strumieniowych, projektowanych specjalnie na potrzeby niezwykle wydajnego renderowania grafiki (Kapasi i in., 2003). Architektura MISD, zgodnie z którą wiele strumieni rozkazów operuje jednocze- śnie na tym samym zestawie danych, jest kategorią cokolwiek dziwną i właściwie nie sposób podać choćby jednego przykładu komputera pracującego w ten właśnie sposób. Niektórzy skłonni są uważać komputery potokowe za przedstawicieli tej właśnie kategorii. Wreszcie architektura MIMD to zestaw niezależnych procesorów, współpracują- cych ze sobą w ramach większego systemu, a więc przede wszystkim wieloprocesory oraz wielokomputery i w ogóle większość komputerów równoległych. Na tym kończy się taksonomia Flynna, lecz my uczyniliśmy ją bardziej szcze- gółową, zgodnie z rysunkiem 8.18. I tak komputery typu SIMD podzieliliśmy na dwie podgrupy. W pierwszej z nich plasują się superkomputery numeryczne i inne maszyny operujące na wektorach, wykonujące tę samą operację jednocześnie na wszystkich elementach danego wektora; druga podgrupa obejmuje komputery równoległe, w któ- rej pojedyncza jednostka sterując dokonuje rozdziału między wiele niezależnych jednostek ALU, jak w przypadku komputera ILLIAC IV. RYSUNEK 8.18. Rozszerzona taksonomia komputerów równoległych 8.3. WIELOPROCESORY ZE WSPÓŁDZIELONĄ PAMIĘCIĄ 631 Kategorię MIMD dzieli się na wieloprocesory (czyli komputery z pamięcią współ- dzieloną) i wielokomputery (czyli komputery z procesorami przekazującymi sobie komunikaty). Wśród wieloprocesorów wyróżniliśmy trzy kategorie, różniące się sposobem realizacji współdzielenia pamięci, w dużych systemach zwykle podzielonej na wiele modułów. W architekturze zwanej UMA (Uniform Memory Access, jednolity dostęp do pamięci) czas dostępu jest jednakowy dla każdej pary „procesor-moduł pa-mięci”; innymi słowy, każdy procesor może odczytywać dowolne słowo z pamięci z takim samym opóźnieniem (jeśli technicznie nie jest to możliwe, szybsze odwołania zostają sztucznie spowolnione do prędkości najwolniejszych, przez co programiści nie muszą się przejmować tą różnicą). „Jednolitość” czasu wszystkich odwołań czyni wydajność systemu wysoce przewidywalną — a to bardzo ważny czynnik w tworzeniu efektywnego kodu. Przeciwieństwem architektury z „wyrównanym” czasem dostępu jest architektura NUMA (NonUniform Memory Access, niejednolity dostęp do pamięci), w ramach której każdy procesor uzyskuje najszybciej dostęp do tych modułów pamięci, które znajdują się najbliżej niego — dostęp do odległych modułów wiąże się z większymi opóźnieniami. Rodzi to określone wymagania pod względem umieszczania określonych fragmentów kodu i danych w określonych modułach, jeżeli osiągnięta ma być maksymalna wydajność systemu. Architektura COMA (Cache Only Memory Access) także charakteryzuje się niejednolitym czasem dostępu, lecz w innym sensie. W dalszym cią- gu rozdziału zajmiemy się bardziej szczegółowo każdą z trzech wymienionych kategorii. Procesory wielokomputerów, w przeciwieństwie do wieloprocesorów, nie mają możliwości czytania i pisania w pamięci innych procesorów za pomocą rozkazów LOAD i STORE, lecz system operacyjny lub środowisko uruchomieniowe języka programo- wania może im stworzyć iluzję takiej możliwości, symulując pamięć współdzieloną na przykład za pomocą sprzętowych mechanizmów pamięci wirtualnej. Owa iluzo- ryczność jest właśnie istotnym czynnikiem różniącym wielokomputery od wielopro- cesorów. Fakt braku współdzielonej pamięci w architekturze wielokomputerów po- woduje, iż często architekturę tę określa się akronimem NORMA (NO Remote Memory Access, „brak dostępu do odległej pamięci”). Wielokomputery można podzielić z grubsza na dwie kategorie. Pierwszą z nich stanowią komputery masywnie równoległe (MPP, Massively Parallel Processors), będące superkomputerami składającymi się z wielu procesorów ściśle połączonych poprzez szybkie, dedykowane, specyficzne sieci. Przykładem komercyjnego kompu- tera tej kategorii jest IBM SP/3. Druga kategoria wielokomputerów to zespoły komputerów PC lub stacji robo- czych, montowanych zwykle na stojakach ( rack-mounted) i łączonych przy użyciu komercyjnych technologii „z półki” ( off-the-shelf). Logicznie nie różnią się one niczym od przedstawicieli poprzedniej kategorii, są jednak wielokrotnie tańsze od superkomputerów kosztujących miliony dolarów i składane oraz wykorzystywane w odmienny
|