Как заставить одно ядро выполнить функцию и передать полученную строку другим ядрам, используя mpi4py?
Я использую mpi4py для распараллеливания моего кода. Есть одна функция, которую я хочу выполнить только одним ядром. До тех пор я хочу, чтобы другие процессоры ждали. Я попытался реализовать эту функциональность, используя следующий фрагмент кода:
from mpi4py import MPI
class PARALLELIZE:
rank = -1
comm = None
size = -1
def __init__(self):
self.comm = MPI.COMM_WORLD
self.rank = self.comm.Get_rank()
self.size = self.comm.Get_size()
def get_name(self):
return "abc.pdb"
def perform_single_operation(self, fun):
ret_value = ""
if self.rank == 0:
ret_value = fun()
# broadcast the ret_val to other ranks
ret_value = self.comm.bcast(ret_value, root=0)
return ret_value
Я вызываю этот метод, используя следующее:
if __name__ == "main":
p = PARALLELIZE()
p.perform_single_operation(p.get_name)
Если я запускаю этот код с 3 ядрами. Я сталкиваюсь с несколькими проблемами: 1. ядро 0 не достигается первым 2. ядра 1 и 2 отправляют значение bool из execute_single_operation 3. только корень 0 продолжает выполнение. Другие ядра не могут дать значимых результатов, так как у них нет действительного имени
Все, что я хочу, чтобы эта функция выполнялась, - это получить имя на основе некоторых вычислений и передать его другим, чтобы все ядра могли обрабатывать одни и те же данные. Я не могу заставить его работать. Любая помощь приветствуется.