5.3.3 Déroulage de boucle

Dérouler les boucles (pas complètement entendons nous bien) permet d'améliorer l'optimisation fait par le compilateur en augmentant la taille des blocs de base.

Remplaçons :

1
add_definitions(-Wall -O2 -ffast-math)

par :

1
add_definitions(-Wall -O2 -funroll-loops)

Et on recompile :

make
-- Configuring done
-- Generating done
-- Build files have been written to: /...../build
[ 50%] Building C object CMakeFiles/libcalcul.dir/calcul.c.o
Linking C static library liblibcalcul.a
[ 50%] Built target libcalcul
[100%] Building C object CMakeFiles/optimisationsgemm.dir/main.c.o
Linking C executable optimisationsgemm
[100%] Built target optimisationsgemm

Si on exécute le programme on obtient ceci :

./optimisationsgemm 
3.019326 cy/fma

Notre précédent record était à 3.716025 cy/fma, on a gagner à peut près 19 pour-cents ce qui est bien (et nous n'avons pas encore changé le programme).