PowerPC - pretendent do tronu

Zasadniczy problem, który w niedalekiej przyszłości będą musieli rozstrzygnąć nabywcy nowych komputerów polega na podjęciu decyzji, po której ustawić się stronie: tradycyjnego komputera z procesorem Intela, czy szybkiego komputera z procesorem PowerPC. Zbliżamy się bowiem do stanu ostrej konfrontacji między tymi produktami.

Zasadniczy problem, który w niedalekiej przyszłości będą musieli rozstrzygnąć nabywcy nowych komputerów polega na podjęciu decyzji, po której ustawić się stronie: tradycyjnego komputera z procesorem Intela, czy szybkiego komputera z procesorem PowerPC. Zbliżamy się bowiem do stanu ostrej konfrontacji między tymi produktami.

Przez ostatnią dekadę w dziedzinie komputerów osobistych nieprzerwanie królowały procesory Intela. Odpowiedzi na pytanie, czy w następnej dekadzie zwycięży PowerPC nie jest w stanie dać żaden jasnowidz. Wydaje się jednak, że twórcy PowerPC zrobili wszystko, aby ich procesor przechylił szalę zwycięstwa na swoją korzyść. Zadecydują o tym firmy tworzące oprogramowanie zgodne z tym procesorem i nabywcy zachęceni jego dużą szybkością.

Nad stanem niepewności i chaosu we wczesnej erze rozwoju informatyki opartej na wykorzystaniu mikroprocesorów, IBM zapanował jednym naprawdę sprytnym i dalekosiężnym pociągnięciem. Zagwarantował swobodny dostęp do technologii i oprogramowania swego nowego komputera PC. Zdarzenie to miało miejsce 12 sierpnia 1981 r.

Od tego czasu burzliwy rozwój technologii półprzewodnikowej doprowadził do znacznego zmniejszenia rozmiarów, wielokrotnego zwiększenia wydajności i ogromnego spadku cen wszystkich procesorów z rodziny umownie zwanej intelowską, choć nie wszyscy jej członkowie pochodzą z fabryk Intela.

Wydaje się, że obecnie świat informatyczny znajduje się w równie przełomowym momencie. Dotychczasowy rozwój produktów, z konieczności zgodnych z poprzednimi modelami mikroprocesorów, aż do 8088 użytego w historycznym produkcie IBM PC z roku 1981, zaczyna ciążyć nie tylko producentom sprzętu i twórcom oprogramowania, ale także przeszkadza użytkownikom komputerów.

Obecnie różnorodność mikroprocesorów usiłujących opanować rynek komputerów biurkowych nie jest tak duża jak dawniej, jednak stoją za nimi znacznie potężniejsze firmy i znacznie większe pieniądze.

Dwaj przeciwnicy

Walka toczy się głównie między procesorem PowerPC, opracowanym wspólnie przez IBM, Motorolę i Apple a procesorami i486 i Pentium produkcji Intela. Niektórzy analitycy rynku nawet wykluczają z tej rywalizacji i486, jako produkt bez przyszłości. Jest to walka o wielkie pieniądze. Ten kto obecnie zdominuje rynek komputerów osobistych, będzie w stanie kontrolować go przynajmniej do początku następnego stulecia i zarobi ogromne pieniądze. Zapewne obaj przeciwnicy przeżyją tę walkę, ale tylko jeden będzie prawdziwym zwycięzcą. O wyniku zadecydują klienci kupujący określone produkty.

Atmosferę podgrzewają niezbyt udane próby wkroczenia na tę arenę różnych producentów komputerów z procesorami RISC, widzących w komputerach osobistych nadzieję na takie poszerzenie rynku zbytu, aby cena produkowanych masowo procesorów spadła do poziomu procesorów intelowskich, co pozwoliłoby im konkurować z Intelem.

Filozofia RISC

Procesor RISC to realizacja starej jak świat filozofii: uprościć najbardziej jak się da, ale ani o krok więcej. Wszystkie instrukcje tego procesora mają stałą długość i prostą strukturę. Korzysta się w nich z minimalnej liczby trybów adresowania: tylko pobieranie z pamięci do rejestru lub zapamiętywanie danych z rejestru w pamięci. Prostota instrukcji pozwala na sprzętową realizację dekodera instrukcji; nie korzysta się z, częstych w procesorach o złożonej liście rozkazowej, dekoderów sterowanych przez mikroinstrukcje, zapisane w pamięci stałej.

