मुझे संदेह है कि आपको सीयूडीए के बारे में कुछ गलत धारणाएं हैं और इसका उपयोग कैसे किया जाए, खासकर जब आप "प्रक्रिया" का संदर्भ लें, जब सीयूडीए शब्दावली में, ऐसी कोई बात नहीं है।
अधिकांश सीयूडीए अनुप्रयोगों के लिए, अच्छे प्रदर्शन के लिए दो महत्वपूर्ण चीजें हैं: मेमोरी एक्सेस को अनुकूलित करना और सुनिश्चित करना कि प्रत्येक 'सक्रिय' CUDA थ्रेड एक वार्प में एक ही ऑपरेशन करता है, उसी समय ओपेर सक्रिय धागे के रूप में एक ही ऑपरेशन करता है। इन दोनों ध्वनि की तरह वे आपके आवेदन के लिए महत्वपूर्ण हैं।
अपनी मेमोरी एक्सेस को अनुकूलित करने के लिए, आप यह सुनिश्चित करना चाहते हैं कि वैश्विक मेमोरी से आपका पठन और वैश्विक मेमोरी पर आपके लेखन को समेकित किया गया हो। आप सीयूडीए प्रोग्रामिंग गाइड में इसके बारे में और अधिक पढ़ सकते हैं, लेकिन इसका अनिवार्य रूप से मतलब है, आधा वार में आसन्न थ्रेड को आसन्न स्मृति स्थानों से पढ़ना या लिखना चाहिए। साथ ही, प्रत्येक थ्रेड को एक समय में 4, 8 या 16 बाइट्स को पढ़ना या लिखना चाहिए।
यदि आपकी मेमोरी एक्सेस पैटर्न यादृच्छिक है, तो आपको बनावट मेमोरी का उपयोग करने पर विचार करना पड़ सकता है। जब आपको किसी ब्लॉक में अन्य थ्रेड द्वारा पढ़ी गई स्मृति को संदर्भित करने की आवश्यकता होती है, तो आपको साझा स्मृति का उपयोग करना चाहिए।
आपके मामले में, मुझे यकीन नहीं है कि आपका इनपुट डेटा क्या है, लेकिन आपको कम से कम यह सुनिश्चित करना चाहिए कि आपके लेखन को समेकित किया जाए। आपको अपने पढ़ने को कुशलता से काम करने के लिए शायद कुछ गैर-मामूली प्रयासों का निवेश करना होगा।
दूसरे भाग के लिए, मैं अनुशंसा करता हूं कि प्रत्येक CUDA थ्रेड आपकी आउटपुट छवि में एक पिक्सेल प्रक्रिया करे। इस रणनीति के साथ, आपको अपने कर्नेल में लूप के लिए देखना चाहिए जो प्रति-थ्रेड डेटा के आधार पर लंबे या छोटे निष्पादित करेगा। आपके युद्ध में प्रत्येक धागे को उसी क्रम में समान संख्या में कदम करना चाहिए। इसका एकमात्र अपवाद यह है कि किसी भी वार्प में कुछ धागे होने के लिए कोई वास्तविक प्रदर्शन जुर्माना नहीं होता है, जबकि शेष धागे एक ही ऑपरेशन को एकसाथ करते हैं।
इस प्रकार, मैं प्रत्येक थ्रेड जांच रखने की अनुशंसा करता हूं कि क्या उसका पिक्सेल किसी दिए गए त्रिभुज के अंदर है। यदि नहीं, तो यह कुछ भी नहीं करना चाहिए। यदि ऐसा है, तो उस पिक्सेल के लिए आउटपुट रंग की गणना करनी चाहिए।
इसके अलावा, मैं दृढ़ता से सीयूडीए के बारे में और अधिक पढ़ने की सिफारिश करता हूं क्योंकि ऐसा लगता है कि आप कुछ मूलभूत बुनियादी सिद्धांतों की अच्छी समझ के बिना गहरे अंत में कूद रहे हैं।
मेरी भाषा के बारे में क्षमा करें, अंग्रेजी मेरा मूल नहीं है। तो ग्राफिक्स कार्ड पर प्रसंस्करण के लिए उचित शब्दावली क्या है? ठीक है, मुझे लगता है कि मैं कूडा को बहुत अच्छा समझता हूं, लेकिन हां, मेरे पास समांतर-एल्गोरिदम में ज्ञान की कमी है। मेरा इनपुट क्लिपिंग स्पेस में वर्टेक्स का सेट है, और मुझे त्रिकोण खींचना पड़ा। मुझे लगता है कि एल्गोरिदम जहां हर पिक्सेल को प्रत्येक त्रिभुज की जांच करनी चाहिए वह इष्टतम नहीं होगा। – qba
प्रत्येक पिक्सेल जांच से बचें प्रत्येक त्रिकोण को बीवीएच, केडी-ट्री या आर-ट्री का उपयोग करके अपने त्रिकोणों को विभाजित करके किया जा सकता है। – whatnick