2009-02-12 13 views
27

मैं उन तरीकों पर विचार कर रहा था कि कार्यात्मक भाषाएं सीधे उनके हार्डवेयर से अधिक बंधी जा सकती हैं और कचरा संग्रह के किसी भी हार्डवेयर कार्यान्वयन के बारे में सोच रही थीं।हार्डवेयर असिस्टेड कचरा संग्रह

यह बातें काफी तेजी लाने के रूप में हार्डवेयर ही परोक्ष बल्कि कुछ पर्यावरण के क्रम से, सभी संग्रह संभाल लेंगे।

क्या यह LISP मशीनों ने किया है? क्या इस विचार में कोई और शोध रहा है? क्या यह भी डोमेन विशिष्ट है?

विचार? आपत्तियों? चर्चा कर।

+1

कचरा ट्रक आता है कि द्वारा मेरे घर ऊपर उठाता है और अपने आप में कर सकते हैं कचरा खाली। क्या वह माना जाएगा? – kenwarner

+0

मुझे आश्चर्य है कि क्या यह पूरे-ओएस जीसी को सक्षम करेगा - कल्पना करें कि कोई प्रक्रिया विभाजन नहीं है (और विखंडन से एक्सटेंशन अपव्यय होकर, और नए आवंटन के लिए आरक्षित रिक्त स्थान वितरित किया गया है)। सॉफ्टवेयर के समय सत्यापन, और प्रतिलिपि के बिना अनुप्रयोगों के बीच वस्तुओं को पारित करने की क्षमता स्थापित करें। मुझे enablers पसंद है। हार्डवेयर सहायता में स्मृति के ठंडे ब्लॉक, साथ ही संदर्भ गणना के चलते सांख्यिकीय माप शामिल हो सकते हैं। – Todd

उत्तर

13

जेनरेशनल कलेक्शन के कारण, मुझे यह कहना होगा कि ट्रेसिंग और प्रतिलिपि जीसी के लिए भारी बाधाएं नहीं हैं।

क्या मदद करेगा, हार्डवेयर-समर्थित रीड बाधाएं हैं जो स्टैक स्कैन करते समय और ढेर को चिह्नित करते समय 'दुनिया को रोकने' की आवश्यकता को दूर करती हैं।

अज़ुल सिस्टम्स ने यह किया है: http://www.azulsystems.com/products/compute_appliance.htm उन्होंने जावाऑन में एक प्रस्तुति दी कि कैसे उनके हार्डवेयर संशोधनों को पूरी तरह से निर्विवाद जीसी के लिए अनुमति दी गई है।

याद किए गए सेटों को ट्रैक रखने के लिए एक और सुधार हार्डवेयर सहायक लेखन बाधाएं होगी।

जेनरेशन जीसी, और जी 1 या कचरा पहले के लिए और भी बहुत कुछ, केवल विभाजन को स्कैन करके स्कैन करने के लिए ढेर की मात्रा को कम करें, और क्रॉस-विभाजन पॉइंटर्स के लिए याद किए गए सेटों की एक सूची को बनाए रखें।

समस्या यह है कि इसका मतलब यह है कि किसी भी समय म्यूटेटर ('असली कार्यक्रम' के लिए फैंसी शब्द) एक सूचक सेट करता है, इसे उचित याद किए गए सेट में भी प्रवेश करना पड़ता है। तो जब आप जीसीइंग नहीं कर रहे हैं तब भी आपके पास (छोटा) ओवरहेड है। यदि आप इसे कम कर सकते हैं, तो आप जीसीइंग के लिए निरंतर विराम के समय और समग्र कार्यक्रम प्रदर्शन दोनों को कम कर देंगे।

+0

azulsystems दिलचस्प –

+0

मैं गलत था देखने के लिए, कचरा पहले स्कैन/एक जीसी लेकिन केवल प्रतियां दौरान पूरे ढेर के निशान (या कॉपी नहीं करता है) एक समय में वर्गों। – runT1ME

+0

Garbagw संग्रह में क्यों रुकें? यह अप्रबंधित स्मृति को अनुकूलित करने में भी मदद कर सकता है। यह स्मृति आवंटित और हटा सकता है। –

0

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

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

+0

क्या 'tude? मैंने बस जो कुछ सोचा था, उस पर अधिक जानकारी के लिए कहा (और यह फायदेमंद क्यों होगा)। क्षमा करें अगर यह कठोर लगता है। मैं बस यह नहीं देखता कि आप हार्डवेयर को क्या करना चाहते हैं-ठीक से बढ़ाना। – jalf

+0

लेकिन जब आप कहते हैं कि "यह चीजों को महत्वपूर्ण रूप से गति देगा", मुझे लगता है कि यह * उचित * पूछने के लिए उचित खेल है। क्या तुम नहीं हो – jalf

+0

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

2

