2013-09-06 13 views
5

Rparallelパッケージのmclapply機能を使用しようとしています。この関数は、CPUを大量に使用する操作である対数尤度距離を計算してシーケンス行列に値を代入します。mclapplyユーザーの時間が経過時間よりも大きい

system.time値は混乱している:

> system.time(mclapply(worksample,function(x){p_seqi_modj(x,worksample[[1]],c(1:17))})) 
    user system elapsed 
29.339 1.242 18.581 

Iはelapsedが凝集時間(user + system)を意味すると考えました。この場合、上記の結果は何を意味し、何時に自分自身を向けるべきですか?私の未完成のバージョンはで、userの時間が少なくなりました。

+0

あなたは何を気にしていますか?ほとんどの人は、経過時間に対応する結果をより早く求めます。 –

答えて

3

ヘルプページ?system.timeは、関数によって返される値がクラスproc_timeのオブジェクトであり、?proc.timeに問い合わせる必要があることを示しています。そこ我々は(2つのコアを使用するmclapplyデフォルトは、mc.cores引数を参照してください)ユーザ時間が

cumulative sum of user and system times of any child processes 

ので、あなたのタスクは、各コアの約15S費やしてきていることを学びます。

実際には、proc.time()はプロセスと子時間を分ける5つの要素を返し、印刷で使用される要約方法はユーザーとシステム時間をプロセス+子時間に崩壊させることを示しています。より多くの情報を入手できます。

+0

私が理解していることを繰り返して、これは、経過時間は操作の最初から最後まで実際に経過した時間であり、ユーザー時間はすべてのコア(すべてのコア) 。したがって、2つのコアで並行して実行した場合、タスクを完了するのに15秒かかります(約30秒)が、並列実行されるタスクのために合計経過時間はわずか18秒です。これは正しいです? – zima

+0

はい正しいです –

+0

ヘルプファイルを間違って読み込んでいるため、この回答は正しくありません。 'proc.time()'は5個の値を返し、4番目と5番目の値は「4:(ユーザの子プロセスの時間)累計と5:(子プロセスのシステム時間)」です。 – thc

関連する問題