使用Linux';测量MPI程序性能的s时间实用程序

使用Linux';测量MPI程序性能的s时间实用程序,mpi,benchmarking,Mpi,Benchmarking,我正在用不同的编译器设置对MPI程序进行基准测试 现在我使用Linux的time来实现这一点: $> $(which time) mpirun -v [executable] 根据我的预期,我得到的值看起来还行 有什么理由不应该为此使用时间 测量所需的CPU时间是这里的主要兴趣 我知道,在一台机器上进行基准测试不一定会与集群上发生的事情一致,但这超出了范围。您不应该使用时间来获取MPI程序的CPU时间 首先,这在分布式设置中不起作用。现在,您的问题还不清楚是针对单个节点还是集群,但这根本

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

现在我使用Linux的
time
来实现这一点:

$> $(which time) mpirun -v [executable]
根据我的预期,我得到的值看起来还行

有什么理由不应该为此使用
时间

测量所需的CPU时间是这里的主要兴趣


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

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

首先,这在分布式设置中不起作用。现在,您的问题还不清楚是针对单个节点还是集群,但这根本不重要。MPI实现可以使用任何机制来启动,即使是在单个节点上。因此,时间可能包括也可能不包括实际应用程序进程的CPU时间

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


在HPC中,您的预算不是按CPU时间计算的,而是按保留的CPU*walltime计算的。因此,如果你必须使用一维度量,那么walltime就是一种方法。现在,您可以使用
time-mpirun…
来实现这一点,尽管对于短时间运行的应用程序来说,精确度不是很高。

谢谢您的详细回答!我在这件事上没有什么经验,所以非常感谢!