2011-12-03 2 views
1

Мне нужно вычислить время выполнения хэш-вставки. Я использую часы, чтобы делать время, но я продолжаю заканчивать ноль. Есть ли какой-то определенный способ, который был бы наиболее эффективным?Расчет времени выполнения хэш-вставки?

Это мой код для этого до сих пор:

cout << "Testing chaining probing...\n"; 
    HashTable_chaining ChainingHT(ITEM_NOT_FOUND, 101); 
    int i = 0; 
    while(i != DataArray.size()) 
    { 
     clock_t tStart = clock(); 
     ChainingHT.insert(DataArray[i]); 
     cout<<"Time taken:"<<(double)(clock() - tStart)/100000<<endl; 
     if(i != NULL) 
     { 
      collision_count++; 
     } 
     i++; 

    } 
+2

Разделить на 'CLOCKS_PER_SEC' не 100000. –

+0

что такое CLOCKS_PER_SEC? – user977154

+1

@ user977154: Это то, что вы делите результат 'clock()', чтобы получить секунды. На некоторых системах это 100000. На других системах это не так. –

ответ

3

один хэш вставки слишком быстро, чтобы измерить. Помещенный

clock_t tstart = clock(); 

в начале вашей программы, делая миллионов вставок и

clock_t tend = clock(); 

в конце. Затем вычислить в плавающей запятой:

cout << "cpu time=" 
     << ((double)tend - (double)tstart)/CLOCKS_PER_SEC << endl; 

Типичные текущие компьютеры делают несколько миллиарды элементарных машинных команд в секунду (но с разрешением часов в миллисекундах в лучшем случае).

1

Мое первое предположение, что вставка очень быстро, поэтому вы получаете нули ... Я бы никогда не делал то, что вы пытаетесь использовать в этом коде. Вместо этого я бы сделал, скажем, 10000 вставок, а затем вычислил, сколько времени потребуется, и разделите это число на 10000, чтобы получить среднее время, необходимое для вставки.

+0

Возможно, даже 10000 вставок недостаточно .... –

0

Запуск петли ввода 10000/100000/1000000 в порядке (вам нужно сыграть с номером вставки до тех пор, пока не получите значение, которое не требуется навсегда).

Если вы работаете в Windows, подумайте об использовании performance counters, чтобы получить гораздо лучшее разрешение (см. Код внутри).

+0

Но это решение не является кросс-платформенным (это вызов win api). – Yappie

+0

true. ОП не сказал, нужна ли ему кросс-платформа или нет. Я предполагаю, что он работает над окнами. – OSH

+0

В linux 'clock_gettime' обычно дает лучшую точность, и есть некоторые низкоуровневые трюки для прямого доступа счетчика производительности. –

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