Я использую сценарий MPI
(mpi4py
) (на одном узле), который работает с очень большим объектом. Чтобы все процессы имели доступ к объекту, я распространяю его через comm.bcast()
. Это копирует объект во все процессы и потребляет много памяти, особенно во время процесса копирования. Поэтому я хотел бы поделиться чем-то вроде указателя вместо самого объекта. Я нашел некоторые функции в memoryview
, чтобы повысить работу с объектом внутри процесса. Также реальный адрес памяти объекта доступен через строковое представление memoryview
объекта и может быть распределен следующим образом:Общая память в mpi4py
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
?
Этот ответ неверен в свете общей памяти MPI 3.0 (https://software.intel.com/en-us/article s/using-mpi-3-shared-memory-in-xeon-phi-processor) –
@BenThompson OK, вы хотите, чтобы я удалил его или изменил ответ? У меня есть 0 опыта с этой новой функцией ... – haraldkl