Paralelizando bucles (II)

  1. Paraleliza el bucle de la siguiente función:
double func(double x[], double y[], double a, int n)
{
   int i;
   double b, result=0;
   for (i=0; i<n; i++) {
      b = a*x[i]*x[i];
      y[i] = b;
      result += y[i];
   }
   return result;
}

Solución:

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

#pragma omp parallel for private(b) reduction(+:result)

  1. Paraleliza el bucle de la siguiente función:
int func(int n)
{
   int i;
   int result=1;
   for (i=2; i<=n; i++)
      result = result*i;
   return result;
}

Solución:

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

#pragma omp parallel for reduction(*:result)

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

Solución:

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

#pragma omp parallel for reduction(min:b)