fon nojmanova architekturaTakéPrincetonská architektura, von Neumannův model, Von Neumanova architekturaPokročilý

Definice

Von Neumannova architektura je model počítače, ve kterém jsou program i data uloženy ve stejné operační paměti a procesor je čte přes společnou sběrnici. Instrukce se vykonávají sekvenčně v cyklu načtení, dekódování a provedení. Na tomto principu stojí drtivá většina dnešních počítačů, serverů i mobilních telefonů.

Kategorie: Počítačová architekturaAktualizováno

Než se na to spolehnete: Wikidata ID Q160306 pro Von Neumann architecture uvádím z paměti a nemusí být přesné; doporučuji ověřit. Historická data (EDVAC 1945, SSEM a EDSAC 1948/1949) jsou standardně uváděná, ale stojí za kontrolu.

Pět částí jednoho stroje

Von Neumannova architektura rozděluje počítač na aritmeticko-logickou jednotku, řadič, operační paměť, vstupní a výstupní zařízení. Klíčová myšlenka není v tomto rozdělení, ale v tom, že paměť drží zároveň data i samotný program. Instrukce jsou jen čísla jako každá jiná, takže je počítač může načítat, kopírovat a v krajním případě i sám měnit.

Před tímto modelem se stroje typu ENIAC programovaly propojováním kabelů a přepínáním spínačů. Změna úlohy byla fyzická práce na hodiny až dny. Uložený program změnil počítač z jednoúčelového zařízení na univerzální stroj, u kterého stačí přepsat obsah paměti.

Instrukční cyklus krok za krokem

Procesor pracuje v opakovaném cyklu. Programový čítač ukazuje na adresu další instrukce, řadič ji načte z paměti (fetch), rozloží na operaci a operandy (decode), aritmeticko-logická jednotka ji provede (execute) a výsledek se zapíše do registru nebo zpět do paměti. Programový čítač se posune, případně skočí jinam, pokud šlo o podmíněný skok. Tento cyklus je základ toho, jak CPU vykonává jakýkoli program, od operačního systému po prohlížeč.

Proč se mluví o úzkém hrdle

Společná sběrnice mezi procesorem a pamětí znamená, že v jednom okamžiku po ní projde buď instrukce, nebo data. Procesory za desítky let zrychlily řádově víc než latence hlavní paměti, takže výpočetní jádro dnes stráví značnou část času čekáním. Tomuto omezení se říká von Neumannovo úzké hrdlo a je důvodem, proč moderní čipy obsahují víceúrovňové cache, prediktory skoků, mimopořadové vykonávání a hlubokou pipeline. Žádná z těchto technik model nenahrazuje, jen zakrývá jeho cenu.

Harvardská architektura jako protipól

Harvardská architektura odděluje paměť programu a paměť dat včetně sběrnic, takže lze načítat instrukci a operand současně. Používají ji mnohé mikrokontroléry a signálové procesory, kde je program v ROM a nemění se. Běžné procesory jde označit za modifikovanou harvardskou: navenek se chovají von Neumannovsky, ale mají oddělenou instrukční a datovou cache první úrovně.

Bezpečnostní důsledek sdílené paměti

Když data a kód sdílejí adresní prostor, může přetečení zásobníku přepsat návratovou adresu a přesměrovat běh do dat, která zaslal útočník. Odtud pochází celá kategorie zranitelností typu buffer overflow. Obrana v podobě bitu NX, techniky DEP nebo randomizace adresního prostoru jsou pozdější záplaty na vlastnost, kterou model má od začátku.

Co model neurčuje

Von Neumannova architektura nepředepisuje instrukční sadu, počet jader ani binární soustavu. Vícejádrové procesory, GPU nebo neuromorfní čipy se od ní vzdalují různou měrou, ale sekvenční vykonávání uloženého programu zůstává výchozím rámcem, ve kterém vývojáři přemýšlejí o výkonu.

