Sfoglia il codice sorgente

Optimization: eliminate addition of redundant stacks when advancing grammar. (#6616)

Clint Herron 1 anno fa
parent
commit
04a5ac211e
1 ha cambiato i file con 7 aggiunte e 2 eliminazioni
  1. 7 2
      llama.cpp

+ 7 - 2
llama.cpp

@@ -11861,7 +11861,9 @@ static void llama_grammar_advance_stack(
         std::vector<std::vector<const llama_grammar_element *>> & new_stacks) {
         std::vector<std::vector<const llama_grammar_element *>> & new_stacks) {
 
 
     if (stack.empty()) {
     if (stack.empty()) {
-        new_stacks.emplace_back(stack);
+        if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) {
+            new_stacks.emplace_back(stack);
+        }
         return;
         return;
     }
     }
 
 
@@ -11898,7 +11900,10 @@ static void llama_grammar_advance_stack(
         }
         }
         case LLAMA_GRETYPE_CHAR:
         case LLAMA_GRETYPE_CHAR:
         case LLAMA_GRETYPE_CHAR_NOT:
         case LLAMA_GRETYPE_CHAR_NOT:
-            new_stacks.emplace_back(stack);
+            if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) {
+                // only add the stack if it's not a duplicate of one we already have
+                new_stacks.emplace_back(stack);
+            }
             break;
             break;
         default:
         default:
             // end of alternate (LLAMA_GRETYPE_END, LLAMA_GRETYPE_ALT) or middle of char range
             // end of alternate (LLAMA_GRETYPE_END, LLAMA_GRETYPE_ALT) or middle of char range