2012-05-18 9 views
8

पर परमाणु युगल/फ्लोट्स प्रलेखन के अनुसार, परमाणु एक अभिन्न प्रकार, गणना प्रकार, या एक सूचक प्रकार का टी का समर्थन करता है। क्या इंटेल टीबीबी समर्थन आधिकारिक तौर पर तैरता/दोगुना करता है? मैंने कुछ पैच here और राफ Schietekat here द्वारा देखा है, जो नवीनतम 4.0 रिलीज में शामिल हो सकता है/शायद नहीं। पैच से मैंने पढ़ा है, मैंने देखा कि एकमात्र बड़ा अंतर पूर्णांक प्रकार से फ्लोट/डबल तक reinterpret_cast का जोड़ा था। अगर कोई इसे स्पष्ट कर सकता है, तो मैं इसकी सराहना करता हूं। धन्यवाद!इंटेल टीबीबी

उत्तर

1

आप 64 और 32 बिट परमाणु पूर्णांक के शीर्ष पर फ़्लोटिंग-पॉइंट नंबर बिल्डिंग के लिए आसानी से समर्थन जोड़ सकते हैं। परमाणु लोड/स्टोर/एक्सचेंज को reinterpret_cast का उपयोग करके सीधे रैपर के रूप में कार्यान्वित किया जा सकता है, परमाणु अंकगणितीय संचालन परमाणु तुलना विनिमय के साथ एक लूप का उपयोग करके कार्यान्वित किया जा सकता है।

1

सी ++ 11 परमाणु फ्लोट और युगल का समर्थन करता है। अंकगणितीय कार्यों जैसे std::atomic_fetch_add केवल अभिन्न प्रकारों के लिए समर्थित हैं, हालांकि।

यदि आपके पास सी ++ 11 कंपाइलर है, तो मैं std::atomic पर स्विच करने की अनुशंसा करता हूं ताकि आपको अनियंत्रित व्यवहार पर भरोसा न करें।

+1

यह भी ध्यान देने योग्य है कि अंकगणितीय कार्यों को आसानी से और कुशलतापूर्वक 'std :: atomic' के साथ अनुकरण किया जा सकता है। –

+0

दिलचस्प। यह करने के लिए सबसे अच्छा तरीका क्या है? क्या यह एक तुलना-और-स्वैप पाश है? (वर्तमान मान प्राप्त करें और इसे नए नतीजे से स्वैप करने का प्रयास करें। अगर यह विफल हो जाता है क्योंकि मान बदल दिया गया था, पुनः प्रयास करें।) –

+0

हाँ, यही तरीका है। –

0

test_atomic.cpp में गैर-अभिन्न प्रकारों के लिए परीक्षण 2008 में वापस जोड़ा गया था (राफ के साथ चर्चा के समय के तुरंत बाद)। इस प्रकार प्रश्न के समय से भी पहले, टीबीबी फ्लोट & डबल परमाणुओं का समर्थन करता है (हालांकि fetch_and_store तक सीमित है और तुलना_and_exchange केवल पढ़ने-संशोधित-लिखने के लिए ओप)।

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