मैं C ++ में एक समानांतर गतिशील ग्राफ़ लाइब्रेरी की तलाश कर रहा हूं


11

नमस्ते

मैंने नेटवर्क एल्गोरिदम (पायथन), जंग और वाईफाइल्स (जावा) जैसे फ्रेमवर्क का उपयोग करके ग्राफ एल्गोरिदम के क्षेत्र में काम किया है । मैं अब समानांतर और उच्च परफ्यूमेंस कंप्यूटिंग के क्षेत्र में प्रवेश कर रहा हूं। एक नई परियोजना के लिए, मैं निम्नलिखित विशेषताओं के साथ C ++ ग्राफ़ लाइब्रेरी की तलाश कर रहा हूँ:

  • एक सहज ज्ञान युक्त अंतरफलक है जो एल्गोरिथ्म विकास को सक्षम करता है
  • गतिशील संचालन का समर्थन करता है: उदाहरण के लिए मनमाना नोड / किनारे सम्मिलन और विलोपन
  • समानांतरकरण का समर्थन करता है: उदाहरण के लिए प्रोग्रामर को मल्टीथ्रेडिंग के साथ आने वाले मुद्दों से बचाता है
  • एक कम मेमोरी ओवरहेड है और उच्च प्रदर्शन कंप्यूटिंग के लिए उपयुक्त है

कृपया कुछ पुस्तकालयों का सुझाव दें और इन मानदंडों के साथ-साथ पेशेवरों और विपक्षों पर चर्चा करें।

जवाबों:


11

ग्राफ लाइब्रेरी और नींबू को बढ़ावा दें

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

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

LEMON के रिपॉजिटरी के एक त्वरित ब्राउज़ से पता चलता है कि IBM BlueGene सुपरकंप्यूटिंग टीम से भागीदारी है, लेकिन मुझे MPI के लिए कोई निर्भरता या कॉन्फ़िगरेशन नहीं दिखता है, इसलिए यह केवल एक सीरियल ग्राफ लाइब्रेरी होने की संभावना है।

लोड-बैलेंसिंग और डायनामिक ग्राफ (पुनः) -प्रदर्शन

यदि आप लोड-बैलेंसिंग और डायनामिक ग्राफ़ विभाजन में रुचि रखते हैं, तो आपके पास कई और विकल्प हैं। शायद सबसे प्रसिद्ध पुस्तकालय ParMETIS है , जिसे पिछले साल संस्करण 4 में अपडेट किया गया था। ParMETIS में वर्टेक्स-आधारित वेटिंग की सुविधा है, जो बहु-भौतिकी सिमुलेशन के लिए महत्वपूर्ण है।

ParMETIS का यूरोपीय प्रतियोगी PT- स्कॉच है , जिसने कुछ प्रकार की समस्याओं के लिए बेहतर प्रदर्शन किया है, लेकिन, ParMETIS के समान, अक्सर अद्यतन नहीं किया जाता है।

आपको ज़ोल्टन में भी रुचि हो सकती है , जो सी ++ में वैज्ञानिक कंप्यूटिंग के लिए सैंडिया नेशनल लैबोरेट्रीज़ ट्रिलिनों मेटा-पैकेज का हिस्सा है। ज़ोल्टन ने अपने स्वयं के पदानुक्रमित विभाजन और पैरामेटिस और पीटी-स्कॉच दोनों में इंटरफेस की सुविधा प्रदान की है।

Graph500

यदि आप समवर्ती खोज, अनुकूलन (एकल स्रोत सबसे छोटा रास्ता), और किनारे-उन्मुख (अधिकतम स्वतंत्र सेट) के रक्तस्राव के किनारे पर काम कर रहे हैं, तो आप स्वतंत्र रूप से उपलब्ध ग्राफ 500 बेंचमार्क में भी रुचि लेंगे


1
प्रश्न: समानांतर बूस्ट ग्राफ लाइब्रेरी वितरित-स्मृति समानता के लिए है। OpenMP के साथ साझा-मेमोरी समांतरकरण के लिए साधारण बूस्ट ग्राफ़ लाइब्रेरी उपयुक्त है?
१२:१२

