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