Tic,tac, tic, toc! ¿Cuánto tarda mi programa?

Post date: Apr 10, 2015 5:41:45 PM

Matías Fajardo pidió que discutamos control de flujo de programas en GNU Octave. Es un pedido razonable así que vamos a ir en esa dirección.

Con el tema de control de flujo tocamos algo importante para lenguajes como GNU Octave. Para entender la importancia del tema necesitamos primero poder medir el tiempo que tarde en correr un programa. Por esta razón vamos a empezar nuestro camino hacia control de flujo con unas funciones muy sencillas: tic y toc.

Tic-Toc!

El objetivo es el siguiente: queremos medir cuanto tarda la ejecución de un programa. Por ejemplo ¿Cuánto tarda la creación de una matriz en Octave? Es decir ¿Cuánto tarda la ejecución del comando

rand (n)

para distintos valores de n?

Una forma de medir el tiempo de ejecución es usar las funciones tic y toc:

n = 100;
tic
rand (n);
toc

La función tic inicia un cronómetro y la función toc muestra le valor actual del cronómetro.

En mi computadora los resultados para n igual a 1e2, 1e3, y 1e4 son

Elapsed time is 0.000303984 seconds.
Elapsed time is 0.024765 seconds.
Elapsed time is 1.57575 seconds.

respectivamente.

Pregunta 1:

¿Qué tiempos obtenés vos?

La respuesta de toc nos dice el tiempo segundos que transcurrió desde la última vez que llamamos a la función tic. Este tiempo se llama tiempo de reloj de pared (wall-clock time, en Inglés) y corresponde más o menos al tiempo real que transcurrió en tu vida mientras se ejecutaba el código.

Pregunta 2:

¿Qué resultados obtenés si corres el siguiente código?

n = 5e2;
tic
rand (n);
toc
n = 5e2;
clear all
tic
rand (n);
toc

¿Notás algo raro?

¡Preguntas y comentarios en el foro!