我有一个MPI / Pthread程序,其中每个MPI进程将在一个单独的计算节点上运行。在每个MPI过程中,启动一定数量的Pthread(1-8)。但是,无论在MPI过程中启动了多少Pthread,整体性能几乎都是一样的。我怀疑所有Pthread都运行在相同的CPU核心上。如何将线程分配给不同的CPU内核?
每个计算节点有8个核心。(两个四核Nehalem处理器) 打开MPI 1.4 Linux x86_64
答案 0 :(得分:0)
这样的问题通常取决于手头的问题。最有可能的是,您遇到资源锁定问题(线程争夺锁定) - 这看起来只有一个核心正在进行任何工作,因为只有一个线程可以(有效地)在任何给定时间执行任何工作
为某个线程设置CPU关联性不是一个好的解决方案。您应该允许OS调度程序以最佳方式确定给定pthread的物理核心分配。
查看您的代码并尝试找出您应该锁定的位置,或者您是否已经针对手头的问题找到了正确的并行解决方案。您还应该仅使用pthreads(而不是MPI)测试程序的版本,并查看是否已实现缩放。