Bevezetés a párhuzamos programozás Technology

Párhuzamos számítási - rendezésének módja számítástechnika, ahol a programokat úgy tervezték, mint egy sor interaktív számítógépes folyamat fut egyszerre.







Vannak különböző módon csinál párhuzamos számításokat: minden számítási folyamat megvalósítható, mint egy folyamat az operációs rendszer vagy a számítási folyamatok lehetnek egy sor szálait végrehajtási folyamat keretében. Takarmány (pontosabban az áramlás végrehajtás) - a legkisebb egység a feldolgozás, amelynek végrehajtását lehet rendelni az operációs rendszer kernel. Többszörös adatfolyamok végrehajtás létezhet ugyanazon folyamat és a források megosztása, mint például a memória, míg a folyamatok nem osztja ezeket a forrásokat. Párhuzamos alkalmazások végezhető fizikailag vagy egymást követően egyetlen processzor - a sorban által interspersing lépéseket minden egyes végrehajtásakor a számítási folyamatot vagy párhuzamos - kiosztása az egyes számítási folyamatot egy vagy több processzort (vagy közel a elosztott számítógép-hálózat).

A fő nehézség a tervezés párhuzamos programok - A helyes sorrend közötti kölcsönhatások különböző számítási folyamatok és megosztását források, mint például a memória és a perifériák.

Egyes párhuzamos programozási rendszerek közötti adatátvitelt alkatrészek rejtett a programozó, míg mások meg kell határozni azt explicit módon. Explicit kölcsönhatások lehet osztani két típusa van:

