0

別のプログラムの実行にかかる時間を調べたい; 私は次のコードを使用しています。

system("time ./a.out > garb");

それは非常に奇妙な出力を与えています。

#include <stdio.h>

int main()
{

        long int i;

        for ( i = 0; i < 10000000; i++ ) {
                printf("Hello World!\n");
        }
        printf("C Program\n");
        return 0;
}

出力

0.31user 0.10system 0:00.41elapsed 99%CPU (0avgtext+0avgdata 1744maxresident)k
0inputs+253912outputs (0major+149minor)pagefaults 0swaps
4

4 に答える 4

2

1つの方法は、wait3またはwait4機能を使用することです(システムで使用可能な場合)。

pid_t wait3(int *status, int options, struct rusage *rusage);    
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);

プログラムは、子が終了した後、子プロセスのリソース使用量を取得します。

のすべてのフィールドがstruct rusage更新されるわけではありませんが、最初の2つのフィールドは必要なものを示しています。

struct rusage {
    struct timeval ru_utime; /* user CPU time used */
    struct timeval ru_stime; /* system CPU time used */
    ...

ru_utimeとの合計はru_stime、子プロセスによって使用される合計CPU時間です。

ofの使用はwait3 / wait4、関数の呼び出しほど単純ではありませんsystem()

編集:次のプリントアウトの2つの値を合計することで同じ結果が得られるはずですtime

0.31ユーザー0.10システム

于 2012-07-10T09:58:56.793 に答える
0

システムではなく、別の方法を見つけることができると思いますtime。何かのようなもの :

#include <stdio.h>
#include <time.h>

int main() 
{
    clock_t start = clock();
    system('./a.out');
    printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
    return (0);
}
于 2012-07-10T09:33:57.003 に答える
0

Intelプロセッサは、プロセスのクロックをカウントするために64ビットのレジスタを挿入しました。

http://en.wikipedia.org/wiki/Time_Stamp_Counter

于 2012-07-10T10:10:26.847 に答える
0

私の意見では、Cのライブラリ関数やシステムコールを使用して正確な結果を得るのは困難です。代わりに、より正確な結果を得るには、パフォーマンスAPI(PAPI )を使用することをお勧めします。具体的には、PAPIで定義されているこの関数をご覧ください。

于 2012-07-10T10:12:05.090 に答える