2012-06-29 16 views
7

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

धन्यवाद।

उत्तर

3

कार्यान्वयन स्तर पर, लेनदेन स्मृति कैश परत का हिस्सा है। यह सॉफ़्टवेयर को स्मृति पर कुछ परिचालनों को "कोशिश" करने की अनुमति देता है, और फिर बाद में उन्हें "प्रतिबद्ध" करता है अगर सिस्टम में कोई अन्य मल्टीप्रोसेसर पढ़ने या लिखे गए किसी भी स्मृति को संशोधित नहीं करता है। बहुत समानांतर एसएमपी वातावरण में जहां अधिकतर एक्सेस टकराते नहीं हैं, यह सभी धागे को समान (अत्यधिक दंडित) सिंक्रनाइज़ेशन प्राइमेटिव लॉक करने से तेज़ हो सकता है।

यह एप्लिकेशन प्रोग्रामर का कार्य अधिक कठिन बनाता है, हालांकि, सॉफ़्टवेयर को विफल होने पर लेनदेन को पुनर्प्राप्त करने में सक्षम होना चाहिए (लेनदेन ")।

3

gcc Wiki:

In general, implementations come in two forms: a Software Transactional Memory 
(STM) system uses locks or other standard atomic instructions to do its job. 
A Hardware Transactional Memory (HTM) system uses multi-word synchronization 
operations of the CPU to implement the requirements of the transaction directly 
(e.g., see the Rock processor). Because most HTM systems are likely to be best 
effort facilities (i.e., not all transactions can be executed using HTM), 
practical TM implementations that incorporate HTM also have a STM component 
and are thus termed Hybrid Transactional Memory systems.

23

व्यवहार स्मृति से नहीं बल्कि ताले से लेन-देन का उपयोग कर प्रक्रियाओं है कि समानांतर में निष्पादित सिंक्रनाइज़ करने के लिए और साझा स्मृति की अवधारणा है।

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

लेनदेन संबंधी स्मृति आपको लेनदेन के रूप में कोड के अनुभागों को नामित करने देता है। लेनदेन संबंधी मेमोरी सिस्टम (जिसे हार्डवेयर, सॉफ़्टवेयर या दोनों में कार्यान्वित किया जा सकता है) तो आपको यह गारंटी देने का प्रयास करता है कि किसी भी प्रोग्राम के किसी भी रन जिसमें एकाधिक थ्रेड समानांतर में लेनदेन निष्पादित करते हैं, कार्यक्रम के एक अलग भाग के बराबर होगा लेनदेन सभी एक दूसरे के बाद निष्पादित, कभी भी एक ही समय में नहीं।

लेनदेन स्मृति प्रणाली लेनदेन को समांतर में निष्पादित करने और लेनदेन चर तक पहुंच की निगरानी करके यह करती है। यदि सिस्टम एक ही चर के लिए दो लेन-देन की पहुंच के बीच एक संघर्ष का पता लगाता है, तो इससे उनमें से एक लेनदेन की शुरुआत में "रोलबैक" निरस्त हो जाएगा और इसे "रोलबैक" कर देगा; यह फिर लेनदेन को स्वचालित रूप से पुनरारंभ करेगा, और सिस्टम की समग्र स्थिति इस तरह होगी कि उसने पहले के रन को कभी शुरू नहीं किया था।


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

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

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

हालांकि विभिन्न लेनदेन मेमोरी सिस्टम के बीच बहुत भिन्नता है; मैं यहां काफी अमूर्त और सरलीकृत स्तर पर बोल रहा हूं।

+1

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

+0

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

+0

उन पूर्व शर्त सी के लिए लाइब्रेरी आधारित एसटीएम कार्यान्वयन के बारे में सच नहीं हैं, क्योंकि भाषा एकीकरण के बिना (ए) और (बी) को लागू करने का कोई तरीका नहीं है, और सी के साथ किसी भी तरह से लागू करने के लिए बहुत मुश्किल है। मुझे एचटीएम के बारे में ज्यादा जानकारी नहीं है, लेकिन मेरी समझ यह है कि आपको फिर से सुरक्षा गारंटी देने के लिए भाषा एकीकरण की आवश्यकता होती है, इसलिए सी या असेंबलर से एचटीएम का उपयोग मुफ्त लंच के साथ नहीं आता है, नहीं। – Ben

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