Código - CarlosBielma/Actividad-1.4 GitHub Wiki

Se inlcuyen las librerías a usarse

#include <stdio.h>
#include "omp.h"

Se crean las variables globales

static long num_pasos=100000000; //en esta variable se definen los 1x10^8 puntos
double paso;
#define NUM_THREADS 160 //Aquí es donde definimos los hilos a usar

Se crea el arreglo que van a usar los hilos para almacenar el resultado, se crean los hilos y se inicia el reloj de ejecución.

void main()
{
    int i, nthreads; double pi, sum[NUM_THREADS],t1,t2,tiempo;
    paso=1.0/num_pasos;
    omp_set_num_threads(NUM_THREADS);
    const double startTime = omp_get_wtime();

Se crea la función que va a ejecutarse en paralelo para la integral definida

#pragma omp parallel
{
  int i, id, nthrds; double x;
  id = omp_get_thread_num();
  nthrds = omp_get_num_threads();
  if(id==0){
      nthreads=nthrds;
  }
  for(i=id, sum[id]=0.0; i<num_pasos; i=i+nthrds){
      x=(i+0.5)*paso;
      sum[id]+=4.0/(1.0+x*x);
  }
}

Se suman los resultados de cada hilo y multiplican por el paso

for(i=0, pi=0.0; i<nthreads;i++){ 
    pi+=sum[i]*paso;
}

Finalmente se detiene el reloj de ejecución se hace la diferencia para obtener el tiempo total de ejecución, y se imprimen tanto este, como el resultado de la integral definida

    const double endTime = omp_get_wtime();
    tiempo=t2-t1;
    printf("pi = (%lf\n",pi);
    printf("tomo (%lf) segundos\n",(endTime - startTime)); //Se imprime el tiempo de ejeccución
}
⚠️ **GitHub.com Fallback** ⚠️