« Архитектура PlayStation 3 (index)

Архитектура PlayStation 3

Chapter 3: Процессор


Содержание

  1. Введение
    1. Положение дел
    2. Новые философии дизайна
    3. Новая эра многоядерности
  2. Взгляд на Cell
    1. Общая структура
    2. Как организовано это исследование
  3. Cell изнутри: Сердце
  4. Cell изнутри: Лидер
    1. Состав PPE
    2. PowerPC Processing Unit
      1. Знакомая архитектура
      2. Отличительные особенности
    3. Строительные блоки PPU
      1. Инструкции
      2. Управление памятью
      3. Арифметика
    4. Суммируя PPE
  5. Cell снаружи: Основная память
  6. Cell изнутри: Помощники
    1. Состав SPE
      1. Memory Flow Controller
      2. Synergistic Processor Unit
    2. Архитектура SPU
      1. Нечётный конвейер
      2. Чётный конвейер
  7. Cell изнутри: Стили программирования
    1. Подходы, ориентированные вокруг PPE
    2. Подходы, ориентированные вокруг SPE
  8. Вывод

Время познакомится с самой узнаваемой и инновационной частью данной консоли.

Введение

Процессор PS3 сложно устроен, но он - удивительная инженерная работа, в которой пересекаются сложные потребности и необычные решения, выдающиеся в эпоху перемен и экспериментов. Итак, прежде чем мы перейдем к внутренностям процессора PS3, я написал следующие абзацы, чтобы привнести в статью некоторый исторический контекст. Так, мы сможем разложить чип по кусочкам так, чтобы не только понимать, как он работает, но и почему были приняты те или иные главные конструкторские решения.

Положение дел

Image
Процессор PS1 (1994). Создан LSI и Sony на основе технологии MIPS.

Image
Emotion Engine, процессор PS2 (2001). Создан Toshiba, опять же, на основе технологии MIPS.

Прошло почти десять лет после выхода первой PlayStation на процессоре MIPS, и мы находимся в начале нулевых. В это время дела у SGI/MIPS шли не очень хорошо. Nintendo недавно отказалась от них в пользу бюджетного ядра PowerPC от IBM, в то время как Microsoft, будучи новичком на этом рынке, выбрала Intel и их доминирующую x86.

Sony же брала существующие бюджетные решения (дешевые ядра MIPS) и модифицировала их так, чтобы получить приемлемую производительность в 3D при сниженных затратах. В этот процесс включались другие компании, будь то LSI (для процессора PS1) или Toshiba (для Emotion Engine). Эта методология использовалась до 2004 года с выпуском PlayStation Portable. Итак, какой новый MIPS-агрегат они собирались создать для PlayStation 3?

Оказывается, что работа над PlayStation 3 началась до разработки PlayStation Portable . В 2000 году, через несколько месяцев после выхода PS2, Sony сформировала альянс совместно с IBM и Toshiba под названием "STI". Единственная цель альянса - создать чип, который мог бы работать в следующем поколении суперкомпьютеров . Если это звучит недостаточно экстравагантно, то будущий чип также будет использоваться в преемнике PS2. В конце концов, в 2004 году IBM представила процессор Cell Broadband Engine (также известный как "Cell BE" или просто "Cell") .

Новые философии дизайна

Image
Чип Cell Broadband Engine. К сожалению, слишком блестящий для моей камеры.

Чтобы понять радикальные решения в Cell, мы должны описать проблемы, которые были актуальны в данную эпоху (конец 90-х - начало 00-х).

С каждым годом потребители требуют всё больших скоростей. Так было всегда. Тем не менее, последний подход, призванный это решить (конвейер данных и увеличение частот), теперь не справляется с масштабированием. Архитектура Netburst от Intel не смогла развиваться дальше, а обещанный преемник так и не появился. Аналогично, IBM в своем PowerPC 970/G5 не смогла предоставить ни обещанные 3 ГГц, ни низкое энергопотребление (а значит, Apple не может поставлять ноутбуки с процессором последнего поколения) . В общем, похоже, что инженеры столкнулись с новым кризисом масштабируемости.

Поэтому, фокус сместился на распределенные вычисления . Другими словами, зачем увеличивать производительность одной машины, если вместо этого можно взять несколько машин поменьше и распределять нагрузку между ними? Напротив, этот подход не является чем-то новым, поскольку все консоли, проанализированные на этом веб-сайте, содержат более одного процессора. Однако именно разработка "единого процессора с несколькими ядрами" открывает новые возможности для проектирования процессоров (которые могут использоваться не только в консолях).

