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.