0

次のコードでは、 getrusage は と でゼロを返しru_utime.tv_usecますru_utime.tv_sec

コード:

#include "stdlib.h"
#include "stdio.h"
#include "sys/time.h"
#include "sys/resource.h"

int getr_return, who = RUSAGE_SELF;
struct rusage usage;

main()
{
    getr_return = getrusage(who, &usage);
    printf(" getr_return = %d\n", getr_return);

    printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_sec);
    printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_usec);


        Some_Mips_consuming_code().


        getr_return = getrusage(who, &usage);
        printf(" getr_return = %d\n", getr_return);

        printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_sec);
        printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_usec);

    exit;
 } 

出力:

getr_return = 0
time taken in seconds =  0.0000000000000000000000000000000000000000000000000000000000000
time taken in seconds =  0.0000000000000000000000000000000000000000000000000000000000000
getr_return = 0
time taken in seconds =  0.0000000000000000000000000000000000000000000000000000000000000
time taken in seconds =  0.0000000000000000000000000000000000000000000000000000000000000

コンパイルされたコードLinux version 2.6.18-308

ARMボードで実行可能ファイルを実行すると、Linux version 3.8.1-2.0

4

2 に答える 2

0

ユーザーの使用時間は、ロジックの 2 つの瞬間の間で計算され、timeval の開始と終了の使用が必要な消費時間を調べます。以下のサンプルのようなもの、

 struct timeval start, end;
 getrusage(RUSAGE_SELF, &usage);
 start = usage.ru_utime;
 /* Code to check the usage consumed */
 getrusage(RUSAGE_SELF, &usage);
 end = usage.ru_utime;

ru_utime&ru_stime型の構造体ですtimeval。その宣言を見ると、両方のメンバーtv_sec&tv_usecが型longです。そのため、出力するときに書式指定子を に変更して%ldください。成功するとgetrusage()が返されることに注意してください0

于 2014-03-02T12:24:02.930 に答える
0

時間測定は、精度、解像度、精度に制限があります。time(7)を読み取ります。たとえば、0.5 秒未満の計算に重要な測定値を期待しないでください。

多くの場合、CPU 時間の測定は、jiffyまたはタイマー割り込み (HZカーネルに割り込みがある場合に関連) をカウントすることによって行われます。

の最初にgetrusage(2)を呼び出すので、そのmain前にあまり計算が行われていません (基本的に、mainたとえば の事前初期化のみcrt0.o)。したがって、ゼロに近いと予想する必要があります。

またはでclock_gettime(2)を使用してみてください。CLOCK_REALTIMECLOCK_PROCESS_CPUTIME_ID

于 2014-03-02T12:46:07.247 に答える