Pregunta

Estoy escribiendo un programa en Fortran y necesito una forma de calcular la duración del programa hasta milisegundos. He estado usando la función "date_and_time", que me deja con una matriz que contiene el tiempo del sistema en horas, minutos, segundos y milisegundos.

Creo que puedo llamar a esta función al comienzo de mi programa para almacenar la hora actual, luego volver a llamar a la función al final de mi programa para almacenar la última vez. Pero después de eso, ¿cómo compensaría la duración? Intenté restar los valores, pero los milisegundos se restablecen cuando pasa un segundo, al igual que los segundos se restablecen cuando pasa un minuto. ¿Cómo sería la mejor manera de abordar esto?

Aquí está el programa:

       PROGRAM TEST_TIME_AND_DATE
          INTEGER I
          REAL J
          INTEGER TIME_A(8), TIME_B(8)
          CALL DATE_AND_TIME(VALUES=TIME_A)
          PRINT '(8I5))', TIME_A
          DO I = 0, 400000000
            J = I * I - J
          END DO
          CALL DATE_AND_TIME(VALUES=TIME_B)
          print '(8I5))', TIME_B
      END PROGRAM TEST_TIME_AND_DATE

Y aqui esta el resultado:

2011    6   11 -300    9   14   49  304
2011    6   11 -300    9   14   50  688

No estoy seguro de qué hacer aquí, gracias.

¿Fue útil?

Solución

Puede restar los números, luego convertir todo en milisegundos y resumir el MS, Sec en MS, Min en MS, HRS en MS, ...

En tu caso esto sería

0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]

Este enfoque funciona bien también con los desbordamientos, ya que un número positivo en una columna de la izquierda superpone los números negativos si todos se convierten en la misma base. P.ej 0:58.000 a 1:02.200 rendimientos

1 * 60000 + (-56) * 1000 + 200 = 4200

Tenga en cuenta que esto funciona hasta días, pero no con meses, ya que no comparten una duración común.

Otros consejos

Si desea el tiempo de reloj transcurrido, sería más sencillo usar el procedimiento intrínseco System_Clock, ya que proporciona una salida única de valor en el tiempo. (Hay argumentos adicionales para proporcionar información sobre el procedimiento, por lo que es un procedimiento en lugar de una función). Ver, por ejemplo, http://gcc.gnu.org/onlinedocs/gfortran/system_005fclock.html. Si desea cronometrar el uso de la CPU, use CPU_Time. Para dos, dos llamadas, al comienzo y al final del programa, luego una simple diferencia. Puede usar el argumento Count_Rate para convertir en el recuento entero de tiempo en segundos.

Podría calcular el desplazamiento desde algún tiempo de inicio (1 de enero de 1970 para UNIX) en segundos o milisegundos. La diferencia en esos números es tu tiempo transcurrido.

(2011 - 1970) * (number of seconds in a year) +
(month of the year - 1) * (number of seconds in a month) +
(day of the month - 1) * (number of seconds in a day) + 
( ... )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top