2016-05-16 62 views
9

Sto provando a profilare un codice Haskell usando gli strumenti di profilazione GHC. Il centro di costo a cui sono più interessato, tuttavia, è attualmente dominato da un gruppo di codice di inizializzazione di cui non mi interessa molto.Profilo con una sola funzione (o centro di costo) con GHC

mio codice è grosso modo, in questo modo:

main = do 
    x <- lotsOfInitialization 
    print $ {-# SCC "myCostCenter" #-} interestingPart x 

Nel mio codice vero e proprio, la parte lotsOfInitialization sta prendendo ~ 98% del tempo e quindi è difficile vedere con qualsiasi granularità ciò che sta accadendo all'interno interestingPart.

Ho pensato che solo annotando in un posto (e non usando -fprof-auto) sarebbe stato sufficiente, ma il rapporto che sto ottenendo mostra ancora tutte le chiamate di funzione.

Ho anche provato un'annotazione di rigore su x, ma ciò non sembrava cambiare nulla.

C'è un modo per dire a GHC di ignorare il codice di inizializzazione o concentrarsi solo sulle parti che voglio?

risposta

2

In base allo ghc manual è possibile eseguire la profilatura dell'heap su determinati centri di costo, ad es. usando -hc⟨name⟩ o -hy⟨type⟩.

Non sono riuscito a trovare una soluzione che faccia qualcosa di simile per il profiling temporale.

EDIT:

ho actuall riuscito a trovare un modo per fare comodamente ciò che è necessario sia per l'allocazione e il tempo profiling. Se si utilizza il visualizzatore profiteur per i file .prof, è possibile esaminare il profilo delle prestazioni di un determinato centro di costo sotto forma di una mappa ad albero ben formattata.

Problemi correlati