P1) Ejercicio 7-a

P1) Ejercicio 7-a

de Alejandro Schubert Bentancurt Sosa -
Número de respuestas: 2

Hola, tengo una duda de este ejercicio (Haskell Platform v8.4.3, la 8.0.2 daba ciertos problemas en windows). Su archivo de perfil básico de memoria (.conf), me da:

 COST CENTRE  MODULE                   SRC             no.     entries  %time %alloc   %time %alloc


MAIN         MAIN                     <built-in>       41          0    0.0    0.0   100.0  100.0

 CAF         GHC.IO.Encoding.CodePage <entire-module>  68          0    0.4    0.0     0.4    0.0

 CAF         GHC.IO.Encoding          <entire-module>  65          0    0.0    0.0     0.0    0.0

 CAF         GHC.IO.Handle.Text       <entire-module>  62          0    0.0    0.0     0.0    0.0

 CAF         GHC.IO.Handle.FD         <entire-module>  55          0    0.0    0.0     0.0    0.0

 CAF         Main                     <entire-module>  48          0    0.0    0.0    60.7   99.5

  f          Main                     Ai.hs:3:1-23     84          1    0.0    0.0     0.0    0.0

  main       Main                     Ai.hs:1:1-29     82          1   48.1   85.9    60.7   99.5

   f         Main                     Ai.hs:3:1-23     85          0   12.6   13.6    12.6   13.6

 main        Main                     Ai.hs:1:1-29     83          0   38.9    0.5    38.9    0.5


 

Como se ve, aparece al final otra vez la función main, esta vez consumiendo 38.9% del tiempo, pero fuera del nodo CAF. ¿Estos tiempos son por el print? ¿porque aparece dos veces? Algo parecido ocurre con la función f, pero se puede interpretar como llamada por main y llamada directamente. Esto no está en el link que aparece en las transparencias de clase.


Agrego el código original:

main = print $ f [1..1000000]


f = foldl (flip (:)) []


Gracias,

Alejandro.

En respuesta a Alejandro Schubert Bentancurt Sosa

Re: P1) Ejercicio 7-a

de Marco Nicolas Rodriguez Alvariza -

En las diapositivas hay una referencia a https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html . Ahí se menciona que el tiempo y la memoria consumidos por cada parte del programa (le llama centro de costo) se presenta en dos formas:

  • individual: los costos incurridos por el centro de costo por sí solo
  • heredado (inherited): incluye los constos incurridos por los hijos del nodo

En este caso, si entiendo bien, f es hijo de main. Por eso, entiendo que main aparece dos veces porque uno es el costo individual (costo de main sin el costo de f) y otro el heredado (costo de main incluyendo el costo de f).

Más allá de eso, lo que muestra ese archivo es la información del uso global de memoria y tiempo. No te dice cuánto de memoria se usa en cada momento de tiempo. Creo que lo que pedía el ejercicio era un análisis del heap profile con la salida del archivo .hp (que se puede convertir a una gráfica .ps con hp2ps).

Slaudos,

Nicolás.

En respuesta a Marco Nicolas Rodriguez Alvariza

Re: P1) Ejercicio 7-a

de Alejandro Schubert Bentancurt Sosa -

Hola Marco, 

  Gracias por la respuesta. Mi duda como decía, en realidad viene por el lado del main, había leído el link de clase. El problema es que en ese link no aparece la referencia al segundo main que comentaba al principio, ¿que representa el segundo main fuera del CAF? Está marcado en negrita en la pregunta original.

Saludos,

Alejandro.