2009-09-07 17 views
11

मैं अपने स्ट्रीम 2.0 बीटा में अति ओपनसीएल कार्यान्वयन के साथ खेल रहा हूं। वर्तमान बीटा में ओपनसीएल केवल सीपीयू का उपयोग करता है, अगला संस्करण जीपीयू कर्नल का समर्थन करना चाहिए। मैंने स्ट्रीम डाउनलोड किया क्योंकि मेरे पास मेरी कार्य मशीन में एक अति GPU है।मिश्रित विक्रेताओं से हार्डवेयर पर ओपनसीएल चलाना

मैं ऐसे सॉफ्टवेयर लिखता हूं जो जीपीयू का उपयोग करके लाभ से भारी लाभ उठाएगा। हालांकि यह सॉफ़्टवेयर ग्राहक मशीनों पर चलता है, मेरे पास लक्जरी नहीं है (जितने वैज्ञानिक कंप्यूटिंग वातावरण हैं) के लिए विकसित करने के लिए सटीक हार्डवेयर चुनने के लिए, और इसके लिए अनुकूलित करें। तो मेरा सवाल यह है कि, यदि मैं अपने आवेदन के साथ अति ओपनसीएल कार्यान्वयन वितरित करता हूं, तो इसका मतलब यह होगा कि यह कभी भी उपयोग नहीं कर पाएगा। एनवीडिया वीडियो कार्ड? और अगर मैं एनवीडिया ओपनसीएल एसडीके का उपयोग करता हूं, तो यह कभी भी एएमडी चिप्स (एटीआई/एएमडी लिंक पर विचार करने) पर बेहतर प्रदर्शन नहीं करेगा?

दूसरे शब्दों पर, ओपनसीएल कार्यान्वयन प्रदान करने के लिए अंत में कौन जिम्मेदार है? क्या उपयोगकर्ता उदा। अपने एनवीडिया वीडियो कार्ड के लिए 'ड्राइवर' के साथ एक ओपनसीएल 'ड्राइवर' स्थापित करें जो उन्हें अपने एएमडी सीपीयू पर इष्टतम प्रदर्शन देता है?

एक तरफ, क्या ख्रोनोस संदेश बोर्डों के अलावा ओपनसीएल के लिए कोई अच्छा/सक्रिय समर्थन मंच है, या क्या यह जगह है? मैंने देखा है कि एटीआई के पास एक बोर्ड है, और एनवीडिया का अनुमान है कि ओपनसीएल उपयोगकर्ता/डेवलपर समुदाय कहां से बाहर निकलता है? क्या यह पहले से ही एक स्थान पर समेकित है?

उत्तर

6

आखिरकार, ओपनसीएल ओपनजीएल के समान काम करेगा। यही है, उपयोगकर्ता अपने हार्डवेयर विक्रेताओं (एटीआई, एनवीआईडीआईए, इंटेल) से मौजूदा ड्राइवर स्थापित करेंगे। जब आप डेवलपर अपने एप्लिकेशन बनाते समय ओपनसीएल लाइब्रेरी के खिलाफ बस लिंक करेंगे। जब उपयोगकर्ता आपका आवेदन चलाते हैं, तो एप्लिकेशन ड्राइवर द्वारा प्रदान किए गए उचित विक्रेता विशिष्ट पुस्तकालयों पर रीडायरेक्ट करेगा।

इस तरह से यह काम करेगा, लेकिन यह अभी तक इस तरह से काम नहीं करता है।

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

+0

ओपनजीएल के साथ अंतर यह है कि ओपनजीएल के लिए, जीपीयू विक्रेता ड्राइवर-अवधि लिखता है। ओपनजीएल केवल वीडियो कार्ड पर काम करता है। लेकिन ओपनसीएल के लिए, आदर्श रूप से सीपीयू विक्रेता सीपीयू कर्नेल के लिए ड्राइवर लिखता है और जीपीयू विक्रेता जीपीयू कर्नेल के लिए ड्राइवर लिखता है, क्योंकि ओपनसीएल कर्नल सीपीयू थ्रेड या जीपीयू थ्रेड पर चल सकते हैं। क्या यह भविष्य में काम करना है? – Roel

+0

ओपनजीएल हमेशा एक सॉफ्टवेयर पथ का समर्थन करता है जब हार्डवेयर कुछ संचालन का समर्थन नहीं करता है। इस प्रकार, ओएस विक्रेताओं को एक सॉफ्टवेयर ओपनजीएल कार्यान्वयन की आपूर्ति करनी होगी (एमएस विंडोज ओपनजीएल ओपनजीएल 1.1 पर फंस गया है)। ओपनसीएल के साथ शायद कुछ ऐसा ही होगा। किसी भी मामले में, एएमडी/एटीआई ओपनसीएल का एक संस्करण जारी करेगा जो उनके सीपीयू और उनके जीपीयू दोनों का समर्थन करेगा। इसी तरह, इंटेल एक ओपनसीएल जारी करेगा जो नियमित CPUs और लैराबी जीपीयू का समर्थन करता है। मैं यह जानने के लिए ऐप्पल के ओपनसीएल कार्यान्वयन के बारे में पर्याप्त नहीं जानता कि यह क्या समर्थन करता है। – Eric

+1

ठीक है, तो क्या मैं उस से निष्कर्ष निकाल सकता हूं यदि किसी ग्राहक के पास अति वीडियो कार्ड और इंटेल सीपीयू है, तो उनके पास इष्टतम प्रदर्शन नहीं होगा? वह, ओपनसीएल चालक/कार्यान्वयन के आधार पर स्थापित करने के आधार पर, वे या तो सीपीयू या जीपीयू पर कर्नल चलाएंगे? मेरा मतलब है कि मुझे पता है कि यह शायद मशीन पर * रन * होगा, यह मेरी चिंता नहीं है; मेरी चिंता है, यह * तेजी से * चलाएगा (इसलिए मशीन पर सभी हार्डवेयर का उपयोग, सभी सीपीयू कोर और सभी जीपीयू 'कोर')। – Roel

8

मुझे पता है कि यह पुराने प्रश्नों के साथ एक पुराना प्रश्न है। सोचा था कि मैं इसे अद्यतित उत्तर के साथ अपडेट कर दूंगा।

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

लोग एक से अधिक प्लेटफ़ॉर्म कर सकते हैं और करेंगे। उदाहरण के लिए, मेरे सिस्टम में जीटीएक्स 580 एसएलआई है, इसलिए इसमें एनवीडिया मंच में दो डिवाइस हैं। इसमें इंटेल ओपनसीएल एसडीके भी है, इसलिए मेरा कोरआई 7 9 0 9 एक्स एक्सट्रीम सीपीयू इंटेल प्लेटफ़ॉर्म में डिवाइस के रूप में भी आता है।

हां एक बाइनरी विकसित और निर्मित, उदाहरण के लिए, एनवीडिया ओपनसीएल एसडीके, एटीआई या इंटेल ओपनसीएल पर काम करेगा, और इसके विपरीत। अब इसके बारे में चिंता करने की ज़रूरत नहीं है।

जाहिर है, एक अंतिम उपयोगकर्ता के पास ओपनसीएल नहीं हो सकता है, इसलिए आपको देरी-लोड या लोड लाइब्रेरी opencl.dll और गतिशील लिंक की आवश्यकता हो सकती है।

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

+0

इसके लिए धन्यवाद, मैं यह जानने के लिए एक नया प्रश्न लिख रहा था कि क्या पहले जवाब के बाद चीजें बदल गई हैं ... – Mikarnage

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