Vita:Neumann-elvek/Megjegyzések

Az oldal más nyelven nem érhető el.
Új téma nyitása
A Wikipédiából, a szabad enciklopédiából
Legutóbb hozzászólt Vidgabor 2 évvel ezelőtt a(z) "Soros elv" témában

A keletkezés időpontja[szerkesztés]

A Neumann elveknek számos értelmezése forog "közkézen", köztük nem egy kifejezetten sületlenséggel is találkozhatunk. Egy dologban egyetértenek, amikor az elvek első leírásának a First Draft néven közismerté vált publikációt tekintik. A mű teljes címe: First Draft of a Report on the EDVAC (by John von Neumann), és a megjelenés időpontja 1945.augusztus 30., nem pedig 1946, ahogyan a szócikkben szerepel...

A Neumann elvek[szerkesztés]

A "First Draft" szövege közvetlenül nem sorolja fel az elveket tételesen abban a formában, ahogyan azt későbbi citálói teszik. Neumann nyilván nem "Neumann elvekként" gondolt rájuk. Maguk az alapgondolatok azonban valóban fellelhetők a szövegben:

Tárolt programok elve
A programok és az adatok egyetlen belső memóriában vannak tárolva. A gép nem tesz különbséget program és adat között.
vö. Harvard architektúra, ahol az utasítások és az adatok két elkülönített memóriában foglalnak helyet
Bináris műveletek
Kettes számrendszer használata esetén nincs szükség bonyolult szorzótáblákra,mert csak a triviális 0-val és 1-gyel történő szorzás esete fordulhat elő. (Neumann nem írja ugyan, de ez az összeadótáblákra is igaz). Az egyszerű műveletek ily módon könnyen felépíthetők primitív kapcsolóelemekből, például elektron csövekből.
Neumann architektúra
A First Draft teljes második fejezete a tervezett gép absztrakt felépítésével felépítésével foglalkozik. Tételesen felsorolja a komponenseket (erről nyilván ezért nincs vita a későbbi idézetekben):
1. Központi aritmetika - Central Arithmetic (CA)
A későbbi idézetek szinte mindenhol ALU-ként ('Arithmetical and Logical Unit') hivatkoznak erre az egységre. A szóhasználat azonban nem Neumanntól származik.
2. Központi vezérlés - Central Control (CC)
A CA/ALU elnevezéshez hasonlóan ez sem a Neumann-féle szóhasználatban vonult be a köztudatba. Az egység elterjedt megnevezése Control Unit - CU
3. Memória - M
4. Bemeneti és kimeneti eszközök (I és O)
Érdekes, hogy a First Draft-ban Neumann még külön használja a két betűt - legfeljebb és kötőszóval köti össze őket. Az "I/O" írásmód szintén későbbi eredetű.
Neumann ezt és csakis ezt a négy részt sorolja fel a First Draft-ban, semmilyen más részt nem nevez meg az architektúra részeként. Nem használja pl. a Central Processing Unit (CPU) kifejezést, mert a First Draft-ban még nem merül fel, hogy a vezérlő és számoló egységet egyetlen alkatrészként valósítsák meg.
A CPU kifejezésnél lényegesen súlyosabb hiba a következő alkatrészek besorolása a Neumann architektúrába:
  • Regiszterblokk
A CPU egy lehetséges megvalósítása, hogy a gyors műveletvégzéshez saját memóriát ún. regiszterblokkot használ. Neumann semmi ilyesmit nem ír elő kötelezően. Annál is inkább, mivel már a First Draft-ban is folyamatosan a neurális architektúrákkal (kimondatlanul magával az emberi aggyal) fellelhető párhuzamokat vizsgálja.
  • Gyorsítómemória (cache)
A cache a 80-as évek találmánya. Nevetséges kapcsolatba hozni Neumannal.
  • Matematikai társprocesszor
A 90-es évek elejéig ismeretlen volt ez a fogalom. Az Intel 286/386 processzorok kapcsán jelent meg az IBM PC konfigurációkban.
  • Busz, sín
