0

私はマスターがスレーブと平等に仕事の負担を分担することを望む Rmpi​​ コードを書きました。そのため、関数work_by_masterは送受信を行う前に両方の呼び出しを行い、結果を交換しmpi.bcast.cmdますwork_by_slaveswork_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_slaveswork_to_be_done_per_process

work_to_be_done_per_processまた、関数をwork_to_be_done_per_process_by_slavesandに複製しwork_to_be_done_per_process_by_master、スレーブとマスターがそれぞれそれらを呼び出せるようにしました。これでも問題は解決しませんでした。したがって、私の上記の結論だけが理由のようです。

本当ですか?スレーブが内部からユーザー定義関数を呼び出すことができないというこの問題に直面した人はいますか? 正しく行う方法はありますか。

4

1 に答える 1

2

R での並列処理に関する私の経験では、クラスターで使用される各コアは個別の R 環境を取得します。これらの環境はすべて、通常の R セッションを開始する場合と同様に初期化されます。そのため、R セッションの開始時にデフォルトでロードされない、使用済みの定義済み関数は使用できません。それらをワーカーノードにロードすると、この問題が解決するはずです。最近のブログ投稿で、SNOW クラスターに対してこれを行う方法を示しました。

于 2012-02-06T10:52:45.600 に答える