![这种加速不足是否与处理器或代码有关?](https://linux22.com/image/1566704/%E8%BF%99%E7%A7%8D%E5%8A%A0%E9%80%9F%E4%B8%8D%E8%B6%B3%E6%98%AF%E5%90%A6%E4%B8%8E%E5%A4%84%E7%90%86%E5%99%A8%E6%88%96%E4%BB%A3%E7%A0%81%E6%9C%89%E5%85%B3%EF%BC%9F.png)
我编写了一个使用 MPI 的程序,它可以解决一个非常大的方程组。对于非常大的系统,我得到了非常好的“加速”。我的意思是,如果我增加进程数,那么完成一半所需的时间加上一个常数时间,我认为这是通信。例如,在一个进程上可能需要 60 秒,然后在两个进程上可能需要 35 秒(60 + 5),然后在 4 个进程上可能需要 20.5(17.5+3)等。
但是,当进入大约 100 万乘以 100 万的系统时,我开始得到奇怪的结果。当从 4 核升级到 8 核时,我得到的“通信”时间只有原来的一半,再加上 10 秒。也就是说,完成计算所需的时间从 ~260 秒缩短到 ~140 秒。
这很好,但是当从 8 增加到 16 时,时间从 ~140 增加到 ~110,当从 16 增加到 32 时,我也得到了非常类似的糟糕结果。即,从 ~110 增加到 ~85。
我似乎认为它可能与处理器本身有关,因为这种行为不会突然出现(?)。
系统中有 2 个这样的处理器
https://ark.intel.com/products/120485/Intel-Xeon-Gold-6140-Processor-24_75M-Cache-2_30-GHz
还有大约 8000GB 的 RAM。
我想要一些解释来了解为什么会发生这种情况。
我很乐意提供更多信息。我知道这是一个复杂的问题,我不确定你总共需要什么信息。
答案1
这种方式很难诊断,但有以下几点:
每个进程都会使用 RAM,因此进程数量加倍意味着所需 RAM 也加倍。如果可用的物理 RAM 已耗尽,则交换到磁盘会减慢处理速度。
即使在多核计算机中,有些资源也是所有进程共用的。这些资源主要包括 RAM 和磁盘,因此密集使用意味着进程将争夺资源访问权限,并会出现等待的情况。
如果进程使用信号量等同步方法,则预计会浪费一些等待时间,并且该时间将与进程数量成正比增加。
通过任务管理器或资源管理器观察进程的行为就可以看到许多这些瓶颈,因此您可以查明瓶颈并进行改进。