Czym różni się firstPrivate i lastprivate od klauzul prywatnych w OpenMP?

Przejrzałem oficjalne definicje, ale nadal jestem zdezorientowany.

firstprivate: Określa, że ​​każdy wątek powinien mieć własne wystąpienie zmiennej, a zmienna powinna być zainicjowana wartością zmiennej, ponieważ istnieje przed konstrukcją równoległą.

Dla mnie brzmi to bardzo prywatnie. Szukałem przykładów, ale wydaje mi się, że nie rozumiem, jak to jest wyjątkowe i jak można je wykorzystać.

lastprivate: Określa, że ​​otaczająca wersja kontekstu zmiennej jest równa prywatnej wersji dowolnego wątku wykonującego ostatnią iterację (dla konstrukcji pętli) lub ostatniej sekcji (sekcje #pragma).

Czuję, że rozumiem to nieco lepiej z powodu następującego przykładu:

#pragma omp parallel
{
   #pragma omp for lastprivate(i)
      for (i=0; i<n-1; i++)
         a[i] = b[i] + b[i+1];
}
a[i]=b[i];

W tym przykładzie rozumiem tolastprivate pozwala nai być zwróconym poza pętlą jako ostatnia wartość.

Właśnie dzisiaj zacząłem uczyć się OpenMP.

questionAnswers(2)

yourAnswerToTheQuestion