Ускорение видео обработки на видеокартах

Существуют несколько видов компьютеров (процессоров) делящихся по принципу выполнения команд над данными. Один поток данных, один поток команд (по этому принципу работает центральный процессор), много потоков данных, один поток команд (по этому принципу работают видеокарты), много потоков данных много, потоков команд (некоторые сетевые чипы), один поток данных, много потоков команд (несколько экспериментальных устройств в 70-ые годы, возможно, какие-то узкоспециалезированные).

Из этого мы должны понять, что видеокарта может выполнять один набор команд (в некоторых новых поколениях больше 1, но значительно меньше количества процессорных модулей в видеокарте) над большим набором данных одновременно (к примеру умножить 5 тысяч чисел на 10 за 1 операцию, в то время, как обычный процессор должен будет сделать 5000 операций).

Следующее, что надо понять: это то что большенство алгоритмов по обработке видео работают по принципу “Разделяй и властвуй”, то есть, наложение фильтра на кадр видео состоит из разделения кадра на области, обработки всех квадратов определённым набором команд и склейка обратно. Самый ресурсоёмкий процесс – это обработка этих самых областей.

Ну так вот, почему бы нам не взять и не отдать области на обработку видеокарте к примеру: 1 область на 1 вычислительный модуль видеокарты, а затем забрать результат?

Ну что, принцип мы поняли, но как нам это сделать на практике? В реальности производители видеокарт позволяют использовать вычислительные модули видеокарты (это не все модули, которые есть в видеокарте, особенно в игровых). А именно производители видеокарт выпускают свои наборы инструментов для фреймворков параллельного программирования OpenCL (Nvidia (Quadro, GTX), Intel Graphics, AMD Radeon) и Сuda (Nvidia Quadro, GTX).

Но программисты, которые работают над видеоредакторами, должны написать свои алгоритмы так, чтобы в местах, в которых выгодно распараллелить обработку тяжелых вычислений, программа использовала OpenCL (а точнее его реализацию от конкретных производителей, в целом перенести эту поддержку с Nvidia на Radeon не так сложно при использовании OpenCL).

Теперь ближе к потребителю. Если программа, в которой вы работаете поддерживает параллельные вычисления на видеокарте, то, купив видеокарту с большим количеством вычислительных модулей, вы можете получить неплохое снижение времени рендера. Прирост будет зависеть от количества ядер (для заметного буста рекомендуются карты с 700+ вычислительных модулей) и объёма видеопамяти (при малом объёме, данные для обработки будут гоняться туда сюда слишком часто, рекомендуются от 1 гигабайта).

Важно понимать, что сверхдорогие видеокарты при этом не обязательны, так как и на средних видеокартах время вычислений, которые будут производиться параллельно, уже будут соизмеримы с вычислениями CPU (склейка и загрузка видеокарты), которые ускорить нельзя. Так, к примеру, GTX 750 TI может дать выигрыш в 4 раза, а Titan в 4.8 (https://www.studio1productions.com/Articles/Premiere-Benchmark.htm). Лучше купите процессор помощнее, ибо не все алгоритмы хорошо параллелятся и программисты особо напрягаться не любят, а от процессора точно будет буст.

П.С. Я стал инженером, потомучто не люблю грамматику.

Please wait...
Теги: , , ,
0
3 Комментарий
Сначала Новые
Сначала Старые Популярные
guest

Межтекстовые Отзывы
Посмотреть все комментарии
Джигурдей
Джигурдей
6 лет назад

не понял статью, как будто выдержка из чьего то реферата

Please wait...
Андрій Москалець
Андрій Москалець
6 лет назад

Отличное чтиво. Спасибо :)

Please wait...
Наверх