| | 316 | On veut maintenant exécuter une application parallèle multi-tâches où plusieurs tâches coopérent pour résoudre un problème, |
| | 317 | en essayant d'exploiter le parallélisme de l'architecture matérielle multi-processeurs. |
| | 318 | On s'intéresse à une application de traitement d'image réalisant une détection de contour grâce à un filtre de Sobel. |
| | 319 | On utilisera le même flux d'image que dans le TP4, c'est à dire le fichier '''images.raw''' contenant une vingtaine d'images de 128 lignes de 128 pixels codées en 256 niveaux de gris. |
| | 320 | |
| | 321 | L'application logicielle contenue dans le fichier '''main_sobel.c''' est découpée en trois tâches logicielles, qui peuvent s'exécuter en parallèle sur trois processeur différents, et communiquent entre elles à travers deux tampons de communication '''buf_in''' et '''buf_out''': |
| | 322 | * La tâche '''load''' lit une image sur le disque et copie cette image dans le tampon mémoire '''buf_in'''. |
| | 323 | * La tâche '''sobel''' lit l'image dans le tampon '''buf_in''', applique le filtre de Sobel, et écrit l'image résultante dans le tampon '''buf_out'''. |
| | 324 | * La tâche '''display''' lit l'image présente dans le tampon '''buf_out''', et affiche cette image sur le frame buffer. |
| | 325 | Les deux tampons de communication '''buf_in''' et '''buf_out''' sont protégés par les deux variables de synchronisation '''buf_in_empty''' et |
| | 326 | '''buf_out_empty''', qui supportent un protocole de type SET/RESET en mode utilisateur: |
| | 327 | * La tâche productrice attend que la variable de synchronisation passe à 0 avant d'écrire, et force cette variable à 1 quand elle a fini de remplir le tampon. |
| | 328 | * La tâche consommatrice attend que la variable de synchronisation passe à 1 avant de lire, et force cette variable à 0 quand elle a fini de vider le tampon. |
| | 329 | |
| | 330 | '''Question''' : Modifiez le fichier '''reset.s''' pour que les tâches '''load''', '''sobel''', et '''display''' s'exécutent sur les processeurs 0, 1 et 2 respectivement. Modifiez le fichier '''Makefile''' pour compiler le fichier '''main_sobel.c''' plutôt que le fichier '''main_hello;c'''. |
| | 331 | |
| | 332 | '''Question''' : Lancez la simulation. Quelle est la téquence d'affichage? Cette fréquence est l'inverse du nombre de cycles entre deux affichages. |
| | 333 | |
| | 334 | '''Question''' : L'inconvénient du mécanisme de synchronisation par bascule SET/RESET est que les deux tâches productrice et consommatrice ne peuvent s'exécuter en parallèle. Comment peut-on modifier l'application logicielle pour augmenter le parallélisme et augmenter ainsi la fréquence d'affichage des images? |
| | 335 | |