c++ - CUDA conditional thread synchronization -
CUDA प्रोग्रामिंग गाइड बताता है कि
__ सिंकट्रेड () को सशर्त कोड में अनुमति है, लेकिन केवल यदि सशर्त संपूर्ण धागे ब्लॉक में समान रूप से मूल्यांकन करता है, अन्यथा कोड निष्पादन अनचाही दुष्प्रभावों को लटका या उत्पादन करने की संभावना है।
इसलिए यदि मुझे एक ब्लॉक में सशर्त शाखाओं के साथ धागे को सिंक्रनाइज़ करने की आवश्यकता है , जिनमें से कुछ धागे शाखा को नहीं ले सकते हैं या नहीं कर सकते हैं जिसमें
__ सिंकट्रेड () कॉल शामिल है, इसका क्या मतलब है कि यह काम नहीं करेगा?
मैं सोच रहा हूं कि वहां सभी प्रकार के मामलों में हो सकता है जिसमें आपको ऐसा करने की आवश्यकता हो सकती है; उदाहरण के लिए, यदि आपके पास बाइनरी मुखौटा है और पिक्सल पर एक निश्चित ऑपरेशन को सशर्त रूप से लागू करने की आवश्यकता है कहें,
यदि (मुखौटा (एक्स, वाई)! = 0) तब कोड को निष्पादित करें जिसमें
__ सिंकट्रेड () शामिल है, अन्यथा कुछ भी नहीं। यह कैसे किया जाएगा?
यदि आपको इस मार्ग पर जाने की आवश्यकता है तो आप शरीर को दो चरणों में विभाजित कर सकते हैं :
यदि (शर्त) {// सिंक करने से पहले कोड} __सिंक्टट्रेड (); यदि (स्थिति) // या कोई झंडा याद है या जो कुछ भी (// कोड सिंक के बाद)
वैकल्पिक रूप से आप कुछ परिचालन को अक्षम करने वाले ध्वज को सेट करने के लिए शर्त का उपयोग कर सकते हैं, उदाहरण के लिए यदि आप ' फिर से डेल्टा अपडेट की गणना कर सकते हैं:
// * ALL * एक डेल्टा अपडेट की गणना करता है, उन थ्रेड्स जो हालत में असफल हो जाते थे / बस कचरा गणना करते हैं // इसमें सिंकट्रेड्स शामिल हो सकते हैं यदि (शर्त) // अपडेट अपडेट करें
Comments
Post a Comment