5.2.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_BLOCK_PROPAGATION_SRC} main_intrinsics_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_block_O1 "-O1 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_O2 "-O2 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_O3 "-O3 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_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_seqIntrinsicsBlock" perf_grayscott_seq_vectorize_O1 perf_grayscott_seq_vectorize_Ofast perf_grayscott_seq_intrinsics_O2 perf_grayscott_seq_intrinsics_O3 perf_grayscott_seq_intrinsics_block_O1 perf_grayscott_seq_intrinsics_block_O2 perf_grayscott_seq_intrinsics_block_O3 perf_grayscott_seq_intrinsics_block_Ofast) |
Le fichier CMakeLists.txt complet :
1 2 3 4 5 6 7 8 9 |
set(progIntrinsicsSrc ${INTRINSICS_PROPAGATION_SRC} ${INTRINSICS_BLOCK_PROPAGATION_SRC} main_intrinsics_block.cpp) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_O1 "-O1 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_O2 "-O2 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_O3 "-O3 -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_compileAndRunExample(perf_grayscott_seq_intrinsics_block_Ofast "-Ofast -march=native -mtune=native -mavx2" "${CONFIG_GRAYSCOTT}" ${progIntrinsicsSrc}) phoenix_plotPerf("grayscott_seqIntrinsicsBlock" perf_grayscott_seq_vectorize_O1 perf_grayscott_seq_vectorize_Ofast perf_grayscott_seq_intrinsics_O2 perf_grayscott_seq_intrinsics_O3 perf_grayscott_seq_intrinsics_block_O1 perf_grayscott_seq_intrinsics_block_O2 perf_grayscott_seq_intrinsics_block_O3 perf_grayscott_seq_intrinsics_block_Ofast) |
Vous pouvez le télécharger ici.