2011-08-31 17 views
28

ओपनसीएल से ओपनएमपी प्रदर्शन की तुलना में कोई अध्ययन किया गया है? विशेष रूप से मुझे ओपनसीएल के साथ धागे लॉन्च करने की ओवरहेड लागत में दिलचस्पी है, उदाहरण के लिए, यदि कोई व्यक्ति ओपनएमपी में भारी वजन धागे बनाम व्यक्तिगत कार्य वस्तुओं (प्रत्येक थ्रेड द्वारा संचालित प्रत्येक थ्रेड द्वारा) में बड़ी संख्या में डोमेन को विघटित कर रहा था, डोमेन को उन उप डोमेनों में विघटित किया गया था जिनकी संख्या कोर की संख्या के बराबर होती है।ओपनसीएल बनाम ओपनएमपी प्रदर्शन

ऐसा लगता है कि ओपनसीएल प्रोग्रामिंग मॉडल बड़े पैमाने पर समांतर चिप्स (उदाहरण के लिए जीपीयू, उदाहरण के लिए) के लिए अधिक लक्षित है, सीपीयू के बजाय कम लेकिन अधिक शक्तिशाली कोर हैं।

ओपनएमएल ओपनएमपी के लिए एक प्रभावी प्रतिस्थापन हो सकता है?

+1

मुझे यह जानने में भी दिलचस्पी होगी कि ओपनएमपी और ओपनसीएल का उपयोग एक साथ प्रभावी है या नहीं। ओपनसीएल थ्रेड-सुरक्षित है (clSetKernelArg() विधि के अपवाद के साथ), ऐसा लगता है कि दोनों प्रौद्योगिकियों का लाभ लेने के लिए शायद कमरा है। –

+0

यदि आपकी "प्रभावी" की परिभाषा में पठनीयता और विकासवादी शामिल है, तो उत्तर "नहीं" होना चाहिए। OpenCL को ओपनएमपी के तरीके से मौजूदा कोड पर बोल्ट नहीं किया जा सकता है, और इसमें ओपनएमपी की तुलना में पर्याप्त वाक्य रचनात्मक ब्लोट है। दूसरी तरफ, ओपनएमपी कोड लिखना जो मेमोरी पदानुक्रम का कुशल उपयोग करता है, आमतौर पर ओपनसीएल में उससे काफी कम पठनीय होता है। – Jeff

+0

आपके प्रश्न को थोड़ा सा संकुचित करने की आवश्यकता है। क्या आप जीपीयू बनाम मल्टी-थ्रेडेड सीपीयू, या ओपनएमपी बनाम ओपनसीएल की तुलना कर रहे हैं? दोनों भाषाओं की तुलना करने के लिए, उन्हें वास्तव में एक ही वास्तुकला पर चलने की आवश्यकता है। अन्यथा, यह सेब और संतरे है। – orodbhen

उत्तर

24

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

  • रनटाइम पर कर्नेल को संकलित करते समय ओपनसीएल के पास हमेशा कुछ अतिरिक्त ओवरहेड होगा। किसी भी बेंचमार्क को या तो अलग-अलग इस समय सूचीबद्ध करने की आवश्यकता है, पूर्व-संकलित मूल कर्नेल का उपयोग करें, या लंबे समय तक चलें कि कर्नेल संकलन महत्वहीन है।

  • ओपनसीएल कार्यान्वयन अलग-अलग होंगे। एनवीडिया जैसे जीपीयू विक्रेताओं को यह सुनिश्चित करने के लिए कोई प्रोत्साहन नहीं है कि उनके सीपीयू-आधारित ओपनसीएल कार्यान्वयन जितनी जल्दी हो सके। ओपनसीएल कार्यान्वयन में से कोई भी एक अच्छा ओपनएमपी कार्यान्वयन के रूप में परिपक्व होने की संभावना नहीं है।

  • ओपनसीएल स्पेक मूल रूप से कुछ भी नहीं कहता है कि कैसे सीपीयू-आधारित कार्यान्वयन हुड के नीचे थ्रेडिंग का उपयोग करते हैं, इसलिए थ्रेडिंग अपेक्षाकृत हल्के या हेवीवेट के बारे में कोई चर्चा आवश्यक रूप से कार्यान्वयन-विशिष्ट होगी।

  • जब आप एक सीपीयू पर ओपनसीएल कोड चला रहे हैं, तो आपके काम की वस्तुओं को छोटे और असंख्य होने की आवश्यकता नहीं है। आप ओपनएमपी के लिए उसी तरह से समस्या को तोड़ सकते हैं।

