2014-04-23 5 views
6

मल्टीथ्रेडिंग को लागू करने के कई तरीके हैं। std::thread अंततः सी ++ 11 मानक द्वारा लाया गया था लेकिन boost::thread इसके बजाए प्रभावी रूप से उपयोग किया जा सकता था। प्रत्येक तकनीक में विशिष्ट वाक्यविन्यास और सामान होते हैं, लेकिन - लगभग - सीपीयू समांतर प्रोग्रामिंग के लिए उपयोग किया जाता है। लेकिन उनके पास अलग प्रभाव है। मुझे पता है कि, उदाहरण के लिए, एमपीआई और ओपनएमपी विभिन्न मेमोरी मॉडल के लिए इस्तेमाल किया जाता है।ओपनएमपी, एमपीआई, पॉज़िक्स धागे, std :: थ्रेड, बूस्ट :: थ्रेड सहसंबंध कैसे करते हैं?

मुझे यह भी पता है कि तकनीक की पसंद वास्तव में अनन्य नहीं है, इसलिए किसी अन्य का उपयोग किया जा सकता है (फिर से, एमपीआई और ओपनएमपी)। विभिन्न प्रभावों के लिए उनका उपयोग कैसे किया जाता है लेकिन फिर भी एक ही स्रोत (सीपीयू) के साथ काम करते हैं?

यदि मैं उन तकनीकों के आधार पर समांतरता के साथ एक सी ++ प्रोग्राम संकलित करता हूं तो क्या अंतर होगा (ऑपरेशन सिस्टम और हार्डवेयर बिंदु दृश्य से)? क्या, उदाहरण के लिए, OpenMP या std::thread POSIX धागे का उपयोग करते हैं? यदि हां, तो सी ++ 11 के थ्रेड विंडोज पर कैसे काम करते हैं? या क्या इनमें से प्रत्येक तकनीक सीधे असेंबली भाषा या कुछ के माध्यम से सीपीयू के साथ काम करती है?

+2

अन्य थ्रेडिंग प्रतिमान के साथ ओपनएमपी मिश्रण, उदा। 'std :: thread', एक निर्दिष्ट व्यवहार नहीं है। यह विनिर्देशन में स्पष्ट रूप से वर्जित नहीं है। लेकिन फिर भी यह काम करता है या नहीं, बहुत कार्यान्वयन-विशिष्ट है। ओपीएमपी या अन्य थ्रेडिंग प्रतिमान के साथ एमपीआई का मिश्रण ठीक है, जब तक एमपीआई को थ्रेड के लिए समर्थन के साथ ठीक से शुरू किया जाता है। –

उत्तर

9

ओएस थ्रेड प्रदान करता है (नए धागे बनाने के लिए सिस्कोल; शेड्यूलिंग सेवाएं)।

यूनिक्स libc में ओएस थ्रेड के आसपास बहुत उपयोगी कार्यों (जैसे म्यूटेक्स, कॉन्ड वर्र्स इत्यादि) के साथ रैपर है। ऐसी प्रणाली पुस्तकालयों में से आमतौर पर बाहरी इंटरफ़ेस "POSIX धागे" (pthread_* नामित कार्यों) है: http://en.wikipedia.org/wiki/POSIX_Threads

विंडोज का अपना मुश्किल से उपयोग सूत्रण एपीआई (WINAPI के CreateThread, आदि) है। लेकिन वहाँ Windows API आसपास रैपर POSIX धागे की तरह एपीआई कुछ पाने के लिए कर रहे हैं (उदाहरण के लिए वहाँ mingw32 और cygwin के लिए इस तरह के पुस्तकालयों है, जाँच wikipedia section)

सी ++ 11 std::thread, को बढ़ावा देने के boost::thread सिर्फ आधुनिक ओएस स्वतंत्र प्रणाली सूत्रण के आसपास रैपर एपीआई। वे पोर्टेबल प्रोग्राम बनाने के लिए उपयोग किए जाते हैं जिन्हें #ifdef नरक और/या सिस्टम थ्रेडिंग लाइब्रेरी के आस-पास अपने कस्टम रैपर लिखने के बिना किसी समर्थित प्लेटफॉर्म पर संकलित किया जा सकता है। यदि आप नया प्रोग्राम बना रहे हैं, तो इस तरह से उपयोग करने पर विचार करें।

कई अन्य थ्रेडिंग रैपर हैं, उदा। क्यूटी या जीटीके + जैसे ग्राफिक पुस्तकालयों में शामिल है।

ओपनएमपी कार्यान्वयन में आंतरिक समर्थन लाइब्रेरी है (उदाहरण के लिए, जीसीसी में libgomp है) जो सिस्टम/libc थ्रेडिंग एपीआई का उपयोग करता है, उदाहरण के लिए libgomp POSIX धागे का उपयोग करता है। कुछ कार्यान्वयन में असेंबली (एम: एन थ्रेडिंग मॉडल) के माध्यम से उपयोगकर्ता-स्थान थ्रेड स्विचिंग भी शामिल हो सकती है।

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

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