Процессор CELL



ОБЩАЯ ИНФОРМАЦИЯ

История разработки

Разработка процессора CELL была начата в 2001 году альянсом Sony, Toshiba, IBM (альянсом STI). Работы велись более чем 400 инженерами трех компаний. За основу была взята архитектура IBM POWER4. Разработка дизайна была по большей части завершена в 2002 году. В 2003 году была лицензирована технология быстрой памяти у Rambus. Первым коммерческим применением процессора CELL стала игровая консоль Sony Playstation 3, коммерческие продажи которой начались в 2005 году.

Оригинальный процессор CELL изготовлялся по 90 нм техпроцессу. В 2006 году состоялся переход на 65 нм техпроцесс. В 2008 году появился вариант процессора PowerXCell 8i. Его основной особенностью стало заметное повышение производительности в вычислениях с двойной точностью: около 100 Гфлопс против 14 в более ранних моделях. Первым применением PowerXCell 8i стал суперкомпьютер IBM RoadRunnder. Также в 2008 году IBM анонсировало 45 нм версию процессора CELL.

Характеристики

Здесь приводится таблица характеристик процессора CELL PowerXCell 8i. Значения терминов см. в разделе "Архитектура".

Техпроцесс 65 нм, 45 нм (после 2008)
Тактовая частота 3.2 ГГц
ППЭ (основной процессор) PowerPC Element, 2 ядра
Кэш 1-ого уровня ППЭ 32 КБ код, 32 КБ данных
Кэш 2-ого уровня ППЭ 512 КБ
Количество СПЭ 8
Локальная память СПЭ 256 КБ на ядро (кэша нет)
Пиковая производительность одного СПЭ на операциях одинарной точности 25.6 Гфлопс
Пиковая производительность одного СПЭ на операциях двойной точности (PowerXCell 8i) 12.8 Гфлопс
Пиковая производительность CELL на операциях одинарной точности 204.8 Гфлопс
Пиковая производительность CELL на операциях двойной точности 102.4 Гфлопс
Регистровый файл СПЭ 128 регистров по 128 бит
Пропускная способность внутренней шины 204.8 ГБ/сек
Пропускная способность контроллера памяти 25.6 ГБ/сек

Ссылки

http://www.ibm.com/developerworks/power/cell/ - страничка CELL на сайте IBM. Доступны документация, средства разработки и примеры использования.

http://en.wikipedia.org/wiki/Cell_processor - информация о CELL в Wikipedia.


АРХИТЕКТУРА

Изначально разработчики процессора CELL ориентировались на достаточно широкий класс приложений и создавали не отдельный процессор, а масштабируемое семейство процессоров. Это семейство архитектур называется CELL Broadband Engine Architecture, сокращенно CELL BE. Различные модели семейства отличаются прежде всего количеством вычислительных ядер. В зависимости от задачи, также могли изменяться тактовая частота, пропускная способность шины, могли добавляться или исчезать отдельные компоненты. Наиболее известны и распространены процессор IBM CELL, а также его модификация PowerXCell. Ниже дается описание архитектуры этих процессоров.

Архитектура процессора CELL

На рисунке приведена общая схема архитектуры процессора CELL. Сам процессор состоит из набора главных и вспомогательных ядер. Главные ядра в основном выполняют управляющую функцию, хотя могут использоваться и для вычислений. Вспомогательные ядра выполняют только вычисления.

В роли главных ядер выступает PowerPC Processing Element (PPE, ППЭ - калька с английского). Он представляет собой двухпоточный процессор с архитектурой IBM POWER Architecture. Если CELL используется в качестве центрального процессора, то на ППЭ исполняются основные функции ОС, а также основной код пользовательских приложений. Архитектура команд ППЭ, помимо команд IBM Power Architecture, содержит инструкции для взаимодействия с другими компонентами процессора.

Архитектура СПЭ

В роли вычислительных ядер выступают синергические процессорные элементы (СПЭ, англ. Synergistic Processing Element, SPE). Каждый СПЭ состоит из синергического процессорного устройства(СПУ, англ. Synergistic Processing Unit, SPU) и контроллера потока памяти(КПП, англ. Memory Flow Controller, MFC).

СПУ представляет собой RISC-процессор, специально оптимизированный для высокопроизводительных вычислений. Он имеет 128 регистров общего назначения по 128 бит каждый. Содержимое одного регистра может трактоваться как набор целых чисел по 8, 16, 32 или 64 бита в каждом, четверка чисел с одинарной точностью или два числа с двойной точностью. Система команд поддерживает работу как с одним элементом, так и со всеми элементами регистра одновременно. Помимо арифметических и логических команд, имеются быстрые команды вычисления элементарных функций. СПУ может выдавать по 2 команды за такт, таким образом, производительность СПУ на вычислениях с одинарной точностью на обычной для CELL частоте 3.2 ГГц составляет 25.6 Гфлопс. Скорость работы на командах двойной точности в 2 раза ниже. Операции могут выполняться только с операндами на регистрах.

Помимо регистрового файла, каждый СПУ имеет в своем распоряжении 256 КБ локальной памяти (ЛП). Локальная память является явно адресуемой и доступна СПУ целиком. Время обращения к локальной памяти составляет один такт. Очевидно, что грамотное использование ЛП может значительно ускорить работу приложений.

