• Domingo 15 de Diciembre de 2024, 08:34

Autor Tema:  Cronómetro De Precisión  (Leído 3227 veces)

Koosla

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Cronómetro De Precisión
« en: Martes 3 de Febrero de 2004, 13:08 »
0
Hola a tod@s.
Sé que esto se ha preguntado -más o menos-, pero mi duda va más allá.

Estoy experimentando con algoritmos de ordenación, y para ver las diferencias de rendimiento necesito medir el tiempo de ejecución de dos versiones del algoritmo -con y sin la optimización a probar-. Estoy usando la función clock(), más o menos así:

===================================
#include <time.h>

   float dif;
   clock_t inicio, fin;
   inicio = clock();
   /* Aquí el algoritmo a cronometrar */
   fin = clock();
   dif = (fin - inicio) / CLOCKS_PER_SEC;
   printf("\n%f\n", dif);
===================================

El problema es que, por los resultados que obtengo, parece que la precisión de esta función sea tan sólo de +/- 1 segundo... y necesitaría bastante más que eso. Me extrañaría que no hubiera forma, porque si no recuerdo mal, en Visual Basic era relativamente fácil conseguir precisión de milisegundos con una sencilla llamada a la API de Windows, y aún más precisión con otra función API no mucho más compleja.
Pero ahora estoy en Linux, programando en C, y las únicas referencias que he conseguido encontrar a este tema me remiten al uso de clock().



Un saludo, y gracias por adelantado.

P.D.: Dado el planteamiento que estoy utilizando, no me serviría de mucho simplemente repetir X veces cada proceso y luego dividir el tiempo total por X; lo he pensado, pero me gustaría partir de todos modos de una precisión mayor.

Koosla

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Cronómetro De Precisión
« Respuesta #1 en: Martes 3 de Febrero de 2004, 14:03 »
0
Nota: un amigo me ha corregido el uso de tipos de variable, y poniendo (float) antes de CLOCKS_PER_SEC, obtengo centésimas de segundo, con lo que ya puedo empezar a trabajar.

Aún así, si alguien conoce un método mejor (o qué otras cosas hago mal de éste), me vendría muy bien, porque sé que entre algunos algoritmos (o distintas versiones del mismo) las diferencias pueden ser aún más sutiles.

Gracias  :)

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Cronómetro De Precisión
« Respuesta #2 en: Martes 3 de Febrero de 2004, 14:25 »
0
Como dices, el uso de variables float aumenta más la precisión. Yo tuve que hacer lo mismo y tuve que solucionarlo haciendo varias pruebas y sacando la media.

Asi que yo tb me uno a cualquier posible solución, nunca está de más aprender cosas mas "eficientes".

Nos vemos
Core Dumped
zirrus.es

desorden

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Cronómetro De Precisión
« Respuesta #3 en: Martes 3 de Febrero de 2004, 19:54 »
0
La función clock_gettime -man clock_gettime- muestra nanosegundos.
También podéis probar con times, gettimeofday, etc...

Un saludo...
desorden

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Cronómetro De Precisión
« Respuesta #4 en: Jueves 5 de Febrero de 2004, 08:45 »
0
En un entorno más o menos complejo como los que hay ahora (windows, linux, etc) es mejor medir muchas veces el algoritmo y hacer un promedio, ya que en una sola ejecución pueden pasar muchas cosas ajenas a tí que hagan que tu algoritmo vaya más lento o se vea interrumpido.

Además de medir usando funciones como clock() u otras, existen unas herramientas llamdas profilers. Linux la tiene por defecto y recuerdo que Borland C++ en su día también la tenía por defecto. Estas herramientas "monitorizan" la ejecución del programa y te dicen cuantas veces se llama y cuánto tiempo se gasta en cada función. Bastaría con meter tu algoritmo en una función y ejecutar el programa "monitorizado" por un profiler.

En www.geocities.com/chuidiang tienes una explicación de cómo funciona el profiler de linux.

Se bueno.

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Cronómetro De Precisión
« Respuesta #5 en: Jueves 5 de Febrero de 2004, 13:00 »
0
Ey chuidiang, supongo que esa web es tuya, que casualidad el conocerte  :D , es de las webs q me han resultado muy útiles para dudas de programación en C para al gunas de las prácticas que he tenido que hacer en la carrera  :comp: .

Felicidades por la web!!!! Como yo, conozco a otros muchos a los que le he recomendado tu web!!!

Nos vemos. :hola:
Core Dumped
zirrus.es

chuidiang

  • Miembro MUY activo
  • ***
  • Mensajes: 123
  • Nacionalidad: es
    • Ver Perfil
    • http://www.chuidiang.com
Re: Cronómetro De Precisión
« Respuesta #6 en: Viernes 6 de Febrero de 2004, 09:24 »
0
Me alegro de que la página te resulte útil.

Se bueno.