zoukankan      html  css  js  c++  java
  • OpenMP之数值积分(求圆周率Pi)(sections)

    // 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)

  • 相关阅读:
    HttpRuntime.Cache的使用经验
    js 字符串中取得第一个字符和最后一个字符
    CSAPP笔记-第一章
    共和党减税法案的个人减税
    bash学习进行中
    建站日志
    Python学习进行中
    Check your data! 数据预处理血泪教训
    bash
    【python技巧系列】在循环中处理异常并继续运行
  • 原文地址:https://www.cnblogs.com/IT-hexiang/p/4084587.html
Copyright © 2011-2022 走看看