R system.time(exp)出力で測定される「ユーザー」および「システム」時間とは何ですか?


90

system.time(expression)R関数の実行時間を測定するために使用しています。

通話で得られる出力

system.time(myfunction())

は:

    user  system elapsed   
  117.36    5.65  127.86

「ユーザー」と「システム」は何を測定しますか?



1
この質問では、「「ユーザー」と「システム」の時間測定とは何ですか?」など、より適切なタイトルを使用できます。これにより、リストを閲覧している人々にとって質問がより明確になります。
シャーピー2011

回答:


48

これについては、?proc.timesystem.time()クラスのオブジェクトを返す)で説明されています"proc.time"

Details:

     ‘proc.time’ returns five elements for backwards compatibility, but
     its ‘print’ method prints a named vector of length 3.  The first
     two entries are the total user and system CPU times of the current
     R process and any child processes on which it has waited, and the
     third entry is the ‘real’ elapsed time since the process was
     started.

....そして

Value:

....

     The definition of ‘user’ and ‘system’ times is from your OS.
     Typically it is something like

     _The ‘user time’ is the CPU time charged for the execution of user
     instructions of the calling process. The ‘system time’ is the CPU
     time charged for execution by the system on behalf of the calling
     process._

45

usersystem経過時間の違いについて私が今まで読んだ中で最も明確な説明は、[R-help]のWilliamDunlapによって提供されました。

「ユーザーCPU時間」は、現在のプロセス(つまり、現在のRセッション)によって費やされたCPU時間を示し、「システムCPU時間」は、現在のプロセスに代わってカーネル(オペレーティングシステム)によって費やされたCPU時間を示します。オペレーティングシステムは、ファイルを開く、入力または出力を行う、他のプロセスを開始する、システムクロックを確認するなどの目的で使用されます。多くのプロセスが共有する必要のあるリソースを含む操作です。

?proc.time似たようなものが返されますが、この説明は私にとってはるかに理解しやすいものでした。


22

ここにいくつかの簡単な説明があります:

経過時間は、式のためにCPUに請求されるです。

ユーザー時間は実時間です。ユーザーとしてのあなたが経験した時間。

通常、両方の時間は比較的近いです。ただし、他の状況では異なる場合があります。例えば:

  • 経過時間>ユーザー時間の場合、これは、CPUが他の操作(外部の場合もある)が実行されるのを待機していることを意味します。
  • 経過時間<ユーザー時間の場合、これは、マシンに複数のコアがあり、それらを使用できることを意味します

18

これらはとにかく一般的であるため、ウィキペディアから:

「ユーザーCPU時間」という用語は、最初は少し誤解を招く可能性があります。明確にするために、合計時間(実際のCPU時間)は、CPUがプログラムに対して何らかのアクションを実行するために費やす時間と、CPUがプログラムに代わってカーネルのシステムコールを実行するために費やす時間の組み合わせです。プログラムが配列をループするとき、それはユーザーのCPU時間を蓄積しています。逆に、プログラムがexecやforkなどのシステムコールを実行すると、システムのCPU時間が蓄積されます。

http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time


2

これらの時間変数はOSによって定義されているためman time、シェル(Unix上)で実行することにより、それらの計算方法に関する情報を取得できます。

...これらの統計は、(i)呼び出しから終了までの経過リアルタイム、(ii)ユーザーCPU時間(times(2)によって返される構造体tmsの値tms_utimetms_cutime値の合計)、および(iii)で構成されます。システムCPU時間(times(2)によって返される構造体tmsの値tms_stimetms_cstime値の合計)。

上記の時間変数の定義はここにあります

tms_utime ユーザーのCPU時間。

tms_stime システムCPU時間。

tms_cutime 終了した子プロセスのユーザーCPU時間。

tms_cstime 終了した子プロセスのシステムCPU時間。

ユーザー時間とシステム時間の違いの説明は、daroczigの回答とSOの他の場所に記載されています。

tms_utime要素はあなたのコードの実行に費やした時間の量、またはCライブラリ内のコードです。tms_stime要素は、あなたに代わってコードを実行するカーネルで費やされた時間です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.