Příklady z praxe

  1. Čekání na paměť v jednoduché smyčce

    Součet velkého pole ukazuje úzké hrdlo v praxi. Sečtení deseti milionů čísel je pro ALU triviální, ale procesor musí každou hodnotu přenést z hlavní paměti. Při sekvenčním průchodu pomáhá prefetch a cache, při náhodném pořadí indexů stejný počet operací trvá i několikanásobně déle, přestože výpočtů je stejně.

    long soucet = 0;
    for (int i = 0; i < n; i++) {
        soucet += pole[i];   // ALU zvládne hned, sběrnice ne
    }
  2. Program jako data u JIT kompilace

    Javascriptový engine V8 za běhu přeloží horkou funkci do strojového kódu a zapíše ho do paměti, kterou pak označí jako spustitelnou a skočí do ní. Přesně tohle umožňuje sdílený adresní prostor pro kód a data. Operační systém proto vyžaduje explicitní změnu práv stránky, protože zápis i spuštění naráz je bezpečnostní riziko.

Časté omyly

MýtusVon Neumannovu architekturu vymyslel John von Neumann sám.
Ve skutečnostiKoncept uloženého programu vznikl v týmu kolem projektu EDVAC, kde zásadně přispěli John Mauchly a J. Presper Eckert. Von Neumann je autorem rozšířené zprávy z roku 1945, na které je uveden jako jediný autor, a jméno se tak vžilo.
MýtusModerní vícejádrové procesory už von Neumannovy nejsou.
Ve skutečnostiVíce jader, cache a mimopořadové vykonávání jsou implementační techniky. Každé jádro stále načítá instrukce uloženého programu ze společného adresního prostoru a vykonává je v cyklu fetch, decode, execute.
MýtusHarvardská architektura je prostě rychlejší, takže je lepší.
Ve skutečnostiOddělené paměti přinášejí propustnost, ale ztěžují nahrávání nového programu za běhu a plýtvají kapacitou, když je jedna paměť plná a druhá prázdná. Proto se používá hlavně v mikrokontrolérech a DSP, ne v univerzálních počítačích.

Časté dotazy

Kdy von Neumannova architektura vznikla?
Von Neumannova architektura byla popsána v návrhu stroje EDVAC v roce 1945, v dokumentu známém jako First Draft of a Report on the EDVAC. První funkční počítače s uloženým programem se rozběhly kolem let 1948 až 1949, mezi nimi manchesterský Small-Scale Experimental Machine a cambridgeský EDSAC. Myšlenka univerzálního stroje řízeného programem má teoretický základ ještě dříve, v práci Alana Turinga z roku 1936 o univerzálním stroji.
Proč se von Neumannovo úzké hrdlo nedá jednoduše odstranit?
Von Neumannovo úzké hrdlo plyne z fyzikálních a ekonomických mezí paměti. Rychlá paměť typu SRAM je drahá a zabírá mnoho plochy čipu, kapacitní DRAM je levná, ale má vysokou latenci danou mimo jiné vzdáleností a způsobem čtení. Návrháři proto staví hierarchii cache, která zakrývá latenci u dat s dobrou lokalitou. Odstranit hrdlo úplně by znamenalo mít veškerou paměť tak rychlou jako registry, což zatím nikdo nedokáže vyrobit za rozumnou cenu.
Jak souvisí von Neumannova architektura s výkonem aplikací, které píšu?
Von Neumannova architektura určuje, že přístup do paměti stojí víc než samotný výpočet. V praxi to znamená, že datové struktury s dobrou lokalitou, tedy pole souvislých hodnot, běží rychleji než rozházené spojové seznamy nebo stromy plné ukazatelů, i když mají stejnou asymptotickou složitost. Optimalizace typu uspořádání struktur podle přístupových vzorů, zmenšení objektů nebo dávkové zpracování dat proto přinášejí měřitelné zrychlení i v jazycích s automatickou správou paměti.
Vykonává GPU program podle von Neumannova modelu?
GPU se od von Neumannova modelu částečně odklání. Jednotlivé výpočetní jednotky stále načítají instrukce uloženého programu a vykonávají je, ale model je masivně paralelní: jedna instrukce se aplikuje na mnoho datových prvků najednou a paměťová hierarchie je navržena pro propustnost, ne pro nízkou latenci jednoho přístupu. Přesto zůstává jádro myšlenky zachováno, protože shader nebo kernel je běžný program uložený v paměti, který ovladač nahraje a spustí.

Zdroje

  1. Von Neumann architecture(otevře se v novém okně)Wikipedia
  2. First Draft of a Report on the EDVAC(otevře se v novém okně)Wikipedia
  3. Harvard architecture(otevře se v novém okně)Wikipedia
  4. Von Neumannova architektura(otevře se v novém okně)Wikipedie

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.