Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个 MPI/Pthread 程序,其中每个 MPI 进程都将在单独的计算节点上运行。在每个 MPI 进程中,都会启动一定数量的 Pthreads (1-8)。然而,无论在一个 MPI 进程中启动多少个 Pthread,整体性能几乎是相同的。我怀疑所有的 Pthread 都在同一个 CPU 内核上运行。如何将线程分配给不同的 CPU 内核?
每个计算节点有 8 个核心。(两个四核 Nehalem 处理器) Open MPI 1.4 Linux x86_64
像这样的问题通常取决于手头的问题。最有可能的是,您遇到了资源锁定问题(线程正在竞争锁定)——这看起来只有一个内核在做任何工作,因为在任何给定时间只有一个线程可以(有效地)做任何工作.
为某个线程设置 CPU 亲和性并不是一个好的解决方案。您应该允许 OS 调度程序以最佳方式确定给定 pthread 的物理核心分配。
查看您的代码并尝试找出您在不应该锁定的位置,或者您是否针对手头的问题提出了正确的并行解决方案。您还应该只使用 pthreads(而不是 MPI)测试程序的一个版本,看看是否实现了缩放。