piomp.c
#include <stdio.h>
#include <omp.h>
static long num_steps = 99999999;
double step,start = 0.0,stop = 0.0;
#define NUM_THREADS 8
int main ()
{
double pi;
step = 1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel
{
int i, id,nthrds,nthreads = 0; double x, sum;
id = omp_get_thread_num();
nthrds = omp_get_num_threads();
if (id == 0) nthreads = nthrds;
printf("HELLO FROM THREAD %d\n", id);
start = omp_get_wtime();
for (i=id, sum=0.0;i< num_steps; i=i+NUM_THREADS)
{
x = (i+0.5)*step;
sum += 4.0/(1.0+x*x);
}
sum = sum*step;
#pragma omp atomic
pi += sum ;
}
stop = omp_get_wtime();
printf("pi = %f",pi);
printf("time = %f",stop-start);
}