使用 Linux 的时间效用来衡量 MPI 程序的性能

Using Linux's time utility to measure performance of MPI program

我正在使用不同的编译器设置对 MPI 程序进行基准测试。

现在我使用 Linux 的 time 这样做:

$> $(which time) mpirun -v [executable]

就我的预期而言,我得到的值看起来不错。

有什么理由让我为此使用time吗?

测量所需的 CPU 时间是这里的主要关注点。

我知道单台机器上的基准测试不一定与集群上发生的事情一致,但这超出了范围。

您应该使用time来获取MPI程序的CPU时间。

首先,这不适用于分布式设置。现在您的问题不清楚您是针对单个节点还是集群,但这并不重要。 MPI 实现可以使用任何机制来启动,甚至可以在单个节点上启动。所以时间可能包括也可能不包括实际申请过程的CPU时间。

但还有更多概念性问题:CPU 时间对于 MPI 程序意味着什么?那将是所有进程的 CPU 时间总和。对于基准测试来说,这是一个糟糕的指标:它没有量化改进,也与整体运行时间无关。例如,一个非常不平衡的代码版本可能比平衡版本使用更少的 CPU 时间,但使用更多的时间。或者启用忙等待而不是阻塞可能会改善整体运行时间,但也会增加使用的 CPU 时间。要真正了解发生了什么,以及哪个进程使用了​​什么样的资源,您应该求助于 proper parallel performance analysis tool.

在 HPC 中,您的预算不会按 CPU 时间计算,而是按保留的 CPUs * walltime 计算。因此,如果您必须使用一维指标,那么 walltime 是最佳选择。现在您可以使用 time mpirun ... 来获得它,尽管对于短 运行 应用程序来说准确性不会很好。