Журнал «Компьютерра» № 24 от 28 июня 2005 года
Шрифт:
Словом, пусть даже востребованность SLI с чисто практической точки зрения сравнительно невелика[Простой пример: допустим, полгода назад мы купили за 500 долларов видеокарту GeForce 6800 Ultra с прицелом еще через полгода (то есть сейчас) купить вторую, чтобы объединить ее с первой в режиме SLI. Однако нынче вдруг выясняется, что где-то через месяц должны появиться видеокарты на основе графического чипа G70 (GeForce 7800) с производительностью одной видеокарты, соответствующей производительности пары 6800 Ultra в режиме SLI, и по цене, не слишком сильно отличающейся от цены недостающей нам 6800 Ultra. То есть выходит, проще продать уже имеющуюся 6800U, доплатить куда меньшие деньги и купить 7800 Ultra с той же производительностью, но с меньшим тепловыделением, шумом и требованиями к системе], но пропустить вперед по этому показателю злейшего конкурента ATI, конечно
Опыта в создании 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 никоим образом эту ситуацию не улучшит. Просто если раньше курсор двигался рывками и его невозможно было быстро навести на неприятеля, то теперь он будет перемещаться плавно, но по-прежнему «тормознуто», с ощутимой «инерцией», постоянно отставая от истинного положения курсора мыши].
– Super AA – CrossFire используется для реализации уже упоминавшегося «бесплатного» полноэкранного сглаживания. Сегодняшние видеокарты при рендеринге в режиме антиалиасинга позволяют выбирать, какие точки внутри каждого пиксела использовать для вычисления его цвета; соответственно, заставив вычислять один GPU цвет пиксела по одним точкам, другие GPU – по другим и усреднив полученные значения, – мы добьемся полноэкранного сглаживания с пропорционально увеличенной «степенью антиалиасинга» – числом точек, учитывающихся при определении цвета каждого пиксела.
В качестве «интерконнекта» между GPU и Composing Engine выступает стандартная цифровая графическая шина DVI (Digital Video Interface), обычно используемая для подключения к видеокарте цифровых устройств отображения видео, например LCD-мониторов. Благо интерфейс DVI-out (и даже не один) давным-давно интегрируется в любой GPU. И в этом – второе сильное место технологии, поскольку Composing Engine вовсе не обязательно размещать на всех платах – достаточно взять энное количество самых обыкновенных видеокарт и объединить их с помощью платы, на которой CE будет установлен. Нет никаких принципиальных ограничений на количество одновременно работающих GPU (CrossFire, как заявлено, может объединять до 32 графических процессоров). Наконец, даже не обязательно использовать GPU производства самой ATI или одинаковые GPU: технология проста и абсолютно универсальна.
Итак, что требуется для организации CrossFire-системы? Энное количество видеокарт, соответствующее количество графических слотов в системе (и желательно – одинаково быстрых, дабы не пришлось вспоминать пословицу про караван, скорость движения которого определяется самым медленным верблюдом) и чип Composing Engine. В принципе, самым логичным и очевидным решением (с моей точки зрения) должен был бы стать выпуск Composing Engine в виде самостоятельной платы расширения (скажем, для интерфейса PCI Express x1 или даже для старого доброго PCI), к которому кабелями DVI подключались бы все установленные в систему стандартные графические ускорители; однако ATI решила поступить иначе и объявила о выпуске специальных графических ускорителей CrossFire edition, объединяющих в себе обычную видеокарту и Composing Engine. Эта карта становится «ведущей», остальные – «ведомыми»; в текущем варианте допускается только одна ведущая и одна ведомая видеокарты.
В принципе, CrossFire не ограничен требованиями «одинаковости» используемых видеокарт, однако в данной конкретной реализации Composing Engine почему-то умеет работать только с идентичными GPU[Справедливости ради надо сказать, что большинство режимов рендеринга (за исключением Scissor) требуют, чтобы задействованные GPU были одинаковыми – в противном случае скорость работы всей системы будет определяться скоростью самого медленного GPU, входящего в нее. И при этом Scissor почему-то является для ATI «нелюбимым» режимом рендеринга – в текущих драйверах (см. далее) ATI старается по мере возможности использовать для игр режим SuperTiling]. А поскольку видеокарты CR Edition выпущены пока только для Radeon X800 и Radeon X850, то и использовать CrossFire на первых порах придется только с видеокартами на основе этих графических процессоров. Позднее обещаны CrossFire-варианты и для Radeon X700; однако в целом ситуацию, если честно, следовало бы назвать сложной: вся «универсальность» новой технологии, по сути дела, свелась к тому, что ATI пока сумела лишь догнать в вопросах совместимости Nvidia. Ну и что, что у последней требуется, чтобы обе видеокарты поддерживали технологию SLI? У нее-то этой технологией уже оснащены все видеокарты, вплоть до верхней границы сектора Mainstream. Правда, одно большое преимущество в этом вопросе у канадской технологии все-таки есть: в отличие от Nvidia, в режиме CrossFire можно безбоязненно использовать видеокарты разных производителей.
Теоретически допустимо использование многопроцессорных графических плат – в этом случае типичная карта будет являться тривиальным механическим объединением на одной PCB нескольких (одинаковых) видеокарт с независимыми DVI-выходами и, возможно, одного Composing Engine. Однако ничего подобного пока никто не анонсировал. А жаль: было бы интересно оценить эффективность работы не только «сдвоенных», но и «счетверенных» видеокарт.
Для подключения ведомой платы к ведущей служит специальный DVI-кабель, вставляющийся в специальный же разъем на «ведущей» видеокарте. Маркетологи ATI могут сколько угодно твердить, что их решение «лучше», потому что оно не нуждается в перемычках между ускорителями, но подключать крошечную стандартную платку-коннектор SLI, мне кажется, гораздо удобнее, нежели обвешивать системник здоровенными проводами и коннекторами снаружи. Кстати, если «двухпроцессорные» видеокарты от ATI все же появятся, ей придется либо усовершенствовать Composing Engine (который вроде бы должен поддерживать аж до 32 GPU), либо «соединителей» снаружи системного блока станет как минимум два. А если к этому моменту Composing Engine будет-таки доступен в виде отдельной платы, – то и все четыре. Честно говоря, совместимость совместимостью, но решение Nvidia мне представляется более изящным.