Найти в Дзене
Борис Державец

Последняя оптимизация AVX-512 для FFmpeg демонстрирует серьезное улучшение на AMD Ryzen

Сегодня для широко используемой библиотеки мультимедиа с открытым исходным кодом FFmpeg был объединен еще один оптимизированный путь кода AVX-512... По сравнению с чистым кодом C, путь кода AVX2 который был в 10,98 раза быстрее, этот новый путь кода AVX-512 работает в 18 раз быстрее обычного кода C. Последний код FFmpeg, подвергшийся обработке AVX-512, — это функция uyvytoyuv422 для преобразования формата UYVY в YUV422. Оптимизированный путь кода AVX-512 с помощью рукописного ассемблера здесь является большим преимуществом. AVX-512, в частности, обнаружен с процессорами Intel Xeon или всеми процессорами AMD Ryzen и EPYC, начиная с Zen 4. Тесты производительности, опубликованные для этого патча, проводились с AMD Ryzen 9 7950X. Прирост очень существенный: производительность этого пути кода AVX-512 в 18,02 раза выше производительности обычного пути C, тогда как производительность только пути AVX2 составляет 10,98 раза. Cриш Адига, автор патча, объяснил: Скалярный цикл заменен замаскиров

Сегодня для широко используемой библиотеки мультимедиа с открытым исходным кодом FFmpeg был объединен еще один оптимизированный путь кода AVX-512... По сравнению с чистым кодом C, путь кода AVX2 который был в 10,98 раза быстрее, этот новый путь кода AVX-512 работает в 18 раз быстрее обычного кода C.

Последний код FFmpeg, подвергшийся обработке AVX-512, — это функция uyvytoyuv422 для преобразования формата UYVY в YUV422. Оптимизированный путь кода AVX-512 с помощью рукописного ассемблера здесь является большим преимуществом. AVX-512, в частности, обнаружен с процессорами Intel Xeon или всеми процессорами AMD Ryzen и EPYC, начиная с Zen 4. Тесты производительности, опубликованные для этого патча, проводились с AMD Ryzen 9 7950X.

Picture 1
Picture 1

Прирост очень существенный: производительность этого пути кода AVX-512 в 18,02 раза выше производительности обычного пути C, тогда как производительность только пути AVX2 составляет 10,98 раза.

Picture 2
Picture 2

Cриш Адига, автор патча, объяснил:

Скалярный цикл заменен замаскированными инструкциями AVX512. Для извлечения Y из UYVY используется vperm2b вместо различных AND и packuswb. Вместо загрузки векторов с чередующимися полосами, как это сделано в версии AVX2, используется обычная загрузка. В конце packuswb для U и V выполняется дополнительная операция перестановки, чтобы получить требуемую компоновку».

Неплохой результат для следующего выпуска FFmpeg, если ваш ЦП поддерживает AVX-512. Это особенно актуально для AMD Zen 4 и тем более с AVX-512 AMD Zen 5, представленным во всем их стеке ЦП.

Feel free to to take a look at https://www.phoronix.com/news/FFmpeg-AVX-512-uyvytoyuv422