Обновить

Динамический полиморфизм для свободных функций: еще одна практика из С++ для машинного обучения

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели7.7K
Всего голосов 15: ↑15 и ↓0+19
Комментарии7

Комментарии 7

Вспоминается пресловутое десятое правило - логика выглядит похоже на обобщённые функции в CLOS.

Или не понял задачу или что.

#if defined(CPU_MATH) #include "cpumath.h"

#elif defined(GPU_MATH) #include "gpumath.h"

...

#endif

И собирай приложение под нужную конфигурацию.

Чем абстракция из статьи лучше?

Ты правильно понял задачу, но кажется не понял то, что у нее более одного решения. Со своими плюсами и минусами.

На вскидку: плюс в том, что есть динамический выбор где будем исполняться.

Минус в том, что в памяти будет код из 100500 функций, которые сейчас не используются (платформа вычислительная не подходит).

Верю, что решение можно куда-то прикрутить и применение будет оправдано. Тут, к задаче этой, абсолютно бессмысленная абстракция.

Но ок.

В примере который я привел, обычно собирается библиотека с двумя бэкендами например CPU и CUDA. Это позволяет часть вычислений производить на CPU, например при загрузке и предобработке данных, а потом передать их на GPU для вычислений, потом вернуть пользователю на хост. Если вы сталкивались с установкой PyTorch то могли заметить, что существуют отдельные бинарные пакеты для CUDA или ROCm и т.д. И подход на который вы сослались тоже применяется но уже при сборке такого пакета.

А в llama.cpp как сделано? Я не знаю, просто спрашиваю.

Если я правильно понял то там реализовано через динамическую загрузку разделяемых библиотек с одинаковым интерфейсом. Вот ссылки на код: регистрация и загрузка.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
yadro.com
Дата регистрации
Дата основания
Численность
5 001–10 000 человек
Местоположение
Россия
Представитель
Ульяна Соловьева