Wszystkie rozkazy procesora RISC wykonywane są w dobrze określonych krokach o stałej długości. Konstrukcja procesora oparta jest na wykorzystaniu przetwarzania potokowego (pipeline). Jeżeli głębokość potoku przetwarzania wynosi np. cztery stopnie, to pierwszy stopień dekoduje instrukcję, w drugim następuje pobranie argumentów rozkazu, w trzecim jest wykonywana na nich operacja, w czwartym zapamiętanie w rejestrze. W procesorach RISC dąży się do tego, aby czas wykonania każdego rozkazu był jednakowy. Umożliwia to pełne wykorzystanie konstrukcji potokowej, gdyż po zapełnieniu "rury" przetwarzającej, kolejne rozkazy pobierane są w kolejnych cyklach zegara; a w takim samym tempie otrzymuje się wyniki.

Największą efektywność przetwarzania potokowego osiąga się tylko wtedy, gdy potok jest stale zapełniony. Ważne jest więc przewidywanie kierunku skoków w instrukcjach warunkowych. Dlatego większość procesorów RISC wyposażono w jednostkę przewidywania kierunku skoków i zapełniania potoku zgodnie z wynikami przepowiadania.

Duża szybkość przetwarzania wymaga znacznej liczby rejestrów, z których pobiera się dane wejściowe, gdzie zapisuje się częściowe wyniki obliczeń i dane końcowe. Procesory PowerPC są wyposażone w 32 rejestry 32-bitowe ogólnego przeznaczenia oraz 32 rejestry 64-bitowe dla danych zmiennoprzecinkowych. Dla porównania, procesor o złożonej liście rozkazowej Pentium ma 8 rejestrów ogólnego przeznaczenia, a dane zmiennoprzecinkowe przechowuje na stosie w pamięci.

Właściwości PowerPC

Architektura procesora PowerPC jest oparta na architekturze dostępnego już od kilku lat procesora POWER (Performance Optimized With Enhanced RISC), używanego w stacjach roboczych i serwerach IBM RS/6000. Lista rozkazów nowego procesora nie jest dokładnie zgodna z listą procesora POWER, ale w przypadku wystąpienia niezgodności system operacyjny przechwytuje takie instrukcje i realizuje je w postaci kodu, emulującego dawną instrukcję.

Obecnie produkowany jest procesor 601 z rodziny PowerPC, przeznaczony do stacji roboczych i serwerów sieciowych oraz 603, przeznaczony do komputerów przenośnych o niewielkim poborze mocy. W niedalekiej przyszłości pojawi się procesor 604 - szybsza wersja procesora 601, przystosowana do szybkiego przetwarzania grafiki w wysokowydajnych stacjach roboczych. Model 620 będzie w pełni 64-bitową konstrukcją, przeznaczoną do szybkich serwerów sieciowych i maszyn o wydajności współczesnego mainframe'a.

Konstrukcja PowerPC

Procesor PowerPC 601, pierwszy produkt zgodny z założeniami architektury PowerPC, zawiera 2,8 mln tranzystorów w kostce o rozmiarach 10,9x10,9 mm (dla porównania Intel Pentium ma 3,1 mln tranzystorów w kostce 16,6x17,6 mm) i pobiera 6,5 W przy 50 MHz lub 9 W przy 66 MHz (Pentium pobiera 16 W przy 66 MHz) i jest wykonany w technologii CMOS 0,65 mikrometra (Pentium 0,8 mikrometra).

Jest to konstrukcja w pełni 32-bitowa, z 64-bitową szyną danych i 32-bitową szyną adresową. Dodatkowe 52 sygnały kontrolne umożliwiają realizację skomplikowanych operacji arbitrażu na szynach, współpracy z wieloma procesorami w systemie wieloprocesorowym i rozstrzyganie konfliktów w dostępie do wspólnych zasobów.

Trzy jednostki wykonawcze

Podstawowe elementy składowe architektury PowerPC to trzy jednostki wykonawcze. Jednostka stałoprzecinkowa IU operuje na liczbach całkowitych i pobiera oraz zapamiętuje dane w pamięci. Jednostka zmiennoprzecinkowa FPU wykonuje operacje na liczbach zmiennoprzecinkowych o pojedynczej (32 bity) i podwójnej precyzji (64 bity). Jednostka przewidywania skoków BPU zajmuje się jedynie przetwarzaniem instrukcji warunkowych.

Jednostka stałoprzecinkowa IU. Wykonuje wszystkie operacje na liczbach całkowitych i polach bitowych oraz operacje zapisu do pamięci i odczytu z pamięci danych, łącznie z danymi zmiennoprzecinkowymi. Składa się z trzech stopni: dekodowania instrukcji, wykonywania i zapisu wyników. Jeżeli w stopniu wykonawczym realizowana jest długa instrukcja (np. mnożenie liczb całkowitych), to zdekodowana instrukcja czeka na swą kolejkę wykonania w rejestrze pośrednim.

Jednostka stałoprzecinkowa zawiera arytmometr, układ mnożenia, układ dzielenia i rejestry, umożliwiające jednoczesny zapis i odczyt danych w jednym cyklu zegarowym. Pozwala to na jednoczesne korzystanie z wyników poprzedniego stopnia przez stopień następny (jeden stopień zapisuje dane do rejestru, drugi już je pobiera).

