Как перенести нагрузку с процессора на видеокарту

Не открою Америки, если скажу, что гнаться за тем, чтобы у тебя на столе стояло только самое современное компьютерное "железо" — чрезвычайно дорогое занятие. Да, относительно современный "игровой" компьютер вполне можно купить за 30 тысяч рублей, но мы ведь говорим о работе с цифровым контентом, т.е .видео, фото и звуком, а для комфортной работы с ними Вам нужны и процессор помощнее, и места на жестких дисках (да, именно так, во множественном числе), и AC97 в качестве звукового решения не подойдет. Про видеокарту обычно забывают, так как если компьютер не используется для игр, или его владелец не играет в суперсовременные 3D-игры, то и видеокарты внутри стоит "средняя", зачастую встроенная в материнскую плату — обеспечивает нужное разрешение, не сильно "мылит" — да и ладно: И, увы, большинство людей даже не подозревают, что видеокарту можно тоже заставить трудиться, даже не в режиме игры или работы с CAD/CAM, а именно для работы с видео.
В целом, я планирую серию статей, посвященных именно роли видеокарт в работе с цифровым видео, с упором на то, чтобы прочитавший материал мог использовать уже стоящую в его десктопе или ноутбуке видеокарту, или, по крайней мере, при модернизации учитывать и данный фактор.

Текущая статья посвящена переносу части нагрузки с CPU на видеокарту при декодировании видео с помощью написания и исполнения простого шейдерного кода при проигрывании видео с помощью популярного плеера Media Player Classic (MPC)

MPEG-1/2

Я прекрасно помню времена, когда проиграть .MPG-файл на компьютере без использования внешней программы было невозможно. Программ было тоже мало, и каждая соревновалась с другой по части оптимизации под существующие слабые процессорные решения. Появление Video for Windows в качестве системного мультимедийного API частично упростило задачу, и появился интерес к тому, чтобы некоторые стандартизованные алгоритмы поддерживались в железе, например, видеокартами. Дальнейший переход на DirectShow-компоненты, входящие в состав DirectX, также способствовал этому. Постепенно на плечи GPU переложили 4 из 5 стадий декодирования MPEG-1/2 (о возможности выполнения всех пяти стадий — в одной из следующих статей), и сейчас только весьма древняя видеокарта не может похвастаться аппаратной поддержкой этого формата, более новые реализуют деинтерлейс и постпроцессинг также на аппаратном уровне, и последние два поколения (не без проблем у некоторых моделей) вполне успешно справляются с MPEG-2 высоких разрешений.
Так что в этом отношении особых проблем нет, достаточно иметь установленный в системе декодер, поддерживающий аппаратное ускорение декодирования MPEG-1/2 (либо от производителя Вашей видеокарты, либо от таких известных программных продуктов, как PowerDVD или WinDVD).
Однако и в этом случае иногда хочется "навернуть" поверх всего этого что-то свое, к примеру, Вас не устраивает способ деинтерлейса, который осуществляет Ваша видеокарта или изображение шумновато, и Вы хотите очистить его, и т.п. Вот как раз этот случай нам и интересен.
Также не забывайте, что некоторые программы, работающие с видеопотоком, могут неплохо использовать Вашу видеокарту для декодирования (с подбором соответствующего декодера), как это, к примеру, делает Sonic Scenarist.

"MPEG-4 like" кодеки

