如何将多处理用于 for 循环?如何让一个核心从索引 n1 运行到 n2 的循环,另一个核心从索引 n2 运行到 n3



我写了一个代码来将二维高斯的值分配给并清空HEALPix数组。为此,我在像素索引中制作了一个"for"循环。但是代码似乎需要花费大量时间来提供输出。有人可以帮助我将这个循环分成几个部分以便同时处理它们吗?以下是我想要多处理的代码部分。

def fn(nside):
bar = ProgressBar(maxval = npix)
bar.start()
for i in range(0,npix):
bar.update(i)
for j in range(0,npix):
hpxmap0[hp.ang2pix(nside, ma_theta[i], ma_phi[j])] = gaussian_2D(np.pi*(0.5) - ma_theta[i], ma_phi[j])
bar.finish()
return hpxmap0

编写一个包装函数以在给定的像素范围内运行循环:

def fn_dist(nside, i_lo, i_hi, j_lo, j_hi):
...
for i in range(i_lo, i_hi):
for j in range(j_lo, j_hi):
...

现在,您需要在所需范围内分叉流程,将矩阵划分为i_stepj_step切片:

for i_lo in range(0, npix, i_step):
for j_lo in range(0, npix, j_step):
# spawn a process for fn(nside, i_lo, i_lo+i_step, j_lo, j_lo+j_step)

还要寻找执行块操作的方法。 您能否编写自己的gaussian_2D函数版本以返回给定范围内的值矩阵? 我强烈怀疑您目前的大部分时间都浪费在单值函数调用的开销上,而不是数据传输上。

相关内容

  • 没有找到相关文章

最新更新