• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • SSE3

    Przeczytaj także...
    Wątek (ang. thread) – część programu wykonywana współbieżnie w obrębie jednego procesu; w jednym procesie może istnieć wiele wątków.Streaming SIMD Extensions 4 (SSE4) to kolejne rozszerzenie zestawu instrukcji SSE opublikowane w kwietniu 2007 przez firmę Intel. SSE4 wprowadza 54 nowe instrukcje, podzielone na dwie podgrupy (wersje): SSE4.1 zawierający 47 rozkazów oraz SSE4.2 zawierający dodatkowe 7.
    Supplemental Streaming SIMD Extension 3 (SSSE3) - zestaw instrukcji SSE czwartej generacji, rozszerzenie SSE3. SSSE3 jest błędnie nazywane jako SSE4, Tejas New Instructions (TNI) lub Merom New Instructions (MNI).

    Streaming SIMD Extensions 3 (SSE3, oznaczany również przez firmę Intel jako Prescott New Instructions lub PNI) – zestaw instrukcji SIMD wykorzystywany w architekturze IA-32. Wcześniejsze zestawy SIMD stosowane na platformie x86, od najstarszej to: MMX, 3DNow! (używany tylko przez AMD), SSE i SSE2.

    Prescott – jądro procesora stworzone przez firmę Intel, wykorzystywane do budowy procesorów tejże firmy. Stosowane jest w procesorach: Pentium 4, Xeon, Pentium D oraz Pentium D Extreme Edition. Procesory zbudowane na podstawie jądra Prescott obsługują instrukcje takie jak: SSE2, SSE3 oraz technologie takie jak Hyper-Threading, Speed-Step.Definicja intuicyjna: SSE to dodatkowe rozkazy rozpoznawane przez mikroprocesory firmy Intel oraz kompatybilnych, które pozwalają znacznie szybciej wykonywać obliczenia matematyczne, szczególnie te wykorzystywane w dziedzinie multimediów, co przekłada się na zwiększenie efektywności działania m.in. gier komputerowych, programów graficznych, muzycznych, kodowania filmów i muzyki.

    SSE3 wprowadza 13 nowych rozkazów w stosunku do swojego poprzednika SSE2, są to:

  • FISTTP – do konwersji liczb zmiennoprzecinkowych do całkowitych
  • ADDSUBPS, ADDSUBPD, MOVSLDUP, MOVSHDUP, MOVDDUP – do arytmetyki zespolonej
  • LDDQU – do kodowania wideo
  • HADDPS, HSUBPS, HADDPD, HSUBPD – do grafiki (SIMD FP/AOS)
  • MONITOR, MWAIT – do synchronizacji wątków
  • Intel wprowadził SSE3 2 lutego 2004 roku wraz z procesorem Pentium 4 Prescott, natomiast firma AMD w procesorach Athlon 64 od wersji E.

    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 1996 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ż.Koprocesor, jednostka zmiennoprzecinkowa (FPU, ang. Floating Point Unit) to układ scalony wspomagający procesor w obliczeniach zmiennoprzecinkowych. W większości współczesnych konstrukcji, koprocesor arytmetyczny, a także jednostki obsługujące bardziej skomplikowane obliczenia (np. instrukcje wektorowe) są zintegrowane z procesorem w jednym układzie.

    Nowe rozkazy[ | edytuj kod]

    Nowe rozkazy:

  • rozkazy wektorowe działające albo na wektorach liczb zmiennoprzecinkowych pojedynczej albo podwójnej precyzji (tj. wektory 4 × 32 bity lub 2 × 64 bity):
  • ADDSUBPS
  • ADDSUBPD
  • HADDPS, HSUBPS
  • HADDPD, HSUBPD
  • MOVSLDUP, MOVSHDUP
  • MOVDDUP
  • FISTTP – nowy rozkaz FPU
  • LDDQU
  • MONITOR i MWAIT
  • Przed wprowadzaniem SSE3 prawie wszystkie rozkazy arytmetyczne występujące w MMX, SSE, SSE2 działały, jak to określa Intel, „pionowo” (ang. vertical), tj. argumentami działań zawsze są elementy z dwóch wektorów. Natomiast w SSE3 pojawiły się rozkazy działające „poziomo” (ang. horizontal) — argumentami operacji arytmetycznych są elementy tego samego wektora; te instrukcje to: HADDPS, HADDPD, HSUBPS, HSUBPD.

    Athlon 64 nazwa handlowa procesora serii Athlon produkcji AMD, który obsługuje jednocześnie instrukcje 32- jak i 64-bitowe (technologia zwana inaczej AMD64 lub x86-64).Synchronizacja (z stgr. σύγχρονος synchronos - równoczesny) – koordynacja w czasie, co najmniej dwóch zjawisk (procesów), tzn. dążenie do równoległego, niezależnego ich przebiegu, skoordynowanego w czasie lub do jednoczesnego ich zakończenia. Pojęcie synchronizacji występuje w fizyce, informatyce, elektronice, telekomunikacji, robotyce, multimediach (np. synchronizacja dźwięku z obrazem), muzyce i ekonomii (synchronizacja cykli koniunkturalnych).

    FISTTP[ | edytuj kod]

    Rozkaz koprocesora arytmetycznego zamieniający liczbę zmiennoprzecinkową zapisaną w wierzchołku stosu na liczbę całkowitą ze znakiem; trybem zaokrąglania zawsze jest ucinanie (ang. chop), niezależnie od ustawień zapisanych w rejestrze kontrolnym FPU. Liczba całkowita może być 16-, 32- lub 64-bitowa, zależnie od argumentu.

    SIMD (ang. Single Instruction, Multiple Data) – jeden z podstawowych rodzajów architektur komputerowych według taksonomii Flynna, obejmujący systemy, w których przetwarzanych jest wiele strumieni danych w oparciu o pojedynczy strumień rozkazów. Architektura SIMD jest charakterystyczna dla komputerów wektorowych.AVX (Advanced Vector Extensions) – rozszerzenie zestawu instrukcji SSE opublikowane w marcu 2008 przez firmę Intel. Jako pierwszy procesor zawierający ten zestaw instrukcji miał się pojawić w pierwszym kwartale 2011 roku i być oparty na układzie Sandy Bridge firmy Intel. AMD zapowiadał wprowadzenie procesora z AVX na trzeci kwartał 2011 roku - miałby być to układ BullDozer.

    Zgłaszany jest wyjątek w przypadku, gdy konwersja jest niemożliwa (wartość przekracza zakres liczby całkowitej, albo jest klasy plus/minus nieskończoność lub NaN).

    Rozkaz FISTTP to uproszczona wersja istniejącej instrukcji FISTP, w której tryb zaokrąglania sterowany jest poprzez słowo kontrolne koprocesora – jego ewentualna zmiana jest kosztowna (trzeba wykonać kilka lub kilkanaście dodatkowych instrukcji: zachować bieżące ustawienia, włączyć inny tryb zaokrąglania, wykonać FISTP, przywrócić poprzedni tryb).

    Advanced Micro Devices, Inc., AMD (NYSE; AMD) – amerykańskie przedsiębiorstwo produkujące procesory wraz z technologią towarzyszącą dla użytkowników domowych i firm. Do głównych produktów firmy należą mikroprocesory, chipsety do płyt głównych, systemy wbudowane oraz procesory graficzne dla serwerów, stacji roboczych i komputerów PC.3DNow! – rozszerzenie architektury procesorów x86 stworzone przez firmę AMD w 1998 roku dla procesora AMD K6-2, znacznie zwiększające wydajność obliczeń zmiennoprzecinkowych, potrzebne do odtwarzania grafiki trójwymiarowej i multimediów. Był to pierwszy przypadek wprowadzenia takich istotnych zmian przez firmę inną niż Intel. Technologia 3DNow! uzupełnia i rozszerza możliwości akceleratorów graficznych, przyspieszając obliczenia zmiennoprzecinkowe występujące w początkowych etapach przetwarzania grafiki. Technologia ta pozwala uzyskać do 4 wyników zmiennoprzecinkowych w ciągu jednego cyklu pracy procesora.

    ADDSUBPS[ | edytuj kod]

    Rozkaz działa na dwóch wektorach liczb zmiennoprzecinkowych pojedynczej precyzji. Wykonywane jest dodawanie elementów o nieparzystych indeksach, odejmowanie – parzystych. Działania realizowane przez ADDSUBPS xmm1, xmm2:

    xmm1[0] := xmm1[0] - xmm2[0]
    xmm1[1] := xmm1[1] + xmm2[1]
    xmm1[2] := xmm1[2] - xmm2[2]
    xmm1[3] := xmm1[3] + xmm2[3]
    

    ADDSUBPD[ | edytuj kod]

    Rozkaz analogiczny do ADDSUBPS, działa na dwóch wektorach liczb zmiennoprzecinkowych podwójnej precyzji. Działania realizowane przez ADDSUBPD xmm1, xmm2:

    Pamięć podręczna (ang. cache) – mechanizm, w którym część spośród danych zgromadzonych w źródłach o długim czasie dostępu i niższej przepustowości jest dodatkowo przechowywana w pamięci o lepszych parametrach. Ma to na celu poprawę szybkości dostępu do tych informacji, które przypuszczalnie będą potrzebne w najbliższej przyszłości.Streaming SIMD Extensions 5 (SSE5) - planowane rozszerzenie listy rozkazów SIMD dostępnych w procesorach x86, zdefiniowane przez firmę AMD 30 sierpnia 2007 roku; pierwszym procesorem implementującym SSE5 będzie "Bulldozer" produkowany od 2011 roku. Szczegóły na temat sposobu kodowania instrukcji zostały zrewidowane w maju 2009, ze względu na lepszą kompatybilność z zestawem instrukcji AVX autorstwa Intela.
    xmm1[0] := xmm1[0] - xmm2[0]
    xmm1[1] := xmm1[1] + xmm2[1]
    

    HADDPS, HSUBPS[ | edytuj kod]

    Rozkazy działają na wektorach liczb zmiennoprzecinkowych pojedynczej precyzji. HADDPS dodaje, zaś HSUBPS odejmuje sąsiednie elementy wektorów, tzn. HADDPS xmm1, xmm2 wykonuje:

    temp[0] := xmm1[0] + xmm1[1]
    temp[1] := xmm1[2] + xmm1[3]
    temp[2] := xmm2[0] + xmm2[1]
    temp[3] := xmm2[2] + xmm2[3]
    xmm1 := temp
    

    natomiast HSUBPS xmm1, xmm2:

    Liczby całkowite w językach programowania – typ danych dotyczący liczb całkowitych. Liczby te mogą zostać zapisane w pamięci komputera w rozmaity sposób. Obecnie dla liczb naturalnych najczęściej spotykany jest pozycyjny dwójkowy system liczbowy. Inne znane sposoby zapisu to kod Graya i BCD.Pentium 4 – siódma generacja procesorów firmy Intel, posiadająca architekturę x86 (wersje 6xx oraz niektóre 5xx obsługują architekturę EM64T). Produkowany w kilku kolejnych wersjach: Willamette, Northwood, Prescott, Gallatin, Cedar Mill, Smithfield, Presler, pracujących z częstotliwościami FSB 400, 533, 800 i 1066 MHz. Początkowo osadzony był w gnieździe Socket 423, następnie Socket 478, a obecnie LGA 775. Wyższą częstotliwość zegara zawdzięcza architekturze NetBurst. Wykorzystuje technologie, takie jak instrukcje SSE2, w nowszych wersjach jądra – SSE3. Niektóre wersje posiadają też wbudowaną wielowątkowość (HyperThreading) – dotyczy to m.in. procesorów z rodzin Northwood i Prescott. Obecnie częstotliwość taktowania zegara procesorów Pentium 4 z serii Extreme Edition dochodzi do 3,73 GHz, najwyżej taktowanym Pentium 4 jest Prescott 3,8 GHz na FSB 800 MHz (mnożnik 19).
    temp[0] := xmm1[0] - xmm1[1]
    temp[1] := xmm1[2] - xmm1[3]
    temp[2] := xmm2[0] - xmm2[1]
    temp[3] := xmm2[2] - xmm2[3]
    xmm1 := temp
    

    Np.:

               3     2     1     0         3     2     1     0      
            +-----+-----+-----+-----+   +-----+-----+-----+-----+
            |  d  |  c  |  b  |  a  |   |  h  |  g  |  f  |  e  |
            +-----+-----+-----+-----+   +-----+-----+-----+-----+
                       xmm1                        xmm2
    

    Wynik HADDPS:

    Liczba zmiennoprzecinkowa – reprezentacja liczby rzeczywistej zapisanej za pomocą notacji naukowej. Ze względu na wygodę operowania na takich liczbach, przyjmuje się ograniczony zakres na mantysę i cechę – nazwy te mają w matematyce znaczenie podane w artykule podłoga i sufit, a w niniejszym artykule inne, powszechne w informatyce. Powoduje to, że reprezentacja liczby rzeczywistej jest tylko przybliżona, a jedna liczba zmiennoprzecinkowa może reprezentować różne liczby rzeczywiste z pewnego zakresu.Wyjątek (ang. exception) jest mechanizmem przepływu sterowania używanym w mikroprocesorach oraz współczesnych językach programowania do obsługi zdarzeń wyjątkowych, a w szczególności błędów, których wystąpienie zmienia prawidłowy przebieg wykonywania programu. W momencie zajścia niespodziewanego zdarzenia generowany jest wyjątek, który musi zostać obsłużony poprzez zapamiętanie bieżącego stanu programu i przejście do procedury jego obsługi. W niektórych sytuacjach po obsłużeniu wyjątku można powrócić do wykonywania przerwanego kodu, korzystając z zapamiętanych informacji stanu. Przykładowo obsługa błędu braku strony pamięci polega najczęściej na pobraniu brakującej strony z pliku wymiany, co umożliwia kontynuowanie pracy programu, natomiast błąd dzielenia przez zero powoduje, że wykonywanie dalszych obliczeń nie ma sensu i musi zostać przerwane na trwałe.
            +-----+-----+-----+-----+
     xmm1 = | h+g | f+e | c+d | a+b |
            +-----+-----+-----+-----+
    

    Wynik HSUBPS:

            +-----+-----+-----+-----+
     xmm1 = | h-g | f-e | c-d | a-b |
            +-----+-----+-----+-----+
    

    HADDPD, HSUBPD[ | edytuj kod]

    Rozkazy działają na wektorach liczb zmiennoprzecinkowych podwójnej precyzji. Rozkaz HADDPD dodaje do siebie sąsiednie elementy wektorów, natomiast HSUBPD odejmuje. Instrukcja HADDPD xmm1, xmm2 wykonuje:

    x86 – rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, zapoczątkowana przez i wstecznie zgodna z 16-bitowym procesorem 8086, który z kolei wywodził się z 8-bitowego układu 8085. Nazwa architektury wywodzi się od nazw pierwszych modeli z tej rodziny, których numery kończyły się liczbą 86.Intel – największy na świecie producent układów scalonych oraz twórca mikroprocesorów z rodziny x86, które znajdują się w większości komputerów osobistych.
    temp[0] := xmm1[0] + xmm1[1]
    temp[1] := xmm2[0] + xmm2[1]
    xmm1 := temp
    

    natomiast HSUBPD xmm1, xmm2:

    temp[0] := xmm1[0] - xmm1[1]
    temp[1] := xmm2[0] - xmm2[1]
    xmm1 := temp
    

    MOVSLDUP, MOVSHDUP[ | edytuj kod]

    Rozkazy działają na wektorze liczb zmiennoprzecinkowych pojedynczej precyzji; rozkaz MOVSLDUP powiela elementy o parzystych indeksach, MOVHLDUP – o nieparzystych. Instrukcja MOVSLDUP xmm1, xmm2 wykonuje:

    xmm1[0] := xmm2[0]
    xmm1[1] := xmm2[0]
    xmm1[2] := xmm2[2]
    xmm1[3] := xmm2[2]
    

    natomiast MOVSHDUP xmm1, xmm2:

    xmm1[0] := xmm2[1]
    xmm1[1] := xmm2[1]
    xmm1[2] := xmm2[3]
    xmm1[3] := xmm2[3]
    

    Np.

               3     2     1     0
            +-----+-----+-----+-----+
     xmm2 = |  d  |  c  |  b  |  a  |
            +-----+-----+-----+-----+
    

    Wynik MOVSLDUP:

            +-----+-----+-----+-----+
     xmm1 = |  c  |  c  |  a  |  a  |
            +-----+-----+-----+-----+
    

    Wynik MOVSHDUP:

            +-----+-----+-----+-----+
     xmm1 = |  d  |  d  |  b  |  b  |
            +-----+-----+-----+-----+
    

    MOVDDUP[ | edytuj kod]

    Argumentem rozkazu jest liczba zmiennoprzecinkowa podwójnej precyzji, która w rejestrze XMM jest powielana, tj. MOVDDUP xmm1, arg wykonuje:

    xmm1[0] := arg
    xmm1[1] := arg
    

    Argumentem może być albo lokacja pamięci (wówczas czytane są 64 bity), albo rejestr XMM, wówczas brane są jego 64 najmłodsze bity.

    LDDQU[ | edytuj kod]

    Rozkaz ładuje 128 bitów spod adresów niewyrównanych do granicy 16 bajtów (tj. adresy mający niezerowe 4 najmłodsze bity). Rozkaz realizuje działanie analogiczne do istniejącego w SSE MOVDQU, jednak został specjalnie zoptymalizowany do kodu o następującej charakterystyce:

  • występuje spadek wydajności spowodowany częstymi odczytami obszarów znajdujących się na granicy linijek cache,
  • dane są tylko odczytywane i nie mają zostać (po ewentualnej modyfikacji) z powrotem zapisane pod tym samym adresem.
  • W przeciwnym razie producent poleca, by nadal używać rozkazów SSE MOVDQU lub MOVDQA.

    MONITOR i MWAIT[ | edytuj kod]

    Para rozkazów służy do efektywnego synchronizowania wątków.

    Rozkaz MONITOR ustala początkowy adres zakresu pamięci (rozmiar tego obszaru jest stały, zależny od modelu procesora), który następnie jest automatycznie monitorowany przez procesor: w przypadku wystąpienia zapisu gdziekolwiek w obserwowanym zakresie ustawiana jest wewnętrzna flaga, którą odczytuje MWAIT.

    Wykonanie rozkazu MWAIT powoduje wejście w zoptymalizowaną sprzętową pętlę, która jest przerywana dopiero, gdy wspomniana flaga zostanie ustawiona, a więc gdy nastąpi zapis pod obserwowany adres.

    Producenci procesorów mogą rozszerzać funkcjonalność tych rozkazów, dlatego m.in. możliwe jest przejście w tryb oszczędzanie energii na czas wykonywania MWAIT.

    Bibliografia[ | edytuj kod]

  • Intel 64 and IA-32 Architectures Software Developer's Manual: Volume 2A: Instruction Set Reference, A-M (253666), maj 2007
  • Zobacz też[ | edytuj kod]

  • MMX
  • 3DNow!
  • SSE, SSE2, SSE3, SSSE3, SSE4, SSE5, AVX




  • Reklama

    Czas generowania strony: 0.019 sek.