साझा मेमोरी में एक GPU पर एक छोटे nonsymmetric मैट्रिक्स के eigenpairs खोजने का सबसे तेज़ तरीका


9

मेरे पास एक समस्या है जहां मुझे सभी सकारात्मक खोजने की जरूरत है (जैसा कि आइगेनवल्यू पॉजिटिव है) एक छोटे (आमतौर पर 60x60 से छोटे) के नोमेनमेट्रिक मैट्रिक्स के ईजिनपेयर हैं। जब एक निश्चित दहलीज से छोटा होता है तो मैं गणना करना बंद कर सकता हूं। मुझे पता है कि आइंवागल असली हैं। एल्गोरिदम पर कोई सुझाव जो मैं सबसे अच्छा प्रदर्शन निचोड़ने की कोशिश कर सकता था? मुझे इनमें से कई हजार decompositions करने हैं, इसलिए गति महत्वपूर्ण है।

पहले ही, आपका बहुत धन्यवाद।

संपादित करें: मुझे साझा मेमोरी में GPU पर ऐसा करने की आवश्यकता है। जरूरी नहीं कि मेट्रिसेस भी एक ही आकार के हों। मुझे इस समय ऐसा करने वाले किसी भी पुस्तकालय के बारे में पता नहीं है। एल्गोरिदम के सुझाव जो समस्या के लिए अच्छी तरह से अनुकूल होंगे, की सराहना की जाएगी।


1
अगर मुझे यह सही लगा, तो आपके पास एक CUDA कर्नेल है जो साझा मेमोरी में हजारों छोटे मैट्रिसेस की गणना करता है, और आप उन्हें ग्लोबल मेमोरी में कॉपी करने के लिए तैयार नहीं हैं। जवाब देने की कोशिश करने से पहले, स्पष्ट करने के लिए कुछ बिंदु हैं। CUDA में साझा की गई मेमोरी लाइफटाइम लाइफटाइम ब्लॉक करने के लिए बाध्य है: प्रत्येक मैट्रिक्स के लिए आपके पास कितने थ्रेड्स विघटित करने के लिए हैं? क्या चरम प्रदर्शन वास्तव में महत्वपूर्ण है? (उम्मीद है कि eigenvalue निष्कर्षण समय मैट्रिक्स पीढ़ी के समय की तुलना कैसे करेगा?) आप किस तर्क के आधार पर जानते हैं कि eigensystem वास्तविक है? क्या ईजेनसिस्टम ख़राब हो सकता है?
स्टेफानो एम

हेलो स्टेनो और आपकी टिप्पणी के लिए धन्यवाद। अभी के लिए, मेरे पास ताना के आकार के सबसे पास के कई आयाम होंगे, जिस मैट्रिक्स को मैं विघटित करना चाहता हूं। मैट्रिक्स पीढ़ी का समय बहुत भिन्न होता है, और ऐसे मामले होते हैं जहां मैट्रिक्स पीढ़ी का समय अधिक महंगा होता है, लेकिन कई परिस्थितियां ऐसी हैं जहां मैट्रिक्स पीढ़ी का समय अपघटन से कम है। मुझे पता है कि मैट्रिक्स उत्पन्न होने के तरीके के कारण आइजनवेल्स वास्तविक हैं। मैं यहाँ विवरण में नहीं जाना चाहता, क्योंकि यह मूल प्रश्न से अलग होगा। अंत में, हाँ, सिस्टम ख़राब हो सकता है।
कांटोकू

जवाबों:


3

बहुत सारी खोज किए बिना मैं आपको मैग्मा लाइब्रेरी देखने की सलाह देता हूं । निरंतर समर्थन के साथ स्वतंत्र रूप से उपलब्ध कोड। NVIDIA ने एमएजीएमए को "ए ब्रेकथ्रू इन सॉल्वर्स फॉर आइगेनवेलु प्रॉब्लम्स" के रूप में मान्यता दी

कुला पुस्तकालय भी है , जो आम तौर पर वाणिज्यिक उत्पाद है, हालांकि हाल ही में इसे शैक्षणिक उपयोग के लिए निशुल्क बनाया गया है (विवरण यहां देखें )।


