Professional Documents
Culture Documents
Speed-up
OBJETIVO
EJERCICIO
Dado el programa que calcula la integral de la funcin x2 mediante la suma del rea de un cierto nmero de trapecios que
cubren la curva de la funcin entre dos puntos. El programa solicita los dos extremos de la funcin y el nmero de trapecios.
El objetivo del ejercicio es medir el tiempo de ejecucin de ambos programas, usando los siguientes
parmetros:
- lmites de la integral: 0 y 1
- nmero de trapecios: 120 - 1.200 - 12.000 - 120.000 - 1.200.000 - 12.000.000 - 120.000.000
- nmero de procesadores (caso paralelo): 2, 4, 6, 8, 10 y 12
Actividad
Obtener una grfica de los tiempos de ejecucin serie y paralelo en funcin del nmero de
trapecios, y en otra donde se muestre el factor de aceleracin (speed-up) obtenido en relacin al caso serie.
Utilizar las escalas ms adecuadas para las grficas, de manera que se observe correctamente el comportamiento del
programa. Interpreta y justifica los resultados obtenidos.
PRCTICA
Speed-up
Ejercicio 1: serie.c
/*********************************************************
serie.c
Integral de y = x * x. Suma de area de trapecios
Programa Serie
*********************************************************/
#include <stdio.h>
#include <sys/time.h>
/* calculo de la integral */
h = (b-a)/n; /* anchura de los trapecios */
resul = (f(a) + f(b)) / 2.0;
x = a;
for (i=1; i<n; i++)
{
x = x + h;
resul = resul + f(x);
}
resul = resul * h;
gettimeofday(&t1,0);
printf("\n Integral de x*x (%1.1f - %1.1f, con %d trap.) = %1.12f \n", a, b, n, resul);
printf(" Error = %1.12f \n", resul - (b*b*b-a*a*a)/3.0 );
printf(" Tiempo ejecucion (serie) = %1.3f ms \n\n", tej*1000);
return 0;
} /* main */
void Leer_datos(double* a_ptr, double* b_ptr, int* n_ptr, int pid, int npr);
double Integrar(double a_loc, double b_loc, int n_loc, double h);
double f(double x);
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &pid);
MPI_Comm_size(MPI_COMM_WORLD, &npr);
/* Impresion de resultados */
if (pid == 0)
{
t1 = MPI_Wtime();
printf("\n Integral MPI de x*x (%1.1f - %1.1f, con %d trap.) = %1.12f\n", a, b, n, resul);
printf(" Error = %1.12f \n", resul - (b*b*b-a*a*a)/3.0 );
printf(" Tiempo ejecucion (%d proc.) = %1.3f ms \n\n", npr, (t1-t0)*1000);
}
MPI_Finalize();
return 0;
} /* main */
PRCTICA
Speed-up
/* Funcion Leer_datos */
void Leer_datos(double* a_ptr, double* b_ptr, int* n_ptr, int pid, int npr)
{
float aux_a, aux_b;
int root;
if (pid == 0)
{
printf("\n Introduce a, b (limites) y n (num. de trap.) \n");
scanf("%f %f %d", &aux_a, &aux_b, n_ptr);
t0 = MPI_Wtime();
(*a_ptr) = (double)aux_a;
(*b_ptr) = (double)aux_b;
}
root = 0;
/*Funcion a integrar */
double f(double x)
{
double y;
y = x*x;
return y;
}
/* calculo de la integral */