2012-06-27 17 views
11

क्या वहां कोई सी या सी ++ कंपाइलर्स हैं जो volatile चर के लिए "आक्रामक" स्मृति स्थिरता मॉडल लागू करते हैं? "आक्रामक" स्थिरता मॉडल से मेरा मतलब है कि जेनरेट कोड में मेमोरी बाधाओं के साथ सभी volatile चर के साथ सभी लिखते हैं।सी और सी ++ कंपाइलर्स "आक्रामक" अस्थिर अर्थशास्त्र

AFAIK, यह IA64 (Itanium) प्लेटफ़ॉर्म पर सी या सी ++ कंपाइलर्स के लिए पारंपरिक व्यवहार है। X86 के बारे में क्या? क्या वहां कोई कंपाइलर है जो लागू करता है (या लागू करने के लिए कॉन्फ़िगर किया जा सकता है) x86 प्लेटफ़ॉर्म पर volatile चर को संभालने के लिए Itanium- जैसा दृष्टिकोण?

संपादित करें: 2005 वी.एस. (टिप्पणियों को पढ़ने के बाद) उत्पन्न कोड को देख रहा हूँ और मैं कुछ भी है कि स्मृति बाधा के किसी भी प्रकार के समान होगा जब volatile चर तक पहुँचने नहीं दिख रहा। एमईएसआईएफ (इंटेल) और MOESI (एएमडी) कैश प्रोटोकॉल के कारण, एकल-सीपीयू मल्टी-कोर x86 प्लेटफ़ॉर्म पर स्मृति स्थिरता सुनिश्चित करने के लिए यह बिल्कुल ठीक है।

हालांकि, यह एक बहु-सीपीयू एसएमपी x86 मंच पर अपर्याप्त प्रतीत होता है। सीपीयू के बीच मेमोरी स्थिरता सुनिश्चित करने के लिए एक एसएमपी मंच को जेनरेट कोड में मेमोरी बाधाओं की आवश्यकता होगी। मैं क्या खो रहा हूँ? जब माइक्रोसॉफ्ट का दावा है कि वे पहले से ही volatile चर पर अधिग्रहण-रिलीज सेमेन्टिक्स प्राप्त कर चुके हैं तो माइक्रोसॉफ्ट का क्या अर्थ है?

+3

[रेमंड चेन के अनुसार] (https://blogs.msdn.com/b/oldnewthing/archive/2011/04/19/10155452.aspx?Redirected=true) आपको यह व्यवहार VS2005 और नए – Praetorian

+2

के साथ मिलता है @ प्रिटोरियन: [आधिकारिक दस्तावेज़ीकरण के अनुसार] (http://msdn.microsoft.com/en-us/library/12a04hfd.aspx) साथ ही साथ। ; -] – ildjarn

+0

@AndreyT: क्या आप वीसी ++ 2005 या वीसी ++ 2005 एसपी 1 का परीक्षण कर रहे हैं? आईआईआरसी, वीसी ++ 2005 आरटीएम में एक बग था जहां 'अस्थिर' में अपेक्षित अर्थशास्त्र नहीं थे, जिसे एसपी 1 और वीसी ++ 2008+ में तय किया गया था। – ildjarn

उत्तर

2

यह ध्यान दिया जाना चाहिए कि x86 CPUs अन्य भारों के साथ न तो लोड करता है और न ही अन्य स्टोर्स के साथ स्टोर करता है। इस प्रकार, कोई स्पष्ट बाधा आवश्यक नहीं है।

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

+0

क्या यह मल्टी-सीपीयू केस के लिए भी सच है (एकल-सीपीयू मल्टी-कोर केस के विपरीत)? – AnT

+0

@ एंड्रेट, जिस क्रम में बाहरी बस भार को देखता है वह भार निर्देशों के क्रम के समान होता है। दुकानों के लिए भी यही सच है। जैसा कि आपने नोट किया है, कैश प्रोटोकॉल को समेकन सुनिश्चित करता है। दूसरे शब्दों में, यदि सीपीयू 1 स्टोर एस और सीपीयू 2 करता है तो उस स्टोर को उसके लोड एल के साथ देखता है, तो एल के बाद सीपीयू 2 के बाद लोड करता है। एस से पहले सीपीयू 1 द्वारा सभी स्टोर्स देखेंगे और वह, मेरे दोस्त, अधिग्रहण/रिलीज semantics :) – avakar

+0

@ एंड्रेट, मुझे रेंट करने का मतलब नहीं है, लेकिन मेरी इच्छा है कि सी ++ कमेटी ने '' के साथ आने के बजाय "अस्थिरता ने अधिग्रहण/रिलीज किया है" गारंटी मानक बनाया है। – avakar