Skip to content
Snippets Groups Projects
Select Git revision
  • 40b0d1876f3299a2b730741f8d866868bc262598
  • master default protected
2 results

mppi2.c

Blame
  • mppi2.c 976 B
    /*
    * mppi2.c
    * Neil Gershenfeld 6/21/19
    * OpenMP pi calculation benchmark, with multiple iterations
    * pi = 3.14159265358979323846
    */
    
    #include <stdio.h>
    #include <time.h>
    #include <omp.h>
    #include <stdint.h>
    
    #define NPTS 1000000000
    #define NLOOP 10
    
    void main() {
       uint64_t i;
       int j;
       double a,b,c,pi,dt,mflops,max;
       struct timespec tstart,tend;
       a = 0.5;
       b = 0.75;
       c = 0.25;
       max = 0;
       for (j = 0; j < NLOOP; ++j) {
          pi = 0;
          clock_gettime(CLOCK_REALTIME,&tstart);
          #pragma omp parallel for reduction(+:pi)
          for (i = 1; i <= NPTS; ++i)
             pi += a/((i-b)*(i-c));
          clock_gettime(CLOCK_REALTIME,&tend);
          dt = (tend.tv_sec+tend.tv_nsec/1e9)-(tstart.tv_sec+tstart.tv_nsec/1e9);
          mflops = NPTS*5.0/(dt*1e6);
          printf("NPTS = %ld, pi = %f, threads = %d\n",NPTS,pi,omp_get_max_threads());
          if (mflops > max) max = mflops;
          printf("time = %f, estimated MFlops = %f, max = %f\n",dt,mflops,max);
          }
       }