【发布时间】:2019-08-12 17:49:38
【问题描述】:
我想在谷歌基准测试下运行一个特定的 MPI 函数。比如:
#include <mpi.h>
#include <benchmark/benchmark.h>
template<class Real>
void MPIInitFinalize(benchmark::State& state)
{
auto mpi = []() {
MPI_Init(nullptr, nullptr);
foo();
MPI_Finalize();
};
for(auto _ : state) {
mpi();
}
}
BENCHMARK_TEMPLATE(MPIInitFinalize, double);
BENCHMARK_MAIN();
当然,我们知道会发生什么:
*** The MPI_Init() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
我知道 MPI 不适合我想做的事情。但是 google benchmark 实在是太有用了,至少不能尝试找到一个 hack 来完成这项工作。
有什么可以做的吗?我可以分叉一个进程并将 lambda 传递给它吗?有没有可行的线程模式?即使是昂贵的东西也会有所帮助,因为我可以从调用 foo() 的调用中减去调用 foo() 的任何黑客工作的成本。
【问题讨论】:
-
您真的想在基准测量中包含
MPI_Init和MPI_Finalize吗?如果没有,为什么不自己做主? -
另外,你如何开始你的基准测试?与
mpirun?如果不是,那么您只是在单例模式下进行测试(例如,单个 MPI 任务),这不太可能是您想要做的。
标签: mpi google-benchmark