OpenMP 之 临界区 求数值积分圆周率(pi)(学习笔记)

来源:互联网 发布:淘宝如何发货 编辑:程序博客网 时间:2024/06/13 00:50

OpenMP 并行求数值积分, 临界区求数值积分圆周率(pi)方法

开启两个并行线程程序如下:


#include "stdafx.h"#include <stdio.h>#include <time.h>#include <stdlib.h>#include <omp.h>static long num_steps = 100000000;double step;#define NUM_THREADS 2int _tmain(int argc, _TCHAR* argv[]){int i;clock_t t1,t2;double x,sum ,pi = 0.0;step = 1.0/(double) num_steps;omp_set_num_threads(NUM_THREADS);t1 = clock();    #pragma omp parallel private (i,x,sum){int id = omp_get_thread_num();for(i= id,sum = 0.0; i < num_steps ;i = i+NUM_THREADS){x=(i+0.5)*step;sum = sum + 4.0/(1.0 + x*x);}        #pragma omp criticalpi += sum * step;}t2 = clock();printf("pi = %.15f\n",pi);printf("parallel time=%d\n",(t2-t1));t1 = clock();sum =0;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;}
运行结果如下图:

开启四个并行线程(修改如下语句):


#define NUM_THREADS 4 
运行结果如下图


0 0
原创粉丝点击