हालांकि दोनों प्रदर्शन के मामले में समान हैं, आपको ध्यान रखना चाहिए कि पहले व्यक्ति की अनुशंसा नहीं की जाती है।
कर्नेल के भीतर एक थ्रेड लौटाएं आपके शेष कोड में एक अप्रत्याशित व्यवहार हो सकता है।
अप्रत्याशित व्यवहार से मेरा मतलब है कि किसी भी प्रकार के धागे में समूहित धागे की न्यूनतम इकाई से संबंधित समस्या। उदाहरण के लिए यदि आपके कर्नेल में if/else
ब्लॉक है, तो इस स्थिति को थ्रेड विचलन के रूप में जाना जाता है और सामान्य स्थिति में इसके परिणामस्वरूप थ्रेड शेष निष्क्रिय होते हैं और अन्य कुछ निर्देश निष्पादित करते हैं।
CUDA द्वारा उदाहरण पुस्तक, अध्याय 5, थ्रेड सहयोग:
लेकिन __syncthreads के मामले में(), परिणाम कुछ हद तक दुखद है। CUDA वास्तुकला की गारंटी देता है कि कोई धागा ब्लॉक में हर धागा जब तक __syncthreads() से परे एक निर्देश को आगे बढ़ाएंगे __syncthreads()
इसलिए, यह मुख्य रूप से एक कर्नेल के भीतर धागे तुल्यकालन से संबंधित है निष्पादित किया गया है। आप बहुत अच्छा प्रश्न/इस विषय के बारे में यहाँ उत्तर मिल सकता है: Can I use __syncthreads() after having dropped threads?
मैं अंतिम ध्यान दें, मैं भी उपयोग किया है कि बुरा व्यवहार और कोई समस्या नहीं दिखाई दिया के रूप में है, लेकिन कोई गारंटी नहीं है कि समस्याओं भविष्य में उत्पन्न होने है । यह ऐसा कुछ है जो मैं
दोनों की सिफारिश नहीं करता हूं, दोनों आपको एक ही प्रदर्शन देंगे। – sgarizvi