Les clusters de calculs


Concevoir des programmes distribués

Comprendre le problème et le programme

Concevoir des programmes distribués implique un certain nombre de contraintes et plus particulièrement un certain nombre de questions à se poser:


Ce sont toutes ces questions qui doivent être prises en compte durant tout le processus de conception d'un programme distribué visant les clusters comme milieux d'exécution.


Parallélisme

La première étape de la conception d'un programme distribué est de déterminer son degré de parallélisation. En effet il est nécessaire de trouver les parties les plus gourmandes en terme de temps de calcul de l'application.

Pour cela, il faut qu'il y ait une certaine indépendance dans le traitement des données:


Dans tous les cas le programmeur est responsable du parallélisme des tâches.


Partitionnement

Il s'agit de l'étape la plus importante dans la conception d'un programme parallèle. Cette étape consiste à découper le problème, soit en terme de données indépendantes, soit en terme de fonctionnalités. Le gain apporté par la parallélisation va dépendre de cette décomposition.

Il existe deux types de partitionnement :



Pour la décomposition par domaine, la donnée associée au problème est décomposée. Chaque tâche travaille sur une portion de donnée indépendante.


Décomposition par domaine



Dans l'approche par décomposition de fonction, la parallélisation vise le calcul qui doit être effectué plutôt que les données manipulées par le calcul.
Ainsi le problème est décomposé suivant le travail devant être effectué et chaque tâche effectue une portion du calcul total.


Décomposition par fonction


Il est tout à fait possible de jumeler ces 2 approches pour augmenter la granularité et l'opportunité de la parallélisation. Toutefois, il faut bien garder à l'esprit que l'efficacité d'une parallélisation va dépendre principalement de ce facteur de décomposition et des dépendances qui lui sont liées.


Communication

Lors de la conception d'un programme parallèle il faut se poser la question : pourquoi et quand communiquer ?

Nous avons vu précédemment quels étaient les différents support réseau disponible et le principe de communication par transmission de messages.

Les communications entre les différents dépendent beaucoup de la tâche à effectuer. La communication est obligatoire lorsque les taches doivent échanger des données et c'est le cas dans la plupart des programmes parallèles : la grande majorité des calculs, pour être menés à bien, ont besoin d'une partie des résultats des autres noeuds voisins.

Les facteurs à considérer sont les coûts de communications car la communication inter-tâches implique des frais généraux : des cycles et des ressources pouvant être employés pour le calcul sont utilisés pour l'empaquetage des données à transmettre.

D'autres facteurs sont la synchronisation qui peut entraîner des temps d'attente et le trafic de communication peut saturer la bande passante du réseau aggravant les performances.

Le programmeur doit être conscient des facteurs affectant la performance durant les communications.

Nous allons voir dans la suite 2 implémentations disponibles pour la gestion de la communication au sein de programmes distribués.