Udostępnij za pośrednictwem


F. Nowe funkcje i wyjaśnienia w wersji 2.0

Ten dodatek zawiera podsumowanie kluczowych zmian wprowadzonych w specyfikacji OpenMP C/C++ w przechodzeniu z wersji 1.0 do wersji 2.0. Następujące elementy to nowe funkcje dodane do specyfikacji:

  • Przecinki są dozwolone w dyrektywach OpenMP.

  • Dodanie klauzuli num_threads . Ta klauzula umożliwia użytkownikowi żądanie określonej liczby wątków dla konstrukcji równoległej.

  • Dyrektywa threadprivate została rozszerzona w celu akceptowania statycznych zmiennych zakresu bloków.

  • Tablice długości zmiennej C99 są kompletnymi typami i można je określić w dowolnym miejscu, w którym dozwolone są kompletne typy, na przykład na listach privateklauzul , firstprivatei lastprivate (zobacz sekcję 2.7.2).

  • Zmienna prywatna w regionie równoległym może być ponownie oznaczona jako prywatna w zagnieżdżonej dyrektywie.

  • Dodano klauzulę copyprivate . Zapewnia mechanizm używania zmiennej prywatnej do emisji wartości od jednego członka zespołu do innych członków. Jest to alternatywa dla zmiennej udostępnionej dla wartości podczas podawania takiej zmiennej udostępnionej byłaby trudna (na przykład w rekursji wymagającej innej zmiennej na każdym poziomie). Klauzula copyprivate może pojawić się tylko w single dyrektywie.

  • Dodanie procedur chronometrażu omp_get_wtick i omp_get_wtime podobnych do procedur MPI. Te funkcje są niezbędne do wykonywania zegara ściany zegara chronometrażu.

  • Dodano dodatek z listą zachowań zdefiniowanych przez implementację w środowisku OpenMP C/C++. Implementacja jest wymagana do definiowania i dokumentowania jego zachowania w tych przypadkach.

  • Następujące zmiany służą do wyjaśnienia lub poprawiania funkcji w poprzedniej specyfikacji interfejsu API OpenMP dla języka C/C++:

    • Wyjaśniono, że zachowanie omp_set_nested i omp_set_dynamic , gdy omp_in_parallel zwraca wartość nonzero jest niezdefiniowana.

    • Wyjaśnione zagnieżdżanie dyrektywy w przypadku użycia zagnieżdżonych równoległych.

    • Funkcje inicjowania blokady i niszczenia blokad mogą być wywoływane w regionie równoległym.

    • Dodano nowe przykłady do dodatku A.