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 的结果,这根本没有任何意义。
谢谢。
我正在使用 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 的结果,这根本没有任何意义。
谢谢。