haskell प्रोफाइलिंग उच्च प्रदर्शन हास्केल कोड



assembly profiling (1)

आप लिनक्स परफ घटनाओं का उपयोग कर सकते हैं: https://ghc.haskell.org/trac/ghc/wiki/Debugging/LowLevelProfiling/Perf

यह आपको एक आउटपुट देगा जो इस तरह दिखता है:

# Samples: 9161149923
#
# Overhead  Command      Shared Object  Symbol
# ........  .......  .................  ......
#
    30.65%   queens  queens             [.] s1ql_info
    18.67%   queens  queens             [.] s1qj_info
    12.17%   queens  queens             [.] s1qi_info
     9.94%   queens  queens             [.] s1o9_info
     5.85%   queens  queens             [.] r1nI_info
     5.33%   queens  queens             [.] s1sF_info
     5.18%   queens  queens             [.] s1sG_info
     3.69%   queens  queens             [.] s1oP_info
     1.68%   queens  queens             [.] stg_upd_frame_info
     0.88%   queens  queens             [.] stg_ap_2_upd_info
     0.62%   queens  queens             [.] s1sE_info
     0.56%   queens  [kernel]           [k] read_hpet
     0.39%   queens  queens             [.] stg_ap_p_info
     0.35%    :2030             f76beb  [.] 0x00000000f76beb
     0.31%   queens  queens             [.] s1oD_info
     0.28%  swapper  [kernel]           [k] mwait_idle_with_hints
     0.25%   queens  queens             [.] __stg_gc_enter_1
     0.23%   queens  queens             [.] evacuate
     0.18%  swapper  [kernel]           [k] read_hpet
     0.12%   queens  queens             [.] scavenge_block

यदि आप कोर को संकलित करते समय सहेजते हैं तो आप इन प्रतीकों को कोर में फ़ंक्शंस पर वापस मैप कर सकते हैं।

थोड़ा दर्दनाक, लेकिन आपको अधिक भरोसेमंद परिणाम देता है।

इसे स्वचालित रूप से करने के लिए कुछ काम शुरू हो गया है।

मेरे पास कुछ उच्च प्रदर्शन वाले हास्केल कोड हैं - आंतरिक लूप 6 असेंबली निर्देशों तक संकलित करता है। आंतरिक लूप को कम कुशल होने के लिए संशोधित करने पर प्रदर्शन पर कोई उल्लेखनीय प्रभाव नहीं पड़ता है, यह दर्शाता है कि आंतरिक पाश बाधा नहीं है। हालांकि, जब मैं प्रोफाइलिंग चालू करता हूं, आंतरिक लूप के लिए उत्पन्न असेंबली कोड नाटकीय रूप से कम कुशल हो जाता है, और प्रोफाइलर रिपोर्ट करता है कि आंतरिक पाश 85% समय लेता है।

मुझे संदेह है कि कुछ अनावश्यक रूप से धीमा है, लेकिन जब मैं यह देखने के लिए प्रोफाइलिंग का उपयोग करता हूं, मुझे संदेह है कि प्रोफाइलिंग आंतरिक लूप को धीमा कर देती है जो इसे हावी करती है। समय कहां जा रहा है यह देखने के लिए मैं किस तकनीक का उपयोग कर सकता हूं? एक नमूना प्रोफाइलर अच्छा होगा, अगर कोई हास्केल के लिए अस्तित्व में था।





profiling