Egosoft X4
-
nibron #7328 Mikrokontrolleres környezetben már kábé 10 éve használjuk. Anno az volt az egyik problémám, hogy a számítási teljesítményük illetve az utasítás végrehajtás sebessége elég alacsony komplexebb feladatok megvalósításához. Ezért "összefogtunk" (cluster) egy rakás kontrollert és a feladatok elosztásával növeltük a teljesítményt. Úgy kell elképzelni, hogy van pl. 10db kontroller ami darabonként mondjuk 10Mbit sebességgel kommunikál egy IP hálózaton. Ebből ha most az ütközéseket nem számolom, ki lehet hozni 10x10Mbitet, tehát el lehet érni a 100Mbit sebességet. Illetve ha számítási teljesítményt nézünk, akkor remek példa a kriptográfia. Ott is remekül el lehet osztani a feladatot (itt a hangsúly az egyetlen feladaton van), több részfeladatra. Nagyon egyszerű példa erre az ötös lottó lehetséges variációinak "kipörgetése". Az 1.kontroller megkapja, hogy 1-10-ig állítsa elő a variációkat, a 2. 11-20-ig és így tovább. Egy master kontroller pedig összefogja a részfeladatot végzőket.
Tehát működésileg nem annyira bonyolult a probléma, sőt már nagyon régen működésben vannak különböző megvalósítások. Ilyenek pl. a szuperszámítógépek is, ahol egyetlen feladatra több ezer processzort kell összehangoltan kihasználni. A számítástechnikában erre használjuk a vízszintes skálázás kifejezést.
A jelenlegi technológiánk nem teszi lehetővé a tisztán hardveres megoldást, mivel ugyan ismerjük a kaszkádolás fogalmát (sőt pl. a PC-kben használva is vagyon), de ezt csak külön utasításkészlettel tudjuk elérni. Már 2db ugyanarra a célra használt processzornál sem tudunk különbséget tenni ha nem figyelünk oda, márpedig az a cél, hogy ne kelljen azzal foglalkozni, hogy ki mit csináljon. A CPU-FPU viszonylatában nagyon jól működik a cascade, mert ott az utasítások teljesen elkülönülnek. Az FPU-nál az utasítások F betűvel kezdődnek, így azokat az FPU hajtja végre, míg a többit a CPU. És nem is kell feltétlenül megvárniuk egymást, dolgozhatnak egyszerre párhuzamosan is. De itt elkülönül a feladat (FPU=matematikai számítás, CPU=a többi).
Mindenképpen szükséges szoftveres megoldás, mert hardveresen a feladatok algoritmizálása nem kivitelezhető, csak szoftverrel lehetséges. Magán a szoftveren belül már rengeteg lehetőség van. Mi pl. a kernel szintjén oldottuk meg. Szükségünk van egy master kontrollerre ami vezérli az összes többit, és nincs is más feladata. A programozó a masterre írja meg magát a kódot, amit a kernel szétszortíroz a többi kontroller között. Viszont maga a kód nem éppen a megszokott. Nem tartalmazza az összes rutint a-tól z-ig, hanem csak a fő történet van itt megírva. Az összes többi, (nevezzük) slave kontrollerekben van megvalósítva. Ilyen lehet pl. egy megjelenítő kontroller, egy háttértárat kezelő kontroller, kommunikációs és így tovább. A számításokat is szét lehet dobni bármennyi kontrollerre, akkor mindegyiken ugyanaz a kód fut, és csak arra várnak, hogy megkapják a feladatot. A master elküldi nekik, azok pedig végrehajtják, amikor pedig készen vannak visszaadják amit kell. Így hatalmas teljesítményeket tudunk előállítani, gyakorlatilag végtelent, mert a korlát a kontrollerek számából adódik. Ha nem elég a számuk a feladat végrehajtásához, akkor csak újabb kontrollereket kell munkába állítani. A cégnél csináltunk egy ilyen clustert. A feladat az lett volna, hogy annyi kontrollert tegyünk össze ami kiad egy szokványos PC villamos teljesítményét (akkor ez 650W körül volt ha jól emlékszem). Nem értük el ezt a teljesítményt, mert kontrollerenként kevesebb mint 1W-al kell számolni, viszont elértük azt a számítási teljesítményt amit szerettünk volna. Így is rengetegbe került. Kriptográfiai feladatot kellett ellátnia, a kontrollerekben hardveres crypt számítások vannak, és így elértük azt, hogy ami egy 4GHz-es PC-nek 1 szálon kb. 420millió évig tartana az, ezzel megvan fél órán belül.
Szóval az emberiség jelenleg is használ ilyen-olyan megoldásokat erre a problémára az, hogy az Intel is foglalkozik vele nem igazán meglepetés. Igazából pont a fordítottja lenne meglepő. Szoftveres megoldással is nagyon jó hatásfokot lehet elérni, ez már csak a saját példánkon is látszik, pedig MPU-s környezetben sokkal nehezebb a feladat mivel ezekben a CPU-k nem érhetők el közvetlenül csak perifériákon keresztül. Mégis remek megoldásokat lehet elérni. PC-s környezetben eleve megoldott egy rakás feltétel ami az MPU-knál lehetetlen. Pl. a közös memóriahasználat. Ha pedig már megoldott a feladatok kiutalása, akkor már a programozóknak sem kell különösebben odafigyelniük a programozás többségében. Még a szoftvertervezés sem változik miatta, mert a hagyományos tervezésnél is modulszerűen kell dolgozni. az pedig, hogy melyik modul fizikailag hol fut, a többséget nem érdekli.
Tehát az általad említett videóvágást is meg lehet úgy írni, hogy a programozó egy szálban gondolkodjon, de maga a végrehajtás bármennyi magon történjen. Sőt még egyszerűbb is a feladata, mert nem kell neki az egészet egyszerre megcsinálnia, a fő szál jóval egyszerűbb. Ott csak a feladatot el kell küldeni egy rutinnak ami majd szortírozza, hogy kivel hajtassa végre. Egyébként nagyon jó példát hoztál fel, mert egy nagyon hosszú szekvenciális folyamatról van szó ahol rengeteg utasítást kell végrehajtani. És el lehet végezni egyszerre az elejét, közepét, végét. Pont az ilyen nagyon jól párhuzamosítható feladatokra lehet egyszerűen használni ezt a technikát.
Játékok esetében is nagyon sok egymástól független párhuzamos feladat van, ami a fő száltól teljesen elkülöníthető. A háttérszimuláció akár több részre bontva, a megjelenítés, ennek előkészülete szintén bármennyi szálon szétbontva.
Összességében ennek a technológiának a használata nem okoz extra melót (ha mégis, akkor nagyon rosszul csinálják), egy kissé másként kell gondolkodni. Sőt még egyszerűbb is, mivel nálunk a gyakorlat bebizonyította, hogy a többszálas programozás az összes sallangjával sokkal bonyolultabb (nekem kell a szálakat kezelnem, critical section-ok, exclusive cuccok elosztott használata, események, flag/signal, mutexek, semaphorok összehangolt kezelése, és még nagyon sok dolog). Itt viszont csak egyetlen rutinhívás. Egyetlen dologra kell odafigyelni: a kiosztott részfeladatok nem egyszerre és nem szekvenciálisan készülhetnek el, de ez a többszálas technikában is létezik, tehát nem egy új dolog.