GPU सिस्टम पर BLAS / LAPACK या अन्य रैखिक बीजगणित दिनचर्या के सबसे तेजी से उपलब्ध कार्यान्वयन क्या हैं?


11

उदाहरण के लिए, NVidia में CUBLAS है, जो 7-14x स्पीडअप का वादा करता है। Naively, यह कहीं भी nVidia के GPU कार्ड के सैद्धांतिक थ्रूपुट के पास नहीं है। जीपीयू पर रैखिक बीजगणित को गति देने में क्या चुनौतियां हैं, और क्या पहले से उपलब्ध तेजी से रैखिक बीजगणित मार्ग हैं?

जवाबों:


9

मैं आपके प्रश्न के उत्तर के दूसरे भाग का उत्तर नहीं दे सकता क्योंकि अन्य कार्यान्वयन वहाँ हैं लेकिन मैं चुनौतियों के अनुसार कुछ जानकारी प्रदान कर सकता हूँ। संदर्भ के लिए, मैंने व्यक्तिगत रूप से अपने बेंचमार्क के लिए 2GB मेमोरी के साथ nVidia GTX 560 Ti पर ViennaCL का उपयोग किया।

एक मध्यम-रेंज i5 पर सीरियल कोड से अधिक, मैंने लगभग 40x के घने मैट्रिक्स गुणा के लिए गति-अप देखा। वेक्टर-स्केलर जैसे ऑपरेशन के लिए मैंने 1000x स्पीड-अप के रूप में गुणा किया। कमरे में 800 पाउंड गोरिल्ला, हालांकि, मेमोरी बैंडविड्थ है। अधिकांश व्यावसायिक GPU के लिए, आप PCIe जैसी किसी चीज़ का उपयोग कर रहे होंगे जो आपको लगभग 6GB / s थ्रूपुट तक सीमित करता है। मेरे मामले में, जबकि गणना 40 गुना तेज थी, तीन मैट्रिक्स प्रतियां (दो जीपीयू, और एक वापस) प्रत्येक को सीपीयू पर बस गणना करने में जितना समय लगता था।

GPU रैखिक बीजगणित के लिए किसी भी सामान्य पुस्तकालय के साथ समस्या यह है कि वे वास्तव में GPU पर वस्तुओं का फिर से उपयोग नहीं कर सकते हैं, क्योंकि वे नहीं जानते कि आप उनके साथ क्या करने जा रहे हैं। इसलिए प्रत्येक कॉल को एक गणना कर्नेल के लिए GPU की प्रतिलिपि बनाने की आवश्यकता होगी, फिर परिणाम को वापस कॉपी करना होगा। यह लाभ के एक बड़े हिस्से को खा जाएगा।

यदि आप मैट्रीस जैसी वस्तुओं का पुन: उपयोग कर सकते हैं, तो जितना संभव हो उतना मेमोरी प्रबंधन से बचने के लिए आप उच्च स्तर के एल्गोरिदम लिख सकते हैं, लेकिन एक पुस्तकालय को कुशलतापूर्वक ऐसा करने के लिए मुश्किल से दबाया जाएगा।

मुझे उम्मीद है कि यह मदद करता है, और मुझे यकीन है कि यहां अन्य लोग भी हैं जो इसमें बहुत अधिक अनुभवी हैं, लेकिन ये वे अनुभव और इंप्रेशन हैं जो मुझे अपने छोटे फ़ॉरेस्ट के दौरान GPU कंप्यूटिंग में मिले थे।


3
यही कारण है कि आप उन वस्तुओं को चाहते हैं जो सीपीयू पर उत्सुकता से सीपीयू में वापस कॉपी किए जाने की बजाय विस्तारित अवधि के लिए रहते हैं। उदाहरण के लिए, PETSc मैट्रिसेस और वैक्टर में एक ध्वज होता है जो दर्शाता है कि सीपीयू और / या जीपीयू चालू है। GPU पर एक ऑपरेशन सीपीयू संस्करण को गंदा और इसके विपरीत के रूप में चिह्नित करता है। यदि आप स्मृति को गंदे स्थान पर रखने का अनुरोध करते हैं, तो एक प्रतिलिपि पारदर्शी रूप से की जाती है, लेकिन ऐसा बहुत कम होता है यदि सभी एल्गोरिथम घटक जो बड़े डेटा संरचनाओं को स्पर्श करते हैं, उसी स्थान पर निष्पादित हो सकते हैं।
जैड ब्राउन

5

मुझे केवल CUDA और BLAS पर ध्यान देना चाहिए।

एक होस्ट बीएलएएस कार्यान्वयन पर स्पीडअप थ्रूपुट का आकलन करने के लिए एक अच्छा मीट्रिक नहीं है, क्योंकि यह बहुत अधिक कारकों पर निर्भर करता है, हालांकि मैं मानता हूं कि स्पीडअप आमतौर पर एक की परवाह करता है।

यदि आप NVIDIA द्वारा प्रकाशित बेंचमार्क को देखते हैं और ध्यान दें कि टेस्ला M2090 में 1331 गिगाफ्लॉप्स (एकल परिशुद्धता) और 665 गीगाफ्लॉप्स (डबल प्री।) पीक प्रदर्शन हैं, तो आप देखेंगे कि SGEMM और DGEMM के लिए हमारे पास एक मापा थ्रूपुट है। 60% सैद्धांतिक एक, जो बहुत अच्छा है।

2n××n

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

नीचे पंक्ति: एक वास्तविक जीवन एप्लिकेशन का स्पीडअप रैखिक बीजगणित दिनचर्या पर चोटी के मापा प्रदर्शन से बहुत अलग हो सकता है, क्योंकि आपको जीपीयू आरंभीकरण, डेटा स्थानांतरण समय, आदि को ध्यान में रखना होगा।

इसलिए मैं सबसे तेज़ लाइब्रेरी के बारे में आपके सवाल का जवाब नहीं दूंगा, क्योंकि इस सवाल का कोई मतलब नहीं है जब तक कि एक सटीक मीट्रिक और समस्या को परिभाषित नहीं किया जाता है। यह सब कहा, मुझे लगता है कि cuBLAS और MAGMA एक बहुत अच्छा प्रारंभिक बिंदु हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.