Выбрать главу

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. Однако ничего подобного пока никто не анонсировал. А жаль: было бы интересно оценить эффективность работы не только «сдвоенных», но и «счетверенных» видеокарт.