Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Программирование процессора Cell

Содержание

Сравнение современных процессоров
Программирование процессора CellКиреев С.Е.Летняя школа по параллельному программированию, Новосибирск, 28 августа 2009 Сравнение современных процессоров Реализации систем на базе CellRoadrunner – самый мощный суперкомпьютер в мире на Реализации систем на базе CellСистемы на базе Cell – самые «зеленые» Реализации систем на базе CellПродукты IBMIBM BladeCenter QS 212 × Cell B.E. Sony PlayStation3 в ИВМиМГ в отделе МО ВВС1 процессор CELL B.E. 3.2 ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных Структура обычного многоядерного узлаВсе ядра в узле равноправныеКластер МВС-100К (Москва)Кластер НКС-30Т (Новосибирск) Структура процессора CellМногоядерный процессор CellPower Processor Element – ядро общего назначения (главное)Synergistic Структура процессора Cell1 ядро PPEядро общего назначения (PowerPC, 2 потока)выполняет код операционной Виды параллелизма в процессоре CellМногоядерность. Независимые задачи, которые могут быть выполнены одновременно Виды параллелизма в процессоре CellМногоядерность. Независимые задачи, которые могут быть выполнены одновременно Виды параллелизма в процессоре CellМногоядерность. Независимые задачи, которые могут быть выполнены одновременно Модель памятиОбщее адресное пространствоPPE…Обычные операции чтения и записи данных(read / write)Отображение локальной Сравнение подсистем памятиОбычная иерархия памятиИерархия памяти ядра SPE Сравнение подсистем памятиОбычная иерархия памятиЯдро может обращаться к данным в оперативной памятиПосле Сравнение подсистем памятиИерархия памяти ядра SPEЯдро SPE может обращаться к данным в Выполнение обменов на фоне вычисленийвремяLoad 1Count 1Store 1Load 2Count 2Store 2времяLoad 1Count ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных Программирование CellДля организации вычислений на Cell необходимо:Разделить задачу на независимые фрагменты для Сравнение параллельных вычислений на Cell с «традиционными» подходамиSMP-узел + потоки (OpenMP, PThreads, Сравнение параллельных вычислений на Cell с «традиционными» подходамиSMP-узел + потоки (OpenMP, PThreads, Кластер + библиотека MPIНа каждом узле работает один или несколько процессовДанные распределены Сравнение параллельных вычислений на Cell с «традиционными» подходамиУзел на базе процессоров CellНа PPEFunction offload model{…matrix a, b, c;multiply(a, b, c);}SPEmultiply(){ …}mul(){ … }Статическое или SPESPESPESPEPPEПортфель задачwork() { … }work() { … }work() { … }work() { SPESPESPESPEPPEПотоковый конвейерstep1() { … }step2() { … }step4() { … }step3() { Взаимодействующие процессы с общей памятьюSPEPPESPESPESPESPESPESPESPEОбщая памятьМодели программирования процессора Cell Взаимодействующие процессы с распределенной памятьюSPEPPESPESPESPESPESPESPESPEПамять PPEМодели программирования процессора Cell ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных Библиотека libspe2LibSPE предоставляет интерфейс к базовым средствам программирования процессора Cell, реализованным аппаратно.Разработка Библиотека libspe2: Программа «Hello, World!»Программа для PPE (ppu_prog.c)#include extern spe_program_handle_t spu_hello;int main Библиотека libspe2: Программа «Hello, World!»main(){ …}main(){ …}spu_prog.cspu-gcc -o spu_prog spu_prog.cspu_progКомпиляция программы для Создание параллельной программы для Cell:В программе на PPE создать несколько параллельных потоков,В Программа для PPE многопоточная#include #include #define NTHREADS 40extern spe_program_handle_t spu_hello;void *thread_func (void ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных DMA-передача – блок данных до 16 KB:Операция Get:	общая память ? память SPEОперация DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений DMA-передача данныхБлоки данных должны быть выровнены в памяти по границе 16 байт.Размер DMA-передача данныхЧтобы упорядочить выполнение передач, используются специальные варианты команд get и put:Barrier:	getb, Программа для SPE// GET: Передача данных из PPE в SPEvoid get (void Mailbox: передача 4-байтовых сообщенийPPESPEspe_in_mbox_write()spu_read_in_mbox()spe_out_mbox_read()spu_write_out_mbox()spe_out_mbox_status()spe_in_mbox_status()spu_stat_in_mbox()spu_stat_out_mbox()блокированные передачинеблокированные передачиinoutМеханизмы передачи данных и сообщений Mailbox: передача 4-байтовых сообщенийSignal: передача 4-байтовых сообщенийPPESPEspe_in_mbox_write()spu_read_in_mbox()spe_out_mbox_read()spu_write_out_mbox()spe_out_mbox_status()spe_in_mbox_status()spu_stat_in_mbox()spu_stat_out_mbox()PPESPEspe_signal_write()spu_read_signal1()spu_stat_signal1()spu_stat_signal2()spe_signal_write()spu_read_signal2()блокированные передачинеблокированные передачиinoutsig1sig2Механизмы передачи данных и сообщений Фрагмент программы для PPE…while ( spe_out_mbox_status(spe) == 0 );	// ожидание данных в Локальная память SPE отображается в общее адресное пространство.Обращение SPE к заданному участку Регистры mailbox-ов и сигналов SPE отображаются в общее адресное пространство.Запись/чтение заданного элемента ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных Все регистры SPE векторные длиной 16 байт.Все арифметические инструкции являются параллельными по Локальная память SPEОбъем локальной памяти для данных и кода: 256 KBЧтение и Векторные типы данных Векторные типы данныхЭлементы векторных типов данных выравниваются автоматически.Элементы других типов можно выравнивать Команды уровня компилятораДля манипуляции векторными данными используются intrinsics – встроенные в компилятор Операции над векторамиАрифметические операции над элементами векторов:d = spu_add(a,b);d = spu_sub(a, b);d Операции над векторамиОперации преобразования скалярных и векторных данных:d = spu_insert(s, v, n);d Операции над векторамиОперации для манипулирования элементами векторов:Сдвиг, вращение элементовd = spu_rl(a, count);d void mulv (float *a, float *b, float *c, int n){ int i, Особенности векторизации вычисленийПростой пример:for (i=0; i Особенности векторизации вычисленийОперанды должны быть приведены к одному типуПример:int a[n];short int b[n];for (i=0; i Особенности векторизации вычисленийОперанды должны быть выровнены друг относительно друга Особенности реализации скалярных вычисленийПри выполнении операции над скалярными переменными в памяти происходит Оптимизация целочисленной арифметикиНа SPE отсутствует 32-битное умножение.Используйте short int вместо int, где Оптимизация условных переходовУстранение условных переходовПодсказка компилятору ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи данных Средства программирования процессоров CellСредства от IBM (IBM Cell SDK)Библиотека libspe 2.0Библиотеки векторизованых СсылкиIBM Cell Broadband Engine resource center, http://www.ibm.com/developerworks/power/cell/documents.htmlCell Developer's Corner, http://www.power.org/resources/devcorner/cellcornerSTI Center of
Слайды презентации

Слайд 2 Сравнение современных процессоров

Сравнение современных процессоров

Слайд 3 Реализации систем на базе Cell
Roadrunner – самый мощный

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

суперкомпьютер в мире на базе процессоров Opteron и Cell


Слайд 4 Реализации систем на базе Cell
Системы на базе Cell

Реализации систем на базе CellСистемы на базе Cell – самые «зеленые»

– самые «зеленые»


Слайд 5 Реализации систем на базе Cell
Продукты IBM
IBM BladeCenter QS

Реализации систем на базе CellПродукты IBMIBM BladeCenter QS 212 × Cell

21
2 × Cell B.E. 3.2 GHz
IBM BladeCenter QS 22
2

× PowerXCell 8i 3.2 GHz
2 × PowerXCell 8i 4.0 GHz

Продукты 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

Продукты Fixstars
Fixstars GagaAccell 180 Accelerator Board
1 × PowerXCell 8i 2.8 GHz

Продукты Т-Платформы
PeakCell S
2 × PowerXCell 8i 3.2 GHz
PeakCell W
2 × PowerXCell 8i 3.2 GHz
PeakCell YPS
4 × PowerXCell 8i 3.2 GHz



Слайд 7 Sony PlayStation3 в ИВМиМГ в отделе МО ВВС
1 процессор

Sony PlayStation3 в ИВМиМГ в отделе МО ВВС1 процессор CELL B.E.

CELL B.E. 3.2 GHz
1 ядро PPE
6 ядер SPE
256 MB

оперативной памяти

Слайд 8 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 9 Структура обычного многоядерного узла
Все ядра в узле равноправные
Кластер

Структура обычного многоядерного узлаВсе ядра в узле равноправныеКластер МВС-100К (Москва)Кластер НКС-30Т (Новосибирск)

МВС-100К (Москва)
Кластер НКС-30Т (Новосибирск)


Слайд 10 Структура процессора Cell
Многоядерный процессор Cell
Power Processor Element –

Структура процессора CellМногоядерный процессор CellPower Processor Element – ядро общего назначения

ядро общего назначения (главное)
Synergistic Processor Element – векторные ядра

(дополнительные)
Element Interconnect Bus – быстрая шина

Слайд 11 Структура процессора Cell
1 ядро PPE
ядро общего назначения (PowerPC,

Структура процессора Cell1 ядро PPEядро общего назначения (PowerPC, 2 потока)выполняет код

2 потока)
выполняет код операционной системы
управляет ходом вычислений

8 ядер SPE
специализированные

векторные ядра
(особый набор команд)
обеспечивают вычислительную мощность процессора
работают с ограниченной локальной памятью: 256 KB
имеют много регистров: 128

Шина EIB
асинхронная
имеет высокую пропускную способность
обеспечивает большое число одновременных запросов


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

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

быть выполнены одновременно на разных ядрах:
2 аппаратных потока PPE
8

программ SPE


Данные и вычисления необходимо разрезать на фрагменты и распределять между ядрами


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

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

быть выполнены одновременно на разных ядрах:
2 аппаратных потока PPE
8

программ SPE

Векторизация. Регулярные векторные данные, обработка которых может быть векторизована:
SPE SIMD
PPE VMX


Данные необходимо группировать в вектора и следить за выравниванием


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

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

быть выполнены одновременно на разных ядрах:
2 аппаратных потока PPE
8

программ SPE

Векторизация. Регулярные векторные данные, обработка которых может быть векторизована:
SPE SIMD
PPE VMX

Асинхронная передача данных

Необходимо использовать специальные алгоритмы для совмещения передач данных и вычислений


Слайд 15 Модель памяти
Общее адресное пространство
PPE

Обычные операции чтения и записи

Модель памятиОбщее адресное пространствоPPE…Обычные операции чтения и записи данных(read / write)Отображение

данных
(read / write)
Отображение локальной памяти SPE
Локальная память SPE
Явные операции

передачи данных
(put / get)

SPE


Обычные операции чтения и записи данных (read / write)

Отображение локальной памяти SPE

Локальная память SPE

SPE


Слайд 16 Сравнение подсистем памяти



Обычная иерархия памяти
Иерархия памяти ядра SPE

Сравнение подсистем памятиОбычная иерархия памятиИерархия памяти ядра SPE

Слайд 17 Сравнение подсистем памяти
Обычная иерархия памяти
Ядро может обращаться к

Сравнение подсистем памятиОбычная иерархия памятиЯдро может обращаться к данным в оперативной

данным в оперативной памяти
После запроса данные из памяти придут

неизвестно когда
Гарантировать приход данных вовремя можно с помощью:
Правильного порядка обращений к данным
Предвыборки


Кэш

Оперативная
память

Данные

Запрос данных

Обычное
процессорное ядро

Запрос данных

Данные


Слайд 18 Сравнение подсистем памяти
Иерархия памяти ядра SPE
Ядро SPE может

Сравнение подсистем памятиИерархия памяти ядра SPEЯдро SPE может обращаться к данным

обращаться к данным в локальной памяти
Ядро может отправлять запрос

на перемещение данных из оперативной в локальную память (или обратно) и проверять его завершение
Данные из локальной памяти доступны за константное время

LS

Оперативная
память

Данные

Запрос на копирование данных

Запрос данных

Данные


Ядро SPE

локальная
память
SPE


Слайд 19 Выполнение обменов на фоне вычислений
время
Load 1
Count 1
Store 1
Load

Выполнение обменов на фоне вычисленийвремяLoad 1Count 1Store 1Load 2Count 2Store 2времяLoad

2
Count 2
Store 2
время
Load 1
Count 1
Store 1
Load 2
Count 2
Store 2
Count

3

Load 3

Load 4

Count 4


Store 3


Вычисления с одним буфером на SPE

Вычисления с двумя буферами на SPE

Load – копирование данных в память SPE
Count – выполнение вычислений
Store – копирование результата из памяти SPE


Слайд 20 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 21 Программирование Cell
Для организации вычислений на Cell необходимо:

Разделить задачу

Программирование CellДля организации вычислений на Cell необходимо:Разделить задачу на независимые фрагменты

на независимые фрагменты для обработки на ядрах SPE

Организовать передачу

данных между ядрами на одновременно с вычислениями

Выполнить векторизацию вычислений на ядрах SPE

Слайд 22 Сравнение параллельных вычислений на Cell с «традиционными» подходами
SMP-узел

Сравнение параллельных вычислений на Cell с «традиционными» подходамиSMP-узел + потоки (OpenMP,

+ потоки (OpenMP, PThreads, …)

Кластер + библиотека MPI

Узел на

базе процессоров Cell

Слайд 23 Сравнение параллельных вычислений на Cell с «традиционными» подходами
SMP-узел

Сравнение параллельных вычислений на Cell с «традиционными» подходамиSMP-узел + потоки (OpenMP,

+ потоки (OpenMP, PThreads, …)
На одном узле работают несколько

потоков исполнения
Данные одинаково доступны всем потокам
Каждый поток выполняет свою часть работы над общими данными



0

1

2

3

Данные обрабатываются в том месте, где они хранятся




4-core SMP


Слайд 24 Кластер + библиотека MPI
На каждом узле работает один

Кластер + библиотека MPIНа каждом узле работает один или несколько процессовДанные

или несколько процессов
Данные распределены по процессам
Каждый процесс выполняет свою

часть работы над своими данными
Процессы обмениваются сообщениями



Сравнение параллельных вычислений на Cell с «традиционными» подходами

Данные обрабатываются в том месте, где они хранятся




C
L
U
S
T
E
R


Слайд 25 Сравнение параллельных вычислений на Cell с «традиционными» подходами
Узел

Сравнение параллельных вычислений на Cell с «традиционными» подходамиУзел на базе процессоров

на базе процессоров Cell
На ядре PPE работает главный поток
На

ядрах SPE работают вычислительные потоки
копируют блоки данных из общей памяти в локальную память ядра
производят вычисления над данными в локальной памяти
копируют результаты в общую память


PPE

SPE



















Для обработки данные необходимо скопировать в локальную память ядер SPE


Слайд 26 PPE
Function offload model
{…
matrix a, b, c;
multiply(a, b, c);
}
SPE
multiply()
{

PPEFunction offload model{…matrix a, b, c;multiply(a, b, c);}SPEmultiply(){ …}mul(){ … }Статическое


}

mul()
{ … }
Статическое или динамическое распределение подзадач
Модели программирования процессора

Cell

Слайд 27 SPE
SPE
SPE
SPE
PPE
Портфель задач
work() { … }
work() { … }
work()

SPESPESPESPEPPEПортфель задачwork() { … }work() { … }work() { … }work()

{ … }
work() { … }
Task
Task
Task
Task
Task
Task
main()
{ …
AddTask();

}
Task
Очередь

задач

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


Слайд 28 SPE
SPE
SPE
SPE
PPE
Потоковый конвейер
step1() { … }
step2() { … }
step4()

SPESPESPESPEPPEПотоковый конвейерstep1() { … }step2() { … }step4() { … }step3()

{ … }
step3() { … }
Input
data
Output
data
main()
{ …
make_input();

get_output();

}

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


Слайд 29 Взаимодействующие процессы с общей памятью
SPE
PPE

SPE

SPE

SPE

SPE

SPE

SPE

SPE

Общая память


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

Взаимодействующие процессы с общей памятьюSPEPPESPESPESPESPESPESPESPEОбщая памятьМодели программирования процессора Cell

Cell


Слайд 30 Взаимодействующие процессы с распределенной памятью
SPE
PPE

SPE

SPE

SPE

SPE

SPE

SPE

SPE

Память PPE
Модели программирования процессора

Взаимодействующие процессы с распределенной памятьюSPEPPESPESPESPESPESPESPESPEПамять PPEМодели программирования процессора Cell

Cell


Слайд 31 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 32 Библиотека libspe2
LibSPE предоставляет интерфейс к базовым средствам программирования

Библиотека libspe2LibSPE предоставляет интерфейс к базовым средствам программирования процессора Cell, реализованным

процессора Cell, реализованным аппаратно.
Разработка программы:
Создается отдельная программа для PPE,
Создается

отдельная программа для SPE,
PPE-программа запускает SPE-программу,
SPE-программа может вызвать callback-функцию вызвавшей ее PPE-программы.

Слайд 33 Библиотека libspe2: Программа «Hello, World!»
Программа для PPE (ppu_prog.c)
#include
extern

Библиотека libspe2: Программа «Hello, World!»Программа для PPE (ppu_prog.c)#include extern spe_program_handle_t spu_hello;int

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;
}

Слайд 34
Библиотека libspe2: Программа «Hello, World!»
main()
{

}
main()
{

}
spu_prog.c
spu-gcc -o spu_prog

Библиотека libspe2: Программа «Hello, World!»main(){ …}main(){ …}spu_prog.cspu-gcc -o spu_prog spu_prog.cspu_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




Слайд 35

Создание параллельной программы для Cell:
В программе на PPE

Создание параллельной программы для Cell:В программе на PPE создать несколько параллельных

создать несколько параллельных потоков,
В потоках запустить программы на SPE.
main()
{





}

thread_func() { … }

thread_func() { … }

thread_func() { … }

pthread_create()




main() { … }


main() { … }


main() { … }

SPE

SPE

SPE




run()

PPE

Библиотека libspe2: Многопоточная программа «Hello, World!»


Слайд 36 Программа для PPE многопоточная
#include
#include
#define NTHREADS 40
extern

Программа для PPE многопоточная#include #include #define NTHREADS 40extern spe_program_handle_t spu_hello;void *thread_func

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 // Параллельная часть
for (i=0;i return 0;
}

Библиотека libspe2: Многопоточная программа «Hello, World!»


Слайд 37 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 38 DMA-передача – блок данных до 16 KB:
Операция Get: общая

DMA-передача – блок данных до 16 KB:Операция Get:	общая память ? память

память ? память SPE
Операция Put: память SPE ? общая память
Mailbox-ы

– очереди 32-битных сообщений:
SPE in (4)
SPE out (1)
SPE out interrupt (1)
Сигналы – 32-битные сообщения:
Только к SPE

Механизмы передачи данных и сообщений


Слайд 39 DMA-передача данных
Может запускаться и на PPE, и на

DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений

SPE
Общее адресное пространство
SPE

SPE

SPE

SPE

Механизмы передачи данных и сообщений


Слайд 40 DMA-передача данных
Может запускаться и на PPE, и на

DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений

SPE
Общее адресное пространство
SPE

SPE

SPE

SPE

Механизмы передачи данных и сообщений


Слайд 41 DMA-передача данных
Может запускаться и на PPE, и на

DMA-передача данныхМожет запускаться и на PPE, и на SPEОбщее адресное пространствоSPESPESPESPEМеханизмы передачи данных и сообщений

SPE
Общее адресное пространство
SPE

SPE

SPE

SPE

Механизмы передачи данных и сообщений


Слайд 42 DMA-передача данных
Блоки данных должны быть выровнены в памяти

DMA-передача данныхБлоки данных должны быть выровнены в памяти по границе 16

по границе 16 байт.
Размер передаваемых данных может быть 1,2,4,8,16

или 16*N байтов.
Для идентификации группы DMA-передач используются 5-битные DMA-тэги.
Тэг позволяет проверить статус или дождаться завершения соответствующей группы DMA-передач.

Механизмы передачи данных и сообщений


Слайд 43 DMA-передача данных
Чтобы упорядочить выполнение передач, используются специальные варианты

DMA-передача данныхЧтобы упорядочить выполнение передач, используются специальные варианты команд get и

команд get и put:
Barrier: getb, putb
Fence: getf, putf
Механизмы передачи данных и

сообщений

время


Слайд 44 Программа для SPE

// GET: Передача данных из PPE

Программа для SPE// GET: Передача данных из PPE в SPEvoid get

в SPE
void get (void *dest_lsa, unsigned long long sour_ea,

unsigned long size)
{
int tag=mfc_tag_reserve(), mask=1<
mfc_get (dest_lsa, sour_ea, size, tag, 0, 0); // запуск передачи данных
mfc_write_tag_mask (mask);
mfc_read_tag_status_any(); // ожидание завершения передачи

mfc_tag_release(tag);
}

// PUT: Передача данных из SPE в PPE
void put (void *sour_lsa, unsigned long long dest_ea, unsigned long size)
{
int tag=mfc_tag_reserve(), mask=1<
mfc_put (sour_lsa, dest_ea, size, tag, 0, 0); // запуск передачи данных
mfc_write_tag_mask (mask);
mfc_read_tag_status_any(); // ожидание завершения передачи

mfc_tag_release();
}

Библиотека libspe 2.0: Пример передачи данных DMA


Слайд 45 Mailbox: передача 4-байтовых сообщений





PPE
SPE





spe_in_mbox_write()
spu_read_in_mbox()
spe_out_mbox_read()
spu_write_out_mbox()
spe_out_mbox_status()
spe_in_mbox_status()
spu_stat_in_mbox()
spu_stat_out_mbox()
блокированные передачи
неблокированные передачи
in
out
Механизмы передачи данных

Mailbox: передача 4-байтовых сообщенийPPESPEspe_in_mbox_write()spu_read_in_mbox()spe_out_mbox_read()spu_write_out_mbox()spe_out_mbox_status()spe_in_mbox_status()spu_stat_in_mbox()spu_stat_out_mbox()блокированные передачинеблокированные передачиinoutМеханизмы передачи данных и сообщений

и сообщений


Слайд 46 Mailbox: передача 4-байтовых сообщений





Signal: передача 4-байтовых сообщений
PPE
SPE





spe_in_mbox_write()
spu_read_in_mbox()
spe_out_mbox_read()
spu_write_out_mbox()
spe_out_mbox_status()
spe_in_mbox_status()
spu_stat_in_mbox()
spu_stat_out_mbox()
PPE
SPE
spe_signal_write()
spu_read_signal1()
spu_stat_signal1()
spu_stat_signal2()
spe_signal_write()
spu_read_signal2()


блокированные передачи
неблокированные

Mailbox: передача 4-байтовых сообщенийSignal: передача 4-байтовых сообщенийPPESPEspe_in_mbox_write()spu_read_in_mbox()spe_out_mbox_read()spu_write_out_mbox()spe_out_mbox_status()spe_in_mbox_status()spu_stat_in_mbox()spu_stat_out_mbox()PPESPEspe_signal_write()spu_read_signal1()spu_stat_signal1()spu_stat_signal2()spe_signal_write()spu_read_signal2()блокированные передачинеблокированные передачиinoutsig1sig2Механизмы передачи данных и сообщений

передачи
in
out
sig1
sig2
Механизмы передачи данных и сообщений


Слайд 47 Фрагмент программы для PPE


while ( spe_out_mbox_status(spe) == 0

Фрагмент программы для 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

Библиотека libspe 2.0: Программа «Ping-pong»


Слайд 48 Локальная память SPE отображается в общее адресное пространство.
Обращение

Локальная память SPE отображается в общее адресное пространство.Обращение SPE к заданному

SPE к заданному участку адресного пространства позволяет обращаться к

памяти другого SPE.

Адресное пространство

SPE


SPE






spe_ls_area_get()

Передача данных между SPE


Слайд 49 Регистры mailbox-ов и сигналов SPE отображаются в общее

Регистры mailbox-ов и сигналов SPE отображаются в общее адресное пространство.Запись/чтение заданного

адресное пространство.
Запись/чтение заданного элемента адресного пространства позволяет одному SPE

отправлять и получать сообщения другого SPE.

Адресное пространство

SPE


SPE


spe_ps_area_get()







put

get


Передача сообщений между SPE


Слайд 50 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 51 Все регистры SPE векторные длиной 16 байт.
Все арифметические

Все регистры SPE векторные длиной 16 байт.Все арифметические инструкции являются параллельными

инструкции являются параллельными по данным и работают с векторами.
Скалярные

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

Программирование вычислений на SPE


Слайд 52 Локальная память SPE
Объем локальной памяти для данных и

Локальная память SPEОбъем локальной памяти для данных и кода: 256 KBЧтение

кода: 256 KB
Чтение и запись локальной памяти всегда выполняется

выровненными блоками размером 16 байт:
Если адрес не выровнен, он автоматически округляется до 16 байт
Защита памяти отсутствует
Можно свободно читать и писать в области данных, кода и стека

Слайд 53 Векторные типы данных

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

Слайд 54 Векторные типы данных
Элементы векторных типов данных выравниваются автоматически.
Элементы

Векторные типы данныхЭлементы векторных типов данных выравниваются автоматически.Элементы других типов можно

других типов можно выравнивать явно:
unsigned char buffer[1024] __attribute__ ((aligned(16)));
Пример

инициализации векторной переменной:
vector float vf1 = { 1.0, 2.0, 3.0, 4.0 };
vector float vf2[2] = {{1.0, 2.0, 3.0, 4.0}, {5.0, 6.0, 7.0, 8.0}};
vector float vf3[2] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};

Слайд 55 Команды уровня компилятора
Для манипуляции векторными данными используются intrinsics

Команды уровня компилятораДля манипуляции векторными данными используются intrinsics – встроенные в

– встроенные в компилятор команды:
Специальные (specific) – отображаются в

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

Слайд 56 Операции над векторами
Арифметические операции над элементами векторов:
d =

Операции над векторамиАрифметические операции над элементами векторов:d = spu_add(a,b);d = spu_sub(a,

spu_add(a,b);
d = spu_sub(a, b);
d = spu_madd(a, b, c);
d =

spu_mul(a, b);

Логические операции над битами векторов:
d = spu_and(a, b);
d = spu_or(a, b);
d = spu_eqv(a, b);

Более сложные операции: библиотека simdmath.

Слайд 57 Операции над векторами
Операции преобразования скалярных и векторных данных:
d

Операции над векторамиОперации преобразования скалярных и векторных данных:d = spu_insert(s, v,

= spu_insert(s, v, n);
d = spu_splats(s);
d = spu_promote(s, n);
s

= spu_extract(v, n);
Операции преобразования типов:
d = spu_convtf(a, scale);
d = spu_convts(a, scale);
d = spu_extend(a);


Слайд 58 Операции над векторами
Операции для манипулирования элементами векторов:
Сдвиг, вращение

Операции над векторамиОперации для манипулирования элементами векторов:Сдвиг, вращение элементовd = spu_rl(a,

элементов
d = spu_rl(a, count);
d = spu_sl(a, count);

Перестановка элементов векторов
d

= spu_sel(a, b, pattern);
d = spu_shuffle(a, b, pattern);


Слайд 59 void mulv (float *a, float *b, float *c,

void mulv (float *a, float *b, float *c, int n){ int

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
for (i=0; i for (k=0; k {
s = spu_splats ( a[i*n+k] );
for (j=0; j { t = spu_mul (s, bv[k*n/4+j] );
cv[i*n/4+j] = spu_add ( cv[i*n/4+j], t );
}
}
}

Пример: векторное умножение матриц


Слайд 60 Особенности векторизации вычислений
Простой пример:
for (i=0; i

Особенности векторизации вычисленийПростой пример:for (i=0; i

Слайд 61 Особенности векторизации вычислений
Операнды должны быть приведены к одному

Особенности векторизации вычисленийОперанды должны быть приведены к одному типуПример:int a[n];short int b[n];for (i=0; i

типу
Пример:
int a[n];
short int b[n];
for (i=0; i

a[i] + b[i];

Слайд 62 Особенности векторизации вычислений
Операнды должны быть выровнены друг относительно

Особенности векторизации вычисленийОперанды должны быть выровнены друг относительно друга

друга


Слайд 63 Особенности реализации скалярных вычислений
При выполнении операции над скалярными

Особенности реализации скалярных вычисленийПри выполнении операции над скалярными переменными в памяти

переменными в памяти происходит следующее:

Чтение векторов, содержащих операнды, в

регистры,
Относительное выравнивание операндов в векторах,
Выполнение операции над векторами,
Чтение вектора, содержащего результат,
Помещение результата в нужную позицию результирующего вектора,
Запись результирующего вектора в память.

Это очень долго!


Слайд 64 Оптимизация целочисленной арифметики
На SPE отсутствует 32-битное умножение.
Используйте short

Оптимизация целочисленной арифметикиНа SPE отсутствует 32-битное умножение.Используйте short int вместо int,

int вместо int, где это возможно.
short int i,k;
for (i=0;

i for (k=0; k x[i*N+k]=i + k;

Слайд 65 Оптимизация условных переходов
Устранение условных переходов





Подсказка компилятору

Оптимизация условных переходовУстранение условных переходовПодсказка компилятору

Слайд 66 План
Архитектура процессора Cell
Принципы программирования
Базовые средства программирования
Создание и компиляция

ПланАрхитектура процессора CellПринципы программированияБазовые средства программированияСоздание и компиляция простых программМеханизмы передачи

простых программ
Механизмы передачи данных и сообщений
Программирование вычислений на SPE
Библиотеки


Слайд 67 Средства программирования процессоров Cell
Средства от IBM (IBM Cell

Средства программирования процессоров CellСредства от IBM (IBM Cell SDK)Библиотека libspe 2.0Библиотеки

SDK)
Библиотека libspe 2.0
Библиотеки векторизованых операций: SIMD Math Library, MASS

Library, FFT, Game math, Image Processing, Matrix, Vector, Multi-precision math, BLAS, LAPACK, Monte-Carlo
Sync Library: атомарные операции, мьютексы, условные переменные, …
Software managed cache
Распараллеливающие векторизующие компиляторы (OpenMP): xlc, xlf
DaCS – Data Communication and Synchronization library
ALF – Accelerated Library Framework

Другие средства
BSC Cell Superscalar
Mercury Computer Systems: MultiCore Framework
RapidMind
Gedae

Слайд 68 Ссылки
IBM Cell Broadband Engine resource center, http://www.ibm.com/developerworks/power/cell/documents.html
Cell Developer's

СсылкиIBM Cell Broadband Engine resource center, http://www.ibm.com/developerworks/power/cell/documents.htmlCell Developer's Corner, http://www.power.org/resources/devcorner/cellcornerSTI Center

Corner, http://www.power.org/resources/devcorner/cellcorner
STI Center of Competence for the Cell Broadband

Engine Processor, http://sti.cc.gatech.edu
Barcelona Supercomputing Center: Cell Superscalar, www.bsc.es/cellsuperscalar
RapidMind Development Platform, www.rapidmind.net
Mercury Computer Systems: MultiCore Framework, http://www.mc.com/software/multicore_framework.aspx

  • Имя файла: programmirovanie-protsessora-cell.pptx
  • Количество просмотров: 145
  • Количество скачиваний: 0
- Предыдущая Звук А
Следующая - Глюкоза