Sto cercando opportunità di ottimizzazione nel mio programma Haskell compilando con -prof
, ma non so come interpretare i centri di costo che contengono ellissi. Cosa sono filter.(...)
e jankRoulette.select.(...)
?Cosa significa. (...) in un rapporto .prof significa?
COST CENTRE MODULE %time %alloc
filter.(...) Forest 46.5 22.3
set-union Forest 22.5 4.1
cache-lookup Forest 16.0 0.1
removeMany MultiMapSet 3.7 1.9
insertMany MultiMapSet 3.3 1.8
jankRoulette.select.(...) Forest 1.4 15.2
ho generato che con: $ ghc --make -rtsopts -prof -auto-all main.hs && ./main +RTS -p && cat main.prof
La funzione filter
ha alcune definizioni di cui una clausola where
, come questo:
filter a b = blahblah where
foo = bar
bar = baz
baz = bing
Ma coloro tutte apparire come filter.foo
, filter.bar
, ecc
Ho pensato che potessero essere annidate espressioni, ma jankRoulette.select
non ne ha. E ho aggiunto le direttive SCC di fronte a molti di loro senza che nessuno di quei centri di costo salisse in cima.
Poiché la maggior parte del tempo è trascorso in filter.(...)
, mi piacerebbe sapere di cosa si tratta. :)
Come il commento di 'TODO' nel codice che le citazioni di bennofs dovrebbero suggerire, i rapporti di profiler GHC (e praticamente tutto ciò che produce il compilatore) dovrebbero sempre essere accompagnati dal risultato di' ghc --version'. – dfeuer
Grazie per il promemoria! Per i posteri, ho in esecuzione The Glorious Glasgow Haskell Compilation System, versione 7.8.1. – alltom