मुझे पूरा यकीन है कि कुछ प्रोटोटाइप मौजूद होना चाहिए। लेकिन हार्डवेयर विशिष्ट विशेषताओं का विकास, और उत्पादन बहुत महंगा है। एमएमयू या टीएलबी को हार्डवेयर स्तर पर लागू करने में काफी समय लगा, जो कार्यान्वित करने में काफी आसान है।

जीसी कुशलतापूर्वक हार्डवेयर स्तर में लागू होने के लिए बहुत बड़ा है।

+3

ओपनजीएल और वर्चुअलाइजेशन जैसी चीजें हार्डवेयर में भी लागू होने के लिए तर्कसंगत रूप से बहुत बड़ी हैं, लेकिन आप * कुछ * हार्डवेयर समर्थन जोड़ सकते हैं जिससे इन्हें वास्तव में तेज़ी से जाना संभव हो जाता है। उन्होंने "हार्डवेयर * सहायता *" कहा, न कि "केवल हार्डवेयर"। – Ken

+0

मैं सुझाव दूंगा कि यदि कोई नरम कोर और बूचर्स लेता है तो एमएमयू हार्डवेयर सहायता जीसी संभव होगा –

+4

तर्क यह है कि आप सटीक उसी एल्गोरिदम को लागू नहीं कर सकते हैं। यह कहने जैसा ही है "आप ऐसी मशीन को कार्यान्वित नहीं कर सकते जो कि इसे लागू कर सके"। इस मामले में ऐसी मशीन पहले से मौजूद है क्योंकि एक सीपीयू ऐसी मशीन है, यह सिर्फ उस विशेष कार्य के लिए अनुकूलित नहीं है। एक काउंटर सरलीकृत संरचनाओं में से एक है जिसे तर्क में लागू किया जा सकता है। शेष नकद, वर्चुअल मेमोरी, और संभवतः डीएमए का संयोजन है। – NoMoreZealots

4

एक स्पष्ट समाधान मेमोरी पॉइंटर्स होना था जो आपके उपलब्ध रैम से बड़े हैं, उदाहरण के लिए, 32 बिट मशीन पर 34 बिट पॉइंटर्स। या 32 बिट मशीन के ऊपरी 8 बिट्स का उपयोग करें जब आपके पास केवल 16 एमबी रैम (2^24) हो। ईटीएच ज्यूरिख में Oberon machines रैम बहुत सस्ता होने तक बहुत सफलता के साथ ऐसी योजना का उपयोग करता था। वह लगभग 1 99 4 था, इसलिए विचार काफी पुराना है।

यह आपको कुछ बिट्स देता है जहां आप ऑब्जेक्ट स्टेटस स्टोर कर सकते हैं (जैसे "यह एक नई वस्तु है" और "मैंने अभी इस ऑब्जेक्ट को छुआ")। जीसी करते समय, "यह नया है" के साथ वस्तुओं को प्राथमिकता दें और "केवल स्पर्श" से बचें।

यह वास्तव में पुनर्जागरण देख सकता है क्योंकि किसी के पास 2^64 बाइट रैम नहीं है (= 2^67 बिट्स; ब्रह्मांड में लगभग 10^80 ~ 2^240 परमाणु हैं, इसलिए हो सकता है कि यह संभव न हो वह रैम कभी)। इसका मतलब है कि आप आजकल मशीनों में कुछ बिट्स का उपयोग कर सकते हैं यदि वीएम ओएस को स्मृति को मैप करने का तरीका बता सकता है।

+0

मुझे लगता है कि मूल ऐप्पल मैक कुछ समान करने के लिए प्रयुक्त होता है: 32 बिट ptrs, लेकिन शीर्ष 8 बिट्स कुछ प्रकार के टैग थे और केवल 24 बिट पते थे।विखंडन से बचने के लिए कुछ चीजों को स्थानांतरित करने की अनुमति थी। उन्हें समय से छुटकारा पाना पड़ा> 16 एमबीटी मशीनें दिखाई दीं! – timday

+0

वास्तव में, ब्रह्मांड में लगभग 10^80 परमाणु हैं, विकिपीडिया के मुताबिक। –

+1

मैंने अपना कैश अपडेट किया है (मेरे सिर में)। –

1

शायद यहां आवश्यक डेटा का सबसे प्रासंगिक टुकड़ा यह है कि कचरा संग्रहण पर कितना समय (सीपीयू समय का प्रतिशत) खर्च किया जा रहा है? यह एक गैर समस्या हो सकती है।

हम इस के बाद जाना है, तो हम पर विचार करना है कि हार्डवेयर "हमारे पीठ के पीछे" स्मृति बेवकूफ बनाना है। मुझे लगता है कि यह आधुनिक प्रवृत्ति में "एक और धागा" होगा। कुछ मेमोरी अनुपलब्ध हो सकती है यदि इसकी जांच की जा रही हो (शायद दोहरी पोर्ट मेमोरी के साथ हल करने योग्य), और निश्चित रूप से यदि एचडब्ल्यूजीसी सामान को स्थानांतरित करने जा रहा है, तो उसे अन्य प्रक्रियाओं को लॉक करना होगा ताकि इससे उनके साथ हस्तक्षेप न हो । और इसे इस तरह से करें जो उपयोग में आर्किटेक्चर और भाषा में फिट बैठता है। तो, हाँ, डोमेन विशिष्ट।

