Udostępnij za pośrednictwem


Migrowanie z OpenMP do współbieżności środowiska wykonawczego

Środowisko uruchomieniowe współbieżności umożliwia korzystanie z różnych modeli programowania. Te modele mogą się nakładać lub uzupełniać modele innych bibliotek. Dokumenty w tej sekcji porównują protokół OpenMP ze środowiskiem uruchomieniowym współbieżności i zawierają przykłady dotyczące sposobu migrowania istniejącego kodu OpenMP w celu korzystania ze środowiska uruchomieniowego współbieżności.

Model programowania OpenMP jest definiowany przez otwarty standard i ma dobrze zdefiniowane powiązania z językami programowania Fortran i C/C++. Programy OpenMP w wersji 2.0 i 2.5, które są obsługiwane przez kompilator języka Microsoft C++, są dobrze dostosowane do algorytmów równoległych, które są iteracyjne; oznacza to, że wykonują iterację równoległą na tablicy danych. Program OpenMP 3.0 obsługuje zadania nie iteracyjne oprócz zadań iteracyjnych.

Protokół OpenMP jest najbardziej wydajny, gdy stopień równoległości jest wstępnie określony i pasuje do dostępnych zasobów w systemie. Model OpenMP jest szczególnie dobrym rozwiązaniem w przypadku obliczeń o wysokiej wydajności, gdzie bardzo duże problemy obliczeniowe są dystrybuowane między zasoby przetwarzania jednego komputera. W tym scenariuszu środowisko sprzętowe jest zwykle stałe, a deweloper może rozsądnie oczekiwać wyłącznego dostępu do wszystkich zasobów obliczeniowych podczas wykonywania algorytmu.

Jednak mniej ograniczonych środowisk obliczeniowych może nie być dobrym dopasowaniem do openMP. Na przykład problemy cykliczne (takie jak algorytm quicksort lub wyszukiwanie drzewa danych) są trudniejsze do zaimplementowania przy użyciu biblioteki OpenMP 2.0 i 2.5. Środowisko uruchomieniowe współbieżności uzupełnia możliwości protokołu OpenMP, udostępniając bibliotekę asynchronicznych agentów i bibliotekę równoległych wzorców (PPL). Biblioteka agentów asynchronicznych obsługuje równoległość zadań gruboziarnistych; PPL obsługuje bardziej szczegółowe zadania równoległe. Środowisko uruchomieniowe współbieżności udostępnia infrastrukturę wymaganą do równoległego wykonywania operacji, dzięki czemu można skoncentrować się na logice aplikacji. Jednak ze względu na to, że środowisko uruchomieniowe współbieżności umożliwia różne modele programowania, obciążenie związane z planowaniem może być większe niż inne biblioteki współbieżności, takie jak OpenMP. W związku z tym zalecamy przyrostowe testowanie wydajności podczas konwertowania istniejącego kodu OpenMP w celu użycia środowiska uruchomieniowego współbieżności.

Kiedy przeprowadzić migrację ze środowiska OpenMP do środowiska uruchomieniowego współbieżności

Migracja istniejącego kodu OpenMP może być korzystna w celu użycia środowiska uruchomieniowego współbieżności w następujących przypadkach.

