• Aucun résultat trouvé

Les cartes graphiques sont un type d’architecture matérielle permettant une exécution en mé-moire partagée. Leur utilisation s’intègre dans le cadre d’un mouvement récent des problématiques de parallélisation vers les architectures many-core, proposant un très grand nombre de coeurs d’exécution sur un même matériel. Ce parallélisme matériel peut être exploité indirectement, par

11. http ://www.altera.com/products/software/opencl/opencl-index.html

le biais de bibliothèques de parallélisation proposant des opérations de haut niveau, ou via des plates-formes telles que OpenCL ou CUDA. Dans ce dernier cas se posent toutefois de nom-breuses considérations d’implémentations pour obtenir un programme performant, exploitant les ressources offertes par le matériel de manière efficace.

L’utilisation de cette architecture d’exécution est déjà possible dans le cadre de nombreuses bibliothèques d’algèbre linéaire. Si ce type de problème n’est pas forcément directement utilisé dans les systèmes multi-agents, cette possibilité de proposer des traitements parallélisés en fait une piste intéressante pour l’accélération de programmes existants. Les cartes graphiques se dis-tinguent également par leur disponibilité sur de nombreuses machines personnelles, par opposition à des solutions matérielles spécialisées comme les grilles ou les clusters, ce qui en fait une piste intéressante pour la parallélisation de systèmes multi-agents.

3

