5.3.2.2 : Le fichier CMakeLists.txt



Écrivons le fichier CMakeLists.txt :



On définit les sources de nos tests (les sources de la bibliothèque en fonctions intrinsèques INTRINSICS_PROPAGATION_SRC et le main) :
1
set(progIntrinsicsSrc ${INTRINSICS_PROPAGATION_SRC} ${INTRINSICS_LINK_BLOCK_PROPAGATION_SRC} main_intrinsics_link_block.cpp)
Nous allons faire des tests en (-O1, -O2, -O3, -Ofast). Nous n'avons pas besoin de -ftree-vectorize car nous forçons explicitement la vectorisation. Néanmoins, l'option -mavx2 (ou -mavx512f ou encore -msse4 suivant votre architecture) est obligatoire pour autoriser l'utilisation du bon jeu de données sinon le compilateur nous donnera une erreur :
1
2
3
4
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O1 "-O1 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O2 "-O2 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O3 "-O3 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_Ofast "-Ofast -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
Enfin, nous allons comparer les différentes performances entre elles :
1
2
3
4
phoenix_plotPerf("grayscott_seqIntrinsicsLinkBlock" perf_grayscott_seq_vectorize_O1 perf_grayscott_seq_vectorize_Ofast
						perf_grayscott_seq_intrinsics_O2 perf_grayscott_seq_intrinsics_O3
						perf_grayscott_seq_intrinsics_link_block_O1 perf_grayscott_seq_intrinsics_link_block_O2
						perf_grayscott_seq_intrinsics_link_block_O3 perf_grayscott_seq_intrinsics_link_block_Ofast)


Le fichier CMakeLists.txt complet :

1
2
3
4
5
6
7
8
9
10
11
set(progIntrinsicsSrc ${INTRINSICS_PROPAGATION_SRC} ${INTRINSICS_LINK_BLOCK_PROPAGATION_SRC} main_intrinsics_link_block.cpp)

phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O1 "-O1 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O2 "-O2 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_O3 "-O3 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})
phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_link_block_Ofast "-Ofast -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc})

phoenix_plotPerf("grayscott_seqIntrinsicsLinkBlock" perf_grayscott_seq_vectorize_O1 perf_grayscott_seq_vectorize_Ofast
						perf_grayscott_seq_intrinsics_O2 perf_grayscott_seq_intrinsics_O3
						perf_grayscott_seq_intrinsics_link_block_O1 perf_grayscott_seq_intrinsics_link_block_O2
						perf_grayscott_seq_intrinsics_link_block_O3 perf_grayscott_seq_intrinsics_link_block_Ofast)


Vous pouvez le télécharger ici.