Académique Documents
Professionnel Documents
Culture Documents
Versiones secuenciales
En este apartado se va a probar la ejecucin del algoritmo bsico contado en el apartado
anterior, pero con tres variantes que tienen que ver con la condicin de terminacin del
clculo:
En la primer versin del programa el cmputo termina tras un bucle que se ejecuta un
cierto nmero de veces, cuyo valor se fija con un parmetro en la lnea de comandos al
invocar el ejecutable. El cdigo es el siguiente:
<assert.h>
<math.h>
<stdlib.h>
<stdio.h>
<sys/time.h>
<assert.h>
<math.h>
<stdlib.h>
<stdio.h>
<sys/time.h>
int i, enCirculo=0;
double x, y, pi, cotaError;
struct timeval t0, t1, t;
// Control parametro => Cota del error
if (argc != 2) {
printf ("Uso: piDos cotaError \n");
exit(0);
}
cotaError = atof(argv[1]);
assert (gettimeofday (&t0, NULL) == 0);
for (i=1; i<=MAX_ITER; i++) {
x = (double) random() / (double) RAND_MAX;
y = (double) random() / (double) RAND_MAX;
if ((x*x + y*y) <= 1.0) enCirculo++;
pi = (4.0 * enCirculo) / (double) i;
if (fabs(pi - M_PI) < cotaError) break;
}
assert (gettimeofday (&t1, NULL) == 0);
timersub(&t1, &t0, &t);
printf ("Valor de PI = %.10lf en iteracion = %d\n", pi, i);
printf ("Tiempo
= %ld:%ld(seg:mseg)\n", t.tv_sec,
t.tv_usec/1000);
return 0;
}
<assert.h>
<math.h>
<stdlib.h>
<stdio.h>
<sys/time.h>
Tablas de tiempos
Tabla-1. Tiempos de la versin piUno (#iteraciones)
# Iteraciones
PI
Error
Tiempo (seg:mseg)
100.000
3,141 _ _ _
0,000 _ _ _
1.000.000
3,141 _ _ _
0,000 _ _ _
10.000.000
3,141 _ _ _
0,000 _ _ _
100.000.000
3,141 _ _ _
0,000 _ _ _
1.000.000.000
3,141 _ _ _
0,000 _ _ _
PI
Tiempo (seg:mseg)
3,14159 _ _ _ _ _
0.000001
3,14159 _ _ _ _ _
0.0000001
3,14159 _ _ _ _ _
0.00000001
3,14159 _ _ _ _ _
0.000000001
3,14159 _ _ _ _ _
0.0000000001
PI
Error
T. (seg:mseg)
3,138 _ _ _
0,002 _ _ _ 0.00001
3,141 _ _ _
0,000 _ _ _ 0.000001
3,141 _ _ _
0,000 _ _ _ 0.0000001
3,141 _ _ _
0,000 _ _ _ 0.00000001
3,141 _ _ _
0,000 _ _ _ 0.000000001
Programa pi.c
// pi.c: Programa que calcula el numero PI mediante el metodo de
//
Monte Carlo basado en circulo de radio 1 inscrito en
//
cuadrado de lado 2. Version secuencial.
//-----------------------------------------------------------------#include
#include
#include
#include
<assert.h>
<stdio.h>
<stdlib.h>
<sys/time.h>
Con 2 procesos
seg:mseg
Eficiencia
Con 4 procesos
seg:mseg
Eficiencia
pi
piThreads