2008-09-20 10 views
24

इंटेल की Threading Building Blocks (TBB) ओपन सोर्स लाइब्रेरी वास्तव में दिलचस्प लगती है। भले ही इस विषय के बारे में O'Reilly Book भी है, लेकिन मैं इसका उपयोग करने वाले बहुत से लोगों के बारे में नहीं सुनता हूं। मैं यूनिक्स (मैक, लिनक्स, इत्यादि) वातावरण में कुछ बहु-स्तर समानांतर अनुप्रयोगों (एमपीआई + धागे) के लिए इसका उपयोग करने में रूचि रखता हूं। इसके लायक होने के लिए, मुझे उच्च प्रदर्शन कंप्यूटिंग/संख्यात्मक तरीकों के अनुप्रयोगों में रुचि है।इंटेल के थ्रेडिंग बिल्डिंग ब्लॉक के साथ कोई अनुभव?

क्या किसी को टीबीबी के साथ अनुभव है? क्या यह अच्छी तरह से काम करता है? क्या यह काफी पोर्टेबल है (जीसीसी और अन्य कंपाइलर्स सहित)? क्या प्रतिमान आपके द्वारा लिखे गए कार्यक्रमों के लिए अच्छा काम करता है? क्या मुझे अन्य पुस्तकालयों में देखना चाहिए?

+0

मेरी इच्छा है कि मेरे पास इनके साथ खेलने के लिए कुछ समय हो, लेकिन तब तक मैं वास्तव में टीबीबी के साथ अनुभवों के बारे में सुनने में रूचि रखूंगा। – tgamblin

उत्तर

12

मैंने इसे हमारे कोड बेस में पेश किया है क्योंकि जब हम 16 कोर मशीन पर जाते हैं तो हमें उपयोग करने के लिए एक bettor malloc की आवश्यकता होती है। 8 के साथ और इसके तहत एक महत्वपूर्ण मुद्दा नहीं था। यह हमारे लिए अच्छा काम किया है। हम अगले दानेदार समवर्ती कंटेनर का उपयोग करने की योजना बना रहे हैं। आदर्श रूप से हम उत्पाद के वास्तविक मांस का उपयोग कर सकते हैं, लेकिन इसके लिए पुनर्विचार की आवश्यकता है कि हम अपना कोड कैसे बनाते हैं।मुझे वास्तव में टीबीबी में विचार पसंद हैं, लेकिन कोड बेस पर रीट्रोफिट करना आसान नहीं है।

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

हम विजुअल स्टूडियो में काम करते हैं और यह ठीक काम करता है। यह मूल रूप से लिनक्स/पर्थ्रेड के लिए लिखा गया था, इसलिए यह वहां भी ठीक है।

2

मैंने टीबीबी में देखा है लेकिन कभी भी इसे किसी प्रोजेक्ट में उपयोग नहीं किया है। मैंने ZThread से अधिक लाभ (मेरे उद्देश्यों के लिए) नहीं देखा। एक संक्षिप्त और कुछ हद तक दिनांकित अवलोकन here पाया जा सकता है।

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

एक नजर के लायक है।

3

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

ओपन सोर्स संस्करण में थ्रेडिंग बिल्डिंग ब्लॉक (टीबीबी), (एक नया वाणिज्यिक संस्करण, $ 29 9 है, अभी तक मतभेदों को नहीं जानते) जीएनयू जनरल पब्लिक लाइसेंस संस्करण 2 तथाकथित "रनटाइम अपवाद" " (है कि केवल मुफ्त सॉफ्टवेयर बनाने पर उपयोग के लिए विशिष्ट है।) मैं दूसरे क्रम अपवाद कि LGPL दृष्टिकोण करने का प्रयास है लेकिन वाणिज्यिक उपयोग को सक्षम करने और स्थिर इस जोड़ने नहींहै अब मामला है देखा है।

मैं केवल यह लिख रहा हूं क्योंकि मैंने पुस्तकालयों के लाइसेंस की जांच करने का मौका लिया है और उनको उपयोग करने के इरादे के आधार पर चयन के लिए भी विचार करना चाहिए।


