我想在谷歌基准下运行特定的 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 对我想做的事情并不酷。但是谷歌基准测试太有用了,至少不能尝试找到一个黑客来完成这项工作。
有什么可以做的吗?我可以分叉一个进程并将 lambda 传递给它吗?有没有可行的线程模式?即使是昂贵的东西也会有所帮助,因为我可以foo()
从 which call中减去在没有调用的情况下进行任何 hack 工作的成本foo()
。