आपके उत्तर के लिए धन्यवाद अलेक्जेंडर। मैंने पहले दोनों पुस्तकालयों में देखा है, और जहाँ तक मुझे पता है, कार्यों को मेजबान से बुलाया जाता है और स्मृति को वैश्विक स्मृति में होना चाहिए। मेरा मानना ​​है कि उपयोग को सही ठहराने के लिए ओवरहेड बहुत अधिक होगा। ये सभी मेट्रिक्स साझा मेमोरी में उत्पन्न होते हैं, कर्नेल में उपयोग किए जाते हैं और फिर छोड़ दिए जाते हैं। मैं उन्हें वहाँ रखने के लिए उन्हें वैश्विक स्मृति में वापस लाने के बिना करना चाहते हैं। यहां तक ​​कि अगर मैंने उन्हें वहां धकेल दिया, तब भी मेजबान से कई कर्नेल फ़ंक्शन को कॉल करने का मुद्दा होगा (यद्यपि कई धाराओं में)।
कांटोकु

1
@ कांतोकू, हाँ, वे पुस्तकालय अधिक सामान्य हैं और वे वैश्विक स्मृति में पूरे मैट्रिक्स को संग्रहीत करते हैं। यदि आपके मैट्रिक्‍स साझा मेमोरी में हैं तो केवल एक एसएम उन पर काम कर सकता है, है ना? इस प्रकार ईवीडी का कार्यान्वयन काफी सीधा होना चाहिए।
अलेक्जेंडर

हां, मैं इसकी कल्पना करूंगा, यही कारण है कि मैं एल्गोरिदम के लिए मछली पकड़ रहा था जो स्थिति के लिए उपयुक्त होगा। मैं गैर-सममित evd से अधिक परिचित नहीं हूं, इसलिए मैं सुझावों की तलाश कर रहा था।
कांटोकु

@ कांटोकू (और अलेक्जेंडर)। Nonsymmetric EVD के क्रमिक मामले में भी, सीधे से बहुत दूर हैं। यह अभी भी अनुसंधान का एक सक्रिय क्षेत्र है।
जैक पॉल्सन

@JackPoulson आह हाँ, आप सही हैं, लेकिन मैं (और मैं सिकंदर को भी मान लेता हूं) का मतलब था कि समस्या के लिए एक स्थापित एल्गोरिथ्म को लागू करना सीधा होगा, कई सरलीकरण हैं जो तब किए जा सकते हैं जब हम आकार और प्रकृति लेते हैं। मैट्रिक्स के विचार में। समस्या यह है: कौन सा एल्गोरिदम।
कांटोकु

2

LAPACK में कार्यों का उपयोग करें, यह संभावना नहीं है कि आप उन्हें अपने कार्यान्वयन में हरा सकते हैं।


हाय वोल्फगैंग। उत्तर के लिए धन्यवाद, लेकिन मैं CUDA का उपयोग करके GPU पर इसे लागू करने का इरादा रखता हूं और इनमें से कई हजार छोटे मैट्रिक्स (जहां प्रत्येक ब्लॉक एकल मैट्रिक्स के अपघटन को संभालता है), और मैट्रिक्स जरूरी समान आकार नहीं हैं, इसलिए लागू करना साझा स्मृति का उपयोग करने वाली कोई चीज़ मेरे लिए एकमात्र विकल्प लगती है। किसी भी विचार क्या एल्गोरिथ्म इन प्रकार के मैट्रिस के लिए सबसे उपयुक्त होगा? PS सौदा के लिए धन्यवाद। II व्याख्यान जो आपने KAUST अंतिम सेमेस्टर में दिया था। मैंने उनका आनंद लिया :)
कांटोकु

2
@ कांटोकू आपको अपने विवरण में इन विवरणों को जोड़ना चाहिए, अन्यथा यह भ्रामक है।
अलेक्जेंडर

@Alexander मैंने अधिक विवरण के साथ प्रश्न को अपडेट किया है। सलाह के लिये धन्यवाद!
कांटोकु

1
@ कांटोकु: जीपीयू मेरे दायरे से थोड़ा परे हैं, लेकिन मुझे यकीन है कि वहां पुस्तकालय पहले से ही हैं जो आप चाहते हैं (और वास्तव में मैं देख रहा हूं कि अन्य उत्तर पहले से ही उनसे जुड़े हैं)। सुनकर खुशी हुई कि आपको मेरी कक्षाएं पसंद आईं!
वोल्फगैंग बैंगर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.