Txs, Jihn इस अद्यतन उनका कहना है के लिए ...

+0

टीबीबी अब अपाचे 2.0 का ओपन-सोर्स लाइसेंस (https://www.threadingbuildingblocks.org/faq/10) के रूप में उपयोग करता है। – Jeff

3

मैं TBB का इस्तेमाल किया है संक्षेप में, और शायद यह भविष्य में और अधिक का उपयोग करेगा। मुझे इसका उपयोग करना पसंद आया, सबसे महत्वपूर्ण बात यह है कि आपको सी ++ के मैक्रोज़/एक्सटेंशन से निपटना नहीं है, लेकिन भाषा के भीतर ही रहना है। इसके सुंदर पोर्टेबल भी। मैंने इसे विंडोज़ और लिनक्स दोनों पर इस्तेमाल किया है। हालांकि एक बात: टीबीबी का उपयोग करके धागे के साथ काम करना मुश्किल है, आपको कार्यों के संदर्भ में विचार करना होगा (जो वास्तव में एक अच्छी बात है)। इंटेल टीबीबी नंगे ताले के उपयोग का समर्थन नहीं करेगा (यह इस कठिन बना देगा)। लेकिन कुल मिलाकर, यह मेरा प्रारंभिक अनुभव है।

मैं भी ओपनएमपी 3 पर एक नज़र रखने की सिफारिश करता हूं।

5

मैं संख्यात्मक कंप्यूटिंग नहीं कर रहा हूं लेकिन मैं डेटा खनन (सोच क्लस्टरिंग और वर्गीकरण) के साथ काम करता हूं, और हमारे वर्कलोड शायद समान हैं: सभी डेटा स्थैतिक हैं और आपके पास कार्यक्रम की शुरुआत में है। मैंने इंटेल के टीबीबी की संक्षेप में जांच की है और मुझे अपनी जरूरतों के लिए अधिक जानकारी मिली है। कच्चे pthread- आधारित कोड से शुरू करने के बाद, मैं OPENMP पर स्विच किया और पठनीयता और प्रदर्शन के बीच सही मिश्रण मिला।

1

में थ्रेडिंग बिल्डिंग ब्लॉक्स (TBB) खुला स्रोत संस्करण, (वहाँ है एक नए व्यावसायिक संस्करण, $ 299, नहीं अभी तक मतभेद जानते हो) जीएनयू जनरल पब्लिक लाइसेंस संस्करण 2 है साथ एक तथाकथित "रनटाइम अपवाद" (कि केवल मुफ्त सॉफ्टवेयर बनाने पर उपयोग के लिए विशिष्ट है।) मैं अन्य रनटाइम अपवाद कि प्रयास LGPL लेकिन कमर्शिअल उपयोग को सक्षम करने के दृष्टिकोण से देखा और स्थिर किया है इस लिंक नहीं है मुकदमा।

इस question थ्रेडिंग बिल्डिंग ब्लॉक के अनुसार वाणिज्यिक उपयोग के साथ प्रति-बाएं प्रतिबंधों के बिना प्रयोग योग्य है।

2

मैं एक परियोजना में टीबीबी का उपयोग करता हूं। धागे की तुलना में इसका उपयोग करना आसान लग रहा था। ऐसे कार्य हैं जिन्हें समानांतर में चलाया जा सकता है। एक कार्य सिर्फ आपके समानांतर subroutine के लिए एक कॉल है। भार संतुलन स्वचालित रूप से किया जाता है। यही कारण है कि मैं इसे उच्च स्तर की समांतरता पुस्तकालय के रूप में स्वीकार करता हूं। मैंने 4 कोर इंटेल प्रोसेसर पर अधिक काम किए बिना 2.5x गति प्राप्त की। उदाहरण हैं, वे मंचों पर सवालों का जवाब देते हैं और इसे बनाए रखा जाता है और यह मुफ़्त है।

2

पोर्टेबिलिटी

टीबीबी पोर्टेबल है। यह इंटेल और एएमडी (यानी x86) प्रोसेसर, आईबीएम पावरपीसी और पावर प्रोसेसर, एआरएम प्रोसेसर, और संभवतः अन्य का समर्थन करता है। यदि आप build directory में देखते हैं, तो आप बिल्ड सिस्टम समर्थन की सभी कॉन्फ़िगरेशन देख सकते हैं, जिसमें ऑपरेटिंग सिस्टम (लिनक्स, विंडोज, एंड्रॉइड, मैकोज़, आईओएस, फ्रीबीएसडी, एईक्स इत्यादि) और कंपाइलर्स (जीसीसी, इंटेल) की एक विस्तृत श्रृंखला शामिल है। , क्लैंग/एलएलवीएम, आईबीएम एक्सएल, आदि)। मैंने पीजीआई सी ++ कंपाइलर के साथ टीबीबी की कोशिश नहीं की है और पता है कि यह क्रे सी ++ कंपाइलर (2017 के रूप में) के साथ काम नहीं करता है।