देखो जो अभी दिखाई दिया ... in another post ... जावा के जीसी लॉग को देखते हुए।

+0

"अगर HWGC चारों ओर सामान ले जाने के लिए जा रहा है" - - अच्छी तरह से आप, "चाल" नहीं होगा लेकिन: लेकिन आप एक संरचना करने के लिए एक सूचक और एक सरणी में एक चरित्र के लिए सूचक के बीच अंतर करने के लिए एक रास्ता आवश्यकता होगी बजाय "प्रतिलिपि" ऑपरेशन के दौरान स्रोत स्मृति लिखा जाता है, तो प्रतिलिपि बनाते हैं। – Todd

4

an article on lambda the ultimate यह बताता है कि आपको वास्तव में एक कुशल जीसी के लिए जीसी-जागरूक वर्चुअल मेमोरी मैनेजर की आवश्यकता है, और वीएम मैपिंग ज्यादातर इन दिनों हार्डवेयर द्वारा किया जाता है। यहां आप हैं :)

1

मैं इकट्ठा सबसे बड़ी समस्या यह CPU रजिस्टरों और ढेर है। जीसी के दौरान आपको जो चीजें करना है, वह आपके सिस्टम में सभी पॉइंटर्स को पार करता है, जिसका मतलब है कि ये पॉइंटर्स क्या हैं। यदि इनमें से एक पॉइंटर्स वर्तमान में एक सीपीयू रजिस्टर में है तो आपको उसे भी पार करना होगा। इसी प्रकार यदि आपके पास स्टैक पर पॉइंटर है। इसलिए प्रत्येक स्टैक फ्रेम में कुछ प्रकार का नक्शा होना चाहिए कि एक पॉइंटर क्या है और क्या नहीं है, और इससे पहले कि आप कोई भी जीसी ट्रैवर्सिंग करते हैं, आपको किसी भी पॉइंटर्स को स्मृति में प्राप्त करना होगा।

आप भी बंद और निरंतरता के साथ समस्याओं में भाग लेते हैं, क्योंकि अचानक आपका ढेर एक साधारण लिफो संरचना बनता है।

स्पष्ट तरीका सीपीयू स्टैक या रजिस्टरों में पॉइंटर्स को कभी भी पकड़ना नहीं है। इसके बजाय आपके पास प्रत्येक स्टैक फ्रेम को अपने पूर्ववर्ती को इंगित करने वाली ऑब्जेक्ट के रूप में है। लेकिन यह प्रदर्शन को मारता है।

+0

ठीक है, यह कहकर चला जाता है कि जीसी को प्रोसेसर में एकीकृत करना होगा और एमएमयू और कैश सिस्टम के साथ संयोजन में काम करना होगा। – NoMoreZealots

2

पुराने स्पार्क सिस्टम ने स्मृति (33 बिट्स) को टैग किया था जो पते को चिह्नित करने के लिए उपयोग करने योग्य था। आज फिट नहीं है?

यह उनके एलआईएसपी विरासत आईआईआरसी से आया था।

मेरे दोस्तों में से एक ने एक पीढ़ी जीसी बनाया जो प्राइमेटिव्स से थोड़ा चोरी करके टैग किया गया। यह बेहतर काम किया।

तो, हाँ यह किया जा सकता है, लेकिन nodody परेशान बातें अब और टैगिंग।

हार्डवेयर सहायता प्रदान की पीढ़ी जीसी के बारे में runT1mes 'टिप्पणी पढ़ने लायक हैं।

दिया एक पर्याप्त बड़ा गेट सरणी (शिखर-तृतीय दिमाग में स्प्रिंग्स) एक बेहतर MMU कि समर्थित जीसी गतिविधियों संभव हो जाएगा।

4

आप एक स्नातक छात्र रहे हैं, मेरे लिए एक अनुसंधान अनुदान के लिए एक अच्छा विषय की तरह लगता है। FPGA डिजाइन और कंप्यूटर में देखो कोई वक्तव्य नहीं http://www.opencores.org/

कचरा संग्रहण के लिए एक पृष्ठभूमि कार्य के रूप में लागू किया जा सकता पर मुक्त प्रोसेसर डिजाइन availiable बहुत सारे हैं, यह पहले से ही समानांतर आपरेशन के लिए इरादा है।

पीट

+0

एफपीजीए महान हैं। अंतर्निहित एफपीजीए इकाइयों के साथ नए रासबेरी पी क्लोन हैं जिन्हें प्रोग्राम किया जा सकता है। –

1

एमआईटी में कई महान दिमाग 80 के दशक में वापस SCHEME-79 चिप, जो सीधे योजना की एक बोली में व्याख्या बनाया, लिस्प DSLs साथ डिजाइन किया गया था, और हार्डवेयर-जी सी में बनाया गया था।

Scheme-79 die

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