Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mpirun(1个节点)启动的程序速度慢了两倍 我想使用MPI来在多个节点上并行执行C++程序。 我刚刚开始实现MPI环境的初始化和销毁(MPI::Init_线程和MPI::Finalize()。然后我在一个节点上编译并执行了我的程序(只是为了测试),但我注意到了一个重要的减速。不通过mpirun(终端中的命令行)启动的相同程序的速度几乎是原来的两倍_C++_Multithreading_Mpi - Fatal编程技术网

使用mpirun(1个节点)启动的程序速度慢了两倍 我想使用MPI来在多个节点上并行执行C++程序。 我刚刚开始实现MPI环境的初始化和销毁(MPI::Init_线程和MPI::Finalize()。然后我在一个节点上编译并执行了我的程序(只是为了测试),但我注意到了一个重要的减速。不通过mpirun(终端中的命令行)启动的相同程序的速度几乎是原来的两倍

使用mpirun(1个节点)启动的程序速度慢了两倍 我想使用MPI来在多个节点上并行执行C++程序。 我刚刚开始实现MPI环境的初始化和销毁(MPI::Init_线程和MPI::Finalize()。然后我在一个节点上编译并执行了我的程序(只是为了测试),但我注意到了一个重要的减速。不通过mpirun(终端中的命令行)启动的相同程序的速度几乎是原来的两倍,c++,multithreading,mpi,C++,Multithreading,Mpi,这是我迄今为止添加到应用程序中的一段代码: 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 << "pr

这是我迄今为止添加到应用程序中的一段代码:

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();
int-provided=MPI::Init_线程(MPI_线程\u漏斗状);
如果(提供)=MPI_螺纹_漏斗状){

std::cerr cmake使用gcc而不是mpic++让我想知道mpic++本身就是一个编译器包装器,它在使用什么。可能与您的问题无关,但您应该消除一个变体源。您尝试过callgrind吗?您启动了多少进程/线程?到目前为止,我一直在使用两个线程(最终目标是每个节点有16个线程)我也尝试使用callgrind,但它无法看到mpirun背后发生了什么,因此它没有返回有趣的结果。我可能已经通过重新阅读openmpi的官方文档找到了解决方案:[链接]。它写为:。因此我添加了选项“绑定到无”对我的命令行来说,它似乎工作得很好。@clam37您可以回答自己的问题,以便其他人可以轻松找到解决方案。cmake使用gcc而不是mpic++使我想知道mpic++本身就是一个编译器包装器,它在使用什么。可能与您的问题无关,但您应该消除一个变体源。您尝试调用了吗研磨?您要启动多少进程/线程?到目前为止,我一直在使用两个线程(最终目标是每个节点有16个线程)。我已经用“perf”评测了我的应用程序我也尝试使用callgrind,但它无法看到mpirun背后发生了什么,因此它没有返回有趣的结果。我可能已经通过重新阅读openmpi的官方文档找到了解决方案:[链接]。它是这样写的:。因此,我在命令行中添加了“绑定到无”选项,看起来效果很好。@clam37您可以回答自己的问题,以便其他人可以轻松找到解决方案。