Я написал код Rmpi, в котором хочу, чтобы хозяин делил бремя работы поровну с рабами. Таким образом, функция work_by_master
выполняет mpi.bcast.cmd
для work_by_slaves
, которые оба вызывают work_to_be_done_per_process
перед отправкой-получением для обмена результатом.
Я постоянно получал ошибку:
Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal
Calls: work_by_master -> mpi.recv.Robj -> mpi.probe -> .Call
Я изо всех сил пытался понять, в чем ошибка, и, наконец, потратив МНОГО времени, косвенно понял, что, возможно, ошибка возникает из-за того, что ведомые устройства не могут вызывать определяемую пользователем функцию во вложенном виде. Когда я включил work_to_be_done_per_process
в work_by_slaves
и разрешил только мастеру вызывать work_to_be_done_per_process
, ошибка была устранена.
Я также продублировал функцию work_to_be_done_per_process
в work_to_be_done_per_process_by_slaves
и work_to_be_done_per_process_by_master
и позволил ведомым и ведущим вызывать их соответственно. Даже это не решило проблему. Следовательно, только мой вышеприведенный вывод кажется причиной.
Это правда? Кто-нибудь еще сталкивался с этой проблемой, когда ведомое устройство не может вызывать пользовательскую функцию изнутри? Есть ли способ сделать это правильно.