Úvod

S rozmachem dvou- a vícejádrových procesorů přišla možnost paralelizovat programy i na běžném osobním počítači. Už o mnoho let dříve ale procesory uměly zpracovávat data jistým způsobem paralelně.

Za dob procesorů 486 platilo jednoduché pravidlo: jedna instrukce zpracovává jednu datovou jednotku (8, 16 nebo 32 bitový integer, případně desetinné číslo) - anglicky se tento přístup nazývá SISD (single instruction, single data). S nástupem výpočetně náročnějších, ale zároveň jednoduše paralelizovatelných úkolů používaných běžnými uživateli, jako je například dekomprese videa, začali výrobci procesorů zvažovat možnosti přidání instrukcí, které by najednou zpracovávaly více datových jednotek. Tomuto přístupu se říká SIMD (single instruction, multiple data). Ze začátku každý výrobce používal jinou technologii.

V roce 1996 Intel jako první uvedl na trh procesory s technologií MMX, která umožňovala zpracovávat až 8 osmibitových celých čísel najednou ve speciálních 64-bitových MMX registrech. Nevýhodou bylo, že MMX registry se překrývaly s běžnými floating-point registry procesoru, tudíž šlo vždy využívat jen jedno nebo druhé. Navíc přepínání mezi MMX a floating-point režimem bylo poměrně časově náročné. Přesto při správném použití dokázaly MMX instrukce podstatně zrychlit hlavně práci s obrázky a videem.

AMD instrukční sadu MMX od Intelu převzal a v roce 1998 přišel s vlastní inovací nazvanou 3DNow!. Ta obsahovala instrukce, které umožňovaly MMX registry použít jako dvě 32-bitová floating-point čísla a pracovat s nimi najednou. Oproti MMX šel tedy 3DNow! použít např. k urychlení výpočtů maticových transformací v 3D hrách.

Aby nezůstal pozadu, Intel rok poté zveřejnil instrukční sadu Streaming SIMD Extensions (SSE), která se od té doby stala základem podporovaným všemi moderními procesory.

První verze SSE z roku 1999 obsahovala 8 nových 128-bitových registrů nazvaných xmm0 až xmm7. Většina instrukcí SSE umožňovala pracovat s těmito registry jako se čtyřmi čísly typu float. Několik málo instrukcí umělo s registry pracovat i jako s celými čísly, většina funkčnosti pro práci s celými čísly byla ale stále přenechána starším MMX instrukcím.

Základní instrukční sada SSE umožňovala:

  • Načíst a uložit obsah SSE registru, přesun dat mezi registry
  • Paralelní sčítání, odčítání, násobení, dělení, odmocninu, maximum a minimum pro čtyři dvojice čísel současně
  • Porovnávání
  • Prohazování bloků (jednotlivých čísel) uvnitř registrů
  • Plus několik málo dalších věcí

Následníkem SSE je SSE2, které přidává instrukce pro práci se SSE registry jako s dvojicí 64-bitových čísel typu double. Také odsouvá do pozadí potřebu používat MMX instrukce, neboť umí pracovat se SSE registry i jako se čtveřicí 32-bitových celých čísel, osmicí 16-bitových celých čísel a šestnácticí osmibitových čísel. Pro všechny typy existují víceméně stejné sady instrukcí.

SSE2 byla následována sadou SSE3 a SSSE3, které nepřinesly příliš nových instrukcí. Po nich se v nedávné době objevila sada SSE4, která mimojiné obsahuje instrukci pro skalární součin a jiné instrukce velmi použitelné v HDTV kodecích.