A szócikkben ugyan ez nem szerepel a Neumann architektúra részeként, de gyakran találkozom vele különböző forrásokban.
A busz a Digital Equipment Corporation (DEC) fejlesztése volt a 60-as évek elején, és először a PDP-1 gépben jelent meg. Lényegesen hozzájárult, hogy a DEC leszorítsa a számítógépek árát, és ezzel megtörje az IBM egyeduralmát. [Tanenbaum]

Kérdéses értelmezésű Neumann elvek[szerkesztés]

Teljesen elektronikus működés[szerkesztés]

A további elvek közül talán ennek az elvnek a félreértelmezése a legenyhébb. Ha szó szerint értelmezzük a First Draft-ban írtakat, akkor Neumann nem egyszerűen "teljesen elektronikus" működést ír elő, hanem elektron csöveken alapuló megvalósítást. Azonban ismerve a technológia azóta bekövetkezett fejlődését, nyilván nem értelmezhetjük ezt az előírást betű szerint.

Szerencsére Neumann a First Draft-ban meg is magyarázza, miért ragaszkodik az elektroncsövekhez (a kiemelések tőlem):

In existing digital computing devices various mechanical or electrical devices have been used as elements
azaz: A létező digitális számoló eszközökben alkatrészként különböző mechanikus vagy elektronikus eszközöket használnak

illetve később:

It is clear that a very high speed computing device sould ideally have vacuum tube elements
Nyilvánvaló, hogy nagyon nagy sebességű számoló eszközökben ideális esetben elektroncső elemeket kell használni

Neumann tehát az elektronikus működést a mechanikus vagy elektromechanikus megoldásokkal szemben javasolja a maximális sebesség elérésének érdekében. Valójában - és ez az én értelmezésem - a legfejlettebb technológia alkalmazását írja elő a régebbi megoldásokkal szemben. És ebben az értelmezésben a mai optikai eszközök használata - jóllehet nem elektronikus elven működnek - tökéletesen összhangban áll a Neumann elvekkel.

Soros működés[szerkesztés]

Nem tudom, hogy ez az 'elv' mikor került be a Neumann elvek közé, mert a First Draft-ban kifejezetten erre vonatkozó előírás vagy javaslat nem található. Hogy az elv maga mennyire kétséges, arra példa, hogy kétféle elterjedt értelmezése is közkézen forog:

  1. Az utasítások végrehajtása időben egymás után történik. Ellentéte a párhuzamos utasításvégrehajtás, amikor több utasítás egyidejűleg is végrehajtható [ez az értelmezés található a szócikkben]
  2. A memóriában tárolt utasításokat a gép tárolásuk sorrendjében hajtja végre. Az utasítás nem tartalmaz explicit kódot arra vonatkozóan, hogy mi lesz a következő utasítás: magától értetődik, hogy a memóriában soron következő utasítás az. Pontosan ezért van szükség explicit utasításokra, hogy ezt a szekvenciális sorrendet megtörjük.

Az első értelmezésnek maga Neumann mond ellent - méghozzá épp a First Draft-ban -, amikor a bináris/decimális ábrázolás összehasonlítása kapcsán megmutatja, hogy a bináris ábrázolás egyszerűségéért fizetett ár a műveletek számának radikális növekedése. Két decimálisan nyolc számjegy pontos érték összeszorzásához 82=64 lépes (nagyvonalúan 100 lépés) szükséges. Mivel ugyanez a pontosság binárisan 27 számjegynek felel meg, ezért ebben az ábrázolásban a szorzás elvégzéséhez 272=729 (nagyvonalúan 1000) lépés szükséges. Vagyis az algoritmus lépésekben mért hossza kb. 10-szeresére növekedett.

A lépések ideje nyilván nem egyforma hosszú, ha decimális vagy bináris szorzásról van szó. Ugyanakkor Neumann hangsúlyozza, hogy az elemi lépések sebességének növelésén túl (lásd elektroncsövek alkalmazása) a felmerülő sebességproblémákat a lépések párhuzamosításával kell megoldani:

