Je recherche une bibliothèque de graphes dynamiques parallèles en C ++


11

Bonjour communauté scicomp,

J'ai travaillé dans le domaine des algorithmes de graphes en utilisant des frameworks tels que NetworkX (Python), JUNG et YFiles (Java). J'entre maintenant dans le domaine de l'informatique parallèle et haute performance. Pour un nouveau projet, je recherche une bibliothèque de graphes C ++ avec les fonctionnalités suivantes:

  • possède une interface intuitive qui permet le développement d'algorithmes
  • prend en charge les opérations dynamiques: par exemple, les insertions et suppressions arbitraires de nœuds / bords
  • prend en charge la parallélisation: par exemple, protège le programmeur des problèmes liés au multithreading
  • a une surcharge de mémoire faible et convient au calcul haute performance

Veuillez suggérer quelques bibliothèques et discuter de ces critères ainsi que des avantages et des inconvénients.

Réponses:


11

Boost Graph Library et LEMON

Comme Daniel le mentionne dans sa réponse complète , la bibliothèque C ++ générale la plus complète est la bibliothèque de graphiques Boost . Il existe une nouvelle extension de mémoire distribuée capable de faire quelques algorithmes de base tels que la recherche en largeur et en profondeur, les arbres couvrant minimum et la recherche de composants connectés, mais je ne connais pas très bien le nouveau projet. La bibliothèque graphique Boost est réputée et utilisée dans de nombreux projets à travers le monde.

Si vous effectuez un travail de base sur les graphiques HPC, vous voudrez peut-être commencer par la bibliothèque de graphiques Boost, mais sachez que de nombreux compilateurs HPC C ++ ont des difficultés avec Boost (malgré son adhésion assez stricte aux normes C ++), et vous devrez peut-être utiliser un ancienne version de Boost ou un compilateur non fournisseur tel que GCC pour le faire fonctionner sur les systèmes HPC.

Un rapide survol des référentiels de LEMON montre qu'il y a une implication de l'équipe de superinformatique IBM BlueGene, mais je ne vois pas de dépendances ou de configuration pour MPI, donc il est probable que ce ne soit qu'une bibliothèque de graphes série pour le moment.

Équilibrage de charge et (re) partitionnement graphique dynamique

Si vous êtes intéressé par l'équilibrage de charge et le partitionnement graphique dynamique, vous avez plusieurs autres options. La bibliothèque la plus connue est peut-être ParMETIS , qui a été mise à jour vers la version 4 l'année dernière. ParMETIS propose une pondération basée sur les sommets, ce qui est important pour les simulations multi-physiques.

Le concurrent européen de ParMETIS est PT-Scotch , qui a eu de meilleures performances pour certains types de problèmes, mais, comme ParMETIS, n'est pas fréquemment mis à jour.

Vous pouvez également être intéressé par Zoltan , qui fait partie du méta-package Sandia National Laboratories Trilinos pour le calcul scientifique en C ++. Zoltan dispose de ses propres partitionneurs hiérarchiques et interfaces dans ParMETIS et PT-Scotch.

Graph500

Si vous travaillez à la fine pointe de la recherche simultanée, de l'optimisation (chemin le plus court à source unique) et de l'orientation orientée (ensemble indépendant maximal), vous serez également intéressé par le benchmark Graph500 disponible gratuitement .


1
Question: La bibliothèque de graphiques Boost parallèle est destinée au parallélisme à mémoire distribuée. La bibliothèque de graphiques Boost ordinaire convient-elle à la parallélisation de la mémoire partagée avec OpenMP?
clstaudt

@clstaudt - Cela va être spécifique au problème. Vous devrez approfondir les détails de votre algorithme pour une meilleure réponse (et ce serait probablement une nouvelle question).
Aron Ahmadia

5

Peut-être que la bibliothèque de graphiques Boost est ce que vous recherchez. Il dispose d'un analyseur pour lire les graphiques spécifiés au format DOT de GraphViz. Bien que je ne connaisse pas vraiment la surcharge de la mémoire, elle fournit une variante pour la parallélisation .

Une autre bibliothèque de graphes est LEMON mais je ne la connais pas vraiment et si elle prend en charge la parallélisation, elle n'est pas annoncée. Son site Web fait cependant bonne impression;)


LEMON me semble bien aussi, mais je n'ai absolument aucune idée si je peux l'utiliser pour du code parallèle à mémoire partagée (OpenMP).
clstaudt

Moi non plus, pour être honnête. Mais vous pouvez peut-être l'utiliser pour déclarer des structures de données partagées pour votre problème et exécuter ses algorithmes dans différents threads. Vous pouvez peut-être subdiviser votre problème en sous-problèmes appropriés.
Daniel Eberts

5

Je voudrais également mentionner STINGER , une structure de données de graphique dynamique conçue pour le parallélisme. Selon le site Web, il est conçu pour les objectifs suivants:

Portabilité: les algorithmes écrits pour STINGER peuvent facilement être traduits / portés entre plusieurs langages et frameworks

Productivité: STINGER devrait fournir une structure de données abstraite commune de telle sorte que la grande communauté de graphes puisse rapidement tirer parti des développements de recherche des uns et des autres. Ceci est similaire en philosophie à l'utilisation implicite de la communauté des algorithmes numériques de matrices clairsemées et denses.

Performances: Il est reconnu qu'aucune structure de données unique n'est optimale pour chaque algorithme de graphique. L'objectif de STINGER est de configurer une structure de données sensible qui peut bien exécuter la plupart des algorithmes. Il ne devrait pas y avoir de réduction significative des performances pour l'utilisation de STINGER par rapport à une autre structure de données générale sur un large ensemble d'algorithmes de graphiques typiques. STINGER doit supposer un espace d'adressage de mémoire partagée et autoriser les algorithmes séquentiels ou parallèles. La structure des données devrait permettre aux algorithmes parallèles d'exploiter la concurrence dans la mesure du possible.

Il n'est pas aussi générique que LEMON ou Boost Graph Library et à un stade de développement antérieur. Si vous le vérifiez, je serais intéressé par vos commentaires.


STINGER Sort du laboratoire de David Bader à Georgia Tech. Il est bien connu dans la communauté HPC pour son travail sur le Graph500, merci d'avoir mentionné celui-ci!
Aron Ahmadia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.