OpenCL के लिए गणितीय पुस्तकालय?


35

मैं किसी ऐसे व्यक्ति की जानकारी ढूंढ रहा हूं जिसने अपने वैज्ञानिक कोड में OpenCL का उपयोग करने की कोशिश की हो। क्या किसी ने (हाल ही में) वियनांकल की कोशिश की है ? यदि हां, तो यह पुच्छ की तुलना कैसे करता है ?

OCLTools के बारे में क्या ? क्या यह वादे पर खरा उतरता है? यदि हां, तो क्या यह ओपनसीएल में गणित की गुठली लिखना शुरू करने का एक व्यावहारिक तरीका होगा?


1
मैंने वियनाएलसीएल डेवलपर्स को एक छोटा नोट भेजा और उनसे इस बारे में कुछ मदद मांगी।
एरन अहमदिया

1
यह प्रश्न मेरे एक पोस्ट scicomp.stackexchange.com/questions/366/future-of-opencl से संबंधित भी हैं ।
एलन पी। इंग्सिग-करुप

जवाबों:


26

सबसे पहले मैं एरन अहमदिया को धन्यवाद देना चाहता हूं कि उन्होंने मुझे इस सूत्र की ओर इशारा किया।

वैज्ञानिक कोड में OpenCL के लिए के रूप में: OpenCL एक निम्न स्तर के एपीआई होने के लिए है, इस प्रकार यह उचित उत्पादकता तक पहुँचने के लिए इस कार्यक्षमता को किसी तरह से लपेटना महत्वपूर्ण है। इसके अलावा, जैसे ही कई गणना कर्नेल शामिल होते हैं, कोड बहुत गंदा हो सकता है यदि ओपनसीएल कर्नेल और मेमोरी हैंडल को किसी एप्लिकेशन के भीतर भारी रूप से पारित किया जाना चाहिए। मुझे OCLTools का पता नहीं है, इस प्रकार मैं नहीं कह सकता कि वे इस संबंध में उपयोगी हैं या नहीं।

वियनाएलसीएल के लिए: मैं वियनाकुल का प्रमुख हूं, इसलिए मैंने हाल ही में पुस्तकालय के साथ काम किया है। :-) में निम्नलिखित मैं एक थोड़ा बड़ा गुंजाइश, अर्थात् ViennaCL बनाम CUDA आधारित गणित पुस्तकालयों उभार और में उभार के साथ तुलना के लिए अनुरोध व्यवहार करेंगे MAGMA । केवल वर्तमान स्थिति पर विचार किया जाता है, भले ही बहुत अधिक विकास हो (कम से कम हमारी तरफ)।

कार्यशीलता । MAGMA सामान्य फ़ंक्शन इंटरफेस के माध्यम से घने मैट्रिस के लिए BLAS-कार्यक्षमता प्रदान करता है। इस कार्यशीलता के अधिकांश को ऑपरेटर ओवरलोड्स और अन्य सिंटैक्टिक चीनी का उपयोग करके वियनांकल 1.2.0 के साथ भी प्रदान किया गया है।

वही तीन पुनरावृत्त सॉल्वर (CG, BiCGStab, GMRES) पुच्छ और वियनाक्ल के साथ प्रदान किए जाते हैं। प्रीकॉन्डिशनर्स का सेट उल्लेखनीय रूप से भिन्न होता है: सेस विकर्ण, एसए-एएमजी और विभिन्न ब्राइडन प्रीकॉन्डिशनर्स प्रदान करता है। ViennaCL अधूरा LU कारक, विकर्ण अग्रदूत, और हाल ही में विभिन्न AMG जायके और विरल अनुमानित पूर्ववर्ती प्रस्तावक प्रदान करता है। मेरी जानकारी के लिए, सभी cusp प्रोंडिशनर्स पूरी तरह से GPU पर चलते हैं, जबकि वियनाक्लियर विशेष रूप से सीपीयू-आधारित कंप्यूटेशन पर सेटअप चरण के दौरान निर्भर करता है। वर्तमान में, स्पार्स मैट्रिक्स प्रारूपों की संख्या पुच्छल में बड़ी है: COO, CSR, DIA, ELL, HYB, जबकि ViennaCL 1.2.0 COO और CSR प्रदान करता है।

