12.1.4.8 : Le CMakeLists.txt



Définissons l'alignement et les paramètres de nos événements à calibrer :
1
2
add_definitions(-DVECTOR_ALIGNEMENT=32 -DNB_EVENT=2 -DNB_SLICE=2)
set(CONFIG_NB_PIXEL "64, 128, 256, 512, 1024, 2048") #, 3072, 4992, 10048


On ajoute TBB comme dépendance des programmes à tester
1
set(EXTRA_DEPENDENCIES TBB::tbb)


Testons le programme de base :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
set(progSrc main.cpp)
phoenix_compileAndRunExample(calibration_base_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationBaseseq"
	calibration_base_seq_O1
	calibration_base_seq_O2
	calibration_base_seq_O3
	calibration_base_seq_Ofast
)

phoenix_compileAndRunExample(calibration_base_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationBaseunseq"
	calibration_base_unseq_O1
	calibration_base_unseq_O2
	calibration_base_unseq_O3
	calibration_base_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_base_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})


Testons la vectorisation classique :
1
2
3
4
5
6
7
8
9
10
11
phoenix_compileAndRunExample(calibration_classic_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" main_classic.cpp)

phoenix_plotPerf("calibrationBaseunseqVectorize"
	calibration_base_unseq_O2
	calibration_base_unseq_O3
	calibration_base_unseq_Ofast
	calibration_base_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationBaseSummary" calibration_base_seq_O1 calibration_base_seq_O3 calibration_base_unseq_O3 calibration_base_unseq_vectorize)


Testons le calcul avec un masque :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
set(progSrc main_mask.cpp)
phoenix_compileAndRunExample(calibration_mask_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskSeq"
	calibration_mask_seq_O1
	calibration_mask_seq_O2
	calibration_mask_seq_O3
	calibration_mask_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskUnseq"
	calibration_mask_unseq_O1
	calibration_mask_unseq_O2
	calibration_mask_unseq_O3
	calibration_mask_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskUnseqVectorize"
	calibration_mask_unseq_O2
	calibration_mask_unseq_O3
	calibration_mask_unseq_Ofast
	calibration_mask_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMaskSummary" calibration_mask_seq_O1 calibration_mask_seq_O3 calibration_mask_unseq_O3 calibration_mask_unseq_vectorize)


Testons le calcul avec un autre masque :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
set(progSrc main_mask2.cpp)
phoenix_compileAndRunExample(calibration_mask2_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2Seq"
	calibration_mask2_seq_O1
	calibration_mask2_seq_O2
	calibration_mask2_seq_O3
	calibration_mask2_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2Unseq"
	calibration_mask2_unseq_O1
	calibration_mask2_unseq_O2
	calibration_mask2_unseq_O3
	calibration_mask2_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2UnseqVectorize"
	calibration_mask2_unseq_O2
	calibration_mask2_unseq_O3
	calibration_mask2_unseq_Ofast
	calibration_mask2_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMask2Summary" calibration_mask2_seq_O1 calibration_mask2_seq_O3 calibration_mask2_unseq_O3 calibration_mask2_unseq_vectorize)


Testons le calcul avec un masque et deux std::transform :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
set(progSrc main_mask2_transform.cpp)
phoenix_compileAndRunExample(calibration_mask2t_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TSeq"
	calibration_mask2t_seq_O1
	calibration_mask2t_seq_O2
	calibration_mask2t_seq_O3
	calibration_mask2t_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2t_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TUnseq"
	calibration_mask2t_unseq_O1
	calibration_mask2t_unseq_O2
	calibration_mask2t_unseq_O3
	calibration_mask2t_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2t_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TUnseqVectorize"
	calibration_mask2t_unseq_O2
	calibration_mask2t_unseq_O3
	calibration_mask2t_unseq_Ofast
	calibration_mask2t_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMask2TSummary" calibration_mask2t_seq_O1 calibration_mask2t_seq_O3 calibration_mask2t_unseq_O3 calibration_mask2t_unseq_vectorize)


Testons le calcul en précalculant notre modulo :
1
2
set(progSrc main_precompute_modulo.cpp)
phoenix_compileAndRunExample(calibration_precomputed_modulo_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})


On planque des trucs sous la tapis, mais on en reparlera après :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# std::views::zip not available in G++ 11 and G++12
#set(progSrc main_mask2z_transform.cpp)
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O1 "-O1 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O2 "-O2 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O3 "-O3 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_Ofast "-Ofast -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

#phoenix_plotPerf("calibrationMask2TzUnseq"
	#calibration_mask2tz_unseq_O1
	#calibration_mask2tz_unseq_O2
	#calibration_mask2tz_unseq_O3
	#calibration_mask2tz_unseq_Ofast
	#calibration_mask2tz_unseq_vectorize
#)


Faisons un résumé des performances obtenues :
1
2
3
4
5
6
7
8
9
phoenix_plotPerf("calibrationVectorizeSummary"
	calibration_mask2_seq_O1 calibration_mask2_seq_O3
	calibration_base_unseq_vectorize
	calibration_mask_unseq_vectorize
	calibration_mask2_unseq_vectorize
	calibration_mask2t_unseq_vectorize
	calibration_precomputed_modulo_unseq_vectorize
	calibration_classic_vectorize
)


Le fichier CMakeLists.txt complet :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
add_definitions(-DVECTOR_ALIGNEMENT=32 -DNB_EVENT=2 -DNB_SLICE=2)
set(CONFIG_NB_PIXEL "64, 128, 256, 512, 1024, 2048") #, 3072, 4992, 10048

set(EXTRA_DEPENDENCIES TBB::tbb)

set(progSrc main.cpp)
phoenix_compileAndRunExample(calibration_base_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationBaseseq"
	calibration_base_seq_O1
	calibration_base_seq_O2
	calibration_base_seq_O3
	calibration_base_seq_Ofast
)

phoenix_compileAndRunExample(calibration_base_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_base_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationBaseunseq"
	calibration_base_unseq_O1
	calibration_base_unseq_O2
	calibration_base_unseq_O3
	calibration_base_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_base_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_compileAndRunExample(calibration_classic_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" main_classic.cpp)

phoenix_plotPerf("calibrationBaseunseqVectorize"
	calibration_base_unseq_O2
	calibration_base_unseq_O3
	calibration_base_unseq_Ofast
	calibration_base_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationBaseSummary" calibration_base_seq_O1 calibration_base_seq_O3 calibration_base_unseq_O3 calibration_base_unseq_vectorize)

set(progSrc main_mask.cpp)
phoenix_compileAndRunExample(calibration_mask_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskSeq"
	calibration_mask_seq_O1
	calibration_mask_seq_O2
	calibration_mask_seq_O3
	calibration_mask_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskUnseq"
	calibration_mask_unseq_O1
	calibration_mask_unseq_O2
	calibration_mask_unseq_O3
	calibration_mask_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMaskUnseqVectorize"
	calibration_mask_unseq_O2
	calibration_mask_unseq_O3
	calibration_mask_unseq_Ofast
	calibration_mask_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMaskSummary" calibration_mask_seq_O1 calibration_mask_seq_O3 calibration_mask_unseq_O3 calibration_mask_unseq_vectorize)

set(progSrc main_mask2.cpp)
phoenix_compileAndRunExample(calibration_mask2_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2Seq"
	calibration_mask2_seq_O1
	calibration_mask2_seq_O2
	calibration_mask2_seq_O3
	calibration_mask2_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2Unseq"
	calibration_mask2_unseq_O1
	calibration_mask2_unseq_O2
	calibration_mask2_unseq_O3
	calibration_mask2_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2UnseqVectorize"
	calibration_mask2_unseq_O2
	calibration_mask2_unseq_O3
	calibration_mask2_unseq_Ofast
	calibration_mask2_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMask2Summary" calibration_mask2_seq_O1 calibration_mask2_seq_O3 calibration_mask2_unseq_O3 calibration_mask2_unseq_vectorize)

set(progSrc main_mask2_transform.cpp)
phoenix_compileAndRunExample(calibration_mask2t_seq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_seq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::seq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TSeq"
	calibration_mask2t_seq_O1
	calibration_mask2t_seq_O2
	calibration_mask2t_seq_O3
	calibration_mask2t_seq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2t_unseq_O1 "-O1 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_O2 "-O2 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_O3 "-O3 -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
phoenix_compileAndRunExample(calibration_mask2t_unseq_Ofast "-Ofast -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TUnseq"
	calibration_mask2t_unseq_O1
	calibration_mask2t_unseq_O2
	calibration_mask2t_unseq_O3
	calibration_mask2t_unseq_Ofast
)

phoenix_compileAndRunExample(calibration_mask2t_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

phoenix_plotPerf("calibrationMask2TUnseqVectorize"
	calibration_mask2t_unseq_O2
	calibration_mask2t_unseq_O3
	calibration_mask2t_unseq_Ofast
	calibration_mask2t_unseq_vectorize
	calibration_classic_vectorize
)

phoenix_plotPerf("calibrationMask2TSummary" calibration_mask2t_seq_O1 calibration_mask2t_seq_O3 calibration_mask2t_unseq_O3 calibration_mask2t_unseq_vectorize)

set(progSrc main_precompute_modulo.cpp)
phoenix_compileAndRunExample(calibration_precomputed_modulo_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++20 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

# std::views::zip not available in G++ 11 and G++12
#set(progSrc main_mask2z_transform.cpp)
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O1 "-O1 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O2 "-O2 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_O3 "-O3 -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_Ofast "-Ofast -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})
#phoenix_compileAndRunExample(calibration_mask2tz_unseq_vectorize "-O3 -ftree-vectorize -march=native -mtune=native -Wall -std=c++23 -DEXECUTION_POLICY=\"std::execution::unseq\"" "${CONFIG_NB_PIXEL}" ${progSrc})

#phoenix_plotPerf("calibrationMask2TzUnseq"
	#calibration_mask2tz_unseq_O1
	#calibration_mask2tz_unseq_O2
	#calibration_mask2tz_unseq_O3
	#calibration_mask2tz_unseq_Ofast
	#calibration_mask2tz_unseq_vectorize
#)

phoenix_plotPerf("calibrationVectorizeSummary"
	calibration_mask2_seq_O1 calibration_mask2_seq_O3
	calibration_base_unseq_vectorize
	calibration_mask_unseq_vectorize
	calibration_mask2_unseq_vectorize
	calibration_mask2t_unseq_vectorize
	calibration_precomputed_modulo_unseq_vectorize
	calibration_classic_vectorize
)
Le fichier CMakeLists.txt est disponible ici.