计算大型矩阵所有行对的有效方法?

2024-04-26 08:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

由于我是并行计算的新手,在研究了Writing parallel computation results in shared memory中的示例之后,我尝试使用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是更好的选择吗?如有任何建议,我们将不胜感激。你知道吗


Tags: nameinfortimeparallelrange矩阵cores
1条回答
网友
1楼 · 发布于 2024-04-26 08:00:40

好吧,还是没有答案,但我已经解决了。 我发现的第一个有趣的事实是当我注释掉这两行时

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

这样,memmap阵列就不再被用来代替内存阵列,它的速度要快得多。我不知道为什么到现在为止。有memmap锁吗?你知道吗

然后,我读了这篇文章Parallel and HPC with Python (or numpy),决定转向mpi4py。经过几个小时的调试,我得到了满意的结果。你知道吗

相关问题 更多 >