Valor inicial y final de las variables privadas

  1. ¿Cuál será el valor final de los elementos de x?
void f(double x[], int n) {
  int i;
  double b=5;
  #pragma omp parallel for private(b)
  for (i=0; i<n; i++)
     x[i]=b;
}

Solución:

Indeterminado, porque la variable privada b no ha sido inicializada. Habría que usar firstprivate o, en este caso, dejar que b sea compartida.


  1. Paraleliza el bucle de la siguiente función:
double f(double x[], int n) {
  int i;
  double aux;
  for (i=0; i<n; i++) {
     aux = (x[i]*x[i])/2;
     x[i] = log(aux);
  }
  return aux;
}

Solución:

Justo antes del for, se añadiría la directiva:

#pragma omp parallel for lastprivate(aux)