You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程池运行N体模拟CPU利用率极低问题求助

问题:Python多进程并行N体模拟性能极差

我需要在Python中并行运行大量独立的N体模拟,单个模拟的耗时会因天体参数不同而差异巨大。我采用multiprocessing模块构建进程池,通过starmap()分配任务,并按进程ID将结果保存至不同文件,但并行性能极差:我的笔记本有4核CPU,2进程和4进程之间无加速效果,Unix的time工具显示CPU使用率仅约150%。

以下是我的代码:

import rebound
import numpy as np
import multiprocessing as mp

def two_orbits_one_pool(orbit1, orbit2):
    #######################################
    print('process number', mp.current_process().name)
    #######################################
    # build simulation
    sim = rebound.Simulation()
    # add sun
    sim.add(m=1.)
    # add two overlapping orbits
    sim.add(primary=sim.particles[0], m=orbit1['m'], a=orbit1['a'], e=orbit1['e'], inc=orbit1['i'], \
            pomega=orbit1['lop'], Omega=orbit1['lan'], M=orbit1['M'])
    sim.add(primary=sim.particles[0], m=orbit2['m'], a=orbit2['a'], e=orbit2['e'], inc=orbit2['i'], \
            pomega=orbit2['lop'], Omega=orbit2['lan'], M=orbit2['M'])
    sim.move_to_com()
    # integrate for 10 orbits of orbit1
    P = 2.*np.pi * np.sqrt(orbit1['a']**3)
    sim.automateSimulationArchive("archive-{}.bin".format(mp.current_process().name), interval=P)
    sim.integrate(10.*P)

if __name__ == "__main__":
    # orbit definitions
    N_M = 10
    N_lop = 10
    m = 1e-6
    a, e = 1., 0.3
    inc, lop, lan = 0., 0., 0.
    M = np.linspace(0., 2*np.pi, endpoint=False, num=N_M)
    dlop = np.linspace(0., 0.05, num=N_lop)
    # orbit dictionaries
    args = []
    for i in range(dlop.shape[0]):
        for j in range(M.shape[0]):
            for k in range(M.shape[0]):
                args.append( ( {'m':m, 'a':a, 'e':e, 'i':inc, \
                                'lop':lop, 'lan':lan, 'M':M[j]},
                               {'m':m, 'a':a, 'e':e, 'i':inc, \
                                'lop':lop+dlop[i], 'lan':lan, 'M':M[k]} ) )
    # fill the pool with orbit jobs
    with mp.Pool() as pool:
        pool.starmap(two_orbits_one_pool, args)

我更熟悉OpenMP和MPI,对Python并行编程不太了解,对multiprocessing模块的表现很失望,考虑尝试使用numba模块。

补充分析

测试分析显示:部分初始条件因天体近距离交会导致积分时间极长,且保存时间约为积分时间的5倍,任务不仅被慢进程拖慢,还受磁盘IO限制。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:05:31