OpenMP - 随机运行时间 - 为什么具有如此高的运行时间差异?

时间:2018-04-17 20:10:05

标签: parallel-processing openmp parallelism-amdahl

我正在关注 Tim Mattson 关于OpenMP的讲座,以了解实现某些并行编程概念的方法。

我试图观察并行程序的运行时行为,该程序使用 3x10 ^ 8 步骤来计算 PI 的值。

这是代码,

#include <omp.h>
#include <stadio.h>

static long num_steps = 300000000;
double step;
#define PAD 8 // tried 50 too
#define NUM_THREADS 4
int main()
{
    int i, nthreads;
    double pi, sum[NUM_THREADS][PAD];
    double ts, te;

    ts = omp_get_wtime();

    step = 1.0/(double) num_steps;
    omp_set_num_threads(NUM_THREADS);
    #pragma omp parallel
    {
        int i, id,nthrds;
        double x;

        id = omp_get_thread_num();
        nthrds = omp_get_num_threads();
        if (id == 0)  nthreads = nthrds;
        for (i=id, sum[id]=0.0;i< num_steps; i=i+nthrds) {
            x = (i+0.5)*step;
            sum[id][0] += 4.0/(1.0+x*x);
        }
    }

    for(i=0, pi=0.0;i<nthreads;i++)
        pi += sum[i][0] * step;

    te = omp_get_wtime();

    printf("%.10f\n", pi);
    printf("%.f\n", te-ts);

}

现在我在Ubuntu 14.04 LTS上运行双核机器。对 omp_get_num_procs() 的调用返回 2 。运行时间非常随机,从1.31秒到4.46秒不等。而连续程序几乎总是花费2.31秒。

我尝试创建1,2,3,4,最多10个线程。在每种情况下,运行时间变化太大,但是在线程更多的情况下平均值更小。我没有运行任何其他应用程序。

任何人都可以解释为什么运行时间变化太多了吗?

如何准确计算运行时间?讲师给出了他的电脑运行时间,这似乎是一致的。他还使用双核处理器。

1 个答案:

答案 0 :(得分:0)

使用OpenMP进行双CPU比较:

Result          : 3.1415926536
Number of CPU-s : 2  
Duration        : 2.4025482161

似乎有一组相当一致的代码执行时间:

/*           Duration        : 2.3984972970
             Duration        : 2.4004815188
             Duration        : 2.3814983589
             Duration        : 2.4070654172
             Duration        : 2.3964317020
             Duration        : 2.3858104548
             Duration        : 2.3765923560
             Duration        : 2.3734730321
    -O3:
             Duration        : 0.4159400249
             Duration        : 0.3089567909
             Duration        : 0.3106977220
             Duration        : 0.3312316008
             Duration        : 0.2856188160
             Duration        : 0.2984415500
             Duration        : 0.3282426349
             Duration        : 0.2836121118
                                    :......
  + FYI:     #pragma-overheads      :......
             Duration        : 0.0001377461                                                                                           
             Duration        : 0.0001228561
             Duration        : 0.0001215260
    REF:
    Amdahl's Law             >>> https://stackoverflow.com/revisions/18374629/3
    criticism,
    on
    (not-)including also the real-world's infrastructure add-on
    { setup | termination }-overhead costs of #pragma omp parallel section
    ( 
      simplified test w/o the add-on costs of global OpenMP setup & configuration
      )

             */

将注意力转移到 S ystem- u nder- T est工作负载背景噪音。

最好在无头平台上重新测试您的代码,以避免任何类型的GUI相关工作负载干扰测试的计算部分。

可以享受此sandboxed online-TiO-platform重新运行实验。