Spaces:
Running
Running
Przemysław Pawełczyk
commited on
build : improve disabling AVX-512 (#2129)
Browse files* cmake : make WHISPER_NO_AVX512=ON disable all subsets of AVX-512
Previously it happened only for MSVC, but it makes sense to have the
same behavior for other compilers too.
* make : reorder x86 ISA extensions in chronological order
And update compiler flags at the end to ease modifying conditions.
* make : support WHISPER_NO_AVX512=1 for disabling all AVX-512 subsets.
That way you do not have to override each AVX-512 subset setting
individually if it has been turned on during autodetection.
- CMakeLists.txt +6 -6
- Makefile +40 -31
CMakeLists.txt
CHANGED
|
@@ -514,12 +514,12 @@ else()
|
|
| 514 |
endif()
|
| 515 |
if(NOT WHISPER_NO_AVX512)
|
| 516 |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw")
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
| 521 |
-
|
| 522 |
-
|
| 523 |
endif()
|
| 524 |
if(NOT WHISPER_NO_FMA)
|
| 525 |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
|
|
|
|
| 514 |
endif()
|
| 515 |
if(NOT WHISPER_NO_AVX512)
|
| 516 |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw")
|
| 517 |
+
if(NOT WHISPER_NO_AVX512_VBMI)
|
| 518 |
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vbmi")
|
| 519 |
+
endif()
|
| 520 |
+
if(NOT WHISPER_NO_AVX512_VNNI)
|
| 521 |
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vnni")
|
| 522 |
+
endif()
|
| 523 |
endif()
|
| 524 |
if(NOT WHISPER_NO_FMA)
|
| 525 |
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
|
Makefile
CHANGED
|
@@ -142,59 +142,68 @@ ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
|
|
| 142 |
CPUINFO_CMD := sysinfo -cpu
|
| 143 |
endif
|
| 144 |
|
|
|
|
| 145 |
ifdef CPUINFO_CMD
|
|
|
|
|
|
|
| 146 |
AVX_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX|AVX1.0')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
ifneq (,$(AVX_M))
|
| 148 |
CFLAGS += -mavx
|
| 149 |
CXXFLAGS += -mavx
|
| 150 |
endif
|
| 151 |
|
| 152 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
ifneq (,$(AVX2_M))
|
| 154 |
CFLAGS += -mavx2
|
| 155 |
CXXFLAGS += -mavx2
|
| 156 |
endif
|
| 157 |
|
| 158 |
-
AVX512F_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512F')
|
| 159 |
ifneq (,$(AVX512F_M))
|
| 160 |
CFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
|
| 161 |
CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
|
| 162 |
endif
|
| 163 |
|
| 164 |
-
AVX512VNNI_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX512_VNNI|AVX512VNNI')
|
| 165 |
-
ifneq (,$(AVX512VNNI_M))
|
| 166 |
-
CFLAGS += -mavx512vnni
|
| 167 |
-
CXXFLAGS += -mavx512vnni
|
| 168 |
-
endif
|
| 169 |
-
|
| 170 |
-
AVX512VBMI_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512VBMI')
|
| 171 |
ifneq (,$(AVX512VBMI_M))
|
| 172 |
CFLAGS += -mavx512vbmi
|
| 173 |
CXXFLAGS += -mavx512vbmi
|
| 174 |
endif
|
| 175 |
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
CXXFLAGS += -mfma
|
| 180 |
-
endif
|
| 181 |
-
|
| 182 |
-
F16C_M := $(shell $(CPUINFO_CMD) | grep -iw 'F16C')
|
| 183 |
-
ifneq (,$(F16C_M))
|
| 184 |
-
CFLAGS += -mf16c
|
| 185 |
-
CXXFLAGS += -mf16c
|
| 186 |
-
endif
|
| 187 |
-
|
| 188 |
-
SSE3_M := $(shell $(CPUINFO_CMD) | grep -iwE 'PNI|SSE3')
|
| 189 |
-
ifneq (,$(SSE3_M))
|
| 190 |
-
CFLAGS += -msse3
|
| 191 |
-
CXXFLAGS += -msse3
|
| 192 |
-
endif
|
| 193 |
-
|
| 194 |
-
SSSE3_M := $(shell $(CPUINFO_CMD) | grep -iw 'SSSE3')
|
| 195 |
-
ifneq (,$(SSSE3_M))
|
| 196 |
-
CFLAGS += -mssse3
|
| 197 |
-
CXXFLAGS += -mssse3
|
| 198 |
endif
|
| 199 |
endif
|
| 200 |
endif
|
|
|
|
| 142 |
CPUINFO_CMD := sysinfo -cpu
|
| 143 |
endif
|
| 144 |
|
| 145 |
+
# x86 ISA extensions (chronological order)
|
| 146 |
ifdef CPUINFO_CMD
|
| 147 |
+
SSE3_M := $(shell $(CPUINFO_CMD) | grep -iwE 'PNI|SSE3')
|
| 148 |
+
SSSE3_M := $(shell $(CPUINFO_CMD) | grep -iw 'SSSE3')
|
| 149 |
AVX_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX|AVX1.0')
|
| 150 |
+
F16C_M := $(shell $(CPUINFO_CMD) | grep -iw 'F16C')
|
| 151 |
+
FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
|
| 152 |
+
AVX2_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX2')
|
| 153 |
+
AVX512F_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512F')
|
| 154 |
+
AVX512VBMI_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512VBMI')
|
| 155 |
+
AVX512VNNI_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX512_VNNI|AVX512VNNI')
|
| 156 |
+
|
| 157 |
+
# AVX-512 has many subsets, so let's make it easy to disable them all
|
| 158 |
+
ifneq ($(filter-out 0,$(WHISPER_NO_AVX512)),)
|
| 159 |
+
AVX512F_M :=
|
| 160 |
+
AVX512VBMI_M :=
|
| 161 |
+
AVX512VNNI_M :=
|
| 162 |
+
endif
|
| 163 |
+
|
| 164 |
+
ifneq (,$(SSE3_M))
|
| 165 |
+
CFLAGS += -msse3
|
| 166 |
+
CXXFLAGS += -msse3
|
| 167 |
+
endif
|
| 168 |
+
|
| 169 |
+
ifneq (,$(SSSE3_M))
|
| 170 |
+
CFLAGS += -mssse3
|
| 171 |
+
CXXFLAGS += -mssse3
|
| 172 |
+
endif
|
| 173 |
+
|
| 174 |
ifneq (,$(AVX_M))
|
| 175 |
CFLAGS += -mavx
|
| 176 |
CXXFLAGS += -mavx
|
| 177 |
endif
|
| 178 |
|
| 179 |
+
ifneq (,$(F16C_M))
|
| 180 |
+
CFLAGS += -mf16c
|
| 181 |
+
CXXFLAGS += -mf16c
|
| 182 |
+
endif
|
| 183 |
+
|
| 184 |
+
ifneq (,$(FMA_M))
|
| 185 |
+
CFLAGS += -mfma
|
| 186 |
+
CXXFLAGS += -mfma
|
| 187 |
+
endif
|
| 188 |
+
|
| 189 |
ifneq (,$(AVX2_M))
|
| 190 |
CFLAGS += -mavx2
|
| 191 |
CXXFLAGS += -mavx2
|
| 192 |
endif
|
| 193 |
|
|
|
|
| 194 |
ifneq (,$(AVX512F_M))
|
| 195 |
CFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
|
| 196 |
CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
|
| 197 |
endif
|
| 198 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 199 |
ifneq (,$(AVX512VBMI_M))
|
| 200 |
CFLAGS += -mavx512vbmi
|
| 201 |
CXXFLAGS += -mavx512vbmi
|
| 202 |
endif
|
| 203 |
|
| 204 |
+
ifneq (,$(AVX512VNNI_M))
|
| 205 |
+
CFLAGS += -mavx512vnni
|
| 206 |
+
CXXFLAGS += -mavx512vnni
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
endif
|
| 208 |
endif
|
| 209 |
endif
|