Ошибка, когда подчиненные Rmpi ​​вызывают определяемую пользователем функцию

Я написал код 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 и позволил ведомым и ведущим вызывать их соответственно. Даже это не решило проблему. Следовательно, только мой вышеприведенный вывод кажется причиной.

Это правда? Кто-нибудь еще сталкивался с этой проблемой, когда ведомое устройство не может вызывать пользовательскую функцию изнутри? Есть ли способ сделать это правильно.


person Aditi    schedule 06.02.2012    source источник
comment
Вы не выбрали ответ как правильный (как вы не сделали ни для одного из ваших вопросов). Если мы поможем вам разобраться с stackoverflow, отметьте ответ, который вы считаете правильным. Таким образом, сообщество знает, что на вопрос был дан ответ, и ответивший получает некоторую репутацию.   -  person Paul Hiemstra    schedule 29.02.2012


Ответы (1)


По моему опыту параллельной обработки в R, каждое ядро, используемое в кластере, получает отдельную среду R. Все эти среды инициализируются, как если бы вы начали обычный сеанс R. Таким образом, любые используемые определенные функции, которые не загружаются по умолчанию при запуске сеанса R, недоступны. Загрузка их в рабочие узлы должна решить эту проблему. В В недавней записи в блоге я показал, как это сделать для кластеров SNOW, возможно, это вам пригодится.

person Paul Hiemstra    schedule 06.02.2012