Procesor z rozszerzeniem MMX.doc

(165 KB) Pobierz

Procesor z rozszerzeniem MMX              185

Rozdział 2.

Procesor

z rozszerzeniem MMX

MMX (MultiMedia eXtentiori) jest największą ze zmian w architekturze procesorów Intela od czasu wprowadzenia na rynek przed ośmiu laty układów serii 386.

Przedsięwzięcie ma na celu umocnienie pozycji firmy Intel na polu błyskawicznie rozwijających się zastosowań multimedialnych. Obszary te zdominowane są dotychczas przez szereg mniejszych firm wytwarzających różnego rodzaju kontrolery wyspecjalizo­wane w szybkim przetwarzaniu grafiki i dźwięku. Jak na razie nowa technologia nie zabiera chleba akceleratorom graficznym lecz skupia się na lepszym podziale mocy obliczeniowej i wykorzystaniu zasobów.

Kluczową rolę w tak postawionym zagadnieniu odgrywa na pewno zapewnienie możli­wości szybkiej wymiana danych pomiędzy elementami komputera. Kolejny krok przy­prawiający skrzydeł architekturze Intela stanowić ma upowszechnienie nowej wew­nętrznej magistrali o nazwie AGP (Accelerated Graphics Port).

Zmiany w architekturze

Idea leżąca u podstaw MMX nie jest nowa i stanowi krok w kierunku przetwarzania równoległego. W tym wypadku nie chodzi jednak o równoległe wykonywanie dowol­nych rozkazów ale o grupowanie danych w większe grupy. Zamiast kolejnego przetwa­rzania pojedynczych jednostek informacji (bajtów, słów itd) szybciej jest brać po kilka porcji na raz i załatwiać sprawę jednym rozkazem maszynowym takim jak add, SOB, OR, AND itd. Technika taka nosi miano SIMD (Single Instruction Multiple Data).


186              Anatomia PC

Intel jako pierwszy upowszechnia SIMD dla potrzeb zwykłego użytkownika. Inne firmy też stosują ten sposób przetwarzania danych ale w dużych komputerach. W oparciu o instrukcje tego typu pracują procesory RISC używane w systemie PA-8000 firmy HP a specjalnie dobrany do potrzeb grafiki wektorowej zestaw instrukcji VIS (Visual Instruction Set) przetwarzają procesory firmy Sun.

Wspomaganie multimediów stanowi jedno z najwdzięczniejszych pól do zastosowania takiej techniki. Dane reprezentowane są tutaj jako długie ciągi słów ośmio lub szes-nastobitowych. Operacje na takich danych, to często powtórka tych samych kroków w odniesieniu do, jeśli nie wszystkich słów na raz (filtr audio), to co najmniej kolejnych kilkunastu z nich (filtracja bilinearna tekstur).

Warto wspomnieć, iż rozkazy tego typu można zrealizować również bez gruntownych zmian w architekturze CPU. Nic nie stoi na przeszkodzie by jeden z 32-bitowych rejestrów potraktować jako złożenie czterech bajtów i wykonać operację jednoczesnej inkrementacji:

ADD OlOlOlOlh

Problem pojawi się w momencie gdy jeden z bajtów miał przed operacją wartość Oxff, bowiem bit przepełnienia przeleje się na sąsiadujący wyższy bajt. Najistotniejszą modyfikacją architektury nowych procesorów stanowi właśnie odmienne niż dotychczas traktowanie stanu przepełnienia podczas operacji SIMD.

Przy okazji kuracji odmładzającej nowy procesor (oficjalna nazwa P55C w odróżnieniu do klasycznego Pentium P54C) wyposażony został w dodatkowe układy sprzętowe nie mające bezpośredniego związku z technologią MMX:

                    Pamięć podręczną (ftrst level cache). W procesorach MMX pamięć podręczna
zarówno dla danych jak i rozkazów została zwiększona do 16 kB i pracuje
z poczwórną asocjacją (P54C 8/8 kB i podwójna asocjacja). Każdy z dwóch
potoków przetwarzających rozkazy może więc wystąpić jednocześnie z dwoma
żądaniami dostępu do pamięci i obydwa będą buforowane.

                    Bufor zapisu. P55C wyposażony zostaje w dwukrotnie większy w porównaniu
z P54C bufor zapisu: 4 zamiast 2 słów.

                    Nową jednostkę BPU (Branche Prediction Unit). Nowy układ przewidywania
