SSE3

SSE3 , Streaming SIMD Extensions 3 , znany również pod nazwą kodową Intel Prescott New Instructions ( PNI ), to trzecia iteracja zestawu instrukcji SSE dla architektury IA-32 (x86). Intel wprowadził SSE3 na początku 2004 roku wraz z Prescott swojego procesora Pentium 4 . W kwietniu 2005 r. AMD wprowadziło podzbiór SSE3 w wersji E (Wenecja i San Diego) swoich procesorów Athlon 64 . Wcześniejszy SIMD zestawy instrukcji na platformie x86 , od najstarszych do najnowszych, to MMX , 3DNow! (opracowane przez AMD, ale nieobsługiwane przez procesory Intel), SSE i SSE2 .

SSE3 zawiera 13 nowych instrukcji w stosunku do SSE2 .

Zmiany

Najbardziej zauważalną zmianą jest możliwość poziomej pracy w rejestrze, w przeciwieństwie do mniej lub bardziej pionowej operacji wszystkich poprzednich instrukcji SSE. Mówiąc dokładniej, dodano instrukcje dodawania i odejmowania wielu wartości przechowywanych w jednym rejestrze. Instrukcje te mogą być wykorzystane do przyspieszenia realizacji szeregu DSP i 3D . Dostępna jest również nowa instrukcja konwersji wartości zmiennoprzecinkowych na liczby całkowite bez konieczności zmiany trybu zaokrąglania globalnego, co pozwala uniknąć kosztownego potoku stajnie. Na koniec rozszerzenie dodaje LDDQU, alternatywne, źle wyrównane obciążenie wektora liczb całkowitych, które ma lepszą wydajność na NetBurst dla obciążeń przekraczających granice pamięci podręcznej.

Procesory z SSE3

Nowe instrukcje

Wspólne instrukcje

Arytmetyka

  • ADDSUBPD — ( Dodaj-Odejmij-Pakowane-Podwójnie )
    • Wejście: { A0, A1 }, { B0, B1 }
    • Wyjście: { A0 − B0, A1 + B1 }
  • ADDSUBPS — ( dodawanie-odejmowanie-pakowane-pojedyncze )
    • Dane wejściowe: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Wyjście: { A0 − B0, A1 + B1, A2 − B2, A3 + B3 }

AOS (tablica struktur)

  • HADDPD — ( poziomo-add-pakowane-podwójne )
    • Wejście: { A0, A1 }, { B0, B1 }
    • Wyjście: { A0 + A1, B0 + B1 }
  • HADDPS ( poziomo-dodaj-pakowane-pojedyncze )
    • Dane wejściowe: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Wyjście: { A0 + A1, A2 + A3, B0 + B1, B2 + B3 }
  • HSUBPD — ( poziomo-odejmowanie-pakowane-podwójnie )
    • Wejście: { A0, A1 }, { B0, B1 }
    • Wyjście: { A0 − A1, B0 − B1 }
  • HSUBPS — ( poziomo-odejmowanie-pakowane-pojedyncze )
    • Dane wejściowe: { A0, A1, A2, A3 }, { B0, B1, B2, B3 }
    • Wyjście: { A0 − A1, A2 − A3, B0 − B1, B2 − B3 }
  • LDDQU — Jak wspomniano powyżej, jest to alternatywne obciążenie wektora niewspółosiowego wektora całkowitoliczbowego. Może być pomocny w zadaniach związanych z kompresją wideo.
  • MOVDDUP , MOVSHDUP, MOVSLDUP — Są przydatne do obliczeń liczb zespolonych i fal, takich jak dźwięk.
  • FISTTP — Podobnie jak starsza instrukcja x87 FISTP, ale ignoruje ustawienia trybu zaokrąglania rejestru kontrolnego zmiennoprzecinkowego i zamiast tego używa trybu „chop” (obcinania). Pozwala na pominięcie kosztownego ładowania i ponownego ładowania rejestru kontrolnego w językach takich jak C, gdzie konwersja zmiennoprzecinkowa na int wymaga standardowo obcięcia.

Inne instrukcje

  • MONITOR, MWAIT — optymalizują aplikacje wielowątkowe, zapewniając procesorom z technologią Hyper-threading lepszą wydajność.

Linki zewnętrzne