2013-02-25 7 views
10

के लिए गैर-खिलौना सॉफ्टवेयर लेनदेन संबंधी मेमोरी मैं विश्वविद्यालय पाठ्यक्रम के लिए 1 या 2 निर्देशित प्रयोगशालाओं के माध्यम से सॉफ्टवेयर लेनदेन संबंधी मेमोरी के उपयोग को पढ़ाने की संभावना के बारे में सोच रहा हूं। मुझे केवल हास्केल के एसटीएम के बारे में पता है, लेकिन पाठ्यक्रम के छात्रों ने शायद इसके बारे में कभी भी एक शब्द नहीं सुना है।सी या जावा

मुझे पहले से ही ऐसे पुस्तकालयों की कुछ सूचियां ऑनलाइन मिली हैं या अन्य प्रश्नों में (उदाहरण के लिए, http://en.wikipedia.org/wiki/Software_transactional_memory#C.2FC.2B.2B)। जब आप इसे पढ़ते हैं, तो मैं उन्हें जांच रहा हूं, लेकिन उनमें से कई को बहुत अच्छा प्रलेखन प्रतीत नहीं होता है (अधिकांश शोध प्रोटोटाइप केवल कागजात में वर्णित रूप से वर्णित हैं, और मैं कुछ और अधिक उपयोग और अच्छी तरह से प्रलेखित के बारे में सिखाऊंगा)। इसके अलावा, विकिपीडिया द्वारा प्रदान किए गए कई लिंक खतरे में हैं।

यह निष्कर्ष निकालने के लिए, वहाँ एसटीएम औद्योगिक परियोजनाओं के लिए उद्देश्य से कार्यान्वयन (या कम से कम गैर खिलौना लोगों पर, गुणवत्ता का एक निश्चित स्तर को सुनिश्चित करने के) कर रहे हैं और अच्छी तरह से (छात्रों के लिए कुछ अच्छे संकेत देने के लिए) दस्तावेज?

संपादित: मैं निश्चित रूप से शिक्षक नहीं हूँ, मैं सिर्फ उसे प्रयोगशालाओं के साथ मदद। बेशक छात्रों को समवर्ती और वितरित एल्गोरिदम की मूल बातें सिखाई जाएंगी। पाठ्यक्रम के अंत में कुछ अलग प्रस्ताव देने का यह एक विचार था।

+3

ठीक है, कृपया टिप्पणी करें कि बंद करने और बंद करने का प्रस्ताव देने के बजाय प्रश्न को कैसे सुधारें। बिंदु काफी सरल है: मुझे एक सरल और अच्छी तरह से प्रलेखित कार्यान्वयन की आवश्यकता है। –

+6

सहमत हैं। अज्ञात डाउनवॉटर और closers से कुछ भी बुरा नहीं है। – Joe

+0

मैंने डाउनवोट नहीं किया लेकिन केवल अनुमान लगा सकता है कि नीचे/बंद वोट था क्योंकि सवाल शोध की कमी पर संकेत देता है। गुगलिंग "सॉफ्टवेयर ट्रांजैक्शनल मेमोरी" द्वारा लौटा पहला लिंक सी विकिपीडिया पृष्ठ है जो सी, जावा और कई अन्य भाषाओं में कार्यान्वयन से जुड़ा हुआ है। – simonc

उत्तर

5

उत्पादन गुणवत्ता वाले STM-पुस्तकालय एक शिक्षण उपकरण के रूप में का इरादा नहीं है, नहीं भी "सबसे अच्छा अभ्यास" के रूप में। किसी भी कॉलेज/विश्वविद्यालय पाठ्यक्रम के लिए सीखने के लायक क्या है कोड के 1%; शेष 99% nitty-gritty प्लेटफ़ॉर्म-निर्भर आंतरिक कोने-मामले है। दिलचस्प है कि 1% किसी भी तरह से हाइलाइट नहीं किया गया है, इसलिए आपके पास इसे खोजने का कोई तरीका नहीं है।

मैं कॉलेज/यूनिवर्सिटी कोर्स के लिए क्या सलाह देता हूं (चाहे कोई भी प्रारंभिक या उन्नत हो) एसटीएम-बिल्डिंगब्लॉक को स्वयं लागू करना है (और केवल 1 मंच के लिए)।

समस्याओं शुरू करने से प्रारंभ: संगामिति, कैश ...

फिर परमाणु सहायकों हमारे पास परिचय:, बाड़ cas/cmpxchg।

फिर अपने छात्रों के साथ उदाहरण बनाएं, पहले आसान, फिर कठिन और अधिक जटिल।

+1

मैं आदेश एक विस्तृत समुदाय और पीछे प्रलेखन के साथ कुछ है करने के लिए उत्पादन गुणवत्ता वाले कार्यान्वयन के लिए खोज रहा था, लेकिन मैं उन्हें इस तरह के एक ढांचे की एक विस्तृत समझ, क्रम में सिर्फ 1% में बुनियादी एसटीएम तंत्र को देखने के लिए देने का इरादा नहीं था कार्रवाई। आपका प्रस्ताव हालांकि मेरे विचार से काफी बेहतर है। मुझे लगता है कि मैं इसके लिए शिक्षक के पास जाने का प्रस्ताव दूंगा, और देख सकता हूं कि छात्रों को बुनियादी एसटीएम तंत्र लागू करने के लिए कुछ प्रयोगशालाओं को समर्पित करने के साथ ठीक है या नहीं। आपका बहुत बहुत धन्यवाद। –

3

समस्याओं शुरू करने से प्रारंभ: संगामिति, कैश ...

eznme से पर अग्रणी, कुछ अच्छी समस्याओं है कि मैं concurrency के लिए विश्वविद्यालय में जबकि कवर किया।

  • Dining philosophers problem

    कंप्यूटर विज्ञान में, भोजन दार्शनिकों समस्या अक्सर उन्हें हल करने के लिए तुल्यकालन मुद्दों और तकनीक वर्णन करने के लिए समवर्ती एल्गोरिथ्म डिजाइन में इस्तेमाल एक उदाहरण समस्या है।

    dining phil

here से ही कार्यान्वयन, जे मैगी और जे क्रेमर द्वारा उपयोग करना, और मॉनिटर का उपयोग कर समस्या को सुलझाने।

अधिकांश साझा मेमोरी अनुप्रयोग स्ट्रिंग्स की तुलना में Integers के साथ अधिक कुशल हैं (जावा के लिए AtomicInteger कक्षा के कारण)। इसलिए मेरी राय में shared memory प्रदर्शित करने का सबसे अच्छा तरीका छात्रों को एक ऐसे एप्लिकेशन को लिखना है जो प्राइम संख्याओं की गणना करने के लिए threadpool का उपयोग करता है, या कुछ integral की गणना करने के लिए।

या धागे और साझा स्मृति का एक अच्छा उदाहरण Producer-consumer problem है।

निर्माता-उपभोक्ता समस्या (बाध्य-बफर समस्या के रूप में भी जाना जाता है) एक बहु-प्रक्रिया सिंक्रनाइज़ेशन समस्या का एक उत्कृष्ट उदाहरण है।

producer http://cse.csusb.edu/tong/courses/cs460/images/producer-consumer.gif

कार्यान्वयन पाया here, वहाँ भी सॉफ्टवेयर इंग्लैंड Jenz Dietrich में प्रोफेसर से Massey से एक कार्यान्वयन है।

वितरित एल्गोरिदम MapReduce और Hadoop अत्यधिक दस्तावेज वितरित डेटा संरचनाओं के लिए हैं। और वितरित प्रोग्रामिंग पुस्तकालयों के लिए MPI (Message Passing Interface) और OpenMP (या Pragma सी ++ के लिए) में देखें। parallel में भी Dijkstra shortest path algorithm के कार्यान्वयन भी हैं।

+0

धन्यवाद, मैंने संदर्भ को स्पष्ट करने के लिए प्रश्न संपादित किया। पाठ्यक्रम समवर्ती और वितरित प्रोग्रामिंग/एल्गोरिदम के बारे में है, और मैं शिक्षक नहीं हूं। सबक और प्रयोगशालाओं के दौरान विषय पर बहुत सारी पृष्ठभूमि होगी। लेनदेन के बारे में यह केवल एक अतिरिक्त होगा: मैं बात करने के लिए और अधिक उदाहरण खोज नहीं रहा हूं, इसलिए मुझे लगता है कि eznme का प्रस्ताव सबसे अच्छा फिट हो सकता है। –

+0

@ रिकार्डो ठीक है, यह ठीक है। समेकन और परमाणु लेनदेन सीखते समय मुझे दिखाए गए उदाहरणों को साझा करना। – Killrawr

+0

@ रिकार्डो ने वितरित एल्गोरिदम/डेटा संरचनाओं और पुस्तकालयों के लिंक के लिए उत्तर अपडेट किया। – Killrawr

1

आज एसटीएम करने के तीन अच्छे तरीके हैं।

पहला तरीका जीसीसी का उपयोग करना और सी या सी ++ में टीएम करना है। जीसीसी 4.7 के रूप में, लेन-देन की स्मृति -फ्नू-टीएम ध्वज के माध्यम से समर्थित है। जीसीसी रखरखाव करने वालों ने बहुत काम किया है, और 4.9 (ट्रंक) शाखा के रूप में, आप हार्डवेयर टीएम (उदाहरण के लिए, इंटेल हैसवेल टीएसएक्स) का भी उपयोग कर सकते हैं। http://justingottschlich.com/tm-specification-for-c-v-1-1/ पर टीएम को इंटरफ़ेस के लिए एक ड्राफ्ट विनिर्देशन है, जो बहुत दर्दनाक नहीं है। आप टीएम समुदाय से जीसीसी के टीएम के उपयोग के मामलों को भी ढूंढ सकते हैं (उदाहरण के लिए, ट्रांजैक्ट 2014: http://transact2014.cse.lehigh.edu से एप्लिकेशन ट्रैक पेपर देखें)।

कार्यान्वयन स्वयं थोड़ा जटिल है, लेकिन यह सही होने के लिए होता है। उन चीजों पर बहुत सारे साहित्य हैं जो गलत हो सकते हैं, खासतौर पर एक प्रकार की असुरक्षित भाषा जैसे सी या सी ++ में। जीसीसी इन सभी चीजों को सही बनाता है। वास्तव में।

दूसरा तरीका जावा का उपयोग करना है। आप या तो DeuceSTM का उपयोग कर सकते हैं, जो विस्तार करना बहुत आसान है (टाइप सुरक्षा सुरक्षा को टीएम कार्यान्वयन को बहुत आसान बनाता है!), या एसटीएम के लिए स्कैला की अक्का लाइब्रेरी का उपयोग करें। मैं ड्यूस पसंद करता हूं, क्योंकि इसका उपयोग करना आसान और उपयोग करना आसान है (आप बस एटॉमिक के रूप में एक विधि को एनोटेट करते हैं, और ड्यूस के जावा एजेंट बाकी करते हैं)।

तीसरा तरीका स्कैला का उपयोग करना है। मैंने इस जगह में बहुत कुछ नहीं किया है, लेकिन शोधकर्ता अक्का से प्यार करते हैं। यदि आप समांतर/वितरित कक्षा से संबद्ध हैं, तो आप पहले ही स्कैला का उपयोग कर सकते हैं।

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