2017-01-26 13 views
-1

現在、私はopenclを使用したオンラインで見つかったサンプルプログラムと比較するプロセスを時間を計ろうとしています。しかし、このプロセスに時間を掛けると、次のように非常に奇妙な値が得られます。time.hを使用した奇妙なCLOCKS_PER_SEC値

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <CL/cl.h> 
#include <time.h> 

int main(void) { 

    int n = 100000; 
    size_t bytes = n * sizeof(double); 

    double *h_a; 
    double *h_b; 
    double *h_c; 
    h_a = (double*)malloc(bytes); 
    h_b = (double*)malloc(bytes); 
    h_c = (double*)malloc(bytes); 

    int i; 
    for(i = 0; i < n; i++) 
    { 
     h_a[i] = sinf(i)*sinf(i); 
     h_b[i] = cosf(i)*cosf(i); 
    } 

    clock_t start = clock(); 
    for(i = 0; i < n; i++) 
     h_c[i] = h_a[i] + h_b[i]; 
    clock_t stop = clock(); 
    double time = (stop - start)/CLOCKS_PER_SEC; 
    printf("Clocks per Second: %E\n", CLOCKS_PER_SEC); 
    printf("Clocks Taken: %E\n", stop - start); 
    printf("Time Taken: %E\n", time); 

    free(h_a); 
    free(h_b); 
    free(h_c); 

    system("PAUSE"); 
    return 0; 
} 

結果:そこにすべてのための非常に奇妙な値を与える

C:\MinGW\Work>systesttime 
    Clocks per Second: 1.788208E-307 
    Clocks Taken: 1.788208E-307 
    Time Taken: 0.000000E+000 
    Press any key to continue . . . 

その。私はそれが約1,000,000でなければならないことを理解しており、なぜこれを行っているのかわかりません。これは、等しく関連していたすべてに対して6E + 256の値を与えるのに使用されていました。

+1

あなたは 'のprintf( "第二あたりのクロック:%Eの\ nを"、CLOCKS_PER_SEC)にあなたの例のコードを減らすことができます;'、あなたに警告を与える**フォーマットは '%E' の引数を期待引数doubleは型double型ですが、引数2型はlong int型です。-Werror = format =] ** http://ideone.com/EYeVvg – mch

答えて

1

clock_tはダブルではないようですので、%Eは間違ったフォーマット指定子です。

おそらくlongです。これを試してみてください:

printf("Clocks per Second: %E\n", (double)CLOCKS_PER_SEC); 
+0

ありがとう、完璧に働いた! –

+0

'clock_t 'の型は標準では指定されていません。二重でもかまいませんが、通常は '' long''または '' int''や '' long long''、あるいはそれらのうちの一つの符号なしバージョンです。 – Ben

関連する問題