son iguales igualar comparar caracteres cadenas c benchmarking

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;