他のプログラムの実行中にプログラムの実際の実行時間を記録する方法は? [コピー]

他のプログラムの実行中にプログラムの実際の実行時間を記録する方法は? [コピー]

他のプログラムの実行中にLinuxでOpenMPプログラムの実際の実行時間を測定するときに実際の実行時間を取得するにはどうすればよいですか?

答え1

呼ぶtime myprogram

壁時計時間、ユーザー時間、およびシステム時間を報告します。ユーザー時間は、プロセスがコンピューティングに費やす時間です。プログラムがマルチスレッドであり、システムにマルチプロセッサがある場合、すべてのプロセッサに費やされた時間が合計されます(したがって、十分に並列プログラムの場合、ユーザー時間がウォールクロック時間より長くなる可能性があります)。システム時間は、カーネルで入力/出力を実行するのにかかる時間です。

これは、「実行中の他のプログラムの干渉を計算しない時間」に非常に近いです。同時プログラムがない場合、プログラムにかかる実際の時間を知る唯一の方法は、他の同時プログラムなしでプログラムを実行することです。

答え2

入手できるのか背景知識なのかによって、以下で見つけることができるのでpid難しくありません。ps/proc/self$!

/proc/$pid/stat:

          utime %lu   (14) Amount of time that this process has been
                      scheduled in user mode, measured in clock ticks
                      (divide by sysconf(_SC_CLK_TCK)).  This includes
                      guest time, guest_time (time spent running a
                      virtual CPU, see below), so that applications that
                      are not aware of the guest time field do not lose
                      that time from their calculations.

          stime %lu   (15) Amount of time that this process has been
                      scheduled in kernel mode, measured in clock ticks
                      (divide by sysconf(_SC_CLK_TCK)).

          cutime %ld  (16) Amount of time that this process's waited-for
                      children have been scheduled in user mode,
                      measured in clock ticks (divide by
                      sysconf(_SC_CLK_TCK)).  (See also times(2).)  This
                      includes guest time, cguest_time (time spent
                      running a virtual CPU, see below).

          cstime %ld  (17) Amount of time that this process's waited-for
                      children have been scheduled in kernel mode,
                      measured in clock ticks (divide by
                      sysconf(_SC_CLK_TCK)).

プロセスIDを取得するには、次のようにします。

prog ./and/args &
pid=$!

{ prog ./and/args & true ; } && ps -C prog

prog ./and/args

CTRL-Z

jobs -l ; fg %1

方法はさまざまです。

関連情報