Реализация динамического полиморфизма для свободных функций (Кирилл Колодяжный)
24 мая в Санкт-Петербурге состоялся первый System Level Meetup от компании YADRO. В рамках мероприятия спикер из YADRO, Кирилл Колодяжный, выступил с докладом "Реализация динамического полиморфизма для свободных функций". Он рассказал про один из вариантов реализации механизма динамического полиморфизма для свободных функций. Под этим подразумевается использование одной сигнатуры функции, но вызов различных ее реализаций в зависимости от значений аргументов. В рамках ООП такая задача может быть реализована с использованием виртуальных функций. Однако Кирилл показал, как можно автоматизировать процедурный подход, используя подобие таблицы виртуальных вызовов. А также рассказал про составные ключи и type-erasure для упаковки функций. Данное решение используется, например, в платформах машинного обучения, позволяя создавать код для тензорных вычислений, который можно без изменения запускать на разных аппаратных вычислителях и в разных сценариях. 00:20 - О докладе. 00:45 - Динамический полиморфизм для свободные функцийв контексте математический библиотек для машинного обучения. 05:20 - Таблица вызовов - FunctionTable. 08:22 - DispatchKey – индекс в массиве функций. 10:22 - Класс Dispatcher. 12:15 - Анализ аргументов, извлечение значений, перебор аргументов функций. 14:49 - Получение значения типа устройства. 16:04 - Производительность в PyTorch: Dispatcher vs LazyTensor. 17:11 - Выводы. 18:10 - Вопросы участников. Подробности о докладах и анонсы следующих митапов вы найдете на нашем Хабре https://habr.com/ru/companies/yadro/articles/ 📚 Дополнительные материалы ✅ Статьи на Истовом инженере: ·Виноград, Фурье и немного наивности: 4 подхода к реализации сверток с простыми примерами https://engineer.yadro.com/article/4-podhoda-k-realizacii-svertok-s-prostymi-primerami/ · Три икса: новый уровень работы с большими свертками в PyTorch для обучения моделей https://engineer.yadro.com/article/kak-rasshirit-vozmozhnosti-pytorch-dlya-raboty-so-svertkami/ · Вирт, Кормен и диалекты Basic: что изучить про алгоритмы и структуры данных разработчикам на С++ https://engineer.yadro.com/article/algoritmy-i-struktury-dannyh-cpp/ · Обзор книги «С++ 20 в деталях»: доступно, но не для джунов https://engineer.yadro.com/article/c-get-the-details-book/ · Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++ https://engineer.yadro.com/article/ml-for-neural-networks/ ✅ Хабр: · Пишем свой кодек для JSON с фиксированной схемой: опыт разработчика и сравнение производительности https://habr.com/ru/companies/yadro/articles/972524/ · Используем паттерны C++ в ML: пишем тензор с factory, выделяем память и управляем динамическими типами https://habr.com/ru/companies/yadro/articles/994326/ · Динамический полиморфизм для свободных функций: еще одна практика из С++ для машинного обучения https://habr.com/ru/companies/yadro/articles/997006/ · Почему AI не может полноценно участвовать в разработке на С++ https://habr.com/ru/companies/yadro/articles/1003670/ · Девиртуализация в C++, компиляторах и вашей программе https://habr.com/ru/companies/yadro/articles/938694/ 🎧 Послушать: · Подкаст «Битовые маски» с Константином Владимировым. Компилятор для CPU и GPU. Часть 1. LLVM и GCC https://engineer.yadro.com/podcast/compiler-cpu-gpu-part-1/ · Подкаст «Битовые маски» с Константином Владимировым. Часть 2. LLVM в GPU компиляторах. Стандарты С++ https://engineer.yadro.com/podcast/compiler-cpu-gpu-part-2/
24 мая в Санкт-Петербурге состоялся первый System Level Meetup от компании YADRO. В рамках мероприятия спикер из YADRO, Кирилл Колодяжный, выступил с докладом "Реализация динамического полиморфизма для свободных функций". Он рассказал про один из вариантов реализации механизма динамического полиморфизма для свободных функций. Под этим подразумевается использование одной сигнатуры функции, но вызов различных ее реализаций в зависимости от значений аргументов. В рамках ООП такая задача может быть реализована с использованием виртуальных функций. Однако Кирилл показал, как можно автоматизировать процедурный подход, используя подобие таблицы виртуальных вызовов. А также рассказал про составные ключи и type-erasure для упаковки функций. Данное решение используется, например, в платформах машинного обучения, позволяя создавать код для тензорных вычислений, который можно без изменения запускать на разных аппаратных вычислителях и в разных сценариях. 00:20 - О докладе. 00:45 - Динамический полиморфизм для свободные функцийв контексте математический библиотек для машинного обучения. 05:20 - Таблица вызовов - FunctionTable. 08:22 - DispatchKey – индекс в массиве функций. 10:22 - Класс Dispatcher. 12:15 - Анализ аргументов, извлечение значений, перебор аргументов функций. 14:49 - Получение значения типа устройства. 16:04 - Производительность в PyTorch: Dispatcher vs LazyTensor. 17:11 - Выводы. 18:10 - Вопросы участников. Подробности о докладах и анонсы следующих митапов вы найдете на нашем Хабре https://habr.com/ru/companies/yadro/articles/ 📚 Дополнительные материалы ✅ Статьи на Истовом инженере: ·Виноград, Фурье и немного наивности: 4 подхода к реализации сверток с простыми примерами https://engineer.yadro.com/article/4-podhoda-k-realizacii-svertok-s-prostymi-primerami/ · Три икса: новый уровень работы с большими свертками в PyTorch для обучения моделей https://engineer.yadro.com/article/kak-rasshirit-vozmozhnosti-pytorch-dlya-raboty-so-svertkami/ · Вирт, Кормен и диалекты Basic: что изучить про алгоритмы и структуры данных разработчикам на С++ https://engineer.yadro.com/article/algoritmy-i-struktury-dannyh-cpp/ · Обзор книги «С++ 20 в деталях»: доступно, но не для джунов https://engineer.yadro.com/article/c-get-the-details-book/ · Ищем Арнольда Шварценеггера среди мужчин, женщин и детей с помощью нейросети на С++ https://engineer.yadro.com/article/ml-for-neural-networks/ ✅ Хабр: · Пишем свой кодек для JSON с фиксированной схемой: опыт разработчика и сравнение производительности https://habr.com/ru/companies/yadro/articles/972524/ · Используем паттерны C++ в ML: пишем тензор с factory, выделяем память и управляем динамическими типами https://habr.com/ru/companies/yadro/articles/994326/ · Динамический полиморфизм для свободных функций: еще одна практика из С++ для машинного обучения https://habr.com/ru/companies/yadro/articles/997006/ · Почему AI не может полноценно участвовать в разработке на С++ https://habr.com/ru/companies/yadro/articles/1003670/ · Девиртуализация в C++, компиляторах и вашей программе https://habr.com/ru/companies/yadro/articles/938694/ 🎧 Послушать: · Подкаст «Битовые маски» с Константином Владимировым. Компилятор для CPU и GPU. Часть 1. LLVM и GCC https://engineer.yadro.com/podcast/compiler-cpu-gpu-part-1/ · Подкаст «Битовые маски» с Константином Владимировым. Часть 2. LLVM в GPU компиляторах. Стандарты С++ https://engineer.yadro.com/podcast/compiler-cpu-gpu-part-2/




