MPI-使用机器上的每个可用内核时没有性能提升

MPI-使用机器上的每个可用内核时没有性能提升,mpi,Mpi,我有一个与MPI并行的C程序(声波解算器)。然而,我一直在测试不同数量的内核的速度,我发现了一些奇怪的事情。如果我使用N个进程,其中N是机器中可用的内核数,那么我看不到下一步的性能改进 所以在我的8核机器上,我看到了从1进程到2进程到4进程的加速,但不是从4进程到8进程的加速。同样,在我的4核笔记本电脑上,我看到速度从1提高到2,但不是从2提高到4 你知道是什么原因造成的吗?许多现代(英特尔)cpu在一个物理内核上运行两个处理器。您引用的核心数实际上是可用的硬件线程数,而不是物理执行单元数 只要

我有一个与MPI并行的C程序(声波解算器)。然而,我一直在测试不同数量的内核的速度,我发现了一些奇怪的事情。如果我使用N个进程,其中N是机器中可用的内核数,那么我看不到下一步的性能改进

所以在我的8核机器上,我看到了从1进程到2进程到4进程的加速,但不是从4进程到8进程的加速。同样,在我的4核笔记本电脑上,我看到速度从1提高到2,但不是从2提高到4

你知道是什么原因造成的吗?

许多现代(英特尔)cpu在一个物理内核上运行两个处理器。您引用的核心数实际上是可用的硬件线程数,而不是物理执行单元数

只要您使用的进程数量小于或等于物理核心的数量,这些进程就会(或至少应该)被分发以使用所有可用代码。但是,一旦获取了所有物理核,其他进程将与另一个进程共享一个物理核


对于使用所有线程是否会提高性能或提高多少性能,不可能给出明确的答案。这在很大程度上取决于您正在运行的代码。上给出了一个类似问题的非常好的答案。从本质上讲,如果您的进程内存有限,或者使用cpu的不同部分(整数/浮点运算、视频编码、向量处理等),并且通信开销很小,那么您甚至可以实现完美的扩展。受cpu限制且仅执行一种计算的代码可能不会带来任何改进,或者由于通信开销,可能甚至需要更长的时间。

您真的有8(4)个物理内核,还是只有超线程()?如果你的代码在所有物理内核上都加载了,使用超线程通常不会给你带来明显的性能提升。啊,我根据你的评论做了一些研究,我想我明白了。所以我的笔记本电脑有两个物理核心,但有4个逻辑核心。因此,检查物理内核的数量不会带来太多性能提升?这取决于您的代码,但根据我的经验,使用所有线程(包括超线程)通常会降低而不是提高性能。谢谢。如果你把你的意见写进回答中,我会接受的。解决了我的问题!