Следовательно, Cell является частью этой новой волны исследований и разработок. Новый процессор сочетает в себе многоядерный дизайн с особым акцентом на векторные вычисления. Если помните, векторные вычисления являются оптимальными для симуляций (физика, освещение и подобное). Эту задачу ранее выполняли Geometry Transformation Engine или два Vector Unit. Но вы также увидите, почему дизайн Cell является большим шагом вперед по сравнению с двумя предыдущими решениями.

Новая эра многоядерности

Image
Пример гетерогенного дизайна.
По сей день это де-факто архитектура многих мощных консолей.

Image
Пример гомогенного дизайна.
Каждое ядро могло выполнять те же задачи, что и раньше. Они не обязательно ограничены одной задачей.

Если задуматься, то и процессор PS1, и Emotion Engine уже были многоядерными. Тогда почему же вокруг Cell было так много шума? Ну, два предыдущих чипа состояли из одного универсального ядра и нескольких ядер для конкретных задач (аудио-процессор, декомпрессия изображений). Эти ядра сочетали различные архитектуры, в которых универсальное ядро управляло другими ядрами.

Этот тип архитектуры процессора относят к Гетерогенным вычислениям, и он являлся де-факто выбором для создания машин, которые предназначены для выполнения конкретных задач (в данном случае, игр). Аналог в виде Гомогенных вычислений более преобладает на рынке ПК, где процессоры должны выполнять более широкий круг задач (и все они имеют одинаковый приоритет). Поэтому, в последнем типе может быть несколько ядер одного и того же типа.

Возвращаясь назад к теме, Cell сочетает обе модели: в этом процессоре одно универсальное "главное" ядро и 8 векторных "вспомогательных" ядер. Эти векторные ядра могут принимать различные роли, и при этом они выполняют те предыдущие задачи, которые первоначально решались с помощью гетерогенных конструкций. Поскольку ядра Cell не ограничиваются одним типом задач, то они обеспечивают гибкость гомогенных компьютеров. В целом, данный дизайн не идеален и содержит некоторые компромиссы, но на протяжении этой статьи вы увидите различные проблемы, которые попытается решить Cell, и как ему это удалось.

Взгляд на Cell

Рассказав всю эту историю и теорию, думаю, что мы готовы представить нашего главного героя этого раздела. Это Cell ...

Image
Cell Broadband Engine (вариант для PS3).
Создан IBM для суперкомпьютеров и научных исследований. Зачеркнутый 'SPE' означает, что он отключен (не используется). Другой 'SPE' слева зарезервирован для операционной системы.

... и к концу этого раздела вы будете знать, что делает каждый компонент.

Общая структура

Процессор Cell работает на частоте мощных 3,2 ГГц и состоит из множества компонентов. Итак, для целей этого анализа этот процессор можно разделить на три основные части :

Эта информация будет более подробно позже рассмотрена в статье, поэтому вам пока не нужно запоминать эти имена. Основная цель этого раздела - дать читателю мысленное представление о природе Cell и ознакомить со всеми компонентами, которые мы будем обсуждать в подходящее время.

Как организовано это исследование

Видя предыдущую структуру, мне пришлось организовать её так, чтобы вам не надоело от большого количества информации. Поэтому мы собираемся проанализировать Cell путем изучения каждого его компонента в следующем порядке:

  1. Шина Element Interconnect Bus (EIB), которая соединяет все компоненты.
  2. PowerPC Processing Element (PPE) и его основной элемент PowerPC Processing Unit (PPU).
  3. Какая память общего назначения используется в этой консоли.
  4. Блоки Synergistic Processing Element (SPE) и их основной элемент Synergistic Processing Unit (SPU).
  5. Модель программирования, разработанная для эффективного программирования под Cell.

Учитывая это, давайте приступим к настоящему анализу.

Cell изнутри: Сердце

С момента своего анонса Cell упоминается как сеть на кристалле (Network-on-Chip, NoC) вместо стандартного определения "системы на кристалле" (System-On-Chip, SoC). Это связанно с неортодоксальной шиной данных чипа Element Interconnect Bus (EIB). Мы уже видели насколько требовательными могут быть компоненты процессора, и насколько подвержены система узким местам. Чтобы решить эту проблему в одиннадцатый раз, IBM разработала новый дизайн ... и задокументировала его, используя термины, аналогичные дорожному движению.

Image
Упрощенная схема шины Element Interconnect Bus (EIB).
Каждая стрелка между "рампами" (узлами) представляет собой две однонаправленные шины, поэтому каждый узел подключен к следующему по четырем каналам.

