2012-11-14 10 views
15

मैं इसे अजीब ध्वनि पता है, लेकिन यहाँ मेरे परिदृश्य है:क्या एक CUDA कर्नेल एक क्यूबस फ़ंक्शन कॉल कर सकता है?

मैं एक मैट्रिक्स आव्यूह गुणन (ए (एन * ट) * बी (कश्मीर * एन)), लेकिन मैं केवल विकर्ण तत्वों की जरूरत है क्या करने की जरूरत आउटपुट मैट्रिक्स के लिए मूल्यांकन किया जाना है। मैंने कुब्ला पुस्तकालय की खोज की और उसे कोई स्तर 2 या 3 फ़ंक्शंस नहीं मिला जो ऐसा कर सकता है। तो, मैंने ए की प्रत्येक पंक्ति और बी के प्रत्येक कॉलम को CUDA थ्रेड में वितरित करने का निर्णय लिया। प्रत्येक थ्रेड (आईडीएक्स) के लिए, मुझे डॉट उत्पाद "ए [idx,:] * बी [:, idx]" की गणना करने की आवश्यकता है और इसे इसी विकर्ण आउटपुट के रूप में सहेजें। अब चूंकि इस डॉट उत्पाद में कुछ समय लगता है, और मुझे आश्चर्य है कि मैं इसे प्राप्त करने के लिए किसी भी तरह से क्यूब्ला फ़ंक्शन कह सकता हूं (cublasSdot कहें)।

अगर मुझे कुछ कुब्बल फ़ंक्शन याद आते हैं जो मेरे लक्ष्य को सीधे प्राप्त कर सकते हैं (केवल मैट्रिक्स-मैट्रिक्स गुणा के लिए विकर्ण तत्वों की गणना करें), तो इस प्रश्न को त्याग दिया जा सकता है।

उत्तर

11

हां यह कर सकता है।

"भाषा इंटरफेस और डिवाइस रनटाइम एपीआई CUDA सी/सी में उपलब्ध ++ होस्ट पर उपलब्ध CUDA रनटाइम एपीआई के एक सबसेट है। वाक्य रचना और CUDA रनटाइम एपीआई के शब्दों के क्रम की सुविधा के लिए डिवाइस पर रख लिया गया है एपीआई दिनचर्या है कि या तो मेजबान या डिवाइस के वातावरण में चला सकते हैं के लिए कोड पुन: उपयोग में आसानी। एक कर्नेल भी सीधे सीपीयू पर लौटने के लिए जरूरत के बिना इस तरह के CUBLAS के रूप में GPU पुस्तकालयों कॉल कर सकते हैं। " Source

Here आप देख सकते हैं और Cuda और CUBLAS लाइब्रेरी फ़ंक्शन cublasSgemv का उपयोग कर मैट्रिक्स-वेक्टर गुणन।

+7

ध्यान दें कि गतिशील समानांतरवाद, विशेषता यह है कि नेस्टेड गिरी कॉल की अनुमति देता है, केवल केपलर GK110, एक चिप है कि अभी-अभी जारी किया जा रहा पर समर्थित है। GK110, गतिशील parallism समर्थित न हो, सही प्रीमियम कीमत गणना उत्पादों में ही उपलब्ध है, तो टेस्ला m2090 के लिए अमरीकी डालर 3200 के –

+0

पर टेस्ला K20 जा रहा है मध्य स्तर उत्पाद है, जो एक फर्मी GPU है के साथ? –

+0

यह निश्चित रूप से समर्थित नहीं है, आप GPU पर ऐसा करने के लिए एक अलग कर्नेल बना सकते हैं – RSFalcon7

3

सुनिश्चित करें कि आप कोबुला को कॉल करने के लिए डिवाइस लाइब्रेरी का उपयोग कर रहे हैं। आप उसी लाइब्रेरी का उपयोग नहीं कर सकते जिसे आपने होस्ट से कॉल करने के लिए उपयोग किया था; कूडा डिवाइस लाइब्रेरी का उपयोग करने के बारे में विवरण cuda टूलकिट पर पाया जा सकता है: http://docs.nvidia.com/cuda/cublas/index.html#device-api

7_CUDALibraries/के तहत cuda 5 नमूने देखें।

संबंधित मुद्दे