Основные подходы к распараллеливанию

Содержание

Слайд 2

План Конвейер Матричная обработка Распараллеливание циклов

План

Конвейер
Матричная обработка
Распараллеливание циклов

Слайд 3

Конвейер Конвейерная обработка – метод распараллеливания существенно последовательных операций Процессоры соединяются

Конвейер

Конвейерная обработка – метод распараллеливания существенно последовательных операций
Процессоры соединяются так, чтобы

результат работы одного процессора поступал на вход другого (линейная топология)
Сложная операция разбивается на несколько последовательных стадий, каждая стадия выполняется своим процессором
Слайд 4

Использование конвейера Параллелизм на уровне инструкций Конвейерная обработка в процессорах Параллелизм

Использование конвейера

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

объединение потоков
Параллелизм на уровне приложений
Передача выхода одной программы на вход другой
Передача сообщений
Слайд 5

Когда конвейер эффективный Три случая С помощью конвейера необходимо решить несколько

Когда конвейер эффективный

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

помощью конвейера необходимо решить одну задачу для большой последовательности входных данных
Когда каждый процессор еще до завершения своей работы может отправить данные следующему процессору и запустить его работу
Слайд 6

Пример: конвейер первого типа Пример: Нахождение суммы нескольких значений Есть p

Пример: конвейер первого типа

Пример: Нахождение суммы нескольких значений
Есть p процессоров
У каждого

процессора есть свои данные di
Необходимо найти сумму
Слайд 7

Реализация // i – номер поточного процессора // d- дані поточного

Реализация

// i – номер поточного процессора
// d- дані поточного процесора
// sum

– проміжне значення, яке на
// останньому процесорі буде містити
// результат розв’язання задачі
recv(i-1,&sum)
sum=+d
send(i+1,sum)
Слайд 8

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

Время выполнения первой задачи

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

значение и отправляет результат дальше
Время вычисления первой суммы:
Суммарное время работы всех процессоров
Время передачи данных от первого процессора до последнего
Это время называется временем заполнения конвейера (существенно последовательная операция)
Время выполнения последовательного алгоритма
Ускорение
Для решения одной задачи конвейер не эффективен!
Слайд 9

Время решения нескольких задач Пусть задачу необходимо решить m раз для

Время решения нескольких задач

Пусть задачу необходимо решить m раз для m

наборов данных на каждом процессоре
Каждую следующую операцию процессор будет выполнять за время
Общее время решения задачи
Время решения m задач на 1 процессоре
Ускорение
Слайд 10

Время выполнения при большом количестве задач Предел коэффициента ускорения при m->∞

Время выполнения при большом количестве задач

Предел коэффициента ускорения при m->∞
При очень

большом количестве задач ускорение стремится к идеальному
При малом количестве ограничивается законом Амдала
Слайд 11

Иллюстрация

Иллюстрация

Слайд 12

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

Графическая иллюстрация

Доля последовательных вычислений зависит от количества задач

Слайд 13

Вводы относительно конвейера первого типа Эффективность конвейера всегда меньше единицы Для

Вводы относительно конвейера первого типа

Эффективность конвейера всегда меньше единицы
Для получения высоких

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

Конвейер второго типа Пример: сортировка массива значений На входе есть большой

Конвейер второго типа

Пример: сортировка массива значений
На входе есть большой массив данных
Каждый

процессор получает информацию от предыдущего и передает наибольшее из своих значений следующему процессору
В результате процессор с меньшим номером будет содержать элементы массива с меньшими значениями
Слайд 15

Программа recv(i-1,x) for(j=0;j recv(i-1,number) if(number > x) { Send(i+1,x); } else { send(i+1, number); } }

Программа

recv(i-1,x)
for(j=0;j<(n-i); j++){
recv(i-1,number)
if(number > x) {
Send(i+1,x);
} else {
send(i+1, number);
}
}

Слайд 16

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

Оценка времени

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

быстрый последовательный алгоритм требует порядка n(log2n) операций
Коэффициент ускорения
Эффективность достаточно маленькая
Слайд 17

Конвейер третьего типа Одновременная передача данных и обработка (Send-ahead) Если полученные

Конвейер третьего типа

Одновременная передача данных и обработка (Send-ahead)
Если полученные от предыдущего

процессора данные можно передать на следующий процессор, а потом начать их обработку
Слайд 18

Пример конвейера третьего типа Обратный ход метода Гаусса Матрица треугольной формы

Пример конвейера третьего типа

