Чем firstprivate и lastprivate отличаются от частных предложений в OpenMP?

Я посмотрел на официальные определения, но я все еще в замешательстве.

firstprivateУказывает, что каждый поток должен иметь свой собственный экземпляр переменной и что переменная должна быть инициализирована значением переменной, поскольку она существует до параллельной конструкции.

Для меня это звучит очень похоже на личное. Я искал примеры, но я не понимаю, как это особенное или как его можно использовать.

lastprivate: Указывает, что версия переменной окружающего контекста установлена равной частной версии любого потока, выполняющего последнюю итерацию (конструкция цикла for) или последний раздел (разделы #pragma).

Я чувствую, что понимаю это немного лучше из-за следующего примера:

#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];

Итак, в этом примере я понимаю, чтоlastprivate позволяетi должен быть возвращен за пределы цикла как последнее значение.

Я только начал изучать OpenMP сегодня.

Ответы на вопрос(2)

Ваш ответ на вопрос