说,我有这个代码
double start = MPI_Wtime();
ParallelMatrixVectorProductRotuine(...);
double end = MPI_Wtime();
我如何解释我得到的数字。例如,通过 1 个进程,我得到类似
1.7342
对于两个过程,我得到
1.0023
1.6432
我能说什么呢?我取这些结果的平均值吗?
说,我有这个代码
double start = MPI_Wtime();
ParallelMatrixVectorProductRotuine(...);
double end = MPI_Wtime();
我如何解释我得到的数字。例如,通过 1 个进程,我得到类似
1.7342
对于两个过程,我得到
1.0023
1.6432
我能说什么呢?我取这些结果的平均值吗?
这取决于你的目标。对于一个过程,很明显是整个程序启动的挂墙时间。
对于两个进程,你得到了和这对应于处理器 1 和 2 上的 walltime。
通常,人们对解决问题所花费的总时间感兴趣 - 也就是总的 walltime,这将是. 但是,我会建议一些额外的措施来做好工作:
MPI_BARRIER在计算完成之前和之后放置一个。仅在主节点上测量 walltime,最好在屏障之前和之后进行。然后,您将获得准确的walltime ParallelMatrixVectorProductRotuine(...);for处理器。
不同进程的不同时间可能有多种原因。
所以你唯一能说的就是这些过程在某种程度上是不平衡的。您应该报告什么作为操作的客观总体时间?这样的概念有意义吗?
如果您真的想分配一个客观的全球时间,那么我会使用障碍,并将计时器立即放在障碍之后。尽管屏障在语义上不是时间同步,但实际上它通常是。
但是请记住,如果您再次移除障碍,您的生产代码会更快,这意味着时间的概念一开始就定义不明确。