Процессор Cell Киреев Сергей ИВМиМГ.

Презентация:



Advertisements
Похожие презентации
Процессор Cell Киреев Сергей ИВМиМГ. План Общая информация о процессоре Cell Архитектура процессора Cell Программирование процессора Cell Реализации систем.
Advertisements

Программирование процессора Cell Киреев С.Е. Летняя школа по параллельному программированию, Новосибирск, 28 августа 2009.
Введение в параллельную обработку. Уровни параллелизма в процессорах Параллелизм данных (DLP – Data Level Parallelism) Параллелизм команд (ILP – Instruction.
Архитектура микропроцессоров И ее эволюция. Процессор и память: Команды и данные.
Современные микропроцессоры Тенденции развития. Рассматриваемые процессоры Intel Itanium 2 Intel Core 2 Duo IBM Cell.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН.
Архитектура ЭВМ (лекция 7) проф. Петрова И.Ю. Курс Информатики.
Параллельные аппаратные архитектуры и модели программирования Традиционная архитектура фон Неймана Расширение традиционной архитектуры Сопроцессоры Многоядерные.
RISC-архитектуры ( Reduced Instruction Set Computer)
Core 2 Duo Двухъядерная 64-битная архитектура –За основу ядра взято ядро Pentium Pro Широкое динамическое исполнение Разделяемый КЭШ 2го уровня Поддержка.
Архитектуры с параллелизмом на уровне команд. Два класса Суперскалярные процессоры Процессоры с длинным командным словом.
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
Система фрагментированного программирования Перепелкин В.А. Всероссийская молодежная школа по параллельному программированию МО ВВС ИВМиМГ 2009 г.
Организация памяти. Иерархии памяти Идея иерархической (многоуровневой) организации памяти заключается в использовании на одном компьютере нескольких.
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx Часть 3. Архитектура ядра процессоров с64хх.
МультиТредовые архитектуры.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Транксрипт:

Процессор 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 Broadband Engine 25.6 GFLOPS single на SPE PowerXcell 8i 25.6 GFLOPS single на SPE 12.8 GFLOFS double на SPE

План Общая информация о процессоре 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 общий

Стадии конвейера PPE

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

Стадии конвейера SPE

Инструкции SPE Все инструкции являются параллельными по данным и работают с векторами Скалярные операции выполняются путем соответствующего использования векторных команд Скалярные аргументы, необходимые некоторым инструкциям, располагаются в «предпочтительных» позициях вектора:

Инструкции SPE Процессор имеет 2 конвейера Инструкции каждого типа исполняются только на «своем» конвейере Не все инструкции реализованы для всех типов данных Отсутствуют инструкции деления Для всех типов Отсутствуют инструкции 32-битного целочисленного умножения Реализуется программно с помощью 16-битного умножения …

Предсказание ветвлений в SPE Аппаратное предсказание отсутствует Используется упрощенное предсказание: Подсказка компилятора: адрес инструкции ветвления и адрес перехода Таблица ветвлений (BTB – Branch Target Buffer)

Element Interconnect Bus Обмен данными для внутренних коммуникаций Четыре 16-байтных кольцевых канала с поддержкой нескольких одновременных передач 96 B/такт пиковая пропускная способность До 100 одновременных запросов

Пример восьми одновременных передач по Element Interconnect Bus

Интерфейсы памяти и ввода-вывода Двойной контроллер памяти XDR (25.6 GB/s) Два конфигурируемых интерфейса Конфигурируемое число байт на канал Когерентность Позволяет создавать системы различных конфигураций

Сравнение подсистем памяти Кэш-память Обычное ядро Ядро SPE Нельзя узнать, когда данные пришли Неявный запрос при использовании данных (или предвыборка) Можно проверить, когда данные пришли Явный запрос до использования данных Память SPE Оперативная память Оперативная память Наличие данных можно только предполагать Фиксированное время доступа Наличие данных гарантировано Фиксированное время доступа мало регистров много регистров

Предпосылки архитектуры Cell Преодоление барьеров производительности Power Wall. Увеличение эффективности затрачиваемой энергии за счет разделения функций: Процессор, оптимизированный для работы операционной системы и кода со сложным управлением. Процессор, оптимизированный для выполнения приложений с интенсивными вычислениями. Memory Wall. Уменьшение влияния задержек памяти за счет: 3-х уровневая структура памяти (основная память, локальная память SPE, большой регистровый файл SPE). Асинхронная передача между основной и локальной памятью. Frequency Wall. Достижение высоких частот благодаря специализации процессоров под решение конкретных задач.

Пиковая производительность

План Общая информация о процессоре Cell Архитектура процессора Cell Реализации систем на базе Cell Программирование процессора Cell

Реализации систем на базе Cell 1. Серверы, карты расширения 2. Суперкомпьютер Roadrunner 3. Sony PlayStation 3

Реализации систем на базе Cell 1. Продукты IBM IBM BladeCenter QS 21 2 × Cell B.E. 3.2 GHz IBM BladeCenter QS 22 2 × PowerXCell 8i 3.2 GHz 2. Продукты Mercury Computer Systems Mercury Dual Cell Based System 2 2 × Cell B.E. 3.2 GHz Mercury Dual Cell Based Blade 2 2 × Cell B.E. 3.2 GHz Mercury PCI Express Cell Accelerator Board 2 1 × Cell B.E. 2.8 GHz

Реализации систем на базе Cell Roadrunner – самый мощный суперкомпьютер

Реализации систем на базе Cell Roadrunner – самый «зелёный» суперкомпьютер

Roadrunner

Sony PlayStation3 в ИВМиМГ в отделе МО ВВС 1 процессор CELL B.E. 3.2 GHz 1 ядро PPE 6 ядер SPE 256 MB оперативной памяти

План Общая информация о процессоре Cell Архитектура процессора Cell Реализации систем на базе Cell Программирование процессора Cell

Программирование процессоров Cell Виды параллелизма: 1. Многоядерность: независимые задачи, которые могут быть выполнены параллельно: 2 аппаратных потока PPE 8 программ SPE 2. Регулярные векторные данные, обработка которых может быть векторизована: SPE SIMD PPE VMX 3. Асинхронная передача данных

Программирование процессоров Cell Многоядерность (8 SPE + 1 PPE) Данные и вычисления необходимо разрезать на фрагменты и распределять между ядрами SPE PPE

Программирование процессоров Cell Векторные операции на SPE и PPE Позволяют выполнять операции над несколькими данными одновременно Требуют выравнивания данных

Программирование процессоров Cell Асинхронные передачи данных Позволяют совместить вычисления с обменами между ядрами Обмены между ядрами произвольные Time output n-2 input n Output n-1 Func (input n ) Input n+1 Func (input n+1 )Func (input n-1 ) output n Input n+2 DMAs SPE exec. SPE Оперативная память SPE Оперативная память SPE

Средства программирования процессоров Cell Средства от IBM (IBM Cell SDK) Библиотека libspe 2.0 Библиотеки: SIMD Math Library, MASS Library, BLAS, FFT, Monte- Carlo, Image Processing, Game math, Vector operation, Matrix operation, Multi-precision math, … Software managed cache Распараллеливающие векторизующие компиляторы (OpenMP): xlc, xlf DaCS – Data Communication and Synchronization library ALF – Accelerated Library Framework Другие средства IBM DAC – Dynamic Application Virtualisation Mercury Computer Systems: MultiCore Framework PeakStream Platform RapidMind Gedae

Библиотека libspe 2.0 LibSPE предоставляет интерфейс к базовым средствам программирования процессора Cell, реализованным аппаратно. Разработка программы: Создается отдельная программа для PPE, Создается отдельная программа для SPE, PPE-программа запускает SPE-программу, SPE-программа может вызвать callback-функцию вызвавшей ее PPE- программы. PPESPE Callback function Run SPE program main() { count(); printf(Hello!); } SPE-program main() { run(); } int printf(…) PPE-program

Библиотека libspe 2.0 Программа «Hello, World!» Программа для PPE (ppu_prog.c) #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 (spu_prog.c) #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; }

Библиотека libspe 2.0 Программа «Hello, World!» main() { … } main() { … } spu_prog.c spu-gcc -o spu_prog spu_prog.c spu_prog Компиляция программы для Cell: ppu_prog.c spu_hello ppu-embedspu spu_hello spu_prog spu_prog.o ppu-gcc -o prog ppu_prog.c spu_prog.o -lspe2 spu_prog.o prog Исполняемый файл для SPE Исполняемый файл для PPE+SPE

Библиотека libspe 2.0: Многопоточная программа «Hello, World!» Создание параллельной программы для Cell: В программе на PPE создать несколько параллельных потоков, В потоках запустить программы на SPE. main() { … … } thread_func() { … } pthread_create() main() { … } SPE run() PPE

Библиотека libspe 2.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 – с помощью обычных инструкций чтения/записи памяти: Load: память регистр Store: регистр память на SPE – с помощью команд DMA Используется для передачи команд и данных между основной памятью и локальной памятью SPE Передача осуществляется асинхронно

Взаимодействие между PPE и SPE Механизмы передачи данных на SPE DMA-передача: get, put – блок данных до 16 KB Mailbox-ы – очереди 32-битных сообщений: SPE in (4), SPE out (1), SPE out interrupt (1) Сигналы – 32-битные сообщения: PPE SPE SPE может обмениваться данными и сообщениями с другими SPE.

Взаимодействие между PPE и SPE DMA-передача данных Может запускаться и на PPE, и на SPE System memory SPE getput get list put list

Библиотека libspe 2.0: Пример передачи данных DMA Программа для SPE void get (void *dest_lsa, unsigned long long sour_ea, unsigned long size) { int tag=mfc_tag_reserve(), mask=1

Mailbox: передача 4-байтовых сообщений Signal: передача 4-байтовых сообщений Взаимодействие между PPE и SPE PPE SPE spe_in_mbox_writespu_read_in_mbox spe_out_mbox_readspu_write_out_mbox spe_out_mbox_status spe_in_mbox_status spu_stat_in_mbox spu_stat_out_mbox PPE SPE spe_signal_writespu_read_signal1 spu_stat_signal1 spu_stat_signal2 spe_signal_write spu_read_signal2 блокированные передачи не блокированные передачи

Библиотека libspe 2.0: Программа «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 … PPE SPE signal mailbox

Передача данных между SPE Локальная память SPE отображается в общее адресное пространство. Обращение SPE к заданному участку адресного пространства позволяет обращаться к памяти другого SPE. Адресное пространство SPE put spe_ls_area_get

ALF – Accelerated Library Framework ALF позволяет автоматизировать раздачу заданий акселераторам. Программа для ALF состоит из двух частей: 1. Управляющая часть – работает на хост-системе (PPE, x86-64) 2. Вычислительные ядра – работают на акселераторах (SPE) Управляющая часть формирует задачи, разбивает задачи на блоки работ и помещает их в очередь на обработку.

ALF – Accelerated Library Framework Программист должен: Work Blocks Data 1 Data 2 Data 3Data 4 Data 5 на хостена акселераторе Создать задачи, Разделить задачи на блоки, описать входные и выходные данные для каждого блока, Выразить зависимости между задачами, Поместить блоки работ в очередь. Написать вычислительные ядра для акселератора Схема программы на ALF Task 1 Task 2 Task 3

ALF – Accelerated Library Framework Run-Time система ALF Распределяет задачи по акселераторам Оптимизирует передачи данных между хостом и акселератором Управляет очередями блоков работ Балансирует нагрузку акселераторов Учитывает зависимости между задачами Схема выполнения задачи: Data 1Data 2 Host memory Акселераторы (SPE)

ALF – Accelerated Library Framework Run-Time система ALF Распределяет задачи по акселераторам Оптимизирует передачи данных между хостом и акселератором Управляет очередями блоков работ Балансирует нагрузку акселераторов Учитывает зависимости между задачами Схема распределения задач: Task 1 Host memory SPE Task 2Task 3

DaCS – Data Communication and Synchronization library Набор функций для коммуникации и синхронизации между задачами параллельного приложения. Используется модель Host/Accelerator, которая определяет иерархию вычислителей. MPI + DaCSИерархическая система DaCS

DaCS – Data Communication and Synchronization library DaCS предоставляет общие механизмы параллельного программирования: Доступ к акселераторов к разделяемой памяти хоста (put/get), Передача сообщений через функции send/recv и mailbox, Синхронизация с помощью мьютексов, Барьерная синхронизация внутри групп акселераторов. AE Shared memory block AE putget recvsend AE группа акселераторов AE Shared mutex lock Host memory

Mercury Computer Systems: MultiCore Framework MultiCore FrameWork (MCF) – это API для программирования гетерогенных многоядерных процессоров, ориентированная на вычисления на N- мерных матрицах. Программа MCF состоит из менеджера (на PPE) и одного или более рабочих (на SPE). MCF позволяет: Определить команды рабочих процессов, Назначить задачи команде рабочих, Загружать и выгружать рабочими функции обработки данных, Синхронизировать менеджера с командами рабочих, Определять организацию и распределение N-мерных наборов данных, Передавать блоки данных через каналы.

Mercury Computer Systems: MultiCore Framework

RapidMind Development Platform Позволяет создавать на С++ программы, параллельные по данным, и эффективно исполнять их на многоядерных процессорах и спецпроцессорах. Использует SPMD-модель параллелизма. В коде явно определяются программы, работающие над массовыми данными. В ходе исполнения массовые вычисления в выделенных участках программы не выполняются, а автоматически преобразуются в код для доступных в системе вычислителей (многоядерные процессоры, GPU, Cell), который и выполняет все вычисления.

RapidMind Development Platform Обычная программа на С++ может быть преобразована для запуска на RapidMind. Для этого требуется: Стандартные типы данных заменить эквивалентными типами RapidMind (Value1i, Value2f, Array, …), Cформировать элементарные программы, выделив блоки вычислений ключевыми словами BEGIN и END. У программ задать имя и явно выделить входные и выходные переменные. Управляющие конструкции внутри программ заменить на эквивалентные: FOR, IF, WHILE, DO. Применить программу для вычислений над массивами. Program count = BEGIN { In a; In u; Out c; Value3f d = func(a, B[u]); IF (all(a > 0.0f)) { c = d + a * 2.0f; } ELSE { c = d - a * 2.0f; } ENDIF; } END; const int n = 512, m = 512; Array x(n,m),y(n,m); Value1i k; y = count(x, k);

PeakStream Platform Предлагает модель поточного программирования для многоядерных и спецпроцессоров (GPU, Cell). Использует массивы данных в качестве основного объекта. API использует идеологию C++. Пример: #include using namespace SP; Arrayf32 dot_product_cxx (const Arrayf32& a, const Arrayf32& b) { return sum(a * b, SP_ALL_DIMS); } Распределяет работу по доступным вычислителям. Динамически генерирует код для доступных вычислителей (обычные ядра, GPU, Cell SPE). Предоставляет библиотеку математических операций.

IBM DAV – Dynamic Application Virtualization DAV реализует function offload model – функция отдается для вычисления на другую систему. DAV используется для ускорения Windows- приложений с помощью систем на базе Cell. Используя DAV, программист подменяет обычную DLL- библиотеку заглушкой, которая передает запрос на Cell-систему под управлением Linux. На Cell-системе запускается аналогичная функция. Ее результат передается обратно на Windows-систему.

IBM DAV – Dynamic Application Virtualization

Gedae Gedae – система программирования потоковых приложений для запуска на обычных системах и спецпроцессорах (FPGA, Cell): Язык программирования потоков данных, расширенный для создания программ общего назначения. Многопоточный компилятор. Планировщик потоков. Набор средств разработки: отладчики, визуализаторы, … Используется визуальный язык, описывающий диаграмму блоков обработки потоков данных.

Программирование SPE Все регистры SPE векторные. Все инструкции являются параллельными по данным и работают с векторами. Скалярные операции выполняются путем соответствующего использования векторных команд. Скалярные аргументы, необходимые некоторым инструкциям, располагаются в «предпочтительных» позициях вектора:

Векторные типы данных

Векторизация вычислений Для манипуляции векторными данными используются intrinsics – встроенные в компилятор команды: Специальные – отображаются в одну инструкцию процессора, Например: d = si_to_int(a); Обобщенные – отображаются в одну или несколько инструкций процессора в зависимости от входных параметров, Например: c = spu_add (a, b); Составные – последовательности обобщенных и специальных intrinsics (объединенные для удобства). Например, команды DMA-передачи.

Предсказание ветвлений в SPE Аппаратное предсказание ветвлений отсутствует Для эффективного исполнения ветвлений процессору требуется подсказка компилятора Пример подсказки результата ветвления в программе:... 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 *bv = (vector float *) b; vector float *cv = (vector float *) c; vector float s, t; s = spu_splats(0.0); for (i=0; i

Типичный порядок разработки программы для Cell Изучение алгоритма Изучение размещения и потоков данных Экспериментальное разбиение и отображение алгоритма и структуры программы на архитектуру Разработка PPE-управления, PPE-скалярного кода Разработка PPE-управления, распределенного SPE-скалярного кода Коммуникации, синхронизация, задержки при пересылках Преобразование SPE-скалярного кода в SPE SIMD код Перебалансировка вычислений / пересылок данных Другие оптимизации PPE SIMD, узкие места системы, балансировка загрузки