2017-01-26 46 views
-1

目前我正在嘗試將一個進程與我在網上發現的使用opencl的示例程序進行比較。然而,當我嘗試這個過程時,我會得到非常奇怪的值,如下所示。奇怪的CLOCKS_PER_SEC值使用time.h

#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 . . . 

及其對那裏的一切給人很奇怪的值。我知道它一定是100萬左右,我不知道爲什麼要這樣做。它曾經給與6E + 256的值相同的一切。

+1

您可以減少您的示例代碼'的printf( 「每秒時鐘:%E \ n」,CLOCKS_PER_SEC);',它會給你警告**格式 '%E' 需要參數類型'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