我一直在尝试利用并行化来使用MEEP仿真软件更快地运行一些仿真。默认情况下,软件仅使用一个CPU,并且通过并行化可以轻松加快FDTD模拟。最后我发现运行1或4个核心没有区别,模拟时间是相同的。
然后我想我会在每个核心上运行单独的模拟以增加我的总模拟吞吐量(例如同时运行4个不同的模拟)。
我发现令人惊讶的是,无论何时我开始新的模拟,已经开始的模拟都会变慢,即使它们在不同的核心上运行。例如,如果我在1个核心上仅运行1次模拟,则FDTD模拟的每个时间步长大约需要0.01秒。如果我在另一个核心上启动另一个进程,每个模拟现在每个步骤花费0.02秒,依此类推,这意味着即使我在不同的核心上运行彼此无关的不同模拟,它们都会减速给我净增加速度。
我不一定在寻求帮助来解决这个问题,因为我正在寻求帮助来理解它,因为它使我的好奇心达到了顶峰。模拟的每个实例都需要不到总内存的1%,因此这不是内存问题。我唯一能想到的是内核共享缓存,或内存带宽已经饱和,有没有办法检查是否是这种情况?
模拟非常简单,我运行的程序比这个程序的内存要多得多,并且在并行化方面有很大的加速。
有任何提示可以帮助我理解这种现象吗?
答案 0 :(得分:0)
I think it should be better look on bigger simulations because the well known issue with the turbo boost like technology (the single core performance change with the number of threads) cannot explain your result. It will explain just if have a single core processor.
So, I think that can be explain with memory cache levels. Maybe if you try simulations much bigger than L3 Cache (> 8MB for i7).
答案 1 :(得分:0)
我在Intel(R)Core(TM)i7-3517U CPU @ 1.90GHz双核(4线程)上的测试。所有模拟1 mpi螺纹(-np 1)
10mb模拟:
一次模拟0.0129秒/步
100mb模拟:
四个模拟1.13秒/步
奇怪的是,两个模拟的2个线程的运行速度几乎与两个模拟的线程相同。