ฉันกำลังมองหาไลบรารีกราฟแบบไดนามิกแบบขนานใน C ++


11

สวัสดีชุมชน Scicomp

ฉันทำงานในส่วนของอัลกอริธึมกราฟโดยใช้เฟรมเวิร์กเช่นNetworkX (Python), JUNGและYFiles (Java) ตอนนี้ฉันกำลังเข้าสู่การคำนวณแบบขนานและประสิทธิภาพสูง สำหรับโครงการใหม่ฉันกำลังมองหาไลบรารีกราฟ C ++ ที่มีคุณสมบัติดังต่อไปนี้:

  • มีอินเทอร์เฟซที่ใช้งานง่ายที่ช่วยให้การพัฒนาอัลกอริทึม
  • รองรับการทำงานแบบไดนามิก: เช่นการแทรกและการลบโหนด / ขอบโดยพลการ
  • รองรับการขนาน: เช่นป้องกันโปรแกรมเมอร์จากปัญหาที่เกิดขึ้นกับมัลติเธรด
  • มีค่าใช้จ่ายหน่วยความจำต่ำและเหมาะสำหรับการคำนวณประสิทธิภาพสูง

โปรดแนะนำห้องสมุดบางแห่งและหารือเกี่ยวกับเกณฑ์เหล่านี้รวมถึงข้อดีข้อเสีย

คำตอบ:


11

เพิ่มห้องสมุดกราฟและ LEMON

ขณะที่แดเนียลกล่าวถึงเขาในคำตอบที่ครอบคลุมที่เต็มรูปแบบมากที่สุดทั่วไปไลบรารี c ++ เป็นBoost ห้องสมุดกราฟ มีส่วนขยายหน่วยความจำแบบกระจายใหม่ที่มีความสามารถในการทำอัลกอริธึมพื้นฐานบางอย่างเช่นการค้นหาแบบกว้างแรกและลึกแรก, การขยายต้นไม้น้อยที่สุดและค้นหาส่วนประกอบที่เชื่อมต่อ แต่ฉันไม่คุ้นเคยกับโครงการใหม่ ห้องสมุด Boost Graph นั้นมีชื่อเสียงและใช้ในหลายโครงการทั่วโลก

หากคุณกำลังทำงานกราฟ HPC พื้นฐานคุณอาจต้องการเริ่มต้นด้วย Boost Graph Library แต่โปรดทราบว่าคอมไพเลอร์ HPC C ++ หลายคนมีปัญหากับ Boost (แม้จะมีการยึดมั่นอย่างเข้มงวดกับมาตรฐาน C ++) และคุณอาจต้องใช้ Boost รุ่นเก่าหรือคอมไพเลอร์ที่ไม่ใช่ผู้ขายเช่น GCC เพื่อให้มันทำงานบนระบบ HPC

การเรียกดูอย่างรวดเร็วของที่เก็บของ LEMON แสดงให้เห็นว่ามีการมีส่วนร่วมจากทีมซูเปอร์คอมพิวเตอร์ IBM BlueGene แต่ฉันไม่เห็นการพึ่งพาหรือการกำหนดค่าใด ๆ สำหรับ MPI ดังนั้นนี่น่าจะเป็นไลบรารีกราฟอนุกรมเท่านั้นในขณะนี้

โหลดบาลานซ์และกราฟไดนามิก (อีกครั้ง) - การแบ่งพาร์ติชัน

หากคุณมีความสนใจในการทำโหลดบาลานซ์และการแบ่งกราฟแบบไดนามิกคุณมีตัวเลือกมากมาย บางทีห้องสมุดที่มีชื่อเสียงที่สุดคือParMETISซึ่งได้รับการอัพเดตเป็นเวอร์ชั่น 4 เมื่อปีที่แล้ว ParMETIS มีการถ่วงน้ำหนักตามจุดยอดซึ่งเป็นสิ่งสำคัญสำหรับการจำลองทางฟิสิกส์

คู่แข่งในยุโรปของ ParMETIS คือPT-Scotchซึ่งมีประสิทธิภาพที่ดีกว่าสำหรับปัญหาบางประเภท แต่คล้ายกับ ParMETIS ซึ่งไม่ได้รับการปรับปรุงบ่อยครั้ง

คุณอาจสนใจZoltanซึ่งเป็นส่วนหนึ่งของแพ็คเกจ meta-Sandia National Laboratories Trilinos สำหรับการคำนวณทางวิทยาศาสตร์ใน C ++ Zoltan มีพาร์ทิชันและอินเทอร์เฟซลำดับชั้นของตัวเองในทั้ง ParMETIS และ PT-Scotch

Graph500

หากคุณกำลังทำงานอยู่บนขอบเลือดของการค้นหาพร้อมกันเพิ่มประสิทธิภาพ (แหล่งเดียวเส้นทางที่สั้นที่สุด) และขอบที่มุ่งเน้น (ชุดอิสระสูงสุด) คุณจะมีความสนใจในใช้ได้อย่างอิสระมาตรฐาน Graph500


