utilizar el mejor contador disponibles en su plataforma, caen de nuevo a tiempo() para la portabilidad. Estoy usando QueryPerformanceCounter, pero veo los comentarios en la otra respuesta.
consejo general:
El bucle interno debe ejecutar al menos aproximadamente 20 veces la resolución de su reloj, para hacer que el error de resolución < 5%. (por lo tanto, cuando use el tiempo() su ciclo interno debería ejecutarse al menos 20 segundos)
Repita estas mediciones para ver si son consistentes.
Utilizo un circuito externo adicional, ejecutando diez veces e ignorando la medición más rápida y la más lenta para calcular el promedio y la desviación. La desviación es útil cuando se comparan dos implementaciones: si tiene un algoritmo que toma 2.0ms +/-. 5, y el otro 2.2 +/- .5, la diferencia no es significativa para llamar a uno de ellos "más rápido". (máximo y mínimo aún se deben mostrar). Así que en mi humilde opinión una medida del rendimiento válida debe ser algo como esto:
10000 x 2.0 +/- 0.2 ms (min = 1.2, , max=12.6), 10 repetitions
Si sabe lo que está haciendo, purgar el caché y el establecimiento de afinidad hilo puede hacer sus mediciones mucho más robusto.
Sin embargo, esto no es sin pifalls. Cuanto más "estable" es la medida, menos realista es también. Cualquier implementación variará fuertemente con el tiempo, dependiendo del estado de los datos y la caché de instrucciones. Soy flojo aquí, usando el valor máximo = para juzgar la penalización de la primera ejecución, esto puede no ser suficiente para algunos escenarios.
Rela ted pregunta: http://stackoverflow.com/questions/275004/c-timer-function-to-provide-time-in-nano-seconds –
El tiempo depende de la plataforma. Debería enumerar qué plataforma (s) está utilizando. –
Es frustrante que ninguna de las respuestas aquí tenga un componente estadístico. – uckelman