Planificación y equilibrio de carga

Dada esta función, donde sabemos que calcular(i) tiene un tiempo de ejecución proporcional al valor de i:

double f(double x[], int n) {
   int i;
   #pragma omp parallel for
   for (i=1; i<n; i++) {
      x[i]=calcular(i);
   }
}

Indica si se conseguiría un buen balance de carga con cada una de las siguientes planificaciones:

  1. schedule(static)
  2. schedule(static,1)
  3. schedule(dynamic)
  4. schedule(guided)

Solución:

  1. Mal equilibrio de carga. Las primeras iteraciones (que son las que menos tardan) le tocan todas al mismo hilo y lo mismo ocurre con las últimas iteraciones (que son las que más tardan).
  2. Mejor equilibrio que en el caso anterior. Las iteraciones menos costosas se reparten entre todos los hilos, y lo mismo ocurre con las iteraciones más costosas.
  3. Buen equilibrio, por ser planificación dinámica.
  4. Buen equilibrio, por ser planificación dinámica.