// sectionspi.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include <time.h>
#include "omp.h"
static long num_steps = 100000000000;
double step;
#define NUM_THREADS 4
int _tmain(int argc, _TCHAR* argv[])
{
int i;
clock_t t1, t2;
double sum = 0, pi = 0.0;
step = 1.0 / (double)num_steps;
omp_set_num_threads(NUM_THREADS);
t1 = clock();
#pragma omp parallel sections reduction(+:sum)
{
#pragma omp section
{
double x;
for (int i = omp_get_thread_num(); i <num_steps; i += NUM_THREADS)
{
x = (i + 0.5)*step;
sum = sum + 4.0 / (1.0 + x*x);
}
}
#pragma omp section
{
double x;
for (int i = omp_get_thread_num(); i <num_steps; i += NUM_THREADS)
{
x = (i + 0.5)*step;
sum = sum + 4.0 / (1.0 + x*x);
}
}
}
pi = step * sum;
t2 = clock();
printf("pi = %.15f\n", pi);
printf("parallel time=%d\n", (t2 - t1));
t1 = clock();
sum = 0;
double x;
for (int i = 0; i <num_steps; i++)
{
x = (i + 0.5)*step;
sum = sum + 4.0 / (1.0 + x*x);
}
pi = step * sum;
t2 = clock();
printf("pi = %.15f\n", pi);
printf("serial time=%d\n", (t2 - t1));
printf("星星笔记\n");
system("pause");
return 0;
}
https://blog.csdn.net/Lalgorithm?type=blog