Megosztás a következőn keresztül:


Migrálás az OpenMP-ről az egyidejűségi futtatókörnyezetbe

Az egyidejűségi futtatókörnyezet számos programozási modellt tesz lehetővé. Ezek a modellek átfedhetik vagy kiegészíthetik más kódtárak modelljeit. Az ebben a szakaszban található dokumentumok összehasonlítják az OpenMP-et az Egyidejűség futtatókörnyezetével, és példákat nyújtanak arra, hogyan migrálhatók a meglévő OpenMP-kódok az egyidejűségi futtatókörnyezet használatára.

Az OpenMP programozási modellt nyílt szabvány határozza meg, és jól definiált kötésekkel rendelkezik a Fortran és a C/C++ programozási nyelvekhez. Az OpenMP 2.0-s és 2.5-ös verziói, amelyeket a Microsoft C++ fordító támogat, jól alkalmazhatók az iteratív párhuzamos algoritmusokhoz; vagyis párhuzamos iterációt végeznek egy adattömbön. Az OpenMP 3.0 az iteratív tevékenységek mellett támogatja a nem iteratív tevékenységeket is.

Az OpenMP akkor a leghatékonyabb, ha a párhuzamosság foka előre meghatározva van, és megfelel a rendszeren elérhető erőforrásoknak. Az OpenMP-modell különösen jó egyezés a nagy teljesítményű számítástechnika esetében, ahol nagyon nagy számítási problémák vannak elosztva egy számítógép feldolgozási erőforrásai között. Ebben a forgatókönyvben a hardverkörnyezet általában rögzített, és a fejlesztő ésszerűen számíthat arra, hogy kizárólagos hozzáféréssel rendelkezik az összes számítási erőforráshoz az algoritmus végrehajtásakor.

A kevésbé korlátozott számítási környezetek azonban nem feltétlenül egyeznek az OpenMP-hez. Az OpenMP 2.0 és 2.5 használatával például a rekurzív problémák (például a gyorsválogató algoritmus vagy az adatfa keresése) nehezebben implementálhatók. Az egyidejűségi futtatókörnyezet kiegészíti az OpenMP képességeit az aszinkron ügynökök kódtára és a párhuzamos minták kódtára (PPL) biztosításával. Az Aszinkron ügynökök könyvtára támogatja a durvaszemű feladat-párhuzamosságot; a PPL támogatja a részletesebb párhuzamos feladatokat. Az egyidejűségi futtatókörnyezet biztosítja a párhuzamos műveletek végrehajtásához szükséges infrastruktúrát, hogy az alkalmazás logikájára összpontosíthasson. Mivel azonban az egyidejűségi futtatókörnyezet számos programozási modellt tesz lehetővé, az ütemezési többletterhelés nagyobb lehet, mint más egyidejűségi kódtárak, például az OpenMP. Ezért javasoljuk, hogy fokozatosan tesztelje a teljesítményt, amikor a meglévő OpenMP-kódot a Concurrency Runtime (Egyidejűség futtatókörnyezet) használatára konvertálja.

Mikor kell migrálni az OpenMP-ből az egyidejűségi futtatókörnyezetbe

A következő esetekben előnyös lehet a meglévő OpenMP-kód áttelepítése az egyidejűségi futtatókörnyezet használatához.

