Párhuzamosítás használó program OpenMP
OpenMP - a könyvtár Fortran programozási nyelv, C, C ++, lehetővé teszi, hogy párhuzamosan fut kódrészlet többprocesszoros rendszerekben, illetve a feldolgozó HyperThreading. Épített gcc fordítóval verzió óta 4.2. Kifejlesztett aktív részvételével Intel, amelyért nagyon köszönöm.
Néhány szabály, hogyan kell aktiválni ezt a módot:
A párhuzamosítás lehet belépni a földön, azaz egy bizonyos blokk kerül végrehajtásra többször (a felhasználó által megadott), vagy hurkok. Az első esetben nem fogjuk megállítani, akkor olvassa el a OpenMP_talk bemutatót. Kitérünk csak párhuzamosítását hurkok.
Ebben a példában, a ciklus végrehajtásra kerül két stream, így lehetetlen előre meghatározni a sorrendet, amelyben az i változó történik a ciklus törzsének. Ezért szükséges, hogy megszabaduljon attól függően, az előző lépésben.
Például, ha van egy ilyen ciklus:
Meg kell átalakítható formában:
Nagyon gyakran találtam egy ilyen eset:
Részben ave felhalmozódik értékek és függ iteráció. Ha fut a program párhuzamos módban, akkor kapnak a különböző válaszokat. Ahogy én látom, az a tény, hogy annak érdekében, hogy hozzáadott értéket a változó ave A [i]. a memóriából a regiszter értékét átmásolja ave. foglalta, majd az új értéket a memóriában tárolt részét a változó. A kettő között az olvasás és írás más eljárás is rögzíthet új foglalta értéket, amely akkor fog veszni, és nem veszik figyelembe.
Elszámolása az esetben hívják csökkentése, valamint nyilvánították a következő változókkal:
Ezután minden egyes változó lista létrehozása és inicializáljuk a helyi másolási művelet szerinti op - +, *, - (páratlan és / nem) 0, 1, 0, ill. Miután ez a számítás együtt a helyi másolatát globális változót.
Így az előző példában a beírást a következő:
Ha azt szeretnénk, hogy egy véletlenszám-generátor a hurkon belül, hogy megy a párhuzamosítás, szükséges, hogy legyen nagyon óvatos, mert ha használják sorozata pszeudo-véletlen számok, akkor fedik egymást. Részletek vannak írva OpenMP_talk.
Tehát, ha készen áll a programozási ciklus párhuzamosság. Alapvető szabályok -, hogy megszabaduljon a függés az iteráció, kívánatos belül használni hurok csak lokális változók ciklus szorosan figyelemmel kíséri a feladatok globális változók (kiosztani ezeket az eseteket a csökkenés). Ügyeljen arra, hogy hasonlítsa össze az eredményeket előtt és után.
Figyelem! Én nehezen létrehozásával és törlésével dinamikus objektumok a hurkon belül, ezért javasoljuk, hogy ezeket az ügyleteket túl.
Optimális teljesítmény a számítógép!