« быстрее (в реальном времени) » и « лучше по производительности » эквивалентны в однопоточном неконфликтном контексте при условии, что измерения верны.
Судя по всему, измерение ускорения в 50 раз является верным признаком того, что функция работает быстрее и, следовательно, лучше, чем базовый уровень.
НО перед тем, как сделать вывод:
Оберните свой код в другой внешний l oop и l oop хотя бы на пару сотен миллисекунд, отбрасывая результаты первых 200 мс, затем возьмите среднее из остальные измерения. Это особенно важно, если тестируемые функции обращаются к памяти. Эффекты кэширования памяти могут составлять более 100 раз разницу во времени.
Добавьте вызов _mm_lfence()
после каждого вызова foo
, чтобы убедиться, что все его инструкции удаляются перед измерением часов.
Микробенчмаркинг сложен; это часто означает, что некоторые функции могут быть осмысленно измерены только в сочетании, а также объем обрабатываемых данных должен быть примерно эквивалентен сценарию из реальной жизни.