0

関数を使用して関数の時間を計ろうとしていgettimeofday()ます。マイクロ秒単位の時間を取得できますが、秒単位の時間を取得するために a で割ろうとするとlong、値が単一の に切り捨てられintegerます。なぜこれが起こっているのかについての洞察を持っている人はいますか? a による除算long = 1000000.0は、この種の切り捨てを防ぐと想定していました。

機能のタイミング:

struct timeval t1,t2;

gettimeofday(&t1, NULL);

// Computes C - C1 - using single thread
for (i=0; i < n; i++)
    for (j=0; j < p; j++)
    {
        C1[i][j]=0;
        for (k=0; k < m; k++)
            C1[i][j] += A[i][k]*B[k][j];
    }

gettimeofday(&t2, NULL);

ここで適用される分割:

long divider = 1000000.0;
long elapsed = ((t2.tv_sec - t1.tv_sec) * 1000000.0L) + (t2.tv_usec - t1.tv_usec);
elapsed = (elapsed/divider);

printf("Time in seconds: %ld seconds\n", elapsed);

どんな助けでも大歓迎です。

4

2 に答える 2

3

Longは整数型であり、小数を保持しないことを意味します。おそらくdoublefordividerおよびを使用する必要がありelapsedます。cplusplus.com の詳細情報

また、値%lfprintfする必要があることに注意してください。

訂正: %fprintf-format で十分なようです

于 2013-04-17T16:35:49.447 に答える