Словом, пусть даже востребованность 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; минусы – сложность реализации и меньшая точность в балансировке нагрузки на блоки закраски.