]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
wip : improve makefile
authorGeorgi Gerganov <redacted>
Wed, 5 Oct 2022 17:41:35 +0000 (20:41 +0300)
committerGeorgi Gerganov <redacted>
Wed, 5 Oct 2022 20:03:46 +0000 (23:03 +0300)
Makefile
main.cpp
stream.cpp
whisper.cpp

index 4e1315f9590e6654d293f219bdae63939adb3a85..04e7974427d5c46001e78fb40e167f5c494fe04a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,25 +1,71 @@
-CC_SDL=`sdl2-config --cflags --libs`
+UNAME_S := $(shell uname -s)
+UNAME_P := $(shell uname -p)
+UNAME_M := $(shell uname -m)
+
+#
+# Compile flags
+#
+
+CFLAGS   = -O3 -std=c11
+CXXFLAGS = -O3 -std=c++11
+
+CFLAGS   += -Wall -Wextra -Wno-unused-parameter -Wno-unused-function
+CXXFLAGS += -Wall -Wextra -Wno-unused-parameter -Wno-unused-function
+
+# OS specific
+# TODO: support Windows
+ifeq ($(UNAME_S),Linux)
+       CFLAGS += -pthread
+endif
+ifeq ($(UNAME_S),Darwin)
+       CFLAGS += -pthread
+endif
+
+# Architecture specific
+ifeq ($(UNAME_P),x86_64)
+       CFLAGS += -mavx -mavx2 -mfma -mf16c
+endif
+ifneq ($(filter arm%,$(UNAME_P)),)
+       CFLAGS += -mfpu=neon
+endif
+ifneq ($(filter aarch64%,$(UNAME_M)),)
+       CFLAGS += -mfpu=neon
+endif
+ifneq ($(filter armv%,$(UNAME_M)),)
+       # Raspberry Pi 4
+       CFLAGS += -mcpu=cortex-a72 -mfloat-abi=hard -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
+endif
+
+#
+# Build library + main
+#
 
-main: ggml.o whisper.o main.o
-       g++ -pthread -o main ggml.o whisper.o main.o
+main: main.cpp ggml.o whisper.o
+       $(CXX) $(CXXFLAGS) main.cpp whisper.o ggml.o -o main
        ./main -h
 
 ggml.o: ggml.c ggml.h
-       gcc -pthread -O3 -mavx -mavx2 -mfma -mf16c -c ggml.c
+       $(CC)  $(CFLAGS)   -c ggml.c
 
 whisper.o: whisper.cpp whisper.h
-       gcc -pthread -O3 -std=c++11 -c whisper.cpp
+       $(CXX) $(CXXFLAGS) -c whisper.cpp
 
-main.o: main.cpp ggml.h
-       g++ -pthread -O3 -std=c++11 -c main.cpp
-
-stream: stream.cpp
-       g++ -pthread -O3 -std=c++11 -o stream stream.cpp ggml.o whisper.o $(CC_SDL)
-
-# clean up the directory
 clean:
        rm -f *.o main
 
+#
+# Examples
+#
+
+CC_SDL=`sdl2-config --cflags --libs`
+
+stream: stream.cpp ggml.o whisper.o
+       $(CXX) $(CXXFLAGS) stream.cpp ggml.o whisper.o -o stream $(CC_SDL)
+
+#
+# Audio samples
+#
+
 # download a few audio samples into folder "./samples":
 .PHONY: samples
 samples:
@@ -36,6 +82,9 @@ samples:
        @ffmpeg -loglevel -0 -y -i samples/mm1.wav -ar 16000 -ac 1 -c:a pcm_s16le samples/mm0.wav
        @rm samples/mm1.wav
 
+#
+# Models
+#
 
 # if not already downloaded, the following targets download the specified model and
 # runs it on all samples in the folder "./samples":
index 1885eb6d40624c272fef9bbb066ebd0653dc9241..6d1c55dace01eb6966d959b804e0738df820ea55 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -149,11 +149,11 @@ int main(int argc, char ** argv) {
         // convert to mono, float
         pcmf32.resize(n);
         if (wav.channels == 1) {
-            for (size_t i = 0; i < n; i++) {
+            for (int i = 0; i < n; i++) {
                 pcmf32[i] = float(pcm16[i])/32768.0f;
             }
         } else {
-            for (size_t i = 0; i < n; i++) {
+            for (int i = 0; i < n; i++) {
                 pcmf32[i] = float(pcm16[2*i] + pcm16[2*i + 1])/65536.0f;
             }
         }
index d0e40c20bcff94b2048c376bbe72bbc04f849496..e9d0364bf3b256aaa47bf389b126a26ed69ad7a2 100644 (file)
@@ -238,7 +238,7 @@ int main(int argc, char ** argv) {
         }
 
         // process 3 seconds of new audio
-        while ((int) SDL_GetQueuedAudioSize(g_dev_id_in) < 3*WHISPER_SAMPLE_RATE*sizeof(float)) {
+        while (SDL_GetQueuedAudioSize(g_dev_id_in) < 3*WHISPER_SAMPLE_RATE*sizeof(float)) {
             SDL_Delay(1);
         }
         const int n_samples_new = SDL_GetQueuedAudioSize(g_dev_id_in)/sizeof(float);
index 4f105eefe40755ca7793dd6d7a88e27d9cf622e8..6fc0130c5f449defb4eabe9ce243725f0d53d048 100644 (file)
@@ -1031,8 +1031,6 @@ bool whisper_encode(
     const auto & mel_inp = wctx.mel;
     const auto & hparams = model.hparams;
 
-    const int n_vocab = hparams.n_vocab;
-
     const int n_ctx   = hparams.n_audio_ctx;
     const int n_state = hparams.n_audio_state;
     const int n_head  = hparams.n_audio_head;
@@ -2365,7 +2363,6 @@ int whisper_full(
 
         bool done = false;
         int seek_delta = 100*WHISPER_CHUNK_SIZE;
-        whisper_token last_id = 0;
 
         // print the prompt
         //printf("\n\n");
@@ -2395,8 +2392,6 @@ int whisper_full(
             // feel free to experiment!
             //
             {
-                const int n_vocab = whisper_n_vocab(ctx);
-
                 whisper_token id  = 0;
                 whisper_token tid = whisper_token_beg(ctx);
 
@@ -2410,7 +2405,6 @@ int whisper_full(
                     seek_delta = 2*(id - whisper_token_beg(ctx));
                     result_len = i + 1;
                 }
-                last_id = id;
 
                 // add it to the context
                 prompt.push_back(id);
@@ -2444,7 +2438,7 @@ int whisper_full(
 
             std::string text = "";
 
-            for (int i = 0; i < result_cur.size(); i++) {
+            for (int i = 0; i < (int) result_cur.size(); i++) {
                 if (params.print_special_tokens == false && result_cur[i].id >= whisper_token_eot(ctx)) {
                 } else {
                     text += whisper_token_to_str(ctx, result_cur[i].id);
@@ -2464,7 +2458,7 @@ int whisper_full(
                         result_all.push_back({ t0, t1, text });
                     }
                     text = "";
-                    while (result_cur[i].id > whisper_token_beg(ctx) && i < result_cur.size()) {
+                    while (result_cur[i].id > whisper_token_beg(ctx) && i < (int) result_cur.size()) {
                         i++;
                     }
                     i--;