Обратный ход метода Гаусса
Матрица треугольной формы

Слайд 19

Решение

Решение

Слайд 20

Последовательная программа // по всем неизвестным for(i=1; i sum=0; // по

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

// по всем неизвестным
for(i=1; i<=n; i++){
sum=0;
// по всем найденным неизвестным
for(j=1;j

j++){
sum+=a[i][j]*x[j];
x[i]=(b[i]-sum)/a[i][j];
}
}
Слайд 21

Параллельная программа Процессор 1 –вычисляет x1 и передает его дальше Процессор

Параллельная программа

Процессор 1 –вычисляет x1 и передает его дальше
Процессор 2 принимает

x1 передает его дальше, вычисляет x2 и тоже передает его дальше
Процессор 3 принимает x1 , принимает x2 , передает их дальше, вычисляет x3 и передает его дальше

Вычисление выполняется параллельно с передачей данных
разные процессоры работают одновременно
Слайд 22

Параллельная программа for(j=1;j recv(p-1,x[j]) send(p+1,x[j]) } sum=0; for(j=1; i } x[i]=(b[i]-sum)/a[i][j]; send(p+1,x[i])

Параллельная программа

for(j=1;j<=i; j++){
recv(p-1,x[j])
send(p+1,x[j])
}
sum=0;
for(j=1; i<=j; j++){ sum+=a[i][j]*x[j];
} x[i]=(b[i]-sum)/a[i][j]; send(p+1,x[i])

Слайд 23

Эффективность Последовательный алгоритм O(n2) операций Параллельный алгоритм – каждый процессор порядка

Эффективность

Последовательный алгоритм O(n2) операций
Параллельный алгоритм – каждый процессор порядка O(n) операций
Ускорение

порядка O(n)
С увеличением порядка матрицы ускорение растет
Слайд 24

Выводы относительно конвейера Самый простой и дешевый вариант распараллеливания Возможность распараллеливания

Выводы относительно конвейера

Самый простой и дешевый вариант распараллеливания
Возможность распараллеливания принципиально последовательных

операций
Возможность одновременного выполнения передачи данных и их обработки (асинхронные операции)
Эффективность всегда меньше 1
Слайд 25

Матричная (векторная, параллельная) обработка Каждый процессор получает часть своей задачи и

Матричная (векторная, параллельная) обработка

Каждый процессор получает часть своей задачи и выполняет

ее параллельно с другими процессорами
В конце выполнения процессоры синхронизируются (барьер)
Слайд 26

Ускорение Ускорение при равномерной загрузке процессоров стремится к количеству процессоров Эффективность

Ускорение

Ускорение при равномерной загрузке процессоров стремится к количеству процессоров
Эффективность стремится к

единице
Процессоры большую часть времени загружены
Слайд 27

Преимущества Высокая эффективность Обмен мало влияет на скорость выполнения

Преимущества

Высокая эффективность
Обмен мало влияет на скорость выполнения

Слайд 28

Недостатки Синхронный режим работы Во время синхронизации процессоры простаивают Нет возможности

Недостатки

Синхронный режим работы
Во время синхронизации процессоры простаивают
Нет возможности выполнять обмен одновременно

с вычислениями
Требует большого количества одинаковых процессоров
Обычно дорогостоящее решение
Слайд 29

Векторно-конвейерная схема Вектор – массив элементов одинакового типа Векторные операции –

Векторно-конвейерная схема

Вектор – массив элементов одинакового типа
Векторные операции – большое количество

одинаковых операций с разными данными
x[i]+y[i]=z[i]
Конвейер второго типа может быть эффективным для таких операций
Слайд 30

сложение двух чисел Сложение чисел стандарт ANSI/IEEE [A:] сравнение порядков и

сложение двух чисел

Сложение чисел стандарт ANSI/IEEE
[A:] сравнение порядков и определение меньшего

числа
[B:] сдвиг мантиссы числа с меньшим порядком, чтобы порядки стали одинаковыми
[C:] складываются мантиссы полученных чисел
[D:] результат нормализируется
[E:] проверка на возникновение исключительных ситуаций
[F:] Округление
Слайд 31

Пример сложения x+y, где x=1234,00 y = -567,8

Пример сложения

x+y, где x=1234,00 y = -567,8

Слайд 32

Оценка времени Время выполнения одной стадии t Время сложения двух чисел

Оценка времени

Время выполнения одной стадии t
Время сложения двух чисел 6t
Сложение двух

векторов длины n выполнится за 6tn
Слайд 33

