# Soros és párhuzamos egymás tükörképei

„No de hát az örvényféreg esetében a gyors, párhuzamos megoldást végül is sikeresen leprogramoztuk soros feldolgozáson alapuló számítógépes nyelven!” – mondja a gyors észjárású kötekedő. Igen, ez a harmadik fontos gondolat: a soros és a párhuzamos megoldás átalakítható egymásba. Egy soros feldolgozás megvalósulhat egy párhuzamos rendszeren és fordítva. Agyunk ezt a megoldást használja is majd a logikus, tudatos gondolkozás létrehozásához.

A fenti átalakíthatóságot, ekvivalenciát, Turing bizonyította is, amikor megalkotta a sejtautomatákon alapuló általános számítógépek elméletét. A sejtautomaták bár párhuzamosan működnek, létre lehet rajtuk hozni egy parancsokat sorosan értelmező, programokat és ezáltal logikai kiértékeléseket végrehajtó számítógépet, mely minden feladatot meg tud oldani amire programot lehet írni (aza algoritmizálható).
A két megoldás tehát egyenlő (az már egy másik kérdés, hogy irgalmatlan különbségek vannak a sebességben). Azaz fordítva is igaz az átalakíthatóság, egy sorosan, programokat futtató rendszer is képes párhuzamos rendszereket, például a híres Életjáték sejtautomatát futtatni. Ennek számtalan változata érhető el és telepíthető otthoni számítógépeinkre . Fejlettebb verziói azt is lehetővé teszik, hogy nyilvánosan elérhető szerverekről letöltsünk mások által létrehozott induló sejtmintázatokat és azokat futtassunk. Történetesen valaki vette magának a fáradtságot es egy működő Turing gépet hozott létre az Életjátékban. Ez egy hatalmas szerkezet 36549 sejtből áll és egy 1700x1700-as térben fut. Ennek megfelelően igen lassan futhat, hiszen minden lépéshez ki kell értékelni az 17002 elemet, ami közel három millió kiértékelés, kb. 30 millió feltételvizsgálat. Ez persze már egy kissé réteg ízlés, hogy egy Turing gépen -soros számítógépünkön- futtassunk egy programot, mely az Életjáték párhuzamosan működő sejtjeit szimulálja, amik nekünk majd egy Turing gépet szimulálnak. Egy egyszerű egész szám összeadás, amit számítógépünk CPUja (processzora) 0.38 nanosecundum alatt elvégez a szimulált Turing gép számára becslésem szerint 2-3 napra lenne szüksége (de lehet, hogy ennél több időre). Szóval látszik, hogy bár elméletileg a két megközelítés ekvivalens, gyakorlatilag az időteher miatt mégsem. Ennek ellenére kihasználtuk ezt a SOROS-PÁRHUZAMOS egyenlőséget amikor az örvényféreg program esetében a párhuzamos feldolgozást egy, soros számítógépünkön futó egyszerű kóddal számítottuk ki (egyenlet 1) ami igazán elvégezte a párhuzamosítást. Mivel itt aprócska sejthálózatról volt szó, a kód gyorsan tudott futni.

Nem így van ez a sokrétegű Deep-Learning hálózatok esetében, ahol már nagyon sok sejtet kell modellezni. Egy rutin PCn egy komolyabb tanulóhálózat tanítása igen sokáig tartott. Aztán rájött valaki, hogy a számítógépes játékokhoz fejlesztett videokártyák, amikbe rengeteg viszonylag buta processzort építettek - hogy ezek mindegyike a kép egy részletét számolja, PÁRHUZAMOSAN – remekül használhatók mesterséges neuronhálózatok futtatására. El is kezdték használni őket erre a célra, amire persze rámozdultak a videokártya gyártók és kimondottak mesterséges neuronhálózatok modellezésére alkalmas több száz vagy akár több ezer párhuzamosan dolgozó processzorokat használó kártyákat fejlesztettek, a TPU-kat (Tenzor Processing Unit). Azaz az eredetileg sorosan működő számítógépekben megjelentek párhuzamosan működő elemek.

Lassan eljutunk oda, mi miatt is vakartam én a fejemet 30 évig? Amiatt, hogy a konnekcionista hálózatok nagyon szépen leírják az érzékszervekből érkező jelek hatékony és párhuzamos feldolgozását, sokféle tanulást és memória előhívást az agyban, de a tudatosan, lépésenként, algoritmikusan végzett emberi gondolkodás (serial, soros) nem lehet ilyen módszerekkel elképzelni. Ott elvont fogalmakkal végzünk műveleteket, olyanokkal is, amikkel még sosem találkoztunk. Erre pedig a PDP hálózatok nem képesek, hiszen példákból tanulnak és nem képesek szabályokat létrehozni és használni. Mint majd azt a tudatosság kialakulásáról szóló negyedik részben látni fogjuk, az emberi agy prefrontális kérge (homloklebeny) úgy tűnik képes arra, hogy az adódó feladatok függvényében a feladatok megoldása során megfelelő sorrendben összekösse az agykéreg alacsonyabb szintű, párhuzamosan működő területeit, és ezzel egy soros feldolgozást valósítson meg, mely szükséges az algoritmikus, lépésekből álló gondolkodáshoz, az érveléshez és logikához. Azaz, hasonlóan ahhoz ahogy soros számítógépeinkben megjelentek a párhuzamosan dolgozó modulok, az eredetétől fogva párhuzamosan dolgozó agyban is feltűnt egy modul, mely sorban, algoritmikusan képes meghívni a párhuzamosan működő agyi feldolgozó területeket átadva nekik az előző kör eredményeit.
Van még egy fontos különbség a klasszikusan sorosan működő számítógép és a jórészt párhuzamosan működő agy felépítése között. Neil Gershenfeld az MIT professzora azt mondja, Turing és a sokak által a XX. század Einstein után legnagyobb elméjének tartott Neumann János, nagy hibát vétett, amikor a számítógépet megtervezte. A számítógépben ugyanis a műveleteket végző processzor (CPU) és a memória elkülönül. A számítási idő jelentős részét a processzor azzal tölti, hogy a memóriából vagy a memóriába lapátolja az adatokat. A modern processzorokban az adatmozgatás csökkentésére manapság már gyorsabb cache memóriákat és cache vezérlőket használnak, de a problémát ez csak részben orvosolja. A neuronhálózatok esetében viszont a feldolgozás és a memória együtt történik és ugyanott található. A „műveleteket” az idegsejtek dendritjei és sejtteste végzi, a memória pedig a szinapszisok erősségében tárolódik. Ezáltal még a viszonylag lassúcska idegsejtek is képesek egy gyors agyi feldolgozás megalapozására. És ugye ez is distributed, elosztott feldolgozás, hiszen az adatok a számítási struktúrában vannak elosztva, szétszórva.

Szerző: Gulyás Attila

Soros vs. párhuzamos feldolgozás Az űrhajós meséje: a biológia tervrajz helyett programot használ