Процессор Cell Киреев Сергей ИВМиМГ
План Общая информация о процессоре Cell Архитектура процессора Cell Программирование процессора Cell Реализации систем на базе Cell
История Cell IBM, SCEI/Sony, Toshiba Alliance formed in 2000 Austin-based Design Center opened in March 2001 Single CellBE operational Spring way SMP operational Summer 2004 February 7, 2005: First technical disclosures October 6, 2005: Mercury announces Cell Blade November 9, 2005: Open source SDK & simulator published November 14, 2005: Mercury announces Turismo Cell offering February 8, 2006: IBM announced Cell Blade
Время Punch Cards Green Screen/ Teletype Spreadsheet WWW Gaming Main Frame Multitasking Main Frame Batch Client/Server Internet Mini-Computer WYSIWYG Stand Alone PC Windows Word Processing Уровень взаимодействия Immersive Interaction Online Gaming Source: J.A. Kahle Предпосылки архитектуры Cell Эволюция пользовательского интерфейса Cell
Преодоление барьеров производительности Power Wall – барьер мощности, Memory Wall – барьер памяти, Frequency Wall – барьер частоты. Предпосылки архитектуры Cell
Характеристики процессора Cell Cell – многоядерный микропроцессор, содержащий ядра различных типов: 1 PPE – Power Processor Element 8 SPE – Synergistic Processor Element Cell – это не набор различных процессоров, а согласованное целое: Согласованные принципы функционирования, форматы и семантика данных, Используется общая модель памяти. Cell – специально создавался для работы на высоких частотах (более 4 ГГц) Фиксированная частота: 3.2 ГГц
Структура процессора Cell SPE – Synergistic Processor Element PPE – Power Processor Element
План Общая информация о процессоре Cell Архитектура процессора Cell Программирование процессора Cell Реализации систем на базе Cell
Power Processor Element PPE исполняет код операционной системы и управляет заданиями 64-битная архитектура Power с расширением VMX Упорядоченное исполнение (in-order) Аппаратная поддержка 2-х параллельных потоков Кэш-память: 32 KB L1 code, 32 KB L1 data, 512 KB L2 общий
Synergistic Processor Element SPE обеспечивает вычислительную мощность До 2-х 128-битных SIMD команд за такт Большие ресурсы памяти: битных регистров, 256 KB локальной памяти DMA – асинхронный доступ в общую память: до 16 одновременных запросов
Характеристики SPE Организация по типу RISC Фиксированные 32-битные инструкции Простая структура – общий регистровый файл Нет поддержки системных функций SIMD-архитектура: большой набор векторных операций 8,16,32-битные целочисленные 32,64-битные вещественные Два исполнительных конвейера Общий регистровый файл 128 регистров по 128 бит (16 байт) 256 KB локальной памяти Общая для кода и данных 16 B/такт для чтения/записи регистров 128 B/такт для передач DMA
Element Interconnect Bus Обмен данными для внутренних коммуникаций Четыре 16-байтных кольцевых канала с поддержкой нескольких одновременных передач 96 B/такт пиковая пропускная способность До 100 одновременных запросов
Пример восьми одновременных транзакций на Element Interconnect Bus
Интерфейсы памяти и ввода-вывода Двойной контроллер памяти XDR (25.6 GB/s) Два конфигурируемых интерфейса Конфигурируемое число байт на канал Когерентность Позволяет создавать системы различных конфигураций
Предпосылки архитектуры Cell Преодоление барьеров производительности Power Wall. Увеличение эффективности затрачиваемой энергии за счет разделения функций: Процессор, оптимизированный для работы операционной системы и кода со сложным управлением. Процессор, оптимизированный для выполнения приложений с интенсивными вычислениями. Memory Wall. Уменьшение влияния задержек памяти за счет: 3-х уровневая структура памяти (основная память, локальная память SPE, большой регистровый файл SPE). Асинхронная передача между основной и локальной памятью. Frequency Wall. Достижение высоких частот благодаря специализации процессоров под решение конкретных задач.
Пиковая производительность
План Общая информация о процессоре Cell Архитектура процессора Cell Программирование процессора Cell Уровни параллелизма Взаимодействие ядер Программирование SPE Реализации систем на базе Cell
Программирование процессора Cell Два уровня параллелизма: 1.Независимые задачи, которые могут быть выполнены параллельно: 2 аппаратных потока PPE 8 программ SPE 2.Регулярные векторные данные, обработка которых может быть векторизована: SPE SIMD PPE VMX
Модели параллельного программирования Параллелизм по данным Параллелизм задач Конвейер (параллелизм задач) SPE PPE Основная память SPE PPE Основная память
Программа «Hello, World!» Программа для PPE #include extern spe_program_handle_t spu_hello; int main () { unsigned int entry = SPE_DEFAULT_ENTRY; spe_context_ptr_t spe; spe = spe_context_create (0, NULL); spe_program_load (spe, &spu_hello); spe_context_run (spe, &entry, 0, (void *)10, (void *)20, NULL); spe_context_destroy (spe); return 0; } Программа для SPE #include int main (unsigned long long spe, unsigned long long argp, unsigned long long envp) { printf("Hello, World! (%llu,%llu)\n", argp, envp); return 0; }
Программа «Hello, World!» Программа для PPE многопоточная #include #define NTHREADS 40 extern spe_program_handle_t spu_hello; void *thread_func (void *data) { unsigned int entry = SPE_DEFAULT_ENTRY; spe_context_ptr_t spe; spe = spe_context_create (0,NULL); spe_program_load (spe, &spu_hello); spe_context_run (spe, &entry, 0, (void *)data, (void *)NTHREADS, NULL); spe_context_destroy (spe); return 0; } int main () { pthread_t tid[NTHREADS]; unsigned long i; for (i=0;i
Взаимодействие между PPE и SPE Доступ к основной памяти PPE – с помощью обычных инструкций чтения/записи памяти: Регистр память Память регистр SPE – с помощью команд DMA (через EIB) Доступ к основной памяти асинхронный Используется для передачи команд и данных
Взаимодействие между PPE и SPE Основные механизмы общения SPE и PPE Mailbox-ы – очереди 32-битных сообщений: SPU in (4), SPU out (1), SPU out interrupt (1) Сигналы – 32-битные сообщения PPE SPE Прямой доступ к памяти (DMA-передача) get, put – блок данных до 16 KB SPE может обмениваться данными и сообщениями с другими SPE.
Пример передачи данных DMA Программа для SPE void get (void *dest_lsa, unsigned long long sour_ea, unsigned long size) { int tag=15,mask=1
Программа «Ping-pong» Фрагмент программы для PPE … while ( spe_out_mbox_status(spe) == 0 );// ожидание данных в очереди spe_out_mbox_read(spe,&data,1);// чтение одного элемента из очереди data++;// изменение данных spe_signal_write(spe, SPE_SIG_NOTIFY_REG_1, data); // запись в регистр сигнала 1 … Фрагмент программы для SPE … spu_write_out_mbox(data);// запись элемента данных в очередь data=spu_read_signal1();// чтение данных из регистра сигнала 1 …
Программирование SPE Все регистры SPE векторные. Все инструкции являются параллельными по данным и работают с векторами. Скалярные операции выполняются путем соответствующего использования векторных команд. Скалярные аргументы, необходимые некоторым инструкциям, располагаются в «предпочтительных» позициях вектора:
Векторные типы данных
Векторизация вычислений Для манипуляции векторными данными используются intrinsics – встроенные в компилятор команды: Специальные – отображаются в одну инструкцию процессора, Например: d = si_to_int(a); Обобщенные – отображаются в одну или несколько инструкций процессора в зависимости от входных параметров, Например: c = spu_add (a, b); Составные – последовательности обобщенных и специальных intrinsics (объединенные для удобства). Например, команды DMA-передачи.
Инструкции SPE Ядро SPE имеет 2 конвейера (load & execute) Инструкции каждого типа исполняются только на «своем» конвейере Не все инструкции реализованы для всех типов данных Отсутствуют инструкции деления (для всех типов) Отсутствуют инструкции 32-битного целочисленного умножения Реализуется программно с помощью 16-битного умножения …
Предсказание ветвлений в SPE Аппаратное предсказание отсутствует Используется упрощенное предсказание: Подсказках компилятора: адрес инструкции ветвления и адрес перехода Таблица ветвлений (BTB – Branch Target Buffer) Пример программы:... if (a>b) work1(); else work2();... if (__builtin_expect(a>b, 1) ) work1(); else work2();...
Пример: векторное умножение матриц Программа для SPE void mulv (float *a, float *b, float *c, int n) { int i, j, k; vector float *av = (vector float *) a; vector float *bv = (vector float *) b; vector float *cv = (vector float *) c; vector float s = {0.0,0.0,0.0,0.0}; for (i=0; i
Типичный порядок разработки программы для Cell Изучение алгоритма Изучение размещения и потоков данных Экспериментальное разбиение и отображение алгоритма и структуры программы на архитектуру Разработка PPE-управления, PPE-скалярного кода Разработка PPE-управления, распределенного SPE-скалярного кода Коммуникации, синхронизация, задержки при пересылках Преобразование SPE-скалярного кода в SPE SIMD код Перебалансировка вычислений / пересылок данных Другие оптимизации PPE SIMD, узкие места системы, балансировка загрузки
План Общая информация о процессоре Cell Архитектура процессора Cell Программирование процессора Cell Реализации систем на базе Cell
IBM BladeCenter QS 21 2 × Cell B.E. IBM BladeCenter QS 22 2 × PowerXCell 8i Sony PlayStation 3 1 × Cell B.E. (6 SPE)
Cell в отделе МО ВВС
Спасибо за внимание!