option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
-option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
-option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
-option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
-option(WHISPER_NO_F16C "whisper: disable F16c" OFF)
+option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
+option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
+option(WHISPER_NO_AVX512 "whisper: disable AVX512" ON)
+option(WHISPER_NO_AVX512_VBMI "whisper: disable AVX512-VBMI" ON)
+option(WHISPER_NO_AVX512_VNNI "whisper: disable AVX512-VNNI" ON)
+option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
+option(WHISPER_NO_F16C "whisper: disable F16c" OFF)
option(WHISPER_OPENVINO "whisper: support for OpenVINO" OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /utf-8")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
- if(NOT WHISPER_NO_AVX2)
+ if(NOT WHISPER_NO_AVX512)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX512")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX512")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX512")
+ # MSVC has no compile-time flags enabling specific
+ # AVX512 extensions, neither it defines the
+ # macros corresponding to the extensions.
+ # Do it manually.
+ if (NOT WHISPER_NO_AVX512_VBMI)
+ add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
+ add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
+ endif()
+ if (NOT WHISPER_NO_AVX512_VNNI)
+ add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
+ add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
+ endif()
+ elseif(NOT WHISPER_NO_AVX2)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
- else()
- if(NOT WHISPER_NO_AVX)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
- endif()
+ elseif(NOT WHISPER_NO_AVX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
endif()
else()
if (EMSCRIPTEN)
if(NOT WHISPER_NO_AVX2)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
endif()
+ if(NOT WHISPER_NO_AVX512)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw")
+ endif()
+ if(NOT WHISPER_NO_AVX512_VBMI)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vbmi")
+ endif()
+ if(NOT WHISPER_NO_AVX512_VNNI)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vnni")
+ endif()
if(NOT WHISPER_NO_FMA)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
endif()
CXXFLAGS += -mavx2
endif
+ AVX512F_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512F')
+ ifneq (,$(AVX512F_M))
+ CFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
+ CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
+ endif
+
+ AVX512VNNI_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX512_VNNI|AVX512VNNI')
+ ifneq (,$(AVX512VNNI_M))
+ CFLAGS += -mavx512vnni
+ CXXFLAGS += -mavx512vnni
+ endif
+
+ AVX512VBMI_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512VBMI')
+ ifneq (,$(AVX512VBMI_M))
+ CFLAGS += -mavx512vbmi
+ CXXFLAGS += -mavx512vbmi
+ endif
+
FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
ifneq (,$(FMA_M))
CFLAGS += -mfma