Documentos de Académico
Documentos de Profesional
Documentos de Cultura
const double a = 0;
const double b = 10;
/* Declaraciones de funciones */
void Get_input(int argc, char* argv[], int my_rank, double* n_p);
double Trap(double left_endpt, double right_endpt, int trap_count, double
base_len);
double f(double x);
MPI_Init(NULL, NULL);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
MPI_Barrier(MPI_COMM_WORLD);
start = MPI_Wtime();
if (my_rank == 0) {
printf("Con n = %.0f trapezoides, el valor de la integral entre %.0f a %.0f =
%f \n", n, a, b, total_int);
printf("Tiempo transcurrido = %f millisegundos \n", elapsed * 1000);
}
/* Cerrar MPI */
MPI_Finalize();
return 0;
} /* main */
/*------------------------------------------------ ------------------
* Función: Get_input
* Propósito : obtener la entrada del usuario : el número de trapecios
**
* Args de entrada :
* 1. my_rank: rango de proceso en MPI_COMM_WORLD
* 2. comm_sz : número de procesos en MPI_COMM_WORLD
**
* Args de salida :
* 1. n_p: puntero al número de trapecios
*/
void Get_input(int argc, char* argv[], int my_rank, double* n_p) {
if (my_rank == 0) {
if (argc != 2) {
fprintf(stderr, "uso: mpirun -np <N> %s <numero de trapezoides> \n",
argv[0]);
fflush(stderr);
*n_p = -1;
}
else {
*n_p = atoi(argv[1]);
}
}
// Transmite el valor de n a cada proceso
MPI_Bcast(n_p, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
/*------------------------------------------------ ------------------
* Función: Trap
* Propósito : función en serie para estimar una integral definida usando la regla
trapezoidal
**
* Args de entrada :
* -left_endpt
* -right_endpt
* -trap_count
* -base_len
**
* Valor de retorno : estimación de la regla trapezoidal de la integral de
* left_endpt a right_endpt usando trap_count trapecios
*/
double Trap(double left_endpt, double right_endpt, int trap_count, double base_len)
{
double estimate, x;
int i;
return estimate;
} /* Trap */
/*------------------------------------------------ ------------------
* Función: f
* Propósito : Calcular el valor de la función a integrar
* Args de entrada : x
*/
double f(double x) {
double x1;
double x2;
x1 = ((x-4.0)*(x-4.0)*(x-4.0));
x2 = 2.0*x;
return ((0.2*x1)-x2)+12.0;;
} /* f */