2012-05-24 7 views
6

मैं सी ++ में लिखी गई क्वांटम यांत्रिकी लाइब्रेरी में हास्केल बाइंडिंग लिखने पर विचार करता हूं (मैं एक सादा सी रैपर लिखूंगा) और CUDA। एक बड़ी बाधा हमेशा सीयूडीए भागों द्वारा उपयोग की जाने वाली जीपीयू मेमोरी होती है। सी ++ में, इसे काफी कुशलता से संभाला जाता है क्योंकि सभी ऑब्जेक्ट्स में स्वचालित मेमोरी प्रबंधन होता है, जैसे ही वे गुंजाइश छोड़ देते हैं। इसके अलावा मैं कॉपी से बचने के लिए सी ++ 11 मूव सेमेन्टिक्स का उपयोग करता हूं, वैसे भी वे हस्केल में वैसे भी आवश्यक नहीं होंगे।एक अपारदर्शी एफएफआई ऑब्जेक्ट को हटाने से पहले मुझे कब तक कचरा संग्रह लेने की उम्मीद करनी चाहिए? क्या इसे किसी भी तरह से गति देना संभव है?

फिर भी मुझे चिंता है कि ऑब्जेक्ट्स कचरे से एकत्रित हास्केल से प्रबंधित होने पर यह आसानी से काम नहीं कर सकता है, और मुझे कभी-कभी उपयोग की जाने वाली वस्तुओं को स्मृति की मेजबानी के लिए माइग्रेट करने के लिए हेरिस्टिक के साथ आने की आवश्यकता हो सकती है (जो कि काफी धीमी हो)। क्या यह डर उचित है या जीएचसी कचरा संग्रह इतना प्रभावी है कि अधिकांश ऑब्जेक्ट्स सी ++ में जितनी जल्दी हो जाएंगे, तब भी जब हास्केल रनटाइम को यह नहीं लगता कि इसे स्मृति पर आर्थिक होना चाहिए? क्या मदद करने के लिए कोई चाल है, या सिग्नल करने के तरीके हैं कि कुछ ऑब्जेक्ट्स बहुत अधिक GPU मेमोरी लेते हैं और जितनी जल्दी हो सके हटा दिया जाना चाहिए?

उत्तर

5

जब भी हास्केल रनटाइम नहीं देखता है तो इसे स्मृति पर आर्थिक होना चाहिए?

यह मुद्दा है: जीएचसी जीसी नहीं जानता कि आपकी विदेशी वस्तुएं कितनी बड़ी हैं, इसलिए वे किसी भी ढेर के दबाव को लागू नहीं करते हैं, और इस प्रकार वे जितनी जल्दी हो सके एकत्र नहीं किए जाते हैं।

आप एक प्रमुख जीसी को मजबूर करने के लिए मैन्युअल रूप से performGC पर कॉल करके इसे कम कर सकते हैं।

+1

मैं कुछ और चुनिंदा होने की उम्मीद कर रहा था, लेकिन इस पर विचार करना पूरी तरह से ठीक होना चाहिए। क्या "प्रमुख" का अर्थ यह है कि इसे लगभग _all_ पहुंच योग्य वस्तुओं को हटा देना चाहिए? – leftaroundabout

+1

एक प्रमुख जीसी सभी पहुंच योग्य वस्तुओं को हटा देगा, क्योंकि यह पुरानी पीढ़ियों को एकत्र करता है (याद रखें कि जीएचसी एक पीढ़ी के कचरा कलेक्टर है)। –

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

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