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 wyspecjalizowane 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żliwości szybkiej wymiana danych pomiędzy elementami komputera. Kolejny krok przyprawiający skrzydeł architekturze Intela stanowić ma upowszechnienie nowej wewnę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 dowolnych rozkazów ale o grupowanie danych w większe grupy. Zamiast kolejnego przetwarzania 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ęcznazarówno dla danych jak i rozkazów została zwiększona do 16 kB i pracujez poczwórną asocjacją (P54C 8/8 kB i podwójna asocjacja). Każdy z dwóchpotokó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ównaniuz P54C bufor zapisu: 4 zamiast 2 słów.
• Nową jednostkę BPU (Branche Prediction Unit). Nowy układ przewidywaniadla instrukcji rozgałęzień zapożyczony został w dużej części od starszego brata,Pentium-Pro. Jego zastosowanie zwiększa prawdopodobieństwo zapełnianiapotoków tymi instrukcjami, które będą faktycznie wykonywane. Błędneprzewidywanie skutków rozgałęzienia powoduje, że jeden z potoków musi (podojściu do newralgicznego punktu) wstrzymać przetwarzanie. W okresieniezbędnym do ponownego załadowania, drugi z potoków znajduje się w stanieoczekiwania i traci czas.
• Dłuższe potoki przetwarzania instrukcji (Pipę Lines). Długość rozkazów maszynowych jest zmienna i waha się w przedziale od l do 15 bajtów. Fakt ten stanowijedną z bolączek procesorów P54C, bowiem żmudne określanie adresu następnego 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 jednym cyklu zegarowym. Dla pokonania tego wąskiego gardła obie linie przetwarzania 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 rozkazami 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 sprzyjających warunkach wykonywać równolegle 2 polecenia. W szczególności parowane mogą być nowe rozkazy z grupy MMX, jeżeli odnoszą się do różnychrejestrów MM.
• Stos powrotu (Return Stack). Dla procesorów Cyrix nic nowego, dla Intela istotna 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 kodubogatego w krótkie procedury, dla których odległość między instrukcjami CALLi RET jest stosunkowo niewielka. Cały mechanizm działa do czterech poziomóww 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 technologii 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 ograniczeniawydzielania 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 bezzmiany kolejnego numeru wersji u producentów płyt głównych. Dla tych, którzyze swoją płytą rozstać się nie chcą przewidziano moduł typu overdrive z procesorem 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życiu 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 zdefiniowane, 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 klasycznego 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ętrznych 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śmiertelnego 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 procesora 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ętrzne. 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 operacyjne. 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
roman61