MPI - 使用机器上的每个可用核心时没有性能提升
MPI - No performance gain when using every available core on the machine
我有一个与 MPI 并行化的 C 程序(声波求解器)。然而,我一直在测试不同数量内核的加速,我发现了一些奇怪的事情。如果我使用 N 个进程,其中 N 是机器中可用内核的数量,那么我看不到下一步的性能改进。
所以在我的 8 核机器上我看到加速从 1 个进程到 2 个进程再到 4 个进程,但不是从 4 到 8。同样在我的 4 核笔记本电脑上我看到加速从 1 到 2,但不是从 2到 4。
知道是什么原因造成的吗?
许多现代(Intel-)cpu 运行 两个 hyperthreads 在一个物理内核上。你说的核心数实际上是可用的硬件线程数,而不是物理执行单元数。
只要您使用的进程数量小于或等于物理内核的数量,这些进程就会(或至少应该)被分配以使用所有可用代码。但是一旦所有物理核心都被占用,其他进程将与另一个进程共享一个物理核心。
关于使用所有线程是否会提高性能或提高多少,无法给出明确的答案。这在很大程度上取决于您使用的代码 运行ning。 superuser.com 上对类似问题给出了一个非常好的答案。本质上,如果您的进程受内存限制或使用 cpu 的不同部分(Integer/Floating 点算法、视频编码、矢量处理,...)并且通信开销很小,您甚至可能获得完美的缩放. cpu 绑定且仅执行一种类型计算的代码可能不会带来任何改进,甚至可能由于通信开销而需要更长的时间。
我有一个与 MPI 并行化的 C 程序(声波求解器)。然而,我一直在测试不同数量内核的加速,我发现了一些奇怪的事情。如果我使用 N 个进程,其中 N 是机器中可用内核的数量,那么我看不到下一步的性能改进。
所以在我的 8 核机器上我看到加速从 1 个进程到 2 个进程再到 4 个进程,但不是从 4 到 8。同样在我的 4 核笔记本电脑上我看到加速从 1 到 2,但不是从 2到 4。
知道是什么原因造成的吗?
许多现代(Intel-)cpu 运行 两个 hyperthreads 在一个物理内核上。你说的核心数实际上是可用的硬件线程数,而不是物理执行单元数。
只要您使用的进程数量小于或等于物理内核的数量,这些进程就会(或至少应该)被分配以使用所有可用代码。但是一旦所有物理核心都被占用,其他进程将与另一个进程共享一个物理核心。
关于使用所有线程是否会提高性能或提高多少,无法给出明确的答案。这在很大程度上取决于您使用的代码 运行ning。 superuser.com 上对类似问题给出了一个非常好的答案。本质上,如果您的进程受内存限制或使用 cpu 的不同部分(Integer/Floating 点算法、视频编码、矢量处理,...)并且通信开销很小,您甚至可能获得完美的缩放. cpu 绑定且仅执行一种类型计算的代码可能不会带来任何改进,甚至可能由于通信开销而需要更长的时间。