2011-06-30 12 views
13

my previous question में मैंने पूछा है, मैंने माइक्रोसॉफ्ट द्वारा प्रदान किए गए ppl.h से parallel_for विषय को छुआ।
लेकिन कुछ ही समय बाद मुझे एहसास हुआ कि इसका उपयोग करके कोई भी अपना आवेदन असमर्थनीय बनाता है (यदि मैं सही हूं तो यह माइक्रोसॉफ्ट (पीपीएलएच हेडर) के लिए विशिष्ट है)।
मेरी राय में यह सी ++ - पोर्टेबिलिटी में प्रोग्रामिंग का बहुत महत्वपूर्ण पहलू तोड़ता है, और मैं इसे करने के लिए तैयार नहीं हूं।
तो मेरी प्रश्न हैं:
1. क्या मैं सही हूँ कह रही है कि ppl से parallel_for का उपयोग कर अपने कोड unportable बनाता
2. एम आई (unportable मेरा मतलब है कि यह एमएस से एक के अलावा अन्य संकलक द्वारा संकलित नहीं किया जा सकता द्वारा) में सही कहने पर कि अगर बाद के चरण में मैं उस आवेदन के लिए यूआई (क्यूटी में किया गया) प्रदान करना चाहता हूं, तो मैं अपने कोड में समानांतर_for का उपयोग करके एक बाधा बनूंगा जिसका अर्थ यह होगा कि या तो मैं parallel_for को बदल दूंगा कुछ अन्य (पोर्टेबल) विकल्प या मैं वीएस में कोर और कोर में यूआई करने में सक्षम नहीं होगा?
3. पीपीएल के लिए (पोर्टेबल) विकल्प क्या हैं?विकल्प पीपीएल

उत्तर

14

आप इंटेल के Thread Building Blocks पर विचार करना चाह सकते हैं। ओपनएमपी के विपरीत, टीबीबी वास्तव में सी ++ कंपाइलर के तहत संकलित करने के बजाय सी ++ का उपयोग करता है (यानी: सी लाइब्रेरी होने के नाते जो सी ++ के रूप में संकलित हो सकता है)। पीपीएल में आपके द्वारा देखी जाने वाली कई चीजें हैं, लेकिन यह क्रॉस-प्लेटफ़ॉर्म है।

बूस्ट भी है। थ्रेड, जो सी ++ है (हालांकि टीबीबी के रूप में काफी प्रत्यक्ष नहीं है), और यह क्रॉस-प्लेटफार्म है।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। निकोल, क्या पीपीएल के बारे में कुछ भी "वास्तव में विशेष" है जो किसी को टीबीबी पर उपयोग करने के लिए बनाया जाएगा, पोर्टेबिलिटी बलिदान? – smallB

+0

ओपनएमपी लाइब्रेरी नहीं है, यह सबसे पहले एक कंपाइलर एक्सटेंशन है। यह भाषा * में समांतरता * जोड़ता है। –

+0

@smallB, वीसी 10 पर हाँ, यह डिबगिंग में मदद करता है। वीसी 10 समांतर कार्यों और समांतर ढेर दिखाता है, जो कि कॉन्सआरटी के साथ अच्छी तरह से एकीकृत है। – Ajay

0

मैं सही कह रही है कि ppl से parallel_for का उपयोग कर अपने कोड बनाता में हूं unportable (unportable से मेरा मतलब है कि यह एमएस से एक के अलावा अन्य संकलक द्वारा संकलित नहीं किया जा सकता)

Unportable यदि आप मंच को स्वयं स्विच करते हैं। यदि आप अन्य कंपाइलर्स का उपयोग करना चाहते हैं, तो विंडोज़ पर पोर्टेबल हो सकता है। लेकिन पता है कि पीपीएल कंसुरेंसी रनटाइम का हिस्सा है, जिसे एमएसवीसीआरटी 100. डीएलएल में रखा गया है, और आपको इसे (या स्टैटटाइम पर डीएलएल की आवश्यकता के बिना) (या स्थैतिक लिंक) से लिंक करने की आवश्यकता है। मुझे यकीन नहीं है कि यह अन्य कंपाइलर्स/लिंकर्स के साथ कैसे किया जा सकता है, लेकिन मुझे विश्वास है कि यह करने योग्य है।

मैं सही आवेदन मैं momment पर पर काम कर रहा हूँ के लिए कह रही है कि अगर बाद में मंच पर मैं यूआई प्रदान करना चाहते हैं ( क्यूटी में किया), में parallel_for उपयोग करते हुए मेरे कोड एक हो जाएगा में हूं रुकावट जो मतलब यह होगा कि या तो मैं कुछ अन्य (पोर्टेबल) विकल्प के साथ parallel_for से बदल देंगे या मैं नहीं होगा वी.एस.

में क्यूटी और कोर में यूआई करने के लिए

आप अपने core- लिख सकते हैं सक्षम पीपीएल/वीसी ++, और ओ का उपयोग करने में ढांचा क्यूटी/अन्य संकलक में थर्म जीयूआई समकक्ष। इसके लिए बस एक डीएलएल बनाएं जो पीपीएल का उपयोग करेगी, और आपका जीयूआई एप्लीकेशन डीएलएल का उपयोग करेगा। मुझे विश्वास है कि आप समझते हैं कि मेरा मतलब क्या है। इससे पोर्टेबिलिटी (विंडोज़ पर) के बारे में आपके सिर से बोझ कम हो जाता है।

  1. पीपीएल के लिए (पोर्टेबल) विकल्प क्या हैं?

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

5

की तुलना में फायदे नहीं देता है Casablanca प्रोजेक्ट पर काम करने वाले लोग पीपीएलएक्स नामक पीपीएल का पोर्टेबल संस्करण बना रहे हैं। इसे Apache 2.0 लाइसेंस के तहत लाइसेंस प्राप्त है।

उन्होंने पहले कहा है कि वे दोनों संस्करणों को सिंक फीचर और बगफिक्स के अनुसार रखने के लिए पीपीएल टीम के साथ मिलकर काम कर रहे हैं (this thread में अंतिम पोस्ट देखें)।

+0

पीपीएलएक्स कार्यों के लिए समर्थन पर केंद्रित है। उस मामले के लिए समानांतर_ * द्वारा मिलान किए गए समांतर_for या किसी भी चीज़ के लिए इसका समर्थन नहीं है। –

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