Pokonać prawo Moore’a

Od lat sześćdziesiątych obowiązuje aksjomat o podwajaniu się mocy obliczeniowej komputerów co 18 miesięcy. Niedawno prawo Moore’a, bo o nim tutaj mowa, złamane zostało przez inżynierów konstruujących karty graficzne. Czy sytuacja taka powtórzy się w przypadku procesorów?

W

poprzednim numerze CHIP-a (s. 112) przedstawiliśmy aktualną sytuację na rynku procesorów oraz architekturę chipów Intel Pentium III Coppermine i PowerPC 7400 (G4). Teraz popatrzmy, co na najbliższe lata przygotowują konstruktorzy tego najważniejszego układu w komputerze.

Przetwarzać równolegle

Architektura 64-bitowego procesora Itanium (znanego dotychczas pod nazwą kodową Merced) jest wspólnym dziełem inżynierów z firm Hewlett-Packard i Intel. U podstaw jego konstrukcji leżą rozwiązania z powodzeniem stosowane od lat w układach PA-RISC wykorzystywanych w serwerach i wysoko wydajnych stacjach roboczych firmy Hewlett-Packard. Itanium nie jest jednak tylko rozwinięciem architektury jednostek centralnych HP, gdyż wykorzystano w nim technologie stosowane do tej pory w świecie superkomputerów, a sama krzemowa konstrukcja i zastosowane wewnątrz niej rozwiązania technologiczne są już rezultatem samodzielnych prac Intela.

Ponieważ procesor Intel Itanium w jednym cyklu zegarowym pobiera z pamięci ogromne ilości danych, istnieje konieczność zoptymalizowania ich przepływu. Aby to osiągnąć, zastosowano trój stopniową pamięć podręczną. Cache L1 i L2 zintegrowane są z jądrem, natomiast pamięć podręczna trzeciego poziomu znajduje się na jednej płytce drukowanej wraz z głównym układem scalonym – podobnie jak miało to miejsce w Pentium II/III. Kompatybilność z 32-bitowymi układami z linii x86 zapewnia specjalizowany moduł dekodujący (IA-32 Decode and Control). Instrukcje SSE (w PIII moduł SSE operuje na ośmiu 128-bitowych rejestrach) są bezpośrednio kierowane do rejestrów zmiennoprzecinkowych, pozostałe rozkazy x86 są zamieniane na kod IA-64 i kierowane do jednego z dziewięciu wejść (9 Issue Ports; 3×B – Branch Function, 2×M – Memory Function, 2×I – Integer Function, 2×F – Float-ingpoint Function). 64-bitowe instrukcje po wstępnym pobraniu i analizie (Fetch/Pre-fetch Engine) są kolejkowane. Działanie pozostałych bloków wykonawczych wyjaśniono w tekście.

Głównym założeniem twórców nowego procesora było umożliwienie równoległego wykonywania instrukcji. Wydaje się, że to nic nowego. Przecież wszystkie współczesne konstrukcje superskalarne, takie jak np. Athlon czy Pentium III, potrafią równolegle przetwarzać rozkazy. Dokonuje się tego poprzez zwielokrotnienie jednostek wykonawczych i zwiększenie liczby jednocześnie obsługiwanych potoków – jest to tzw. niejawne równoległe wykonywanie instrukcji. W zastosowanej w Itanium technice EPIC (Explicitly Paralell Instruction Processing – przetwarzanie jawnie równoległe) chodzi jednak o zupełnie coś innego. O tym, czy instrukcje mogą być wykonywane równolegle, nie decyduje logika układu. Równoległość przetwarzania definiowana jest już podczas kompilacji programu. Każda instrukcja przekazywana do jednostek wykonawczych jest znakowana jako tzw. absolutna (niezależna od innych) lub predykowana (uzależniona od wyników innych oznaczonych uprzednio operacji). Wymaga to odpowiedniej konstrukcji kompilatora, tak aby możliwa była pełna analiza relacji pomiędzy instrukcjami a danymi.

Idea przetwarzania jawnie równoległego EPIC jest rozwinięciem technologii VLIW (Very Long Instruction Word), czyli wykonywania bardzo długich instrukcji (patrz rysunek: Budowa instrukcji VLIW), zastosowanej już w 1965 roku w pierwszym z superkomputerów Seymoura Craya – CDC-6600. Słowa VLIW tworzą paczkę (nazywaną też niekiedy molekułą) składającą się z kilku drobnych rozkazów przeznaczonych dla poszczególnych jednostek wykonawczych procesora.

