Чем 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 сегодня.