dla instrukcji rozgałęzień zapożyczony został w dużej części od starszego brata,
Pentium-Pro.  Jego  zastosowanie zwiększa prawdopodobieństwo  zapełniania
potoków   tymi   instrukcjami,   które   będą  faktycznie   wykonywane.   Błędne
przewidywanie skutków rozgałęzienia powoduje, że jeden z potoków musi (po
dojściu   do   newralgicznego   punktu)   wstrzymać   przetwarzanie.   W   okresie
niezbędnym do ponownego załadowania, drugi z potoków znajduje się w stanie
oczekiwania i traci czas.

                    Dłuższe potoki przetwarzania instrukcji (Pipę Lines). Długość rozkazów maszy­
nowych jest zmienna i waha się w przedziale od l do 15 bajtów. Fakt ten stanowi
jedną z bolączek procesorów P54C, bowiem żmudne określanie adresu następ­
nego rozkazu (w celu przekazania go dekoderowi instrukcji) zajmuje stosunkowo


Procesor z rozszerzeniem MMX              187 ;

dużo czasu. Sam dekoder byłby w stanie przyjmować do dwóch instrukcji w jed­nym cyklu zegarowym. Dla pokonania tego wąskiego gardła obie linie przetwa­rzania zostały wydłużone o brakujący stopień zlokalizowany pomiędzy punktem pobierania (Prefetch) a dekoderem.

Trzeba dodać, że obydwa potoki pracują nadal synchronicznie. Wypełnione roz­kazami o różnym czasie trwania blokują się wzajemnie. Odnoga, która szybciej zostanie opróżniona musi czekać na zakończenie przetwarzania w drugiej.

                     Możliwość równoległego wykonywania rozkazów. Pentium MMX może w sprzy­
jających warunkach wykonywać równolegle 2 polecenia. W szczególności paro­
wane mogą być nowe rozkazy z grupy MMX, jeżeli odnoszą się do różnych
rejestrów MM.

                     Stos powrotu (Return Stack). Dla procesorów Cyrix nic nowego, dla Intela istot­
na zmiana. Procesory MMX wyposażone zostały w wewnętrzny stos powrotów.
Przy przejściu do wykonywania podprogramu zapamiętywany jest adres powrotu
- adres rozkazu następnego po call. Przyspieszane jest wykonywanie kodu
bogatego w krótkie procedury, dla których odległość między instrukcjami CALL
i RET jest stosunkowo niewielka. Cały mechanizm działa do czterech poziomów
w głąb (procedura może bowiem wywoływać procedurę a ta następną itd...).
Zysk czasu szacowany jest na 20%.

                     Zasilanie. Procesory MMX wykonywane są wprawdzie w nowoczesnej techno­
logii 0,28 urn (dla porównania 0,35 um dla P54C) zawierają jednak blisko 40%
więcej tranzystorów (P54C: 3.3 miliona, P55C: 4,5 miliona). Dla ograniczenia
wydzielania ciepła obniżono napięcie zasilające samą jednostkę centralną (Córę)
do 2,8 V. Układy wejścia/wyjścia zasilane są nadal standardowym napięciem;
w zależności od grupy selekcyjnej 3.3 V - 3,5 V. Nie obeszło się więc bez
zmiany kolejnego numeru wersji u producentów płyt głównych. Dla tych, którzy
ze swoją płytą rozstać się nie chcą przewidziano moduł typu overdrive z proce­
sorem MMX i regulatorem napięcia zadowalający się standardową podstawką
typu 5 lub 7.

Te energooszczędne zabiegi prowadzą do pozytywnego bilansu: model MMX 200MHz rozprasza na ciepło jedynie 0,2 W więcej od taktowanego takim samym zegarem normalnego P54C.

Wszystkie te unowocześnienia razem wzięte gwarantują (bez dotykania samego tematu MMX) przyrost mocy obliczeniowej o 15 - 20%. Tyle tylko korzystają więc z P55C aplikacje nie wywołujące rozkazów MMX.

Rozpoznanie procesora P55C

Typ procesora Pentium można rozpoznać badając stan rejestru EDX po wywołaniu instrukcji cpuid'.

1   Nie każdy procesor zna rozkaz CPUID (386, wczesne 486), trzeba najpierw sprawdzić, czy należy on do zestawu instrukcji.


188


Anatomia PC


 


Potrzebna informacja zawarta jest w bicie 23. Jeżeli jest on ustawiony, w systemie mamy procesor P55C:


mov EAX, l

CPUID

test EDX, OOSOOOOOh

jnz Kod_MMX

Kod  Standard:


