5.5.2 : Performances



Pour lancer notre programme depuis le dossier build :

./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34


Ce programme calculera 1000 images en 1920\times 1080 (donc full-hd) avec 34 pas de calcul entre chaque image.

Il calculera donc 34\,000 images et en sauvegardera une sur 34.

Pour pourvoir en tirer des conclusion, il est préférable d'évaluer son temps d'exécution (par exemple avec la commande bash time) :

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34
real	6m41,394s
user	45m25,357s
sys	0m52,738s


Sur le principe, c'est mieux que précédemment, 6min 41s au lieu de 9min 49s. Mais sachant que ma machine a 8 coeurs c'est quand même décevant.


Ensemble des tests de 2 à 7 threads

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 1
real	9m38,592s
user	9m9,623s
sys	0m27,241s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 2 real 19m55,527s user 38m30,749s sys 0m29,861s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 3 real 17m0,975s user 48m48,164s sys 0m34,702s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 4 real 10m20,159s user 38m22,441s sys 0m35,281s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 5 real 9m5,632s user 41m36,007s sys 0m38,850s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 6 real 8m8,036s user 43m57,343s sys 0m42,358s

time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -n 1000 -r 1080 -c 1920 -e 34 -d 7 real 7m21,914s user 45m35,990s sys 0m47,487s


La figure 14 résume les performances obtenues sur une machine à 4 coeurs hyperthreadés (donc on en voit 8).

nothing

Figure 14 : Temps d'exécution de l'implémentation parallèle en fonction intrinsèques par blocs liés, sur une machine à 4 coeurs hyperthreadés.



On constate une nette dégradation des performances pour 2 et 3 coeurs tandis qu'elles s'amméliorent pour 5 et plus, même si la scalalibilité est loin d'être optimale. Cela dépend, entre autres, de la gestion des threads par TBB et du fait que l'on créé énnormément de threads.


Sauvegarde des images La sauvegarde des images se fait avec la commande suivante :
time ./Examples/Program/GrayScott2Pic/gray_scott2pic -i output.h5 -o OutputParallelPerfPics/
simulateImage : nbImage = 1000, nbRow = 1080, nbCol = 1920
real	20m44,300s
user	20m29,632s
sys	0m14,424s


Qui est lente, comme vous pouvez le constater.

Note : on remarque que le fait de ne pas mettre à jour la première et la dernière colonne des images provoque un étalement du résultat. Car tous les blocs sont traités de la même façon : avec des bords en lecture seule et le reste en lecture/écriture.

  • Pour solutionner le problème, il faudrait prendre en compte le fait que certains blocs peuvent être sur le bord de l'image principale. Un bloc à la gauche de l'image devrait mettre à jour sa colonne de gauche, et un bloc à droite de l'image devrait mettre à jour sa colonne de droite.
  • Ou, on peut aussi ajouter une colonne de zéros à gauche et à droite noteOn parle de zéros en terme de la concentration de l'espèce V ce qui revient à 1 pour l'espèce U.. La difficulté est de réallouer toutes les images ou de les initialiser différemment.


Vous pouvez prendre cela comme un petit exercice supplémentaire si vous le voulez.