2012-12-29 35 views
7

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

उत्तर

4

pthread ओएस इंफ्रास्ट्रक्चर के ऊपर एक पतला रैपर है। यह आपको किसी दिए गए थ्रेड मुख्य फ़ंक्शन के साथ धागा बनाने की अनुमति देता है, और कुछ सिंक्रनाइज़ेशन प्राइमेटिव्स (म्यूटेक्स सेमफोर इत्यादि)। लिनक्स पर्थ्रेड के तहत clone(2) सिस्टम कॉल के शीर्ष पर लागू किया गया है। विंडोज के तहत समकक्ष को CreateThread कहा जाता है। अन्य सभी थ्रेडिंग सामान इस आधार के शीर्ष पर बनाए गए हैं।

इंटेल टीबीबी उच्च स्तर है, यह parallel_for औरदेता है और ओपनएमपी के समान उच्च स्तरीय संरचनाओं को समान करता है लेकिन लाइब्रेरी के रूप में लागू किया जाता है जो भाषा विस्तार नहीं होता है।

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

मेरी सलाह तब तक पठ्रेड लाइब्रेरी सीखना होगा जब तक कि आप इसे पूरी तरह से समझ न लें, और उसके बाद उच्च स्तर की लाइब्रेरी देखें।

+0

ओपनएमपीआई संदेश पासिंग इंटरफ़ेस का एक विशेष कार्यान्वयन है। –

2

टीबीबी आपको देशी थ्रेडिंग कार्यक्षमता के शीर्ष पर पोर्टेबल कोड लिखने की अनुमति देता है, इसलिए यह कोड को विभिन्न ओएस आर्किटेक्चर पर अधिक पोर्टेबल बनाता है। मुझे नहीं लगता कि यह pthread से "अधिक कुशल" है।

मैंने ओपन एमपी का व्यक्तिगत रूप से उपयोग नहीं किया है, लेकिन अतीत में मैंने ओपन एमपी (उन प्रोसेसर पर एक तकनीकी विशेषज्ञ के रूप में) का उपयोग कर डेवलपर्स के साथ काम किया है, और ऐसा लगता है कि कुछ चीजों के लिए उचित रूप से अच्छा काम करता है, लेकिन दूसरों को अपना कोड लिखने के बजाय खुले एमपी में उपयोग करना कठिन होता है। यह सब इस बात पर निर्भर करता है कि आप वास्तव में क्या कर रहे हैं। पाठ्यक्रम के ओपनएमपी के साथ लाभों में से एक यह है कि आप ओपनएमपी विकल्प के बिना कोड को हमेशा पुन: संकलित कर सकते हैं, और कोड सीधे काम करता है जैसा कि आप उम्मीद करते हैं [लेकिन बिल्कुल नहीं फैलता]।

प्रोग्राम थ्रेडिंग दृष्टिकोण के साथ, आप थ्रेड पर क्या होता है, इस पर अधिक नियंत्रण हो सकता है। लेकिन इसका मतलब भी बहुत अधिक काम है ...