感觉效果比较好的就是下面的对通信的集合操作的图解,刚一看比较懵,细一看发现还比较形象。
=====================================================
示例代码:
import numpy as np
from mpi4py import MPI
def rbind(comm, x):
return np.vstack(comm.allgather(x))
comm = MPI.COMM_WORLD
x = np.arange(4, dtype=np.int) * comm.Get_rank()
a = rbind(comm, x)
print(a)
import numpy as np
from mpi4py import MPI
def rbind2(comm, x):
size = comm.Get_size()
m = np.zeros((size, len(x)), dtype=np.int)
comm.Allgather([x, MPI.INT], [m, MPI.INT])
return m
comm = MPI.COMM_WORLD
x = np.arange(4, dtype=np.int) * comm.Get_rank()
a = rbind2(comm, x)
print(a)
import numpy as np
import math
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
x = range(20)
m = int(math.ceil(float(len(x)) / size))
x_chunk = x[rank*m:(rank+1)*m]
r_chunk = map(math.sqrt, x_chunk)
r = comm.allreduce(list(r_chunk))
if rank == 0:
print(len(r), r)