Centre Universitaire Si El’Houès Barika
Département des Mathématiques et d'Informatique
Master 1, spécialité Intelligence
Artificielle et ses Applications (IAA)
Module : Systèmes distribués et
Architectures parallèles
Durée 1h30
Examen du semestre 01
Exercise 1 : (06pts)
1- Qu’elle est la différence entre un système parallèle et un système distribué ?
2- donner la définition de la scalabilité ou le passage à l’échelle d’un programme parallèle
3- Qu’elles sont les sources de parallélisme ?
4- Si le temps de traversé de chaque étage = 1 cycle, il faut 4 cycles pour exécuter une
addition dans le cas séquentiel. Combien d’unités de temps pour faire l’addition de deux
vecteurs de taille 100 dans une machine scalaire, et dans une machine vectorielle.
5- Qu’elle est la source des performances des architectures vectorielles.
6- Citer deux Approches de la programmation parallèle.
Exercise 2 : (05pts)
Répondre par vrai ou faux et corriger la faute s’il existe :
1- L’accélération est sur-linéaire quand sa valeur est égale au nombre de processeurs utilisés.
2- Un grain trop élevé entraîne plus de communication, et augmente le degré de parallélisme
potentiel.
3- Dans un système distribué on doit communiquer par la mémoire partagée.
4- Dans un système distribué avec la primitives bloquantes, le processus appelant send ou
receive sera bloqué pendant l’émission ou réception du message.
5- Les performances d’un programme parallèle dépendent beaucoup de la manière dont les
charges sont réparties entre les processeurs.
Exercise 3 : (04pts)
1- Le temps d’exécution séquentiel d’un programme est 1 heure, et son temps d’exécution
parallèle est 15 minutes, Dans une machine avec 10 processeurs. Calculer L’accélération
(Speedup) et L’efficacité (Efficiency).
2- La fraction séquentielle d’une application représente 4% du temps d’exécution à 1
processeur. Calculer l’accélération à 2n processeurs (2≤n≤7). Quelle est la borne supérieure de
l’accélération théorique?
Exercise 4 : (05pts)
Voilà ce programme parallèle en Open mp qui contient des erreurs :
#include <stdio.h>
#include <omp.h>
#define SIZE 20
int main ()
{
double a[ SIZE ], b[ SIZE ], c[ SIZE ];
for (size_t i = 0; i < SIZE ; i ++)
a[i] = b[i] = i;
#pragma omp num_threads(4)
{
#pragma omp for (static, CHUNK )
for (size_t i = 0; i < SIZE ; i ++)
{
c[i] = a[i] + b[i ];
printf (" Thread %d: c [%2 zu ] = %g\n" , i , c[i ]);
}
}
return 0;
}
1- Corriger les erreurs.
2- Donner le résultat de ce programme. Bon courage