Шина EIB состоит из 20-ти узлов (рампы), каждый из которых соединяет один компонент Cell. Рампы соединены между собой с помощью четырех шин, две из которых работают по часовой стрелке, а другие две - против часовой. Каждая шина (или канал) имеет ширину в 128 бит. При этом вместо того, чтобы повторять топологию с одной шиной (как это делали в Emotion Engine и его предшественник), рампы соединены между собой по топологии "маркерного кольца" (token ring). В ней пакеты данных должны пройти через все соседние узлы, пока они не достигнут места назначения (прямого пути нет). Учитывая, что шина EIB предоставляет четыре канала связи, то для пакетов существуют четыре возможных маршрута (кольца).

Теперь вы можете подумать, в чем смысл маркерного кольца, если данные могут проходить более длинные пути (по сравнению с одной прямой шиной)? Ну, единственная шина очень подвержена перегрузке. Поэтому инженеры шины EIB решили использовать эту топологию, чтобы обеспечить большой объем параллельного трафика (читайте дальше, если хотите узнать, как помогло данное кольцо).

Данные передаются в виде 128-битных пакетов . Каждое кольцо может осуществлять до трех передач одновременно при условии, что пакеты не пересекаются. Шина EIB работает с использованием командных кредитов. Другими словами, всякий раз, когда компоненту нужно начать передачу, он отправляет запрос Data Arbirter, который управляет трафиком внутри колец. После утверждения запроса пакеты вводятся в кольцо и получают "маркер", который арбитр данных использует в качестве метаданных для контроля передачи. Кроме того, некоторые компоненты имеют более высокий приоритет, чем другие, например, компонент Memory Interface Controller (MIC), в котором находится ОЗУ. Наконец, арбитр данных никогда не будет размещать пакеты в кольцах, путь которых длиннее половины кольца.

Каждая рампа участвует в передаче. Она читает адрес назначения пакета, чтобы знать, отправлять ли данные в свой компонент или передать их следующей рампе. Во время каждого тактового цикла рампы могут одновременно принимать и отправлять пакеты размером в 128 бит (16 байт). Итак, если учитывать наличие четырех каналов и частоту шины EIB в 1.6 ГГц (половина частоты Cell), то теоретическая максимальная скорость передачи составляет 16 байт х 2 передачи/такт х 4 кольца х 1.6 ГГц = 204.8 ГБ/с. Конечно, это значение слишком оптимистичное, и есть много других внешних факторов (путь отправления или назначения, состояние шины), определяющих производительность. В любом случае во многих исследовательских работах, выполненных IBM и другими авторами, были получены более реалистичные скорости с использованием практических экспериментов .

Теперь, когда вы увидели, как каждый компонент Cell связан между собой, пришло время рассмотреть первый компонент этого чипа...

Cell изнутри: Лидер

Здесь мы посмотрим на "главную часть" Cell. Это часть чипа, которая отвечает за управление остальной частью. Имя компонента - PowerPC Processing Element (PPE), и и его можно рассматривать как MIPS R5900 в Emotion Engine.

Состав PPE

Помните, как я ранее разделил Cell на разные области? То же самое можно сделать с PPE. IBM использует термин 'элемент' для описания независимой машины , но, оказавшись внутри неё, использует термин 'юнит', чтобы отделить основную схему от интерфейсов, которые взаимодействуют с остальной частью Cell.

Image
Упрощенная схема PowerPC Processing Element (PPE).

Исходя из вышесказанного, PowerPC Processing Element неожиданно состоит из двух частей:

Как вы можете видеть, архитектура PPE (и остального Cell) довольно модульная, что соответствует принципам архитектуры RISC. Вы скоро увидите, что модульность применяется даже внутри PPU.

PowerPC Processing Unit

Сейчас мы рассмотрим внутренности PPU. Напоминаю, мы сначала погрузились в Cell, потом в PPE, а затем в PPU. Мы проанализируем PPU так же, как и любое другое ядро процессора.

Знакомая архитектура

Начнем с того, что PPU не создан с нуля, а cтроится на основе существующей архитектуры PowerPC. Однако, в отличие от предыдущих итераций, когда IBM брала существующий процессор и немного обновляла его для соответствия новым требованиям, PPE не является преемником какого-либо предыдущего дизайна процессора. Вместо этого IBM создала новый процессор, который реализует спецификацию PowerPC версии 2.02 (это последняя спецификация PowerPC перед ребрендингом в 'Power ISA'). Суммируя вышесказанное, можно сказать, что с этого времени вы не найдете такой же дизайн PPU ни в одном существующем чипе того времени. Но он имеет те же машинные коды, что и в других чипах PowerPC.

