使用mpi4py并行化python for循环

我对并行化和MPI还是陌生的。 我有一个有效的python脚本。它有一个for循环,我想通过使用mpi4py合并多处理程序在不同的内核中运行。

仅供参考:我的Cpu具有8个内核,使用Ubuntu 18.04.3 LTS,Python 3.6.8

import math
import cmath
import numpy as np

cj = cmath.sqrt(-1); Tp = 10e-6; Xc = 2e3; c = 3e8; B0 = 500e6; X0 = 50; fc = 2e9; ntarget = 8

w0 = 2 * cmath.pi * B0
wc = 2 * cmath.pi * fc
alpha = w0 / Tp
wcm = wc - alpha * Tp
Ts = (2 * (Xc - X0)) / c
Tf = (2*(Xc + X0))/c+Tp
dt = cmath.pi / (2 * alpha * Tp)
n = 2 * math.ceil(0.5 * (Tf - Ts) / dt)
t = Ts + np.arange(0,n * dt,dt)
dw = 2 * cmath.pi / (n * dt)
w = wc + dw * np.arange(-n / 2,n / 2)
x = Xc + 0.5 * c * dt * np.arange(-n / 2,n / 2)
kx = (2 * w) / c
xn = [0,25,35,36.5,40,-25,-35,-36.5]
fn = [1,0.8,1,0.6,0.9,1]
s = np.zeros((1,n))

for i in np.arange(ntarget):
    td = t - (2 * (Xc + xn[i]) / c)
    pha = wcm * td + alpha * np.power(td,2)
    s = s + np.multiply(fn[i] * np.exp(cj * pha),np.logical_and(td >= 0,td <= Tp))

基于's'的输出,代码将继续执行。

例如,我要实现以下目标:

根据目标数量,将xn和fn值分为不同的内核。例如:仅第一组xn = 0,fn = 1值应在第一核中运行,下一组xn = 25,fn = 0.8应在第二核中运行,依此类推直到第8个目标和第8个核。最后,将所有“ s”输出从第1核追加到第8核。

如何使用Python 3.6中的mpi4py模块并行化主文件中的for循环?

任何建议将不胜感激。

谢谢!

cbq676869 回答:使用mpi4py并行化python for循环

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3073502.html

大家都在问