Pull request #20793 возвращает уменьшение синхронизации при операциях разделённых вычислений в llama.cpp, в первую очередь направлено на улучшение производительности CUDA. Изменения включают замену синхронных копий на асинхронные и ослабление требований к синхронизации между копиями входных данных на поддерживаемых бэкендах.

  • Улучшает производительность CUDA за счёт меньшего количества синхронизаций между токенами.
  • Добавляет возможность копирования CPU-to-CUDA в ggml_backend_cuda_cpy_tensor_async().
  • Вводит функцию для ослабления требований к синхронизации между копиями входных данных, в настоящее время поддерживается для CUDA.
  • Заменяет синхронную копию на асинхронную функцию копирования и добавляет макросы защиты для сборок без CUDA.
  • Перерабатывает обнаружение бэкенда в ggml-backend.cpp для избежания конфликтов линковки и упрощает синхронизации для соответствия паттерну saaasg.

Эти изменения позволяют таким бэкендам, как Vulkan, использовать ослабленные явные синхронизации для копирований HtoD и выполнения графов, сохраняя при этом более строгие проверки для асинхронных копирований CPU-to-CUDA.