system.time(expression)
R関数の実行時間を測定するために使用しています。
通話で得られる出力
system.time(myfunction())
は:
user system elapsed
117.36 5.65 127.86
「ユーザー」と「システム」は何を測定しますか?
system.time(expression)
R関数の実行時間を測定するために使用しています。
通話で得られる出力
system.time(myfunction())
は:
user system elapsed
117.36 5.65 127.86
「ユーザー」と「システム」は何を測定しますか?
回答:
これについては、?proc.time
(system.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._
user
とsystem
経過時間の違いについて私が今まで読んだ中で最も明確な説明は、[R-help]のWilliamDunlapによって提供されました。
「ユーザーCPU時間」は、現在のプロセス(つまり、現在のRセッション)によって費やされたCPU時間を示し、「システムCPU時間」は、現在のプロセスに代わってカーネル(オペレーティングシステム)によって費やされたCPU時間を示します。オペレーティングシステムは、ファイルを開く、入力または出力を行う、他のプロセスを開始する、システムクロックを確認するなどの目的で使用されます。多くのプロセスが共有する必要のあるリソースを含む操作です。
?proc.time
似たようなものが返されますが、この説明は私にとってはるかに理解しやすいものでした。
これらはとにかく一般的であるため、ウィキペディアから:
「ユーザーCPU時間」という用語は、最初は少し誤解を招く可能性があります。明確にするために、合計時間(実際のCPU時間)は、CPUがプログラムに対して何らかのアクションを実行するために費やす時間と、CPUがプログラムに代わってカーネルのシステムコールを実行するために費やす時間の組み合わせです。プログラムが配列をループするとき、それはユーザーのCPU時間を蓄積しています。逆に、プログラムがexecやforkなどのシステムコールを実行すると、システムのCPU時間が蓄積されます。
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
これらの時間変数はOSによって定義されているためman time
、シェル(Unix上)で実行することにより、それらの計算方法に関する情報を取得できます。
...これらの統計は、(i)呼び出しから終了までの経過リアルタイム、(ii)ユーザーCPU時間(times(2)によって返される構造体tmsの値
tms_utime
とtms_cutime
値の合計)、および(iii)で構成されます。システムCPU時間(times(2)によって返される構造体tmsの値tms_stime
とtms_cstime
値の合計)。
上記の時間変数の定義はここにあります:
tms_utime
ユーザーのCPU時間。
tms_stime
システムCPU時間。
tms_cutime
終了した子プロセスのユーザーCPU時間。
tms_cstime
終了した子プロセスのシステムCPU時間。
ユーザー時間とシステム時間の違いの説明は、daroczigの回答とSOの他の場所に記載されています。
tms_utime
要素はあなたのコードの実行に費やした時間の量、またはCライブラリ内のコードです。tms_stime
要素は、あなたに代わってコードを実行するカーネルで費やされた時間です。