कुछ साल पहले, मैं आईबीएम ब्लू जीन सिस्टम को टीबीबी बंद करने के प्रयास का हिस्सा था। स्टेटिक लिंकिंग एक चुनौती थी, लेकिन अब big_iron.inc बिल्ड सिस्टम सहायक द्वारा संबोधित किया गया है। अन्य मुद्दे जीसीसी (4.1 और 4.4) के अपेक्षाकृत प्राचीन संस्करणों का समर्थन कर रहे थे और यह सुनिश्चित करना कि पावरपीसी परमाणु काम कर रहे थे। मुझे उम्मीद है कि वर्तमान में असमर्थित आर्किटेक्चर को पोर्टिंग करना प्लेटफॉर्म पर अपेक्षाकृत सरल होगा जो जीसीसी और पॉज़िक्स के साथ संगत या संगत है।

समुदाय कोड में प्रयोग

मैं कम से कम दो एचपीसी एप्लीकेशन फ्रेमवर्क TBB का उपयोग करता है के बारे में पता कर रहा हूँ:

मैं कैसे MOOSE का उपयोग करता है पता नहीं है टीबीबी, लेकिन मैडनेस अपने कार्य कतार और स्मृति आवंटक के लिए टीबीबी का उपयोग करता है। अन्य सूत्रण मॉडल

मैं व्यक्तिगत रूप से Parallel Research Kernels परियोजना है, जो भीतर मैं OpenMP, OpenCL, Kokkos, राजा को TBB तुलना में है, सी ++ 17 समानांतर एसटीएल, और अन्य मॉडल में TBB का इस्तेमाल किया है बनाम

प्रदर्शन। विवरण के लिए C++ subdirectory देखें।

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

PRK stencil

पूर्ण प्रकटीकरण: मैं एक अनुसंधान/pathfinding क्षमता में इंटेल के लिए काम करते हैं।

1

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

मैंने छवि स्कैन लाइनों पर समानांतर_for लूप में लूप के लिए मौजूदा छवि प्रसंस्करण को तेज करने के लिए टीबीबी का उपयोग किया है (कम से कम 2-4 स्कैन लाइन 'अनाज' आकार के रूप में)। यह बहुत सफल रहा है। इसके लिए आपके लूप बॉडी को एक मनमानी सूचकांक को संसाधित करने के लिए लिखा जाता है, यह मानने के बजाय कि प्रत्येक लूप बॉडी को अनुक्रमिक रूप से संसाधित किया जाता है (उदा। पॉइंटर्स जो प्रत्येक लूप पुनरावृत्ति के बीच बढ़े होते हैं)।

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

यह एक शक्तिशाली लाभ है कि यह टीबीबी आधारित कोड पोर्टेबल बना रहता है, यह अन्य थ्रेडिंग रणनीतियों का उपयोग करते हुए एक ही प्रक्रिया में अन्य कोड में हस्तक्षेप नहीं करता है और बाद में इसे उच्च या निम्न स्तर पर मल्टीप्रोसेसिंग रणनीतियों के साथ जोड़ा जा सकता है (उदाहरण के लिए टीबीबी समानांतर_for कोड को टीबीबी मल्टीप्रोसेसिंग पाइपलाइन में फ़िल्टर से बुलाया जा सकता है)।

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