]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
make : improve cpuinfo handling on x86 hosts (#1238)
authorPrzemysław Pawełczyk <redacted>
Tue, 5 Sep 2023 11:58:47 +0000 (13:58 +0200)
committerGitHub <redacted>
Tue, 5 Sep 2023 11:58:47 +0000 (14:58 +0300)
* make : simplify and correct x86 ISA extensions detection on the host

It got broken in commit c5f9acf4b797 for Haiku and Mac OS (Intel),
which report CPU features in upper case.

Now we're finding the names in case-insensitive manner and as words.
SSE3 detection has been corrected for Linux, which uses PNI for that
(Prescott New Instructions).

* make : use dmesg.boot in FreeBSD/DragonFlyBSD to detect x86 ISA extensions on the host

* make : enable x86 ISA extensions on the host both in CFLAGS and CXXFLAGS

* make : correct AVX x86 ISA extension detection on macOS (Intel) host

It got broken in commit c5f9acf4b797.  macOS calls it AVX1.0.

Makefile

index a2631011beac031b565a02d7c9059890f4fd96d8..d775b74b4b3396b2c6c16280bc74f4bd1b07c0e7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -65,57 +65,57 @@ endif
 # Architecture specific
 # TODO: probably these flags need to be tweaked on some architectures
 #       feel free to update the Makefile for your architecture and send a pull request or issue
-ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686))
+ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
        ifeq ($(UNAME_S),Darwin)
                CPUINFO_CMD := sysctl machdep.cpu.features
        else ifeq ($(UNAME_S),Linux)
                CPUINFO_CMD := cat /proc/cpuinfo
        else ifneq (,$(filter MINGW32_NT% MINGW64_NT%,$(UNAME_S)))
                CPUINFO_CMD := cat /proc/cpuinfo
+       else ifneq (,$(filter DragonFly FreeBSD,$(UNAME_S)))
+               CPUINFO_CMD := grep Features /var/run/dmesg.boot
        else ifeq ($(UNAME_S),Haiku)
                CPUINFO_CMD := sysinfo -cpu
        endif
 
-       ifdef CPUINFO_CMD       
-    AVX_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx ")
-               ifneq (,$(findstring avx,$(AVX_M)))
-                       CFLAGS += -mavx
-               endif
-    
-               AVX2_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx2 ")
-               ifneq (,$(findstring avx2,$(AVX2_M)))
-                       CFLAGS += -mavx2
+       ifdef CPUINFO_CMD
+               AVX_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX|AVX1.0')
+               ifneq (,$(AVX_M))
+                       CFLAGS   += -mavx
+                       CXXFLAGS += -mavx
                endif
 
-               FMA_M := $(shell $(CPUINFO_CMD) | grep -m 1 "fma ")
-               ifneq (,$(findstring fma,$(FMA_M)))
-                       CFLAGS += -mfma
+               AVX2_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX2')
+               ifneq (,$(AVX2_M))
+                       CFLAGS   += -mavx2
+                       CXXFLAGS += -mavx2
                endif
 
-               F16C_M := $(shell $(CPUINFO_CMD) | grep -m 1 "f16c ")
-               ifneq (,$(findstring f16c,$(F16C_M)))
-                       CFLAGS += -mf16c
+               FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
+               ifneq (,$(FMA_M))
+                       CFLAGS   += -mfma
+                       CXXFLAGS += -mfma
+               endif
 
-                       AVX1_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx ")
-                       ifneq (,$(findstring avx,$(AVX1_M)))
-                               CFLAGS += -mavx
-                       endif
+               F16C_M := $(shell $(CPUINFO_CMD) | grep -iw 'F16C')
+               ifneq (,$(F16C_M))
+                       CFLAGS   += -mf16c
+                       CXXFLAGS += -mf16c
                endif
 
-               SSE3_M := $(shell $(CPUINFO_CMD) | grep -m 1 "sse3 ")
-               ifneq (,$(findstring sse3,$(SSE3_M)))
-                       CFLAGS += -msse3
+               SSE3_M := $(shell $(CPUINFO_CMD) | grep -iwE 'PNI|SSE3')
+               ifneq (,$(SSE3_M))
+                       CFLAGS   += -msse3
+                       CXXFLAGS += -msse3
                endif
 
-               SSSE3_M := $(shell $(CPUINFO_CMD) | grep -m 1 "ssse3 ")
-               ifneq (,$(findstring ssse3,$(SSSE3_M)))
-                       CFLAGS += -mssse3
+               SSSE3_M := $(shell $(CPUINFO_CMD) | grep -iw 'SSSE3')
+               ifneq (,$(SSSE3_M))
+                       CFLAGS   += -mssse3
+                       CXXFLAGS += -mssse3
                endif
        endif
 endif
-ifeq ($(UNAME_M),amd64)
-       CFLAGS += -mavx -mavx2 -mfma -mf16c
-endif
 
 ifneq ($(filter ppc64%,$(UNAME_M)),)
        POWER9_M := $(shell grep "POWER9" /proc/cpuinfo)