5

GCCと独自のDSPクロスコンパイラを使用してCプログラムを実行し、いくつかの機能をシミュレートしています。次のコードを使用して、プログラムの特定の部分の実行時間を測定しています。

clock_t start,end;
printf("DECODING DATA:\n");
start=clock();
conv3_dec(encoded, decoded,3*length,0);
end=clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("DECODING TIME = %f\n",duration);

ここconv3_dec()で、は私のプログラムで定義された関数であり、この関数の実行時間を見つけたいと思います。

今、私のプログラムが実行されると、conv3_dec()関数はほぼ2時間実行されますが、からの出力printf("DECODING TIME = %f\n",duration)は、関数の実行がわずか0.5秒で終了したことを示しています(DECODING TIME = 0.455443)。これは私にとって非常に混乱しています。

私は以前にこのclock_t手法を使用してプログラムの実行時間を測定しましたが、その違いはこれまでになく大きくなっています。これはクロスコンパイラが原因ですか。ちなみに、シミュレータはわずか500MHzで動作するDSPプロセッサをシミュレートしているため、エラーの原因となっているDSPプロセッサとCPUのクロック速度の違いがCLOCKS_PER_SECの測定です。

4

3 に答える 3

5

clockウォールクロック時間ではなく、CPU時間を測定します。コードの大部分をCPUで実行していないため、これは適切なツールではありません。

于 2012-10-05T09:11:15.663 に答える
4

2時間のような期間の場合、私はあまり心配しません。1clock()秒未満の期間を測定するのにはるかに便利です。

time()実際の経過時間を知りたい場合は、次のように使用してください(不足しているものにダミーのものが提供されます):

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

// Dummy stuff starts here
#include <unistd.h>
#define encoded 0
#define decoded 0
#define length 0
static void conv3_dec (int a, int b, int c, int d) {
    sleep (20);
}
// Dummy stuff ends here

int main (void) {
    time_t start, end, duration;
    puts ("DECODING DATA:");
    start = time (0);
    conv3_dec (encoded, decoded, 3 * length, 0);
    end = time (0);
    duration = end - start;
    printf ("DECODING TIME = %d\n", duration);
    return 0;
}

これは以下を生成します:

DECODING DATA:
DECODING TIME = 20
于 2012-10-05T09:18:25.943 に答える
2

gettimeofday()機能も考えられます。


gettimeofday()関数は、エポックからの秒とマイクロ秒で表される現在の時刻を取得し、tpが指すtimeval構造体に格納します。システムクロックの解像度は指定されていません。


Cプログラムの経過時間をミリ秒単位で計算する

http://www.ccplusplus.com/2011/11/gettimeofday-example.html

于 2012-10-05T09:31:12.277 に答える