我想使用MPI在多个节点上并行执行C ++程序。 我刚刚开始实现MPI环境的初始化和销毁(MPI :: Init_thread和MPI :: Finalize())。然后我在一个节点上用mpirun编译并执行我的程序(仅用于测试目的)但我注意到一个重要的减速。没有通过mpirun(终端中的命令行)启动的相同程序几乎快两倍。
这是我到目前为止添加到我的应用程序中的代码段:
int provided = MPI::Init_thread( MPI_THREAD_FUNNELED );
if (provided!=MPI_THREAD_FUNNELED) {
std::cerr << "Unable to init MPI " << provided << std::endl ;
return 1 ;
} else {
std::cout << "provided " << provided << " Expected " << MPI_THREAD_FUNNELED << std::endl ;
}
MPI::Finalize();
我的程序已经是一个使用C ++ 11线程库的多线程应用程序。对于我所做的所有测试以及我在网上阅读的内容,这不应该是问题。
我还注意到在编译期间cmake使用的是gcc而不是mpic ++。所以我手动编译了我的项目,但它并没有改变执行时间。
你知道我使用mpirun时为什么会这么慢吗? 你知道一些可以帮助调查此类问题的工具吗?
技术细节:
感谢您的帮助
此致