GPU против CPU рендеринга. Стоит ли рендерить видеокартой?

На самом деле очень интересная и актуальная сегодня тема.
Я сам ею интересовался и разбирался что к чему. Ниже я поделюсь своими изысканиями на эту тему. Это то, что мне самому удалось узнать касательно GPU рендеринга.
Прежде чем делать какие-либо выводы по поводу рендеринга видеокартой, его целесообразности, необходимо разобраться в самом главном. В том, что же такое GPU рендеринг и с каким типом рендереров он может работать.
Я сам пользуюсь V-Ray, поэтому я брал его как отправную точку.
Основное достоинство V-Ray рендерера в его адаптивности. То есть в способности подстраиваться под конкретную сцену и на основании информации о ней, производить вычисления лишь в тех местах, где это реально необходимо. В то же время, в малозаметных зонах точность вычислений может быть снижена, за счет чего происходит существенная экономия вычислительных ресурсов.
Очень наглядным примером того, как это делается, есть работа адаптивного GI движка Irradiance Map, описанная нами в серии статей про настройки V-Ray.
Такие движки, способные выборочно изменять точность вычислений в разных зонах сцены, называют пристрастными, предвзятыми или тенденциозными. По-английски Biased. По-русски читается как ['baɪəst] (баиест). Так как они действительно предвзято подходят к вычислениям в сцене, просчитывая более точно лишь те зоны, которые посчитают важными. Помимо этого, результат их просчетов не изменяется от рендера к рендеру.
Такие движки – прерогатива исключительно CPU рендеринга. GPU рендеринг biased-движком не возможен в силу разного подхода к просчету.
Еще одной ключевой особенностью Biased движков является использование интерполяции. Она не только позволяет ускорить вычисления, интерполируя непросчитанные сэмплы, но и избавляет от шума, присущего сгенерированным на компьютере изображениям. Ведь интерполяция, это на практике – размытие.
Однако, тот же V-Ray, имеет в своем арсенале и алгоритмы, имеющие свойства тех, которые используются при рендеринге GPU. В частности, в них нет никакой адаптивности, и все зоны сцены просчитываются одинаково, вне зависимости от их важности.
Ярким примером беспристрастного движка является GI движок Brute force. Он не вычисляет никаких зон, не определяет никакую важность, он просто «шпарит» всю сцену с одинаковой точностью, основываясь лишь на единственной собственной настройке Subdivs, не изменяя качество просчета для всех зон сцены без исключения.
Справедливости ради, стоит отметить, что Brute force все же не является Unbiased движком, он лишь схож с такими движками и на его примере легко понять практическую разницу.
Так вот, Unbiased движки могут работать с GPU, то есть могут вести вычисления как центральным процессором компьютера, так и видеокартой. Именно об этих Unbiased движках идет речь, когда заходит разговор о GPU-рендеринге.
Как я уже сказал, в Unbiased рендеринге нет адаптивности и уж тем более интерполяции. Вследствие чего, избавиться от шума при Unbiased рендеринге практически невозможно. Разумеется, можно добиться того, что шума будет практически не видно вообще (если специально его не выискивать
). Однако, расплатой за это будет ненормальное увеличение времени рендеринга.
Unbiased движки идеально подходят для GPU рендеринга. Просто потому, что видеокарты по сути и предназначены для таких вычислений.
Дело в том, что Unbiased рендер считает всю картинку сразу во множество потоков одновременно. Это просто идеально подходит для параллельной конвейерной архитектуры GPU видеокарт.
Характерной особенностью Unbiased движка является то, что у него нет как такового конца рендеринга. Unbiased рендериннг длится бесконечно, с каждой секундой просто пополняя просчитываемую картинку новыми цветовыми данными. По своей сути, Unbiased рендерер просто добавляет всю новую и новую цветовую информацию во фрейм буфер до тех пор, пока пользователь принудительно не прервет этот процесс или это не сделает автоматическое прерывание расчетов, заданное вручную перед рендерингом.
Вот посмотрите это знаменитое презентационное видео Unbiased движка V-Ray RT:
Если вы внимательно присмотритесь к рендеру на видео, то вы увидите, что во время движения по сцене картинка получается очень шумной. Но стоит лишь остановиться на каком-то ракурсе, то шум начинает исчезать и картинка становиться более светлой и чистой.
Может показаться, что при движении специально снижается качество, чтобы меньше тормозить вращение RT вьюпорта, а потом улучшается лишь при остановке движения. Но это не так. Unbiased рендерер постоянно ведет просчет текущего ракурса с одинаковой интенсивностью. Просто во время остановки на каком-нибудь ракурсе, видимое изображение начинает дополняться новой цветовой информацией, которая отображается как видимое улучшение. Достаточно оставить такое вычисление в покое, как с каждой минутой видимое изображение будет уточняться. При этом неуточненных точек, которые мы и видим как шум, будет становиться все меньше и меньше.
Для сравнения, Biased движок высчитывает рендер последовательными достаточно крупными порциями. Он не дополняет его бесконечно, он четко выполняет просчет с заданным уровнем качества. В отличие от распаралеленного Unbiased рендеринга, Biased рендеринг более последователен и наибольшим образом подходит для CPU.
Но в самом сравнении находится главный парадокс темы.
Сравнить CPU и GPU рендеринг просто численно на предмет дольше-быстрее нельзя. Точнее, можно сравнить скорость работы CPU и GPU на Unbiased рендерере. Однако это так же глупо, как сравнивать на вспашке поля одинаковые по мощности трактор и спорткар, только по тому, что у того и того по 300 лошадиных сил и оба с колесами
Кстати, именно об этом непробиваемо замалчивают «соревнователи» CPU с GPU. А заодно и маркетинговые лозунги производителей видеокарт.
Дело в том, что никто в здравом уме, в реальной ситуации, не станет рендерить с помощью CPU Unbiased-рендерером, предназначенным для GPU. Это, по меньшей мере, глупо.
Единственным хоть сколь уместным, может быть сравнение Unbiased GPU рендеринга и Biased CPU рендеринга. Однако это сравнение может быть лишь субъективным, так как время Unbiased рендеринга – бесконечность.
Что здесь означает субъективное сравнение?
А значит это то, что сравнивать можно лишь время на создание визуально неотличимых изображений, сделанных Unbiased и Biased движками. То есть, нужно взять конкретную сцену и отрендерить ее Biased движком с помощью CPU. Затем, запустить эту же сцену на просчет Unbiased рендерером на GPU и дождаться пока, визуально качество картинки не станет сравнимым с результатом Biased рендерера. И только потм, сравнивать затраченное на вычисления время.
И, вот тут-то начнутся проявляться «особенности» Unbiased движка. Первая из них это то, что добиться столь же чистой (не шумной) картинки без интерполяции, которая активно применяется при Biased рендеринге, на Unbiased движке «малой кровью» не выйдет. Привидется долго ждать, чтобы видеокарта дополнила фрейм буфер цветовой информацией до полного визуального отсутствия черно-серого зерна. Второй «сюрприз» заключается в том, что Unbiased движок имеет технологические ограничения и его возможности гораздо скромнее, чем у Biased рендерера. Например, тот же V-Ray RT имеет ряд неподдерживаемых функций, то есть он попросту не сможет отрендерить все даже самые, казалось бы, элементарные, эффекты, которые давно доступны Biased рендереру.
Однако, это в общем-то мелочи. Допустим, что первую особенность можно компенсировать покупкой дополнительных видеокарт, а второю просто настройкой сцены другими методами.
Однако третьей существующей проблеме, разумного решения нет. Заключается она в недостаточном количестве Onboard Video Memory. То есть, для серьезной работы, установленных в видеокарте одного, в лучшем случае двух гигабайт видеопамяти, попросту недостаточно, чтобы отрендерить коммерческую сцену с, например, классическим интерьером. При попытке отрендерить обыденную для большинства визеров картинку, Unbiased рендерер просто вывалится, из-за банальной нехватки видеопамяти.
Чем Тесла по сути отличается от Квадры? Да ничем
Отличие лишь в бОльшем количестве видеопамяти, установленной в картах серии Tesla.
В некоторые модели установлено аж по 6GB Video Memory, что, в общем-то, не плохо, однако все же недостаточно в особо тяжелых рендерах. Но, что смешно, цена за этих несколько гигабайт видеопамяти, просто ужасающая. За цену одной такой квадры можно купить 5 отличных системных блоков для дистрибутивного рендеринга. Мало того, это еще не самое «смешное». Дело в том, что отличие игровой видеокарты, построенной на том же чипе, в GPU рендеринге, тоже исключительно в объёме видеопамяти, а не как не в скорости смоаго рендеринга. Проверено!
Теперь понимаешь, почему до сих пор процессорный рендеринг не ушел в прошлое?

Текущее не самое успешное положение дел рендеринга GPU, да и скорее всего, в ближайшие годы, лишь временно. Рендеринг качественных картинок с помощью мощностей видео-карты находится в своей "младенческой" стадии. В будущем можно будет проводить битвы CPU и GPU. Но на это нужно некоторое время 
Вы не представляете как я вам благодарен. После ваших уроков и ответов всё самое сложное становится элементарным. Спасибо, что вы есть!
Я бы с удовольствием поставил бы Xeon 7500 и забыл про GPU рендер

Может какие-нибудь плагины или функции только CUDA признают.
Почему я это спрашиваю, потому что если он особо ни для чего в максе не нужен, то я в выборе видеокарты больше к amd склоняюсь.
Когда брал на работу AMD HD6950, боялся что VrayRT он не понравится, но опасения были напрасны, всё работало (OpenCL), но какого-то сверх быстрого ActiveShader(+VrayRT) я так и не получил.
1. Что такое CUDA и какая от него польза пользователю?
2. Мне нравятся видеокарты от AMD, но я выбираю от NVIDIA потому что там есть CUDA, я правильно делаю?
3. Где CUDA используется в 3ds Max?
4. Обязательно ли моя видеокарта должна поддерживать CUDA? Я что-то потеряю, если она CUDA не поддерживает?
Чтобы ответить на все эти вопросы, следует разобраться, что же такое CUDA.
CUDA – аппаратно-программная архитектура, которая позволяет специалистам по программному обеспечению создавать приложения, ведущие вычисления на видеокартах, которые поддерживают технологию GPGPU. Простыми словами, это один из языков программирования, позволяющий писать программы, работающие на мощностях не CPU (как это обычно бывает), а на мощностях NVIDIA видеокарт.
CUDA это не какой-то отдельный чип на видеокарте, это не функция, ускоряющая GPU, это не эффект, улучшающий графику. Нет. В видеокарте это способность работать с этим конкретным языком программирования.
Вот теперь, когда мы познакомились со смыслом аббревиатуры CUDA и, тем самым, ответили на первый вопрос, можно перейти ко второму и, для ясности, перефразировать его.
«Мне нравятся видеокарты, поддерживающие один язык программирования, но я выбираю другие, потому что они поддерживают другой язык программирования, я правильно делаю?»
Ты собрался писать программы для GPU, и CUDA тебе удобней? Нет? Так почему же тебе есть дело до поддержки одного из способов программировать?
А потому, что ты запутался в умелых маркетинговых лозунгах вокруг NVIDIA, преподносящих CUDA, как единственную и неповторимую технологию использования GPU для ведения вычислений 
Давай теперь ответим на оставшиеся вопросы.
Где CUDA используется в 3ds Max? – Нигде, CUDA никакого отношения к 3ds Max не имеет.
Обязательно ли моя видеокарта должна поддерживать CUDA? Я что-то потеряю, если она не работает с CUDA? – Нет, твоя видеокарта совершенно не должна быть привязана к ограниченному программному обеспечению, монополизированному одним из производителей железа.
Как ты сам сказал, тот же V-Ray RT спокойно себе работает с OpenCL.
Следует понимать, что разработчики популярного ПО, будь то V-Ray или любая другая программа, не станут ограничивать продажи своего программного продукта лишь для владельцев железа одного разработчика и полностью игнорировать других своих потенциальных клиентов, особенно учитывая что приверженцев AMD не меньше чем NVIDIA. Это, по меньшей мере, глупо, по большей – это банальная потеря прибыли. Скорее это NVIDIA мечтает всех разработчиков ограничить, заставив их писать залоченное под их видеокарты ПО. Но это так же реально, как и существование президента вселенной 
OpenCL – это язык программирования (упрощенно), позволяющий писать программы, ведущие вычисления на видеокарте, конечно же, в не зависимости от его производителя. Его будущее куда более перспективно, нежели будущее ограниченного в выборе железа CUDA.
Способность программы работать лишь на одних видеокартах и слепое игнорирование других, это ее недостаток, а никак не преимущество, что прекрасно понимают разработчики. Исключением могут служить лишь специальные программно-аппаратные комплексы, ориентированные под выполнение одной узкоспециализированной задачи. Например, под медицинские или финансовые вычисления. Но они никакого отношения не имеют к пользователям десктопного ПО и никак не могут выступать в роли преимущества для них.
Если тебе интересно почитать по этой теме больше, то ты можешь пройтись по ссылкам в посте. Там более конкретная информация по ней.
Нам же осталось подрезюмировать.
Не нужно оглядываться на вводящие в заблуждение маркетинговые лозунги. Покупай ту видеокарту, которая тебе больше нравится 
Кстати, недавно, Nvidia открыла исходный код компилятора CUDA, что позволяет использовать ее для других архитектур и процессоров, в том числе AMD GPU и x86 CPU. Что собственно и следовало ожидать. Так, что теперь даже этого, вынуждающего, аргумента к покупке видеокарты от Nvidia – нет. Можно смело выбирать видеокарту по производительности и цене, не зацикливаясь на одном разработчике видеопроцессоров 
Оставить комментарий
Использование Премиум 3D моделей RenderStuff – отличительная черта профессионалов, которые ценят свой труд и не растрачивают свое терпение на то, что уже было сделано для них:
Используя содержимое этого сайта, Вы соглашаетесь с данными условиями:
ПЕРСОНАЛЬНОЕ ИСПОЛЬЗОВАНИЕ
Вы можете свободно использовать контент в своих личных проектах и сценах. Работая с материалами сайта, Вы можете изменять его на Ваше личное усмотрение.ПРОДАЖА
Вы НЕ можете продавать контент в измененной или неизмененной форме, как самостоятельный продукт или в сборе коллекций, если обратное не указано в описании. Использование 3d моделей RenderStuff как основы для создания производных 3d моделей и их дальнейшей продажи запрещено.КОММЕРЧЕСКОЕ ИСПОЛЬЗОВАНИЕ
Вы можете свободно использовать контент сайта для создания коммерческих продуктов в любой форме, пока Вашим продуктом не является сама 3D сцена. Если же Ваш продукт является 3D сценой, Вы можете использовать контент RenderStuff, только если модели в Ваших сценах, их точные имена, названия текстур и материалов не будут изменены.РЕПУБЛИКАЦИЯ
Вы можете размещать материалы данного сайта ТОЛЬКО при условии наличия прямой видимой индексируемой гиперссылки на ru.renderstuff.com как автора. Кроме того, Вы не можете изменять содержимое контента, а также имена и содержимое скачанных архивов (*.zip). Вы не можете распространять каким-либо образом производные 3d модели, сделанные с использованием любой 3d модели RenderStuff как основы.Все логотипы и торговые марки принадлежат их владельцам и используются только в идентификационных целях.

Но вот недавно я узнал, что у NVidia есть технология CUDA и они выпускают графические процессоры Tesla. Судя по их красивым графикам прирост производительности при рендере на GPU превышает CPU более чем в 200 раз.
Еще в их пользу говорит и то, что в Quadro 4000 технология CUDA уже внедрена и я смог лично ее опробовать. И получилось так, что одна средняя видеокарта быстрее рендерит, чем два современных процессора. Пусть и менее точно. Но это уже недостатки сырого ActiveShade от V-ray RT.
Я загорелся покупкой теслы. А как вы относитесь к рендеру на GPU и почему до сих пор процессорный рендеринг не ушел в прошлое? Думаете ли вы перейти на рендеринг в пользу GPU? Вообще правильно ли я решил отдать за на одну электронную плату стоимость равную целому очень хорошему компьютеру?