СПУ не может напрямую обращаться к ОЗУ. Проблема дисбаланса скорости работы ЦП и ОЗУ возникает во всех архитектурах, однако в CELL она стоит еще более остро в связи с высокой производительностью СПУ. Поэтому работой с ОЗУ занимается КПП. КПП является вспомогательным процессором и работает асинхронно с СПУ. КПП имеет очередь запросов к памяти и обращается к контроллеру интерфейса памяти или интерфейсу CELL Broadband Engine для работы с ОЗУ. КПП может выполнять пересылки данных блоками до 16 КБ, а также осуществлять пересылку списка порций. Поддерживается синхронизация доступа к ОЗУ. КПП также выполняет функции трансляции адресов и защиты памяти. В случае блочной пересылки данных трансляция адреса выполняется один раз на страницу, а не на машинное слово. Это отдельно отмечено в одном из патентов IBM и позволяет снизить энергопотребление. КПП также отвечает за взаимодействие СПЭ между собой и с ППЭ.

Все элементы процессора CELL соединены внутренней шиной соединения элементов (англ. Element Interconnection Bus, EIB). Ее максимальная пропускная способность составляет 204 ГБ/сек.


ПРОГРАММИРОВАНИЕ

Расшинерия С/C++ и загрузка приложений

Основными программируемыми компонентами CELL являются ППЭ и СПЭ. Поскольку ППЭ является полноценным процессором с архитектурой IBM POWER Architecture, его можно программировать при помощи инструментов для этой архитектуры. Основной задачей является программирование СПЭ и взаимодействие ППЭ и СПЭ.

Несмотря на то что набор команд СПЭ похож на набор векторных команд ППЭ, бинарная совместимость между ними отсутствует. Это означает, что исполняемый файл для СПЭ требуется создавать отдельно. Для создания таких файлов может использоваться компилятор XL C/C++ или XL Fortran от компании IBM. При этом исходный код для ППЭ и СПЭ может быть одинаковым, а создание различных исполняемых файлов поддерживаются различными ключами компиляции.

Для поддержки программирования CELL принято достаточно стандартное решение о расширении языка C/C++ набором типов и встроенных процедур (intrinsic), специфичных для процессора CELL. Для типов введен дополнительный квалификатор vector. Его использование с одним из стандартных типов означает структуру данных, в которой элемент этого типа повторен столько раз, сколько он помещается в 128-битный регистр. Например, vector int означает четверку целых чисел, а vector double - два вещественных числа с двойной точностью. При расположении в памяти данные этих типов автоматически выравниваются по 16-байтной границе, что требуется в спецификации операций с ОЗУ CELL. Встроенные процедуры определяют арифметические и логические операции с типами vector T, а также последовательности команд для взаимодействия с КПП и общения с другими СПЭ. Имеются как встроенные процедуры, работающие только на СПЭ, так и встроенные процедуры, работающие на СПЭ и ППЭ. Последние носят название VMX расширений (VMX Extensions) и предназначены для облегчения написания кода, переносимого между СПЭ и ППЭ. Кроме того, они позволяют последовательно адаптировать приложения для CELL, сначала создавая оптимальный код для ППЭ, а потом адаптируя его для СПЭ. Подробнее о новых типах и встроенных процедурах можно посмотреть здесь.

С точки зрения ОС, потоки СПЭ трактуются как обычные потоки, и для управления ими можно использовать средства управления, доступные для обычных потоков, например, библиотеку POSIX Threads. Чтобы запустить поток на СПЭ, требуется сначала создать обычный поток, например, при помощи pthread_create( ). Далее для создания потоков на СПЭ используются 3 процедуры CELL BE SDK:

  • Процедура spe_context_create( ) создает контекст исполнения для СПЭ.
  • Процедура spe_program_load( ) загружает программу для исполнения на СПЭ.
  • Процедура spe_context_run( ) запускает контекст СПЭ в текущем потоке. При этом текущий поток переходит в состояние исполнения на СПЭ, и начинает исполнять программу для СПЭ. При завершении исполнения программы на СПЭ поток продолжает выполнение на ППЭ.

    Более подробно об управлении потоками на CELL можно посмотреть здесь.

    Модели программирования

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

    Модели, в которых главным элементом является ППЭ, можно разделить на:

  • Конвейерную
  • Параллельную
  • Сервисную
  • Гибридную
    Пример приложения с сервисной моделью

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

    В гибридной модели могут сочетаться особенности других моделей. Например, конвейер может состоять из двух ступеней, на одной из которых работает два, а на другой - четыре СПЭ.

    Средства программирования

    Основным инструментом программирования CELL является IBM SDK for Multicore Acceleration. О процессе установки SDK можно почитать здесь. В состав SDK входят:

  • Компиляторы GNU C/C++ и IBM XL C/C++/Fortran с поддержкой компиляции для CELL
  • Отладчики и профилировщики
  • Интеграция в среду разработки Eclipse
  • Реализации библиотек BLAS, FFT и генерации случайных чисел Монте-Карло для CELL
  • Примеры исходного кода

    Помимо этого, доступен эмулятор процессора CELL, позволяющий разрабатывать простые приложения в отсутствие самого процессора. Эмулятор доступен здесь .


    ПРИМЕНЕНИЕ

    http://www.us.playstation.com/PS3/About - Игровая консоль Sony Playstation 3, первое коммерческое применение процессора CELL.

    http://www.mc.com/products/productdetail.aspx? id=11610&ProductTypeFolder=56 - ускорители компании Mercury на основе процессоров CELL.

    http://www.mc.com/products/productdetail.aspx? id=10235&ProductTypeFolder=56 - сервера компании Mercury на основе процессоров CELL.

    http://parallel.ru/computers/reviews/RoadRunner.html - CELL в суперкомпьютере IBM RoadRunner, первом суперкомпьютере, достигшем производительности в 1 ПФлопс.

    http://www-03.ibm.com/systems/bladecenter/hardware/servers/ qs22/index.html - серверы IBM на основе процессора CELL.