Esetekben Az egyidejűségi futtatókörnyezet előnyei
Bővíthető egyidejű programozási keretrendszerre van szükség. Az egyidejűségi futtatókörnyezet számos funkciója bővíthető. A meglévő funkciók kombinálásával újakat is összeállíthat. Mivel az OpenMP fordítói irányelvekre támaszkodik, nem lehet könnyen kiterjeszteni.
Az alkalmazásnak előnyös lenne a kooperatív blokkolás. Ha egy tevékenység blokkol, mert egy még nem elérhető erőforrást igényel, az egyidejűségi futtatókörnyezet más feladatokat is végrehajthat, amíg az első tevékenység az erőforrásra vár.
Az alkalmazás kihasználná a dinamikus terheléselosztás előnyeit. Az egyidejűségi futtatókörnyezet egy ütemezési algoritmust használ, amely a számítási feladatok változásakor módosítja a számítási erőforrások lefoglalását. Az OpenMP-ben, amikor az ütemező számítási erőforrásokat foglal le egy párhuzamos régióhoz, ezek az erőforrás-foglalások a számítás során rögzítettek lesznek.
Kivételkezelési támogatásra van szükség. A PPL lehetővé teszi a párhuzamos régión vagy hurokon belüli és kívüli kivételeket. Az OpenMP-ben a párhuzamos régión vagy hurokon belüli kivételt kell kezelnie.
Lemondási mechanizmusra van szükség. A PPL lehetővé teszi az alkalmazások számára, hogy az egyes feladatokat és a párhuzamos munkafákat is megszakítják. Az OpenMP megköveteli, hogy az alkalmazás saját lemondási mechanizmust implementáljon.
A párhuzamos kódnak egy másik környezetben kell befejeződnie, amelytől a kód elindul. Az egyidejűségi futtatókörnyezet lehetővé teszi, hogy egy tevékenységet elindítson egy adott környezetben, majd várjon vagy szakítsa meg a feladatot egy másik környezetben. Az OpenMP-ben minden párhuzamos munkának abban a környezetben kell befejeződnie, amelyből elindul.
Fokozott hibakeresési támogatásra van szükség. A Visual Studio a párhuzamos halmok és párhuzamos feladatok ablakokat biztosítja, hogy könnyebben hibakeresést végezhessenek a többszálú alkalmazásokban.

Az egyidejű futtatókörnyezet hibakeresési támogatásáról további információt a Feladatok ablak használata, Párhuzamos verem ablak használata és a Párhuzamos alkalmazások hibakeresése című témakörben talál.

Mikor nem migrálható az OpenMP-ből az egyidejűségi futtatókörnyezetbe?

Az alábbi esetek azt írják le, hogy a meglévő OpenMP-kód migrálása nem megfelelő-e az egyidejűségi futtatókörnyezet használatához.

Esetekben Magyarázat
Az alkalmazás már megfelel a követelményeknek. Ha elégedett az alkalmazás teljesítményével és az aktuális hibakeresési támogatással, előfordulhat, hogy a migrálás nem megfelelő.
A párhuzamos huroktestek kevés munkát végeznek. Előfordulhat, hogy az egyidejűségi futásidejű feladatütemező többletterhelése nem oldja meg a ciklustörzs párhuzamos végrehajtásának előnyeit, különösen akkor, ha a ciklus törzse viszonylag kicsi.
Az alkalmazás C nyelven van megírva. Mivel az egyidejűségi futtatókörnyezet számos C++ funkciót használ, előfordulhat, hogy nem megfelelő, ha nem tud olyan kódot írni, amely lehetővé teszi a C alkalmazás számára a teljes használatát.

Útmutató: OpenMP-párhuzamos konvertálás ciklushoz az egyidejűségi futtatókörnyezet használatára

Az OpenMP párhuzamos és for irányelveket használó alapszintű hurok bemutatja, hogyan konvertálható, hogy a Concurrency Runtime concurrency::parallel_for algoritmust használja.

Útmutató: A megszakítást használó OpenMP-ciklus átalakítása az egyidejűségi futtatókörnyezet használatára
Egy OpenMP párhuzamosfor ciklus esetében, amely nem igényli, hogy minden iteráció fusson, bemutatja, hogyan módosítható úgy, hogy a Concurrency Runtime megszakítási mechanizmusát használja.

Útmutató: A kivételkezelést használó OpenMP-hurok átalakítása az egyidejűségi futtatókörnyezet használatára
A kivételkezelést végző OpenMP párhuzamosfor hurok bemutatja, hogyan lehet azt átalakítani az Egyidejűségi futtatókörnyezet kivételkezelési mechanizmusának használatára.

Útmutató: Redukciós változót használó OpenMP-ciklus átalakítása az egyidejűségi futtatókörnyezet használatához
Az OpenMP parallelfor ciklus, amely a redukció záradékot használja, bemutatja, hogyan lehet konvertálni az egyidejűségi futtatókörnyezet használatára.

Lásd még

Párhuzamossági futtatókörnyezet
OpenMP
Párhuzamos minták kódtára (PPL)
Aszinkron ügynökök könyvtára