Отнесем к ним сонм кодеков, наиболее популярны из которых xVid, DivX, h.264 (имеющаяся бесплатная версия x.264 — весьма неплохой вариант), WMV, VP6, VP7 и прочие. До недавнего времени аппаратно декодировались только DivX на видеокартах ATI, начиная с Radeon 9500 и выше (можно для xVid выставить FourCC-код ‘DIVX’ и он тоже проиграется), но только с помощью отдельной программы от DivX Lab — DivX player, а также WMV, причем аппаратная поддержка декодирования последнего, точнее ее отсутствие вызывало, и вызывает до сих пор, немало отрицательных реплик в сторону NVIDIA. И все. Новые технологии от NVIDIA и ATI, PureVideo и AVIVO соответственно, пока предоставляют не так много возможностей для декодирования (о кодировании с использованием AVIVO поговорим позже, в другом материале), хотя подвижки уже есть — декодирование h.264 на последних моделях видеокарт.
Для всех вышеперечисленных форматов зачастую большую нагрузку на CPU накладывает не само декодирование, а постпроцессинг, включая деинтерлейс (если на входе — чересстрочный поток). Поэтому для них перенос части нагрузки на GPU видится весьма актуальным.

Читайте также:  Как поменять разъем для наушников на телефоне

Итак, выполнение шейдерных процедур обработки видеопотока с использованием Media Player Classic

Подобный подход будет работать, начиная с шейдеров версии 1.3 (возможно, что и с версии 1.1, но владельцам GeForce 3 придется это проверить самостоятельно), т.е. на видеокартах, начиная с ATI Radeon 8500 и NVidia GeForce 4200 Вам обязательно придется поставить DirectX 9.0c, очень желательно, с версиями библиотек не ранее апреля 2005 г. Еще лучше, чтобы Ваша видеокарта поддерживала шейдеры версии 2.0 (начиная с ATI Radeon 9500 и NVidia GeForce 5200).
Итак, если видеокарта — подходящая, DirectX 9 установлен, то — вперед! Запускаем MPC (не забываем скачать последнюю версию!), идем в окно настроек (View/Options, вкладка Output):

Настройка Media Player Classic на работу с шейдерами

Крайне рекомендую выставить VMR9(renderless) — именно в этом режиме у Вас будут работать субтитры, и только в этом случае возможен корректный вывод видео на ТВ из окна в режиме Театр (и аналогичный на GeForce) одновременно с работой шейдеров (в противном случае Вы рискуете увидеть на ТВ экран целиком, а не оверлей окна с фильмом). Какой режим вывода Вы выберете для RealVideo и QuickTime — решать Вам, замечу лишь, что шейдеры при проигрывании этих форматов будут использоваться только в том случае, если будет выставлен режим DirectX 9.
Ну, естественно, для работы с шейдерными функциями Вам понадобится включить использование 3D поверхностей для вывода (Use texture surfaces and render video in 3D). Не забудьте выбрать соответствующий метод ресайза (обратите внимание, что bicubic возможен только при поддержке видеокартой шейдеров 2.0):

Выбор метода ресайза видео

Также я рекомендую включить режим VMR9 mixer mode — это даст доступ к большему количеству настроек и заодно, кстати, даст лучшую возможность распределения работы проигрывателя на несколько процессоров/ядер, если они имеются.

Все, MPC готов к опытам!

Теперь, открывая видеофайл на проигрывание, Вы можете заметить (если раньше не обращали внимания), что по нажатию правой кнопки мыши доступно меню с выбором готовых функций (у Вас их может быть меньше, и даже совсем может не быть):

Список шейдеров в MPC

Можете выбрать любой и посмотреть, что получится 🙂 Кстати, Вас вполне могут устроить встроенные функции. Но мне, к примеру, встроенный деинтерлейс несколько не понравился, и я переписал функцию. К слову сказать, понадобилось мне все это во время Олимпиады-2006, когда у меня не было в системе двух процессоров, и когда тюнер отказывался качественно писать поток с поддержкой TimeShift, а на запись одного материала с полноценным просмотром другого не хватало процессорной мощности. Но материал, описывающий эти мучения пока все еще в доработке, а функции, написанные мной — ниже.

Итак, чтобы написать собственную функцию необходимо выбрать из меню элемент View/Shader Editor, вписать в левое поле название своей будущей функции (естественно, английское) и затем выбрать версию шейдеров:

Читайте также:  Как перенести смс ватсап на другой телефон

Выбор версии шейдеров