Диаграмма состояний

Диаграмма состояний

Слайд 34

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

Конвейерное выполнение

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

запускается первая стадия со вторым числом
Слайд 35

Оценка времени Время сложения двух векторов Коэффициент ускорения

Оценка времени

Время сложения двух векторов
Коэффициент ускорения

Слайд 36

Параметры векторно-конвейерной системы Размерность вектора, при котором скорость работы векторного процессора

Параметры векторно-конвейерной системы

Размерность вектора, при котором скорость работы векторного процессора становится

большей, чем скалярного (2 в данном случае)
Максимально возможный коэффициент ускорения (векторная скорость света) = 6
При размерности вектора 4096 ускорение равно 5.99268
Размерность вектора при которой производительность равна половине от максимальной (5 в данном случае)
Слайд 37

Распараллеливание циклов Циклы типа for() обычно хорошо распараллеливаются Циклы типа while

Распараллеливание циклов

Циклы типа for() обычно хорошо распараллеливаются
Циклы типа while распараллеливаются обычно

плохо
Два подхода
Развертка циклов (unroll)
Векторизация циклов
Разбивка на блоки (blocking)
Слайд 38

Разбивка на блоки for(i=0; i // тіло циклу a[i]=b[i]+1; } Цикл

Разбивка на блоки

for(i=0; i // тіло циклу
a[i]=b[i]+1;
}
Цикл разбивается на блоки
каждый блок выполняется

своим процессором с помощью параллельной схемы
Слайд 39

Пример разбивки на блоки Цикл разбивается на p циклов Каждый процессор

Пример разбивки на блоки

Цикл разбивается на p циклов
Каждый процессор выполняет свой

цикл
for(j=0;jfor(i=j; i // тіло циклу
a[i]=b[i]+1
}
}
Внутренний цикл выполняется своим процессором
Слайд 40

Эффективность При отсутствии связи между данными внутри цикла эффективность стремится к 1

Эффективность

При отсутствии связи между данными внутри цикла эффективность стремится к 1

Слайд 41

Развертка циклов Часть операций цикла можно заменить последовательностью операций и выполнить

Развертка циклов

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

помощью конвейера
for(i=0; i // тіло циклу
a[i]=b[i]+1;
a[i+1]=b[i+1]+1;
a[i+2]=b[i+2]+1;
a[i+3]=b[i+3]+1;

a[i+k-2]=b[i+k-2]+1;
a[i+k-1]=b[i+k-1]+1;
}
Ускорение почти в k раз при большом k
Слайд 42

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

Векторизация циклов

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

помощью векторных команд (mmx, sse)
for(i=0; i // a и b рассматриваются как векторы размерности k
a[начиная с i]=b[начиная с i]+1;
}
Ускорение почти в k раз
Слайд 43

Работа с большими матрицами В прикладных задачах часто возникает проблема работы

Работа с большими матрицами

В прикладных задачах часто возникает проблема работы с

матрицами большого размера (100000х100000 )
Для размещения такой матрицы чисел типа double потребуется 76 ГБайт
В оперативную память одной машины такая матрица не влезет
Используются блочные методы
Слайд 44

Блочные методы Матрица разбивается на части – блоки (rxq блоков) Каждый

Блочные методы

Матрица разбивается на части – блоки (rxq блоков)
Каждый блок

хранится в памяти одного узла массивно параллельной системы (кластера)
Говорят: «На матрицу накладывается процессорная сетка»
Каждому узлу сетки (блоку матрицы) соответствует процессор с координатами (i,j)
Для выполнения операций с матрицами процессоры должны обмениваться данными между собой (топология решетка)
Слайд 45

Математика блочных операций Математически операции с блочными матрицами выполняются так же,

Математика блочных операций

Математически операции с блочными матрицами выполняются так же, как

и операции с обычными матрицами, но умножение чисел заменяется умножением матриц, сложение…
Слайд 46

Распараллеливание блочных операций Вычисление каждого блока результата может выполняться параллельно с

Распараллеливание блочных операций

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

других блоков результата
Эффективность таких операций увеличивается при увеличении размерности матриц
Количество операций обработки данных порядка O(m3)
Время передачи данных O(m2)
Слайд 47

Геометрическое распараллеливание Процессоры, которые интенсивно взаимодействуют между собой должны находится «ближе»

Геометрическое распараллеливание

Процессоры, которые интенсивно взаимодействуют между собой должны находится «ближе»
например

располагаться на одном узле многопроцессорной машины