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.
firstprivate
Especifica 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.
lastprivate
Especifica 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.