Проигрыватель создаст Вам тело функции с необходимыми объявленными переменными. Далее можете добавлять собственный код или скопировать и вставить мой. Также Вы можете выбрать и отредактировать любую встроенную (или ранее написанную Вами) функцию:

Редактирование функции

Программировать несложно — пяти минут разбора других функций достаточно, чтобы самому писать сложные функции.
К сожалению, пока в MPC нет возможности обращаться к предыдущему кадру (для серьезных фильтров — я бы написал шейдерный аналог QSDeinterlace или темпорального фильтра), но вроде бы разработчики обещают вставить такую возможность. Будем напоминать им об этом вместе?

Пара готовых функций — копируйте и вставляйте

Итак, чтобы использовать нижеприведенный код, создайте, как было описано выше, свою функцию, и полностью (вместе с объявлениями переменной) замените код на приводимый ниже.

"адаптивный" деинтерлейс — его адаптивность, конечно, желает лучшего, но пока, без возможности обратиться к предыдущему кадру, придется оставаться с этим.


sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);

#define width (p0[0])
#define height (p0[1])
#define counter (p0[2])
#define clock (p0[3])
#define one_over_width (p1[0])
#define one_over_height (p1[1])

#define PI acos(-1)

float4 main(float2 tex : TEXCOORD0) : COLOR
<
float dx = 4/width;
float dy = 4/height;

float4 c00 = tex2D(s0, tex);

float2 h = float2(0, 1/height);
float4 c01 = tex2D(s0, tex-h);
float4 c02 = tex2D(s0, tex+h);
float4 c03 = (c00*2+c01+c02)/4;

float4 c2 = tex2D(s0, tex + float2(0,-dy));
float4 c4 = tex2D(s0, tex + float2(-dx,0));
float4 c5 = tex2D(s0, tex + float2(0,0));
float4 c6 = tex2D(s0, tex + float2(dx,0));
float4 c8 = tex2D(s0, tex + float2(0,dy));

Очередь просмотра

Очередь

  • Удалить все
  • Отключить

YouTube Premium

Хотите сохраните это видео?

  • Пожаловаться

Пожаловаться на видео?

Выполните вход, чтобы сообщить о неприемлемом контенте.

Понравилось?

Не понравилось?

Текст видео

Выясняем роль процессора в играх и как снизить нагрузку на слабый CPU. Какие графические задачи возложены на процессор и как настроить графику для слабых ЦПУ?

WPS Pro 3.0 отныне бесплатна: http://winperst.ru/

— Еженедельные игровые хроники в формате новостей;
— Лаборатория геймера по компьютерному железу, высоким технологиям и тенденциям в развлекательной индустрии;
— Повышение ФПС во всех популярных играх;
— Злободневная аналитика (но не злобная — белая и пушистая, как хвост моего дракончика);
— Гайды по ролевым играм, ТОПы, невероятные факты, пасхалки и секреты, скоростные обзоры историй игровых миров — все это здесь и сейчас (а также там и потом)!

Кводан любезно тебя приглашает в Королевство Ролплея.

Grand Theft Auto V

Если процессор — слабое звено в вашей системе, и в моменты его пиковой загрузки вы наблюдаете микрофризы FPS или другие проблемы, связанные с нехваткой выч. мощности CPU, решить эту проблему вкупе с другими способами оптимизации может быть возможно с помощью настройки всего нескольких параметров через панель управления NVidia.
Возможно у AMD есть подобные настройки, но я не в курсе, так что если кто знает, пожалуйста, напишите об этом в комментариях, кому-нибудь это может помочь.

Лично мне только так удалось избавился от заиканий FPS в GTA V.

8,096 Unique Visitors
175 Current Favorites

