我一直在尝试利用并行化来更快地使用MEEP模拟软件运行一些模拟。默认情况下,该软件只使用一个CPU,并且FDTD模拟很容易通过并行化来加速。最后我发现运行1核和4核没有区别,模拟时间是一样的。
然后,我认为我应该在每个内核上运行单独的模拟,以增加我的总模拟吞吐量(例如,同时运行4个不同的模拟)。
我发现令人惊讶的是,每当我开始一个新的模拟时,已经开始的模拟会变慢,即使它们运行在不同的内核上。例如,如果我只在一个内核上运行一次模拟,那么FDTD模拟的每个时间步长大约需要0.01秒。如果我在另一个核心上启动另一个进程,每个模拟现在每个时间步花费0.02秒,依此类推,这意味着即使我在单独的核心上运行彼此无关的不同模拟,它们都会变慢,不会给我带来净速度的提高。
我并不是在寻求帮助来解决这个问题,而是在寻求理解它的帮助,因为它激起了我的好奇心。模拟的每个实例只需要不到总内存的1%,所以这不是内存问题。我能想到的唯一一件事是共享缓存内存的内核,或者内存带宽饱和,有什么方法可以检查是否是这种情况?
模拟相当简单,我已经运行过的程序比这个程序需要更多的内存,并且通过并行化有很大的加速比。
有什么建议可以帮助我理解这种现象吗?
发布于 2016-10-19 21:35:00
我认为应该在更大的模拟上看得更好,因为turbo boost之类技术的众所周知的问题(单核性能随着线程数量的变化)不能解释你的结果。它将解释是否有一个单核处理器。
所以,我认为这可以用内存缓存级别来解释。也许你可以尝试比L3缓存大得多的模拟(对于i7> 8MB )。
发布于 2016-10-19 22:07:16
我在英特尔(R)酷睿(TM) i7-3517U CPU @1.90 CPU双核(4线程)上进行的测试。1个MPI线程的所有模拟(-np 1)
10mb模拟:
100mb模拟:
奇怪的是,两个具有两个线程的模拟的运行速度几乎与具有一个线程的两个模拟的运行速度相同。
https://stackoverflow.com/questions/40021796
复制相似问题