我对并行化和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循环?
任何建议将不胜感激。
谢谢!