Terralab.ru: Сквозь огонь
Автор: Сергей Озеров
У «многопроцессорных» графических ускорителей много недостатков. Они очень дороги, требуют специального оборудования, неидеально масштабируются, потребляют чересчур много энергии и рассеивают уйму тепла. Обо всем этом я уже писал в «Компьютерре» несколько месяцев . Однако помимо «реальной», «практической» пользы существует еще и такое понятие, как «имидж» и «репутация». И практика убедительно доказывает, что когда перед пользователем встает выбор между даже более быстрым Radeon и менее быстрым, зато поддерживающим технологию SLI решением Nvidia, пользователь отдает предпочтение последнему.
Технология SLI очень «наглядна» и доступна для понимания: ставим вторую видеокарту – производительность вырастает вдвое. Инерция мышления потребителей велика – сейчас покупают даже неплохие, но бесстыдно дорогие видеокарты Gigabyte 3D1. Просто потому, что они двухпроцессорные. А то, что суммарная производительность (без учета неидеальной масштабируемости) процессоров и оперативной памяти этих плат уступает производительности одиночной видеокарты меньшей стоимости – фактор уже второстепенный. И пусть наш GeForce 6800 не столь быстр, как конкурирующий с ним Radeon X850[Рискуя навлечь на себя гнев поклонников линейки GeForce, все же замечу, что именно так обстоят дела в секторе Hi-End-ускорителей], – зато мы в любой момент можем добавить к нему вторую такую же видеокарту – и получим самую быструю графическую подсистему в мире. Звание производителя «самых быстрых видеокарт» дорогого стоит.
Словом, пусть даже востребованность SLI с чисто практической точки зрения сравнительно невелика[Простой пример: допустим, полгода назад мы купили за 500 долларов видеокарту GeForce 6800 Ultra с прицелом еще через полгода (то есть сейчас) купить вторую, чтобы объединить ее с первой в режиме SLI. Однако нынче вдруг выясняется, что где-то через месяц должны появиться видеокарты на основе графического чипа G70 (GeForce 7800) с производительностью одной видеокарты, соответствующей производительности пары 6800 Ultra в режиме SLI, и по цене, не слишком сильно отличающейся от цены недостающей нам 6800 Ultra. То есть выходит, проще продать уже имеющуюся 6800U, доплатить куда меньшие деньги и купить 7800 Ultra с той же производительностью, но с меньшим тепловыделением, шумом и требованиями к системе], но пропустить вперед по этому показателю злейшего конкурента ATI, конечно же, не могла. Хоть и с опозданием на год, но адекватный ответ на SLI все-таки последовал: 31 мая, в день открытия тайваньской выставки Computex, прошел грандиозный анонс технологии CrossFire.
Опыта в создании multi-GPU-решений канадцам не занимать: свои двухпроцессорные видеокарты Rage Fury MAXX компания выпускала еще пять лет назад, в те времена, когда у Nvidia даже в черновиках ничего подобного не было. Правда, Rage MAXX по ряду причин с треском провалился, а проект «сдвоенной» Rage 256 был закрыт, однако позднее процессоры Radeon 8500 и Radeon 9700 использовались в профессиональных специализированных ускорителях для военных (типа Evans & Sutherland simFUSION 5000 и 6000). В общем, ATI было на чем учиться и отлаживать свои многопроцессорные решения[Nvidia, правда, тоже наверняка использовала в своей SLI разработки, доставшиеся по наследству от 3dfx. А последняя контора на этих «многопроцессорниках» вообще собаку съела, поскольку только на них в эпоху своего заката и ориентировалась].
Что же в конечном счете получилось? Канадцы не стали слепо копировать решение конкурента (специально сконструированный для работы в режиме многопроцессорности графический чип), а пошли «своим путем», использовав стандартные GPU, но дополнив их специальным чипом Composing Engine, объединяющим результаты работы процессоров.
Composing Engine – это специализированный программируемый процессор, позволяющий обрабатывать видеопотоки, поступающие от графических процессоров, установленных в системе. Можно, например, чередовать потоки от разных графических процессоров (четные линии от одного, нечетные – от другого) – тогда мы получим точный аналог 3dfx Scan Line Interleaving. А можно – суммировать их (считать среднее арифметическое между вычисленными каждым ускорителем картинками), внося незначительные изменения в картинку, генерируемую каждым GPU, – тогда мы можем получить особенно качественный FSAA-антиалиасинг либо «бесплатно» реализовать некоторые спецэффекты типа Motion Blur (визуальное размывание контуров быстро движущегося объекта). На худой конец, Composing Engine может просто накапливать кадры, независимо отрендеренные каждым из GPU, и выдавать их на выход по мере надобности – в итоге получаем аналог технологии MAXX[Подробнее об SLI и Rage MAXX можно прочитать в моей статье, посвященной технологии SLI, см. выше. Заодно напомню, что RAMDAC (RAM Digital-to-Analog-Converter), фигурирующий на верхнем рисунке, – это цифро-аналоговый преобразователь, который непрерывно преобразует содержимое специальной области памяти (фрейм-буфера) в аналоговый видеосигнал, соответствующий картинке, хранящейся в этом буфере. Подробнее о технологиях, используемых в 3D-ускорителях, см. «КТ» #566]. Достаточно только написать соответствующие драйверы. Короче говоря, одна из главных прелестей CrossFire в том, что, программируя Composing Engine по-разному, можно получать принципиально разные варианты использования технологии.
На сегодняшний день Composing Engine умеет работать в следующих режимах:
– SuperTiling – изображение разбивается на квадраты 32x32 (тайлы, Tiles), которые ускорители равномерно распределяют между собой (для случая двух ускорителей распределение напоминает обычную шахматную доску, см. нижний рисунок). Похожим образом работали ускорители 3dfx Voodoo в режиме SLI. Это простейший способ очень точно распределить нагрузку на блоки закраски современных GPU; однако расплата за простоту – полное отсутствие распараллеливания обработки геометрических данных в выводимой на экран сцене и необходимость использования строго одинаковых по производительности GPU.
– Scissor (Slicing) – изображение делится на несколько широких полос, и каждый из ускорителей рендерит «свою» полосу. Именно таким образом обычно работает, например, технология SLI от Nvidia. Размер полос динамически изменяется драйвером для обеспечения равномерной загрузки. Плюсы – возможность хотя бы частично распараллелить обработку геометрических данных и использовать неодинаковые GPU; минусы – сложность реализации и меньшая точность в балансировке нагрузки на блоки закраски.
– Alternate Frame Rendering – ускорители распределяют между собой обязанности по рендерингу различных кадров, и каждый ускоритель рендерит «свой» кадр. Этот вариант использовали видеокарты ATI Rage MAXX. Плюсы – идеальное распараллеливание геометрических вычислений (для каждого кадра их можно проводить отдельно) и почти идеальное распараллеливание нагрузки на блоки закраски GPU. Минусы – необходимость буферизации рендеринга на достаточно большое число кадров вперед и, соответственно, возникновение заметных задержек реакции системы на действия пользователя[Эти задержки получаются как минимум не меньшими, чем у системы из одной видеокарты. Реально – даже худшими. То есть если на 15 fps у вас прицел оружия перемещается ощутимыми рывками и заметно отстает от реального положения мыши, то использование Alternate Frame Rendering никоим образом эту ситуацию не улучшит. Просто если раньше курсор двигался рывками и его невозможно было быстро навести на неприятеля, то теперь он будет перемещаться плавно, но по-прежнему «тормознуто», с ощутимой «инерцией», постоянно отставая от истинного положения курсора мыши].