वियनाएलसीएल के साथ कई अतिरिक्त सुविधाएँ दी गई हैं, जो एमएजीएमए या पुच्छल का हिस्सा नहीं हैं: संरचित मैट्रिक्स प्रकार (सर्कुलेंट, हैंकेल इत्यादि), तेजी से फूरियर रूपांतरण, एल्गोरिदम को फिर से व्यवस्थित करना (जैसे कि कटहल-मैककी) और रैखिक बीजगणित के लिए रैपर। अन्य पुस्तकालयों से प्रकार।

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

कुल मिलाकर, वियना एमसीएलएमए की तुलना में वर्तमान में धीमा है, विशेष रूप से बीएलएएस स्तर 3 पर। इसके कारण वियनांकल का अलग फोकस है (घने रेखीय बीजगणित के बजाय विरल) और इस प्रकार मैग्मा में अनुकूलन की उच्च डिग्री है। विशेष रूप से BLAS स्तर 3 ऑपरेशन वर्तमान में मैग्मा में काफी तेज हैं।

इसी तरह, पुच्छल सामान्य रूप से थोड़ा बेहतर समग्र प्रदर्शन प्रदान करता है। हालांकि, चूंकि विरल मैट्रिक्स ऑपरेशन आमतौर पर मेमोरी बैंडविड्थ सीमित होते हैं, डेटा सेटअप और पसंद की तुलना में अंतर काफी कम और अक्सर नगण्य होते हैं। पूर्ववर्ती और उसके मापदंडों की पसंद में आमतौर पर विरल मैट्रिक्स-वेक्टर गुणन में किसी भी प्रदर्शन अंतर की तुलना में समग्र निष्पादन समय पर अधिक प्रभाव पड़ता है।

पोर्टेबिलिटी । हार्डवेयर पोर्टेबिलिटी के लिए, वियनाएलसीएलसीएल धन्यवाद के लिए सभी प्रमुख विक्रेताओं से सीपीयू और जीपीयू का उपयोग कर सकता है। इसके विपरीत, cusp और MAGMA एक उपयुक्त NVIDIA GPU पर भरोसा करते हैं।

ViennaCL केवल हेडर है, इसे C ++ कंपाइलरों की एक विस्तृत श्रृंखला पर संकलित किया जा सकता है और केवल GPU-समर्थन की आवश्यकता होने पर OpenCL लाइब्रेरी से जोड़ा जाना चाहिए। सिद्धांत रूप में, वियनाएलसीएल में जेनेरिक एल्गोरिदम का उपयोग किसी भी ओपनसीएल लिंकेज के बिना भी किया जा सकता है, जबकि पुष्ट और मैग्मा को संकलन के लिए NVIDIA संकलक और निष्पादन के लिए लक्ष्य प्रणाली पर CUDA पुस्तकालय की आवश्यकता होती है। मैग्मा को एक बीएलएएस लाइब्रेरी की भी आवश्यकता होती है, जो कभी-कभी एक नई प्रणाली को खोजने या स्थापित करने के लिए थोड़ी परेशानी हो सकती है।

