用mpirun(1个节点)启动的程序是两次慢

时间:2015-08-11 09:02:01

标签: c++ multithreading mpi

我想使用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时为什么会这么慢吗? 你知道一些可以帮助调查此类问题的工具吗?

技术细节:

  • gcc版本:4.8.2
  • mpi实现:openmpi v 1.8.1
  • kernel:2.6.32-504.30.3.el6.x86_64
  • OS:CentOS 6.6

感谢您的帮助

此致

0 个答案:

没有答案