我一直在尝试利用并行化来更快地使用 MEEP 模拟软件运行一些模拟。默认情况下,该软件仅使用一个 CPU,并且 FDTD 仿真很容易通过并行化加速。最后我发现运行1核或4核没有区别,模拟时间是一样的。
然后我想我会改为在每个内核上运行单独的模拟以增加我的总模拟吞吐量(例如同时运行 4 个不同的模拟)。
令我惊讶的是,每当我开始一个新的模拟时,已经开始的模拟会变慢,即使它们在不同的内核上运行。例如,如果我只在 1 个内核上运行 1 个模拟,则 FDTD 模拟的每个时间步长大约需要 0.01 秒。如果我在另一个内核上启动另一个进程,每个模拟现在每个时间步花费 0.02 秒,依此类推,这意味着即使我在不同的内核上运行彼此无关的不同模拟,它们都会减慢速度,给我没有净增加速度。
我不一定要寻求帮助来解决这个问题,就像我正在寻求帮助理解它一样,因为它激发了我的好奇心。每个模拟实例需要的内存不到我总内存的 1%,所以这不是内存问题。我唯一能想到的是共享缓存的内核,或者内存带宽饱和,有没有办法检查是否是这种情况?
模拟相当简单,我运行的程序比这个更需要内存,并且并行化有很大的加速。
有什么提示可以帮助我理解这种现象吗?