He estado usando hasta ahora, la forma tradicional de los métodos simultáneos de referencia, que es medir la duración transcurrida para un número de carreras:evaluación comparativa utilizando <ctime> e instrucción reordenación
template <typename Functor>
double benchmark(Functor const& f, size_t nbRuns)
{
if (nbRuns == 0) { return 0.0; }
f(); // Initialize before measuring, I am not interesting in setup cost
time_t begin = time(0);
for (size_t i = 0; i != nbRuns; ++i) { f(); }
time_t end = time(0);
return difftime(end, begin);
}
que parecía todo bien y elegante hasta que me encontré con esta pregunta: Optimizing away a "while(1);" loop in C++0x.
Lo que me parece raro es que se permite que el compilador para ejecutar la salida antes del bucle ... y de repente me pregunto:
¿Qué impide que el compilador de ejecución de
time_t end = time(0);
antes del bucle aquí?
porque si lo hiciera, eso de alguna manera atornillaría mi pequeño código de referencia.
Y mientras estamos en ello, si alguna vez el reordenamiento podría ocurrir en esta situación:
¿Cómo se puede evitar que?
no podía pensar en etiquetas relevantes aparte del C++ queridos, si alguien piensa que he perdido uno, no dude en añadir que
¿Cuál es su compilador? ¿Está seguro de que el ciclo sigue ejecutándose después de la salida? Debe insertar printf dentro del ciclo y probarlo. ¿Crea f() otro hilo? Lo que puede ejecutarse después de la salida son otros hilos. – Squall
@Squall: no sucede, o al menos no creo que lo haga, pero me preguntaba si funcionaría por mera casualidad. –