неверные результаты для clock () на 64 бит - PullRequest
0 голосов
/ 29 октября 2009

У меня есть простая функция бенчмаркинга, использующая функцию C clock().

start[timerId]=clock();
clock_t end;
float dif_sec;
end=clock();
dif_sec=((float)end-start[timerId])/CLOCKS_PER_SEC;
printf("%s: %f seconds\n", msg, dif_sec);

На Mac OS X он работает нормально в 32 битах, но когда я компилирую в 64 битах, все результаты неверны. Почему?! * * 1005

1 Ответ

2 голосов
/ 30 октября 2009

Вот что я получил от чистой версии вашего кода на C (MacOS X 10.5.8 - Leopard; MacBook Pro):

#include <time.h>
#include <stdio.h>

int main(void)
{
    clock_t start = clock();
    clock_t end   = clock();
    float dif_sec = ((float)end-start)/CLOCKS_PER_SEC;
    printf("%s: %f seconds\n", "difference", dif_sec);
    printf("%s: %d\n", "CLOCKS_PER_SEC", CLOCKS_PER_SEC);
    return(0);
}

Вот как я его скомпилировал, запустил и получил результаты:

Osiris JL: gcc -m32 -o xxx-32 xxx.c
Osiris JL: gcc -m64 -o xxx-64 xxx.c
Osiris JL: ./xxx-32
difference: 0.000006 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL: ./xxx-64
difference: 0.000009 seconds
CLOCKS_PER_SEC: 1000000 
Osiris JL: ./xxx-64
difference: 0.000003 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL: ./xxx-32
difference: 0.000003 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL:

Выглядит вроде нормально - возможно, довольно быстро, но это нормально; Это новый замечательный компьютер, и для выполнения двух системных вызовов подряд не требуется много времени.

...