что такое cuda nvidia
Нужны ли графические ядра Nvidia CUDA для игр?
Ядра CUDA являются эквивалентом процессорных ядер Nvidia. Они оптимизированы для одновременного выполнения большого количества вычислений, что очень важно для современной графики. Естественно, на графические настройки больше всего повлияло количество ядер CUDA в видеокарте, и они требуют больше всего от графического процессора, то есть теней и освещения, среди прочего.
CUDA долгое время была одной из самых выдающихся записей в спецификациях любой видеокарты GeForce. Однако не все до конца понимают, что такое ядра CUDA и что конкретно они означают для игр.
В этой статье дан краткий и простой ответ на этот вопрос. Кроме того, мы кратко рассмотрим некоторые другие связанные вопросы, которые могут возникнуть у некоторых пользователей.
Что такое ядра видеокарты CUDA?
CUDA является аббревиатурой от одной из запатентованных технологий Nvidia: Compute Unified Device Architecture. Его цель? Эффективные параллельные вычисления.
Одиночное ядро CUDA аналогично ядру ЦП, основное отличие в том, что оно менее изощренное, но реализовано в большем количестве. Обычный игровой процессор имеет от 2 до 16 ядер, но количество ядер CUDA исчисляется сотнями, даже в самых низких современных видеокартах Nvidia GeForce. Между тем, у высококлассных карт сейчас их тысячи.
Что делают ядра CUDA в играх?
Обработка графики требует одновременного выполнения множества сложных вычислений, поэтому такое огромное количество ядер CUDA реализовано в видеокартах. И учитывая, как графические процессоры разрабатываются и оптимизируются специально для этой цели, их ядра могут быть намного меньше, чем у гораздо более универсального CPU.
И как ядра CUDA влияют на производительность в игре?
По сути, любые графические настройки, которые требуют одновременного выполнения вычислений, значительно выиграют от большего количества ядер CUDA. Наиболее очевидными из них считается освещение и тени, но также включены физика, а также некоторые типы сглаживания и окклюзии окружающей среды.
Ядра CUDA или потоковые процессоры?
Там, где у Nvidia GeForce есть ядра CUDA, у их основного конкурента AMD Radeon есть потоковые процессоры.
Ядра CUDA лучше оптимизированы, поскольку аппаратное обеспечение Nvidia обычно сравнивают с AMD, но нет никаких явных различий в производительности или качестве графики, о которых вам следует беспокоиться, если вы разрываетесь между приобретением Nvidia или AMD GPU.
Сколько ядер CUDA вам нужно?
И вот сложный вопрос. Как часто бывает с бумажными спецификациями, они просто не являются хорошим индикатором того, какую производительность вы можете ожидать от аппаратного обеспечения.
Многие другие спецификации, такие как пропускная способность VRAM, более важны для рассмотрения, чем количество ядер CUDA, а также вопрос оптимизации программного обеспечения.
Для общего представления о том, насколько мощен графический процессор, мы рекомендуем проверить UserBenchmark. Однако, если вы хотите увидеть детальное и всестороннее тестирование, есть несколько надежных сайтов, таких как GamersNexus, TrustedReviews, Tom’s Hardware, AnandTech и ряд других.
Вывод
Надеемся, что это помогло пролить некоторый свет на то, чем на самом деле являются ядра CUDA, что они делают и насколько они важны. Прежде всего, мы надеемся, что помогли развеять любые ваши заблуждения по этому поводу.
NVIDIA CUDA-X
Библиотеки GPU-ускорения для ИИ и HPC
Разработчики, исследователи и изобретатели во всех отраслях используют программирование на GPU для ускорения своих приложений. Разработка таких приложений требует надежной среды программирования с высокооптимизированными библиотеками для конкретных областей. NVIDIA CUDA-X создана на основе CUDA® и представляет собой набор библиотек, инструментов и технологий, которые обеспечивают значительно более высокую производительность по сравнению с другими решениями во всех отраслях: от ИИ до НРС.
Ускорение современных приложений
Библиотеки CUDA-X AI и CUDA-X HPC эффективно используют мощность графических процессоров NVIDIA с тензорными ядрами для ускорения разработки и развертывания приложений в различных отраслях.
Cuda-X AI
Cuda-X HPC
Современные технологии ИИ способны кардинально изменить работы во многих отраслях, но применение их возможностей представляет собой сложную задачу. Разработка приложений на базе ИИ осуществляется в несколько этапов: обработка данных, конструирование признаков, машинное обучение, верификация и развертывание. Каждый шаг включает в себя обработку крупных массивов данных и осуществление больших объемов вычислений. CUDA-X AI предоставляет инструменты и технологии, необходимые решения этой задачи.
Приложения для НРС используются во многих отраслях: от гидродинамики до моделирования погоды. CUDA-X HPC – это набор библиотек, инструментов, компиляторов и API, с помощью которых разработчики решают самые сложные в мире задачи. CUDA-X HPC включает в себя настроенные ядра для высокопроизводительных вычислений (HPC). Библиотеки GPU-ускорения для линейной алгербры, параллельных алгоритмов, обработки сигналов и изображений создают основу для приложений, требующих большого объема вычислений, в таких областях, как вычислительная физика, химия, молекулярная динамика и сейсмические исследования.
Расширенная доступность
Платформа CUDA-X имеет расширенную экосистему и доступна для использования. Библиотеки программного ускорения являются частью основных облачных платформ, в том числе AWS, Microsoft Azure и Google Cloud. Фрагменты кода или контейнеризированные программные стеки можно бесплатно скачать из репозитория NGC. С помощью GPU NVIDIA библиотеки CUDA-X можно разворачивать на любых устройствах: ПК, рабочих станциях, серверах, суперкомпьютерах, облачных платформах и IoT-устройствах.
Более миллиона разработчиков используют CUDA-X для повышения продуктивности благодаря постоянному росту производительности приложений. Если вы создаете новое приложение или стремитесь ускорить его работу, CUDA-X обеспечивает самый эффективный способ.
Используйте мощность GPU для приложений
Узнайте, как NVIDIA CUDA-X и в частности библиотеки GPU-ускорения трансформируют рабочие процессы в отраслях.
CUDA: Как работает GPU
Внутренняя модель nVidia GPU – ключевой момент в понимании GPGPU с использованием CUDA. В этот раз я постараюсь наиболее детально рассказать о программном устройстве GPUs. Я расскажу о ключевых моментах компилятора CUDA, интерфейсе CUDA runtime API, ну, и в заключение, приведу пример использования CUDA для несложных математических вычислений.
Вычислительная модель GPU:
При использовании GPU вы можете задействовать грид необходимого размера и сконфигурировать блоки под нужды вашей задачи.
CUDA и язык C:
Дополнительные типы переменных и их спецификаторы будут рассмотрены непосредственно в примерах работы с памятью.
CUDA host API:
Перед тем, как приступить к непосредственному использованию CUDA для вычислений, необходимо ознакомиться с так называемым CUDA host API, который является связующим звеном между CPU и GPU. CUDA host API в свою очередь можно разделить на низкоуровневое API под названием CUDA driver API, который предоставляет доступ к драйверу пользовательского режима CUDA, и высокоуровневое API – CUDA runtime API. В своих примерах я буду использовать CUDA runtime API.
Понимаем работу GPU:
Как было сказано, нить – непосредственный исполнитель вычислений. Каким же тогда образом происходит распараллеливание вычислений между нитями? Рассмотрим работу отдельно взятого блока.
Задача. Требуется вычислить сумму двух векторов размерностью N элементов.
Нам известна максимальные размеры нашего блока: 512*512*64 нитей. Так как вектор у нас одномерный, то пока ограничимся использованием x-измерения нашего блока, то есть задействуем только одну полосу нитей из блока (рис. 3).
Рис. 3. Наша полоса нитей из используемого блока.
Заметим, что x-размерность блока 512, то есть, мы можем сложить за один раз векторы, длина которых N // Функция сложения двух векторов
__global__ void addVector( float * left, float * right, float * result)
<
//Получаем id текущей нити.
int idx = threadIdx.x;
Таким образом, распараллеливание будет выполнено автоматически при запуске ядра. В этой функции так же используется встроенная переменная threadIdx и её поле x, которая позволяет задать соответствие между расчетом элемента вектора и нитью в блоке. Делаем расчет каждого элемента вектора в отдельной нити.
Пишем код, которые отвечает за 1 и 2 пункт в программе:
#define SIZE 512
__host__ int main()
<
//Выделяем память под вектора
float * vec1 = new float [SIZE];
float * vec2 = new float [SIZE];
float * vec3 = new float [SIZE];
//Инициализируем значения векторов
for ( int i = 0; i //Указатели на память видеокарте
float * devVec1;
float * devVec2;
float * devVec3;
…
dim3 gridSize = dim3(1, 1, 1); //Размер используемого грида
dim3 blockSize = dim3(SIZE, 1, 1); //Размер используемого блока
Теперь нам остаеться скопировать результат расчета из видеопамяти в память хоста. Но у функций ядра при этом есть особенность – асинхронное исполнение, то есть, если после вызова ядра начал работать следующий участок кода, то это ещё не значит, что GPU выполнил расчеты. Для завершения работы заданной функции ядра необходимо использовать средства синхронизации, например event’ы. Поэтому, перед копированием результатов на хост выполняем синхронизацию нитей GPU через event.
Код после вызова ядра:
//Выполняем вызов функции ядра
addVector >>(devVec1, devVec2, devVec3);
//Хендл event’а
cudaEvent_t syncEvent;
cudaEventCreate(&syncEvent); //Создаем event
cudaEventRecord(syncEvent, 0); //Записываем event
cudaEventSynchronize(syncEvent); //Синхронизируем event
Рассмотрим более подробно функции из Event Managment API.
Рис. 4. Синхронизация работы основоной и GPU прграмм.
На рисунке 4 блок «Ожидание прохождения Event’а» и есть вызов функции cudaEventSynchronize.
Ну и в заключении выводим результат на экран и чистим выделенные ресурсы.
cudaFree(devVec1);
cudaFree(devVec2);
cudaFree(devVec3);
Думаю, что описывать функции высвобождения ресурсов нет необходимости. Разве что, можно напомнить, что они так же возвращают значения cudaError_t, если есть необходимость проверки их работы.
Заключение
Надеюсь, что этот материал поможет вам понять, как функционирует GPU. Я описал самые главные моменты, которые необходимо знать для работы с CUDA. Попробуйте сами написать сложение двух матриц, но не забывайте об аппаратных ограничениях видеокарты.
О технологии многопотоковых вычислений CUDA в видеокартах компании Nvidia
Видеокарты производства компании Nvidia пользуются заслуженной славой в области проведения надежных высокопроизводительных вычислений. Благодаря наличию аппаратных возможностей технологии CUDA, «зеленые карты» показывают отличные результаты и при майнинге на большинстве алгоритмов консенсуса PoW.
Рассмотрим подробнее некоторые особенности CUDA.
Что такое технология CUDA?
CUDA (Compute Unified Device Architecture) — это технология многопотоковых компьютерных вычислений, созданная компанией NVIDIA. Она позволяет значительно увеличить производительность при проведении сложных расчетов за счет распараллеливания на множестве вычислительных ядер.
Приложения CUDA используются для обработки видео и аудио, моделирования физических эффектов, в процессе разведки месторождений нефти и газа, проектировании различных изделий, медицинской визуализации и научных исследованиях, в разработке вакцин от болезней, в том числе COVID-19, физическом моделировании и других областях.
CUDA ™ — это архитектура параллельных вычислений общего назначения, которая позволяет решать сложные вычислительные задачи с помощью GPU. CUDA поддерживает операционные системы Linux и Windows. Чем больше ядер CUDA имеет видеокарта и чем больше частота их работы, тем большую производительность она может обеспечить.
Каждая дополнительна единица вычислительной мощности требует соответствующего количества потребленной электроэнергии. Чем меньший технологический процесс используется при производстве вычислительных ядер, тем меньшие напряжения используются для их питания и, соответственно снижается потребление. Поэтому, даже если видеокарты разных поколений имеют одинаковую теоретическую вычислительную мощность в TFlops, их эффективность кардинально отличается по КПД, в значительной мере зависящему от потребления полупроводниковых элементов, из которых состоят ядра видеопроцессоров.
Архитектура CUDA упрощенно включает набор исполняемых команд и аппаратный механизм проведения параллельных вычислений внутри графического процессора. Разработчики программного обеспечения, в том числе майнеров, для работы с CUDA обычно используют языки программирования высокого уровня (C, Фортран). В будущем в CUDA планируется добавление полноценной поддержки C ++, Java и Python. Продвинутые программисты дополнительно улучшают эффективность майнеров с помощью оптимизации кода майнеров на языке более низкого (машинного) уровня – Ассемблере. В качестве примера в этом контексте можно привести Клеймор дуал майнер, который показывает высочайшую эффективность на зеленых видеокартах.
В технологии CUDA есть три важных элемента: библиотеки разработчика, среда выполнения и драйвера. Все они прямо влияют на производительность и надежность работы приложений.
Драйвер — это уровень абстракции устройств с поддержкой CUDA, который обеспечивает интерфейс доступа для аппаратных устройств. С помощью среды выполнения через этот уровень реализуется выполнение различных функций по проведению сложных вычислений.
Таблица версий CUDA, поддерживающихся в драйверах NVIDIA разных версий:
Версия CUDA | Linux x86_64 | Windows x86_64 |
---|---|---|
CUDA 11.1 | >=455.23 | >=456.38 |
CUDA 11.0.3 Update 1 | >= 450.51.06 | >= 451.82 |
CUDA 11.0.2 GA | >= 450.51.05 | >= 451.48 |
CUDA 11.0.1 RC | >= 450.36.06 | >= 451.22 |
CUDA 10.2.89 | >= 440.33 | >= 441.22 |
CUDA 10.1 (10.1.105) | >= 418.39 | >= 418.96 |
CUDA 10.0.130 | >= 410.48 | >= 411.31 |
CUDA 9.2 (9.2.148 Update 1) | >= 396.37 | >= 398.26 |
CUDA 9.2 (9.2.88) | >= 396.26 | >= 397.44 |
CUDA 9.1 (9.1.85) | >= 390.46 | >= 391.29 |
CUDA 9.0 (9.0.76) | >= 384.81 | >= 385.54 |
CUDA 8.0 (8.0.61 GA2) | >= 375.26 | >= 376.51 |
CUDA 8.0 (8.0.44) | >= 367.48 | >= 369.30 |
CUDA 7.5 (7.5.16) | >= 352.31 | >= 353.66 |
CUDA 7.0 (7.0.28) | >= 346.46 | >= 347.62 |
Для CUDA 6.5 нужны драйвера 340.0+, для CUDA 6.0 — 331.00, для CUDA 5.5 — не ниже 319.00.
При установке новых драйверов на видеокарты со старой версией compute capability вычисления производиться не будут.
Например, на большинство видеокарт с архитектурой Kepler (GeForce 640 — 780Ti, 910M, GTX TITAN, compute capability 3.5) нет смысла ставить драйвера новее 441.22 (Windows) или 440.33 (Linux), так как в них отсутствует поддержка compute capability 3.x.
Информация, которую нужно учитывать при установке драйверов для видеокарт Nvidia на предмет соответствия версии compute capability CUDA:
Библиотеки разработки (CUDA SDK) на практике реализуют выполнение математических операций и крупномасштабных задач параллельных вычислений.
Среда выполнения CUDA — это интерфейс разработчика плюс компоненты выполнения программного кода. Она определяет основные типы данных и функций для проведения вычислений, преобразований, управления памятью, позволяет реализовать доступ к устройствам и спланировать выполнение команд.
Программный код CUDA на практике обычно состоит из двух частей, одна из которых выполняется на CPU, а другая на GPU.
Ядро CUDA имеет три важных абстрактных понятия:
которые могут быть достаточно легко представлены и использованы на языке программирования Си.
Программный стек CUDA состоит из нескольких уровней, аппаратного драйвера, интерфейса прикладного программирования (API) и среды его выполнения, а также двух расширенных математических библиотек общего назначения, CUFFT и CUBLAS.
Теоретически каждое новое поколение CUDA должно демонстрировать более высокую производительность за счет устранения выявленных ошибок, оптимизации кода, добавления новых алгоритмов и прочих новшеств. К сожалению, на практике это не всегда соответствует реалиям. В особенности это связано с постоянным ростом аппетита программ по отношению аппаратным ресурсам. Это касается не только программных пакетов CUDA, но затрагивает даже такие, казалось бы, независимые операционные системы, как Linux.
Влияет ли на хешрейт версия CUDA, установленная на компьютере?
Практические опыты с майнерами на разных версиях CUDA показывают, что новые версии особого прироста в хешрейте не дают.
Использование новых драйверов Nvidia обычно сопряжено с увеличением требований к аппаратному обеспечению и часто влечет рост потребления видеопамяти, что не всегда положительно сказываются на производительности видеокарт при майнинге.
Это особенно проявляется в быстродействии и потреблении видеопамяти при майнинге на алгоритме Ethash/DaggerHashimoto. Как правило, старые версии драйверов потребляют меньше видеопамяти при одинаковой производительности на Ethash.
Для обычных пользователей нет необходимости заботиться о версии CUDA, если только этого не требуют последние версии майнеров с новыми поддерживающимися алгоритмами.
Тем не менее, нужно учитывать, что технология CUDA постоянно совершенствуется, в нее добавляются новые возможности, которые требуют адаптации программ-майнеров. Поэтому современные майнеры иногда имеют разные версии, которые поддерживают работу с разными версиями CUDA 8.0, 9.1/9.2, а также 10.0, 10.1 и 10.2.
Куда применить CUDA?
На протяжении десятилетий действовал закон Мура, который гласит, что каждые два года количество транзисторов на кристалле будет удваиваться. Однако это было в далеком 1965 году, а последние 5 лет стала бурно развиваться идея физической многоядерности в процессорах потребительского класса: в 2005 году Intel представила Pentium D, а AMD – Athlon X2. Тогда приложений, использующих 2 ядра, можно было пересчитать по пальцам одной руки. Однако следующее поколение процессоров Intel, совершившее революцию, имело именно 2 физических ядра. Более того, в январе 2007 года появилась серия Quad, тогда же и сам Мур признался, что вскоре его закон перестанет действовать.
Что же сейчас? Двухядерные процессоры даже в бюджетных офисных системах, а 4 физических ядра стало нормой и это всего за 2-3 го.
На протяжении десятилетий действовал закон Мура, который гласит, что каждые два года количество транзисторов на кристалле будет удваиваться. Однако это было в далеком 1965 году, а последние 5 лет стала бурно развиваться идея физической многоядерности в процессорах потребительского класса: в 2005 году Intel представила Pentium D, а AMD – Athlon X2. Тогда приложений, использующих 2 ядра, можно было пересчитать по пальцам одной руки. Однако следующее поколение процессоров Intel, совершившее революцию, имело именно 2 физических ядра. Более того, в январе 2007 года появилась серия Quad, тогда же и сам Мур признался, что вскоре его закон перестанет действовать.
Что же сейчас? Двухядерные процессоры даже в бюджетных офисных системах, а 4 физических ядра стало нормой и это всего за 2-3 года. Частота процессоров не наращивается, а улучшается архитектура, увеличивается количество физических и виртуальных ядер. Однако идея использования видеоадаптеров, наделенных десятками, а то и сотнями вычислительных «блоков» витала давно.
И хотя перспективы вычислений силами GPU огромны, наиболее популярное решение – Nvidia CUDA бесплатно, имеет множество документаций и в целом весьма несложное в реализации, приложений, использующих эту технологию не так много. В основном это всевозможные специализированные расчеты, до которых рядовому пользователю в большинстве случаев нет дела. Но есть и программы, рассчитанные на массового пользователя, о них мы и поговорим в данной статье.
Для начала немного о самой технологии и с чем ее едят. Т.к. при написании статьи я ориентируюсь на широкий круг читателей, то и объяснить постараюсь доступным языком без сложных терминов и несколько вкратце.
CUDA (англ. Compute Unified Device Architecture) — программно-аппаратная архитектура, позволяющая производить вычисления с использованием графических процессоров NVIDIA, поддерживающих технологию GPGPU (произвольных вычислений на видеокартах). Архитектура CUDA впервые появились на рынке с выходом чипа NVIDIA восьмого поколения — G80 и присутствует во всех последующих сериях графических чипов, которые используются в семействах ускорителей GeForce, Quadro и Tesla. (с) Wikipedia.org
Входящие потоки обрабатываются независимо друг от друга, т.е. параллельно.
При этом существует разделение на 3 уровня:
Grid – ядро. Содержит одно/двух/трехмерный массив блоков.
Block – содержит в себе множество потоков (thread). Потоки разных блоков между собой взаимодействовать не могут. Для чего нужно было вводить блоки? Каждый блок по сути отвечает за свою подзадачу. Например, большое изображение (которое является матрицей) можно разбить на несколько более мелких частей (матриц) и параллельно работать с каждой частью изображения.
Thread – поток. Потоки внутри одного блока могут взаимодействовать либо через общую (shared) память, которая, кстати, куда быстрее глобальной (global) памяти, либо через средства синхронизации потоков.
Warp – это объединение взаимодействующих между собой потоков, для всех современных GPU размер Warp’а равен 32. Далее идет half-warp, являющийся половинкой warp’a, т.к. обращение к памяти обычно идет раздельно для первой и второй половины warp’a.
Как можно заметить, данная архитектура отлично подходит для распараллеливания задач. И хотя программирование ведется на языке Си с некоторыми ограничениями, на деле не все так просто, т.к. не все можно распараллелить. Нет же и стандартных функций для генерации случайных чисел (или инициализации), все это приходится реализовывать отдельно. И хотя готовых вариантов имеется в достаточном количестве, радости все это не приносит. Возможность использования рекурсии появилась сравнительно недавно.
Для наглядности была написана небольшая консольная (для минимизации кода) программа, производящая операции с двумя массивами типа float, т.е. с нецелочисленными значениями. По указанным выше причинам инициализация (заполнение массива различными произвольными значениями) производилось силами CPU. Далее с соответствующими элементами из каждого массива производилось 25 всевозможных операций, промежуточные результаты записывались в третий массив. Менялся размер массива, результаты следующие:
Всего было проведено 4 теста:
1024 элемента в каждом массиве:
Наглядно видно, что при таком малом количестве элементов толку от параллельных вычислений немного, т.к. сами вычисления проходят куда быстрее, чем их подготовка.
4096 элементов в каждом массиве:
И вот уже видно, что видеокарта в 3 раза быстрее производит операции над массивами, чем процессор. Более того, время выполнения данного теста на видеокарте не увеличилось (незначительное уменьшение времени можно сослать на погрешность).
Теперь 12288 элементов в каждом массиве:
Отрыв видеокарты увеличился еще в 2 раза. Опять же стоит обратить внимание, что время выполнения на видеокарте увеличилось
незначительно, а вот на процессоре более чем в 3 раза, т.е. пропорционально усложнению задачи.
И последний тест – 36864 элемента в каждом массиве:
В данном случае ускорение достигает внушительных значений – почти в 22 раза быстрее на видеокарте. И опять же время выполнения на видеокарте возросло незначительно, а на процессоре – положенные 3 раза, что опять же пропорционально усложнению задачи.
Если же и дальше усложнять вычисления, то видеокарта выигрывает все больше и больше. Хоть и пример несколько утрированный, но в целом ситуацию показывает наглядно. Но как упоминалось выше, не все можно распараллелить. Например, вычисление числа Пи. Существуют лишь примеры, написанные посредством метода Monte Carlo, но точность вычислений составляет 7 знаков после запятой, т.е. обычный float. Для того, чтобы увеличить точность вычислений необходима длинная арифметика, а вот тут то и наступают проблемы, т.к. эффективно это реализовать очень и очень сложно. В интернете найти примеров, использующих CUDA и рассчитывающих число Пи до 1 миллиона знаков после запятой мне не удалось. Были предприняты попытки написать такое приложение, но самый простой и эффективный метод расчета числа Пи – это алгоритм Брента — Саламина или формула Гаусса. В известном SuperPI скорее всего (судя по скорости работы и количеству итераций) используется формула Гаусса. И, судя по
тому, что SuperPI однопоточный, отсутствию примеров под CUDA и провалу моих попыток, эффективно распараллелить подсчет Pi невозможно.
Кстати, можно заметить, как в процессе выполнения вычислений повышается нагрузка на GPU, а так же происходит выделение памяти.
Теперь же перейдем к более практической пользе от CUDA, а именно существующие на данный момент программы, использующие данную технологию. В большинстве своем это всевозможные аудио/видео конвертеры и редакторы.
Начнем с весьма нашумевшего и популярного продукта – Badaboom. Использовалась версия – 1.2.1.74. Стоимость программы составляет $29.90.
Интерфейс программы простой и наглядный – слева выбираем исходный файл или диск, а справа – необходимое устройство, для которого будем кодировать. Есть и пользовательский режим, в котором вручную задаются параметры, он и использовался.
Скорость кодирования напрямую зависит от качества, это очевидно. Стоит отметить, что легкое разрешение (назовем его традиционно – SD) не проблема для Badaboom – скорость кодирования в 5,5 раз превысила исходный (24 fps) фреймрейт видео. Да и даже тяжелый 1080p видеоролик программа преобразует в реальном времени. Стоит отметить, что качество итогового видео очень близко к исходному видеоматериалу, т.е. кодирует Badaboom весьма и весьма качественно.
Но обычно перегоняют видео в более низкое разрешение, посмотрим как обстоят дела в этом режиме. При снижении разрешения снижался и битрейт видео. Он составлял 9500 кбит/с для 1080p выходного файла, 4100 кбит/с для 720 p и 2400 кбит/с для 720х404. Выбор сделан исходя из разумного соотношения размер/качество.
Комментарии излишни. Если делать из 720p рип до обычного SD качества, то на перекодирование фильма длительностью 2 часа уйдет около 30 минут. И при этом загрузка процессора будет незначительной, можно заниматься своими делами не ощущая дискомфорта.
А что если перегнать видео в формат для мобильного устройства? Для этого выберем профиль iPhone (битрейт 1 мбит/с, 480х320) и посмотрим на скорость кодирования:
Нужно ли что-то говорить? Двухчасовой фильм в обычном качестве для iPhone перекодируется менее чем за 15 минут. С HD качеством сложнее, но все равно весьма быстро. Главное, что качество выходного видеоматериала остается на довольно высоком уровне при просмотре на дисплее телефона.
В целом впечатления от Badaboom положительные, скорость работы радует, интерфейс простой и понятный. Всевозможные баги ранних версий (пользовался еще бетой в 2008-ом году) вылечены. Кроме одного – путь к исходному файлу, а так же к папке, в которую сохраняется готовое видео, не должен содержать русских букв. Но на фоне достоинств программы этот недостаток незначителен.
Следующим на очереди у нас будет Super LoiLoScope. За обычную его версию просят 3 280 рублей, а за touch версию, поддерживающую сенсорное управление в Windows 7, просят аж 4 440 рублей. Попробуем разобраться за что разработчик хочет таких денег и зачем видеоредактору поддержка multitouch. Использовалась последняя версия – 1.8.3.3.
Описать интерфейс программы словами довольно сложно, поэтому я решил снять небольшой видеоролик. Сразу скажу, что, как и все видеоконвертеры под CUDA, ускорение средствами GPU поддерживается только для вывода видео в MPEG4 с кодеком h.264.
Теперь запросто можно понять, зачем же нужна поддержка сенсорных дисплеев и технологии мультитач. Более того, программа наделена многозадачностью, как бы странно это ни звучало. Как? Смотрим ролик:
Во время кодирования загрузка процессора составляет 100%, однако дискомфорта это не вызывает. Браузер и другие не тяжелые приложения не тормозят.
Теперь перейдем к производительности. Для начала все тоже самое, что и с Badaboom – перекодирование видео в аналогичное по качеству.
Результаты куда лучше, чем у Badaboom. Качество так же на высоте, разницу с оригиналом можно заметить только сравнивая попарно кадры под лупой.
Далее перейдет к перекодированию с понижением разрешения и битрейта:
Ого, а вот тут LoiloScope обходит Badaboom в 2,5 раза. При этом можно запросто параллельно резать и кодировать другое видео, читать новости и даже смотреть кино, причем даже FullHD проигрываются без проблем, хоть загрузка процессора и максимальна.
Теперь же попробуем сделать видео для мобильного устройства, профиль назовем так же, как он назывался в Badaboom – iPhone (480×320, 1 мбит/с):
Никакой ошибки нет. Все перепроверялось несколько раз, каждый раз результат был аналогичным. Скорее всего, это происходит по той простой причине, что SD файл записан с другим кодеком и в другом контейнере. При перекодировании видео сначала декодируется, разбивается на матрицы определенного размера, сжимается. ASP декодер, использующийся в случае с xvid, медленнее, чем AVC (для h.264) при параллельном декодировании. Однако и 192 fps – это в 8 раз быстрее, чем скорость исходного видео, серия длительностью 23 минуты сжимается менее чем за 4 минуты. Ситуация повторялась и с другими файлами, пережатыми в xvid/DivX.
Подобный интерфейс встречается во многих видеоконвертерах, ничего необычного в нем нет. Неудобно, что битрейт задается не конкретным числом, а перемещая ползунок в графе Quality/Size, при этом какой именно выставляется битрейт можно понять только посчитав исходя из продолжительности видео и предполагаемого размера. В настройках кодека можно выбрать либо переменный битрейт, либо задать конкретное число, но на итоговый результат это все не влияет – программа кодирует видео исходя из положения того самого ползунка.
В первую очередь проверим насколько быстро видео кодируется «само в себя»:
Результаты схожи с теми, что показал LoiloScope.
Теперь с понижением разрешения и битрейта:
Результаты в 2-2,5 раза хуже, чем у LoiloScope. Да и качество несколько хуже при сравнимом размере. Однако стоит отметить, что Movavi несколько быстрее справляется с задачей, чем Badaboom.
А теперь так же попробуем создать профиль для мобильного устройства (480х320,
На этот раз Movavi проигрывает и Badaboom. Качество видео при этом несколько хуже, чем у LoiloScope и Badaboom.
Загрузка процессора в процессе преобразования видео была около 50%.
Учитывая сравнительно высокую стоимость Movavi, среднюю скорость кодирования, а так же нестабильность даже последних версий, покупка данного продукта весьма сомнительна.
Но по-настоящему меня потряс MediaShow Espresso от CyberLink. При цене в $30, данный видеоконвертер имеет очень приятный интерфейс, множество стандартных профилей под любое устройство, а так же весьма богатые возможности по созданию собственных предустановок. Признаюсь, что это единственный конвертер, где я сразу же за несколько секунд создал необходимые мне профили для тестов. В остальных же часть все равно приходилось постоянно задавать вручную, либо создание профиля было более запутанным и удобнее было задавать параметры каждый раз самостоятельно.
Удобство удобством, но нам же важнее скорость, верно?
Кодируем исходные файлы с сохранением качества:
А со скоростью все отлично, тут и добавить нечего. В данном тесте это лучшие результаты, даже FullHD кодируется в 3 раза быстрее оригинального фреймрейта.
Далее кодирование с понижением разрешения и битрейта:
До LoiloScope не дотягивает, конечно, но результаты все равно очень впечатляющие. Загрузка процессора во время выполнения всех тестов была около 50-60%. Качество итогового видео во всех случаях была на высоком уровне, сравнимо с LoiloScope и лучше Movavi.
А теперь для мобильного устройства. В MediaShow множество встроенных профилей, в том числе и для iPhone, но в готовых профилях не видно битрейт и разрешение, по этой причине использовался собственный профиль (480х320, 1 мбит/с):
LoiloScope опять же быстрее, разве что в MediaShow более продвинутый ASP декодер, за счет чего видео из xvid кодируется куда быстрее.
В качестве итога скажу, что MediaShow Espresso – отличный продукт. Меня он подкупил своим простым и красивым интерфейсом, да и скорость работы на высоком уровне, местами даже лучшая среди других конвертеров.
Понимая, что анализировать кучу графиков с целью понять, какой же конвертер лучше, довольно сложно, я решился сравнить их в лоб. Т.к. кодек используется один и тот же (h.264), битрейт был схожим, а итоговый размер получался практически одинаковым для каждого конвертера, то данный подход позволителен. Посчитаем среднюю производительность для каждого разрешения, сложив результаты в данном разрешении по каждому конвертеру и поделив на количество тестов с данным разрешением. Например, с SD разрешением было всего 2 теста – кодирование без потери качества и для мобильного устройства. А вот для 1080p уже 4 – без потери качества, в 720p, в SD и для мобильного устройства.
Если смотреть на HD разрешение, то LoiloScope явный лидер, MediaShow отстал на 10-20%. Badaboom и Movavi явные аутсайдеры. В SD разрешении вырвался вперед MediaShow, остальные участники показали примерно равные результаты.
Что имеет в итоге? LoiloScope и MediaShow заслуживают особого внимания. И хотя возможности по редактированию у LoiloScope относительно скудные, но их хватит для многих рядовых задач, а скорость кодирования видео лучшая среди всех.
Если же вам нужен простой конвертер, то идеальным выбором станет MediaShow. Он прост и удобен, с HD файлами работает незначительно медленнее, чем с LoiloScope, а с SD контентом, которого сейчас очень много, быстрее в 1,5 раза.
Что же касается Badaboom, то при всей своей раскрученности он оказался в 2 раза медленнее вышеописанных участников, при этом по удобству у MediaShow он явно не выигрывает. Еще хуже Movavi – он незначительно быстрее Badaboom, но неудобнее, менее стабилен, дороже.
Вне конкурса мне хотелось бы рассмотреть vReveal, который в первую очередь предназначен для тех случаев, когда видео снималось с рук и без стабилизатора, т.е. цифровой стабилизатор изображения. Стоимость программы составляет почти 1 300 рублей или $40.
Почти все функции доступны и в бесплатной версии, за исключением фильтра Clean, который убирает шумы и артефакты с видео. Основное ограничение – на качество вывода видео, в бесплатной версии можно сохранять только в 480p + будет периодически появляться логотип vReveal.
Ожидать чудес не приходиться, чудес и не будет. Наглядно показать разницу довольно сложно, но она есть. В целом, если просто прогонять все любительские видеозаписи, попутно повышая резкость и немного контрастность, то качество итогового материала улучшится. Но если нужно что-то более серьезное, то vReveal не подойдет. Смею предположить, что нужно что-нибудь вроде ручного покадрового монтажа, чтобы дейсвительно стабилизировать изображение. С другой стороны, небольшие колебания видео, так называемый «тремор», он гасит неплохо.
Пару слов скажу и о CyberLink PowerDirector, стоимостью $70 за обычную версию и $100 за версию с поддержкой x64 архитектуры.
Этот видеоредактор тоже поддерживает CUDA, ролик для демонстрации vReveal длительностью 24 секунды был готов через 6 секунд. Power Director можно назвать продвинутой заменой стандартного Movie Maker, с неплохим внешним видом, он удобнее и быстрее. Более того, к нему можно найти сотни всевозможных плагинов, так что вещь стоящая.
На этом хочется подвести итог: у технологии CUDA действительно огромный потенциал и настанет время, когда GPU будут более широко использоваться в повседневных задачах, а не только в математических расчетах. Сейчас же программ не так много, но стоящие есть, их я уже отметил выше. В следующей части статьи будет детально разобрана польза от PhysX, дает ли эта технология существенные визуальные улучшения, сколько стоящих игр с поддержкой данной технологии и что еще только готовиться разработчиками.
Критику, дополнения и пожелания по добавлению игр в тестирование сюда или сюда.