The logical procedure to avoid these long durations, consists of telescoping operations, that is of carrying out simultaneously as many as possible

A második értelmezés [Tanenbaum] már kevésbé ellentmondásos, főleg mert konkrét célja van. a következő utasítás címének elhagyása az utasítás kódok jelentős rövidülését eredményezi, és ezáltal jobban kihasználható a rendelkezésre álló tár - Neumann idejében erősen szűkös - kapacitása.

Bármilyen nagy tisztelője is vagyok Andrew Tanenbaum mesternek, kétségeim vannak a 'soros működés' ilyetén értelmezését illetően. Míg Neumann a korábbi elvek tekintetében általános, absztrakt alapelveket szögez le, ez az elv (pontosabban ez az értelmezése!) túlságosan is gyakorlatias megfontolású. Nem arról szól, hogyan építsünk számítógépeket, hanem arról, hogyan tegyük hatékonyabbá őket.

Elismerem, a bináris rendszer használatát forszírozó elv is tekinthető ilyen optimalizálási elvnek. Ennél az okfejtésnél több kellene, hogy Tanenbaum mester értelmezését kétségbe vonjam. A First Draft azonban egy harmadik értelmezését is megengedi a 'soros működés' kifejezésnek. Szerintem a 'soros' kifejezés valójában arra a megállapításra utal, hogy az EDVAC egy ún. 'szekvenciális automata' ('sequential machine').

A szekvenciális automata az elméleti számítástudományban használt modell (nem ténylegesen létező gép!), és röviden olyan rendszert jelöl, amelynek kimenetét nem csak az aktuális bemenete határozza meg, hanem a rendszer pillanatnyi állapota is (ami viszont korábbi bemeneteitől és korábbi állapotaitól függ). Például egy egyszerű matematikai függvény - mondjuk a szinusz függvény - nem tekinthető szekvenciális automatának, hiszen a függvény eredményét csakis annak aktuális bemenete határozza meg, a korábbi bemenetek nem. Egy kalkulátor a 90 fok szinuszát mindig 1-nek számítja függetlenül attól, hogy előzőleg milyen számításokat végeztünk vele.

A Neuman elvű számítógépek azonban valóban szekvenciális automaták. Egy program kimenetét nem csak az aktuális bemenet határozza meg, hanem a körülmények is, amelyek az adott számításhoz vezettek. Egy program általában olyan bonyolult rendszer, ahol a belső változók értékei éppúgy befolyásolják a program viselkedését, mint pl. az, hogy az adott számítást a program mely részéről kezdeményezték. Nem hihetjük azt, hogy egy program viselkedését csak az adott pillanatban kapott bemenet (pl. egy egér kattintás) határozza meg. Egy program működése során a korábbi események története, a hardver és szoftver környezet állapota éppoly lényeges, mint az, hogy adott pillanatban mi jelenik meg a rendszer bemenetén. Ez pedig a szekvenciális automaták jellemzője.

Univerzalitás[szerkesztés]

A szócikk szerint ez a széles körű felhasználhatóság, alkalmasság bármilyen adatfeldolgozási feladatra fogalmat takarja (eddig egyet is értek az értelmezéssel), majd zárójelben hozzáteszi: 'a számítógép univerzális Turing-gépként működik'. Ez a - sajnos széles körben elterjedt - utolsó félmondat, amire a bevezetőben a "sületlenség" kifejezéssel utaltam. A First Draft-ban sehol sem fordul elő Turing neve, sem a Turing géppel kapcsolatba hozható egyéb szerzők (Chomsky, Church, Mealy, Moore, és még sokan mások). Nem is szerepelhetnek benne, hiszen Neumann nem csak képzett matematikus volt, hanem a kiszámíthatóság témakörének elismert szakértője. Márpedig a Turing gép fogalma ezzel a témakörrel kapcsolatos.

