Přeskočit na obsah

Matematický koprocesor

Z Wikipedie, otevřené encyklopedie
Blokové schéma koprocesoru Intel 8087

Matematický koprocesor případně numerický koprocesor, někdy zkráceně jen koprocesor (angl. numeric coprocessor, math coprocessor zkráceně MCP nebo floating-point unit zkráceně FPU) je specializovaný hardware určený na vykonávání operací s čísly s pohyblivou řádovou čárkou[1]. Matematický koprocesor může být implementován jako samostatná jednotka nebo může být součástí CPU[1].

V minulosti procesory neobsahovaly nativní mechanismus pro zpracování reálných čísel. Zpracování bylo realizováno externím koprocesorem, případně emulováno mikroprogramem v aritmeticko-logické jednotce (ALU). Softwarová emulace je v porovnání s hardwarovou implementací až o dva řády pomalejší a plně zatěžuje hlavní procesor[1]. V posledních desetiletích prošly koprocesory transformací od diskrétních obvodů přes integrované součásti až po komplexní vektorové jednotky a maticové akcelerátory pro strojové učení a umělou inteligenci[1].

Koprocesory Intel 80x87

[editovat | editovat zdroj]
Intel 8087

Koprocesor Intel 8087, uvedený v roce 1980, byl navržen jako těsně vázaný společník procesorů Intel 8086 a 8088[2]. Monitoroval instrukční tok a automaticky zachytával specifické numerické instrukce. Vedle základní aritmetiky obsahoval hardwarovou podporu pro výpočet goniometrických funkcí a odmocnin, čímž položil základy pozdějšího standardu IEEE 754[3].

Investice do koprocesoru byla v 80. letech nákladná a ospravedlnitelná zejména pro vědecké výpočty, CAD nebo 3D grafiku. Tato modulární éra skončila v roce 1989 s příchodem procesoru Intel 80486DX, který integroval FPU přímo na křemíkovou destičku procesoru[1].

Vývojová linie diskrétních koprocesorů architektury x86[2]
Model koprocesoruKompatibilní CPURok uvedeníHlavní přínosy
Intel 80878086, 80881980První implementace standardu IEEE 754; 80bitová vnitřní přesnost
Intel 80287802861983Asynchronní běh (koprocesor mohl mít jiný takt než CPU)
Intel 80387803861987Plná synchronizace s CPU; vylepšené goniometrické instrukce
Intel 8048780486 SX1991De facto procesor 486DX; po instalaci deaktivoval 486SX

Vnitřní struktura a mikroarchitektura x87

[editovat | editovat zdroj]

Na rozdíl od standardního registrového modelu CPU využívá x87 FPU model registrového zásobníku (stack)[4]. Z pohledu programátora obsahuje následující registry:

  • Osm 80bitových registrů označených ST(0) až ST(7). Vrchol zásobníku ST(0) je využíván většinou instrukcí.
  • Registr značek (Tag Word) – 16bitový registr indikující stav registrů (platné číslo, nula, NaN/Infinity, prázdný).
  • Stavový registr (Status Word) – uchovává příznaky výjimek (dělení nulou, přetečení) a ukazatel na vrchol zásobníku (TOP).
  • Řídicí registr (Control Word) – umožňuje nastavení režimu zaokrouhlování a přesnosti výpočtu (24, 53 nebo 64 bitů mantisy).


Architektura x87 využívá 80bitovou vnitřní přesnost (extended precision), aby minimalizovala kumulativní zaokrouhlovací chyby při složitých výpočtech.

Typy čísel a speciální stavy

[editovat | editovat zdroj]

Podle normy IEEE 754 koprocesor pracuje s následujícími stavy[3]:

  • Normalizovaná čísla – ve tvaru s implicitní vedoucí jedničkou (hidden bit)[5].
  • Denormalizovaná čísla – umožňují reprezentovat extrémně malá čísla s postupnou ztrátou přesnosti.
  • Nekonečno (Infinity) – vzniká dělením nulou nebo přetečením; existuje kladné i záporné nekonečno.
  • NaN (Not a Number) – reprezentuje nedefinované operace jako nebo . Rozlišuje se tiché (Quiet NaN) a signalizační (Signaling NaN).


Chyba Pentium FDIV

[editovat | editovat zdroj]

V roce 1994 byla v jednotce FPU procesoru Intel Pentium objevena chyba v algoritmu dělení SRT. Algoritmus generoval dva bity podílu za takt pomocí vyhledávací tabulky, kde bylo pět hodnot chybně nahrazeno nulou.

