2017-01-26 1 views
-1

Actuellement, j'essaie de chronométrer un processus pour comparer avec un exemple de programme que j'ai trouvé en ligne qui a utilisé opencl. Pourtant, quand j'essaie de chronométrer ce processus, j'obtiens des valeurs très étranges comme indiqué ci-dessous.Étrange valeurs CLOCKS_PER_SEC en utilisant 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; 
} 

Résultats:

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

Son donnant des valeurs très étranges pour tout là-bas. Je comprends qu'il doit y en avoir environ 1 000 000 et je ne sais pas pourquoi c'est ce qu'il fait. Il donnait des valeurs autour de 6E + 256 pour tout ce qui était également préoccupant.

+1

Vous pouvez réduire votre code exemple 'printf ("Clocks par seconde:% E \ n", CLOCKS_PER_SEC)', qui vous donnera le format avertissement ** '% E' attend un argument de type 'double', mais l'argument 2 a le type 'long int' [-Werror = format =] **. http://ideone.com/EYeVvg – mch

Répondre

1

Il semble que votre clock_t ne soit pas double, donc %E est le mauvais spécificateur de format.

C'est probablement long. Essayez ceci:

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

Merci l'homme, a parfaitement fonctionné! –

+0

Le type de 'clock_t' n'est pas spécifié par la norme. Cela peut être double, mais généralement, c'est long ou int ou long long, ou une version non signée de l'un d'entre eux. – Ben