gdy   (bit  23=1)   jest     MMX


Przy okazji, nieco na uboczu, pojawia się problem zgodności z nowym kodem. W uży­ciu są bowiem jednocześnie dwa rodzaje programów i dwa rodzaje procesorów. Stare programy szyte na miarę P54C nic nie wiedzą o MMX i nie są w stanie wykorzystać jego zalet. Problem załatwia wypuszczenie nowej wersji aplikacji. Z drugiej jednak strony, aplikacje pod P55C mogą napotkać na swej drodze procesory bez rozszerzenia. O ile zagadnienie poprawnej identyfikacji Intela MMX jest jednoznacznie zdefiniowa­ne, to sedno sprawy stanowi konieczność dublowania procedur wywołujących rozkazy MMX. Każda z nich musi mieć w rezerwie swój odpowiednik dostosowany do klasycz­nego procesora bez rozszerzeń. Zależnie od wyników testu typu zainstalowanego w systemie CPU, sterowanie przekazywane jest do właściwej gałęzi. Programowanie ułatwia posługiwanie się jedną z gotowych bibliotek dostarczanych przez Intel. Newralgiczne partie kodu są tu automatycznie dublowane przez emulator MMX.

Nowe rejestry

Wydajne przetwarzanie danych w myśl założeń SIMD wymaga pogrupowania ich w porcje o możliwie dużej długości. Procesory Intel-MMX mogą pracować na blokach 64-bitowych. Do dyspozycji nowych rozkazów stoi osiem nowych rejestrów wewnętrz­nych oznaczanych symbolami mmO - mm7, każdy o szerokości 64 bitów.


Rysunek 2.1.

Nowe rejejestry procesora MMX


MM7 MM6


MM5

MM4 MM3

MM2

MM1

MMO

Istotną barierą stojącą przed twórcami nowego procesora było pokonanie nieśmiertel­nego problemu „kompatybilności w dół" - zgodności z poprzednimi wersjami. Samo wprowadzenie nowych rozkazów i rejestrów nie stanowi żadnego zagrożenia: stare programy i systemy nic nie wiedząc ich obecności, żaden kompilator nie generuje kodu z ich udziałem. W spisie symboli operacji (Opcodes) wywodzącym się jeszcze z czasów procesorów bazowych x86 jest dużo wolnego miejsca dla nowych rozkazów bez obawy pomieszania ich z dotychczas znanymi.


Procesor z rozszerzeniem MMX


189


Dla procesora MMX pisze się nowe programy posługujące się nowymi instrukcjami, na nowych typach danych i nowych rejestrach. Jak długo nasz nowy P55C przetwarza wyłącznie taki program wszystko jest w porządku. Katastrofa nastąpi gdy do akcji wkroczy jeden z nowoczesnych systemów operacyjnych, który przydziela czas proce­sora różnym zadaniom (systemy wielozadaniowe). Każde takie przełączenie wymaga zapamiętania aktualnego stanu CPU, tak by później móc podjąć przerwany wątek w tym samym miejscu. Zapamiętać trzeba wiele rzeczy, a w szczególności rejestry wewnętrz­ne. Dla procesorów rodziny x86 są to między innymi rejestry AX, BX itd. Żaden ze współczesnych systemów operacyjnych nie ma pojęcia, że trzeba też zapamiętać i odtworzyć rejestry MMX, bo nic nie wie o ich istnieniu.

Na szczęście występuje dodatkowa grupa rejestrów, o które troszczą się systemy opera­cyjne. Mowa tu o ośmiu 80-bitowych rejestrach koprocesora arytmetycznego (FPU). Na reprezentację liczb zmiennoprzecinkowych w pamięci komputera składa się jeden bit znaku, 15-bitowa eksponenla i 64-bitowa mantysa. Każdorazowe przejście CPU do nowego kontekstu poprzedzane jest między innymi instrukcją FSAVE, która odkłada rejestry FPU w specjalnie do tego celu zarezerwowanym bloku2. Wywołanie instrukcji FRSTOR po powrocie gwarantuje przywrócenie stanu FPU.

Rejestry MMX podszywają się pod fragmenty rejestrów FPU (część przeznaczona na mantysę) i w ten sposób gwarantują sobie obsługę ze strony systemów operacyjnych (rysunek 2.2).


Rysunek 2.2.

Sposób dostępu do rejestrów MMX

przez system operacyjny


FPTag


ST7

 

 

ST6

 

ST5 ST4

 

ST3

 

ST2

 

...
Zgłoś jeśli naruszono regulamin