7.4.2 : Le calcul 5x6800



Testons nos différentes implémentations pour 5 images avec 6800 étapes intermédiaires (ce qui permet de rendre négligeable la contribution des I/O à la performance finale) :

Commençons par l'implémentation générique naïve (compilée en -O3) :
time ./Program/GrayScottReaction/Naive/naive_gray_scott  -r 1080 -c 1920 -n 5 -e 6800
simulateImage : nbRow = 1080, nbCol = 1920
[========================================================================================================================================================|100%] 0ss
Done

real 16m48,695s user 16m48,533s sys 0m0,048s
Il est attendu que les performances soient très proches puisque le temps de calcul est important devant le temps des I/O.

Testons l'implémentation générique en fonctions intrinsèques :
time ./Program/GrayScottReaction/Intrinsics/intrinsics_gray_scott  -r 1080 -c 1920 -n 5 -e 6800
simulateImage : nbImage = 5, nbRow = 1080, nbCol = 1920
[========================================================================================================================================================|100%] 0ss
Done

real 8m31,915s user 8m31,642s sys 0m0,068s


Testons l'implémentation générique en fonctions intrinsèques par blocs :
time ./Program/GrayScottReaction/IntrinsicsLinkBlock/intrinsics_link_block_gray_scott  -r 1080 -c 1920 -n 5 -e 6800
simulateImage : nbImage = 5, nbRow = 1080, nbCol = 1920
[========================================================================================================================================================|100%] 0ss
Done

real 8m44,095s user 8m43,801s sys 0m0,108s


Testons l'implémentation générique parallélisée en fonctions intrinsèques par blocs :
time ./Program/GrayScottReaction/IntrinsicsLinkBlockParallel/intrinsics_link_block_parallel_gray_scott -r 1080 -c 1920 -n 5 -e 6800
simulateImage : nbImage = 5, nbRow = 1080, nbCol = 1920
[========================================================================================================================================================|100%] 0ss
Done

real 3m43,657s user 32m23,818s sys 0m38,800s


Maintenant testons l'implémentation spécialisée pour des kernels 3x3 et vectorisée :
time ./Program/GrayScottReaction/Vectorized/vectorized_gray_scott_3x3  -r 1080 -c 1920 -n 5 -e 6800
simulateImage : nbImage = 5, nbRow = 1080, nbCol = 1920
[========================================================================================================================================================|100%] 0s
Done

real 0m45,944s user 0m45,859s sys 0m0,048s
Il était attnendu que les I/O ralentissaientl l'exécution du programme (ici de 35% par rapport à la meilleure performance ce qui est énnorme). Comme le temps d'écriture des données est toujours à peu près le même, plus le programme est optimisé et plus il devient I/O bound.