1. ホーム
  2. c

[解決済み】C言語プログラムの実行時間について

2022-04-01 19:58:59

質問

私は、複数のプロセッサで並列に実行することを目的としたCプログラムを持っています。実行時間(1秒から数分まで)を記録する必要があります。検索してみましたが、どれも clock() 関数で割ったクロック数を計算します。 Clocks_per_second の値です。

がどうなっているのかよくわからない。 Clocks_per_second の値は計算されるのですか?

Javaでは、実行前後の現在時刻をミリ秒単位で取るだけなのですが。

C言語でも似たようなことはあるのでしょうか?調べてみたのですが、1秒の分解能以上のものを得る方法が見つからないようです。

また、プロファイラが選択肢になることは承知していますが、自分でタイマーを実装することを検討しています。

ありがとうございます

解決するには?

CLOCKS_PER_SEC で宣言されている定数です。 <time.h> . Cアプリケーション内のタスクが使用するCPU時間を取得するには、次のようにします。

clock_t begin = clock();

/* here, do your time-consuming job */

clock_t end = clock();
double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;

これは時間を浮動小数点型として返すことに注意してください。これは1秒よりも正確な値になります(例:4.52秒を計測する)。精度はアーキテクチャに依存します。最近のシステムでは10ms以下が簡単に得られますが、古いWindowsマシン(Win98時代)では60msに近い精度が得られます。

clock() は標準的なC言語であり、どこでも動作します。のようなシステム固有の関数があります。 getrusage() Unix系システムで

Java の System.currentTimeMillis() は同じものを測定しているわけではありません。これは壁掛け時計であり、プログラムの実行にかかった時間を測定するのに役立ちますが、CPU時間がどのくらい使われたかはわかりません。マルチタスクのシステム(つまりすべてのシステム)において、これらは大きく異なる可能性があります。