LinuxでソートアルゴリズムのCPU時間と壁時間を測定します。getrusage
CPU時間を測定しclock_gettime CLOCK_MONOTONIC
、壁時間を取得するために使用しています。CPU時間が壁時間よりも大きいことに気付きましたが、それは正しいですか? 私はいつも、CPU 時間は壁時間よりも短くなければならないと考えていました。私の例の結果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
LinuxでソートアルゴリズムのCPU時間と壁時間を測定します。getrusage
CPU時間を測定しclock_gettime CLOCK_MONOTONIC
、壁時間を取得するために使用しています。CPU時間が壁時間よりも大きいことに気付きましたが、それは正しいですか? 私はいつも、CPU 時間は壁時間よりも短くなければならないと考えていました。私の例の結果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
計算に 2 秒のプロセッサ時間が必要な場合、(理想的には) 2 つのプロセッサが 1 秒で計算を完了できます。したがって、2 プロセッサ システムでは、壁時計の 1 秒ごとに 2 秒の CPU 秒が割り当てられます。プロセスで明示的にマルチスレッドを使用しない場合でも、使用するライブラリまたはオペレーティング システムが複数のプロセッサを使用してプロセスの作業を実行する場合があります。
さらに、会計の一部は概算です。システムは、引数の目的でマイクロ秒などの小さな単位でプロセッサ時間を追跡し、プロセスが少なくとも0.5マイクロ秒のプロセッサ時間を受け取るたびに、マイクロ秒に対して課金する場合があります。(これは、丸め誤差を避けるために整数演算を使用することを推奨して、浮動小数点の質問に答えるすべての人々への教訓となるはずです。すべての離散演算には丸め誤差が含まれる可能性があります。)
使用する引数によってはgetrusage
、プロセス内のすべてのスレッドの CPU 時間の合計が返される場合があります。複数のスレッドがある場合、これにより CPU 時間が実時間よりも長くなる可能性があります。
また、結果の構造体はマイクロ秒単位で値を格納しますが、実際の精度はそれよりもはるかに低い可能性があるため、小さな不一致が生じます。