GHC 7.0.3 का उपयोग करना, मैं अपने भारी जीसी व्यवहार को पुनः कर सकते हैं:
$ time ./A +RTS -s
%GC time 92.9% (92.9% elapsed)
./A +RTS -s 7.24s user 0.04s system 99% cpu 7.301 total
मैं 10 मिनट खर्च कार्यक्रम के माध्यम से जा रहा है। यहाँ मैं क्या किया, क्रम में है:
- सेट GHC के एच झंडा, जीसी में सीमा में वृद्धि
- खोल
- इनलाइन किए जाने वाले पहली पीढ़ी के आवंटन क्षेत्र को एडजस्ट करना में सुधार चेक
10 गुना गति के परिणामस्वरूप, और जीसी लगभग 45% समय के परिणामस्वरूप।
लिए, GHC का जादू -H
ध्वज का उपयोग कर, हम उस क्रम काफ़ी कम कर सकते हैं:
$ time ./A +RTS -s -H
%GC time 74.3% (75.3% elapsed)
./A +RTS -s -H 2.34s user 0.04s system 99% cpu 2.392 total
बुरा नहीं है!
Tree
नोड्स पर यूएनपीएक्स प्रागम्स कुछ भी नहीं करेंगे, इसलिए उनको हटा दें।
इनलाइन करने update
अधिक क्रम बंद shaves:
./A +RTS -s -H 1.84s user 0.04s system 99% cpu 1.883 total
रूप height
./A +RTS -s -H 1.74s user 0.03s system 99% cpu 1.777 total
इनलाइनिंग करता है तो यह तेजी से है, जबकि, जीसी अभी भी हावी है -, हम आवंटन परीक्षण कर रहे हैं के बाद से सब के बाद ।
./A +RTS -s -A100M 0.74s user 0.09s system 99% cpu 0.826 total
जो, है क्या 10x तेजी से हम शुरू कर दिया,
$ time ./A +RTS -s -A200M
%GC time 45.1% (40.5% elapsed)
./A +RTS -s -A200M 0.71s user 0.16s system 99% cpu 0.872 total
और खुलासा सीमा में वृद्धि, के रूप में JohnL सुझाव दिया एक छोटे से मदद करता है,: एक बात हम कर सकते हैं पहले जनरल आकार में वृद्धि है ? बुरा नहीं।
ghc-gc-tune का उपयोग करके आप -A
और -H
के एक समारोह के रूप में क्रम देख सकते हैं,
दिलचस्प है, सबसे अच्छा चल रहा है कई बार बहुत बड़ी -A
मूल्यों, उदा का उपयोग
$ time ./A +RTS -A500M
./A +RTS -A500M 0.49s user 0.28s system 99% cpu 0.776s
@adamax: यह व्यवहार (रूट पर सबकुछ फिर से बनाना) अपरिवर्तनीय संरचनाओं में आम है, क्या आपने क्रिस ओकासाकी द्वारा शुद्ध रूप से कार्यात्मक डेटा संरचनाएं पढ़ी हैं? http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf उन्होंने इस पर कई कागजात लिखे। –
शायद आप के साथ '+ आरटीएस -s -RTS' अपने कार्यक्रम चलाकर इस की पुष्टि करनी चाहिए के रूप में मैं इस 80% आप जब मैं यह 7.0.1 का उपयोग कर एक त्वरित रन दे दी है की बात नहीं देख सकते हैं, मैं के बारे में 16% समय बिताया देखना जीसी में – ScottWest
@ScottWest: मैं के साथ GHC -O2 -prof --make test.hs यह संकलन और के साथ चलाने के ./test + आरटीएस -s -RTS, यह कहता है% जीसी समय 77.4% (77.4% बीता), कुल समय 8.7 है सेकंड। लेकिन मेरा ghc संस्करण 6.12.1 है। बस ब्याज से बाहर, आपके सिस्टम में कुल समय क्या है? – adamax