8
8
# CPU_{opt}_SUPPORTED=ON/OFF - compiler support (possibly with additional flag)
9
9
# CPU_{opt}_IMPLIES=<list>
10
10
# CPU_{opt}_FORCE=<list> - subset of "implies" list
11
+ # CPU_{opt}_GROUP=<list> - similar to "implies" list, but additionally merges compiler flags
11
12
# CPU_{opt}_FLAGS_ON=""
12
13
# CPU_{opt}_FEATURE_ALIAS - mapping to CV_CPU_* HWFeature enum
13
14
26
27
#
27
28
# CPU_DISPATCH_FLAGS_${opt} - flags for source files compiled separately (<name>.avx2.cpp)
28
29
29
- set (CPU_ALL_OPTIMIZATIONS "SSE;SSE2;SSE3;SSSE3;SSE4_1;SSE4_2;POPCNT;AVX;FP16;AVX2;FMA3;AVX_512F" )
30
+ set (CPU_ALL_OPTIMIZATIONS "SSE;SSE2;SSE3;SSSE3;SSE4_1;SSE4_2;POPCNT;AVX;FP16;AVX2;FMA3;AVX_512F;AVX512_SKX " )
30
31
list (APPEND CPU_ALL_OPTIMIZATIONS NEON VFPV3 FP16 )
31
32
list (APPEND CPU_ALL_OPTIMIZATIONS VSX )
32
33
list (REMOVE_DUPLICATES CPU_ALL_OPTIMIZATIONS )
@@ -145,7 +146,9 @@ elseif(" ${CMAKE_CXX_FLAGS} " MATCHES " -march=native | -xHost | /QxHost ")
145
146
endif ()
146
147
147
148
if (X86 OR X86_64 )
148
- ocv_update (CPU_KNOWN_OPTIMIZATIONS "SSE;SSE2;SSE3;SSSE3;SSE4_1;POPCNT;SSE4_2;FP16;FMA3;AVX;AVX2;AVX_512F" )
149
+ ocv_update (CPU_KNOWN_OPTIMIZATIONS "SSE;SSE2;SSE3;SSSE3;SSE4_1;POPCNT;SSE4_2;FP16;FMA3;AVX;AVX2;AVX_512F;AVX512_SKX" )
150
+
151
+ ocv_update (CPU_AVX512_SKX_GROUP "AVX_512F;AVX_512CD;AVX_512BW;AVX_512DQ;AVX_512VL" )
149
152
150
153
ocv_update (CPU_SSE_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_sse.cpp" )
151
154
ocv_update (CPU_SSE2_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_sse2.cpp" )
@@ -158,6 +161,7 @@ if(X86 OR X86_64)
158
161
ocv_update (CPU_AVX2_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_avx2.cpp" )
159
162
ocv_update (CPU_FP16_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_fp16.cpp" )
160
163
ocv_update (CPU_AVX_512F_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_avx512.cpp" )
164
+ ocv_update (CPU_AVX512_SKX_TEST_FILE "${OpenCV_SOURCE_DIR} /cmake/checks/cpu_avx512skx.cpp" )
161
165
162
166
if (NOT OPENCV_CPU_OPT_IMPLIES_IGNORE )
163
167
ocv_update (CPU_AVX_512F_IMPLIES "AVX2" )
@@ -206,6 +210,7 @@ if(X86 OR X86_64)
206
210
ocv_intel_compiler_optimization_option (SSE "-msse" "/arch:SSE" )
207
211
endif ()
208
212
ocv_intel_compiler_optimization_option (AVX_512F "-march=common-avx512" "/arch:COMMON-AVX512" )
213
+ ocv_intel_compiler_optimization_option (AVX512_SKX "-march=core-avx512" "/arch:CORE-AVX512" )
209
214
elseif (CMAKE_COMPILER_IS_GNUCXX )
210
215
ocv_update (CPU_AVX2_FLAGS_ON "-mavx2" )
211
216
ocv_update (CPU_FP16_FLAGS_ON "-mf16c" )
@@ -221,6 +226,7 @@ if(X86 OR X86_64)
221
226
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0" )
222
227
# -mavx512f -mavx512pf -mavx512er -mavx512cd -mavx512vl -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi
223
228
ocv_update (CPU_AVX_512F_FLAGS_ON "-mavx512f" )
229
+ ocv_update (CPU_AVX512_SKX_FLAGS_ON "-mavx512f -mavx512cd -mavx512vl -mavx512bw -mavx512dq" )
224
230
endif ()
225
231
elseif (MSVC )
226
232
ocv_update (CPU_AVX2_FLAGS_ON "/arch:AVX2" )
@@ -348,6 +354,18 @@ endmacro()
348
354
349
355
foreach (OPT ${CPU_KNOWN_OPTIMIZATIONS} )
350
356
set (CPU_${OPT}_USAGE_COUNT 0 CACHE INTERNAL "" )
357
+ if (DEFINED CPU_${OPT}_GROUP )
358
+ if (NOT DEFINED CPU_${OPT}_IMPLIES )
359
+ set (CPU_${OPT}_IMPLIES "${CPU_${OPT} _GROUP}" )
360
+ endif ()
361
+ if (NOT DEFINED CPU_${OPT}_FLAGS_ON )
362
+ set (__flags "" )
363
+ foreach (OPT2 ${CPU_${OPT}_GROUP} )
364
+ set (__flags "${__flags} ${CPU_${OPT2} _FLAGS_ON}" )
365
+ endforeach ()
366
+ set (CPU_${OPT}_FLAGS_ON "${__flags} " )
367
+ endif ()
368
+ endif ()
351
369
if (NOT DEFINED CPU_${OPT}_FORCE )
352
370
set (CPU_${OPT}_FORCE "${CPU_${OPT} _IMPLIES}" )
353
371
endif ()
0 commit comments