सबसे पहले मैं एरन अहमदिया को धन्यवाद देना चाहता हूं कि उन्होंने मुझे इस सूत्र की ओर इशारा किया।
वैज्ञानिक कोड में 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- इंटरफ़ेस बनाम ऑपरेटर अधिभार), लेकिन उनकी चर्चा प्रारंभिक प्रश्न के दायरे से परे है।