यदि ओपनसीएल के पास थोड़ा अधिक ओवरहेड है, तो इसे प्राथमिकता देने के अन्य कारण भी हो सकते हैं।

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

  • एक अच्छा सीपीयू-आधारित ओपनसीएल कार्यान्वयन का अर्थ है कि आप स्वचालित रूप से सीपीयू और ओपनसीएल कार्यान्वयन समर्थन के किसी भी निर्देश सेट एक्सटेंशन का लाभ प्राप्त करेंगे। ओपनएमपी के साथ, आपको यह सुनिश्चित करने के लिए अतिरिक्त कार्य करना होगा कि आपके निष्पादन योग्य एसएसईएक्स और एवीएक्स कोड पथ दोनों शामिल हैं।

  • ओपनसीएल वेक्टर प्राइमेटिव्स आपको एसएसई इंट्रिनिक्स का उपयोग करने से प्राप्त पोर्टेबिलिटी और पठनीयता बलिदान के बिना कुछ स्पष्ट समांतरता व्यक्त करने में मदद कर सकता है।

+0

द्वारा मुझे आश्चर्य है चाहे उपयोगकर्ता बिना-जीपीयू-केस वास्तव में व्यावहारिक है। ओपनएमपी फॉलबैक कोड को बनाए रखने के बजाय, आपको ओपनसीएल फॉलबैक कोड बनाए रखना होगा, क्योंकि सीपीयू 2 डी स्थानीय काम के आकार का समर्थन नहीं करेंगे, __local मेमोरी और व्हाट्नॉट के साथ समस्याएं हैं। यदि आपने GPU कर्नेल को अनुकूलित किया है तो वहां बहुत कुछ नहीं मिला है। –

+2

आपको क्यों लगता है कि सीपीयू-आधारित कार्यान्वयन 2 डी स्थानीय कार्य समूह आकार या स्थानीय मेमोरी का समर्थन नहीं कर सकता है? एक सीपीयू पर, कैश मेमोरी सॉफ़्टवेयर की बजाय हार्डवेयर द्वारा प्रबंधित की जाती है, इसलिए वैश्विक और स्थानीय मेमोरी के बीच एकमात्र अंतर यह होगा कि इसे एक्सेस करने के लिए लॉकिंग की आवश्यकता है या नहीं। कार्य समूह आकार NUMA सिस्टम के लिए शेड्यूलर संकेतों की मात्रा होगी। हां, जीपीयू पर इसे चलाने के लिए ओपनसीएल कोड में बहुत सारे अनुकूलन प्रयासों को सीपीयू पर प्रदर्शन प्रभावित नहीं होगा, लेकिन यह कोड को तोड़ नहीं देगा। कोई भी कर्नेल जो GPU पर चलाएगा एक अनुरुप CPU कार्यान्वयन पर चला सकता है। – user57368

+0

@ user57368: बस एक अतिरिक्त जो ऑप्टिमाइज़ेशन का उपयोग जैसे स्थानीय मेमोरी के स्पष्ट उपयोग को GPU के लिए समझ में आता है। सीपीयू पर, x86 CPUs के लिए इंटेल ओपनसीएल कार्यान्वयन का उपयोग करते समय, कम से कम इस अनुकूलन को "नकारात्मक रूप से" प्रदर्शन को प्रभावित कर सकता है। – usman

6

मैं एक कार्यक्रम जो मूल रूप से वैक्टर जोड़ने और कटौती प्रदर्शन, कुछ प्रमुख बाधाओं पर या तो OpenCL या OpenMP का उपयोग करने का विकल्प है की है।

मेरे मामले में, ओपनएमपी में 13 सेकंड लगते हैं जहां सीपीयू पर ओपनसीएल 10 सेकंड लेता है। इंटेल I5।

अब तक मेरे लिए सबसे तेज़ कॉन्फ़िगरेशन ओपनसीएल जीपीयू का उपयोग कर वैक्टर जोड़ना है, और ओपनएमपी पर कटौती मुझे 7 सेकंड तक कम करने के लिए है। जब मैं ओपनसीएल कर्नेल पर जीपीयू पर कमी करता हूं, तो इसमें कुल 8 सेकंड लगते हैं।

तो मेरे अनुभव से मैं कहूंगा कि यह उपयोग पर निर्भर करता है, और आप अपने ओपनसीएल कर्नेल को अनुकूलित कर सकते हैं।

+0

यहां वास्तव में "कमी" से आपका क्या मतलब है? – nbro

+0

@ एनब्रो ए "कमी" तब होता है जब आप बहुत से तत्व लेते हैं (एक 10,000 लंबाई सरणी, एक [0] [99 99] के माध्यम से कहें) और फिर डेटा को एक छोटे से संसाधित करें। उदाहरण के लिए: सरणी में "अधिकतम" संख्या, या [0] + एक [1] + एक [2] + ... [99 99] का मान लगाना। सबसे आम कटौती "मैक्स", "न्यूनतम" और "जोड़ें" हैं, लेकिन एक संख्या को आउटपुट करने के समानांतर में बहुत सारे प्रोसेसिंग की प्रक्रिया और बहुत कम डेटा (या कम से कम: कम संख्या जो पूरी तरह से प्रतिनिधित्व करती है) एक है समांतर प्रोग्रामिंग में आम "पैटर्न"। – Dragontamer5788

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