@clstaudt - यह समस्या-विशिष्ट होने जा रहा है। आपको बेहतर उत्तर के लिए अपने एल्गोरिथ्म के विवरण में गहराई से उतरना होगा (और यह शायद एक नया प्रश्न होगा)।
एरन अहमदिया

5

शायद, बूस्ट ग्राफ लाइब्रेरी वह है जिसे आप खोज रहे हैं। इसमें ग्राफविज़ के डॉट प्रारूप में निर्दिष्ट ग्राफ़ को पढ़ने के लिए एक पार्सर है। जबकि मैं वास्तव में मेमोरी ओवरहेड के बारे में नहीं जानता, यह समानांतरकरण के लिए एक संस्करण प्रदान करता है ।

एक अन्य ग्राफ लाइब्रेरी LEMON है, लेकिन मैं वास्तव में इसे नहीं जानता हूं और यदि इसे समानांतरकरण के लिए समर्थन है, तो यह विज्ञापित नहीं है। यह वेबसाइट एक अच्छा प्रभाव डालती है;)


LEMON मुझे भी अच्छा लगता है, लेकिन मुझे इस बात का बिलकुल भी अंदाजा नहीं है कि क्या मैं इसे साझा-मेमोरी समानांतर कोड (ओपनएमपी) के लिए उपयोग कर सकता हूं।
clstaudt

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

5

मैं यह भी कहना चाहूंगा कि समानता के लिए डिज़ाइन किया गया एक गतिशील ग्राफ़ डेटा संरचना STINGER का उल्लेख करता है । वेबसाइट के अनुसार, यह निम्नलिखित उद्देश्यों के लिए डिज़ाइन किया गया है:

पोर्टेबिलिटी: एसटीपी के लिए लिखे गए एल्गोरिदम को आसानी से कई भाषाओं और रूपरेखाओं के बीच अनुवादित / पोर्ट किया जा सकता है

उत्पादकता: STINGER को एक सामान्य अमूर्त डेटा संरचना प्रदान करनी चाहिए, ताकि बड़े ग्राफ़ समुदाय एक दूसरे के अनुसंधान विकास का लाभ उठा सकें। यह विरल और घने मेट्रिसेस के संख्यात्मक एल्गोरिथम समुदाय निहित उपयोग के दर्शन में समान है।

प्रदर्शन: यह माना जाता है कि हर ग्राफ एल्गोरिथ्म के लिए कोई एकल डेटा संरचना इष्टतम नहीं है। STINGER का उद्देश्य एक समझदार डेटा संरचना को कॉन्फ़िगर करना है जो अधिकांश एल्गोरिदम को अच्छी तरह से चला सकता है। विशिष्ट ग्राफ़ एल्गोरिदम के व्यापक सेट में किसी अन्य सामान्य डेटा संरचना के साथ तुलना करने पर STINGER के उपयोग के लिए कोई महत्वपूर्ण प्रदर्शन में कमी नहीं होनी चाहिए। STINGER को एक साझा स्मृति पता स्थान मान लेना चाहिए, और अनुक्रमिक या समानांतर एल्गोरिदम दोनों की अनुमति देना चाहिए। डेटा संरचना को समानांतर एल्गोरिदम को जहां संभव हो सके, समवर्ती का शोषण करने की अनुमति देनी चाहिए।

यह लेमन या बूस्ट ग्राफ लाइब्रेरी के रूप में सामान्य नहीं है और विकास के पहले चरण में है। यदि आप इसकी जांच करते हैं, तो मुझे आपकी टिप्पणियों में दिलचस्पी होगी।


जॉर्जिया टेक में डेविड बैडर की लैब से बाहर निकलता है। वह ग्राफ 500 पर अपने काम के लिए एचपीसी समुदाय में अच्छी तरह से जाना जाता है, इस एक का उल्लेख करने के लिए धन्यवाद!
एरन अहमदिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.