Título: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 3 Abril 2016, 21:49 pm Hola, gente.
Esta vez los molesto por poco, me podrían decir que tengo que agregar a mi código para medir el tiempo que tarda en ejecutarse, busqué en foros y lo que intené no funcionó. - Es probable que me quieran dar un tirón de orejas por tratar de reinventar la rueda, pero créanme que es tan solo para practicar con punteros y de paso cotejarlo con el método de la burbuja y saber que es más rápido si un doble for o un bucle while. - Código
Desde ya muchas gracias. - Saludo. Daniel (http://i67.tinypic.com/21m9n3t.png) Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: MAFUS en 3 Abril 2016, 22:15 pm Si usas Unix o derivado usa el comando time. Suponiendo que tu programa se llame 'mi_programa'
escribe en el shell Código
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 3 Abril 2016, 22:36 pm Código
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 3 Abril 2016, 23:06 pm Ivancea96, cuando corro lo que me sugeriste agregar me pasa esto:
(http://i63.tinypic.com/fnuws9.png) compila a la perfección solo que cambie el %i por %li (me daba error).- Daniel. MAFUS. Lo tuyo funciona solo que no se cierra el programa hasta apretar Enter por lo tanto en segundos el tiempo tomado no es tan preciso. - En cuanto a Windows el que dejo a continuación, funciona (no lo verifique, pero debe ser muy parecido al de ivancea96 ) como lo posteo, pero si lo aplico al programa me hace exactamente lo mismo que al principio. - desconozco que efecto extraño produce el programa que ordena que si le agrego esas pocas líneas revienta, seguiremos investigando, igual espero que alguien se ilumine y pueda hallar la solución. - Código
Daniel. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 4 Abril 2016, 11:50 am Me funciona correctamente. ¿Cuál es el código que te falla, y qué código de error lanza?
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 4 Abril 2016, 14:14 pm Hola.
Citar ¿Cuál es el código que te falla? Cuando le agrego las líneas que me sugeriste.Citar ¿qué código de error lanza? Al compilar ninguno, al ejecutar no muestra nada y aparece el mensaje que postee anteriormente. -Cuando decís que te funciona correctamente, te referís a que ¿lo estás corriendo dentro del programa mío o con algún código diferente?. - Saludos. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: class_OpenGL en 4 Abril 2016, 15:04 pm El problema está en la función "ordenar". No has inicializado la variable "i", por lo que al principio del while esta variable tiene un valor basura, que por casualidad, no te da error cuando pones solo tu código pero si que da error cuando fusionamos tu código con el de contar el tiempo. Repito, es casualidad que al principio no diera error
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 4 Abril 2016, 17:11 pm Hola, class_OpenGL.
Efectivamente, esa variable era la causante del error, cuando cambie el bucle for por el while no lo tube en cuenta. - En la función printf efectué 2 cambios y quedo así (de lo contrario me daba errores): Código %f y (double) Por último ¿es coherente que me de el resultado con el signo menos? -98.000000 -95.000000 Saludos. Daniel Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 4 Abril 2016, 17:29 pm No, no lo es. Si vas a trabajar con milisegundos, te recomiendo tratarlo como entero. En Windows, no tendrás microsegundos.
Luego, asegúrate de haber hecho clock()-cl y no al revés. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: class_OpenGL en 4 Abril 2016, 20:23 pm He probado el programa y me salen 0 milisegundos (recuerda que solo mides milisegundos, y estos se truncan), ninguna cifra negativa.
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 4 Abril 2016, 23:24 pm Hola a todos.
Voy a exponer el código y como lo implemente para que me digan si es correcto porque me quedan dudas con el resultado, por Ej. 4294967199, ¿estos son milisegundos y 4.30.... segundos?.- En cuanto a Linux, se puede poner esta línea para que la salida vaya a un archivo de texto. - >> (time ls) 2> salida.txt Código Saludos. Daniel Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: class_OpenGL en 5 Abril 2016, 00:00 am No, el resultado está en milisegundos. Deduzco que por alguna razón te está saliendo un número negativo en la operación "cl = clock() - cl;", pero al interpretar ese número negativo como un entero sin signo, te sale ese número. Si en vez de mostrarlo como un entero sin signo lo mostraras con signo, te saldría -97 ms...
No sé por qué razón te sale un tiempo negativo... Prueba a compilar con otro compilador. Yo he compilado el código tal y como tu lo tienes y me salen resultados coherentes... Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 5 Abril 2016, 18:56 pm Hola.
Bueno a pesar de no lograr el cometido porque realmente todas las pruebas que hice no me dieron resultdo, encontré una aplicación utilizando la librería windows.h que funciona muy bien, me gustaría colgarla aquí, pero como no conozco si es legal esto de sacar programas de una página y copiarlo en otra mejor lo dejamos ahí. - Lo que quiero consultarles concretamente es ¿es posible generar números aleatorios sin que se repitan? o la única manera es por cada número generado verificar si ya se encuentra en el arreglo. - Código
Saludos. Daniel Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: class_OpenGL en 6 Abril 2016, 00:27 am Podrías generar un número aleatorio guardado en el primer elemento, y cuando calcules un número aleatorio en el segundo, si este es igual al primero, generas otro número aleatorio, y así para todas las posiciones del arreglo. Es una solución relativamente sencilla, pero no sé si será la mejor porque dependes de que te salga un número aleatorio diferente (saldrá, pero no sé después de cuántas ejecuciones)
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 6 Abril 2016, 00:52 am Hola, amigo.
Te dejo la manera que lo hice, no tarda tanto en aparecer los 100 números, Parece ser lo que me propones. Código
Saludos. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: MAFUS en 6 Abril 2016, 01:16 am Con el problema de contar los tiempos: yo he terminado de hacer este programa y me cuenta hasta los microsegundos.
Código
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: crack81 en 6 Abril 2016, 01:59 am Hola : NOB2014
Tu código parase que ya funciona solo mencionaria unos detalles Ejemplo esta linea: Código
No es necesario crear un arreglo y luego asignárselo a un puntero. Si por ejemplo lo vas a pasar por parametro a una funcion, el cual esta declarado de esta forma: Código basta con ponerlo directamente al final de cuentas un arreglo es una estructura que apunta a una dirección en resumen es un puntero Ejemplo: Código
Otro detalle, este ya es en gustos, te aconsejaría remplazar esta forma de asignar el arreglo: Código Y recomendaría mejor esta: Código Las dos formas funcionan igual pero, la segunda forma hace tu código mas legible, y se hace mas a relucir cuando se aumenta el tamaño y complejidad del proyecto Espero mis comentarios no se tomen a mal Salutos.... Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 6 Abril 2016, 15:23 pm Hola.
MAFUS, te dejo una captura para que me digas que es lo que estoy leyendo, segundos, milesegundos. - (http://i68.tinypic.com/wuid1x.png) crack81, muchas pero muchas gracias por esas sugerencias no tenes una idea como se agradece de este lado, no obstante (como lo aclare al principio) lo hice con punteros porque estoy estudiando justamente punteros y estaba practicando. - Un abrazo y muchas gracias por el tiempo que le dedicaron al tema. - Daniel Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: class_OpenGL en 6 Abril 2016, 15:39 pm Solo es cuestión de observación. ¿Estás usando cl/CLOCKS_PER_SEC o (cl*1000)/CLOCKS_PER_SEC? Si estás usando la primera opción, son segundos (te lo dice CLOCKS_PER_SEC), pero si estás usando la segunda opción estás viendo milisegundos, porque estás multiplicando los segundos por 1000.
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: MAFUS en 6 Abril 2016, 15:40 pm La unidad es el segundo: 1.000000 es 1 segundo.
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 14:26 pm No puedo decir que este "bien" ahora pero parece ser que al menos por un factor de 100 estaba errado antes.
Código
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 Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 16 Abril 2016, 14:31 pm Eso son centisegundos, no segundos.
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 14:34 pm 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 Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 16 Abril 2016, 14:54 pm 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? Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 15:31 pm 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.... Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 16 Abril 2016, 15:45 pm ¿Qué valor da clock()-comienzo en una diferencia aproximada de 1 segundo? En entero, sin coma flotante.
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: NOB2014 en 16 Abril 2016, 16:02 pm 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. - Código Saludos. Daniel Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 16:12 pm 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) Código
Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 16 Abril 2016, 16:39 pm 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. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 16:56 pm 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: Código
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) Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: ivancea96 en 16 Abril 2016, 17:24 pm En todo caso:
Código
Si llamas a time() al principio 2 veces, serán iguales. Título: Re: Medir velocidad de ejecución de un programa en lenguaje C.- Publicado por: HardForo en 16 Abril 2016, 21:46 pm Me sirvió ;D
Gracias y.... por todo! |