Привет, Гиктаймс! Открыв недавно для себя прекрасный мир ускорения обработки данных силами видеокарт с помощью OpenCL, я решил написать небольшой вводный материал для новичков, не знакомых с этой технологией на практике. В Интернете нередко встречаются вопросы «какой прирост производительности я получу?», но ответы бывают либо абстрактными, либо излишне теоретизированными.
Этот пост призван наглядно показать, как применение OpenCL способно ускорить рендеринг видео в программах видеомонтажа. Глубокого погружения в теорию и матан вы не встретите – подробных теоретических статей про OpenCL на Гиктаймсе и Хабре предостаточно и без меня. Здесь будет только описание задачи и результаты тестов, поэтому прошу относиться к тексту именно как к простому вводному гайду для начинающих.



Зачем оно нужно?


Современные видеокарты – это настоящие вычислительные монстры, вся мощь которых обычно тратится на игры. Неглупые люди смекнули, что если организовать программистам прямой доступ к вычислительным блокам видеочипов, то можно всю эту колоссальную мощь задействовать под любые другие задачи, а не только обработку 3D-графики.

Первой в реализации этой идеи преуспела компания NVIDIA со своей архитектурой параллельных вычислений CUDA (Compute Unified Device Architecture). При помощи расширенного синтаксиса языка C и особого компилятора разработчики получили возможность задействовать для вычислительных задач графический чип. AMD, в свою очередь, представила Stream SDK – свое фирменное видение CUDA.

Результат был феноменальный – процессы, связанные с обработкой медиаданных, что подразумевает высокий уровень распараллеливания, завершались в разы быстрее, чем в случае вычислений силами центрального процессора. Особенно явно преимущество GPU проявлялось при рендеринге в программах 3D-моделирования и видеообработке.



Год спустя после выхода CUDA консорциум Khronos Group выпустил фреймворк OpenCL. Фактически он должен был унифицировать код для доступа к вычислительным мощностям процессоров на разных архитектурах, включая видеоядра. С этого момента в профессиональный софт начала активно внедряться поддержка нового фреймворка.

На сегодняшний день OpenCL поддерживают программы Adobe, медиаконвертеры, ряд популярных 3D-рендеров, CAD и софт для математического моделирования.



Лучше CUDA или OpenCL?


Очень частый и очень интересный вопрос вынесен в подзаголовок. Эти две технологии, как непохожие братья. Как и многострадальный PhysX, CUDA – технология закрытая, поддерживаемая только чипами NVIDIA и далеко не всем специализированным ПО. OpenCL – экстраверт, код открыт любому энтузиасту, любое ПО с поддержкой вычислений на GPU по определению работает с OpenCL.

Программисты NVIDIA не лаптем щи хлебают – если взять две сферические видеокарты в вакууме с одинаковой производительностью, то CUDA на чипе NVIDIA показывает в среднем на 20% большую производительность, чем OpenCL на чипе AMD. Но есть, как говорится, нюанс – если CUDA от NVIDIA работает быстро и хорошо, то OpenCL на картах этой компании немного уступает скорости обработки OpenCL от AMD. Несколько лет назад ситуация была совсем плачевная, но со временем с помощью драйверов разрыв удалось наверстать. Тем не менее, удельная производительность NVIDIA GeForce в OpenCL до сих пор немного ниже таковой у AMD Radeon. Поэтому в самом дурном положении окажутся те, кто приобрёл карту NVIDIA для работы с приложением, поддерживающим исключительно OpenCL — сам адаптер выйдет дороже, а его эффективность может быть ниже, чем у Radeon. Такая игра свеч не стоит.



Железо


Прекрасный мир OpenCL я открыл для себя лишь этим летом, купив сразу две видеокарты AMD Radeon серии 300: SAPPHIRE NITRO R9 380 и SAPPHIRE Tri-X R9 390X. Одну из них планировалось сдать обратно в магазин в зависимости от результатов домашних тестов. Карты покупались для надомного видеомонтажа, выбор в сторону Radeon был вполне осознанным: с одной стороны, CUDA работает быстрее, чем OpenCL. С другой, как выяснилось, OpenCL поддерживается значительно большим количеством профессионального софта, чем CUDA, а производительность карт NVIDIA в OpenCL оставляет желать лучшего.



Из предложенного ассортимента карты SAPPHIRE мне понравились более остальных. В отличие от любителей референсного дизайна, SAPPHIRE использует в системе охлаждения классические вентиляторы, которые работают значительно тише референсных центробежных ветродуев – к таким у меня выработалась стойкая неприязнь после беглого знакомства с видеокартой-пылесосом Radeon 4870x2.
Дома при распаковке двух огромных коробок я почувствовал себя замшелым мастодонтом – видеокарты немаленькие. SAPPHIRE R9 390X так и вовсе огромная, с тремя вентиляторами и радиатором, превышающим размеры печатной платы. Сперва я даже поволновался, влезут ли эти монстры в мой корпус. К счастью, влезли, но из корзины для жестких дисков пришлось демонтировать один хард. Киловаттный блок питания также был не лишним – R9 390X требует два четырехконтактных разъема питания, а такой ток вытянет не каждый БП.



