2011-05-11 76 views
8

¿Cómo puedo obtener el tiempo de ejecución de un programa a través de las funciones de tiempo del sistema en Haskell? Me gustaría medir el tiempo de ejecución de un programa completo y/o una función individual.Cómo obtener el tiempo de ejecución de un programa en Haskell

+0

Ver también http://stackoverflow.com/questions/1516808/writing-a-time-function-in-haskell –

Respuesta

11

Asumiendo que no sólo quiere medir el tiempo total de ejecución de su programa, así:

$ time ./A 

A continuación, puede tiempo un cálculo de un número de maneras en Haskell:

Para la medición más estadísticamente sonido, considere

Finalmente, en todos los casos, debe pensar en la evaluación diferida: ¿desea medir el costo de evaluar completamente los datos que produce, o simplemente a su constructor más externo?

+0

¿funcionará esto también en Windows? –

+0

Las soluciones de Haskell funcionan todas en Windows, sí. –

+0

¿Qué hay de compilar con '-prof' y usar' + RTS -s'? – ErikR

19

1) Si quiere comparar algo, use el paquete criterion.

2) Si desea medir el tiempo de una función y es positivo que haya controlado para la pereza, según sea necesario, a continuación, sólo tiene que utilizar Data.Time.getCurrentTime del paquete time .:

import Data.Time 
... 
    start <- getCurrentTime 
    runOperation 
    stop <- getCurrentTime 
    print $ diffUTCTime stop start 

Un envase impermeable a la tendencia mencionada puede ser encontrado en el paquete timeit.

3) Si realmente desea el tiempo de ejecución de un programa que acaba de estar escrito en Haskell, utilice la utilidad de sistemas time. Para la mayoría de los sistemas POSIX (Mac, Linux) simplemente ejecute:

$ time ./SomeProgram 

E informará el usuario, la pared y la hora del sistema.

3

No estoy seguro de cuán exacto es, pero usando :set +s en ghci se mostrará el tiempo y el espacio utilizados para los cálculos posteriores.

+0

gracias por la información! –

Cuestiones relacionadas