Я шукаю паралельну динамічну бібліотеку графіків на C ++


11

Привіт спільноті scicomp,

Я працював у галузі графічних алгоритмів, використовуючи рамки, такі як NetworkX (Python), JUNG та YFiles (Java). Зараз я входжу в область паралельних і високопродуктивних обчислень. Для нового проекту я шукаю бібліотеку графіків C ++ із такими можливостями:

  • має інтуїтивний інтерфейс, який дозволяє розробляти алгоритми
  • підтримує динамічні операції: наприклад, довільні вставлення вузлів / ребер та видалення
  • підтримує паралелізацію: наприклад, захищає програміста від проблем, що виникають при багатопотоковому читанні
  • має низькі накладні витрати на пам'ять і підходить для обчислень з високою продуктивністю

Пропонуйте запропонувати деякі бібліотеки та обговорити ці критерії, а також плюси та мінуси.

Відповіді:


11

Бібліотека підвищення графіків та LEMON

Як згадує Даніель у своїй вичерпній відповіді , найбільш повнофункціональною загальною бібліотекою C ++ є бібліотека Boost Graph . Існує нове розширення з розподіленою пам’яттю, яке може виконувати деякі основні алгоритми, такі як пошук по ширині та глибині перших, мінімальне охоплення дерев та пошук підключених компонентів, але я не дуже знайомий з новим проектом. Сама бібліотека Boost Graph має високу репутацію та використовується у багатьох проектах по всьому світу.

Якщо ви виконуєте основні роботи з графіком HPC, ви можете почати з бібліотеки Boost Graph, але пам’ятайте, що багато компіляторів HPC C ++ мають труднощі з Boost (незважаючи на досить чітке дотримання стандартів C ++), і вам може знадобитися використовувати старіша версія Boost або компілятор від постачальника, наприклад GCC, щоб він працював над системами HPC.

Швидкий перегляд сховищ LEMON свідчить про те, що команда суперкомп'ютерів IBM BlueGene залучає участь, але я не бачу ніяких залежностей і конфігурацій для MPI, тож це, мабуть, лише бібліотека послідовних графіків.

Балансування навантаження та динамічний графік (пере) розподіл

Якщо ви зацікавлені в балансуванні навантаження та динамічному розподілі графіка, у вас є ще кілька варіантів. Мабуть, найвідоміша бібліотека - ParMETIS , яка була оновлена ​​до версії 4 минулого року. ParMETIS має зважування на основі вершин, що важливо для моделювання багатофізичної фізики.

Європейським конкурентом ParMETIS є PT-Scotch , який має кращі показники для певних типів проблем, але, як і ParMETIS, не оновлюється часто.

Можливо, вас також зацікавить Золтан , який є частиною метапакету Sandia National Laboratories Trilinos для наукових обчислень на C ++. Zoltan має власні ієрархічні учасники та інтерфейси як для ParMETIS, так і для PT-Scotch.

Графік500

Якщо ви працюєте над кровотоком під час паралельного пошуку, оптимізації (єдиний найкоротший шлях) та орієнтованого на край (максимальний незалежний набір), вас також зацікавить вільно доступний орієнтир Graph500 .


1
Питання: Бібліотека графіків паралельного підсилення призначена для паралелізму розподіленої пам'яті. Чи підходить звичайна бібліотека графіків Boost для паралелізації спільної пам'яті з OpenMP?
clstaudt

@clstaudt - це буде специфічно для проблеми. Для кращої відповіді вам доведеться заглибитися в деталі свого алгоритму (і це, мабуть, буде новим питанням).
Арон Ахмадія

5

Можливо, бібліотека Boost Graph - це те, що ви шукаєте. Він має аналізатор для читання графіків, визначених у форматі DOT GraphViz. Хоча я насправді не знаю про накладні об'єм пам'яті, він пропонує варіант для паралелізації .

Ще одна бібліотека графіків - LEMON, але я її не знаю, і якщо вона підтримує паралелізацію, вона не рекламується. Це веб-сайт справляє хороше враження;)


LEMON мені теж добре виглядає, але я абсолютно не маю уявлення, чи можу я використовувати його для паралельного коду спільної пам'яті (OpenMP).
clstaudt

Я ні, якщо чесно. Але, можливо, ви можете використовувати його для оголошення спільних структур даних для вашої проблеми та запуску алгоритмів у різних потоках. Можливо, ви можете поділити свою проблему на відповідні підпрограми.
Даніель Ебертс

5

Я також хотів би згадати STINGER , динамічну структуру даних графіків, розроблену для паралелізму. За даними веб-сайту, він розроблений для досягнення наступних цілей:

Переносимість: Алгоритми, написані для STINGER, можна легко перекладати / переносити між декількома мовами та рамками

Продуктивність: СТІНГЕР повинен забезпечувати загальну абстрактну структуру даних, щоб велика графська спільнота змогла швидко використовувати один одного для досліджень. Це у філософії подібне до численних алгоритмів спільного використання неявних та щільних матриць.

Продуктивність: Визнано, що жодна структура даних не є оптимальною для кожного алгоритму графіка. Мета STINGER - налаштувати розумну структуру даних, яка може добре працювати з більшістю алгоритмів. Не повинно бути суттєвого зниження продуктивності використання STINGER у порівнянні з іншою загальною структурою даних через широкий набір типових алгоритмів графіків. STINGER повинен прийняти спільний адресний простір пам'яті та дозволити як послідовні, так і паралельні алгоритми. Структура даних повинна дозволяти паралельним алгоритмам використовувати паралельність, де це можливо.

Він не такий загальний, як LEMON або Boost Graph Library і на більш ранній стадії розвитку. Якщо ви це перевірите, мені будуть цікаві ваші коментарі.


СТІНГЕР Виходить із лабораторії Девіда Бадера в Georgia Tech. Він добре відомий у спільноті HPC своєю роботою над Graph500, дякую, що згадував про це!
Арон Ахмадія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.