gpt4 book ai didi

python - 如何在 for 循环中使用多重处理?如何让一个核心运行从索引n1到n2的循环,另一个核心从索引n2到n3运行循环?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:22 25 4
gpt4 key购买 nike

我编写了一段代码,将 2D 高斯的值分配给空 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):
...

现在,您需要在所需的范围内 fork 进程,将矩阵划分为 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)

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

关于python - 如何在 for 循环中使用多重处理?如何让一个核心运行从索引n1到n2的循环,另一个核心从索引n2到n3运行循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com