Тем не менее, почему IBM выбрала архитектуру PowerPC для разработки высокопроизводительного чипа? Всё просто, PowerPC - это зрелая платформа , которая в течение 10 лет тестировалась на пользователях Macintosh и постоянно обновлялась testing and revisioning. Она соответствует всем требованиям Sony, и, если возникнет такая необходимость, её можно адаптировать к различным средам. Последнее, но тем не менее важное: использование хорошо известной архитектуры является благоприятным для существующих компиляторов и кодовых баз, что для новой консоли - большое стартовое преимущество.

Стоит отметить, что IBM была одним из авторов первых чипов PowerPC совместно с Motorola и Apple (вспомните об альянсе AIM). Как бы то ни было, к началу 00-х годов так называемые участники альянса уже работали отдельно, где Motorola/Freescale разрабатывали отличную от IBM серию PowerPC.

Отличительные особенности

PPU имеет общую историю с PowerPC 970 (Apple называла его G5). Оба являются потомками POWER4, предшественника PowerPC, который в основном использовался в рабочих станциях и суперкомпьютерах. Это станет более очевидным, когда я скоро покажу вам модульные исполнительные устройства. Это радикальное изменение по сравнению с процессором линейки 750 в Gamecube, который имел значительный вклад от Motorola, но затем был слегка изменен IBM.

Возвращаясь к теме, PPU - полноценный 64-битный процессор. Это означает, что:

Наконец, PPU реализует набор инструкций PowerPC версии 2.02, включая дополнительные опкоды для вычисления квадратного корня с плавающей точкой . Ядро также было расширено группой SIMD-инструкций, называемых Vector/SIMD Multimedia Extension (VMX). С другой стороны, в первоначальной спецификации нет некоторых элементов, в частности, режима little-endian (Cell работает только в big-endian) и нескольких опкодов.

Строительные блоки PPU

Применяя 'микроскопический' вид к PPU, мы можем видеть, что это устройство состоит из различных блоков или подблоков, выполняющих независимые операции (загрузка значений из памяти, выполнение арифметики и так далее). Возможности PPU определяются тем, что и как может делать каждый блок:

Инструкции

Image
Упрощенная схема блока команд (IU).

Первый блок называется блоком команд (Instruction Unit, IU). Как следует из названия, он берёт инструкции из кэша L2 и даёт сигналы другим устройствам для выполнения запрошенной операции. Как и в современниках i686, часть набора инструкций интерпретируется при помощи микрокода (для этого IU включает в себя небольшой ROM). Наконец, в IU также размещен кэш L1 размером в 32 КБ для инструкций.

Обработка инструкции осуществляется с помощью 12-уровневого конвейера, хотя на практике общее количество уровней будет сильно различаться в зависимости от типа инструкции. Например, модуль предсказания переходов может пропустить большую часть конвейера. Если мы объединим IU с соседними блоками, то финальное число уровней часто приближается к 24 (да, это большое число, но помните, что Cell работает на частоте 3.2 ГГц).

Теперь самое интересное: IU имеет "двойную обработку" (dual-issue): в некоторых случаях IU может обработать до двух инструкций за такт, что значительно повышает пропускную способность. На практике, однако, существует множество условий для того, чтобы это работало, поэтому программисты или компиляторы отвечают за оптимизацию своих процедур, чтобы их последовательность инструкций могла использовать преимущества этой функции. Кстати, двойная обработка реализована и в предыдущих процессорах, и этот термин может различаться между производителями. Поэтому я использовал определение от IBM.

В довершение всего, IU также многопоточный, то есть блок может одновременно выполнять две разные последовательности инструкций (называемых "потоками"). За кулисами, IU просто чередуется между двумя потоками за такт, создавая иллюзию многопоточности. Эта техника исторически известна как одновременная многопоточность (SMT) или, как её позже назвала Intel, гиперпоточность (hyper-threading). Тем не менее, многопоточность от IBM смягчает нежелательные эффекты, такие как остановка конвейера, поскольку процессор больше не будет блокироваться всякий раз, когда одна инструкция блокирует поток. Чтобы достичь многопоточности, инженеры IBM продублировали внутренние ресурсы IU, включая регистры общего назначения (ранее я говорил, что регистров 32, но это для одного потока. В реальности их всего 64!). Однако ресурсы, которые не относятся спецификации PowerPC (например, кэш L1 или L2, интерфейсы), по-прежнему общие для потоков. Таким образом, ресурсы - однопоточные.

