2

私は R でマルチコア コンピューティングを行っています。

各計算のコードと出力を次に示します。コア数が増えると経過時間が増えるのはなぜですか? これは本当に直感に反します。コア数が増えるほど経過時間が短くなるのは妥当だと思います。これを修正する方法はありますか?

ここに画像の説明を入力

コードは次のとおりです。

library(parallel)
detectCores()
system.time(pvec(1:1e7, sqrt, mc.cores = 1))
system.time(pvec(1:1e7, sqrt, mc.cores = 4))
system.time(pvec(1:1e7, sqrt, mc.cores = 8))

ありがとうございました。

4

1 に答える 1

0

データがN 個の部分に分割されているとします。データの各部分はT秒で計算されます。シングル コア アーキテクチャでは、すべての操作がN x T秒で完了すると予想されます。また、すべての作業がNコアのマシンでT回実行されることを望んでいます。ただし、並列計算では通信ラグが発生し、コアごとに消費されます (初期化、メインから子へのデータの受け渡し、計算、結果の受け渡し、ファイナライズ)。ここで、通信遅延をC秒とします。簡単にするために、すべてのコアで一定です。したがって、Nコアのマシンでは、計算は次のように行う必要があります。

T + N×C

T部分が計算用で、NXC部分が合計通信用である秒。シングルコアマシンと比較すると、不等式

(N x T) > (T + N x C)

少なくとも、私たちの仮定では、計算時間を得るために満たす必要があります。不等式を単純化すると、次のようになります。

C < (N x T - T) / N

したがって、一定の通信時間が比率(N x T - T) / Nよりも小さくない場合、この計算を並列化するゲインはありません。

あなたの例では、作成、計算、および通信に必要な時間は、関数sqrtのシングルコア計算よりも大きくなります。

于 2016-04-08T09:17:56.990 に答える