Я просмотрел официальные определения, но я все еще довольно смущен.
firstprivate
: указывает, что каждый поток должен иметь свой собственный экземпляр переменной и что переменная должна быть инициализирована значением переменной, поскольку она существует перед параллельной конструкцией.
Для меня это очень похоже на личное. Я искал примеры, но я, кажется, не понимаю, как это особенное или как его можно использовать.
lastprivate
: Указывает, что вложенная версия контекста переменной установлена равной частной версии любого потока, который выполняет окончательную итерацию (for-loop construct) или последний раздел (разделы #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 сегодня.