複数のプロセッサで並列に実行することを目的とした C プログラムがあります。実行時間 (1 秒から数分まで) を記録できる必要があります。回答を検索しましたが、すべて関数の使用を提案しているようですclock()
。この関数では、プログラムにかかったクロック数を値で割って計算しますClocks_per_second
。
Clocks_per_second
値がどのように計算されるのか分かりません。
Java では、実行前と実行後の現在の時間をミリ秒単位で取得するだけです。
C にも同様のものがありますか? 調べてみましたが、2 番目の解像度よりも優れた方法を見つけることができないようです。
プロファイラーもオプションであることは承知していますが、タイマーを自分で実装しようと考えています。
ありがとう
ベストアンサー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;
これは時間を浮動小数点型として返すことに注意してください。これは秒よりも正確です (たとえば、4.52 秒を測定します)。精度はアーキテクチャによって異なります。最新のシステムでは 10 ミリ秒以下を簡単に取得できますが、古い Windows マシン (Win98 時代) では 60 ミリ秒に近かったです。
clock()
getrusage()
標準 C であり、「どこでも」動作します。Unixのようなシステムなど、システム固有の関数もあります。
Java のSystem.currentTimeMillis()
計測は同じではありません。これは「壁時計」です。プログラムの実行にかかった時間を測定することはできますが、CPU 時間がどれだけ使用されたかはわかりません。マルチタスク システム (つまり、すべてのシステム) では、これらは大きく異なる場合があります。