1
คำถาม: ไลบรารีกราฟ Boost แบบขนานมีไว้สำหรับการขนานของหน่วยความจำแบบกระจาย Boost Graph Library ทั่วไปเหมาะสำหรับการแบ่งหน่วยความจำแบบแบ่งใช้กับ OpenMP หรือไม่
clstaudt

@clstaudt - นี่จะเป็นปัญหาเฉพาะ คุณจะต้องเจาะลึกลงไปในรายละเอียดของอัลกอริทึมของคุณเพื่อรับคำตอบที่ดีขึ้น (และอาจเป็นคำถามใหม่)
Aron Ahmadia

5

บางทีBoost Boost Libraryคือสิ่งที่คุณกำลังมองหา มีตัวแยกวิเคราะห์เพื่ออ่านกราฟที่ระบุในรูปแบบ DOT ของ GraphViz ในขณะที่ผมไม่ทราบจริงๆเกี่ยวกับค่าใช้จ่ายในหน่วยความจำก็ไม่ให้แตกต่างสำหรับแบบขนาน

ห้องสมุดกราฟอีกอันคือLEMONแต่ฉันไม่รู้จริง ๆ และถ้ามันรองรับการขนานมันก็ไม่ได้โฆษณา มันเป็นเว็บไซต์ที่สร้างความประทับใจที่ดีแม้ว่า;)


LEMON ก็ดูดีสำหรับฉันเช่นกัน แต่ฉันก็ไม่รู้เหมือนกันว่าฉันสามารถใช้มันสำหรับรหัสขนานหน่วยความจำแบบแชร์ (OpenMP) ได้หรือไม่
clstaudt

ฉันไม่ได้ที่จะซื่อสัตย์ แต่บางทีคุณสามารถใช้มันเพื่อประกาศโครงสร้างข้อมูลที่ใช้ร่วมกันสำหรับปัญหาของคุณและเรียกใช้อัลกอริทึมในเธรดที่แตกต่างกัน บางทีคุณอาจแบ่งปัญหาของคุณออกเป็นปัญหาย่อยที่เหมาะสม
Daniel Eberts

5

ฉันต้องการพูดถึงSTINGERซึ่งเป็นโครงสร้างข้อมูลกราฟแบบไดนามิกที่ออกแบบมาสำหรับการขนาน ตามเว็บไซต์มันถูกออกแบบมาเพื่อวัตถุประสงค์ดังต่อไปนี้:

ความสามารถในการพกพา: อัลกอริทึมที่เขียนขึ้นสำหรับ STINGER สามารถแปล / พอร์ตได้อย่างง่ายดายระหว่างหลายภาษาและกรอบงาน

ผลผลิต: STINGER ควรจัดทำโครงสร้างข้อมูลนามธรรมทั่วไปเพื่อให้ชุมชนกราฟขนาดใหญ่สามารถใช้ประโยชน์จากการพัฒนางานวิจัยของกันและกันได้อย่างรวดเร็ว สิ่งนี้มีความคล้ายคลึงกันในปรัชญาของอัลกอริธึมเชิงตัวเลขซึ่งชุมชนใช้การฝึกอบรมแบบเบาบางและหนาแน่น

ประสิทธิภาพการทำงาน: เป็นที่ยอมรับว่าไม่มีโครงสร้างข้อมูลใดที่เหมาะสมที่สุดสำหรับอัลกอริทึมกราฟทุกตัว วัตถุประสงค์ของ STINGER คือการกำหนดค่าโครงสร้างข้อมูลที่เหมาะสมซึ่งสามารถเรียกใช้อัลกอริธึมส่วนใหญ่ได้ดี ไม่ควรลดประสิทธิภาพอย่างมีนัยสำคัญสำหรับการใช้ STINGER เมื่อเปรียบเทียบกับโครงสร้างข้อมูลทั่วไปอื่น ๆ ในชุดกราฟอัลกอริทึมทั่วไป STINGER ควรถือว่าพื้นที่ที่อยู่หน่วยความจำที่ใช้ร่วมกันและอนุญาตให้ทั้งอัลกอริธึมตามลำดับหรือขนาน โครงสร้างข้อมูลควรอนุญาตให้อัลกอริทึมแบบขนานใช้ประโยชน์จากการเกิดพร้อมกันหากเป็นไปได้

มันไม่ธรรมดาเหมือน LEMON หรือ Boost Graph Library และในขั้นตอนก่อนหน้าของการพัฒนา หากคุณตรวจสอบมันฉันจะสนใจในความคิดเห็นของคุณ


STINGER ออกมาจากห้องทดลองของ David Bader ที่ Georgia Tech เขาเป็นที่รู้จักกันดีในชุมชน HPC สำหรับการทำงานกับ Graph500 ขอบคุณที่พูดถึงสิ่งนี้!
Aron Ahmadia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.