Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Pthreads MPI/Pthread程序无法扩展_Pthreads_Mpi_Openmpi - Fatal编程技术网

Pthreads MPI/Pthread程序无法扩展

Pthreads MPI/Pthread程序无法扩展,pthreads,mpi,openmpi,Pthreads,Mpi,Openmpi,我有一个MPI/Pthread程序,其中每个MPI进程将在单独的计算节点上运行。在每个MPI进程中,启动一定数量的pthread(1-8)。但是,无论MPI进程中启动了多少个pthread,总体性能基本相同。我怀疑所有的pthread都运行在同一个CPU内核上。如何将线程分配给不同的CPU内核 每个计算节点有8个核。(两个四核Nehalem处理器) 打开MPI 1.4 Linux x86_64像这样的问题通常取决于手头的问题。最有可能的情况是,您遇到了资源锁问题(线程正在竞争锁)——看起来只有一

我有一个MPI/Pthread程序,其中每个MPI进程将在单独的计算节点上运行。在每个MPI进程中,启动一定数量的pthread(1-8)。但是,无论MPI进程中启动了多少个pthread,总体性能基本相同。我怀疑所有的pthread都运行在同一个CPU内核上。如何将线程分配给不同的CPU内核

每个计算节点有8个核。(两个四核Nehalem处理器) 打开MPI 1.4
Linux x86_64

像这样的问题通常取决于手头的问题。最有可能的情况是,您遇到了资源锁问题(线程正在竞争锁)——看起来只有一个内核在做任何工作,因为在任何给定时间只有一个线程可以(有效地)做任何工作

为某个线程设置CPU相关性不是一个好的解决方案。您应该允许OS调度器以最佳方式确定给定pthread的物理核心分配


看看你的代码,试着找出你在哪里锁定了你不应该锁定的地方,或者你是否为手头的问题找到了一个正确的并行解决方案。您还应该只使用pthreads(而不是MPI)测试程序的一个版本,看看是否实现了可伸缩性。

这似乎涵盖了您的问题:听起来像是在集群上运行-如何调用程序(即,向
mpirun
/
mpiexec
传递了哪些参数)?系统的默认绑定选项可能会将每个MPI进程绑定到单个核心,在这种情况下,该进程启动的所有线程也将被绑定。请参阅[OpenMPI关于绑定选项的常见问题解答](听起来您可能正在群集上运行-您要将哪些参数传递给
mpirun
/
mpiexec
?)。