在大矩阵的所有行对上计算的有效方法



我需要在大矩阵M的所有行对上进行一些耗时的计算,例如:

for i in range(n):
    for j in range(i+1,n):
        time_comsuming_calculation(M[i,:],M[j:])

由于我是并行计算的新手,在研究了并行计算的示例后,我尝试使用以下Joblib进行并行计算:

dump(M, M_name)
M=load(M_name,mmap_mode='r')
...
Parallel(n_jobs=num_cores)(delayed(paracalc)(u,v,M)
                                for u,v in itertools.combinations(range(M.shape[0]),2))

但是,它变成比非并行版本慢得多。每个行对的计算都比num_cores=1消耗的几秒钟。我想知道我的并行实施是怎么回事。mpi4py是更好的选择吗?任何建议都将不胜感激。

好吧,仍然没有答案,但我已经设法解决了。我发现的第一个有趣的事实是,当我评论这两行时,

# dump(M, M_name)
# M=load(M_name,mmap_mode='r')

不再使用memmap数组来进行内存数组,它的发展速度要快得多。我不知道为什么到现在。是否有MEMMAP锁或其他内容?

然后,我与Python(或Numpy(平行阅读了本文,并决定转向mpi4py。经过数小时的调试,我得到了令人满意的结果。

相关内容

  • 没有找到相关文章

最新更新