iguales - igualar cadenas
¿Cómo puedo comparar el código C fácilmente? (4)
Básicamente, todo lo que quieres es un temporizador de alta resolución. El tiempo transcurrido es, por supuesto, solo una diferencia en los tiempos y la aceleración se calcula dividiendo los tiempos para cada tarea. He incluido el código para un temporizador de alta resolución que debería funcionar al menos en Windows y Unix.
#ifdef WIN32
#include <windows.h>
double get_time()
{
LARGE_INTEGER t, f;
QueryPerformanceCounter(&t);
QueryPerformanceFrequency(&f);
return (double)t.QuadPart/(double)f.QuadPart;
}
#else
#include <sys/time.h>
#include <sys/resource.h>
double get_time()
{
struct timeval t;
struct timezone tzp;
gettimeofday(&t, &tzp);
return t.tv_sec + t.tv_usec*1e-6;
}
#endif
¿Hay una biblioteca simple para comparar el tiempo que se tarda en ejecutar una parte del código C? Lo que quiero es algo así como:
int main(){
benchmarkBegin(0);
//Do work
double elapsedMS = benchmarkEnd(0);
benchmarkBegin(1)
//Do some more work
double elapsedMS2 = benchmarkEnd(1);
double speedup = benchmarkSpeedup(elapsedMS, elapsedMS2); //Calculates relative speedup
}
¡También sería genial si la biblioteca te permitiera hacer muchas ejecuciones, promediarlas y calcular la variación en el tiempo!
En POSIX, prueba getrusage . El argumento relevante es RUSAGE_SELF y los campos relevantes son ru_utime.tv_sec y ru_utime.tv_usec.
Puede haber utilidades existentes que ayuden con esto, pero sospecho que la mayoría usará algún tipo de muestreo o posiblemente inyección. Pero para obtener secciones específicas de código cronometradas, probablemente tendrá que agregar llamadas a un temporizador como el que muestra en su ejemplo. Si está usando Windows, entonces el temporizador de alto rendimiento funciona. Respondí una pregunta similar y mostré un código de ejemplo que hará eso. Hay métodos similares para Linux.
Use la función clock()
definida en time.h
:
startTime = (float)clock()/CLOCKS_PER_SEC;
/* Do work */
endTime = (float)clock()/CLOCKS_PER_SEC;
timeElapsed = endTime - startTime;