【问题标题】:calculating the exact time that program give without other background processes计算程序在没有其他后台进程的情况下给出的确切时间
【发布时间】:2016-07-14 11:37:54
【问题描述】:

我开始学习并行编程,为了计算性能,我应该知道程序寻找的准确时间。

所以我想测量我的 C 程序在 Linux 下搜索的时间量,但它只是显示了一些不同的答案。

在我看来,它应该与其他进程相关,顺便说一句,我正在使用此说明:

double start ,end;
start = omp_get_wtime();
.
.
.
end = omp_get_wtime();
result = end- start;

提前谢谢你。

【问题讨论】:

  • 请说明您真正想要测量的“时间”。您熟悉 wall time 和 CPU time 之间的区别吗?本质上,您还展示了您的具体结果以及它与您的预期有何不同。完全不清楚“一些不同的答案”是什么意思。

标签: linux parallel-processing openmp


【解决方案1】:

为了进行准确的基准测试,必须尽可能抑制外部影响。如果您的系统有足够的 CPU 内核,您可以使用内核参数隔离其中一些内核,从而防止任何其他进程和/或内核任务使用这些内核:

... isolcpus=3,4,5 nohz_full=3,4,5 rcu_nocbs=3,4,5 ...

这些参数将几乎完全隔离 CPU 3、4 和 5,默认情况下阻止 OS 调度程序在它们上运行进程 (isolcpus),阻止内核 RCU 系统运行它们的任务 (rcu_nocbs),以及防止定期调度程序计时器滴答声 (nohz_full)。确保不要隔离所有 CPU!

您现在可以使用 taskset -c 3-5 ... 或 OpenMP 运行时内置的机制(例如,用于 GCC 的 export GOMP_CPU_AFFINITY="3,4,5")显式地将进程分配给这些内核。请注意,即使您不使用专用的隔离 CPU,只需使用 export OMP_PROCBIND=true 或设置 GOMP_CPU_AFFINITY(Intel 为 KMP_AFFINITY)打开线程固定即可减少运行时差异。

【讨论】:

    【解决方案2】:

    为什么不直接使用时钟?

    clock_t start = clock();
    
    /* do whatever you like here */
    
    clock_t end = clock();
    double total_time = (double)(end - start) / CLOCKS_PER_SEC;
    

    或函数

    getrusage(...)
    

    ...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多