Exercice 3.1
Ecrire un programme qui calcule la valeur de PI en utilisant un calcul d'intégrale entre 0 et 1 de la fonction :
$$f(x) = 4 / (1 + x^2)$$
Modifier le programme pour obtenir une version OpenMP.
Exercice 3.2
Ecrire un programme qui calcule la valeur de PI en utilisant la méthode de Monte Carlo. On considère un carré qui englobe un cercle de rayon 1. On lance de manière aléatoire des fléchettes dans cet espace carré. La probabilité pour qu'une fléchette soit dans le cercle est proportionelle aux aires du cercle et du carré :
Utiliser OpenMP.
Exercice 3.3
Comparer le produit de matrices dans sa version classique et sa version OpenMP.
Par exemple sur un Quad Core i5 4570, on obtient les résultats suivants :
dimension | classique | 2 threads | 4 threads | 8 threads |
2000 | 17 | 8 | 4 | 5 |
4000 | 175 | 77 | 60 | 62 |
Exercice 3.4
Utiliser la méthode des rectangles pour calculer l'intégrale de $f(x) = x^2$ entre 0 et 3.
De manière générale si on doit intégrer la fonction $f(x)$ entre $a$ et $b$, on peut réaliser le calcul symbolique ou calculer l'aire de la courbe en la décomposant en $N$ petits rectangles (ou des trapèzes) :
$$ ∫_a^b f(x)\, dx = ∑↙{i=1}↖N f(a + i × dx) × dx $$
double dx = (b - a) / N;
double aire_totale = 0;
for (int i=1; i <= N; ++i) {
double aire = f(a + i * dx) * dx;
aire_totale += aire;
}
Exercice 3.5
Si on utilise $P$ threads (OpenMP) ou $P$ processeurs (MPI) chaque thread calculera l'aire de $N / P$ rectangles.
Donnez une solution OpenMP de l'exercice précédent
Exercice 3.6
Donnez une solution MPI de l'exercice précédent.
Exercice 3.7
Ecrire un programme qui teste le temps de calcul de différents algorithmes pour la somme et le produit de matrices génériques avec une implantation utilisant la classe valarray de la STL :
On redéfinira les opérateurs + et * pour la classe Matrix<T>.
On fournira un fichier de compilation automatique makefile
Voir la solution complète archive