Autor
|
Tema: Medir velocidad de ejecución de un programa en lenguaje C.- (Leído 14,528 veces)
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
No puedo decir que este "bien" ahora pero parece ser que al menos por un factor de 100 estaba errado antes. #include <stdio.h> #include <time.h> int main( void ) { long int i=0; clock_t comienzo; // programa for( i=0; i<5000000; i++ ){ } printf( "\n Segundos transcurridos.....: %f s\n", 100*(clock()-comienzo )/(double)CLOCKS_PER_SEC ); return 0; }
Segun leo en StackOverflow: "CLOCKS_PER_SEC might be defined as 1000000, depending on what options you use to compile, and thus it does not seem like a good solution." http://stackoverflow.com/questions/5248915/execution-time-of-c-program--- PD: realmente veo que ni siquiera es un factor multiplo de 10
|
|
« Última modificación: 16 Abril 2016, 14:32 pm por boctulus »
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Eso son centisegundos, no segundos.
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
Me tomé el trabajo de medir el tiempo de ejecucion del programa que posteé (o sea le subi el tiempo hasta que sea posible medirlo facilmente) y como digo...... el valor esta "en el orden" de los SEGUNDOS (correcto ahora para mi SO) pero tampoco es creo exacto (me difiere en algunos segundos)
Veo el problema como algo "grave" ya que nadie parece tener la seguridad de como es y menos cross-plataform o cross-compiler
|
|
« Última modificación: 16 Abril 2016, 15:27 pm por boctulus »
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
En Windows, suele ser CLOCKS_PER_SEC = 1000, y en Unix = 1000000. clock también retorna un valor acorde a estas cantidades y correcto.
1. ¿Qué valor tiene CLOCKS_PER_SEC en tu SO? 2. ¿Qué SO es? 3. ¿El valor retornado por tu clock() va en el rango de los milisegundos o de los microsegundos? ¿Otro quizás?
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
Uso Windows 6.3 y si vale 1000 como dices
En fin.... me toco multiplicar por 100 como decia respecto del programa aportado aqui para que tenga algun sentido....
|
|
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
¿Qué valor da clock()-comienzo en una diferencia aproximada de 1 segundo? En entero, sin coma flotante.
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola. Perdón por interponerme pero el código de boctulus me da resultados correctisimos, medido con un reloj de una página de internet, correctisimos. - Solo que lo hago como dijo MAFUS, en segundos. - printf( "\n Segundos transcurridos.....: %f s\n", 1.0*(clock()- comienzo )/(double)CLOCKS_PER_SEC );
Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
El codigo no es mio, es la forma estandar de usar la libreria Pero como digo en Windows el factor es de 100 (aprox) asi que creo este tipo de calculos deberian hacerse con ayuda del precompilador (#ifndef _Windows ...) al menos que se quiera solo valores relativos (mismo computador, mismo SO) #include <stdio.h> #include <time.h> #ifdef __linux__ #define TIMEFACTOR 1 #elif _WIN32 #define TIMEFACTOR 100 #else // definir #endif int main( void ) { long int i=0; clock_t comienzo; // programa for( i=0; i<1000000; i++ ){ } printf( "\n Segundos transcurridos.....: %f s\n", TIMEFACTOR *(clock()-comienzo )/(double)CLOCKS_PER_SEC ); return 0; }
|
|
« Última modificación: 16 Abril 2016, 16:34 pm por boctulus »
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Insisto, el único "factor" es CLOCKS_PER_SEC, que para eso existe. Multiplicar por 1000, da milisegundos. multiplicar por 100, centisegundos.
Si en tu compilador o sistema no funciona así, habrá que analizar por qué. Poner un coeficientes que cuadre no es una opción lógica.
Prueba si quieres en otro PC, en otro SO o en una máquina virtual para ver el resultado que debiera dar.
|
|
|
En línea
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
Ivan: me parece perfecto que insistas, estoy tratando de ver porque no me concuerdan los resultados. Siguiendo con la liberia time.h, te pido mires este codigo....... no le encuentro el fallo: #include <stdio.h> #include <time.h> int main( void ) { // solo como control adicional time_t tiempo1 = time(0); time_t tiempo2 = time(0); char output[128]; strftime(output ,128,"%d/%m/%y %H:%M:%S",tini ); // programa for(int i=0; i<40000000; i++ ){ } strftime(output ,128,"%d/%m/%y %H:%M:%S",tfin ); return 0; }
No logro muestre dos fechas-horas distintas! PD: quiero utilizar esto para rematar con el tema..... probando si es necesario o no un TIMEFACTOR adicional (pues en realidad quiero estar de acuerdo contigo)
|
|
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Medir la velocidad de descarga del winsock
Programación Visual Basic
|
Jeronimo17
|
6
|
2,169
|
20 Diciembre 2006, 02:07 am
por Jeronimo17
|
|
|
Aplicacion Medir Velocidad
Programación Visual Basic
|
Zorrohack
|
2
|
1,770
|
21 Enero 2008, 01:51 am
por Syddhartha
|
|
|
Medir el tiempo de una rutina en lenguaje C.
Programación C/C++
|
NOB2014
|
2
|
3,503
|
3 Septiembre 2014, 19:35 pm
por NOB2014
|
|
|
medir el tiempo de ejecución en C
Programación C/C++
|
fafafa01
|
2
|
29,722
|
14 Diciembre 2016, 02:44 am
por kraiked
|
|
|
Windows reduce velocidad de ejecucion.
« 1 2 3 »
Programación General
|
Usuario887
|
25
|
14,683
|
29 Octubre 2021, 11:32 am
por Usuario887
|
|