0

私は C で短いプログラムをたくさん持っています。各プログラムは、たとえば、ライブラリをインクルードする、ファイルから何か (行列など) をロードする、単純な操作を行う、行列をファイルの最後に書き込むなどの簡単な操作を実現します。

プログラム全体(コードの断片だけでなく)のリアルタイム実行時間を測定したい。

私の単純なアイデアは、 htop または ps aux -> column time を使用することです。しかし、この方法は、正確な実行時間はありませんが、最後のリフレッシュ中の実行時間はなく、これを見逃す可能性があるため、適切ではありません。

Linuxで処理時間を測定する方法はありますか?

4

3 に答える 3

4

プログラムの名前がfooの場合は、次のように入力します。

~$ time foo

あなたが望むことを正確に行う必要があります。

于 2012-10-22T08:35:56.743 に答える
3

他の回答に加えて、主にtimeユーティリティまたはシェルビルトインを使用することを提案しています:

  • time(7)は読むのに非常に役立つページです。
  • (コード内で) clock(3)標準関数を使用して、CPU 時間をマイクロ秒単位で取得できます。
  • 時間測定の分解能と精度は、ハードウェアとオペレーティング システムのカーネルに依存します。より正確な時間測定を取得するには、「リアルタイム」カーネル (linux-image-3.2.0-rtパッケージなど)、または少なくとも ) で構成されたカーネルを使用することをお勧めします。CONFIG_HZ_1000
  • (コード内で) clock_gettime(2)-lrt syscall を使用することもできます (そのため、ライブラリもリンクしてください)。
  • 測定を行うときは、測定したプロセスを少なくとも数秒間実行し、数回測定するようにしてください (ディスク キャッシュの問題などのため)。
于 2012-10-22T09:14:07.567 に答える
2

使用する場合

time <PROGRAM> [ARGS]

これにより、いくつかの基本レベルの情報が提供されます。これにより、シェルの time コマンドが実行されます。出力例:

$ time sleep 2
real    0m2.002s
user    0m0.000s
sys     0m0.000s

しかし、

/usr/bin/time <PROGRAM> [ARGS]

これはより柔軟で、タイミングに関するより多くの診断情報を提供します。これにより、GNU タイミング プログラムが実行されます。このサイトにはいくつかの使用例があります。出力例:

$ /usr/bin/time -v sleep 2
Command being timed: "sleep 2"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2496
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 202
Voluntary context switches: 2
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
于 2012-10-22T08:38:15.587 に答える