2016-04-08 19 views
2

私はRでマルチコア・コンピューティングを行っています。私はコア数が増えている間に経過時間が増えるのはなぜですか?

ここでは、各計算のコードと出力を示します。なぜコアの数が増えると経過時間が長くなるのですか?これは実際には直感的ではありません。コアの数が増えるにつれて経過時間が減少することは合理的だと思います。これを修正する方法はありますか?ここで

enter image description here

コードです:

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)) 

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

+0

イメージを投稿するのではなく、誰でも簡単に実行できるように、コードをコピーして貼り付けてください。 – nicola

+0

ありがとうございます。私はコードを追加しました! –

+0

'pvec'を呼び出すとかなりのオーバーヘッドがあります。入力ベクトルは塊で分割し、各塊の新しいジョブを作成する必要があります。これらの操作には時間がかかります。高速かつベクトル化された演算( 'sqrt'など)の場合、このアプローチは実際には遅くなる可能性があります。何が起こっているのかを把握するには 'pvec'のソースコードを見てください。 – nicola

答えて

0

データがNに分割されているとします。データの各部分はT秒で計算されます。単一のコアアーキテクチャでは、すべての操作はN x T秒で実行されます。あなたはまた、すべての作品がNコアマシンで行われることを願っています。ただし、並列コンピューティングでは、各コアで消費される通信遅延があります(初期化、メインから子へのデータの受け渡し、計算、結果の受け渡し、ファイナライズ)。ここで、通信遅れをC秒とし、簡単にするために、すべてのコアで一定です。だから、Nコア機で、計算は

T + NのXのC

T部分が計算のためにある秒た

NXC部分における総通信用で行われるべきです。我々は、シングルコアのマシンと比較した場合、不等式

(NはTをX)>(T + NのXのC)

は、我々の仮定のために、少なくとも、計算時間を得るために満足しなければなりません。 ( - T N X T)が一定の通信時間が比未満でない場合、そう/ N

- 我々は不平等を簡素化した場合、我々は

C <(T N X T)を得ることができ/ Nこの計算を並列にすることはできません。

例では、作成、計算、および通信に必要な時間は、関数sqrtの単一コア計算よりも大きくなっています。

+1

ありがとう! –

関連する問題