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
-
AMD :
- Opteron (od Stepping E4)
- Sempron (od Palermo. Stepping E3)
- Athlon 64 (od Wenecji Stepping E3 i San Diego Stepping E4)
- Athlon 64 FX (od San Diego Stepping E4)
- Athlona 64X2
- Phenom 64 X2
- Rodzina Turionów
- Rodzina K10
- APU (w tym bez GPU)
- Seria FX
- Rodzina Zenek
-
Intel :
- Celeron D
- Celeron (począwszy od mikroarchitektury Core)
- Pentium 4 (od Prescotta)
- Pentium D
- Pentium Extreme Edition (ale NIE Pentium 4 Extreme Edition)
- Dwurdzeniowy Pentium
- Pentium (począwszy od mikroarchitektury Core)
- Rdzeń
- Xeon (od Nocony)
- Atom
- VIA / Centaur :
- Transmeta Efficeon TM88xx (NIE numery modeli TM86xx)
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ść.