2015-03-18 12 views
5

Programımı SCC (Set Cost Center) ek açıklamaları ile profillemeye çalışıyorum. Bir deyim tarafından belirlenen bir monad için ne kadar sürdüğünü bulmanın en iyi yolu nedir?"Maliyet Merkezini Ayarla" yı bir Monad (Haskell) seçeneğine takmanın en iyi yolu

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

Ben iki computeStuff ve x + y (yerine toplam yürütme zamanı nasıl bulabilirim: Başka bir deyişle, bu reklam olduğunu varsayalım (. Bir do bloğunda bir SCC deyimi koymak için geçersiz) Monad inşaat süresi)? Herhangi bir ifadeye SCC'ler ayarlanabilir.

cevap

3

(do { ... }) geçerli bir ifadedir. Yani computeStuff ve return (x + y). Burada bir ifade olmayan tek şey, x <- computeStuff. Toplam süreyi, tüm blok bloğun toplam süresini kastettiğimi anladığımı söylüyorsun. Fakat SCC'leri, blok bloğun herhangi bir yerine yerleştirebilirsiniz; örneğin, aşağıdakiler tamamen geçerlidir.

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

Bu profil yalnızca * yapım * yerine gerçek * yürütme * olacak mı? –