Instrukcje odczytu/zapisu z/do pamięci uważa się za zakończone jeśli został obliczony efektywny adres pamięci. Resztą zajmuje się jednostka zarządzania pamięcią MMU. Jeżeli odczytywane dane znajdują się w buforze, to dostarczane są bezpośrednio po jednym cyklu zegara, przeznaczonym na operacje bufora pamięciowego. Jeśli trzeba je pobrać z pamięci, adres i żądanie pobrania przechodzą do dwustopniowej kolejki odczytu, znajdującej się między buforem a pamięcią. W przypadku zapisu, dane przechodzą do trzystopniowej kolejki zapisu.

Jednostka przewidywania skoków BPU (Branch Prediction Unit) korzysta ze statycznego mechanizmu przewidywania kierunku skoku. W Pentium przewidywanie jest dynamiczne i polega na badaniu historii kierunku skoków w programie. W PowerPC przyjmuje się, że będą wykonane wszystkie skoki wstecz, zaś wszystkie skoki do przodu - nie. Wymagało to jednak wprowadzenia dwóch ograniczeń: aby instrukcja następująca po skoku nie zapisywała żadnych wyników do rejestrów oraz, aby nie była kolejną instrukcją warunkową.

Jeżeli skok ma być wykonany, potoki jednostek wykonawczych powinny być opróżnione i wykonywanie rozkazów powinno zacząć się od nowego adresu dostarczonego przez jednostkę BPU. Wymaga to odrzucenia wyników instrukcji, które następują po rozkazie skoku. Jednakże, na wypadek gdyby przewidywanie okazało się błędne, nie odrzuca się tych wyników od razu, ale czeka do faktycznego rozstrzygnięcia kierunku przebiegu, który może zależeć od wyników ostatniej instrukcji przed pętlą. Dopiero w tym momencie następuje faktyczne podjęcie decyzji o kierunku pętli.

Jeżeli skok nie musi być wykonany, to nie ma żadnego opóźnienia w wykonywaniu pętli. Oczywiście, jeśli BPU przewidział błędnie kierunek przebiegu pętli, także następuje odrzucenie wyników instrukcji, które następują po rozkazie skoku i dostarczanie kolejnych instrukcji z bufora pamięciowego.

Statyczne przewidywanie kierunku przebiegu pętli jest prostsze do realizacji niż dynamiczne, przyczyniając się do obniżenia ceny procesora.

Jednostka zmiennoprzecinkowa FPU zawiera matrycę mnożenia zmiennoprzecinkowego o pojedynczej precyzji, matrycę dodawania o podwójnej precyzji, układ dzielenia i rejestry zmiennoprzecinkowe. Jest to jednostka pięciostopniowa: buforowanie instrukcji, dekodowanie instrukcji, dwa stopnie wykonawcze i zapis wyników do rejestrów.

Jednostka FPU wykonuje w jednym cyklu zegarowym podstawowe obliczenia: mnożenie i dodawanie liczb zmiennoprzecinkowych, natomiast nie oblicza bezpośrednio funkcji trygonometrycznych ani hiperbolicznych. Oblicza się je w pętli przez rozwinięcie w szereg Taylora, na większej liczbie bitów niż określona przez normę IEEE 754, po czym zaokrągla do wartości ostatecznej.

Współpraca ze światem zewnętrznym - jednostka BIU

Jednostka współpracy z szyną wejścia/wyjścia BIU (Bus Interface Unit) jest wzorowana na takiej samej jednostce z procesora Motorola 88110. Możliwości jej są ogromne: łatwo daje się przystosowywać do współpracy z różnymi standardami szyny zewnętrznej. Apple przewiduje korzystanie w swych konstrukcjach z procesorem PowerPC z nowej wersji szyny lokalnej PCI (zdefiniowanej przez Intela), podczas gdy IBM opiera konstrukcje stacji roboczych na szynie Microchannel Architecture (MCA). Możliwe to jest m.in. dzięki programowalnej, niezależnej od częstotliwości zegara procesora, szybkości przesyłania w szynie zewnętrznej.

Pojedyncze przesyłanie w jednym cyklu zegarowym może mieć rozmiar od 1 do 8 bajtów. Przesyłanie grupowe realizowane w czasie 4 cykli zegara służy m.in. do zapełniania oraz zapisywania bufora do pamięci i pozwala na przesłanie 32 bajtów (jednego sektora bufora).

Wbudowane możliwości tej jednostki dopuszczają potokowe pobieranie/zapisywanie danych z pamięci (kolejne operacje na pamięci zaczynają się przed zakończeniem poprzedniej) oraz możliwość rozdzielenia dostępu do szyny danych od dostępu do szyny adresowej w przypadku konstrukcji z wieloma systemami master na szynie.

