• Aucun résultat trouvé

Parallélisation des automates cellulaires évolutionnaires quantiques

3. Adaptation des ACEVQ pour supporter un traitement parallèle

3.2. La mise en œuvre d’un ACEVQ parallèle

Pour mettre en œuvre la version parallèle de notre algorithme proposé, on doit d‘abord suivre une méthodologie de conception des algorithmes parallèles. Ainsi, nous avons appliqué la méthodologie de Foster en raison de sa popularité et de sa clarté.

Cette méthodologie consiste essentiellement en quatre étapes distinctes :

 Le partitionnement du calcul / données en tâches.

 La détermination des points de communication entre elles.

 Le regroupement des tâches qui ont une intense communication avec d‘autres.

 Et enfin faire une correspondance entre ces groupes et les processeurs du système.

Nous allons examiner ces étapes en détail tout en mettant en évidence la structure de notre algorithme parallèle.

Partitionnement : Le but de cette étape est de diviser le calcul en un ensemble de tâches disjointes. Dans le cas des ACEVQ, on peut intuitivement déduire n tâches, n étant la taille de la population des chromosomes quantiques. Pour chacune, on effectue une évaluation puis une interférence. La structure de chaque tâche Ti est donnée par la figure 4.4.

Figure 4.4. Structure des tâches parallèles

Interférence

Calcul de la fitness F (i) de l‘individu i de la population P

Communication : On peut facilement observer que les tâches générées dans l‘étape de partitionnement sont exécutables en parallèle mais elles ne peuvent pas être indépendamment exécutées : le traitement d‘une tâche nécessite des données associées à d‘autres tâches. On doit donc transférer des données entre les différentes tâches.

Concernant notre algorithme, la communication peut se faire en s‘appuyant sur un petit protocole de communication entre les sites esclaves et le site maitre, basé sur deux primitives : Envoyer et Recevoir.

Chaque site esclave accomplissant l‘opération d‘évaluation doit envoyer sa meilleure fitness au site maitre en effectuant un envoi du message (‘f ; id; valeur de fitness’) puis il se bloque en attendant la réponse du site maitre, ‗f‘ signifie ici qu‘il s‘agit d‘un envoi d‘une valeur de fitness tandis que ‗id‘ indique l‘adresse du hôte envoyant le message. Le site maitre continue à recevoir les fitness des sites esclaves jusqu‘à ce qu‘il ne reste plus de fitness à envoyer. A ce moment là, le site maitre réagit en vérifiant la meilleure fitness arrivée ‘meilleure fitness’ avec celle qui existe déjà

‘ancienne fitness’. Deux cas peuvent se figurer :

o ‘ancienne fitness’ ≥ ‘meilleure fitness’ : Dans ce cas le site maitre envoie un

message à tous les sites esclaves pour garder leurs meilleures solutions telles qu‘elles sont (car il n‘y a eu aucune amélioration), en signalant par conséquent qu‘il est possible d‘effectuer directement une interférence. Le format du message est tout simplement : (‘c’).

o ‘ancienne fitness’ < ‘meilleure fitness’ : Dans ce cas le site maitre envoie un

message au site esclave source de cette meilleure fitness. Son format est de

(‘d’), indiquant que le maitre lui a demandé de lui renvoyer sa meilleure

solution trouvée afin de la diffuser aux autres sites esclaves. Le site esclave concerné doit répondre en envoyant un message ayant le format : (‘m; id ;

meilleure solution’), ‗m‘ indique qu‘il s‘agit d‘un envoi d‘une meilleure

solution envoyée au site maitre. Ce dernier réagit en envoyant cette meilleure solution arrivée à tous les autres sites esclaves permettant d‘effectuer l‘opération d‘interférence. Le format de ce message est : (‘m; meilleure

Agglomération : Dans la phase de partitionnement, les efforts ont été focalisés sur la définition de plusieurs tâches possibles sans tenir compte du nombre de processeurs ni du coût de communication. L‘étape de l‘agglomération a pour but de réduire le nombre de tâches en regroupant celles ayant généralement un coût de communication élevé afin d‘augmenter les performances. A la fin de cette étape on doit avoir exactement une tâche par processeur.

On doit donc reconstruire de nouvelles tâches à exécuter en regroupant un certain nombre de celles qui ont été construites dans la phase de partitionnement. La structure de chaque nouvelle tâche deviendra comme indiquée par la figure 4.5.

Figure 4.5. Nouvelle structure des tâches parallèles

D‘où U Ei = P avec i = 1..m, m est le nombre de processeurs. Les cardinaux des sous ensembles Ei doivent être approximativement égaux pour ne pas influencer les performances globales. On doit également tenir compte du temps écoulé par la communication entre les différents sites esclaves avec le site maitre afin de mieux déduire le nombre des tâches à reconstruire.

Dans notre cas, nous avons remarqué que la taille de chaque message est relativement petite (ne dépasse pas 150 octets), et comme les câbles réseaux offrent actuellement de très grande vitesse (leur vitesse varie de 10 Mo / s jusqu‘à 1 Go / s), le temps de transfert des messages ne pose en principe aucun obstacle pour la performance d‘exécution. Pour cela nous avons créé autant de tâches que de sites.

Correspondance : Dans cette étape on doit spécifier où chaque tâche doit être exécutée. Son objectif est de minimiser le temps total d‘exécution. On utilise généralement deux stratégies :

Interférence

Calcul de la fitness F (i) de chaque individu i d‘un sous ensemble Ei de la population P

1. Placer les tâches pouvant s‘exécuter en concurrence sur différents processeurs.

2. Placer les tâches qui communiquent fréquemment sur un même processeur.

Comme les différentes tâches de notre algorithme ne communiquent qu‘avec le site maitre, on placera tout simplement chacune d‘entre elles sur l‘un des sites du réseau local d‘ordinateurs.