मैं कई फोरम और एनवीडिया मैनुअल के माध्यम से चला गया लेकिन मुझे समझ में नहीं आया कि __threadfence() और इसका उपयोग क्या है?CUDA __threadfence()
धन्यवाद।
मैं कई फोरम और एनवीडिया मैनुअल के माध्यम से चला गया लेकिन मुझे समझ में नहीं आया कि __threadfence() और इसका उपयोग क्या है?CUDA __threadfence()
धन्यवाद।
आम तौर पर, कोई गारंटी नहीं है कि यदि एक ब्लॉक वैश्विक स्मृति में कुछ लिखता है, तो दूसरा ब्लॉक इसे "देख" देगा। ग्लोबल मेमोरी को लिखने के आदेश के बारे में कोई गारंटी नहीं है, जिसमें जारी किए गए ब्लॉक के अपवाद के साथ।
दो अपवाद भी हैं:
कल्पना कीजिए दिखाई दे रहे हैं, कि एक ब्लॉक कुछ डेटा पैदा करता है, और उसके बाद करने के लिए परमाणु आपरेशन का उपयोग करता है एक ध्वज चिह्नित करें कि डेटा वहां है। लेकिन यह संभव है कि अन्य ब्लॉक ध्वज देखेंगे, लेकिन गलत या अपूर्ण डेटा पढ़ेगा।
__threadfence
फ़ंक्शन वर्तमान थ्रेड स्टाल करता है जब तक कि वैश्विक मेमोरी को लिखने के लिए ग्रिड में अन्य सभी धागे द्वारा दिखाई देने की गारंटी नहीं दी जाती है। तो, अगर आप की तरह कुछ करना:
__threadfence()
यह गारंटी है कि अगर अन्य ब्लॉक झंडा देखता है, यह भी देखेंगे निशान
अतिरिक्त पठन: CUDA प्रोग्रामिंग गाइड, अध्याय B.2.4 और B.5
कैसे __syncthreads(), कि गारंटी नहीं है कि स्मृति ब्लॉक में किसी भी धागा द्वारा पहुँचता ब्लॉक में सभी धागे को दिखाई देगी, करता है के बारे में? –
'__syncthreads()' '__threadfence_block()' से अधिक मजबूत है। '__syncthreads() 'के बाद आपके पास गारंटी है कि बाधा के बाद सभी थ्रेड द्वारा बाधा दिखाई देने से पहले सभी साझा/वैश्विक मेमोरी लिखती हैं। हालांकि, '__syncthreads()' का केवल ब्लॉक पर प्रभाव पड़ता है और विभिन्न ब्लॉक के धागे के बीच कोई गारंटी नहीं दी जाती है। अन्य एसएम से – CygnusX1
एल 1 संग्रहीत डेटा के साथ सुसंगत होगा? या क्या आपको अभी भी वैश्विक स्कोप लोड (एल 1-गैर-कैशबल) निर्दिष्ट करने की आवश्यकता है? – maxbc