Sprawy Zalety środowiska uruchomieniowego współbieżności
Wymagana jest rozszerzalna platforma programowania współbieżnego. Wiele funkcji w środowisku uruchomieniowym współbieżności można rozszerzyć. Możesz również połączyć istniejące funkcje, aby tworzyć nowe. Ponieważ protokół OpenMP opiera się na dyrektywach kompilatora, nie można go łatwo rozszerzyć.
Twoja aplikacja skorzystałaby z blokowania współpracy. Gdy zadanie blokuje, ponieważ wymaga zasobu, który nie jest jeszcze dostępny, środowisko uruchomieniowe współbieżności może wykonywać inne zadania, podczas gdy pierwsze zadanie czeka na zasób.
Twoja aplikacja skorzysta z dynamicznego równoważenia obciążenia. Środowisko uruchomieniowe współbieżności używa algorytmu planowania, który dostosowuje alokację zasobów obliczeniowych w miarę zmiany obciążeń. W programie OpenMP, gdy harmonogram przydziela zasoby obliczeniowe do regionu równoległego, te alokacje zasobów są stałe podczas obliczeń.
Wymagana jest obsługa wyjątków. PPL umożliwia przechwytywanie wyjątków zarówno wewnątrz, jak i poza regionem równoległym lub pętlą. W programie OpenMP należy obsłużyć wyjątek wewnątrz regionu równoległego lub pętli.
Wymagany jest mechanizm anulowania. PPL umożliwia aplikacjom anulowanie zarówno poszczególnych zadań, jak i równoległych drzew pracy. Protokół OpenMP wymaga, aby aplikacja zaimplementowała własny mechanizm anulowania.
Kod równoległy jest wymagany do zakończenia w innym kontekście, od którego jest uruchamiany. Środowisko uruchomieniowe współbieżności umożliwia uruchomienie zadania w jednym kontekście, a następnie zaczekaj lub anuluje to zadanie w innym kontekście. W programie OpenMP wszystkie równoległe prace muszą zostać zakończone w kontekście, z którego się uruchamia.
Wymagana jest rozszerzona obsługa debugowania. Program Visual Studio udostępnia okna Równoległe stosy i zadania równoległe, dzięki czemu można łatwiej debugować aplikacje wielowątkowane.

Aby uzyskać więcej informacji na temat obsługi debugowania środowiska uruchomieniowego współbieżności, zobacz Using the Tasks Window (Korzystanie z okna stosów równoległych) i Walkthrough: Debugowanie aplikacji równoległej.

Kiedy nie należy migrować z protokołu OpenMP do środowiska uruchomieniowego współbieżności

W poniższych przypadkach opisano, kiedy migracja istniejącego kodu OpenMP w celu użycia środowiska uruchomieniowego współbieżności może nie być odpowiednia.

Sprawy Wyjaśnienie
Aplikacja spełnia już twoje wymagania. Jeśli wydajność aplikacji i bieżąca obsługa debugowania są zadowalające, migracja może nie być odpowiednia.
Jednostki pętli równoległej wykonują niewielką pracę. Obciążenie harmonogramu zadań współbieżności środowiska uruchomieniowego może nie przezwyciężyć korzyści związanych z równoległym wykonywaniem treści pętli, zwłaszcza gdy treść pętli jest stosunkowo mała.
Aplikacja jest napisana w języku C. Ponieważ środowisko uruchomieniowe współbieżności używa wielu funkcji języka C++, może nie być odpowiednie, gdy nie można napisać kodu, który umożliwia pełne korzystanie z aplikacji języka C.

Instrukcje: konwertowanie paraleli OpenMP dla pętli do korzystania ze środowiska uruchomieniowego współbieżności

Mając podstawową pętlę używającą równoległych i dyrektyw OpenMP, demonstruje sposób konwertowania go na użycie współbieżności środowiska uruchomieniowego współbieżności::p arallel_for algorithm.

Instrukcje: konwertowanie pętli OpenMP stosującej anulowanie do korzystania ze środowiska uruchomieniowego współbieżności
Biorąc pod uwagę równoległośćopenMP dla pętli, która nie wymaga wszystkich iteracji do uruchomienia, pokazuje, jak przekonwertować ją na użycie mechanizmu anulowania środowiska uruchomieniowego współbieżności.

Instrukcje: konwertowanie pętli OpenMP używającej obsługi wyjątków do korzystania ze środowiska uruchomieniowego współbieżności
Biorąc pod uwagę równoległyprotokół OpenMP dla pętli wykonującej obsługę wyjątków, pokazuje, jak przekonwertować ją na użycie mechanizmu obsługi wyjątków środowiska uruchomieniowego współbieżności.

Instrukcje: konwertowanie pętli OpenMP używającej zmiennej redukcji do korzystania ze środowiska uruchomieniowego współbieżności
Biorąc pod uwagę równoległyprotokół OpenMP dla pętli używającej klauzuli redukcji, pokazuje, jak przekonwertować ją na użycie środowiska uruchomieniowego współbieżności.

Zobacz też

Środowisko uruchomieniowe współbieżności
OpenMP
Biblioteka równoległych wzorców (PLL)
Biblioteki agentów asynchronicznych