// 6-32.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
#include <omp.h>
static long num_steps=100000000;
double step;
#define NUM_THREADS 2
int _tmain(int argc, _TCHAR* argv[])
{
clock_t t1,t2;
double pi=0.0,sum[NUM_THREADS],sum2=0.0;
step=1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS);
t1=clock();
#pragma omp parallel
{
double x;
int i;
int id=omp_get_thread_num();
for(i=id,sum[id]=0.0;i<num_steps;i=i+NUM_THREADS)
{
x=(i+0.5)*step;
sum[id]+=4.0/(1.0+x*x);
}
}
for(int i=0;i<NUM_THREADS;i++)
{
pi+=sum[i]*step;
}
t2=clock();
printf("PI=%.15f\n",pi);
printf("parallel time:%d\n",t2-t1);
double x;
t1=clock();
for(int i=0;i<num_steps;i++)
{
x=(i+0.5)*step;
sum2=sum2+4.0/(1.0+x*x);
}
pi=step*sum2;
t2=clock();
printf("PI=%.15f\n",pi);
printf("serial time:%d\n",t2-t1);
system("pause");
return 0;
}
结果
