Что связано с программированием для Cell Cell Processor?

Как программирование для Cell Processor на PS3 отличается от программирования для любого другого процессора, найденного на обычном рабочем столе?

Какие программные парадигмы, методы и методы используются для полного использования потенциала Cell-процессоров?

Все статьи, которые я слышал о развитии PS3, обсуждают: "Обучение программированию на Cell Processor". Что это действительно означает, что вы не размахиваете рукой?

Ответ 1

В дополнение ко всему, что упоминает Джордж, SPU действительно лучше воспринимают как потоковые векторные процессоры. Они работают лучше всего, когда у вас есть алгоритм, который работает с длинными последовательностями числовых данных, которые могут быть переданы через ограниченную память SPU через DMA, вместо того, чтобы загрузить SPU кусок памяти, попытаться работать на нем, найти, что ему нужно следовать указателю куда-нибудь за пределами его памяти, загружать, продолжать, находить другой и т.д.

Итак, программирование для них - не простая модель concurrency и потоков; это больше похоже на высокопроизводительное численное или научное вычисление. Это также неравномерный доступ к памяти, сделанный до крайности.

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

Для конкретных примеров ознакомьтесь с блоком Mike Acton CellPerformance. Майк - моя любимая старая школьная сборка - счастливый перфекционист в бизнесе, и он действительно заработал свои отбивные по этому вопросу.

Ответ 2

Сотовая часть PS3 состоит из 6 процессоров SPU. Каждый из них имеет 256 КБ не разделяемой памяти и подключается через высокоскоростное кольцо, которое позволяет DMA между собой и хост-процессором PowerPC. Они не конвейерны или не кэшированы. Это существенно отличается от многоядерного x86 с общей памятью, конвейерной обработки и кэширования. Кроме того, процессоры SPU не используют тот же набор команд, что и PowerPC, поэтому у вас есть некоторая асимметрия.

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

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

Ответ 3

Полностью согласен с Джорджем Филипсом и Crashworks. Единственное, что я добавил бы, это то, что программирование SPU в основном связано с управлением работой. Чтобы получить максимальную отдачу от SPU, вам нужно, чтобы они отслеживали и возвращали результаты. Нет никакого смысла в том, чтобы один SPU пережевывал какую-то сложную пост-обработку, если вам нужно сидеть и ждать результатов для фрейма, а остальные ваши SPU сидят без дела. Поэтому, как вы распределяете свои задания, требуется много размышлений, и это сильно влияет на то, как вы разбиваете свои данные.

Ответ 4

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

Хорошо, что вам нужно иметь дело с SPUs...

  • Атомные операции (стиль блокировки без попытки блокировки).
  • Сильное различие между областями памяти. Вы должны знать, какой указатель указывает на какую область памяти или вы повесите все.
  • Отсутствие аппаратного различия между данными и кодом. Это на самом деле забавно, вы можете настроить динамическую загрузку кода и, в сущности, подпрограммы потока входить и выходить. Самомодифицирующий код возможен, но не обязательно практичен в SPU.
  • Отсутствие аппаратных средств для отладки.
  • Ограниченный размер памяти.
  • Быстрый доступ к памяти.
  • Набор команд настроен на операции SIMD.
  • Плавающая точка "gotchas".

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

Я думаю, когда люди используют фразу "научиться программировать ячейку", они в основном размахивают рукой. Вы можете изучить основы в течение недели, задача заключается в попытке применить это знание к реальному коду... который часто уже существует и не находится в форме, хорошо подходящей для использования в SPU.