एपीआई । MAGMA BLAS कार्यक्षमता के लिए BLAS- शैली फ़ंक्शन इंटरफ़ेस प्रदान करता है। पुच्छल का C ++ इंटरफ़ेस BLAS से कुछ फ़ंक्शन का भी उपयोग करता है, लेकिन कोई भी ऑपरेटर ओवरलोड नहीं करता है। चूंकि वियनांकल में अधिकांश इंटरफेस जानबूझकर Boost.uBLAS के समान हैं और ऑपरेटर ओवरलोड्स जैसे सिंटैक्टिक शुगर की सुविधा है, इसलिए वियनाक्ल को भी Boost.uBLAS की तरह इस्तेमाल करने का इरादा है। इस प्रकार, बस संचालन और एल्गोरिदम के एक पूर्वनिर्धारित सेट को कॉल करने के अलावा, हमारा उद्देश्य विशुद्ध रूप से सीपीयू-आधारित निष्पादन से जीपीयू कोड तक सरल रूप से संभव बनाना है, भले ही गैर-मानक एल्गोरिदम का उपयोग किया जाए। इस मामले में कि एक समर्पित ओपनसीएल कर्नेल की आवश्यकता है, वियनाएलसीएल में अपने स्वयं के ओपनसीएल कर्नेल को एकीकृत करने के लिए एक रूपरेखा भी है। इस प्रकार, वियनाएलसीएल का लक्ष्य बहुत अधिक हैउच्च उत्पादकता इस मायने में कि GPU पर नए एल्गोरिदम को लागू करने के लिए आवश्यक समय कम से कम है । ये बचत पुष्टिकरण और मैग्मा की तुलना में किसी भी प्रदर्शन के दंड (यदि कोई हो) को पछाड़ सकती है। ( यूनिट टेस्टिंग पर थ्रेड में यह भी उल्लेख किया गया है कि कोड डेवलपमेंट टाइम विज्ञान का एक अनमोल संसाधन है।)

मेरी तुलना में निश्चित रूप से कई वैचारिक मुद्दे हैं (जैसे CUDA बनाम ओपनसीएल, BLAS- इंटरफ़ेस बनाम ऑपरेटर अधिभार), लेकिन उनकी चर्चा प्रारंभिक प्रश्न के दायरे से परे है।


3
हाय कार्ल, SciComp में आपका स्वागत है और जानकारी के लिए धन्यवाद!
जैक पॉल्सन

1
मुझे लगता है कि यह बताना महत्वपूर्ण है कि मैग्मा केवल स्तर 3 बीएलएएस नहीं करता है, लेकिन यह सबसे आम डिकम्पोजिशन के लिए टाइल वाले हाइब्रिड सीपीयू / जीपीयू एल्गोरिदम भी प्रदान करता है, अर्थात एलयू, क्यूआर और चोल्स्की, साथ ही साथ कई सॉल्वर भी। Eigenvalue की समस्याएं। MAGMA होमपेज ( icl.cs.utk.edu/magma ) में अधिक विवरण हैं, साथ ही सूचीबद्ध सभी विशेषताओं के साथ एक अच्छा उड़ता भी है।
पेड्रो

2

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

आज, GPU प्रोग्रामिंग CUDA के लिए एक प्रारंभिक बिंदु के रूप में ठीक है, और यदि इसकी आवश्यकता है, तो ऐसा कुछ भी नहीं है जो OpenCL को एक विकल्प के रूप में उपयोग करने से रोकता है, जैसे कोड को अधिक पोर्टेबल बनाने के लिए। अनिवार्य रूप से, एक ही कर्नेल कोड का उपयोग CUDA और OpenCL दोनों में किया जा सकता है, इसलिए CUDA से OpenCL में जाने के लिए यह एक बड़ी समस्या नहीं होनी चाहिए। इसकी पुष्टि खुद के अनुभवों से होती है। एक प्रदर्शन के दृष्टिकोण से, एक ही अनुकूलन तकनीकों का उपयोग किया जा सकता है और तुच्छ समवर्ती कोड संकलक के लिए काम ठीक करना चाहिए (जैसे लूप अनरोलिंग, आदि)।


एलन, मुझे नहीं लगता कि आप यहां शॉन के प्रश्न का उत्तर दे रहे हैं ... वह विशेष रूप से ओपनसीएल पुस्तकालयों के उदाहरणों की तलाश कर रहे हैं, दोनों के बीच तुलना नहीं।
एरन अहमदिया

पांच सवाल पूछे गए हैं। मेरा उत्तर पहले 4 के लिए एक सामान्य प्रतिक्रिया है और अंतिम के लिए अधिक प्रत्यक्ष उत्तर है।
एलन पी। इंग्सिग-करुप

काफी उचित है, इस सवाल का जवाब देने में कुछ प्रयास करने के लिए धन्यवाद!
एरन अहमदिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.