c - 使用 MPI 进行不同的时间测量

标签 c time parallel-processing mpi distributed-computing

每次运行 MPI 应用程序时,我都会得到不同的时间测量值。我是这样测量时间的:

MPIt1 = MPI_Wtime();

// do work

MPIt2 = MPI_Wtime();
MPIelapsed = MPIt2 - MPIt1;

行为是相同的,有或没有 MPI_Barrier(MPI_COMM_WORLD);。当然,每次可执行文件运行时,程序的结果都是正确的。

检查我得到的 5x5 矩阵的极差:

0.00025 seconds // first run
0.10728 seconds // second run

此外,问题出现在较大的矩阵上,例如 2000x2000:

0.55996 seconds // first run
0.83657 seconds // second run

我是不是用错了时间?或者这是 MPI 的已知问题?请注意,时间仅从主节点报告。

我正在另一台计算机上运行该程序,我已使用 ssh 登录。我记得当我真正坐在那台电脑前时,执行速度更快了。我是唯一登录的用户:

gsamaras@pythagoras:~/konstantis/cholesky$ who
gsamaras my internet connection
gsamaras@pythagoras:~/konstantis/cholesky$

EDIT 多次运行:

1.6035
0.422967
1.53891
0.347107
0.761991
1.22824
0.934829
0.45618
0.794225
0.554099
1.09323
0.421858
0.621015
0.889867
0.613867
0.459144
2.02273
0.67689
2.2390
1.0448
0.751333

编辑_2

  1. 通过在 run.sh 中多次调用该程序,我得到了计时。
  2. 我在一台机器上运行程序,有 4 个内核。
  3. 我正在使用 MPICH2

最佳答案

我从一位同事和帕特里克那里得出的结论是:

  1. MPI 的启动时间可能有很大差异。
  2. 相对较小的执行时间不值得信赖,可能会有所不同 很多。

关于c - 使用 MPI 进行不同的时间测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351892/

相关文章:

c - 并行化小型网络排序

c - 循环崩溃中的 OpenMP 错误

c - 如何从文件中读取所有字符并将其存储在二维数组中而不使用\n?

c - 用 C 语言写入 STM32L4x1 闪存

time - 将 @time 报告的 Julia 中大向量的分配加倍

ruby-on-rails - 在 Rails 中验证时间

使用 malloc 的连续内存块

c - 垃圾值;奇怪的字符串 strlen 值

c++ - 测量 C++ 中的执行时间 : clock() and clock_gettime() give absolutely different results

python - 是否可以同时执行两个函数