// Pi.cpp : 定义控制台应用程序的入口点。 //求圆周率PI #include "stdafx.h" #include <windows.h> #include <time.h> #include <omp.h> #include <iostream> using namespace std; static long num_steps=1000000000;//定义所分的块数 #define NUM_THREADS 2 //定义所开启的线程数 int _tmain(int argc, _TCHAR* argv[]) { int i; omp_set_num_threads(NUM_THREADS);//开启线程 double x,sum=0.0,pi; clock_t start_time,end_time; double step=1.0/(double)num_steps; //并行-------------------------------------- start_time=clock(); #pragma omp parallel sections reduction(+:sum) private(x,i) { #pragma omp section { for (i=omp_get_thread_num();i<num_steps;i=i+NUM_THREADS) { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } } #pragma omp section { for (i=omp_get_thread_num();i<num_steps;i=i+NUM_THREADS) { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } } } pi=step*sum; end_time=clock(); cout<<"Pi="<<pi<<endl; cout<<"并行time="<<end_time-start_time<<endl; //串行----------------------------------- sum=0.0; start_time=clock(); for (i=0;i<num_steps;i++) { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } pi=step*sum; end_time=clock(); cout<<"Pi="<<pi<<endl; cout<<"串行time="<<end_time-start_time<<endl; system("pause"); return 0; }
//运行结果如下:(相对加速比:7675/4496=1.71)