Know-how, előadás, párhuzamos alkalmazások fejlesztése

Abstract: A fejlesztés a párhuzamos alkalmazások fő szakaszból áll: bomlás, azonosító információ közötti függőségek feladatokat, részfeladatokat méretezés és terheléselosztás minden processzor.

bomlás

Bomlással a probléma megosztását viszonylag független részekké (subtasks) értjük. A probléma bomlása többféle módon hajtható végre: feladatokkal, adatokkal, információáramlással.

A feladatok bomlása (funkcionális bomlás) különböző funkciókat rendel a különböző áramlásokhoz. Például a dokumentum szerkesztését végrehajtó alkalmazás a következő funkciókat tartalmazza: Ellenőrizze a helyesírásellenőrzést. ellenőrizze a CheckPuncto írásjeleket. Szöveg formázása a kiválasztott formátumstílusok szerint. a CalcStat dokumentumra vonatkozó statisztikák kiszámítása. Mentse el a SaveChanges fájlt, és küldje el a dokumentumot a SendDoc e-mailen keresztül.

A funkcionális bomlás az alkalmazás munkáját részfeladatokra szünteti meg oly módon, hogy minden egyes részfeladat külön funkcióhoz kapcsolódik. De nem minden művelet végezhető párhuzamosan. Például egy dokumentum mentése és egy dokumentum küldése csak az előző lépések végrehajtása után hajtható végre. A statisztikák formázása és gyűjtése párhuzamosan, de csak a helyesírási és írásjelek befejezése után végezhető el.

Know-how, előadás, párhuzamos alkalmazások fejlesztése

Az információáramlás bomlása olyan altitesteket oszt ki, amelyek egyfajta adatot használnak. A vizsgált példában a következő részfeladatok különböztethetők meg:

  1. A dokumentum tervezetének használata (helyesírás és írásjelek):
  2. A korrigált dokumentummal való munkavégzés (statisztika formázása és gyűjtése);
  3. A kész dokumentummal való munkavégzés (mentés és küldés);

Az adatok bontásakor minden egyes részfeladat az adatfragmentummal dolgozik, és teljesíti az összes műveletlistát. Ebben a példában az adatok bomlása alkalmazható olyan feladatokra, amelyek egy dokumentum töredékével dolgozhatnak. Így a CheckSpelling funkciói. CheckPuncto. CalcStat. A formátum egy részfeladatba kerül, de a részfeladat több példányát hozza létre, amelyek párhuzamosan működnek a dokumentum különböző töredékeivel. A SaveChanges és SendDoc funkciók különálló részfeladatok, mivel nem tudnak dolgozni a dokumentum egy részével.

Az adatok bomlása

Az adatok bontásakor az egyes részfeladatok ugyanazokat a műveleteket hajtják végre, de különböző adatokkal. Számos párhuzamos adatfeladatban többféle módon lehet elválasztani az adatokat. Például, a feladat mátrix szorzás lehetővé teszi szétválasztása a vonalak - minden szál kezeli egy vagy több sort a mátrix, az oszlopok - minden szál kezeli egy vagy több oszlopot, hanem a blokkok egy előre meghatározott méretű.

A két részfeladat elválasztásának két alapelve statikus és dinamikus. Statikus bomlással az adatfragmenteket a feldolgozás előtt szálakhoz rendeltük, és rendszerint ugyanolyan számú elemet tartalmaznak minden egyes szálhoz. Például az elemek tömbének felosztása az indexek egyenlő tartományaiban elvégezhető a folyamok (tartomány-partíció) között.

A statikus particionálás fő előnye a patakok munkájának függetlensége (nincs adatkritikai probléma), és ennek következtében nincs szükség szinkronizálási eszközökre az elemek eléréséhez. A statikus bomlás hatékonysága csökken az adatelem feldolgozás különböző számítási komplexitásával. Például egy i-elem feldolgozás feldolgozási terhelése függhet az elemindextől.

Know-how, előadás, párhuzamos alkalmazások fejlesztése

A csoportonkénti bontás egyenlőtlenségekhez vezet a különböző áramlások terhelésében. A terheléskiegyenlítés csökkenti a párhuzamosság hatékonyságát. Bizonyos esetekben a bomlás lehet javítani és a statikus partíció, ha előre ismert, milyen elemek nagyobb számítási komplexitás és néhány kisebb. Például, ha a számítási komplexitás függően elem indexet, teszi a körkörös bomlási szintek a energiaáramlásokat. Az első szál feldolgozza az összes egyenletes elemet, a második szál feldolgozza az összes páratlanat.

Általános esetben, amikor a feldolgozó elemek számítási komplexitása nem ismert előre, a patakok terhelésének egyensúlya dinamikus bomlást eredményez.

Know-how, előadás, párhuzamos alkalmazások fejlesztése

