1

我一直在尝试利用并行化来更快地使用 MEEP 模拟软件运行一些模拟。默认情况下,该软件仅使用一个 CPU,并且 FDTD 仿真很容易通过并行化加速。最后我发现运行1核或4核没有区别,模拟时间是一样的。

然后我想我会改为在每个内核上运行单独的模拟以增加我的总模拟吞吐量(例如同时运行 4 个不同的模拟)。

令我惊讶的是,每当我开始一个新的模拟时,已经开始的模拟会变慢,即使它们在不同的内核上运行。例如,如果我只在 1 个内核上运行 1 个模拟,则 FDTD 模拟的每个时间步长大约需要 0.01 秒。如果我在另一个内核上启动另一个进程,每个模拟现在每个时间步花费 0.02 秒,依此类推,这意味着即使我在不​​同的内核上运行彼此无关的不同模拟,它们都会减慢速度,给我没有净增加速度。

我不一定要寻求帮助来解决这个问题,就像我正在寻求帮助理解它一样,因为它激发了我的好奇心。每个模拟实例需要的内存不到我总内存的 1%,所以这不是内存问题。我唯一能想到的是共享缓存的内核,或者内存带宽饱和,有没有办法检查是否是这种情况?

模拟相当简单,我运行的程序比这个更需要内存,并且并行化有很大的加速。

有什么提示可以帮助我理解这种现象吗?

4

2 回答 2

0

我认为应该更好地看待更大的模拟,因为众所周知的涡轮增压技术问题(单核性能随线程数量而变化)无法解释您的结果。它将解释是否具有单核处理器。

所以,我认为这可以用内存缓存级别来解释。也许如果您尝试比 L3 缓存大得多的模拟(i7 大于 8MB)。

于 2016-10-19T13:34:59.653 回答
0

我在 Intel(R) Core(TM) i7-3517U CPU @ 1.90GHz 双核(4 线程)上的测试。1 mpi 线程的所有模拟 (-np 1)

10mb模拟:

  • 四次模拟 0.0255 s/step
  • 二次模拟 0.0145 s/step
  • 一次模拟 0.0129 s/步

    100mb 模拟:

  • 四模拟 1.13 s/step

  • 二次模拟 0.61 s/step
  • 一次模拟 0.53 s/步

奇怪的是,两个具有 2 个线程的模拟每个运行的速度几乎与具有 1 个线程的两个模拟相同。

于 2016-10-19T14:07:15.803 回答