Parallélisation d’un calcul sériel
Écrit par Gabriel-Andrew Pollo-Guilbert
Idée originale de Francis Giraldeau
Les systèmes hétérogènes sont des systèmes informatiques utilisant plusieurs types de processeur ou de pièces de matériel spécialisé. Il est souvent idéal d’effectuer certains calculs sur des processeurs spécialisés afin d’augmenter la performance ou l’efficacité du système. Par exemple, le décodage d’une vidéo est souvent effectué dans une carte graphique afin de ne pas affecter le reste du système.
-
source/main.c
-
Contient le point d’entrée du programme qui traite les arguments en ligne de commande et démarre le calcul.
-
-
source/color.c
source/kernel/helpers.cl
include/color.h
`include/pixel.h-
Contiennent des structures et des fonctions pour manipuler les couleurs et pixels.
-
-
source/headless.c
include/headless.h
-
Contiennent l’interface non-graphique permettant d’effectuer de le calcul.
-
-
include/log.h
-
Contient des macros pour formatter et afficher des logs dans la sortie standard.
-
-
source/sinoscope.c
include/sinoscope.h
-
Contiennent la structure et certains fonctions pour le calcul.
-
-
source/sinoscope-serial.c
-
Contient l’implémentation sériel du calcul.
-
-
source/sinoscope-openmp.c
(À COMPLÉTER)-
Contient l’implémentation avec OpenMP demandée.
-
-
source/sinoscope-opencl.c
source/kernel/sinoscope.cl
(À COMPLÉTER)-
Contiennent l’implémentation avec OpenCL demandée.
-
-
source/viewer.c
include/viewer.h
-
Contiennent l’interface graphique basée sur OpenGL pour montrer le dessin.
-
Le calcul effectué par le programme est simple. Celui-ci calcul la valeur d’une fonction pour tous
les points d’une matrice 2D. Le calcul de chacun des points individuels est triviallement
parallélisable. Lisez le fichier source/sinoscope-serial.c
pour plus d’information.
Les spécifications décrites dans cette section diffèrent d’une équipe à une autre.
-
La compilation ne doit pas lancer d’avertissements.
-
Le programme ne doit pas avoir de fuite de mémoire durant son exécution autre que OpenMP et OpenCL.
Toutes les dépendances sont déjà disponible sur les ordinateurs du L4712.
Si vous avez une machine basée sur Ubuntu, vous pouvez installer au moins les paquets
suivants: ocl-icd-opencl-dev
, freeglut3-dev
, libglew-dev
et libpng-dev
.
Si vous avez une machine basée sur ArchLinux, vous pouvez installer au moins les paquets
suivants: ocl-icd
, opencl-headers
, freeglut
, glew
et libpng
.
Dans les deux derniers cas, il est fort probablement que vous deviez installer des librairies additionnelles afin que votre carte graphique soit accessible. Veuillez consuler cette page (ArchLinux) d’avoir plus d’informations.
Pour compiler l’application, il est recommandé de créer un dossier build/
à la racine du projet
afin de bien séparer les fichiers générés.
$ mkdir build && cd build
Ensuite, on configure le projet avec cmake
. Celui-ci peut donc être compilé avec make
.
$ cmake ..
$ make
Il n’est pas nécessaire de re-exécuter toutes les commandes ci-dessus pour recompiler le binaire,
seulement la dernière. Vous pouvez exécuter ./sinoscope --help
pour voir les options du programme.
Il y a 3 modes d’exécution: avec graphique, sans graphique (--headless
) ou vérification (--check
).
Les deux premiers modes sont interactifs, les controles suivants sont disponible:
-
[1]
utiliser l’algorithme sériel -
[2]
utiliser l’algorithme basé sur OpenMP -
[3]
utiliser l’algorithme basé sur OpenCL -
[q]
quitter l’application
De plus, le mode graphique offre aussi ces controles:
-
[-]
diminuer le polynôme de Taylor du calcul -
[+]
augmenter le polynôme de Taylor du calcul