Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
MMX - Wikipedia, wolna encyklopedia

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:

  1. 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.
  2. 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)
    • dodwanie 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 a \cdot b + c \cdot d (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:
  • przesunięcia bitowe:
    • w lewo (PSLLW, PSLLD, PSLLQ)
    • w prawo (PSLLW, PSLLD, PSLLQ)
    • 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

  1. MMX Technology Manuals and Application Notes

[edytuj] Zobacz też

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com