→ Часть 1: Cell
→ Часть 2: RSX
→ Часть 3: Три "ОС"
→ Часть 4: Борьба с пиратством
3. Графика
Если вы подумали, что Cell со своими особенностями мог бы справится со всеми задачи этой консоли, то позвольте мне сказать нечто истеричное: Sony установила отдельный чип для 3D-графики.
Примеры игр с PS3 (скриншоты)
Большая часть игр выводятся консолью в разрешении 1280x720 пикселей
Похоже, что даже с чипом от суперкомпьютеров, Sony все же пришлось добавить GPU для завершения PlayStation 3. Это заставляет задуматься, не попали ли IBM/Sony/Toshiba в тупик, пытаясь дальше масштабировать Cell, и потому у Sony не было другого выбора, кроме как обратиться за помощью к графической компании. Это всего лишь предположение, однако я не уверен, что когда-нибудь узнаю ответ.
Но я точно знаю, что PS3 содержит чип GPU, произведенный Nvidia и предназначенный для разгрузки части графического конвейера. Чип называется Reality Synthesizer или RSX, и он работает на частоте 500 МГц [23]. Его тактовая частота кажется тревожной по сравнению с частотой Cell (3,2 ГГц), хотя вы вскоре увидите, что графический процессор лучше справляется с параллельным выполнением большого числа операций. Поэтому, если дело доходит до построения графического конвейера, то нужно найти баланс между Cell и RSX (хотя должен признаться, что на бумаге это звучит проще, чем на практике).
Теперь я проведу тот же уровень анализа, который ранее проводился с Cell, на этот раз сосредоточившись на RSX и его графических возможностях.
3.1. Общие сведения
Прошло пять лет с тех пор, когда Nvidia представила линейку GeForce3 (NV30) в 2001 году. К тому времени на арене сражались такие сильные игроки, как 3dfx, S3, ArtX и ATI. Однако, в последующие годы число компаний постепенно сократилось до такой степени, что к 2006 году только ATI и Nvidia остались ведущими поставщиками видеокарт на рынке ПК.
RSX наследует существующую технологию Nvidia, которая, как сообщается, базируется на модели 7800 GTX для ПК. Модель реализует архитектуру GeForce 7 (NV47) [24] под кодовым именем "Сurie".
В моем предыдущем анализе первого Xbox, я говорил о чипе GeForce 3 и дебютировавших в нём пиксельных шейдерах. Так что же изменилось с тех пор? Были и взлеты, и падения, но в основном изменения происходили постепенно, ничего революционного нет по сравнению с пиксельными шейдерами Geforce3.
С другой стороны, в то время как 7800 GTX использует протокол PCI-Express для связи с процессором, RSX был переделан для работы с проприетарным протоколом Flex I/O [25], отдельным интерфейсом внутри Cell для подключения соседних чипов. Flex I/O работает в двух режимах:
Режим BIC для подключения других процессоров Cell (для использования в многопроцессорных системах).
Медленный режим IOIF для подключения до двух периферийных устройств: "быстрого" и "медленного".
Увы, RSX это не Cell, поэтому первый работает через протокол IOIF, используя быстрый слот. Но для сравнения, IOIF ведет себя как 32-битная параллельная шина с теоретической пропускной способностью до 20 ГБ/с, в то время как PCI-Express, используемый в 7800 GTX (версия 1.0, x16 линий), представляет собой 16-битную последовательную шину с теоретической пропускной способностью до 4 ГБ/с.
3.2. Организация контента
RSX имеет в своем распоряжении 256 МБ GDDR3 SDRAM памяти. Удивительно то, что этот же тип памяти используется в Nintendo Wii. Шина памяти работает на частоте в 650 МГц с теоретической пропускной способностью до 20.8 ГБ/с.
Внутри этих 256 МБ памяти Cell может разместить всё, что требуется RSX для отрисовки кадра. Это включает в себя данные вершин, шейдеры, текстуры и команды. Теперь, благодаря шине Flex I/O в Cell, RSX также может использовать вышеупомянутые 256 МБ XDR памяти (главная память процессора) как рабочую область, хоть это и будет снижать производительность. Это удобно в том случае, если, например, через SPU надо наложить пост-обработку на отрисованный кадр.
Как вы можете видеть, хоть эта консоль и не реализует унифицированную шейдерную архитектуру (Unified Shader Architecture, UMA), она все еще может распределять графические данные по разным микросхемам памяти, если это нужно программистам.
Я упоминаю об этом, потому что мне хотелось бы, чтобы “технические эксперты” прочитали больше об этой особенности, прежде чем делать обобщающие заявления в духе “PS3 была ограниченной из-за отсутствия UMA”. В некоторых случаях это может быть правдой, но если они не упоминают об этом, то такое общее утверждение, на мой взгляд, вводит в заблуждение.
Наконец, RSX поддерживает множество форм оптимизации данных для увеличения пропускной способности, например, цветовое сжатие 4:1, Z-сжатие и тайловый режим (я расскажу о нём подробнее позже).
3.3. Построение кадра
Давайте посмотрим на то, как чип RSX обрабатывает и рисует 3D-сцены.
Его модель конвейера очень похожа на GeForce 3, но была сильно обновлена за пять лет технического прогресса. Поэтому я предлагаю заранее ознакомиться с той статьей, поскольку в этой основное внимание будет уделено новым функциям. Я также рекомендую прочитать о графическом процессоре PlayStation Portable, потому что многие новые разработки и потребности частично совпадают с тем чипом.
Итак, посмотрим, что у нас здесь есть… [26]
3.3.1. Команды
Как и в любом другом GPU, должен быть блок, отвечающий за прием команд снаружи. В RSX это происходит с помощью двух блоков, хоста и Graphics Front End.
Хост отвечает за чтение команд из памяти (либо локальной, либо основной) и их перевод во внутренние сигналы, которые понимают другие компоненты в RSX. Это делается с помощью четырех подблоков:
Pusher: извлекает графические команды из памяти и интерпретирует инструкции ветвления. Также содержит 1 КБ буфера предвыборки (prefetch buffer). Обработанные команды отправляются в кэш FIFO.
Кэш FIFO: хранит до 512 команд, декодированных из Pusher в FIFO для быстрого доступа.
Puller: берёт команды из кэша FIFO всякий раз, когда RSX готов к отрисовке, и отправляет их в следующий блок.
Графический FIFO: хранит до восьми команд, которые потом будут читаться Graphics Front End.
Затем Graphics Front End считывает данные из графического FIFO и подает сигнал необходимым блокам внутри RSX для вычисления операций. Если помните, то это эквивалент «pfifo» в GeForce3.
Как можете видеть, команды и данные проходят через множество буферов и кэшей, прежде чем достичь конечного пункта назначения. Это сделано специально, поскольку препятствуется остановка конвейера из-за различных блоков и шин, работающих на разных скоростях. Таким образом, кэшированная память использует преимущества быстрой пропускной способности тогда, когда это возможно.
3.3.2. Вершинный шейдер
Следующий блок - это блок Geometry Processing, эволюция блока "Vertex Block" из GeForce 3, который выполняет трансформацию вершин. Он программируется всё ещё с помощью вершинных шейдеров, которые на сегодня широко распространены в графической индустрии. Более того, количество инструкций было увеличено до 512 (первоначально их было 136!).
Блок, который выполняет шейдеры, называется Vertex Processing Engine (VPE), и он может обрабатывать одну вершину за такт. Если этого показалось мало, то существуют восемь VPE, которые работают параллельно.
После серии GeForce 6 Nvidia привязала интерфейс программирование шейдеров к шейдерной модели Vertex Shader Model 3 или vs_3_0_
. Это стандарт был разработан Microsoft для использования в библиотеке DirectX 9.0c [27]. Блоки VPE также поддерживают открытую модель OpenGL 2.1 [28] и собственный от Nvidia вариант (Сg) [29].
По сравнению с GeForce 3 появились новые инструкции для ветвления и вызова подпрограмм. Также VPE содержит четыре текстурных сэмплера, которые извлекают цвета текстур на этом этапе в случае, если программисты захотят использовать этот блок для выполнения некоторых операций.
Блок Geometry Processing работает так:
Index Vertex Processor (IDX) извлекает и кэширует вершины и текстуры из VRAM. После этого он отправляет данные в VAB.
Vertex Attribute Buffer (VAB) берёт данные из кэша IDX и перенаправляет их в каждый VPE.
Каждый VPE обрабатывает данные на основе загруженного шейдера. Он вычисляет одну инструкцию шейдера за такт.
Результат каждого VPE отправляется в кэш Post Transform Cache, который кэширует результаты, чтобы пропустить идентичные вычисления над одной и той же вершиной. Это применимо только в том случае, если вместо данных вершин используются индексы вершин.
Конечный результат сохраняется в блок Viewport Cull Unit (VPC) и в память атрибутов (Attribute RAM, ATR). VPC убирает вершины, найденные за пределами области видимости. ATR кэширует атрибуты вершин (текстуру, цвет, туман и далее) для чтения на следующих этапах.
3.3.3. Растеризация
Двигаясь дальше, пришло время преобразовать вершины в пиксели (растеризация). Растеризатор RSX довольно быстрый, и он может преобразовать до 8x8 пикселей (64) за такт и работать с буферами кадров размером до 4096x4096 пикселей (хотя разработчикам может потребоваться и меньше).
Растеризатор принимает точки, линии (включая полосы и замкнутые типы), треугольники (включая веера), четырехугольники и правильные многоугольники.
Естественно, как и в текущем поколении консолей, растеризатор работает с суб-пиксельными координатами, где точки семплирования являются полу-координатами (0.5
) пикселей. Это позволяет впоследствии использовать методы сглаживания, такие как мульти-сэмплинг (multisampling).
Данный метод растрирует одну и ту же геометрию несколько раз, но смещает несколько суб-пикселей друг от друга в каждом батче (batch) (RSX поддерживает четыре различных режима смещения), а затем вычисляет среднее значение. Это приводит к сглаженному изображению.
Более того, этот блок применяет z-culling, используя отдельную память внутри RSX (емкость которой около 3 миллионов пикселей). Это экономит обрабатываемые пиксели и трафареты, которые уже были отрисованы, и позволяет выполнить ранний z-тест для входящей геометрии.
Отдельный блок используется для растеризации 2D-объектов (спрайтов), хоть и он изолирован от 3D-конвейера. Следовательно, RSX работает в режимах 2D и 3D, но периодическое переключение между ними обходится дорого с точки зрения производительности.
3.3.4. Пиксельный шейдер
Следующий по нашему списку идёт блок Fragment Shader & Texture. Это программируемый блок (с помощью “фрагментных программ” или “шейдеров”), который применяет текстурирование и другие эффекты.
Являясь продвинутым наследником текстурных юнитов из чипа GeForce 3, новый блок содержит шесть фрагментных юнитов (в оригинале "pipes", далее "каналы”), каждый из которых обрабатывает 2х2 текселя (далее “квады”).
Для организации нескольких юнитов, работающих параллельно, был размещен другой подблок Shader Quad Distributor (SQD), чтобы отправлять квады каждому фрагментному юниту. После этого юнит загружает фрагментную программу.
Для вычислительных операций каждый канал содержит огромное количество 128-битных регистров (всего их 1536). Помимо этого, каждый канал может обрабатывать несколько квадов параллельно (многопоточность), хотя их количество, обрабатываемых параллельно, зависит от количества регистров, выделенных фрагментной программе:
кол-во. потоков = 1536 / кол-во регистров для шейдера
Глобально, параллельно может обрабатываться до 460 квадов. Кроме того, до трех фрагментных каналов могут обработать две инструкции одновременно (как и, например, двойная обработка у PPU) до тех пор, пока инструкции не зависят друг от друга.
Фрагментные юниты предоставляют арифметические и текстурные инструкции. Первые похожи на инструкции для вершинных блоков, а вторые, например, могут извлекать и распаковывать множество типов текстур (поскольку текстуры могут быть закодированы с помощью структур, а затем сжаты).
Как и в случае с вершинным блоком, фрагментный шейдер придерживается пиксельной модели Pixel Shader 3.0 от DirectX [30], профиля NV_fragment_program2 от OpenGL [31] и профиля fp40 от Cg [32]. Все это позволяет облегчить программирование и избежать изучения низкоуровневого API с самого начала.
Наконец, так как юниты постоянно извлекают части текстур из VRAM или ОЗУ, то этот блок содержит три кэша для текстур: 4 КБ кэша L1 для каждого канала, 48 КБ кэша L2 для выборок из видеопамяти и 96 КБ кэша L2 для основной памяти. Заметьте, что кэш основной памяти значительно больше остальных. Это было сознательное решение, принятое для компенсации более высокой задержки.
3.3.5. Пиксельные операции
Финальный блок Raster Operation Block (ROP) выполняет финальные тесты для полученных пикселей перед записью результатов в буфер кадра (который хранится в VRAM или в главном ОЗУ).
Есть два набора ROP, по четыре блока каждый (всего восемь блоков). Каждая группа выполняет z-тестирование, альфа-смешивание и финальную запись в память.
В целом, эта схема может обрабатывать до 16 z-значений и 8 цветов пикселей за такт.
Любопытно, что ПК-вариант Nvidia 7800 GTX поддерживает 16 ROP вместо 8. Может быть, это сокращение было сделано, чтобы приоритизировать пропускную способность памяти, потребляемой блоками SPU? Для увеличения пропускной способности ROP также обеспечивает цветовое сжатие и Z-сжатие.
Кроме того, есть тайловый режим для оптимизации доступа к памяти с помощью видео-кодера. В этом режиме, буфер кадра хранится в непрерывных блоках по 128 байт, которые упорядочены так, как они будут транслироваться или сканироваться. Из-за этого GPU избавляется от необходимости подкачки страниц (для адресации памяти) при передаче буфера кадра для вывода на экран, что, следовательно, улучшает пропускную способность. Эти тайлы хранятся в отмеченных в памяти местах исключительно для этого типа адресации.
3.4. Единый видеовыход
Прошли времена проприетарных видео-разъемов для консолей и десятков аналоговых сигналов, скомпонованных в одном разъеме для учета каждого региона Земли. В PlayStation 3, наконец-то, встроили единый видеосигнал, который вскоре будет принят во всем мире: High Definition Media Interface (HDMI). Он используется для одновременной передачи аудио и видео.
Коннектор HDMI состоит из 19 контактов [33], всё в одном корпусе. Он передает цифровой сигнал, означая, что он транслируется с помощью 0 и 1, а не диапазона значений, как в аналоговых сигналах.
Поэтому он не страдает от помех или ухудшения качества изображения, как это было с предыдущим оборудованием - например, создаваемые дешевыми SCART-кабелями артефакты экрана.
По сей день протокол HDMI постоянно обновляется. Новые версии спецификации предлагают больше возможностей (высокое разрешение изображения, большая частота обновления, альтернативные цветовые пространства и так далее), сохраняя при этом тот же физический носитель для обратной совместимости.
На протяжении всего жизненного цикла PS3 Sony добавляла некоторые функции HDMI в новые модели PS3 с помощью обновлений ПО [34]. Последним протоколом, совместимым с PS3, является версия 1.4, в первую очередь обеспечивающая поддержку «3D-телевидения». Однако, другие возможности, такие как более высокое разрешение видео, остались ограниченными на уровне 1920x1080 пикселей (хотя большинство игр отображали свой буфер кадров в разрешении 1280x720 пикселей).
3.5. 3D-эффект в “реальном времени”
Что же это было за “трёхмерное телевидение” (3D television), о котором я упоминал ранее?
Так получилось, что срок жизни этой консоли совпал с кратковременной лихорадкой на 3D-телевизоры (так называемые 3DTV) [35]. Для их поддержки Sony обновила свой SDK для облегчения рендеринга стереоскопических кадров в RSX и внедрила “3D-спецификацию” в свой кодировщик HDMI.
За кулисами происходит то, что кодировщик транслирует два кадра за раз, а телевизор чередует их аналогично тому, как это делали 3D-очки для Master System 30 лет назад.
4. Аудио
Боюсь, что вы не увидите в этой секции много информации, потому что начиная с последнего портативного изобретения, аудио тихо сместилось в сторону ПО. Другими словами, больше нет выделенных аудио-чипов.
Видите ли, в то время как потребность в лучшей графике имеет тенденцию расти экспоненциально (потребители хотят больше декораций, лучшей детализации и различных цветов), к звуку вы больше не услышите требования такого же уровня.
Я предполагаю, что это связано с тем, что возможности достигли нашего когнитивного предела (частота дискретизации в 44.1 кГц и 16-битное разрешение). Единственное, что осталось - реализовать больше каналов и эффектов, но для этого не требуется вычислительная мощность, которая потребовала бы установки специальных чипов, по крайней мере, в потребительское оборудование.
Итак, аудио теперь полностью реализовано с помощью ПО и обрабатывается блоками SPU (я имею в виду Synergistic Processor Unit, а не Sound Processing Unit! это немного иронично, что оба названия имеют одни и те же буквы). Далее, Sony предоставляет множество библиотек в своем SDK, которые инструктируют блоки SPU выполнять секвенирование и микширование звука, и потоковую передачу. И если этого недостаточно, то они могут также применить множество эффектов.
После этого куда передается звуковой сигнал для вещания? В чип RSX. Он также содержит порты, используемые для трансляции звуковых сигналов в телевизор. Перед отправкой сигнал кодируется в различных форматах, в зависимости от выбранного выхода (аналоговый, HDMI или S/PDIF, последний также называется “цифровым аудио”).
Источники
Графика и RSX:
Jordan, Vincent, NVIDIA GPU architecture. Archived. ↩︎
Michael Gschwind, Bruce D’Amora, Alexandre Eichenberger, Cell BE – enabling density computing for data rich environments. IBM Corporation. ↩︎
Microsoft, Shader model 3 (HLSL reference). ↩︎
Mark J. Kilgard, NVIDIA OpenGL 2.0 Support. ↩︎
Khronos, NV_fragment_program2. ↩︎
Nvidia, Cg 3.1 Toolkit Documentation - fp40. ↩︎
Nvidia, Cg 3.1 Toolkit Documentation - vp40. ↩︎
Marcelina Kościelnicka, nVidia Hardware Documentation. ↩︎
HDMI® Licensing Administrator Inc, HDMI Specifications and Programs. ↩︎
PS3 Developer Wiki Contributors, HDMI. PS3 Developer Wiki. ↩︎
Wikipedia contributors, HDMI. Wikipedia, The Free Encyclopedia.. ↩︎
Playstation.Blog, NEW 3D Display and PS3 Accessories Debut at E3. ↩︎
PS3 Developer Wiki Contributors, RSX. PS3 Developer Wiki. ↩︎
Комментарии (4)
akhalat
03.11.2021 13:06Данные игры выводятся консолью в максимальном разрешении (1280x720 пикселей)
Максимальное у нее 1920x1080, и достаточно игр которые работают в нём.
yatanai
Грустно конечно что "лихорадка 3D" так быстро прошла. Даже гейвидэ выпустила свой 3Dvision в котором можно было, с некоторыми оговорками, поиграть в 3д версии своих игрушек. Сильно позже я купил себе очки и через обычный решейд играю в шутеры и те игры в которых есть буфер глубины... Криво но ощущения не передаваемые, смотришь под ноги а там трава из земли торчит, аахха.
qw1
Стерео-3D уходит, VR приходит, так что не всё грустно.
yatanai
Но поиграть в "любые" игры в сетерео уже не получается... (я помню что не все игры поддерживались раньше)
Максимум может помочь Depth3D, когда оно по карте глубин делает "3Д". Далеко не во всех играх это есть, что обидно. Хотелось бы в SOMA поиграть в очках.