他のプログラムの実行中にLinuxでOpenMPプログラムの実際の実行時間を測定するときに実際の実行時間を取得するにはどうすればよいですか?
答え1
呼ぶtime myprogram
。
壁時計時間、ユーザー時間、およびシステム時間を報告します。ユーザー時間は、プロセスがコンピューティングに費やす時間です。プログラムがマルチスレッドであり、システムにマルチプロセッサがある場合、すべてのプロセッサに費やされた時間が合計されます(したがって、十分に並列プログラムの場合、ユーザー時間がウォールクロック時間より長くなる可能性があります)。システム時間は、カーネルで入力/出力を実行するのにかかる時間です。
これは、「実行中の他のプログラムの干渉を計算しない時間」に非常に近いです。同時プログラムがない場合、プログラムにかかる実際の時間を知る唯一の方法は、他の同時プログラムなしでプログラムを実行することです。
答え2
入手できるのか背景知識なのかによって、以下で見つけることができるのでpid
難しくありません。ps
/proc/self
$!
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
方法はさまざまです。