1. Az interakció révén osztott memória (például Java, C #). Ez a fajta párhuzamos programozás rendszerint valamilyen formában ellenőrzés koordinálja a rögzítés összekapcsolt patakok.

2. Kommunikáció üzenetek küldésével. Üzenetek történhet aszinkron vagy módszerrel „randevú”, amelyben a feladó blokkolt, amíg az üzenet nem kerül kézbesítésre. Aszinkron üzenetküldés lehet megbízható (szállítva) vagy megbízhatatlan. Párhuzamos rendszerek alapján üzenetek cseréje, gyakran könnyebb megérteni, mint a megosztott memóriát rendszerek, valamint általában véve a jobb módszer párhuzamos programozás. Üzenetek lehet hatékonyan megvalósítani szimmetrikus multiprocesszorok megosztott memória koherencia, és nélküle.

Van elég sok különböző technológiák párhuzamos programozás. Sőt, ezek a technológiák nem különböznek annyira programozási nyelvek, mint építészeti megközelítés az építési párhuzamos rendszereket. Például egyes technológiák megkövetelik az építési párhuzamos döntések alapján több számítógép (mindkettő egy és különböző típusú), mások szerint ez volt a munkája egy gépen több processzormag. Jelenleg a fő program létrehozásának párhuzamos programozási eszközök:

1. OpenMP használt párhuzamos megosztott memória rendszerek (például, számítógépek modern többmagos CPU-k);

2. MPI (Message Passing Interface) egy szabványos üzenetkezelő rendszerek közötti párhuzamos végrehajtás során alkalmazott folyamatok fejlesztésére irányuló programok szuperszámítógépek;

3. POSIX szálak a szokásos végrehajtását végrehajtási szál;

4. A Windows operációs rendszer beépített támogatást többszálú alkalmazások C ++ API-szinten;

5. PVM (Parallel Virtual Machine) lehetővé teszi, hogy összekapcsolják a heterogén hálózat számítógép csatlakozik egy közös számítási erőforrások.

Alapuló rendszerek több számítógép osztályába tartoznak rendszerek elosztott számítástechnika. Ezeket a megoldásokat használni hosszú ideig. A legszembetűnőbb példája az elosztott számítástechnika - MPI (Message Passing Interface - Message Passing Interface). MPI a leggyakoribb szabványos adatcsere felület párhuzamos programozás, van annak végrehajtását a nagyszámú számítógépes platformokon. MPI biztosít a programozó egyetlen kölcsönhatás mechanizmusa az ágak egy párhuzamos alkalmazása, függetlenül attól, hogy a számítógép-architektúra (egyprocesszoros / multi általános / önálló memória), a kölcsönös elrendezése az ágak (ugyanazon a processzoron vagy más).

Mivel MPI célja elsősorban a rendszer külön memória, akkor használd szervezni egy párhuzamos folyamat egy rendszerben osztott memóriát rendkívül nehéz kivitelezhetetlen. Azonban semmi sem akadályozza meg, hogy nem MPI-megoldás egyetlen gépen.

De párhuzamos programozási rendszer fut egy gépen, kezdett kialakulni a közelmúltban. Persze, ez nem teljesen új ötlet, de ez volt az Advent a többmagos rendszerek a piacon a személyi számítógépek, mobil eszközök, mint például a OpenMP technológia fejlődött.

Fontos, hogy a párhuzamos programozás technológia támogatja a képességét, hogy egy párhuzamos programot fokozatosan. Természetesen az ideális párhuzamos program azonnal levelet párhuzamosan, talán valami funkcionális nyelv, ahol az a kérdés, nem éri meg a párhuzamosság. A gyakorlatban azonban az szükséges, hogy fokozatosan Párhuzamosítsa írásbeli összhangban azzal a céllal, a teljesítmény növelésére. Ebben az esetben a OpenMP technológia nagyon alkalmas erre. Ez lehetővé teszi a választást az alkalmazás, a leginkább szükségük van a párhuzamosítás helyen az első helyen, hogy ez párhuzamos őket. A folyamat kialakulásának párhuzamos változat lehet szakítani, hogy készítsen a köztes változata a program, visszatérünk rá, ha szükséges. Ezért különösen OpenMP technológia vált igen népszerűvé.

OpenMP (Open Multi-Processing) - egy sor fordító irányelvek könyvtári rutinok és a környezeti változók, amelyek a programozni többszálú alkalmazások többprocesszoros rendszerekben megosztott memóriát.

Kidolgozása az OpenMP leírásban több nagy gyártó a számítógépes hardver és szoftver, akinek a munkáját szabályozza egy non-profit szervezet, OpenMP Architecture Review Board (ARB).







OpenMP végrehajtja párhuzamos számítási keresztül threading, ahol a „fő» (master) szál létrehoz egy sor szolga (slave) áramlik, és feladata a kerületek között. Feltételezzük, hogy a szálak egymással párhuzamosan hajtjuk végre egy gép több processzor (a processzorok száma nem kell nagyobb vagy egyenlő, mint a szálak számának).

Feladatokat a patakok párhuzamosan, valamint a kért adatokat elvégezni ezeket a feladatokat ismertetjük segítségével speciális előfeldolgozó direktívák a nyelv - pragmájához. Például kód rész Fortran nyelven, hogy végre több szálon, amelyek mindegyike saját példányát a változó N, előtte a következő utasítást. $ OMP PÁRHUZAMOS magán (N)

Mennyiségű új hullámra kell beállítani a program maga hívja könyvtár eljárást, mind külsőleg, környezeti változók használatával.

kulcsfontosságúak OpenMP

1. A kialakítás létrehozására áramlási (párhuzamos irányelv);

2. Az építési közötti munkamegosztás flow irányelv (DO / a és szakasz);

3. A szerkezet működésének szabályozására az adatok (kifejezések privát és közös változók az osztály meghatározása memória);

4. A szerkezet a szálszinkronizációt (irányelv kritikus, atomi és barrier);

5. Support eljárás futásidejű könyvtár (például, omp_get_thread_num);

6. A környezeti változókat (például OMP_NUM_THREADS).

OpenMP használ párhuzamos végrehajtás modell „villás csatlakozni”. OpenMP program kezdődik, mint egy végrehajtási szál, az úgynevezett kezdeti áramlás. Amikor az áram megfelel a párhuzamos szerkesztés, létrehoz egy új szál köréből is, és számos további fluxus, és képes lesz a mester az új csoportban. Minden tagja az új csoport (beleértve a master) végrehajtja a kód belsejében a párhuzamos konstrukciót. van egy implicit gát végén a párhuzamos konstrukció. Miután a párhuzamos struktúrák továbbra végrehajtását felhasználói kód csak a fő stream. A párhuzamos régió lehet ágyazva más párhuzamos régiókban, ahol minden egyes folyam az eredeti lesz a fő tartományában menet csoport. Beágyazott régiók viszont régiókat tartalmaznak mélyebb szintű fészkel.

A szálak száma a csoportban, párhuzamosan futó, lehet ellenőrizni több módon. Egyikük - használja a környezeti változó OMP_NUM_THREADS. Egy másik módja - hívja omp_set_num_threads () eljárást. Egy másik módja - a kifejezést használni num_threads összefüggésben az irányelv párhuzamos.

Ebben a programban, a két tömbök (a és b) legfeljebb tíz párhuzamos szálakat.

int main (int argc, char * argv [])

Ez a program segítségével kell összeállítani gcc-4.4 és újabb és -fopenmp zászló. Nyilvánvaló, hogy ha eltávolítja a kapcsolatot omp.h header fájlt, és arra is felhívja OpenMP SETUP funkció, hogy a program összeállításához minden C fordító, mint egy normál szekvenciális programot.

OpenMP támogatja sok modern összeállítói:

1. Sun Studio fordítóprogramok támogatja a formális specifikáció - OpenMP 2.5 - jobb teljesítményt a Solaris; Linux támogatás tervezik a következő kiadásba.

3. GCC 4.2 támogatja OpenMP, és néhány disztribúció (például Fedora Core 5 gcc) többek között támogatja a saját verzióját a GCC 4.1.

4. Az Intel C ++ Compiler, beleértve az Intel Cluster OpenMP verzió programozási elosztott memória rendszerek.

Message Passing Interface (MPI, Message Passing Interface) - alkalmazásprogramozási felület (API) az információ átadását, amely lehetővé teszi, hogy üzeneteket váltsanak közötti folyamatok, amelyek végrehajtják egyetlen feladat. Designed by William Grouppom, Evin Lasky (Eng.) És mások.

MPI a leggyakoribb szabványos adatcsere felület párhuzamos programozás, van ennek végrehajtásában számos számítógépes platformokon. Használt programok fejlesztésére, a klaszterek és szuperszámítógépek. A fő kommunikációs eszköz folyamatok MPI át üzeneteket egymásnak. Szabványosítása MPI érintett MPI fórum. Az MPI szabvány írja le üzenetküldő felületen kell támogatni mind a platform és a felhasználói alkalmazások. Jelenleg számos ingyenes és kereskedelmi megvalósításai MPI. Vannak megvalósítások Fortran 77/90, C és C ++ nyelven.

MPI elsődlegesen rendszerek elosztott memória, azaz amikor az adatátviteli költségek magasak, míg OpenMP összpontosított rendszerek osztott memória (megosztva többmagos Ash). Mindkét technika használható együtt annak érdekében, hogy optimális felhasználása magból cluster rendszer.

A legtöbb modern MPI implementáció támogatása 1.1-es verziója. Normál MPI 2.0 támogatja a legtöbb jelenlegi megvalósítása azonban bizonyos funkciók nem hajthatók végre, amíg a végén.

adás és vétel közötti üzenetek egyes folyamatok;

kollektív interakciós folyamatok;

interakciós folyamatok csoportok;

végrehajtás topológiák folyamatok

Dinamikus termelés és irányítási folyamatokat;

egyirányú kommunikáció (/ fel);

A párhuzamos bemenet és kimenet;

kiterjesztett közös műveletek (folyamatok végezhet együttes tevékenység nem csak egyetlen eszköz, hanem több kommunikátorok).

Az alapvető mechanizmus közötti kommunikációs MPI folyamatok az átviteli és üzenetek fogadását. Üzenet hordozza a továbbított adatok és információk, hogy a fogadó fél elvégzésére mintavételi technika:

1. Poster - rank (szám per csoport) az üzenet küldője;

2. az átvevő - a rangot a címzett

3. jelzés - lehet, hogy külön különböző típusú üzeneteket;

4. A kommunikátor - ez a folyamat kódszáma.

továbbítására és fogadására műveletekre lehet blokkolni és nem blokkolja. A nem-blokkoló meghatározott műveletek készségét teszt funkció és a készenléti működését.

Az alábbiakban egy példa a program számának kiszámítására π C nyelvet MPI:

// Csatlakoztassa a szükséges fejlécek

// csatlakoztatása MPI header fájlt

// funkció közbenső számítások

kettős f (dupla a)

vissza (4,0 / (1.0+ a * a));

// Mentesség alrendszer MPI

A legelterjedtebb implementációja MPI dátum:

MPICH - a leggyakoribb végrehajtása ingyen, fut UNIX-alapú rendszerek, és a Windows NT

Ez támogatja a különböző kommunikációs rendszerek (beleértve Myrinet).

WMPI - MPI végrehajtása Windows

MPI / PRO for Windows NT - kereskedelmi végrehajtása Windows NT

Intel MPI - kereskedelmi végrehajtása Windows / Linux

Microsoft MPI része a Compute Cluster Pack SDK. Ez alapján MPICH2, de olyan további feladat eszközök. Támogató az MPI-2 specifikáció.

HP-MPI - kereskedelmi végrehajtását a HP

SGI MPT - fizetett MPI könyvtár SGI

Mvapich - ingyenes megvalósítása MPI számára Infiniband

Nyílt MPI - ingyenes megvalósítása MPI, az örökös LAM / MPI

Oracle HPC ClusterTools - ingyenes megvalósítása Solaris SPARC / x86 és Linux alapú Nyitott MPI

MPJ - MPI for Java

POSIX Threads - POSIX szabvány végrehajtása menet, amely meghatározza egy API létrehozására és irányítására.

Könyvtárak alkalmazzák ezt a szabványt (és funkciók a standard), amelyeket általában a pthreads (funkciók A prefix «pthread_»). Bár a legismertebb lehetőség Unix-szerű operációs rendszerek, mint a Linux vagy Solaris, de van még a megvalósítása Microsoft Windows (pthreads-W32)

Pthreads meghatároz egy típusok és funkciók a C programozási nyelv. Header file - pthread.h.

1. pthread_t - áramot leíró;

2. pthread_attr_t - listája menet attribútumokat.

Flow Control funkció:

1. pthread_create () - létrehozása egy menet révén;

2. pthread_exit () - áramlás befejezése (áramlási funkciót kell hívni a végén);

3. pthread_cancel () - fluxus törlési;

4. pthread_join () - megakadályozza a végrehajtását egy szál másik szál megszűnése meghatározott függvényhívás;

5. pthread_detach () - kiadja a források által elfoglalt patak (ha az adatfolyam végezzük, a kibocsátás források fordul elő, annak befejezését követően);

6. pthread_attr_init () - inicializálni áramlási szerkezet attribútumokat;

7. pthread_attr_setdetachstate () - jelzik, hogy a rendszer, amely befejezését követően az áramlás akkor automatikusan kiadja a források által elfoglalt patak;

8. pthread_attr_destroy () - felszabadítja a memóriát a adatfolyam attribútum szerkezetét (elpusztítani leíró).

Funkciók szálszinkronizációt:

2. pthread_mutex_init (), pthread_mutex_destroy (), pthread_mutex_lock (), pthread_mutex_trylock (), pthread_mutex_unlock ();

3. pthread_cond_init (), pthread_cond_signal (), pthread_cond_wait ().

Példa a jelfolyamokat nyelv a C:

static void wait_thread (void)