Я использую скрипт MPI
(mpi4py
) (на одном узле), который работает с очень большим объектом. Для того, чтобы все процессы имели доступ к объекту, я раздаю его через comm.bcast()
. Это копирует объект во все процессы и потребляет много памяти, особенно в процессе копирования. Поэтому я хотел бы поделиться чем-то вроде указателя вместо самого объекта. Я нашел некоторые функции в memoryview
полезными для ускорения работы с объектом внутри процесса. Также реальный адрес памяти объекта доступен через строковое представление объекта memoryview
и может быть распределен следующим образом:
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank:
content_pointer = comm.bcast(root = 0)
print(rank, content_pointer)
else:
content = ''.join(['a' for i in range(100000000)]).encode()
mv = memoryview(content)
print(mv)
comm.bcast(str(mv).split()[-1][: -1], root = 0)
Это печатает:
<memory at 0x7f362a405048>
1 0x7f362a405048
2 0x7f362a405048
...
Вот почему я считаю, что должен быть способ воссоздать объект в другом процессе. Однако я не могу найти подсказку в документации о том, как это сделать.
Короче говоря, мой вопрос: Возможно ли совместно использовать объект между процессами на одном узле в mpi4py
?