/ / संकल्प के लिए cuda कर्नेल कैसे लिखें? - cuda, nvidia, gpgpu, convolution

संकल्प के लिए cuda कर्नेल कैसे लिखें? - cuda, nvidia, gpgpu, convolution

मैं कूडा में पूरी तरह से नया हूं और मैं एक क्यूडा कर्नेल लिखना चाहता हूं जो इनपुट मैट्रिक्स, कन्वोल्यूशन (या फ़िल्टर) और आउटपुट मैट्रिक्स को दिए गए एक रूपांतरण की गणना करता है।

नोट: मैं आउटपुट मैट्रिक्स में एक मान की गणना करने के लिए cuda कर्नेल के प्रत्येक थ्रेड को चाहता हूं।

मैं यह कैसे कर सकता हूँ?

उत्तर:

उत्तर № 1 के लिए 1

यदि फ़िल्टर मैट्रिक्स की भरने सीमा को कवर करते हैं, तो इसे सीधे रूपांतरित किया जा सकता है cublasSgemm.

उदाहरण के लिए, मान लें कि मैट्रिक्स के आयाम 5 * 4 हैं, और आपको 130 फ़िल्टर की आवश्यकता है, फिर प्रशिक्षित करने के लिए फ़िल्टर मैट्रिक्स 130 * 20 आयाम है, और 5 * 4 मैट्रिक्स को 20 * 1 के रूप में लिया जा सकता है।

इस तरह, गणना की गति इष्टतम है; यह एम 1 (130, 20) और एम 2 (20, 1) के बीच मैट्रिक्स गुणा में परिवर्तित हो गया है।


जवाब के लिए 0 № 2

यदि आप एक छवि संकल्प कर्नेल की तलाश में हैं, तो यह लिंक सहायक हो सकता है (साझा और लगातार मेमोरी द्वारा सीयूडीए में दो आयामी (2 डी) छवि कनवॉल्यूशन: एक अनुकूलित तरीका )।

जहां तक ​​मैं चिंतित हूं, प्रत्येक धागे का उपयोग करआउटपुट में पिक्सेल या स्थिति की गणना करना बहुत अच्छा विचार नहीं हो सकता है। कृपया इस विचार के लिए उप-क्षेत्र कैसे लोड किया गया है, या क्या एक ही वार में धागे प्रत्येक पढ़ने पर निरंतर स्मृति पढ़ रहे हैं। अन्यथा, कर्नेल डेटा लोडिंग से पीड़ित हो सकता है भले ही सैकड़ों धागे उपलब्ध हों।

इसलिए, मूल रूप से आप अपने वर्णित कोड को लिख सकते हैं, और आगे अनुकूलन सुझावों के लिए प्रोफाइलर (एनवीवीपी) का उपयोग कर सकते हैं।