Привет. Использую функцию GetTickCount() для измерения времени выполнения в миллисекундах, но вот кусок кода: UINT32 start = GetTickCount(); upper = lower + step; while (upper < n) { result += (double)(upper-lower)/6.0*(func(lower,degree) + 4*func(double(upper+lower)/2,degree) + func(upper,degree)); upper += step; lower += step; } if (upper >= n) { upper = n; result += (double)(upper-lower)/6.0*(func(lower,degree) + 4*func(double(upper+lower)/2,degree) + func(upper,degree)); } UINT32 end = GetTickCount(); UINT32 diff = end - start; В конце концов получается, что diff = 0. Если в while добавить какой-нибудь вывод (cout), то время наконец-таки замеряется. Так вот вопрос: как можно замерить время выполнения в миллисекундах? Уж больно быстро выполняется программа.
Ответ
Вы никогда не сможете замерить точное время выполнения вашего кода. Многозадачность в Windows - интересная штука, в любой момент времени операционная система может решить переключить контекст выполнения с вашей на другую задачу... И в итоге вы получите не совсем те результаты :) И присуще это не только Windows. В подобных ситуациях обычно поступают следующим образом: замеряют выполнение N повторений требуемого участка, и затем вычисляют среднее время выполнения одного повторения...
Комментариев нет:
Отправить комментарий