Przemysław Pawełczyk commited on
Commit
dd6f1ab
·
unverified ·
1 Parent(s): a361a80

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.

Files changed (2) hide show
  1. CMakeLists.txt +6 -6
  2. 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
- endif()
518
- if(NOT WHISPER_NO_AVX512_VBMI)
519
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vbmi")
520
- endif()
521
- if(NOT WHISPER_NO_AVX512_VNNI)
522
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vnni")
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
- AVX2_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX2')
 
 
 
 
 
 
 
 
 
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
- FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
177
- ifneq (,$(FMA_M))
178
- CFLAGS += -mfma
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