diff --git a/llama.cpp b/llama.cpp index 9b4117cb7..0015edec1 100644 --- a/llama.cpp +++ b/llama.cpp @@ -852,8 +852,11 @@ static bool llama_eval_internal( }; 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 = {}; - 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); memcpy(embd->data, tokens, N*ggml_element_size(embd));