Udostępnij za pośrednictwem


1.3 Wykonywanie modelu

OpenMP używa modelu sprzężenia rozwidlenia równoległe wykonywanie.Chociaż ten model sprzężenia rozwidlenia mogą być przydatne w rozwiązywaniu różnych problemów, jest nieco dostosowane dla dużych aplikacji opartych na tablicy.OpenMP jest przeznaczony do programów wsparcia, które zostanie wykonany prawidłowo zarówno jako równolegle programów (wiele wątków, wykonywania i pełnego biblioteki obsługi OpenMP) i jako kolejne programy (dyrektyw ignorowane i proste biblioteki procedur wejścia OpenMP).Jednak jest możliwe i zezwala na opracowanie program, który nie zadziała poprawnie, gdy wykonywane sekwencyjnie.Ponadto różne stopnie równoległości może skutkować różnych wyników liczbowych z powodu zmian w skojarzeniu operacjach numerycznych.Na przykład redukcji dodanie szeregowe mogą mieć innego wzorca stowarzyszeń dodanie niż zmniejszenie równolegle.Te skojarzenia różnych może zmienić wyniki dodanie liczb zmiennoprzecinkowych.

Program napisany przy użyciu interfejsu API C i C++ OpenMP rozpocznie wykonywanie jako pojedynczy wątek wykonanie o nazwie główny wątek.Wątek główny wykonuje się w regionie szeregowego aż do pierwszego konstrukcje równolegle.W interfejsie API C i C++ OpenMP równolegle dyrektywa stanowi konstrukcja równolegle.W przypadku napotkania konstrukcja równolegle, wątek główny tworzy zespół wątków i wzorca staje się głównym zespołu.Każdy wątek w zespole wykona instrukcje w zakresie dynamicznych równoległych regionu, z wyjątkiem dla konstrukcji podziału pracy.Konstrukcje podziału pracy musi napotkanych przez wszystkie wątki w zespole w takiej samej kolejności, a instrukcje bloku strukturalne związane są wykonywane przez jednego lub więcej wątków.Bariery na końcu konstrukcji podziału pracy, bez nowait klauzuli jest wykonywany przez wszystkie wątki w zespole.

Jeśli wątek modyfikuje obiektu współużytkowanego, wpływa nie tylko własne środowisko, ale również te inne wątki w programie.Modyfikacja jest gwarantowane za kompletne, z punktu widzenia jednego z innych wątków w następnym punkcie sekwencji (jak określono w język podstawowy) tylko wtedy, gdy obiekt jest uznane za lotnych.W przeciwnym razie modyfikacji jest gwarantowane za kompletne, po pierwsze modyfikowanie wątku i następnie (lub równocześnie) wystąpić inne wątki opróżnić dyrektywy, która określa obiekt (albo jawnie lub niejawnie).Należy zauważyć, że po opróżnić dyrektyw, które są implikowane przez innych dyrektyw OpenMP nie są wystarczające do zapewnienia żądaną kolejność efekty uboczne, obowiązek dostarczać dodatkowe, jawne programmer's opróżnić dyrektyw.

Po zakończeniu konstrukcji równolegle synchronizować wątki w zespole niejawny bariery, i tylko główny wątek kontynuuje wykonywanie.Można określić dowolną liczbę równoległych konstrukcje w jednym programie.W rezultacie program może rozwidlają i dołączyć wiele razy w czasie wykonywania.

OpenMP API C i C++ umożliwia programistom użyć dyrektyw w funkcji wywołana z wewnątrz konstrukcji równolegle.Dyrektyw, które nie pojawiają się w zakresie leksykalne równoległych konstrukcji, ale może znajdować się w zakresie dynamicznych są nazywane osierocone dyrektyw.Osierocony dyrektyw dają programistów zdolność do wykonywania głównych części ich program równolegle z tylko minimalnych zmian sekwencyjny program.Dzięki tej funkcji Użytkownicy mogą kod równoległych konstrukcje na górnym poziomach drzewa wywołań programu i kontrolować wykonywanie w dowolnym nazywane funkcje za pomocą dyrektyw.

Funkcje, które zapisu do tego samego pliku może spowodować wyjście, w którym dane zapisane przez różne wątki pojawia się w wywołaniach kolejności danych wyjściowych niezsynchronizowane wywołania c i C++.Podobnie niezsynchronizowane wywołań funkcji odczytu z tego samego pliku wejściowym może odczytywać dane w wywołaniach zamówienia.Niezsynchronizowane wykorzystania wejścia/wyjścia, takie, że każdy wątek uzyskuje dostęp do innego pliku daje te same wyniki jako szeregowy wykonywanie funkcji wejścia/wyjścia.