Chyba se mohla projevit již na čtvrtém nebo pátém platném místě; například operace vrátila místo správného výsledku hodnotu . Událost stála Intel 475 milionů dolarů a vedla k zavedení formální verifikace při návrhu procesorů.[6].

Evoluce k SIMD: SSE, AVX a AVX10

[editovat | editovat zdroj]

S rozvojem multimédií se zásobníkový model x87 ukázal jako nevhodný pro paralelní zpracování. Intel zavedl technologie SIMD (Single Instruction, Multiple Data):

  • SSE (Streaming SIMD Extensions) – zavedlo 128bitové registry XMM organizované jako ploché pole.
  • AVX (Advanced Vector Extensions) – rozšířilo registry na 256 bitů (YMM) a zavedlo tříoperandový formát .
  • AVX-512 – přineslo 512bitové registry (ZMM) a podporu pro maskování.

V roce 2023 Intel oznámil strategii AVX10, která sjednocuje schopnosti AVX-512 napříč hybridními jádry (P-cores i E-cores)[7]. Doprovází ji APX (Advanced Performance Extensions), které zdvojnásobuje počet obecných registrů na 32[8].

Architektura Arm a Apple AMX

[editovat | editovat zdroj]

Architektura Arm využívá technologii NEON pro 128bitové vektory a pro HPC oblast rozšíření SVE (Scalable Vector Extension)[9]. SVE zavádí "šířkově agnostický kód", kde stejný binární soubor funguje na jednotkách o šířce 128 až 2048 bitů.

Apple do svých čipů (M1–M4) integroval Apple Matrix Coprocessor (AMX)[10]. Ten je určen pro maticové výpočty (GEMM) a využívá masivní registry (např. 4096bitový akumulátor Z)[11].

Akcelerátory pro AI a nové formáty přesnosti

[editovat | editovat zdroj]

Těžiště výpočtů se dnes přesouvá k vysoce specializovaným jednotkám[12]:

  • GPU – využívají tisíce jader pro masivní paralelismus a "Tensor Cores" pro maticové operace.[13]
  • TPU (Tensor Processing Unit) – ASIC od Googlu postavený na systolické architektuře.
  • NPU (Neural Processing Unit) – optimalizovány pro energeticky efektivní inferenci v mobilních zařízeních s využitím nízko-bitové kvantizace (INT8)[14].


Formáty Bfloat16 a FP8

[editovat | editovat zdroj]

Pro trénování AI se stal standardem Bfloat16[5]. Má stejný dynamický rozsah jako FP32 (8 bitů exponentu), ale pouze 7 bitů mantisy, což zabraňuje přetečení při konverzích. Nejnovější trendy zahrnují 8bitové formáty FP8 (varianty E4M3 pro inferenci a E5M2 pro trénování), které zdvojnásobují propustnost oproti 16bitovým formátům[15].

  1. 1 2 3 4 5 FPU in CPU. The Evolution of the Floating Point… | by LotusChain | Medium, online
  2. 1 2 Three Generations of x86 Floating-Point Numbers: FPU, SSE, and AVX - CS 301 Lecture, online
  3. 1 2 A New IEEE 754 Standard for Floating-Point Arithmetic in an Ever-Changing World | SIAM, online
  4. x86 Assembly Series Part 11: Floating-Point & x87/SSE - Wasil Zafar, online
  5. 1 2 IEEE_arithmetic – Nick Higham, online
  6. Ken Shirriff Tracks Down Intel's Infamous Pentium FDIV Bug, online
  7. Intel's New AVX10 Brings AVX-512 Capabilities to E-Cores | Tom's Hardware, online
  8. Intel AVX10 & APX announcement - Agner's CPU blog, online
  9. What are FPU, VFP, ASE, NEON, MPE, SVE, SME, MVE, and VPU?, online
  10. The Elusive Apple Matrix Coprocessor (AMX) - Engineering Deficiency @ Meekolabs, online
  11. Performance Analysis of the Apple AMX Matrix Accelerator - Jonathan Zhou, online
  12. Understanding CPU vs GPU vs TPU vs NPU in Modern AI Systems, online
  13. JOUPPI, Norman P., et al. In-Datacenter Performance Analysis of a Tensor Processing Unit [online]. arXiv, 2017-04-16 [cit. 2026-03-31]. Dostupné online. (anglicky)
  14. CPU, GPU, NPU, TPU: What Are They? - QNAP Blog, online
  15. Eight-Bit Vector SoftFloat Extension - MDPI, online

Související články

[editovat | editovat zdroj]