Цитата:
Хорошо бы ещё, чтобы ваши собственные алгоритмы (подразумевается, что они заведомо быстрее почти всех решений участников) на этом тесте работали не быстрее 10-20 секунд. Иначе тяжело замерять время, когда программы работают быстрее. Видел людей, который соревновались на миллисекунды (измеряли через профилировку), забывая о том, что в эти миллисекунды входили операции самих команд измерения времени и занимали почти всё это время.
При замере надо учитывать множество факторов. Из-за того что виндоус и линукс имеет вытесняющую многозадачность могут наблюдать погрешности в измерениях. При запуске программы ядро может вытеснить одну задачу другой. Виндосу делает это через определенный промежутки времени около 4-20 миллисекунд. Есть ещё у поминание что виндоус использует длинные и короткие кванты. Длинные порядка 4с.
Но в целом по моим наблюдениям если задача длится более 4 секунд(до 1 минуты) , то ошибка измерения будет менее 0.1 раза. Для ошибки 0.001 надо уже несколько минут тратить на измерение.
Если говорить про измерения миллисекунд, то ошибка будет большая и надо делать цикл чтобы перейти в окно с большим интервалом. От 0.016 до 4 секунд точность не возрастала.
Правда выше сказанные измерения проводились без учёта времени потраченного на основную задачу и на дополнительные. И тут точность можно поднять если сделать такой учёт.
Если задача выполняется менее 15 мс(менее кванта) то тут измерения достаточно точные.
Также мне было интересно измерить скорость работы одной инструкции с точностью до 0.001
Понятно что инструкцию надо гонять в цикле порядка 10000. Самое удивительное получил результат
такта (В руководстве от интел написано 0.33)
Если не брать замеры на промежуточных участках, то профилировщик время не тратит. Он замеряет время только на старте(т.е до) и в конце программы(т.е сразу по её завершению). А если мерит на промежуточных, тогда появляются накладные расходы, но их можно вычислить и вычесть. А да зачастую они не превосходят наносекунд в самом плохом случае микросекунды. Так что миллисекунды измерять можно.