Как заставить одно ядро ​​выполнить функцию и передать полученную строку другим ядрам, используя 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 продолжает выполнение. Другие ядра не могут дать значимых результатов, так как у них нет действительного имени

Все, что я хочу, чтобы эта функция выполнялась, - это получить имя на основе некоторых вычислений и передать его другим, чтобы все ядра могли обрабатывать одни и те же данные. Я не могу заставить его работать. Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам