2014-04-29

Medir el tiempo de ejecución de procesos en R

Title

proc.time

Para medir el tiempo de ejecución de nuestro código en R usamos la función proc.time. Esta función determina el tiempo real y de la CPU (en segundos) desde que el proceso se inició en R.

t <- proc.time() # Inicia el cronómetro
# NUESTRO CODIGO
proc.time()-t    # Detiene el cronómetro
Muestra en la consola 3 valores: user, system, y elapsed.

user  system elapsed 
0.02    0.00    0.09 
User time es el tiempo de la CPU dedicado a la ejecución del las instrucciones del proceso. System time es el tiempo de la CPU empleado por el sistema operativo (el núcleo o kernel) siguiendo las instrucciones del proceso (abrir ficheros, iniciar otros procesos o mirar al reloj del sistema, etc.). Elapsed time es el tiempo transcurrido 'real' desde que se inició el proceso.

system.time

Para evaluar una sola expresión de R usamos la función system.time. Esta función llama a la función proc.time, evalúa la expresión y vuelve a llamar a la función proc.time devolviendo la diferencia entre ambas llamadas a proc.time.

system.time(NUESTRA EXPRESIÓN) # Sólo necesita un argumento

# Ejemplo:
system.time(for(i in 1:1e7) x <- 1)
Muestra en la consola los mismos valores que proc.time.

user  system elapsed 
2.59    0.01    2.60 

Notas

Aproximadamente el elapsed time es la suma de los dos anteriores: user time más system time. Pero esto no siempre es así. Por ejemplo, si dos tareas de 15 segundos se ejecutan en paralelo en dos núcleos, el user time computa la suma de las dos: 30 segundos. Mientras que elapsed time no incluye la suma del tiempo de las dos tareas en paralelo, solo el tiempo 'real' que la CPU tardó: 15 segundos. El caso contrario sucede, por ejemplo, si introducimos la expresión Sys.sleep(60) en algún punto de nuestro código. Durante ese tiempo la CPU no será utilizada, 0 segundos, pero el elapsed time computará esos 60 segundos y será mayor que la suma del user time más el system time.

Referencias:

proc.time y system.time
IDRE(UCLA)
Significado de proc.time
User time mayor que elapsed time

6 comentarios:

  1. Hola. Gracias por la información. Actualmente estoy trabajando en R en el procesamiento de 16 millones de datos ya que estoy creando un sistema de recomendación. Tengo una duda y quisiera saber si estoy haciendo algo mal. Cada vez que intento procesar una gran cantidad de datos en R (p. Ej. 100mil registros y mas) me tarda mucho la corrida, para 100mil datos me tarda como una hora en hacer un simple cálculo. ¿Será q R no es el programa adecuado?. ¿Como podré trabajar un volumen alto de datos en poco tiempo?... Te agradecería mucho si me puedes asesorar. Un saludo

    ResponderEliminar
    Respuestas
    1. R guarda los objetos en memoria. Sin conocer detalles sobre los datos, data frame o los cálculos que realizas es imposible de saber. Puedes optimizar tu código, emplear procesamiento en paralelo o usar otro lenguaje o programa para procesar previamente los datos y realizar el análisis final en R. Te recomiendo que plantees tu pregunta con más detalles en stackoverflow donde quizá puedan ayudarte. Por otro lado, puedes explorar estos enlaces y buscar más información en la web:

      https://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory-limits.html
      http://adv-r.had.co.nz/memory.html
      https://cran.r-project.org/web/views/HighPerformanceComputing.html
      http://www.matthewckeller.com/html/memory.html
      Saludos,

      Eliminar
  2. Hola, muy útil para mi esta función.
    Yo estoy trabajando en R con algoritmos genéticos para optimizar modelos de 2do. orden, y no sé como interpretar los resultados de la función Fitness, me retorna un valor muy alto y negativo, y los valores que me retorna como optimos al introducirlos en el modelo para probarlos, me dan resultados fuera de la realidad en estudio. Si tienes algo para orientarme, te agradezco!

    ResponderEliminar
    Respuestas
    1. Hola, gracias por tu comentario. Te recomiendo que plantees tu duda en stackoverflow.com si el problema es estrictamente de código, o en stats.stackexchange.com si es de estadística e interpretación. Es importante que tu ejemplo sea claro, detallado y aportes datos concretos. Saludos.

      Eliminar
    2. Estimado Tec. Yarucuy,
      Es dificil decir q es lo que pasa con tu codigo, mi experiencia con la libreria GA me ensenio q uno de los problemas es la manera en la q se califican las mejores respuestas y por ello tuve que probar desde un simple r2 hasta un valor kappa para evaluar el valor de ajuste o fitness. Por otro lado es importante el numero de las muestras usadas en el entrenamiento ya que tuve un problema parecido cuando no estaban balanceadas. Otro factor tambien es el espacio de busqueda, siendo mejor dividirlo en partes para evitar estancamientos en optimos locales. Finalmente es bueno probar distintas combinaciones con los parametros de GA, al parecer la mutacion ayuda a que se puedan diversificar el numero de respuestas y por ello la probabilidad de encontrar la mejor solucion al problema de optimizacion.
      Saludos

      Eliminar

Nube de datos