Сразу подчеркну ещё раз, этот гайд не для всех, а только для тех, у кого слабое место — процессор и при этом он вовсе не панацея, не волшебная таблетка, которая превратит дешёвое в дорогое. Т. е. если в какой-то конкретной процессорозависимой игре его загрузка у вас доходит до 100%, то эти простые шаги могут улучшить ситуацию.
Однако на сколько они её улучшат зависит от того, насколько слаб процессор. Не надо строить иллюзий, а потом обижаться, ставить низкую оценку, писать, что автор мyдак, что не помогло, если сейчас у вас процессор слишком слаб и только и делает, что захлёбывается, и думать, что после гайда он полетит как самолёт. Есть разница между "доходит до 100%" и "постоянно держится на 100%".
В общем, друзья, давайте будем адекватно оценивать наше железо.

Читайте также:  Как отобразить формулы в excel 2007

Кстати, этот гайд с самого начала писался как часть
гайда по минимизации/избавлению от фризов в GTA V в случае, если вина тому — слабый для игры процессор, но я решил вынести эту часть как общую, т. к. теоретически это должно разгружать проц и в других процессорозависимых играх в той или иной степени, но лично не проверял. Напишите в комментариях, заметили ли вы разницу, если попробовали это с какой-либо другой процессорозависимой игрой.

Если процессор — слабое звено в вашей системе, и в моменты его пиковой загрузки вы наблюдаете микрофризы FPS или другие проблемы, связанные с нехваткой выч. мощности CPU, решить эту проблему вкупе с другими способами оптимизации может быть возможно с помощью настройки всего нескольких параметров через панель управления NVidia.
Возможно у AMD есть подобные настройки, но я не в курсе, так что если кто знает, пожалуйста, напишите об этом в комментариях, кому-нибудь это может помочь.

Лично мне только так удалось избавился от заиканий FPS в GTA V на моём дешёвом Intel G4500, работающем с видеокартой Palit Super JetStream GTX 980, 8 Гб ОЗУ и SSD с Windows 10. При этом я получил более чем играбельный FPS и качество картинки. Правда ещё я применил несколько твиков и нашёл одну интересную настройку в игре, но обо всём этом в отдельной статье "Оптимизация GTA V под связку слабый процессор + сильная видео карта NV >

  • Откройте "Панель управления NVIDIA", перейдите в раздел
    Параметры 3D -> Управление параметрами 3D -> Программные настройки
    и выберите в выпадающем списке интересующую вас игру.
  • Установите следующие параметры в указанные значения:

Теперь перейдите в раздел
Параметры 3D -> Управление параметрами 3D -> Настройка Surround, PhysX
и в области "Настройки PhysX" на всякий случай явно укажите вашу видеокарту.

Это что касается параметров, нацеленных именно на разгрузку CPU. Так же в программных настройках для игр советуют следующие значения:
Для всех настроек, для которых возможно — "Управление от приложения/Использовать настройку 3D-приложения". А настройку уже производить в самой игре, но если настройки нет, тогда уже через панель управления. Помните, что если вы устанавливаете явное значение для параметра, т. е. Вкл., Выкл. или, например, x2, x4 и т. п., вы форсируете использование именно этого значения, игнорируя настройки игры. Например, только при установке для параметра "Вертикальный синхроимпульс" значения "Использовать настройку 3D-приложения" будет учитываться настройка самой игры. У настроек через панель управления более высокий приоритет.

Стоит так же упомянуть, что не советуется применять подобного рода настройки в глобальных параметрах, т. к. для некоторых игр иногда стоит выставить другие значения. Указанные настройки для разгрузки CPU стоит применять, если он не справляется, т. е. если уровень его загрузки не редко доходит до 100% в игре.

Чтобы вы могли определить, какая служба нужна, а какая нет лично вам, я приведу краткое описание каждой. Сразу оговорюсь, запуск программы GeForce Experience не зависит от служб, однако зависит предоставляемый ею функционал.

Это что касается служб NVidia. О других службах, системных и тех, что устанавливаются вместе с программами, всегда можно найти информацию в сети, чтобы понять нужны ли они вам, можно ли и стоит ли их отключать.

Adblock
detector