Итак, мой домашний конфиг, на котором и проводились сравнительные тесты OpenCL:
  • Процессор: Intel Core i5-2500K, разогнанный до 3.7 ГГц
  • Оперативная память: 12 Гбайт DDR-1333
  • Материнская плата: ASUS P8Z77-V PRO
  • Накопители: системный SSD A-DATA 120 Гб, для контента HDD WD Black WD20EARS 2 Тб
  • Блок питания: Corsair 1000 Вт


Софт


Если Adobe Premiere Pro CS4 был тяжким грузом в офисе, то дома можно было организовать рабочее пространство по своему вкусу. Едва ли я когда-нибудь задумался бы о покупке Premiere Pro, если бы Adobe не выкатила замечательную, на мой взгляд, систему подписки Creative Cloud. Теперь за 600 рублей в месяц я имею легальный и постоянно обновляемый Premiere Pro CC. И он-то, в отличие от офисного старикана, нативно поддерживает рендеринг с помощью OpenCL и CUDA!
Если ваша видеокарта работает с OpenCL или CUDA, то еще на стадии создания проекта в Premiere Pro можно выбрать рендер. За аппаратное ускорение отвечает Mercury Playback Engine GPU (OpenCL) или (CUDA). В уже готовом проекте рендер можно изменить через Project Settings из меню File.



Как я уже говорил, с помощью OpenCL можно переложить на видеокарту вычисления по применению видеоэффектов. Однако не все эффекты в Premiere Pro поддерживают OpenCL – узнать об этом можно по наличию или отсутствию вот такого значка в списке.



Тесты


В качестве тестового проекта я выбрал двухминутный ролик, состоящий из множества отрезков с видео Full HD с битрейтом 72 Мбит/с и фреймрейтом 24 кадра в секунду. Поверх всего этого безобразия был наложен ускоряемый эффект Lumetri Color, которым я провел цветокорррекцию. На выходе должен был получиться ролик в формате h.264, в разрешении 1920х1080 (то есть без изменений), битрейтом 6-7 Мбит/с, применялась двухпроходное кодирование.
Для подтверждения работы видеокарты я снимал параметры GPU-Z – глядя на частоту графического ядра, легко понять, когда рендеринг видео идет силами центрального процессора, а когда GPU.





В первом тестовом прогоне я отключил эффект Lumetri Color, так что весь рендеринг заключался в изменении битрейта видео.

Прогон 1:
проект 2 минуты, h.264, 6-7 mbps, без эффектов
CPU 3:09
SAPPHIRE Tri-X R9 390X 2:33
SAPPHIRE NITRO R9 380 2:38

Без применения эффектов разница в скорости рендеринга между процессором и мощной современной видеокартой очень невелика. При обработке видео общей длительностью около часа выигрыш от использования OpenCL будет более заметным, но все равно очень незначительным. Тем не менее, практически всегда в процессе монтажа к видео применяют эффекты цветокоррекции, поэтому данный тест стоит считать «синтетическим».

Прогон 2:
проект 2 минуты, h.264, 6-7 mbps, эффект Lumetri Color
CPU 11:33
SAPPHIRE Tri-X R9 390X 2:42
SAPPHIRE NITRO R9 380 2:48

Результаты говорят сами за себя – если обе видеокарты играючи рендерили видео чуть медленнее риалтайма, то процессор на рендеринг каждой минуты тратил почти шесть минут. И это только с одним включенным эффектом! Если перед тестом я рассчитывал в том числе обработать часовой ролик с цветокоррекцией на всей продолжительности, то после полученных результатов от этой идеи решил отказаться. В своей работе я применяю цветокоррекцию для небольших отрезков видео, и час-два рендера меня не сильно напрягают. Терять же четыре-пять часов в тестовых целях мне было некогда.
Экстраполируя результаты, можно считать, что с цветокоррекцией длительностью 60 минут процессор справился бы за 4.5 часа, тогда как видеокартам потребовалось бы менее одного часа!

Выводы


По результатам тестов я оставил себе SAPPHIRE NITRO R9 380 – карта стоит заметно дешевле наикрутейшей R9 390X, но в Premiere Pro производительность двух адаптеров практически идентична. Учитывая, что адаптер покупался для выполнения работы, а значит зарабатывания денег, потраченных 17 тысяч рублей совсем не жалко. Тем более, что и в GTA V карта показала себя молодцом, но это тема совсем для другой заметки.

