0
次のコードは非常に簡単に実行できるはずです。シーケンシャルモードでは、1秒未満で実行されます。しかし、私がそれを平行にすると、一見永遠に走ることになります。ベクトルの長さを100に設定すると、コードは正常に動作し、構造的な問題ではないと思います。次のコードの並列化が実行に時間がかかりすぎるのはなぜですか?
library(foreach)
library(doParallel)
cl <- makeCluster(4)
registerDoParallel(cl)
bvec <-as.vector(1:1e3)
avec <-as.vector(1:1e3)
sim= function(x,y) 10*x+y
system.time(x <-
foreach(b=bvec, .combine='cbind') %:%
foreach(a=avec, .combine='c') %dopar% {
sim(a, b)
})
キャッチとは何ですか? ありがとうございます。
少しお寄せくださいますか? – Theoden
あなたはコンピュータを持っていないと仮定し、計算を完了する必要があります。あなたは3つの友人の手紙を送って計算の一部をするよう依頼し、彼らはそれを行い、あなたに結果を送り返し、あなたはそれをすべてまとめます。それぞれの計算に時間がかかる場合は、メールを待たなくても効率的です。しかし、各計算が非常に簡単な場合は、自分で行う方が速いでしょう。 – Gregor
たとえば、1回の計算に1か月かかる場合は、自分で4ヶ月かかりますが、メールで4日待っても、1ヶ月+ 4日間は友人と一緒になります。しかし、各計算に1時間かかる場合は、自分で4時間、友人で4日+ 1時間で行うことができます。メールを待っているだけであなたが遅くなります。 – Gregor