Didzis Gosko commited on
Commit
9d0bb12
·
unverified ·
1 Parent(s): 515c36e

build : detect AVX512 in Makefile, add AVX512 option in CMake (#2043)

Browse files

* make : add AVX512 detection to Makefile and CMakeLists.txt

* make : autodetect more AVX512 instruction subsets

* cmake : do not default to AVX512, must be enabled explicitly

* cmake : enable a set of AVX512 subsets, when AVX512 is turned on

* make : consolidate AVX512 subsets, add AVX512 VBMI

* cmake : revert to NO AVX512 setting, add settings for AVX512 VNNI and VBMI

* make : re-introduce AVX512VNNI back

* cmake : remove superfluous comment line

Files changed (2) hide show
  1. CMakeLists.txt +37 -11
  2. Makefile +18 -0
CMakeLists.txt CHANGED
@@ -59,10 +59,13 @@ option(WHISPER_BUILD_EXAMPLES "whisper: build examples" ${WHISPER_STANDA
59
 
60
  option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
61
 
62
- option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
63
- option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
64
- option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
65
- option(WHISPER_NO_F16C "whisper: disable F16c" OFF)
 
 
 
66
 
67
  option(WHISPER_OPENVINO "whisper: support for OpenVINO" OFF)
68
 
@@ -464,16 +467,30 @@ else()
464
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
465
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /utf-8")
466
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
467
- if(NOT WHISPER_NO_AVX2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
469
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")
470
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
471
- else()
472
- if(NOT WHISPER_NO_AVX)
473
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
474
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX")
475
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
476
- endif()
477
  endif()
478
  else()
479
  if (EMSCRIPTEN)
@@ -486,6 +503,15 @@ else()
486
  if(NOT WHISPER_NO_AVX2)
487
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
488
  endif()
 
 
 
 
 
 
 
 
 
489
  if(NOT WHISPER_NO_FMA)
490
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
491
  endif()
 
59
 
60
  option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
61
 
62
+ option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
63
+ option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
64
+ option(WHISPER_NO_AVX512 "whisper: disable AVX512" ON)
65
+ option(WHISPER_NO_AVX512_VBMI "whisper: disable AVX512-VBMI" ON)
66
+ option(WHISPER_NO_AVX512_VNNI "whisper: disable AVX512-VNNI" ON)
67
+ option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
68
+ option(WHISPER_NO_F16C "whisper: disable F16c" OFF)
69
 
70
  option(WHISPER_OPENVINO "whisper: support for OpenVINO" OFF)
71
 
 
467
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
468
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /utf-8")
469
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
470
+ if(NOT WHISPER_NO_AVX512)
471
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX512")
472
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX512")
473
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX512")
474
+ # MSVC has no compile-time flags enabling specific
475
+ # AVX512 extensions, neither it defines the
476
+ # macros corresponding to the extensions.
477
+ # Do it manually.
478
+ if (NOT WHISPER_NO_AVX512_VBMI)
479
+ add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
480
+ add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
481
+ endif()
482
+ if (NOT WHISPER_NO_AVX512_VNNI)
483
+ add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
484
+ add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
485
+ endif()
486
+ elseif(NOT WHISPER_NO_AVX2)
487
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
488
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")
489
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
490
+ elseif(NOT WHISPER_NO_AVX)
491
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
492
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX")
493
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
 
 
494
  endif()
495
  else()
496
  if (EMSCRIPTEN)
 
503
  if(NOT WHISPER_NO_AVX2)
504
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
505
  endif()
506
+ if(NOT WHISPER_NO_AVX512)
507
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw")
508
+ endif()
509
+ if(NOT WHISPER_NO_AVX512_VBMI)
510
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vbmi")
511
+ endif()
512
+ if(NOT WHISPER_NO_AVX512_VNNI)
513
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vnni")
514
+ endif()
515
  if(NOT WHISPER_NO_FMA)
516
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
517
  endif()
Makefile CHANGED
@@ -144,6 +144,24 @@ ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
144
  CXXFLAGS += -mavx2
145
  endif
146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
148
  ifneq (,$(FMA_M))
149
  CFLAGS += -mfma
 
144
  CXXFLAGS += -mavx2
145
  endif
146
 
147
+ AVX512F_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512F')
148
+ ifneq (,$(AVX512F_M))
149
+ CFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
150
+ CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
151
+ endif
152
+
153
+ AVX512VNNI_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX512_VNNI|AVX512VNNI')
154
+ ifneq (,$(AVX512VNNI_M))
155
+ CFLAGS += -mavx512vnni
156
+ CXXFLAGS += -mavx512vnni
157
+ endif
158
+
159
+ AVX512VBMI_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512VBMI')
160
+ ifneq (,$(AVX512VBMI_M))
161
+ CFLAGS += -mavx512vbmi
162
+ CXXFLAGS += -mavx512vbmi
163
+ endif
164
+
165
  FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
166
  ifneq (,$(FMA_M))
167
  CFLAGS += -mfma