特定の機能の合計時間を測定したいとします。この関数は他の関数(f1とf2)を呼び出します。だから私はf1とf2の合計時間を計算したいと思います。私は期待していた何clock_getime内のclock_gettimeの方法は?
がf total time = f1 total time + f2 total time
void f(){
struct timespec total_start, total_end;
struct timespec f1_start, f1_end;
struct timespec f2_start, f2_end;
clock_gettime(CLOCK_MONOTONIC, &total_start);
clock_gettime(CLOCK_MONOTONIC, &f1_start);
f1();
clock_gettime(CLOCK_MONOTONIC, &f1_end);
clock_gettime(CLOCK_MONOTONIC, &f2_start);
f2();
clock_gettime(CLOCK_MONOTONIC, &f2_end);
clock_gettime(CLOCK_MONOTONIC, &total_end);
f_total_time = (total_end.tv_sec - total_start.tv_sec) + (total_end.tv_nsec - total_start.tv_nsec)/1e9 ;
f1_total_time = (f1_end.tv_sec - f1_start.tv_sec) + (f1_end.tv_nsec - f1_start.tv_nsec)/1e9 ;
f2_total_time = (f2_end.tv_sec - f2_start.tv_sec) + (f2_end.tv_nsec - f2_start.tv_nsec)/1e9 ;
}
私の質問がありました、これは関数内の関数の時間を測定するための正しい方法です。
問題:私が直面している問題は、f1とf2の合計時間がfの合計時間に足りないことです。すなわちf total time != f1 total time + f2 total time
実際に何が起こるのですかf total time > f1 total time + f2 total time
私は何か間違っていますか?
'clock_gettime'を呼び出すのに少し時間がかかるので、合計時間が個々の関数呼び出しの時間を超えるのは当然です。何も間違っていません。あなたがそれを避けたいのであれば、関数時間をあなた自身で追加してください:*関数時間を計算した後、 'f_total_time = f1_total_time + f2_total_time;'。 –
C++を使用していますか? –
これは間違っていますが、 'clock_gettime'の呼び出しには時間がかかります! –