gpt4 book ai didi

python - 如何在 mpi4py 中分散和收集 python 对象列表

转载 作者:行者123 更新时间:2023-12-01 01:49:05 25 4
gpt4 key购买 nike

我有一个包含 100,000 个 Python 对象的列表,我想将它们分散并收集在 mpi4py 中。

当我尝试使用 8 个处理器时,我得到:

SystemError: Negative size passed to PyBytes_FromStringAndSize

关于散射。

当我尝试使用 64 个处理器时,我得到了相同的错误,但是是在聚集时。

当我尝试从列表中创建一个对象数组并使用 Gather 和 Scatter 时,我收到一个错误,该错误基本上表明该数组的 dtype 不能是对象。

我有什么办法可以让它发挥作用吗?或者除了 MPI 之外我还可以使用其他什么?
我在 8 节点、64-ppn 计算机上运行此程序。

最佳答案

使用分散和聚集,将 numpy 数组拆分为 100000 个项目的示例。

import numpy as np
from mpi4py import MPI
from pprint import pprint
comm = MPI.COMM_WORLD

pprint("-" * 78)
pprint(" Running on %d cores" % comm.size)
pprint("-" * 78)

N = 100000
my_N = N // 8

if comm.rank == 0:
A = np.arange(N, dtype=np.float64)
else:
A = np.empty(N, dtype=np.float64)

my_A = np.empty(my_N, dtype=np.float64)

# Scatter data
comm.Scatter([A, MPI.DOUBLE], [my_A, MPI.DOUBLE])

pprint("After Scatter:")
for r in range(comm.size):
if comm.rank == r:
print("[%d] %s" % (comm.rank, len(my_A)))
comm.Barrier()

# Allgather data into A
comm.Allgather([my_A, MPI.DOUBLE], [A, MPI.DOUBLE])

pprint("After Allgather:")
for r in range(comm.size):
if comm.rank == r:
print("[%d] %s" % (comm.rank, len(A)))
comm.Barrier()

您还可以检查scatterv and gatherv , 更多examples herehere .

关于python - 如何在 mpi4py 中分散和收集 python 对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com