मुझे यकीन है कि golang
जानने वाले सभी को पता है कि blog post यहां।उस विशेष मामले में जीसीओ से जीसीजी धीमा क्यों है?
इसे फिर से पढ़ना, मुझे आश्चर्य हुआ कि के बजाय gccgo
का उपयोग करके गति थोड़ी अधिक बढ़ जाएगी। मेरे सामान्य उपयोग मामले (वैज्ञानिक कम्प्यूटेशंस) में, gccgo
-जनरेटेड बाइनरी go build
-जनरेटेड से हमेशा तेज होती है।
तो, सिर्फ इस फ़ाइल हड़पने: havlak6.go और यह संकलन:
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go
आश्चर्य!
$/usr/bin/time ./havlak6_go
5.45user 0.06system 0:05.54elapsed 99%CPU
$/usr/bin/time ./havlak6_gccgo
11.38user 0.16system 0:11.74elapsed 98%CPU
मैं उत्सुक हूं और जानना चाहता हूं कि "अनुकूलन" कंपाइलर धीमी कोड क्यों उत्पन्न करता है। कोई भाग्य के साथ
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out
:
मैं gccgo
उत्पन्न द्विआधारी पर gprof
का उपयोग करने की कोशिश की
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
कोड वास्तव प्रोफाइल नहीं किया गया है के रूप में आप देख सकते हैं।
बेशक, मैं this पढ़ते हैं, लेकिन जैसा कि आप देख सकते हैं, कार्यक्रम 10+ सेकंड लेता है निष्पादित करने के लिए ... नमूनों की संख्या होना चाहिए> 1000
मैं भी करने की कोशिश की:
rm a.out gmon.out
LDFLAGS='-g -pg' gccgo -g -pg -march=native -Ofast havlak6.go
./a.out
gprof
कोई सफलता न तो।
क्या आप जानते हैं कि क्या गलत है? क्या आपको पता है कि gccgo
क्यों है, इसकी सभी अनुकूलन दिनचर्या gc
से अधिक इस मामले में तेज़ी से विफल हो जाती है?
go
संस्करण: 1.0.2 gcc
संस्करण: 4.7.2
संपादित करें:
ओह, मैं पूरी तरह से भूल गया उल्लेख करने के लिए ... मैं स्पष्ट रूप से gccgo
-generated द्विआधारी पर pprof की कोशिश की। .. यहाँ एक top10
है:
Welcome to pprof! For help, type 'help'.
(pprof) top10
Total: 1143 samples
1143 100.0% 100.0% 1143 100.0% 0x00007fbfb04cf1f4
0 0.0% 100.0% 890 77.9% 0x00007fbfaf81101e
0 0.0% 100.0% 4 0.3% 0x00007fbfaf8deb64
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2faf
0 0.0% 100.0% 3 0.3% 0x00007fbfaf8f2fc5
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fc9
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fd6
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fdf
0 0.0% 100.0% 2 0.2% 0x00007fbfaf8f4a2f
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f4a33
और यही कारण है मैं कुछ और की तलाश में हूँ है।
EDIT2:
ऐसा लगता है के बाद से है कि किसी को बंद करना पड़ा मेरे सवाल करना चाहता है, मैं नीले रंग से बाहर gprof
उपयोग करने का प्रयास नहीं किया: gccgo-उत्पन्न द्विआधारी चल रहा है के तहत वेलग्रिंड लगता https://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ
लोग अभी भी [* विहित प्रोफाइलर रूप gprof में विश्वास करते हैं। *] (Http://stackoverflow.com/a/1779343/23771)। कुछ अंक: 1) gprof उथले कॉल के ढेर के साथ सीपीयू बाध्य कार्यक्रमों के लिए ही उपयोगी है, प्रत्यावर्तन के बिना, जिसके लिए यह सब प्रतीक हैं। 2) संकलक अनुकूलन केवल तंग आंतरिक छोरों या दिनचर्या एक बहुत कहा जाता है, अपने कोड में, है कि खुद को कार्य (स्मृति आवंटन, आदि) की तरह फोन नहीं में एक फर्क पड़ता है। कंपाइलर अनुकूलन सिर्फ सबकुछ तेज़ी से नहीं चलाता है। –
हां, मुझे यह gprof के लिए मिला है। और मैं संकलक अनुकूलन के बारे में आपसे सहमत हूं। हालांकि, मैं ऑप्टिमाइज़ेशन-सक्षम कंपाइलर के साथ या तो खराब प्रदर्शन की अपेक्षा नहीं करता। प्रदर्शन बराबर या बेहतर होना चाहिए। यदि नहीं, तो वहाँ सुधार की गुंजाइश है और मैं समझता हूँ करना चाहते हैं यही कारण है कि :) –
केवल समय मैं कभी भी ऐसा एंड-टू-एंड, संभवतः 10^n बार दोहराया और कहा कि से विभाजित है, और मैं के लिए मत देखो है 3 अंकों से अधिक सटीकता। शोर है और मुझे परवाह नहीं है। फिर मैं इसे तेजी से बनाने के तरीकों की तलाश करने के लिए यादृच्छिक रुकने का उपयोग करता हूं। जब तक कि यह पहले से ही स्पंज की तरह निचोड़ा नहीं गया है, मुझे रास्ता मिलेंगे, और फिर मैं इसे फिर से कर सकता हूं। जब कई चक्र के बाद मैं रिटर्न ह्रासमान मारा, और पीसी मेरी उत्पन्न निर्देश में सबसे अधिक बार है, तो मैं अनुकूलक है, जो यह हो सकता है 10% तेजी से बनाता है पर बारी। Whoopee। –