पर पढ़ा गया है, मुझे परमाणु रूप से 16 बाइट पढ़ने/लिखने की आवश्यकता है। मैं केवल cmpxchg16 का उपयोग करके लेखन करता हूं, जो सभी x64 प्रोसेसर पर उपलब्ध है, सिवाय इसके कि मैं एक अस्पष्ट एएमडी के लिए सोचता हूं।परमाणु 16 बाइट x64 CPUs
अब प्रश्न 16 बाइट मानों को गठबंधन करने के लिए है, केवल cmpxchg16 (जो पूर्ण मेमोरी बाधा की तरह कार्य करता है) का उपयोग करके कभी संशोधित किया गया है, क्या यह 16 बाइट स्थान पढ़ने के लिए संभव है जो आधा पुराना डेटा और आधा नया डेटा है?
जब तक मैं एक एसएसई निर्देश के साथ पढ़ता हूं (इसलिए धागे को पढ़ने के बीच में बाधित नहीं किया जा सकता है) मुझे लगता है कि असंगत डेटा देखने के लिए पढ़ने के लिए यह असंभव है (यहां तक कि मल्टीप्रोसेसर नोमा सिस्टम में)। मुझे लगता है कि यह परमाणु होना चाहिए।
मैं इस धारणा को बना रहा हूं कि जब cmpxchg16 निष्पादित किया जाता है, तो यह 16 बाइटों को परमाणु रूप से संशोधित करता है, न कि अन्य थ्रेडों के बीच पढ़ने के लिए दो 8 बाइट ब्लॉक लिखकर (ईमानदारी से मैं नहीं देखता कि यह कैसे काम कर सकता है अगर यह परमाणु नहीं था।)
क्या मैं सही हूँ? यदि मैं गलत हूं, तो क्या लॉकिंग का उपयोग किए बिना परमाणु 16 बाइट पढ़ने का कोई तरीका है?
नोट: couple similar questions here हैं लेकिन वे उस मामले से निपटते नहीं हैं जहां लेखन केवल cmpxchg16 के साथ किया जाता है, इसलिए मुझे लगता है कि यह एक अलग, अनुत्तरित प्रश्न है।
संपादित करें: असल में मुझे लगता है कि मेरा तर्क दोषपूर्ण था। एक एसएसई लोड निर्देश दो 64 बिट पढ़ने के रूप में निष्पादित किया जा सकता है, और cmpxchg16 को दूसरे प्रोसेसर द्वारा दो पढ़ने के बीच निष्पादित किया जा सकता है।
के रूप में सरल कुछ करने के लिए मूल्यांकन करता है यानी वे परमाणु नहीं हैं। इससे कोई फर्क नहीं पड़ता कि आपके लेखन परमाणु रूप से CMPXCHG16B के साथ किया जाता है। पढ़ना भी परमाणु होना चाहिए या आप असंगत डेटा देख सकते हैं। AFAIK आपकी एकमात्र पसंद सीएमपीएक्सएचजी 16 बी के साथ पढ़ना है। – Timo
ये, मैंने सोचने की गलती की है कि मुझे केवल धागे को पढ़ने के बीच बाधित होने से रोकना है, लेकिन असली बस संचालन अभी भी अंतःस्थापित हो सकता है। – Eloff
पढ़ने पर cmpxchg16b का उपयोग करके उन्हें अस्वीकार्य रूप से धीमा कर दिया जाएगा। लेकिन 25% अधिक मेमोरी का उपयोग करके मैं दिमित्री व्याकोव के हैशैप जैसे सीक्लॉक स्टाइल दृष्टिकोण कर सकता हूं: http://www.1024cores.net/home/downloads – Eloff