2012-04-13 15 views
11

मैं रिपै का उपयोग करने वाले प्रोग्राम को संकलित करने का प्रयास करने के लिए जीएचसी 7.4.1 का उपयोग कर रहा हूं। लेकिन संकलन के माध्यम से भाग्य, मैं स्मृति से बाहर चला रहा हूँ। ghc -v के साथ, मैं देख सकता हूं कि यह SpecConstr चरण में फंस गया है।मैं जीएचसी में SpecConstr की मदद कैसे कर सकता हूं?

SpecConstr जीएचसी के कोर-टू-कोर रूपांतरणों में से एक है। साइमन पेटन जोन्स का एक अच्छा वर्णन here है, और कुछ कोड here है, लेकिन यह मेरे लिए बहुत धीमी गति से चल रहा है क्योंकि मैं जीएचसी के आंतरिक कार्यों से परिचित नहीं हूं।

मैं किसी भी तरह से कंपाइलर की मदद करने में सक्षम होना चाहता हूं - क्या यह कहने का एक तरीका है कि यह कहां फंस रहा है? वैकल्पिक रूप से, क्या इस चरण में स्मृति उपयोग को सीमित करने का कोई तरीका है जब तक कि मैं एक बड़ी मशीन पर पुन: संकलित नहीं कर सकता?

धन्यवाद, चाड

+0

एक सनकी पर, मैंने 'computeUnboxedS' हटा दिया, और अब यह ठीक से संकलित करता है। अभी भी कोई विचार नहीं, क्यों। –

+0

यदि आप अपना कोड पोस्ट करते हैं, तो हम आपको बता सकते हैं कि क्यों। दृष्टि अदृश्य, मैं अनुमान लगाने जा रहा हूं कि आपने ट्यूटोनिक मैट्रिक्स को दबाया है, और जेफरी ट्यूब उच्च-हवादार थे। – rampion

+0

धन्यवाद, दुर्भाग्य से मैं पूरी चीज पोस्ट नहीं कर सकता, और यह स्पष्ट नहीं है कि कम से कम मामले को कैसे डिस्टिल करना है। मैंने आशा की थी कि स्पेककॉन्स्ट के किस हिस्से में ब्लाउप हो रहा है, यह ट्रैक करने के लिए एक सामान्य प्रक्रिया हो सकती है। हो सकता है कि जीएचसी खुद को प्रोफाइलिंग करें, या ऐसा कुछ। –

उत्तर

6

आप झंडे -fspec-constr-threshold=n और -fspec-constr-count=n साथ संकलन की कोशिश कर सकते हैं। अधिक जानकारी GHC docs में हैं। 7.4.1 के साथ, गिनती के लिए दहलीज n = 200 के लिए डिफ़ॉल्ट = n = 3 हैं।

कोड देखने के बिना, हालांकि, यह संभव है कि आप this bug में चल रहे हों। यदि उपर्युक्त विकल्प पर्याप्त नहीं हैं तो आपको किस मामले में specconstr पास को पूरी तरह से अक्षम करने की आवश्यकता हो सकती है।

+0

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

4

जॉन एल के उत्तर के अलावा, सुनिश्चित करें कि आप ध्वज -fno-liberate-case के साथ संकलित करें। मुक्त मामला परिवर्तन कोड-ब्लाउप का कारण बनता है, जो तब SpecConstr की नौकरी को कठिन बनाता है।

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