我正在尝试并行化我编写的脚本。每个进程都需要进行计算并将数据存储到数组的特定部分(列表列表)。每个进程都在计算和存储它的数据,但我不知道如何将数据从非根进程获取到根进程,以便它可以将数据打印到文件中。我为我的脚本创建了一个最小的工作示例——这个示例仅为简单起见而设计为在 2 个内核上运行:
from mpi4py import MPI
import pdb
import os
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
# Declare the array that will store all the temp results
temps = [[0 for x in xrange(5)] for x in xrange(4)]
# Loop over all directories
if rank==0:
counter = 0
for i in range(2):
for j in range(5):
temps[i][j] = counter
counter = counter + 1
else:
counter = 20
for i in range(2,4):
for j in range(5):
temps[i][j] = counter
counter = counter + 1
temps = comm.bcast(temps,root=0)
if rank==0:
print temps
我使用以下命令执行脚本:
mpiexec -n 2 python mne.py
案例结束后,输出为:
[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
所以你可以看到数据共享没有按我的意愿工作。有人可以告诉我将数据返回根进程的正确方法吗?