Ускорение вычислений в алгоритме DRS виртуализации через векторизацию

Инфраструктура и эксплуатация

Доклад принят в программу конференции

Мнение Программного комитета о докладе

Переписать решение с Python на Go и получить ускорение в 35 раз — звучит приятно. Но можно же пойти дальше, вспомнить про возможности современных процессоров и увеличить отрыв Go до 200 раз. Игорь расскажет, в какой задаче им это пригодилось и через что пришлось пройти.

Целевая аудитория

Разработчики Go, заинтересованные в применении векторных инструкций, сложностей кодогенерации, решении задач, требующих нетривиальных вычислений.

Тезисы

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

На примере алгоритма DRS платформы Evolution компании Cloud. ru рассмотрим, как он может быть решен на разных версиях операций с плавающей точкой процессоров x86 и Arm. В чем сложности задействования SIMD-операций. Почему это сложнее на Go, и как это обойти. Бонус — сравнения со скоростью видеокарты, так ли они сильны.

Писал ОС для телефонов еще до Android и первых iOS. Разрабатывал сетевой стек для умных лампочек. С 2010 года занимается разработкой облачных услуг. Сначала в компании Parallels, теперь в компании Cloud.ru.

Видео