私はマスターがスレーブと平等に仕事の負担を分担することを望む 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
私はエラーが何であるかを理解するのに苦労し、最終的に多くの時間を費やした後、スレーブがネストされた方法でユーザー定義関数を呼び出すことができないという事実からエラーが発生した可能性があることに間接的に気付きました. に組み込み、master のみを呼び出すようにしたら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
andに複製しwork_to_be_done_per_process_by_master
、スレーブとマスターがそれぞれそれらを呼び出せるようにしました。これでも問題は解決しませんでした。したがって、私の上記の結論だけが理由のようです。
本当ですか?スレーブが内部からユーザー定義関数を呼び出すことができないというこの問題に直面した人はいますか? 正しく行う方法はありますか。