2013-04-07 6 views
49

मुझे पता है कि ओपनसीएल जीपीयू की मेमोरी आर्किटेक्चर का नियंत्रण देता है और इस प्रकार बेहतर अनुकूलन की अनुमति देता है, लेकिन, इसे छोड़कर, क्या हम वेक्टर ऑपरेशंस (अतिरिक्त, गुणा, उलटा इत्यादि) के लिए कंप्यूट शेडर्स का उपयोग कर सकते हैं?ओपनसीएल और ओपनजीएल के गणना शेडर के बीच क्या अंतर है?

उत्तर

47

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

मुख्य अंतर मूल रूप से कर रहे हैं:

  • यह OpenCL सी के बजाय GLSL का उपयोग करता है जबकि वहाँ उन प्रोग्रामिंग भाषाओं bewteen इस तरह के एक बड़ा फर्क नहीं है, आप फिर भी सभी ग्राफिक्स से संबंधित GLSL कार्यों नहीं उपयोग कर सकते हैं ओपनसीएल के लिए उपलब्ध, जैसे कि उन्नत बनावट प्रकार (जैसे घन नक्शा सरणी), उन्नत फ़िल्टरिंग (उदाहरण के लिए मिपमैपिंग, ठीक है, आपको शायद खुद को मिप-स्तरीय गणना करने की आवश्यकता होगी), और 4x4 मैट्रिक्स या ज्यामितीय कार्यों जैसी छोटी सुविधा चीजें।
  • यह किसी अन्य जीएलएसएल शेडर की तरह ओपनजीएल शेडर प्रोग्राम है। इसका मतलब है कि ओपनजीएल डेटा (जैसे बफर, बनावट, इमेज) तक पहुंच केवल मामूली है, जबकि ओपनजीएल और ओपनसीएल/सीयूडीए के बीच इंटरफेसिंग आपके पक्ष से संभावित मैन्युअल सिंक्रनाइज़ेशन प्रयास के साथ थकाऊ हो सकता है। उसी तरह इसे एक मौजूदा ओपनजीएल वर्कफ़्लो में एकीकृत करना भी छोटा है, जबकि ओपनसीएल सेट अप करना एक पुस्तक है, मौजूदा ग्राफिक्स पाइपलाइन में इसके एकीकरण की बात नहीं करना।

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

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

+9

सटीक गारंटी के बारे में न भूलें कि ओपनसीएल प्रदान करता है कि जीएलएसएल स्पष्ट रूप से * नहीं * करता है। –

+0

@ निकोलबोलस आप अंकगणितीय परिचालन और कार्यों के लिए मतलब है? –

+1

हां। फ़्लोटिंग-पॉइंट परिशुद्धता दोनों के बीच बहुत अलग है। –

2

अन्य परिप्रेक्ष्य के लिए here देखें। सारांश:

हाँ, OpenCL पहले से ही अस्तित्व में है, लेकिन यह लक्षित करता हैवीवेट अनुप्रयोगों (लगता है सीएफडी, एफईएम, आदि), और यह और अधिक सार्वभौमिक ओपन (GPUs परे लगता है की तुलना में है ... इंटेल जिऑन फी वास्तुकला का समर्थन करता है> 50 x86 कोर)।

इसके अलावा, ओपनजीएल/सीयूडीए और ओपनसीएल के बीच बफर साझा करना मजेदार नहीं है।

+0

प्रैक्टिस में, एक उच्च अंत GPU >> मैट्रिक्स कंप्यूटिंग में, समान विशिष्ट समस्या को हल करने के लिए उच्च-अंत CPU की तुलना में 40 गुना अधिक सक्षम है, और अधिक विशिष्ट होने के लिए। मुझे अब के लिए सीपीयू क्षमता की परवाह नहीं है। तो मेरे प्रश्न पर वापस जाने के लिए, क्या हम कंप्यूटर्स शेडर्स के साथ मैट्रिक्स इनवर्जन कह सकते हैं? और OpenCL की तुलना में कितना काम की आवश्यकता है? – Maiss

+0

AFAIK, समांतर एल्गोरिदम केवल * स्पैस * मैट्रिस को बदलने के लिए मौजूद हैं और ये पर्याप्त जटिल हैं कि आप शायद उन्हें सी 99 (ओपनसीएल की कर्नेल भाषा) में लिखना चाहते हैं। –

+1

ओपनजीएल के कंप्यूट शेडर्स में आप कई प्रकार की गणना कर सकते हैं जो ओपनसीएल के समान होगा, ओपनजीएल की ओपनसीएल की सी 99 बोली की तुलना में ओपनजीएल _GLSL_ (ओपनजीएल छायांकन भाषा) को अपनी कर्नेल भाषा के रूप में उपयोग करता है। मैट्रिक्स कंप्यूटेशंस (उदाहरण के लिए, केवल स्पैर मैट्रिस के साथ काम करने) के लिए कोई सीमा नहीं है, और विशेष रूप से, आप ब्लॉक-आधारित मैट्रिक्स एल्गोरिदम का उपयोग करने में सक्षम हो सकते हैं जो कुछ जीएलएसएल के मूल मैट्रिक्स संचालन का लाभ उठाते हैं। – radical7

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