2017-01-26 18 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 . . . 

Его дает очень странные значения для всего там. Я понимаю, что это должно быть около 1 000 000, и я не знаю, почему это так. Он использовал для значений около 6E + 256 для всего, что было в равной степени.

+1

Вы можете уменьшить свой пример кода для 'Е («Часы в секунду:% E \ п», 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

 Смежные вопросы

  • Нет связанных вопросов^_^