Parallel Computing in Python using mpi4py_集合操作


Parallel Computing in Python using mpi4py_MPI  高性能并行计算_02



Parallel Computing in Python using mpi4py_MPI  高性能并行计算_03


感觉效果比较好的就是下面的对通信的集合操作的图解,刚一看比较懵,细一看发现还比较形象。

Parallel Computing in Python using mpi4py_示例代码_04


Parallel Computing in Python using mpi4py_MPI  高性能并行计算_05




Parallel Computing in Python using mpi4py_MPI  高性能并行计算_06



Parallel Computing in Python using mpi4py_集合操作_07



Parallel Computing in Python using mpi4py_集合操作_08


=====================================================

示例代码:

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)