2008-12-10 8 views
10

ओपनसीएल के लिए 1.0 स्पेक कुछ दिन पहले आया था (स्पेक here है) और मैंने अभी इसे पढ़ना शुरू कर दिया है। मैं जानना चाहता हूं कि यह ओपनएमपी (spec) जैसे अन्य उच्च प्रदर्शन मल्टीप्रोसेसिंग एपीआई के साथ अच्छा प्रदर्शन करता है और मैं जानना चाहता हूं कि मुझे क्या सीखना चाहिए। तो, यहां मेरे मूल प्रश्न हैं:ओपनसीएल: क्या यह ओपनएमपी के साथ अच्छी तरह से खेलता है, क्या मैं इसे अन्य भाषाओं से जोड़ सकता हूं, आदि

  1. यदि मैं पहले से ही ओपनएमपी का उपयोग कर रहा हूं, तो क्या यह ओपनसीएल या इसके विपरीत टूट जाएगा?
  2. ओपनसीएल ओपनएमपी से अधिक शक्तिशाली है? या वे पूरक होने का इरादा रखते हैं?
  3. क्या एक ओपनसीएल प्रोग्राम को मानक सी 99 प्रोग्राम (या किसी अन्य भाषा) से जोड़ने का एक मानक तरीका है? यह क्या है?
  4. क्या किसी को पता है कि कोई ओपनसीएल पुस्तक लिख रहा है या नहीं? मैं कल्पना पढ़ रहा हूं, लेकिन मुझे पुस्तकों को और अधिक सहायक पाया गया है।

उत्तर

0
  1. ?
  2. ?
  3. ओपनसीएल सीधे सी 99 afaik में लिखा जाना चाहिए? इसके लिए अब हेडर फाइलें उपलब्ध हैं।
  4. ?
7

ओपनएमपी और ओपनसीएल अलग हैं, लेकिन एक साथ काम करने के लिए किए जा सकते हैं। उनमें से किसी को भी "तोड़ना" चाहिए।

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

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

ओपनसीएल को "सी 99 में सीधे लिखा जाना" नहीं माना जाता है। इसे सी 99 एक्सटेंशन के रूप में जाना जाता है क्योंकि इसके वाक्यविन्यास कुछ नए कीवर्ड के साथ सी 99 के समान/समान हैं। आप कर्नेल से libc (या कोई अन्य लाइब्रेरी) नहीं कॉल कर सकते हैं।

आप दोनों का उपयोग कर सकते हैं, लेकिन सैद्धांतिक रूप से, ओपनसीएल "बेहतर" होना चाहिए (जिसमें यह अधिक कंप्यूटिंग डिवाइसों के लिए पोर्टेबल है) यदि आप अपना कोड पोर्ट करने के इच्छुक हैं। आप OpenCL कर्नेल में OpenMP pragmas का उपयोग नहीं कर सकते हैं।

यह भी देखें:

4

अधिकांश भाग OpenMP के लिए और OpenCL-दूसरे से अलग कर रहे हैं। वे अपने मंच पर समांतरता के लिए डेवलपर पहुंच देने के दोनों तरीके हैं।

ओपनएमपी को कई (समान) प्रोसेसर के साथ अच्छी तरह से काम करने के लिए डिज़ाइन किया गया है, जहां लगभग बराबर काम लगभग (लगभग) स्वचालित रूप से उनके बीच खेती की जा सकती है।

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

उसने कहा, मुझे लगता है कि यह कुछ चुनौतीपूर्ण होगा, हालांकि ओपनएमपी और ओपनसीएल को एक ही समस्या में एक साथ काम करने के लिए निश्चित रूप से असंभव नहीं है।

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

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

यह कहा गया, मुझे यकीन है कि ऐसे कार्यक्रम हैं जिनमें एक ही समय में कई प्रकार के कार्य हो रहे हैं, जहां सह-प्रोसेसर को एक प्रकार का कार्य हमेशा खेती जा सकती है और किसी अन्य प्रकार का कार्य संभाला जा सकता है बहु कोर मुख्य प्रोसेसर। ओपनएमपी और ओपनसीएल मिश्रण करने के लिए यह एक अच्छा उदाहरण होगा।

शुभकामनाएं!

0

वैसे, there is a work खुले एमपी के बारे में cUDA का उपयोग करके gpgpu के बारे में।