2015-03-18 19 views
5

Sto provando a profilare il mio programma con annotazioni SCC (Imposta centro di costo). Qual è il modo migliore per scoprire quanto tempo ci vuole per una monade definita da una dichiarazione do da eseguire? (E 'illegale mettere una dichiarazione SCC in un blocco do.) In altre parole, diciamo che ho:Il modo migliore per allegare "Imposta centro costi" a un Monad (Haskell)

do 
    x <- computeStuff 
    y <- computeStuff 
    return (x + y) 

Come faccio a trovare il tempo totale di esecuzione per i due computeStuff e il x + y (al posto del tempo di costruzione della Monade)?

risposta

3

SCC può essere impostato su qualsiasi espressione. (do { ... }) è un'espressione valida. Così è computeStuff e return (x + y). L'unica cosa che non è un'espressione qui è x <- computeStuff. Tu dici di volere il tempo totale, che intendo significa il tempo totale per l'intero blocco do. Ma puoi mettere SCC ovunque all'interno del blocco do; per esempio, il seguente è perfettamente valido.

computeStuff :: IO Int 
computeStuff = return 0 

test = {-# SCC "total" #-} (
    do 
    x <- {-# SCC "x" #-} computeStuff 
    y <- {-# SCC "y" #-} computeStuff 
    return $ {-# SCC "x+y" #-} (x + y) 
) 
+3

Questo profilo rappresenta l'effettiva * esecuzione * dell'azione anziché solo la * costruzione *, tuttavia? –

Problemi correlati