P arall elisation de syst ´ emes multi ` - agents

Comme évoqué dans notre présentation des systèmes multi-agents, l’utilisation de simulations de tailles importantes peut rapidement engendrer des besoins en temps d’exécution et en mémoire importants. L’objectif du recours à la parallélisation est de résoudre ces problèmes en permettant l’accès à davantage de ressources mémoires ou d’exécution.

Comme nous venons de le voir, la démarche de parallélisation d’un programme implique une répartition de son exécution et parfois de ses données. Ce découpage est facilité dans le cas des modèles multi-agents par la décomposition du système en agents indépendants dotés de compor-tements et de données propres. La parallélisation d’une simulation multi-agents est un processus complexe en temps et en ressources, du fait de l’exécution naturellement synchrone de nombreux modèles sur la base de pas de temps ou d’événements. Ce synchronisme impose en effet de nom-breux échanges de données en cours de simulation. La délégation d’une partie de la simulation à chaque hôte ou l’exécution en mémoire partagée du système sont donc généralement les paralléli-sations les plus aisées à réaliser [Ble09] car elles minimisent le nombre d’échanges nécessaires à la synchronisation. L’environnement représente alors la seule structure globale devant être partagée entre l’ensemble de l’exécution.

Dans les sections suivantes, nous présentons ces différentes approches de parallélisation de systèmes multi-agents pour souligner les problématiques qui devront être abordées dans notre pro-position. Pour chacune, nous évoquons son principe ainsi que ses indications ou contre-indications.

Nous voyons ensuite leur utilisation dans le cadre de plates-formes multi-agents parallèles qui dé-chargent le concepteur d’une partie importante de la gestion de cette parallélisation. Enfin, nous présentons des applications de ces techniques de parallélisation au GPU dans le cadre de divers types de systèmes agents, avant de présenter FLAME-GPU, une première plate-forme multi-agents générique pour l’exécution sur GPU.

3.1 Stratégies de parallélisation

Il est possible de décomposer l’exécution d’un système multi-agents en trois grandes dyna-miques [MFD09], illustrées sur la Figure 3.1 :

— Celle de l’environnement, qui définit l’évolution de l’espace simulé.

— Celle des comportements des différents agents présents dans le système.

— Celle de l’ordonnanceur, qui contrôle l’exécution et la synchronisation des deux dyna-miques précédentes. C’est cet ordonnanceur qui détermine si l’exécution de la simulation est guidée par des pas de temps (time-driven) ou par des événements (event-driven).

La parallélisation du modèle multi-agents implique une intervention sur une ou plusieurs de ces dynamiques en conservant la cohérence du modèle découlant de leur interaction.

Comportements Environnement

Ordonnanceur

Contrôle Contrôle Moyens d'action

et de perception

Figure3.1 – Rôle de l’ordonnanceur multi-agents

3.1.1 Parallélisation de l’ordonnanceur

Une première manière de paralléliser le déroulement d’une simulation multi-agents est d’en lancer plusieurs instances séquentielles simultanément [BCC+11, CDFD10]. Cette parallélisation de lancement très simple, dite par lots, permet d’exploiter aisément plusieurs processeurs ou ma-chines sans apporter aucune modification à la simulation. Elle est particulièrement intéressante pour tester de vastes ensembles de scénarios, en permettant d’obtenir une quantité plus importante de résultats dans la même période de temps.

Il est cependant important de noter que cette parallélisation par lots ne réduit ni le temps, ni la quantité de mémoire nécessaires à l’exécution de chaque simulation. Elle ne représente donc pas une solution dans le cas où les ressources mémoires locales empêchent le lancement d’une simulation. Elle ne permet pas non plus d’obtenir les premiers résultats plus rapidement qu’une implémentation séquentielle, et en augmente simplement la quantité.

Une approche de parallélisation de l’ordonnancement moins naïve consiste à répartir l’exécu-tion de l’environnement et des agents entre plusieurs ordonnanceurs. Dans ce cas, un ordonnanceur est lancé pour chaque ressource d’exécution et collabore avec les autres ordonnanceurs pour trai-ter la simulation. Cette approche requiert toutefois la possibilité de pouvoir découper le système multi-agents en ensembles d’exécution distincts, de manière à minimiser les échanges de données et les synchronisations entre ordonnanceurs. Elle est proposée par plusieurs plates-formes multi-agents parallèles, comme nous le verrons plus loin.

Certaines simulations multi-agents [BMD+09] sont dites multi-échelles : dans ce cas l’évolu-tion du modèle est gouvernée par plusieurs modèles agents représentant des échelles de simulal’évolu-tion ou des aspects distincts d’un même système. Si chacun de ces modèles évolue de manière semi-indépendante, une approche de parallélisation intuitive consiste à confier l’exécution des différents aspects de la simulation à plusieurs acteurs, de manière à permettre l’exécution en parallèle de la simulation sans modifier fondamentalement chaque modèle.

3.1.2 Parallélisation des comportements

Une seconde approche de parallélisation consiste à paralléliser l’exécution des comportements des agents du modèle. Cette parallélisation peut être effectuée au niveau du système dans son ensemble, au niveau de l’agent, ou au niveau de chaque comportement.

Dans le premier cas, l’ensemble des traitements de même type dans le système sera exécuté simultanément. Pour des raisons d’équité, l’exécution des agents demeure synchronisée, ce qui permet d’assurer que tous les agents se déplacent, respirent, ou consomment de l’énergie en même temps. Ce type de parallélisation, consistant à lancer le même traitement pour un grand nombre d’agents, est bien adapté à une exécution sur GPU.

Dans le second cas, la parallélisation permet le traitement simultané de plusieurs types de com-portements, de manière à gérer l’évolution de manière asynchrone à l’intérieur d’un pas d’évolu-tion. Il est dans ce cas impossible de garantir que tous les agents progressent à la même vitesse dans leurs traitements : un agent est ainsi susceptible de se déplacer avant qu’un autre ne respire ou inversement. Cette seconde approche est sans doute l’une des plus réaliste pour des modèles où l’équité est introduite par la modélisation, mais elle est en pratique une des plus difficiles à mettre en place et à contrôler.

Dans le dernier cas, enfin, l’algorithme d’évolution des agents n’est pas modifié et seul le traitement du comportement lui-même est parallélisé. Cette dernière approche est particulièrement intéressante dans le cas d’agents effectuant des actions coûteuses, à même d’être parallélisées, dans le cadre de leur évolution. Des exemples d’actions candidates à la parallélisation sont la collecte de données dans un périmètre étendu, ou encore le calcul de déplacements complexes mettant en jeu de nombreux paramètres.

3.1.3 Parallélisation de l’environnement

Un dernier axe de parallélisation concerne la dynamique de l’environnement. En fonction du système multi-agents décrit, cette dynamique peut être inexistante, si l’environnement est utilisé comme un simple repère spatial comme dans le cas des modèles d’essaims, ou au contraire très complexe comme dans le cas de modèles comme les fourmis. Si le temps de traitement de la mise à jour de l’environnement représente une portion significative du temps d’exécution du modèle, il devient dans ce cas intéressant de paralléliser cette mise à jour.

La parallélisation de l’environnement est également souvent requise parce qu’il s’agit de la structure de données dont taille est la plus importante dans le modèle. Dans ce cas, la parallélisation ne vise plus uniquement l’obtention de meilleures performances, mais également la possibilité de simuler des environnements de taille plus importante. Le découpage de l’environnement implique généralement la répartition des agents présents dans le modèle, de manière à pouvoir conserver les portions d’environnements et leurs agents associés sur les mêmes unités d’exécution. Ce type de partitionnement est également proposé par de nombreuses plates-formes agents parallèles.