В общем, объединяя два потока с двойной обработкой, IU способен выполнять до четырех инструкций за такт. Несмотря на то, что это "наилучший сценарий", он все ещё предоставляет возможности оптимизации, которые пользователи в конечном итоге заметят в частоте кадров игры!

Управление памятью

Image
Упрощенная диаграмма блока загрузки-сохранения (Load-Store Unit, LSU) и его соседей.

Следующие блоки дают PPU возможность выполнения инструкций загрузки/сохранения и осуществлять управление памятью.

Начнем с того, что блок загрузки/сохранения (Load-Store Unit, LSU) выполняет опкоды "load" и "store", используя 32 КБ кэша данных L1. Как следствие, этот блок имеет прямой доступ к памяти и регистрам.

Кроме того, LSU содержит Memory Management Unit (MMU), который встречается повсеместно в современном оборудовании. Проще говоря, MMU обрабатывает адресацию памяти, используя виртуальную карту адресов в сочетании с защитой памяти. Для улучшения последней MMU, в частности, оснащен сегментным блоком, который группирует адреса памяти, используя диапазоны под названием "сегменты". Также, что предотвратить снижение производительности в процессе работы, были включены Translation Lookaside Buffer (TLB) (кэширует преобразованные адреса) и Segment Lookaside Buffer (SLB) (кэширует сегменты).

Арифметика

Image
Упрощенная диаграмма блоков, выполняющих арифметику.

Осталось объяснить всего два блока PPU, которые вычисляют математику, необходимую для любой игры.

Первый блок - традиционное АЛУ Fixed-Point Integer Unit (FXU). Оно осуществляет целочисленные вычисления: деление, умножение, циклический сдвиг (схоже с обычным сдвигом, только уходящие биты возвращаются с конца) и нахождение ненулевого бита (например, оно полезно для нормализации координат вершины). Его конвейер длиной в 11 уровней.

Если вы посмотрите на диаграмму, вы увидите, что FXU, LSU и MMU объединены в один блок под названием исполнительный блок (Execution Unit, XU). Это потому, что они имеют один и тот же регистровый файл.

Второй блок куда более интересный. Vector/Scalar Unit (VSU) выполняет операции с числами с плавающей точкой и векторами. Он состоит из 64-битного блока FPU (на основе стандарта IEEE 754) и блока Vector/SIMD Multimedia Extension (VXU), который исполняет набор SIMD-инструкций под названием VMX. Блок VXU работает со 128-битными векторами, состоящими от шестнадцати 8-битных значений до четырёх 32-битных . Возможно, вы уже слышали об расширении "VMX" раньше. Оно также называется "AltiVec" у Motorola или "Velocity Engine" у Apple (да здравствуют торговые марки). И наоборот, конкурентные возможности SIMD в Cell можно найти и в другом процессоре, так что пока не расслабляйтесь!

Суммируя PPE

Вы увидели как работает и из чего сделан PPE, но что это всё значит для разработчиков?

В конце концов, PowerPC Processing Element - единственный процессор общего назначения на чипе. Но есть одно но: он не должен работать в одиночку. Помните ту широкую главную шину (EIB)? IBM разработала PPE так, чтобы инженеры могли совмещать его с другими процессорами для ускорения конкретных задач (т.е. высокопроизводительные вычисления, 3D-графику, научные симуляции, работа с сетями, обработка видео). Так как эта статья о PlayStation 3, то вы увидите, что остальная часть Cell отвечает за обработку графики и физики, поэтому в дальнейшем мы будем описывать эту часть.

Cell снаружи: Основная память

Давайте немного уйдем в сторону от Cell. Не важно, насколько хорош PPE, если у нас нет подходящего рабочего пространства (памяти) для его работы.

Поэтому Sony добавила ОЗУ в виде XDR DRAM памяти объемом 256 МБ... Но опять-таки, что это всё значит? Чтобы ответить на это, нам нужно взглянуть на то, как работают блоки памяти и как они подключаются к Cell.

Image
Cell рядом с четырьмя чипами XDR DRAM на 64 МБ.

Прежде всего, тип установленной памяти называется Extreme Data Rate (XDR). Вы могли увидеть в XDR DRAM наследника неудачного RDRAM, используемого в Nintendo 64 и PlayStation 2. Но пока не спешите с выводами!