Dinamikus lebomlással minden patak. részt vesz a feldolgozásban, hozzáfér az adatblokkhoz (rész). Az adatblokk feldolgozása után az áramlás a következő részhez érkezik. A dinamikus bomlás megkívánja az adatstruktúrához való menetes hozzáférés szinkronizálását. A blokkméret határozza meg, hogy a cérna milyen mértékben fér hozzá a struktúrához. Néhány dinamikus bomlási algoritmus növeli a blokk méretét a feldolgozás során. Ha a szál gyorsan elemzi az elemeket, akkor a blokk mérete növekszik.

Subtasks skálázása

A méretezhetőség az összes rendelkezésre álló számítási erőforrás hatékony felhasználása. A párhuzamos alkalmazásoknak készen kell állniuk arra, hogy holnap nagyszámítógépes képességekkel rendelkező rendszert futtatnak. Az alkalmazás skálázhatósági tulajdonsága szorosan kapcsolódik a kiválasztott algoritmushoz a probléma megoldásához. Egy algoritmus nagyon jól párhuzamos, de csak két subtasks, egy másik algoritmus lehetővé teszi, hogy kiválassza a tetszőleges számú subtasksot.

Az alkalmazás skálázhatóságának elengedhetetlen feltétele az algoritmus paraméterezésének lehetősége a rendszerben lévő processzorok számától és a számítógépes rendszer aktuális munkaterhelésétől függően. Ez a paraméterezés lehetővé teszi az algoritmus végrehajtásának adott körülmények között allokált részfeladatok számának módosítását. A modern párhuzamos programozási platformok biztosítják az automatikus terheléskiegyenlítés eszközeit (szálösszesítés).

Adathordozó probléma

Az adatfutás problémája a következő feltételek mellett merül fel:

  1. Több szál közös erőforrással működik.
  2. A végeredmény a különböző szálak parancsszekvenciáinak végrehajtási sorrendjétől függ.

Az adatrészlet problémájának szemléltetéséhez vegye figyelembe a következő részletet. A két szál megjeleníti az Msg közös változó értékét.

Az Msg változó gyakori - egy szálon lévő változó módosítása egy másik szálon látható lesz. Az áramlások párhuzamos működése során a kimenetet az operátorok meghatározott végrehajtási sorrendje határozza meg.

Ha az első szál működését a második szálat működtetők előtt hajtják végre, pl. a (1) - (2) - (3) - (4) szekvenciával, akkor kapjuk:

Ha a végrehajtás a nyilatkozatok egy adatfolyam üzemeltetők beavatkozni másik szál, például a szekvenciát (1) - (3) - (2) - (4), megkapjuk a következő:

Az adatfutás problémája nemcsak több operátor végrehajtása, hanem egy operátor végrehajtása során merül fel. Vegye figyelembe a következő esetet. Mindkét szál egy operátort hajt végre egy közös típusú x változón:

Ez az üzemeltető a következő műveleteket vállalja:

Amikor egy szálat egy szál parancsszekvenciája végrehajt, egy másik szál megzavarhatja a műveletet. A végeredmény a parancsszekvenciák végrehajtási sorrendjétől függ. Ha a szálak egymás után végrehajtják az összegzést, akkor kapjuk a végeredményt: 10. Ha a szálak egyidejűleg végrehajtják az összegzést, a korai változás később törlődik:

Egy másik "csapda" a többszálas feldolgozásban a dinamikus adatstruktúrákkal (listák, szótárak) végzett munka. Az elemek dinamikus adatstruktúrákhoz való hozzáadása és eltávolítása egy módszerrel történik:

A módszerek végrehajtása számos intézkedést tartalmaz. Például ha egy elemet felveszi a listára, meg kell adnia az elemet az aktuális indexhez (index), és az indexet áthelyezni a következő pozícióba. Ahhoz, hogy egy elemet egy téma hozzáadásával helyesen végre lehessen hajtani, szükséges, hogy más szálak várják a felsorolt ​​manipulációk befejezését.

Az adatkritikai probléma megoldásához kölcsönösen kizárólagos hozzáférést kell biztosítani azokhoz a parancssorokhoz, amelyekben a megosztott erőforrást használják. A kölcsönös kizárólagosság azt jelenti, hogy minden egyes időpontban csak egy szál dolgozik az erőforrással. Más szálak letiltva várják az első szálat, hogy befejezze munkáját. A kód azon töredéke, amelyhez kölcsönösen kizárólagos hozzáférést kell biztosítani. az úgynevezett kritikus szakasz.

Az adatfajták problémája nem mindig fordul elő, ha egy közös változóval dolgozunk. Például a következő töredékben két szálat hajtanak végre a megosztott változó módosítása a megszüntetés előtt, és a harmadik szál ezt az értéket olvassa.

Ebben a példában a hurok harmadik szála "elvárja", hogy legalább egy szálat töltsön ki. A versenyadatok problémái nem merülnek fel, annak ellenére, hogy három szál közös változóval dolgozik. A szálak sorrendje nem befolyásolja a végeredményt. Az áramlások által bevezetett változások nem ellentmondanak egymásnak.