我正在使用不同的编译器设置对MPI程序进行基准测试。
现在我使用Linux的time
来执行此操作:
$> $(which time) mpirun -v [executable]
根据我的预期,我看到的价值看起来不错。
我不为此使用time
是否有任何理由?
测量所需的CPU时间是这里的主要关注点。
我知道在一台机器上进行基准测试不一定与集群上发生的情况一致,但这超出了范围。
答案 0 :(得分:1)
你应该不使用time
来获取MPI程序的CPU时间。
首先,这不适用于分布式设置。现在你的问题不清楚你是针对单个节点还是集群,但这并不重要。 MPI实现可以使用任何机制来甚至在单个节点上启动。因此,时间可能包括也可能不包括实际应用程序进程的CPU时间。
但是还有更多的概念问题:MPI程序的CPU时间是什么意思?这将是所有进程的CPU时间总和。这对于基准测试来说是一个糟糕的指标:它没有量化改进,也与整体运行时无关。例如,代码的非常不平衡的版本可能使用更少的CPU时间,但比平衡的更长的时间。或者启用忙等待而不是阻塞可以改善整体运行时间,但也会增加使用的CPU时间。要真正了解发生了什么,以及哪个流程使用了哪种资源,您应该使用proper parallel performance analysis tool。
在HPC中,您不会按CPU时间预算,而是按预留的CPU *壁时间预算。因此,如果您必须使用一维度量标准,那么壁挂时间就是您的选择。现在你可以使用time mpirun ...
来获得它,虽然准确性对于短期运行的应用程序来说不会很好。