Поскольку отправляемые данные настолько просты, я не уверен, какой метод имеет лучшую производительность, скажем, если мне нужно отправить одно целое число много раз. Некоторые предварительные моменты времени указывают, что строчные методы работают быстрее, но я ожидал бы, что строчные методы будут быстрее, поэтому я хотел бы понять, почему. Вот небольшой пример отправки отрицательного целого числа между двумя процессами.
#!/usr/bin/env python3
from mpi4py import MPI
import numpy as np
import time
# Inputs
npings = 1000
numpy_send = False
# Message details
pvalue = -9
ptype_np = np.int_
ptype_mpi = MPI.LONG
if numpy_send:
ping = [np.array([pvalue], dtype=ptype_np), 1, ptype_mpi]
else:
ping = pvalue
# Initialize
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
total=0
# Perform communication and time it
if rank == 0:
for i in range(npings):
if numpy_send:
ping = np.empty(1,dtype=ptype_np)
t1 = time.time()
comm.Recv(ping, source=1)
t2 = time.time()
else:
t1 = time.time()
ping = comm.recv(source=1)
t2 = time.time()
total += t2-t1
else:
for i in range(npings):
if numpy_send:
t1 = time.time()
comm.Send(ping, dest=0)
t2 = time.time()
else:
t1 = time.time()
comm.send(ping, dest=0)
t2 = time.time()
total += t2-t1
# Display results
if rank == 0:
total_send = 0
total_send = comm.recv(source=1)
if numpy_send:
print("USING NUMPY ARRAYS:")
else:
print("USING PYTHON OBJECTS:")
print("{:5.5e}s total receiving time".format(total))
print("{:5.5e}s total sending time".format(total_send))
print("{:5.5e}s total time".format(total+total_send))
else:
comm.send(total, dest=0)