"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > `std::atomic`\ का स्टोर x86 पर अनुक्रमिक स्थिरता के लिए XCHG का उपयोग क्यों करता है?

`std::atomic`\ का स्टोर x86 पर अनुक्रमिक स्थिरता के लिए XCHG का उपयोग क्यों करता है?

2024-11-18 को प्रकाशित
ब्राउज़ करें:815

Why does `std::atomic`\'s store use XCHG for sequential consistency on x86?

क्यों std::atomic का स्टोर अनुक्रमिक स्थिरता के लिए XCHG को नियोजित करता है

x86 और x86_64 आर्किटेक्चर के लिए std::atomic के संदर्भ में, a अनुक्रमिक स्थिरता (std::memory_order_seq_cst) के साथ स्टोर संचालन अनुक्रमिक-रिलीज़ सिमेंटिक्स प्राप्त करने की तकनीक के रूप में मेमोरी बैरियर के साथ एक साधारण स्टोर के बजाय XCHG को नियोजित करता है।

अनुक्रमिक स्थिरता और xchg

अनुक्रमिक स्थिरता यह तय करती है कि सभी मेमोरी ऑपरेशन कुछ अनुक्रमिक क्रम में निष्पादित होते प्रतीत होते हैं, और यह क्रम सभी थ्रेड्स के लिए समान है। XCHG, एक x86 निर्देश जो परमाणु रूप से दो ऑपरेंड के मूल्यों का आदान-प्रदान करता है, स्वाभाविक रूप से इस अनुक्रमिक स्थिरता आवश्यकता को पूरा करता है। राइट ऑपरेशन करने के लिए XCHG का उपयोग करके, std::atomic यह सुनिश्चित करता है कि स्टोर निष्पादन के क्रम में एक विशिष्ट बिंदु पर सभी थ्रेड्स के लिए विश्व स्तर पर दृश्यमान हो जाता है, बाद के ऑपरेशनों के साथ पुन: व्यवस्थित होने से रोकता है।

mov- स्टोर एमफेंस बनाम एक्ससीएचजी

जबकि मेमोरी फेंस (जैसे एमफेंस) के बाद एक साधारण मूव-स्टोर सैद्धांतिक रूप से रिलीज सिमेंटिक्स प्रदान कर सकता है, यह अनुक्रमिक-रिलीज स्टोर संचालन के लिए पर्याप्त नहीं है। एमएफईएनसीई, एक मेमोरी बाड़ निर्देश जो मेमोरी बैरियर स्थापित करता है, यह सुनिश्चित करता है कि आगे बढ़ने से पहले पिछले लेखन ऑपरेशन मेमोरी के लिए प्रतिबद्ध हैं। हालाँकि, यह रिलीज़ स्टोर से पहले बाद के लोड संचालन को फिर से व्यवस्थित होने से नहीं रोकता है। स्टोर संचालन में प्रदर्शन ट्रेड-ऑफ शामिल होता है। परमाणु ऑपरेशन के साथ। ]कार्यान्वयन विवरण

व्यवहार में, अनुक्रमिक स्थिरता के साथ std::atomic के स्टोर का विशिष्ट कार्यान्वयन कंपाइलर और हार्डवेयर आर्किटेक्चर के आधार पर भिन्न होता है।

GCC/ क्लैंग:
    मूल रूप से mov-store mfence का उपयोग किया गया था लेकिन हाल ही में seq-cst स्टोर्स के लिए XCHG का उपयोग करना शुरू कर दिया है।
  • इंटेल कंपाइलर:
  • seq-cst स्टोर्स के लिए XCHG का उपयोग करता है।

Microsoft Visual C: Seq-cst स्टोर्स के लिए XCHG का भी उपयोग करता है।

    इम्प्लिसिट एक्वायर फेंस
  • यह कथन कि x86 दुकानों में एक अंतर्निहित अधिग्रहण बाड़ गलत है। x86 पर स्टोर में रिलीज़ सिमेंटिक्स है, अधिग्रहण सिमेंटिक्स नहीं। एक्वायर सिमेंटिक्स को आम तौर पर मेमोरी बैरियर जैसे एमफेंस या std::memory_order_acquire सिमेंटिक्स के साथ एटॉमिक रीड ऑपरेशंस का उपयोग करके लागू किया जाता है।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3