MMX
Z Wikipedii
MMX (MultiMedia eXtensions lub Matrix Math eXtensions) to zestaw 57 instrukcji SIMD dla procesorów Pentium i zgodnych. Rozkazy MMX mogą realizować działania logiczne i arytmetyczne na liczbach całkowitych. Pierwotnie wprowadzone w 1997 przez Intela dla procesorów Pentium MMX, aktualnie dostępne również na procesory innych producentów - wraz z rozwojem procesorów i dodawaniem nowych rozszerzeń (np. SSE) zbiór rozkazów MMX powiększał się. Instrukcje te są wykorzystywane przez procesory od Intel Pentium MMX i AMD K6 wzwyż.
Programy wykorzystujące rozkazy MMX były o wiele szybsze od analogicznych programów wykorzystujących zwykłe rozkazy procesora. Jednak należy mieć na uwadze, iż MMX jest przeznaczony do szczególnych zastosowań, gdzie przetwarzane są duże ilości danych przez jeden określony algorytm - a więc na ogół będzie to obróbka dźwięku i obrazu. Obecnie w zwykłych programach komputerowych zastosowanie MMX jest praktycznie żadne.
Przykłady zastosowań[1]:
- wyświetlanie grafiki trójwymiarowej: przekształcenia geometryczne, cieniowanie, teksturowanie;
- dekodowanie obrazów JPEG i PNG;
- dekodowanie i kodowanie filmów MPEG (m.in. wyznaczanie transformat DCT i IDCT);
- filtrowanie sygnałów: obrazów statycznych, filmów, dźwięku;
- wyświetlanie grafiki dwuwymiarowej (blue box, maskowanie, przezroczystość);
- wyznaczanie transformat: Haara, FFT.
Spis treści |
[edytuj] Rejestry
Rejestry MMX mają rozmiar 64 bitów, jest ich 8. Miejsce jakie zajmują w architekturze procesora jest nietypowe - nie są bowiem niezależnymi komórkami pamięci, lecz są zamapowane na 64 młodsze bity rejestrów koprocesora arytmetycznego, normalnie przeznaczone na mantysę liczby zmiennoprzecinkowej. Każde odwołanie do rejestru MMX, zarówno odczyt jak i zapis wartości, powoduje unieważnienie zawartości wszystkich rejestrów koprocesora — ponieważ zdecydowano się na takie rozwiązanie, "wymieszanie" obliczeń MMX ze zmiennoprzecinkowymi jest niemożliwe. Z drugiej strony tę niedogodność rekompensuje fakt, że na procesorach Pentium MMX mogły działać bez przeszkód już istniejące programy (w szczególności systemy operacyjne).
[edytuj] Typy danych
MMX wprowadził nowe typy danych, w języku angielskim nazwane packed, czyli dosłownie spakowane, upakowane; w języku polskim lepszym terminem oddającym ich charakter jest wektor i macierz lub tablica. Owo "spakowanie" polega traktowaniu danych 64-bitowych jako składających z pewnej liczby odrębnych komórek o tej samej wielkości:
- 8 × 8 bitów (packed byte),
- 4 × 16 bitów (packed word),
- 2 × 32 bity (packed dword),
- 1 × 64 bity (quad word).
Gdy wykonywane są działania na typach wektorowych ("spakowanych"), ta sama operacja wykonywana jest dla wszystkich komórek jednocześnie. Np. jeśli dodawane są dwa wektory 8 x 8 bitów, to pojedynczy rozkaz wykonuje osiem operacji dodawania danych 8-bitowych i zapisywane jest osiem wyników 8-bitowych.
W przypadku niektórych rozkazów istotne jest rozróżnienie, czy operuje się na liczbach całkowitych bez znaku (ang. unsigned) czy ze znakiem (ang. signed).
[edytuj] Operacje logiczne i arytmetyczne
[edytuj] Arytmetyka
MMX rozróżnia dwa rodzaje arytmetyki, w których różnie reaguje się na przekroczenie zakresu liczb:
- Arytmetyka nasyceniowa - jeśli wynik przekracza zakres jaki może pomieścić dany typ danych, to zapisywana jest wartość skrajna. Np. bajt bez znaku może przechowywać liczby z zakresu od 0 do 255 i jeśli do bajtu o wartości 230 zostanie dodane 100, to wynikiem będzie 255, ponieważ 330 przekracza dopuszczalny zakres.
- Arytmetyka modulo (ang. wraparound), w której przekroczenie zakresu nie jest w żaden sposób sygnalizowane - zapisywane są tylko najmłodsze bity, które mieszczą się w słowie wynikowym. Dla danych z wcześniejszego przykładu wynikiem będzie 74, ponieważ z liczby 33010 = 1010010102 zostanie zapisane tylko 8 najmłodszych bitów, tj. 010010102 = 7410.
[edytuj] Porównania
Ponieważ w MMX jednocześnie porównywane jest wiele elementów, nie są ustawiane żadne flagi ALU. Wynikiem porównania wektorów jest nowy wektor, w którym wartości poszczególnych elementów odpowiadają rezultatowi porównania: jeśli jest prawdziwy, wszystkie bity są ustawiane, gdy fałszywy — zerowane.
Przykład porównania ze względu na równość dwóch wektorów bajtów rozkazem PCMPEQB mm1, mm2:
+--------+--------+--------+--------+--------+--------+--------+--------+
mm1 = |01001000|01001100|10000100|00101110|11000100|01001110|11100000|00000001|
+--------+--------+--------+--------+--------+--------+--------+--------+
+--------+--------+--------+--------+--------+--------+--------+--------+
mm2 = |00001000|01001100|10000100|10101111|11000100|01000000|11110111|00000001|
+--------+--------+--------+--------+--------+--------+--------+--------+
= = = = = = = =
+--------+--------+--------+--------+--------+--------+--------+--------+
mm2 = |00000000|11111111|11111111|00000000|11111111|00000000|00000000|11111111|
+--------+--------+--------+--------+--------+--------+--------+--------+
[edytuj] Rozkazy MMX
- arytmetyczne:
- dodawanie (PADDB, PADDW, PADDD)
- odejmowanie (PSUBB, PSUBW, PSUBD)
- dodawanie z nasyceniem (PADDSB, PADDSW, PADDUSB, PADDUSW)
- odejmowanie z nasyceniem (PSUBSB, PSUBSW, PSUBUSB, PSUBUSW)
- mnożenie liczb 16-bitowych ze znakiem; z 32-bitowego wyniku pośredniego zapisywane jest młodsze albo starsze 16 bitów (PMULHW, PMULLW)
- mnożenie i dodawanie, tj. operacja
(PMADDWD)
- porównania:
- czy równe (PCMPEQB, PCMPEQW, PCMPEQD)
- czy większe lub równe (PCMPEQB, PCMPEQW, PCMPEQD)
- konwersje między różnymi formatami wektorów (PACKUSWB, PACKSSWB, PACKSSDW, PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ, PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ);
- operacje logiczne:
- suma (POR)
- iloczyn (PAND)
- iloczyn z zanegowanym jednym z argumentów (PANDN)
- różnica symetryczna (PXOR)
- przesunięcia bitowe:
- w lewo (PSLLW, PSLLD, PSLLQ)
- w prawo (PSRLW, PSRLD, PSRLQ)
- arytmetyczne w prawo (PSRAW, PSRAD)
- przenoszenie wartości pomiędzy rejestrami MMX, pamięcią i rejestrami x86 (MOVQ - przesłanie 64 bitów, MOVD - przesłanie 32 bitów);
- przygotowanie koprocesora do działań zmiennoprzecinkowych (EMMS).
[edytuj] Asembler
Rejestry MMX w asemblerze noszą nazwy mm0, mm1,... mm7.
Mnemoniki prawie wszystkich rozkazów MMX rozpoczynają się od litery p (od słowa packed); kolejne części [niektóre opcjonalne] nazwy mają następujące znaczenie:
- 3-4 literowy skrót działania jakie dany rozkaz wykonuje (np. add, sub, mul);
- litera s lub u określająca, czy działanie wykonywane jest - odpowiednio - na liczbach ze znakiem (signed) lub bez znaku (unsigned);
- litera s jeśli operacja jest wykonywana z nasyceniem;
- rozmiar komórki wektora: b - bajt (8 bitów), w - słowo (16 bitów), d - podwójne słowo (32 bity).
Na przykład rozkaz paddusb wykonuje równoległe (p) dodawanie (add) z nasyceniem (s) bajtów (b) bez znaku (u).
[edytuj] Linki zewnętrzne
- ↑ MMX Technology Manuals and Application Notes – zbiór dokumentów (j. ang.) demonstrujących różnorodne praktyczne zastosowania rozkazów MMX
[edytuj] Zobacz też
| Niska wycena ziemi dla zakonnic |
Wycena, na podstawie której elżbietanki dostały ziemię w warszawskiej Białołęce, była nierzetelna. Rzeczoznawcy stanęli już przed komisją odpowiedzialności zawodowej. |
| Episkopat broni nuncjusza |
„Znamy dostatecznie długo i dobrze Księdza Arcybiskupa Nuncjusza oraz jego wypróbowaną wierność Ojcu Świętemu i Kościołowi, aby mieć moralną pewność co do jego jednoznacznie negatywnej postawy wobec wszelkiej świadomej współpracy z zadeklarowanymi wrogami Kościoła". |
| Podsłuchy Prokomu na rynku |
ABW nie zniszczyła stenogramów podsłuchów pracowników firmy Prokom z 2007 r. Jeden z podsłuchiwanych - wiceprezes Prokomu Wiesław Walendziak - zawiadomił prokuraturę |
| Bądź tu mądry, sześciolatku |
Posłowie PO kolejny raz zmienili ustawę oświatową. W tym roku sześciolatki miały mieć „prawo" do pójścia do szkoły. Teraz znów mają „obowiązek”, ale „na wniosek rodziców”. |
| Kto robi interes na Matce Boskiej kryzysowej |
„Dar Maryi na trudne czasy” - reklamuje medalik Stowarzyszenie Kultury Chrześcijańskiej im. Piotra Skargi. - To oszustwo - mówią księża misjonarze, którzy w Polsce propagują kult Matki Bożej Objawiającej Cudowny Medalik |
| Lewica w końcu wybiera liderów |
Dziś spory ruch na centrolewicy. Na zjazdach w Warszawie nowych szefów wybierają SdPl i Demokraci.pl. Potem zapewne będą współpracować. Na początek w wyborach europejskich |
| POrządzimy sobie speckomisją |
Platforma przeforsowała nowe zasady pracy speckomisji. Jej przewodniczącym będzie mógł zostać poseł koalicji rządzącej. |
| Palikot oskarża posłankę PiS o polityczną prostytucję |
Janusz Palikot stwierdził w TVN24, że posłanka PiS Grażyna Gęsicka, wzywając rząd do odpowiedzialności za niewykorzystanie funduszy unijnych manipuluje opinią publiczną. Dodał, że jest mu przykro, iż "prostytucja w polityce sięga nawet pani minister Gęsickiej". |
| Kto zastąpi Kopacz? PO wybierze nowego szefa na Mazowszu |
- Zarząd mazowieckiej Platformy Obywatelskiej wybierze w środę nowego szefa; z kierowania partią na Mazowszu - zgodnie z wytycznymi władz Platformy - zrezygnowała jeszcze w zeszłym roku kierująca resortem zdrowia Ewa Kopacz. |
| Cimoszewicz nie rezygnuje ze startu do PE |
B. premier, b. szef MSZ a obecnie senator niezależny Włodzimierz Cimoszewicz poinformował, że nieprawdziwe są informacje prasowe, jakoby ostatecznie zrezygnował ze startu w wyborach do Parlamentu Europejskiego. |