Krzemowa architektura Itanium

Wewnętrzna budowa Itanium (patrz rysunek: Schemat blokowy procesora Itanium) to 128 rejestrów ogólnego przeznaczenia o długości wynoszącej 64 bity, 128 rejestrów zmiennoprzecinkowych (82-bitowych, pracujących na 80-bitowych danych), 72 rejestry przewidywania skoków (Branch and Predicate Registers) oraz rejestry specjalizowane. Za przetwarzanie rozkazów odpowiadają cztery jednostki stałoprzecinkowe (Integer Units), cztery moduły MMX (MM Units), dwie jednostki zmiennoprzecinkowe (Floating Point Units) wspomagane przez dwa bloki wykonujące obliczenia typu SIMD-FP (SIMD FMAC). Z jądrem procesora zintegrowany jest też moduł dekodowania, kontroli i dynamicznego szeregowania 32-bitowych instrukcji zgodnych z x86 (IA-32 Decode and Control). Na Itanium będą działały wszystkie obecnie dostępne na rynku programy i systemy operacyjne.

Lista instrukcji nowego procesora składa się z trzech zestawów rozkazów – poleceń zgodnych z x86, własnego kodu IA-64 oraz listy HP PA-RISC. Wedle założeń technologii VLIW wszystkie rozkazy ładowane są do jednostki centralnej w paczkach (bundle) zbudowanych z trzech prostych instrukcji oraz przedrostka. Jego zadaniem jest poinformowanie procesora, dla których jednostek wykonawczych przeznaczone jest dane słowo. W przedrostku znajdują się też informacje o tzw. barierach wykonań (stop states). Ich działanie polega na koordynacji wykonywania poszczególnych instrukcji. Jeżeli pomiędzy dwoma ciągami rozkazów znajduje się znacznik stop states, to drugi zestaw rozkazów (następna paczka) zostanie wykonany dopiero wtedy, gdy znane będą wyniki działania pierwszej paczki VLIW.

Wróżenie z bitów

W celu ułatwienia realizacji zadań jednostce przewidywania skoków (Branch Prediction) wprowadzono do instrukcji tzw. bity przewidywania (prediction bits). Dzięki nim program może nakazać procesorowi zapamiętanie (lub zapomnienie) skoku albo wręcz podpowiedzieć, że skok zostanie na pewno wykonany (lub nie będzie wykonany). Itanium został wyposażony w 64 jednobitowe rejestry przewidywań (Predicate Registers), a ich wartości są przypisywane przez instrukcje porównań. Rozkaz zawierający wskaźnik do rejestru przewidywań zostanie wykonany wtedy, gdy wartość tego rejestru zgadza się z bitem przewidywań. Za pomocą opisanego mechanizmu eliminuje się niepotrzebne wykonywanie tzw. krótkich skoków (o jedną lub kilka instrukcji), a co za tym idzie – jednostka przewidywania skoków gromadzi w swoich rejestrach jedynie informację o tzw. długich rozgałęzieniach.

Aby możliwe było “jak najbardziej równoległe” przetwarzanie danych, w Itanium zastosowano tzw. spekulatywne wykonywanie ciągów instrukcji. W większości procesorów zgodnych z x86 “na zapas” może być wykonany jeden rozkaz występujący po skoku warunkowym. Merced potrafi przetworzyć całą prawdopodobną gałąź programu na tyle głęboko, na ile zmieści się ona w jednym z potoków wykonawczych procesora. Mechanizm spekulacji jest sprawny w takim stopniu, że w większości wypadków pozwala na zaoszczędzenie kilkunastu cykli procesora.

Info
Grupa dyskusyjna
Pytania, uwagi i komentarze do artykułu: #
Internet:
Producenci procesorów:
http://www.amd.com/
http://www.viatech.com/
http://developer.intel.com/
http://www.transmeta.com/
http://www.rise.com/
Informacje techniczne:
http://www.tomshardware.com/
http://www.cpureview.com/
http://www.x86.org/
Na CHIP-CD w dziale Hardware | Nowe procesory znajduje się dokumentacja techniczna do niektórych procesorów opisywanych w tekście
Więcej:bezcatnews