Nem kívánom ismertetni itt a Turing-gép fogalmát, hiszen a Wikipediában kitűnő szócikk foglalkozik vele magyar nyelven is. Csak azt szeretném kiemelni, hogy problémák megoldhatóságához használt matematikai modellről van szó, amelyben elméletileg is megvalósíthatatlan fogalmak szerepelnek: pl. végtelen méretű, nem korlátos memória. A Neumann elvű számítógépek semmi esetre sem tekinthetők Turing-gépeknek, és ezzel leginkább maga Neumann volt tisztában. A matematikus szakértelmét vonja kétségbe az, aki azt kijelentést adja a szájába, hogy a Neumann elvű gépeknek Turing gépeknek kell lenniük.

Akkor hát mit jelent a Neumann elvű gépek univerzalitása. Pontosan azt, ami a szócikkben a zárójelek előtt szerepel, azaz "széles körű felhasználhatóság, alkalmasság bármilyen adatfeldolgozási feladatra". Manapság egy nyomtató vagy egy video kártya is teljesíti a többi Neumann-elvet, mégsem tekintjük Neumann-elvű számítógépnek őket. A nyomtató "csak" nyomtatni tud, a videokártya csak megjelenítésre alkalmas, de mondjuk szövegszerkesztésre egyik sem használható. Nem teljesítik a Neumann-féle univerzalitási kritériumot.

"Soros elv"[szerkesztés]

Mint fent is, olvastam, hogy itt is van egyfajta a vita a "soros elv"-ről. Alaposan végigolvasva a First Draftot, és a korabeli cikkeket (nagyon nagy támpont még Goldstine: Számítógép Pascaltól Neumannig c. könyve, Goldstine Neumann munkatársa/főnöke volt és sok hasznos visszaemlékezés van a könyvében), a soros működést az ALU-nál írja Neumann több helyen. Ennek egyszerű oka van, az akkori memória soros működésű volt (akkor még a késleltető művonalban hittek, az volt a legelérhetőbb memória, ez pedig sorosan tárolja az adatokat, volt még az ikonoszkóp szintén soros elérésű volt, és nem direkt címezhető, direkt címezhető memóriát csak néhány regiszternél használtak (ma ezt flip-flop-nak neveznénk, ami elektron csővel nem egy olcsó dolog, mert legalább 2 db. pentóda kell hozzá, szintén több helyen lehet olvasni, hogy már hamar rájöttek, hogy nem túl jó a trióda számítógép építésre, pl. Goldstine könyvében idéz egy levelezést, amiben leírja Neumann, hogy szerinte miért kéne egy másik típusú pentódát használni, mint amivel Eckerték dolgozni akarnak, viszont a pentóda drágább, főleg a kettős pentóda ami ide kellett volna). Talán pont Goldstine egyik később cikkékeben olvastam (most sajnos nem találom a forrást, de előkerítem), írja is, hogy amikor később dolgoztak és megjelentek a direkt címezhető memóriák és párhuzamos "adatbusz" (bár ez a kifejezés akkor még nem is létezett) kezdtek párhuzamos felépítésű ALU-kat használni. És ahol a First Draftban Neumann írja az ALU működését szinte végig követhető, hogy úgy javasolja felépíteni az egészet, hogy a szó bitje időben egymás után érkeznek és nem állnak rendelkezésre egyszerre a műveleti regiszterekben párhuzamosan. Nyilván ehhez hozzá jön az is, hogy a First Draftot Neumann nem arra szánta, hogy ez alapján épüljön utána egy halom számítógép, hanem egy konkrét gép felépítésével kapcsolatos javaslatokat foglalta össze egy vita anyagba. Az, hogy ebből később mi lett az már történelem.– Vidgabor vita 2021. november 19., 09:33 (CET)Válasz

Források[szerkesztés]

Tóth Gergely - Gwergilius vita 2008. október 1., 10:05 (CEST)Válasz