MPI_Wtime() 混淆 - 看起来不正确

MPI_Wtime() confusion - does not appear correct

我正在使用 MPI_Wtime() 来测量并行应用程序的速度。

运行 4 核上的应用程序在 0.000061 内完成(大约需要 30 秒)

运行 在 50 个内核上,0.000308。 (瞬时)

将工作负载乘以 10 倍,仍然在 50 个内核上,时间为 0.000752。 (大约 2 分钟 irl)

int main(int argc, char* argv[]) {

    ofstream file;
    file.open("primes.txt");
    file.close();

    MPI_Init(&argc, &argv);
    MPI_Status status;

    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    if (rank == 0)
        t1 = MPI_Wtime();

    int size;
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    if (rank == 0)
        Parent parent(size);
    else
        Child child(size, rank);

    if (rank == 0) {
        t2 = MPI_Wtime();
    }

    MPI_Finalize();

    if (rank == 0) 
        printf("Runtime = %f\n", t2 - t1);

}

父级包含管理子级的循环。

这些数字没有任何意义。我做错了什么?

MPI_Wtick() 是 1e-9

感谢@Giles Gouaillardet 和@Victor Eijkhout 的回答。

将 t1 和 t2 移动到本地并在每次记录时间之前添加 MPI_Barrier 后,我能够得到一个有意义的答案。

运行 4 核上的代码给出了 20.277840 的结果,这听起来是正确的。

之前,同样的测试给出了 0.000061 的结果,这根本没有任何意义。

谢谢。