Como são firstprivate e lastprivate diferentes das cláusulas privadas no OpenMP?

Eu olhei para as definições oficiais, mas ainda estou bastante confuso.

firstprivateEspecifica que cada thread deve ter sua própria instância de uma variável e que a variável deve ser inicializada com o valor da variável, porque ela existe antes da construção paralela.

Para mim, isso soa muito como privado. Procurei exemplos, mas não consigo entender como é especial ou como pode ser usado.

lastprivateEspecifica que a versão da variável do contexto incluído é definida como igual à versão privada de qualquer thread que executa a iteração final (construção for-loop) ou a última seção (seções #pragma).

Eu sinto que entendo este um pouco melhor por causa do seguinte exemplo:

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

Então, neste exemplo, eu entendo quelastprivate permitei para ser retornado fora do loop como o último valor que foi.

Eu comecei a aprender o OpenMP hoje.

questionAnswers(2)

yourAnswerToTheQuestion