С как правильно измерить время?

Это «алгоритм», но когда я хочу измерить время выполнения, это дает мне ноль. Зачем?

#define ARRAY_SIZE 10000
...

clock_t start, end;

start = clock();

for( i = 0; i < ARRAY_SIZE; i++) 
{
non_parallel[i] = vec[i] * vec[i];
}
end = clock();
printf( "Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC );

Итак, что я должен сделать, чтобы измерить время?

Ответы на вопрос(2)

clock() Функция имеет довольно низкую точность, и ваш цикл не выполняет много работы. Вы можете либо сделать свой цикл более эффективным, чтобы он работал дольше, либо использовать лучший метод синхронизации.

Методы с более высокой точностью зависят от платформы. Для Windows см.Как использовать QueryPerformanceCounter? а для линукса смотриТаймер высокого разрешения с C ++ и Linux?

 14 апр. 2012 г., 18:07
@ Мистик Сбой с моей стороны, исправил мой ответ.
 14 апр. 2012 г., 18:14
Тогда я могу +1 сейчас за упоминание счетчиков высокой производительности.
 14 апр. 2012 г., 18:00
Хм, ОП уже приводит один из операндов кdouble.
Решение Вопроса

10000 is not a lot on a modern computer. Therefore that loop will run in probably less than a millisecond - less than the precision of clock(). Therefore it will return zero.

If you aren't using the result of non_parallel its possible that the entire loop will be optimized out by the compiler.

Скорее всего, вам просто нужна более дорогая петля. Попробуйте увеличитьARRAY_SIZE к чему-то гораздо большему.

Here's a test on my machine with a larger array size:

#define ARRAY_SIZE 100000000

int main(){

    clock_t start, end;

    double *non_parallel = (double*)malloc(ARRAY_SIZE * sizeof(double));
    double *vec          = (double*)malloc(ARRAY_SIZE * sizeof(double));

    start = clock();

    for(int i = 0; i < ARRAY_SIZE; i++) 
    {
        non_parallel[i] = vec[i] * vec[i];
    }

    end = clock();
    printf( "Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC );


    free(non_parallel);
    free(vec);
    return 0;
}

Output:

Number of seconds: 0.446000

Ваш ответ на вопрос