2010-05-11 8 views
8

जीएचसी में लिखे गए हास्केल प्रोग्राम को प्रोफाइल करते समय, टाइपक्लास कार्यों के नामों को किसी अन्य से एक उदाहरण के कार्यान्वयन को अलग करने के लिए .prof फ़ाइल में उलझा हुआ है। मैं इन नामों को कैसे पता लगा सकता हूं कि यह किस प्रकार का उदाहरण है?जीएचसी प्रोफाइलर आउटपुट

import Data.List (foldl') 

sum' = foldl' (+) 0 

data Fast = Fast 
instance Show Fast where 
    show _ = show $ sum' [1 .. 10] 

data Slow = Slow 
instance Show Slow where 
    show _ = show $ sum' [1 .. 100000000] 

main = putStrLn (show Fast ++ show Slow) 

मैं -prof -auto-all -caf-all साथ संकलन और +RTS -p साथ चलाएँ:

उदाहरण के लिए, मैं निम्नलिखित कार्यक्रम है, जहां प्रकार Fast और Slow दोनों को लागू Show है लगता है। उत्पन्न हो जाता है कि .prof फ़ाइल में, मुझे लगता है कि शीर्ष लागत केन्द्रों हैं:

COST CENTRE     MODULE    %time %alloc 

show_an9      Main     71.0 83.3 
sum'       Main     29.0 16.7 

और पेड़ में, मैं वैसे ही देखते हैं (अप्रासंगिक लाइनों को छोड़ते हुए):

           individual inherited 
COST CENTRE  MODULE  no. entries %time %alloc %time %alloc 

    main   Main   232   1 0.0 0.0 100.0 100.0 
    show_an9  Main   235   1 71.0 83.3 100.0 100.0 
    sum'   Main   236   0 29.0 16.7 29.0 16.7 
    show_anx  Main   233   1 0.0 0.0  0.0 0.0 

मैं कैसे समझ कर बाहर Slow का show का कार्यान्वयन है और Fast नहीं है?

उत्तर

8

नहीं आप नहीं कर सकते। _an9 और _anx भागों यादृच्छिक रूप से जेनरेट किए गए हैं। (जब मैं फिर से संकलन मैं _ane और _anC मिला है।)

आप SCC (सेट लागत केंद्र) pragma इस्तेमाल कर सकते हैं मैन्युअल रूप से एक लागत केंद्र डालने के लिए:

data Fast = Fast 
instance Show Fast where 
    show _ = {-# SCC "show(Fast)" #-} show $ sum' [1 .. 10] 

data Slow = Slow 
instance Show Slow where 
    show _ = {-# SCC "show(Slow)" #-} show $ sum' [1 .. 100000000] 

प्रोफ़ाइल दिखाना चाहिए:

main 
    show_an9 
    show(Slow) 
    sum' 
    show_anx 
    show(Fast) 
संबंधित मुद्दे