W celu ułatwienia współpracy w systemach wieloprocesorowych zrealizowano sprzętową kontrolę algorytmu sprawdzania poprawności danych w buforze procesora oraz oddzielny port sprawdzania poprawności zawartości

Bufor danych (cache) procesora

Szybkie zapełnianie jednostek wykonawczych procesora wymaga ciągłego dostarczania nowych instrukcji i danych. Realizuje to pomocnicza jednostka zarządzania zunifikowanego bufora danych i instrukcji (cache), o pojemności 32 kB.

Jednostka sterowania buforem realizuje sprzętowo skomplikowany algorytm zapełniania bufora nowymi instrukcjami w taki sposób, aby rozkazy i dane jak najczęściej były pobierane z bufora, zamiast z pamięci. Jeżeli dane lub kolejna instrukcja znajdują się w buforze, są z niego pobierane; jeśli ich nie ma - sterowanie musi zażądać ich z pamięci. Zapisywane są do bufora w miejsce danych używanych najdawniej (algorytm LRU - least recently used).

Komunikacja między buforem danych a procesorem odbywa się przez szybką szynę o szerokości 64 bity. Wszystkie operacje zapisu do bufora polegają na wykonaniu ciągu odczytów z pamięci, w celu zapełnienia pełnego sektora danych w buforze pamięciowym (32 bajty).

Jednostka zarządzania pamięcią MMU

Jednostka zarządzania pamięcią MMU służy do kontroli dostępu do pamięci przez programy użytkowe i programy nadzorcze. Maksymalny rozmiar adresowanej pamięci wynosi 4 GB (32 bity adresowe). Pamięć jest przydzielana stronicami o rozmiarze 4 kB, blokami o rozmiarze od 128 kB do 8 MB lub segmentami do 256 MB. Wewnętrznie pamięć jest adresowana wirtualne za pomocą 52 bitów adresu (4 mln GB) i tablicy przydzielania stronic, w celu określenia rzeczywistego adresu pamięci, ograniczonego do 32 bitów.

Jednostka MMU pozwala na wykonywanie programów o rozmiarze większym niż fizyczna pamięć komputera, przez wykorzystanie dysku jako obszaru dostępnej pamięci. Jednostka MMU realizuje także ochronę obszarów pamięci programów przed zniszczeniem przez inne programy i ochronę obszarów systemu operacyjnego.

Systemy operacyjne. Udogodnienia programowe

Większość producentów komputerów z procesorami RISC widzi swoją szansę zajęcia sporej części rynku komputerów osobistych przez wykorzystanie szybkości procesora RISC w takich aplikacjach jak: grafika, animacje, multimedia czy programy CAD/CAM, w których da się najłatwiej osiągnąć znaczne przyspieszenie szybkości. W tym jednak celu muszą zaadaptować jakiś popularny system operacyjny. Twórcy PowerPC widzą jego przyszłość w różnorodności.

Architektura PowerPC jest przewidziana do realizacji szerokiej gamy systemów operacyjnych, poczynając od Systemu 7 Apple, OS/2, AIX/6000, Solaris, PowerOpen, aż po Pink firmy Taligent (wspólne przedsięwzięcie Apple i IBM). Nakłada to wyjątkowe ograniczenia na strukturę listy rozkazów, sposób zapisu danych aż po tak pozorny drobiazg, jak kolejność zapisu bajtów słowa. W technice mikroprocesorowej przyjęły się dwa sposoby zapisu słowa do pamięci. W pierwszym, stosowanym w procesorach intelowskich, zwanym uporządkowaniem little-endian, najmniej znaczący bajt słowa zapisywany jest pod najmniejszym adresem, kolejny bardziej znaczący bajt pod kolejnym większym adresem, itd. W drugim, stosowanym w procesorach Motoroli, zwanym big- endian, najbardziej znaczący bajt słowa zapisywany jest pod najmniejszym adresem, kolejny mniej znaczący pod kolejnym większym adresem itd.

W celu ułatwienia realizacji systemów operacyjnych opartych na tych sposobach zapisu, jednostka wejścia/wyjścia (BIU) procesora jest w stanie zmieniać kierunek ułożenia bajtów, przechodząc ze sposobu big-endian używanego w procesorze PowerPC na inny. Ponadto realizuje ona operacje dopasowywania adresów przy dostępie do mniejszych części słowa 64-bitowego (od jednego do siedmiu bajtów).

Interfejs WABI (Windows Applications Binary Interface) opracowany przez SunSelect umożliwi uruchamianie aplikacji Windows pod systemem Solaris lub inną wersją Unixa, zrealizowaną dla tego procesora. To także może być poważnym argumentem za akceptacją procesora PowerPC.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200