でfork
失敗するようMac OS 10.6.8
です。アルゴリズムは R でコーディングされており、並列処理には主にforeachパッケージを使用しています。プロセスが並行して実行されていなくても、コードは順次実行すると (foreach
および%do%
) 正常に動作しますが、並行して実行すると (foreach
および) は正常に動作%dopar%
しません。
foreach
1か月前にこの同じマシンを使用しましたが、問題なく動作しました。その間にOSのアップデートが行われました。
エラー メッセージ
ほとんど確率的に来るように見えるいくつかの種類のエラー メッセージを受け取りました。R
また、エラーは、コードがターミナルから実行されるか (環境でコピーして貼り付けるか、または R コンソールから実行されるか)、または R コンソールから実行されるかによって異なりますR CMD BATCH
。
ターミナルで実行すると、
Error in { : task 1 failed - "object 'dp' not found"
R コンソールで実行すると、次のいずれかが表示されます
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
....
<repeated many times when run on the R console>
また
Error in { : task 1 failed - "object 'dp' not found"
まったく同じコードで!この 2 番目のエラー メッセージはターミナルで受信したものと同じですが、(print()
関数によって) 画面に出力されるものの数は大きく異なることに注意してください。
私が試したこと
パッケージを更新し
foreach
、コンピューターを再起動しましたが、まったく役に立ちませんでした。私はできる限りのことをしようとし
print
ましたが、このアルゴリズムが何をしているかを追跡するのは非常に困難でした. たとえば、オブジェクトの呼び出しの前の行でステートメントdp
を実行せずに、欠落しているオブジェクトに関するエラーが発生することがよくあります。print
dp
使ってみたの
%dopar%
ですが、CPUが1つしか登録されていません。出力はターミナルでは変化しませんでしたが、コンソールでは変化しました。これで、コンソールは端末と同時に、まったく同じエラーを返します。複数の CPU を要求したときに、複数の CPU が使用されていることを確認しました。
コア数を登録する代わりに代わり
mclapply
に使用しようとしました。foreach
registerDoMC()
registerDoParallel()
補足情報
私のバージョンの R は3.0.2 GUI 1.62 Snow Leopard build
. 私のマシンには16個のコアがあります。