none
关于openMP,为什么统计的运行时间不一样? RRS feed

  • 问题

  • 泰勒公式求和   e^x≈1+x+x^2/2!+x^3/3!+……+x^n/n!

    #include "stdafx.h"
    #include<iostream>

    #include<time.h>
    #include<omp.h>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    double start,stop;
    int n=1000000000;     //泰勒公式的n值
    float x,t;     //泰勒公式的x值
    double time;
    double sum;    //总和e^x
    sum=1;
    t=1.0;
    cout<<"令x的值为: ";
    cin>>x;
    start=clock();
    #pragma omp parallel for  reduction(+:sum)
    for(int i=1;i<=n;i++)
    {
    t=t*x/i;
    sum=sum+t;
    }
    stop=clock();

    time=(stop-start)/1000;
    cout<<endl<<"x="<<x<<"时, e^x="<<sum<<endl;
    cout<<"计算过程耗时"<<time<<"秒"<<endl<<endl<<endl;
    return 0;
    }

    为什么使用#pragma omp parallel for  reduction(+:sum)时运行输入不同的x值时,统计的时间都不一样?

    不使用时所耗时间都一样

    2014年4月7日 15:23

答案

  • 你好:

    我用你的代码在我的机子上测试了下,发现不管使不使用x值,统计的时间都不一样。

    我建议你在你的代码上加上一个循环,这样有利于比较输入不同的x值统计的时间。比如:

    for(int count=0; count<4;count++)
      {
    	 double start,stop;
    	 int n=1000000000;     //泰勒公式的n值
    	 float x,t;     //泰勒公式的x值
    	 double time;
    	 double sum;    //总和e^x
    	 sum=1;
    	 t=1.0;
    	 cout<<"x=: ";
    	 cin>>x;
    	 start=clock();
    	 #pragma omp parallel for  reduction(+:sum)
    	 for(int i=1;i<=n;i++)
    	 {
    	 t=t*x/i;
    	 sum=sum+t;
    	 }
    	 stop=clock();
    
    	 time=(stop-start)/1000;
    	 cout<<endl<<"x="<<x<<", e^x="<<sum<<endl;
    	 cout<<"time consuming"<<time<<"s"<<endl<<endl<<endl;
      }
    你得多测试几次,这样有利于测试统计时间。

    2014年4月8日 8:51
    版主