Changes between Version 5 and Version 6 of SujetTP10
- Timestamp:
- Dec 8, 2014, 7:42:29 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP10
v5 v6 51 51 On souhaite maintenant profiter de la présence des 8 processeurs pour accélérer une application logicielle capable de s'exécuter sur plusieurs processeurs. 52 52 53 On s'intéresse à une application de traitement d'image, consistant à appliquer un filtre de convolution sur chaque ligne d'une image. On considère des images possédant 128 lignes de 128 pixels. La valeur de chaque pixel est codée en niveaux de gris. Le noyau de convolution a une largeur de 9 pixels, ce qui signifie que la nouvelle valeur d'un pixel `(p)` est une moyenne pondérée sur les valeurs des 9 plus proches voisins du pixel `(p)` , dans la même ligne. Comme le traitement d'une ligne ne dépend du traitement des autres lignes, on peut partager le travail entre plusieurs processeurs.53 On s'intéresse à une application de traitement d'image, consistant à appliquer un filtre de convolution sur chaque ligne d'une image. On considère des images possédant 128 lignes de 128 pixels. La valeur de chaque pixel est codée en niveaux de gris. Le noyau de convolution a une largeur de 9 pixels, ce qui signifie que la nouvelle valeur d'un pixel `(p)` est une moyenne pondérée sur les valeurs des 9 plus proches voisins du pixel `(p)`. Comme le traitement d'un pixel ne dépend pas du traitement des autres pixels, on peut partager le travail entre plusieurs processeurs. 54 54 55 55 On suppose que l'image initiale `input[line][pixel]`, et l'image finale `output[line][pixel]` sont des variables globales stockées en mémoire dans le segment `seg_data`. Le code de la fonction `main()` et le code de la fonction `filter()` permettant de traiter une ligne sont contenus dans le fichier `main1.c`. 56 56 57 Si on utilise un seul processeur, le même processeur effectue 128 fois le même calcul sur les 128 lignes, en appelant 128 fois la fonction `filter() `, et affiche un message lorsqu'il a terminé. Lorsqu'on utilise plusieurs processeurs, on peut paralléliser le calcul, et chaque processeur (suivant son numéro de processeur) traite un sous-ensemble des 128 blocs, et affiche un message lorsqu'il a terminé sa part du travail.57 Si on utilise un seul processeur, le même processeur effectue 128 fois le même calcul sur les 128 lignes, en appelant 128 fois la fonction `filter() pour chaque ligne`, et affiche un message lorsqu'il a terminé. Lorsqu'on utilise plusieurs processeurs, on peut paralléliser le calcul, et chaque processeur (suivant son numéro de processeur) traite un sous-ensemble des pixels, et affiche un message lorsqu'il a terminé sa part du travail. 58 58 59 59 * Modifiez le fichier `Makefile` pour générer un exécutable `app.bin` à partir de `main1.c` et exécutez l'application sur une architecture mono-processeur.