Rambus, как и любая другая компания, совершенствует свои изобретения. Их третья версия (XDR) теперь передает за такт 8 бит (это в 4 раза больше, чем у DDR DRAM) . Задержка больше не создает проблем. Если мы посмотрим на данные одного из производителей, то задержка XDR составляет от 28 до 36 нс , что почти в 10 раз быстрее, чем первое поколение чипов RDRAM.

Первая ревизия материнской платы PlayStation 3 содержит 4 чипа по 64 МБ, которые объединены в пары. XDR подключен к Cell, используя две 32-битных шины, по одной на каждую пару. Поэтому когда PPU записывает слово (64-битные данные), оно разделяется между двумя чипами XDR. Эти чипы работают на частоте 400 МГц .

Image
Диаграмма архитектуры памяти Cell.

Cell соединяется с чипами XDR при помощи Memory Interface Controller (MIC), другой компонент внутри Cell (как и PPE). Дополнительно, MIC буферизирует передачи памяти для улучшения пропускной способности, но имеет одно ограничение: выравнивание больших байтов. По сути, при передаче наименьший размер данных MIC составляет 128 байт, что хорошо работает для последовательного чтения и записи. Но если данные меньше, чем 128 байт, или требуется чередование между записью и чтением, то возникают проблемы с производительностью.

Тем не менее, является ли MIC узким местом или нет? Вы должны взглянуть на это в перспективе того, что оптимизация пропускной способности имеет решающее значение в системах, которые зависят от данных. В прошлом мы видели такие решения, как write-gather pipe или write back buffer. Поэтому MIC - просто новое предложение по решению повторяющейся проблемы. Как бы то ни было, Sony утверждает, что скорость передачи данных составляет 25.6 ГБ/с. Однако на практике существует слишком много факторов, которые будут определять конечную скорость (вы видели, насколько сложно перемещать данные из одного места в другое в Cell).

Это все, что касается ОЗУ, но есть ещё больше памяти в другом месте: жесткий диск. PS3 позволяет играм использовать 2 ГБ на внутреннем жестком диске в качестве рабочей области (аналогично тому, что было в первом Xbox) .

Cell изнутри: Помощники

Мы уже видели ранее, что Sony всегда добавляет к процессору общего назначения (в данном случае, PPE) дополнительные ускорители для достижения приемлемой производительности в играх (блоки VPU и IPU в случае с PS2; или GTE и MDEC с PS1). Это обычная практика для аппаратного обеспечения игровых консолей, поскольку универсальный процессор может выполнять широкий спектр задач, при этом ни на чем не специализируясь. Консолям требуется лишь некоторый набор навыков (например, физика, графика и аудио), поэтому сопроцессоры позволяют им справляться с этими задачами.

[PPE] - это версия, которую урезали для снижения энергопотребления. Поэтому у неё нет тех лошадиных сил, как, например, у Pentium 4 (...) Если взять код, который работает сейчас на Intel и AMD, независимо от мощности, и перекомпилировать его для Cell, то он будет работать - ну, может вам придется изменить одну, две библиотеки. Но полученный код будет примерно на 50-60% медленнее, и люди будут кричать: "Боже мой! Этот процессор Cell ужасен!" Но это потому, что вы используете только одну его часть .

- Доктор Майкл Перроне, менеджер Отдела по разработке Cell, Исследовательский Центр IBM TJ Watson

Ускорители, входящие в состав Cell на PS3, это элементы Synergistic Processor Element (SPE). В Cell их восемь, однако один элемент отключается во время запуска консоли. Это связано с тем, что производство микросхем требует исключительной точности (изначально Cell создавался при техпроцессе в 90 нм), а оборудование не является совершенным. Поэтому вместо того, чтобы выбрасывать схемы, которые оказались бракованными менее чем на 10%, Cell включает один запасной SPE. Таким образом, если один из них выходит из строя, весь чип не отбраковывается. Теперь этот запасной SPE всегда будет отключен, независимо от того, хорошо ли это или нет (у Sony не может быть двух PS3 с разными версиями процессора на рынке).

Состав SPE

Двигаясь дальше, Synergistic Processor Element (SPE) - крошечный независимый компьютер внутри Cell, управляемый PPE. Помните, что я рассказывал ранее о принятии элементов из гомогенных вычислений? Что ж, эти сопроцессоры в некоторой степени универсальны и не ограничиваются одним приложением, поэтому они смогут помогать в решении широкого круга задач, то есть до тех пор, пока разработчики смогут их правильно запрограммировать.

Image
Упрощенная диаграмма Synergistic Processor Element (SPE), в Cell этих элементов 8 (один отключен).

