Просмотр исходного кода

Don't interefe with BLAS for large prompts by running only 1 thread

Georgi Gerganov 2 лет назад
Родитель
Сommit
4640eff23d
1 измененных файлов с 4 добавлено и 1 удалено
  1. 4 1
      llama.cpp

+ 4 - 1
llama.cpp

@@ -852,8 +852,11 @@ static bool llama_eval_internal(
     };
     };
 
 
     struct ggml_context * ctx0 = ggml_init(params);
     struct ggml_context * ctx0 = ggml_init(params);
+
+    // for big prompts, if BLAS is enabled, it is better to use only one thread
+    // otherwise, the threads are spin-lock waiting for the BLAS calls and are degrading the performance
     ggml_cgraph gf = {};
     ggml_cgraph gf = {};
-    gf.n_threads = n_threads;
+    gf.n_threads = N > 255 && ggml_cpu_has_blas() ? 1 : n_threads;
 
 
     struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N);
     struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N);
     memcpy(embd->data, tokens, N*ggml_element_size(embd));
     memcpy(embd->data, tokens, N*ggml_element_size(embd));