Съвременните езици за програмиране от високо ниво и усъвършенстваните компилатори значително опростяват разработването на софтуер и намаляват разходите за него. Този начин на програмиране обаче може да скрие възможностите за производителност на съвременния хардуер отчасти поради неефективността на интерфейсите за програмиране на приложения (API). Очевидно добрият стар път на асемблерния код може да подобри производителността между три и 94 пъти в зависимост от работното натоварване, според FFmpeg. Хардуерът, на който е постигната тази многократно увеличена производителност, не е разкрит.
FFmpeg е проект за декодиране на видео с отворен код, разработен от доброволци, които допринасят за неговата кодова база, отстраняват грешки и добавят нови функции. Проектът се ръководи от малка група основни разработчици и поддържащи, които наблюдават посоката му и гарантират, че приносите отговарят на определени стандарти. Те координират циклите на разработване и пускане на проекта, като обединяват приноси от други разработчици. Тази група разработчици се опита да реализира ръчно написан код на асемблер AVX512 - нещо, което рядко е правено преди, поне не и във видео индустрията.
Разработчиците са създали оптимизиран кодов път, използващ набора от инструкции AVX-512, за ускоряване на специфични функции в библиотеката за обработка на мултимедия FFmpeg. Като са използвали AVX-512, те са успели да постигнат значително подобрение на производителността - от три до 94 пъти по-бързо - в сравнение със стандартните имплементации. AVX-512 дава възможност за паралелна обработка на големи части от данни с помощта на 512-битови регистри, които могат да обработват до 16 FLOPS с единична точност или 8 FLOPS с двойна точност в една операция. Тази оптимизация е идеална за тежки изчислителни задачи като цяло, но в случая с обработката на видео и изображения в частност.
Резултатите от бенчмаркинга показват, че новият ръчно написан кодов път AVX-512 се изпълнява значително по-бързо от други реализации, включително базовия код на C и по-ниски набори от SIMD инструкции като AVX2 и SSE3. В някои случаи преработеният код на AVX-512 постига почти 94 пъти увеличение на скоростта в сравнение с базовия, което подчертава ефективността на ръчно оптимизирания код на асемблер за AVX-512.
Това постижение е особено ценно за потребителите, работещи с високопроизводителен хардуер, поддържащ AVX-512, като им позволява да обработват мултимедийно съдържание много по-ефективно. Съществува обаче проблем: Intel забрани AVX-512 за своите процесори Core от 12-о, 13-о и 14-о поколение, оставяйки собствениците на тези процесори без тях. От друга страна, процесорите от серията Ryzen 9000 на AMD разполагат с напълно активиран AVX-512 FPU, така че собствениците на тези процесори могат да се възползват от постижението на FFmpeg.
За съжаление поради сложността и специализирания характер на AVX-512 подобни оптимизации обикновено са запазени за критични за производителността приложения и изискват опит в програмирането на ниско ниво и микроархитектурата на процесора.
Снимка: Unsplash