Как и в случае с PPE, мы рассмотрим SPE поподробнее. Это будет кратко, поэтому, если в конце вы захотите узнать больше о SPE, ознакомьтесь с разделом "Источники" в конце статьи. Итак, давайте начнем...

SPE - это процессор, который похож структурно на PPE, состоит из 2 частей:

Memory Flow Controller

Memory Flow Controller (MFC) - это блок, который находится между ядром и остальной частью Cell. Он является аналогом PowerPC Processor Storage Subsystem (PPSS) в PPE. Основная задача MFC - перемещать данные между локальной памятью SPU и основной памятью Cell, а также синхронизировать SPU со его соседями.

Для выполнения своих обязанностей MFC содержит в себе контроллер DMA, чтобы поддерживать связь между шиной EIB и локальной памятью SPU. Кроме того, MFC содержит другой компонент под названием Synergistic Bus Interface (SBI), который находится между шиной EIB и контроллером DMA. Это довольно сложная схема для обобщения, но она в основном интерпретирует команды и данные, полученные извне, и подает сигналы внутренним блокам SPE. Будучи входной дверью для Cell, SBI работает в двух режимах: ведущая шина (где SPE адаптирован для запросов данных снаружи) и ведомая шина (где SPE настроен на прием запросов извне).

Любопытный факт: если учитывать ограничение пакетов EIB (длиной до 128 бит), то в MFC блок DMA может перемещать только до 16 КБ данных за такт, иначе EIB вызовет исключение "Bus Error" во время выполнения .

Synergistic Processor Unit

Блок Synergistic Processor Unit (SPU) - это часть SPE, в котором находится основной процессор, аналогично "PPU" в PPE.

В отличии от PPU, SPU изолирован от остальной части Cell. Следовательно, между PPU или другими блоками SPU нет общей памяти. Вместо этого SPU содержит локальную память, используемую в качестве рабочей области. Однако, содержимое локальной памяти можно перемещать туда и обратно с помощью MFC.

Что касается функциональности, то SPU гораздо более ограничены, чем PPU. Например, SPU не включает в себя никаких функций управления памятью (трансляция адресов или защита памяти) и даже самых современных функций (динамическое предсказание переходов). Тем не менее, он исключительно хорошо выполняет векторные вычисления.

Для программирования этого блока разработчики используют PPU для вызова процедур, предоставляемых ОС PlayStation 3. Эти процедуры загружают исполняемый файл, специально написанный для SPU, в выбранный SPU и дают ему сигнал начать выполнение. После этого PPU сохраняет ссылку на поток SPU для дальнейшей синхронизации .

Архитектура SPU

Как и любой процессор, Synergistic Processor Unit (SPU) имеет собственную архитектуру набора команд (ISA). Оба SPU и PPU следуют методологии RISC, однако, в отличии от PPU (который реализует архитектуру PowerPC), архитектура SPU - проприетарная и в основном состоит из инструкций SIMD-типа. В результате, в SPU есть 128 128-битных регистров общего назначения, которые хранят вектора из 32/16-битных целочисленных чисел или чисел с плавающей точкой. С другой стороны, чтобы сэкономить память, инструкции SPU маленькие, длиной 32 бита. Первая часть содержит код операции, а остальные могут ссылаться на три операнда, которые вычисляются параллельно.

Это очень похоже на предыдущий блок Vector Floating Point Unit из PS2, но с тех пор многое что изменилось. Например, SPU не требует, чтобы разработчики изучали новый проприетарный язык ассемблера. IBM и Sony предоставляли инструментарий для программирования на SPU, используя C, C++ или ассемблер.

В плане архитектуры этот процессор не выполняет все инструкции, используя один и тот же блок. Вместо этого выполнение делится на две части или "конвейер исполнения", один из которых называется Нечётный конвейер, а другой - Чётный конвейер. Эти два конвейера выполняют различные типы инструкций, позволяя SPU обрабатывать две инструкции за такт когда это возможно. С другой стороны, SPU никогда не будет работать с двумя инструкциями, которые зависят друг от друга, и, таким образом, смягчая потенциально возможные конфликты данных.

Давайте теперь посмотрим на два конвейера :

Нечётный конвейер

Image
Упрощенная схема нечетного конвейера.

Нечетный конвейер выполняет большинство инструкций, кроме арифметических.

Прежде всего, вы найдете в SPU блок загрузки/сохранения (SLS), который делает три важные вещи:

Обратите внимание, что для хранения программы доступно только 256 КБ. Учитывая, что программы SPU могут быть скомпилированы с помощью C/C++, трудно предсказать, насколько велики будут бинарные файлы. По этой причине рекомендуется, чтобы разработчики думали, что имеется только половина доступной памяти (128 КБ) . Это оставляет достаточно места, чтобы скомпилированный код занимал столько места, сколько ему нужно, хотя это и происходит за счет хранилища и эффективности.

Наконец, есть также блок SPU Channel and DMA Transport (SCC), который контроллер Memory Flow использует для заполнения и/или получения локальной памяти, и хилый блок Fixed-Point Unit, который умеет только перемешивать и поворачивать вектора.

Чётный конвейер

Image
Упрощенная схема четного конвейера.

Четный конвейер отличается своими арифметическими возможностями.

Здесь мы находим настоящий блок Fixed-point Unit (FXU), который выполняет основные арифметические, логические операции (И, ИЛИ и другие), битовые сдвиги.

И последнее, но не менее важное: есть блок Floating-point Unit (FPU), который выполняет операции с числами одинарной точности (32-битные float), двойной точности (64-битные double), а также с целыми числами (32-битные int). Это соответствует стандарту IEEE с некоторыми отклонениями (значения float ведут себя аналогично в PS2).

Cell изнутри: Стили программирования

Поскольку мы дошли до конца Cell, вы можете спросить - как разработчики должны работать с этим монстром? Аналогично предыдущим моделям программирования, разработанным для Emotion Engine, IBM предложила следующие методологии :

Подходы, ориентированные вокруг PPE

Image
Представление многоуровневого подхода: PPE назначает задачу, затем она передается по каждому SPE и в конце возвращается с обработанными данными.

Image
Представление параллельного подхода: PPE назначает подзадачи каждому SPE, а те в свою очередь возвращают обработанные данные, которые потом PPE объединяет.

Image
Представление сервисного подхода: PPE распределяет различные задачи каждому SPE, который затем индивидуально работает с ней.

Подходы, ориентированные вокруг PPE, представляют собой набор паттернов программирования, которые возлагают основные обязанности на PPE и оставляют SPE для разгрузки. Есть три возможных паттерна:

Подходы, ориентированные вокруг SPE

Image
Представление подхода, ориентированного вокруг SPE. Каждый SPE отвечает за свою функциональность и взаимодействует с PPE только, чтобы получить ресурсы.

Вместо того, чтобы использовать блоки SPE для обслуживания PPE, есть другой подход. Используя внутренний DMA, блоки SPE получают и выполняют задачи, хранящиеся в основной памяти, в то время как PPE ограничивается управлением ресурсами.

Эта модель гораздо более радикальна, чем остальные, в том смысле, что предыдущие модели ближе к традиционным и похожи на парадигму "универсальный процессор со сопроцессорами", применяемую в ПК. Поэтому кодовые базы, реализующие алгоритмы вокруг SPE, может быть сложнее перенести на другие платформы.

Вывод

Как вы можете себе представить, в то время как многоядерная архитектура Cell ускоряет появление новых технологий, таких как процедурная генерация, ни одна из этих архитектур не особо проста в реализации. Также нужно учитывать, что игровые студии предпочитают такие кодовые базы, которые могут быть общими для разных платформ.

Для примера, разработчики движка Unreal Engine 3 (Epic Games) демонстрировали ограничения SPU, пытаясь реализовать свою систему обнаружения коллизий . Их реализация опирается на двоичном разбиении пространства (Binary Space Partitioning, BSP), алгоритм, который сильно зависит от сравнений (ветвлений). Поскольку блоки SPU не обеспечивают динамические предсказания переходов, как PPU, их реализация разочаровала пользователей PlayStation 3 по сравнению с другими платформами (например, Xbox 360 или i686 ПК, которые обеспечивают стабильные методы предсказания на всех своих ядрах). Следовательно, Epic Games пришлось прибегать к дальнейшим оптимизациям, совместимыми только с Cell.

Я полагаю, что для разработчиков ПО полностью раскрыть потенциал Cell - это вопрос времени, терпения и большого объема знаний. Однако история показала, что это возможно не для каждой студии. Это заставляет меня задуматься, не в этом ли причина того, нынешнее железо консолей (по состоянию на 2021 год) так сильно гомогенизировалось.


Previous: 2. Краткое введение

Next: 4. Графика


Rodrigo Copetti © 2026 RSS Feed

Переключиться на современную версию

Домашняя страница · Статьи · Поддержка · Об авторе · О сайте