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



Il calculera donc


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

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).

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.
Vous pouvez prendre cela comme un petit exercice supplémentaire si vous le voulez.
- 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.