Что касается опыта применения OpenCL, то нельзя не признать – в мир видеомонтажа пришел спаситель: рендеринг превратился в удовольствие. По сравнению даже с разогнанным Intel Core i5, видеочипы играючи обрабатывают видео с наложенными эффектами в Premiere Pro. При таких результатах тестирования не стоит вопроса, использовать ли рендеринг силами GPU. Вопрос лишь в том, какую видеокарту под это приспособить. Что-нибудь из верхнего игрового сегмента будет в самый раз, например, AMD Radeon R9 3xx. Мои нужды полностью удовлетворил SAPPHIRE NITRO R9 380. Но адаптеры среднего и даже начального уровня также поддерживают OpenCL, а значит заметно ускорят вашу работу в профессиональном софте.

Комментарии (8)


  1. ayakovlev
    02.09.2015 20:19
    +8

    Какое потрясающее начало, стенд собран адекватный, задача поставлена реальная.
    И только два теста =(
    Ну неужели жалко было провести ещё хоть бы два-три с разными фильтрами, с несколькими фильтрами?
    Получилась замечательная прелюдия и очень быстрый, короткий орг… то есть, кульминация.


  1. yosemity
    02.09.2015 20:35

    Скорее всего, без использования эффектов процессор, начиная с Ivy Bridge был бы быстрее этих GPU, т.к. там существенно улучшена поддержка работы с h.264. Но естественно, в любой современной монтажке невозможно комфортно работать без дискретной GPU даже с самыми простыми эффектами.


  1. DjOnline
    03.09.2015 10:25

    Качество сжатия с использованием видеокарт Cuda/OpenGL значительно хуже чем сжатие на процессоре и тем более в x264.
    http://compression.ru/video/codec_comparison/h264_2012/, смотреть последний график, где сравнивают x264, MainConcept (используется в Premiere на CPU) и MainConcept Cuda (Premiere GPU).


  1. St_androsik
    03.09.2015 19:55
    +2

    Я тут небольшое не слишком приятное открытие на днях сделал: оказывается, Premiere не очень-то хорошо использует аппаратные ресурсы компьютера. Что я сравнивал: Adobe Premiere 2015 CC и Final Cut Pro X на RMBP 15 с Radeon m370x. Что получилось: проект примерно на 10 минут, обычный экспорт для Web, 1080p, никаких эффектов. Pr 2015 выполнил где-то за 10 минут, FCPX около 3. Ещё один тест уже с цветокоррекцией: в Pr 2015 с помощью Lumetri color panel (очень крутая и простая вещь) просто один Adjustment layer для всего проекта, в FCPX через небольшой твик Alex4D тоже один Adjustment layer. Pr 2015 тот же экспорт занял около 22 минут, FCPX около 4.5 вроде.
    При этом наложив цветокоррекцию в FCPX я мог смотреть полноэкранный просмотр безо всякий подтормаживаний и глюков в полном качестве, в Pr 2015 первая же проблема была в том, что он не хотел нормально разворачиваться в полный экран, постоянно подлагивал в том же полном качестве, и вообще очень сильно разочаровал своей производительностью. На минуточку: 4x2.5ghz, 16GB, M370x 2GB, ну какие там тормоза могут быть? Ан, нет.
    Я всё понимаю, программирование – это сложно, особенно когда ты переносишь большой кусок функционала из одной программы в другую (Speedgrade to Premiere), но ёлки-палки, о производительности и оптимизации тоже ведь нужно помнить.
    А вот Final Cut Pro X приятно удивил: скорость, отзывчивость, время экспорта – очень радуют.

    P.S. Причём особо большой разницы в Adobe Premiere между GPU ускорением и CPU я не увидел, было даже такое чувство, что на CPU он как-то поотзывчивей. В общем, программа очень хорошая, но производительность очень разочаровала.


    1. DjOnline
      15.09.2015 20:57

      Да, на CC 2015 у меня начал притормаживать полноэкранный просмотр, ранее такого не было.
      Но в Final Cut Pro X нет например Warp Stabilizer.


  1. koltykov
    04.09.2015 19:42
    +1

    У меня I5 sandy bridge. RAM 16Gb. Работаю в премьере, но эффектов мало, в основном вырезка и компоновка роликов. Видюхи нет вообще никакой. Вот все думаю имеет ли смысл покупать или нет… В игры не играю, тратить больше 6-7 тыс. на видюху не готов.


    1. lemontino
      04.09.2015 20:03

      Да, я бы купил что-нить не очень дорогое. Типа R7 370 или даже помладше


  1. AlexanderG
    05.09.2015 19:41
    +1

    Поддерживается ли CrossFire для таких задач? Не исключено, что две (три) более дешевых карточки могут оказаться быстрее одной дорогой. Для сравнения, у R9 380 1792 унифицированных шейдерных ядра при цене порядка 15к, а у моей 7870 (для примера) их 1280 штук при втрое меньшей цене. У второй чуть выше частота ядра, к тому же (но неизвестно, будет ли это влиять в контексте задачи).