2013-01-15 9 views
13

मैं MArrays के लिए sorting library पर काम कर रहा हूं। गति महत्वपूर्ण है, इसलिए मैं जितना संभव हो इसे अनुकूलित करना चाहता हूं।गति के लिए मैरे फ़ंक्शन को सही ढंग से अनुकूलित कैसे करें?

वर्तमान में, मैं बस INLINE सॉर्टिंग फ़ंक्शन। गैर-अनुकूलित कोड की तुलना में यह 10 गुना से अधिक कोड को गति देता है। हालांकि यह कई जगहों पर फ़ंक्शंस का उपयोग होने पर कोड आकार को आसानी से विस्फोट कर सकता है, और संकलन धीमा कर देता है।

एकमात्र अन्य विकल्प मैरे के सभी मौजूदा उदाहरणों के लिए कार्यों को विशेष रूप से प्रदर्शित करना प्रतीत होता है। यह परिणामस्वरूप कोड को भी बढ़ाता है, लेकिन केवल एक स्थिर कारक द्वारा, जो इस बात पर निर्भर नहीं करता कि फ़ंक्शंस का कितनी बार उपयोग किया जाता है। सवाल यह है, क्या यह संभव है कि मैरे के नए उदाहरण सामने आए? या हैरेल इतना विशेष और हैस्केल के आंतरिक से बंधे हैं ताकि मैं सुनिश्चित हो सकूं कि किसी अन्य मॉड्यूल द्वारा कोई नया उदाहरण परिभाषित नहीं किया जा सकता है?

+0

ऐसा लगता है कि आप इनलाइनिंग प्रोगमा का उपयोग करना चाहते हैं: http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@ जॉन मैंने सोचा , लेकिन मुझे डर है कि यह केवल अतिरिक्त विशेषताओं के साथ काम करेगा, क्योंकि सॉर्टिंग फ़ंक्शन शायद जीएचसी के निर्णय द्वारा उल्लिखित होने के लिए बहुत बड़े हैं। लेकिन यह संयोजन एक उचित समाधान हो सकता है - सभी मौजूदा उदाहरणों के लिए विशेषज्ञता और उपयोगकर्ताओं को घोषित करने वाले किसी भी नए 'मेर्रे' उदाहरणों के लिए विशेषज्ञता देने के लिए सूचित करना। –

+0

यदि प्रदर्शन वास्तव में महत्वपूर्ण है, तो इसके बजाय वेक्टर या रेपा का उपयोग करने पर विचार करें। –

उत्तर

3

ऐसा लगता है कि INLINE प्रगामा का उपयोग करने का सबसे अच्छा तरीका है। sortvector-algorithmsuses it too से।

संबंधित मुद्दे