使用 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 ...
来获得它,尽管对于短 运行 应用程序来说准确性不会很好。
我正在使用不同的编译器设置对 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 ...
来获得它,尽管对于短 运行 应用程序来说准确性不会很好。