• Like
якобовский - введение в параллельное программирование (1)
Upcoming SlideShare
Loading in...5
×

якобовский - введение в параллельное программирование (1)

  • 1,441 views
Uploaded on

 

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,441
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Человек ненасытен. Какой бы высокой производительностью ни обладала система с одним процессором, две такие системы в сумме могут выполнять в единицу времени больший объём вычислений.
  • В рамках предлагаемого курса будут рассмотрены возможности создания параллельных алгоритмов только для систем первых двух видов. Будут рассмотрены возможности построения алгоритмов описываемых в терминах множества взаимодействующих последовательных процессов, если речь идет о системах с распределенной памятью, или потоков, если о системах с общей памятью. Такая постановка сильно сужает круг рассматриваемых алгоритмов, но не настолько, что бы их изучение потеряло смысл. Остается более чем достаточно возможностей построения быстрых алгоритмов и проблем, осложняющих жизнь. Можно условно обозначить некоторые возможности, потенциально предоставляемые многопроцессорными системами для решения некоторой Задачи: Сокращение времени решения Задачи; - Возможность решения задачи с большей точностью; - Возможность решения Задачи в уточнённой, более подробной постановке

Transcript

  • 1. Курс : Введение в параллельные алгоритмы Якобовский Михаил Владимирович д.ф.-м.н., зав. сектором , Институт математического моделирования РАН , Москва
  • 2. Содержание
    • Введение
    • Постановка проблемы
    • Основные понятия
    • Базовые методы
    • Сумма ряда
    • Параллельная сортировка
    • Выводы
    • Контрольные вопросы
    • Литература
    из N
  • 3. Постановка проблемы
    • Вычислительная мощность суперкомпьютеров быстро растет
    • Примеров успешного полноценного использования суперкомпьютеров мало
    • В среднем вычислительная мощность суперкомпьютеров используется не более, чем на несколько процентов
        • Необходима разработка алгоритмической и программной базы, создание которой возможно исключительно на основе тесного взаимодействия специалистов прикладных областей и специалистов в области создания параллельных приложений
    из N
  • 4. Введение
    • Курс знакомит с некоторыми принципами разработки параллельных алгоритмов. Из всего многообразия причин, побуждающих к использованию суперкомпьютеров, в рамках курса рассматриваются только две:
      • сокращение времени решения прикладных задач
      • обеспечение возможности решения больших задач за заданное время
  • 5. Кризис эффективности
    • Вычислительная мощность суперкомпьютеров велика, но:
      • Она образована суммой мощностей множества исполнительных устройств
    • На протяжении ряда лет увеличение производительность компьютера автоматически означало снижение времени работы существующих программ. Теперь это не так:
      • Последовательные программы не могут работать на многопроцессорных системах быстрее , чем на последовательных
  • 6. Кризис эффективности
    • Время вычислительных систем, обладающих существенной производительностью и имеющих в своем составе только один процессор прошло
    • Автоматическое преобразование последовательных программ в параллельные невозможно
    • Необходимо знать существующие и развивать новые методы решения задач на многопроцессорных системах
  • 7. Уточнение круга рассматриваемых систем
    • Системы на основе объединенных сетью типовых вычислительных узлов – системы с распределенной оперативной памятью
    • Системы с доступом всех процессоров к общей оперативной памяти
    • Графические ускорители
    • ПЛИС
    • Нейрокомпьютеры
    • Другие …
  • 8. Многопроцессорные системы с распределенной памятью
  • 9. Многопроцессорные системы с общей памятью
  • 10. Гибридные вычислительные системы сеть
  • 11. Уточнение круга рассматриваемых алгоритмов
    • Слабо взаимодействующие последовательные процессы
  • 12.
    • При запуске указываем число требуемых процессоров Np и название программы
    • На выделенных для расчета узлах запускается Np копий указанной программы
      • Например, на двух узлах запущены три копии программы. Копия программы с номером 1 не имеет непосредственного доступа к оперативной памяти копий 0 и 2:
    • Каждая копия программы получает два значения:
      • Np
      • rank из диапазона [ 0 … Np-1]
    • Любые две копии программы могут непосредственно обмениваться данными с помощью функций передачи сообщений
    Модель программы на распределенной памяти 0 1 2
  • 13.
    • Работа начинается с запуска одной программы
    • При необходимости программа порождает новые процессы, эти процессы:
      • Обладают собственными локальными переменными
      • Имеют доступ к общим глобальным переменным
      • int a_global; main нить1 нить2
      • main()
      • {
      • int b1_local; запуск нити1
      • } запуск нити2
      • fun()
      • {
      • int b2_local; ожидание
      • } окончания работы
    Модель программы на общей памяти
  • 14. Свойства канала передачи данных T(n)=n * T байта + T латентности Число передаваемых байт Infiniband
  • 15.
    • Синхронный метод
      • Send( адрес данных , размер , номер процессора)
      • Recv( адрес данных , размер , номер процессора)
    • Асинхронные методы
      • Небуферизованный
      • ASend( адрес данных , размер , номер процессора)
      • ARecv( адрес данных , размер , номер процессора)
      • ASync
      • Буферизованный
      • ABSend( адрес данных , размер , номер процессора)
    Методы передачи данных
  • 16.
    • A=3
    • Send(&A)
    • A=5
    Синхронный
    • B=4
    • Recv(&B)
    • Print(B)
    Send Recv Print(B) A=5 B=4 A=3 Результат 3
  • 17.
    • A=3
    • А Send(&A)
    • A=5
    Асинхронные
    • B=4
    • А Recv(&B)
    • Print(B)
    Send ASend Recv ARecv Print(B) A=5 B=4 A=3 Результат 3 ? 4 ? 5
  • 18.
    • A=3
    • А Send(&A)
    • Async()
    • A=5
    Асинхронные
    • B=4
    • А Recv(&B)
    • Print(B)
    ASync Send ASend Recv ARecv Print(B) A=5 B=4 A=3 Результат 3 ? 4
  • 19.
    • A=3
    • А Send(&A)
    • Async()
    • A=5
    Асинхронные
    • B=4
    • А Recv(&B)
    • Async()
    • Print(B)
    • Результат
    • 3
    ASync Send ASend ASync Recv ARecv Print(B) A=5 A=3 B=4
  • 20.
    • A=3
    • А BSend(&A)
    • A=5
    Асинхронные буферизованные
    • B=4
    • А Recv(&B)
    • Async()
    • Print(B)
    • Результат
    • 3
    Send(&buf) ABSend ASync Recv ARecv Print(B) A=5 buf=A A=3 B=4
  • 21.
    • Целочисленная неотрицательная переменная
    • Две атомарные операции, не считая инициализации
    • V(S)
      • Увеличивает значение S на 1
    • P(S)
      • Если S положительно, уменьшает S на 1
      • Иначе ждет, пока S не станет больше 0
    Семафор
    • Языки програмирования. Редактор Ф.Женюи. Перевод с англ В.П.Кузнецова. Под ред. В.М.Курочкина. М:."Мир", 1972 Э. Дейкстра. Взаимодействие последовательных процессов. http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/ewd123/index.html
  • 22.
    • ускорение
    • параллельного
    • алгоритма
    • S(p)=T ( 1 ) /T(p)
    Ускорение и эффективность параллельных алгоритмов Ускорение параллельного алгоритма относительно наилучшего последовательного S * (p)=T * /T(p) E * (p)=S * (p)/p эффективность использования процессорной мощности E(p)=S(p)/p
  • 23.
    • Да, если:
      • Сравниваем с плохим последовательным алгоритмом
      • Аппаратные особенности вычислительной системы косвенно влияют на эффективную скорость обработки данных
    Может ли быть S ( p ) >p ?
  • 24.
    • Да
      • Если первый алгоритм позволяет использовать больше процессоров, чем второй.
    • Самый эффективный алгоритм – использующий один (1) процессор.
      • Его эффективность по определению равна 100%, но он не всегда самый быстрый.
    Может ли неэффективный алгоритм работать быстрее эффективного?
  • 25.
    • Все элементарные операции (+ - * / ) выполняются за время  с
    • Все операции выполняются точно, результат не зависит от порядка их выполнения
    Определить сумму конечного ряда
  • 26.
    • S=1;
    • a=1;
    • for(i=1;i<= n;i ++ )
    • {
    • a=a*x/i;
    • S=S+a;
    • }
    Последовательный алгоритм T 1 = 3n  с
  • 27. Параллельный алгоритм
    • Вычислить для всех i =1,…,n : x i
    • Вычислить для всех i =1,…,n : i!
    • Вычислить для всех i =1,…,n : a i =
    • Вычислить сумму всех членов a i
  • 28.
    • Для вычисления x i воспользуемся методом бинарного умножения
      • x
      • 1 x 2
      • 2 x 3 x 4
      • 3 x 5 x 6 x 7 x 8
      • 4 x 9 x 10 x 11 x 12 x 13 x 14 x 15 x 16
    x i
  • 29.
    • Для вычисления i! воспользуемся
    • аналогичным методом
      • 4 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16=16!
      • 3 1  2  3  4  5  6  7  8 9  10  11  12  13  14  15  16
      • 2 1  2  3  4 5  6  7  8 9  10  11  12 13  14  15  16
      • 1 1  2 3  4 5  6 7  8 9  10 11  12 13  14 15  16
    16 !
  • 30.
    • Для вычисления i! воспользуемся
    • аналогичным методом
      • 4 1  2  3  4  5  6  7  8  9  10  11  12 =12!
      • 3 1  2  3  4  5  6  7  8 9  10  11  12  13  14  15  16
      • 2 1  2  3  4 5  6  7  8 9  10  11  12 13  14  15  16
      • 1 1  2 3  4 5  6 7  8 9  10 11  12 13  14 15  16
    12 !
  • 31.
    • Для вычисления i! воспользуемся
    • аналогичным методом
      • 4 1  2  3  4  5  6  7  8  9  10  11  12  13  14=14!
      • 3 1  2  3  4  5  6  7  8 9  10  11  12  13  14
      • 2 1  2  3  4 5  6  7  8 9  10  11  12
      • 1 1  2 3  4 5  6 7  8 9  10 11  12 13  14 15  16
    14 !
  • 32. Параллельный алгоритм
    • Вычислить все x i :
    • Вычислить все i! :
    • Вычислить все a i : - надо n процессоров
    • Вычислить сумму всех a i :
    2
  • 33.
    • p=n
    Ускорение и эффективность при p=n 2 1.5 1.5
  • 34. Методы построения параллельных алгоритмов
    • … если для нас представляют интерес реально работающие системы, то требуется убедиться, (и убедить всех сомневающихся) в корректности наших построений
    • … системе часто придется работать в невоспроизводимых обстоятельствах, и мы едва ли можем ожидать сколько-нибудь серьезной помощи от тестов
    • Dijkstra E.W.
    • 1966
  • 35.
    • Методы построения параллельных алгоритмов и их свойства:
      • Статическая балансировка
        • метод сдваивания
        • геометрический параллелизм
        • конвейерный параллелизм
      • Динамическая балансировка
        • коллективное решение
        • диффузная балансировка загрузки
    Огласите весь список, пожалуйста! «Напарник», Леонид Гайдай
  • 36.
    • Обладает запасом внутреннего параллелизма
      • Есть возможность одновременного выполнения операций
    • Допускает возможность равномерного распределения вычислительных операций между процессорами
    • Обладает низким уровнем накладных расходов
    Хороший параллельный алгоритм большим большим числом
  • 37.
    • Операции, отсутствующие в наилучшем последовательном алгоритме:
      • Синхронизация
      • Обмен данными
      • Дублирование операций
      • Новые операции
    Накладные расходы
  • 38.
    • Потери времени на передачу данных между процессами
      • Процессор 1 Процессор 2
    Обмен данными
  • 39.
    • Потери времени на ожидание долго выполняющихся процессов
      • Процессор 1 Процессор 2 Процессор 3
    Синхронизация
  • 40.
    • S=0;
    • For(i=0;i<n1;i++)
    • S+=a[i];
    • Send(S)
    Дублирование операций S=0; For(i=n1;i<n;i++) S+=a[i]; Send(S) Recv(S1) Recv(S2) S=S1+S2
  • 41. Новые операции F=1; for(i=2;i <= n;i ++ ) F*=i; Вычисление всех факториалов до 8! включительно Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4 1 1  2 3  4 5  6 7  8 2 12  3 12  34 56  7 56  78 3 1234  5 1234  56 1234  567 1234  5678
  • 42. Новые операции 1 2 4 3 8 5 9 11 6 7 12 10 Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4 1 1  2 3  4 5  6 7  8 2 12  3 12  34 56  7 56  78 3 1234  5 1234  56 1234  567 1234  5678 Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4 1 2! 3  4 5  6 7  8 2 3! 4! 56  7 56  78 3 5! 6! 7! 8!
  • 43.
    • Каскадная схема
    • Модифицированная каскадная схема
    Метод сдваивания
  • 44. Стена Фокса n – ширина стены к – высота стены
  • 45. Одномерная разностная схема для уравнения диффузии
  • 46. Решение одномерного уравнения на 9 моментов времени
  • 47. Метод геометрического параллелизма
  • 48. А почему?
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
      • if(rank<p-1) Recv(rank +1 , место готово? )
    • }
  • 49. ?
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
      • if(rank<p-1) Recv(rank +1 , место готово? )
    • }
    0 1 2 3 4 5  =<   >= =<   >= =<   >= =<   >= =<  >=
  • 50. ?
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
      • if(rank<p-1) Recv(rank +1 , место готово? )
    • }
    0 1 2 3 4 5  =<   >= =<   >= =<   >= =<   >= =<  >=
  • 51. ?
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank<p-1) Recv(rank +1 , место готово? )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
    • }
    0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 52. ? 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 53. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 54. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 55. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 56. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 57. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 58. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 59. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 60. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 61. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 62. ! 0 1 2 3 4 5 =<   =<  >=  =<  >=  =<  >=  =<  >=  >=
  • 63. ! 0 1 2 3 4 5 =<   >= =<  =<   >=  >= =<  =<   >=  >=
  • 64. !
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • if(rank%2)
      • {
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
      • if(rank<p-1) Recv(rank +1 , место готово? )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • }
      • else
      • {
      • if(rank<p-1) Recv(rank +1 , место готово? )
      • if(rank<p-1) Send(rank+1, кирпич уложен! )
      • if(rank>0) Send(rank-1, кирпич уложен! )
      • if(rank>0) Recv(rank-1, место готово? )
      • }
    • }
  • 65. Метод коллективного решения (укладка паркета)
  • 66. Метод коллективного решения (укладка паркета) Число порций Обработка порции Обмен данными r – размер порции
  • 67. r – размер порции Как правильно? или Зависит ли время передачи данных от размера порции (задания)?
  • 68.
    • Send( a i ); Send( a i+1 ); Recv( s );
    Вычисление определенного интеграла a i a i +1
  • 69. Метод конвейерного параллелизма ? Время выполнения на p процессорах
  • 70. Метод конвейерного параллелизма
  • 71.
    • При статической балансировке возможен дисбаланс загрузки процессоров
    • Причины дисбаланса
      • Разные процессоры
      • Внешнее воздействие
      • Разная вычислительная сложность заданий
    • Результат дисбаланса
      • Эффективная производительность определяется самым медленным процессором
    Диффузная балансировка
  • 72. Стена Фокса Какой объем работ забрать у среднего процессора и кому его передать?
  • 73. Метод геометрического параллелизма
  • 74. Метод геометрического параллелизма
  • 75. Диффузная балансировка загрузки
  • 76. Диффузная балансировка загрузки
  • 77. Диффузная балансировка загрузки
  • 78. Статическое распределение
  • 79. Постановка задачи диффузной балансировки
    • Дано:
    • Количество точек – N
    • Количество процессоров – p
    • Процессор i обработал n i точек за время t i
    • Требуется:
    • Найти числа точек n’ i , которое следует обработать процессорам на следующем шаге
    • Определить сколько точек каждый из процессоров должен передать соседним процессорам
  • 80. Планирование нагрузки
  • 81.
    • Статическая и динамическая балансировка загрузки процессоров
      • Статическая балансировка
        • метод сдваивания
        • геометрический параллелизм
        • конвейерный параллелизм
      • Динамическая балансировка
        • коллективное решение
        • диффузная балансировка
    Балансировка и алгоритмы
  • 82. Крылья, ноги и хвосты. Гостелерадио, «Экран», 1985.
  • 83. Общая схема вычислений
    • K = 1 000 000;
    • шаг_вывода = 1 0 0 0 0;
    • for( шаг =0; шаг <k; шаг ++)
    • {
      • for( кирпич =rank*n/p; кирпич <(rank+1)*n/p; кирпич ++)
      • Уложить ( кирпич )
      • Обменяться данными о точках, прилегающих к внутренним границам()
      • if( шаг % шаг_вывода == 0 )
      • {
      • Вывести промежуточные результаты()
      • }
    • }
  • 84.
    • r=0;
    • for(i=0;i<=n;i ++ )
    • {
    • d=a[i] + b[i] + r;
    • c[i]=d % 10;
    • r=d / 10;
    • }
    • c[i]=r;
    Определение суммы двух многоразрядных чисел T 1 = 4n  с
  • 85. «Параллельный» алгоритм Последовательное распространение разряда переноса на четырёх процессорах 99 99 99 99 1 1 00 1 00 1 00 100 100 00 00 00
  • 86. ? Параллельный алгоритм « »
  • 87.
    • Спекулятивное вычисление двух сумм
    Спекулятивный алгоритм 99 99 99 99 1 99 99 99 100 +0 100 1 00 1 00 +1 100 00 00 00
  • 88.
    • r1=0;
    • r2=1;
    • for(i=0;i<=n1;i ++ )
    • {
    • d1=a[i] + b[i] + r1;
    • c1[i]=d1 % 10;
    • r1=d1 / 10;
    • d2=a[i] + b[i] + r2;
    • c2[i]=d2 % 10;
    • r2=d2 / 10;
    • }
    • Recv(&r)
    • if(r)c=c1;
    • else c=c2;
    Спекулятивный алгоритм T’= 8n 1  с
  • 89.
    • Спекулятивное вычисление двух сумм
    Спекулятивный алгоритм 99 99 99 99 1 99 99 99 100 +0 100 1 00 1 00 +1 100 00 00 00
  • 90.
      • Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
      • Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
    Две задачи сортировки массива чисел
  • 91.
    • Расположить N элементов массива a таким образом, чтобы для любого выполнялось неравенство
    Задача А
  • 92. Пузырьковая сортировка
  • 93. Сортировка сдваиванием
  • 94. Сортировка сдваиванием
  • 95.
  • 96. Вывод
    • Эффективность больше 100%, поскольку использован неудачный медленный последовательный алгоритм.
  • 97.
    • Пусть массив можно разместить на p процессорах.
    • Пусть на процессоре с номером rank размещено элементов массива .
    • Расположить N элементов массивов таким образом, чтобы:
      • для любых и выполнялось неравенство
      • для любого
      • выполнялось неравенство
    Задача B
  • 98.
    • Части массива хранятся на нескольких процессорах
      • Каждая часть массива должна быть упорядочена
      • На процессорах с б о льшими номерами должны быть размещены элементы массива с б о льшими значениями
        • Правильно
        • Ошибка
        • Ошибка
    Задача B
  • 99.
    • Будем рассматривать только процесс упорядочивания элементов:
      • Перед началом сортировки на каждом из процессоров уже есть часть элементов массива
      • После окончания сортировки на каждом из процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
    Задача B
  • 100. Что необходимо превзойти
    • Хороший последовательный алгоритм сортирует за время или
    • Сортировка будет выполнена всего за 20 просмотров массива.
    • Начальное распределение массива может занимать сравнимое время.
  • 101.
      • Упорядочивание фрагментов массива на каждом из процессоров ?
      • Перераспределение элементов массива между процессорами
    Этапы сортировки
  • 102.
    • ?
    Конструирование наилучшего последовательного алгоритма
  • 103. Сравнение алгоритмов сортировки Алгоритм сортировки Среднее число операций М аксимальное число операций Быстрая ( qsort ) 11.7 n log 2 n O(n 2 ) Пирамидальная ( hsort ) 16 n log 2 n 18 n log 2 n + 38 n Слияние списков ( lsort ) 10 n log 2 n O(n log 2 n)
  • 104. Пусть f(N) <C∙ g(N) , ну и что ?
    • Где тут наши 2 Гигобайта оперативной памяти???
    f(N) f(N) g(N) g(N)
  • 105. Константа времени сортировки T= 10 -9 K N log 2 (N)
  • 106. Пирамидальная сортировка: константы времени и числа операций T= 10 -9 K n log 2 (n) M= 10 -9 R n log 2 (n)
    • Время работы алгоритма определяется:
    • Числом операций сравнения и перестановки элементов массива
    • Временем обращения к оперативной памяти (чтения и записи элементов массива)
  • 107. Константа времени сортировки наилучшего алгоритма
  • 108.
    • сортировать ( массив mas, число элементов n )
    • {
    • если (n > 1)
    • {
    • // сортировка первой половины массива
    • сортировать ( mas, n/2);
    • // сортировка второй половины массива
    • сортировать ( mas+n/2, n-n/2);
    • // слияние отсортированных половинок массива
    • слияние ( mas , n /2, mas + n /2, n - n /2);
    • }
    • }
    Изящный алгоритм сортировки массива слиянием
  • 109.
    • Dsort (intsort *array, int n)
    • {
    • a=array; // сортируемый массив
    • b=array_second; // вспомогательный массив
    • for(i=1;i<n;i= i *2) // размер объединяемых фрагментов
    • {
    • for(j=0;j<n;j= j +2*i) // начало первого из объединяемых
    • // фрагментов
    • {
    • r=j+i; // начало второго из объединяемых фрагментов
    • n1=max(min(i,n-j), 0);
    • n2=max(min(i,n-r), 0);
    • // слияние упорядоченных фрагментов
            • b = a[r…r+n1] & a[j…j+n2]
    • }
    • c=a;a=b;b=c;
    • }
    Алгоритм сортировки массива слиянием
  • 110. Слияние упорядоченных фрагментов
    • for(ia=0,ib=0,k=0;k<n1+n2;k++)
    • {
    • if(ia>=n1) b[j+k]=a[r+ib++];
    • else
    • if(ib>=n2) b[j+k]=a[j+ia++];
    • else
    • if(a[j+ia]<a[r+ib]) b[j+k]=a[j+ia++];
    • else b[j+k]=a[r+ib++];
    • }
  • 111.
    • Требуется 2 + 4 + 8 + 16 тактов (8 процессоров)
    Сортировка слиянием методом сдваивания Для просмотра анимации возможно требуется установить свободно распространяемый Swiff Point Player : http://www.globfx.com/products/swfpoint/
  • 112.
    • Требуется 8 тактов вместо 16-ти
    Слияние двух массивов двумя процессорами
  • 113. Ускорение при методе сдваивания
    • k 1 – сортировка, k 2 – передача данных
  • 114.  
  • 115. До 10 ^ 5 пирамидальная, после - слияние
  • 116. До 10 ^ 5 пирамидальная после – слияние упорядоченных фрагментов
  • 117.  
  • 118.  
  • 119.
      • Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
      • Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
    Две задачи сортировки массива чисел
  • 120.
    • Части массива хранятся на нескольких процессорах
      • Каждая часть массива должна быть упорядочена
      • На процессорах с б о льшими номерами должны быть размещены элементы массива с б о льшими значениями
        • Правильно
        • Ошибка
        • Ошибка
    Задача B
  • 121.
    • Будем рассматривать только процесс упорядочивания элементов:
      • Перед началом сортировки на каждом из процессоров уже есть часть элементов массива
      • После окончания сортировки на каждом из процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
    Задача B
  • 122.
      • Упорядочивание фрагментов массива на каждом из процессоров
      • Перераспределение элементов массива между процессорами с сохранением упорядоченности массива на каждом отдельном процессоре
    Этапы сортировки
  • 123.
    • ?
    Стратегия перераспределения данных между процессорами
  • 124. Сеть сортировки (пузырёк) n= 6 s = 2n-3=9
  • 125. Пузырьковая сортировка
  • 126. Сеть сортировки (пузырёк) n= 6 s = 2n-3=9
  • 127. Сеть сортировки четно-нечетные перестановки n= 6 s = n= 6
  • 128. Минимальная сеть сортировки n= 6 s=5
  • 129. Минимальные сети сортировки
    • [ Дональд Э.Кнут ]
    n=6 s=5 n=10 s=7 n=9 s=8 n=12 s=8 n=16 s=9
  • 130. Обменная сортировка со слиянием 8ми элементов
  • 131. Сортировка блоков ОДИНАКОВОГО РАЗМЕРА
  • 132. Сравнение алгоритмов сортировки Алгоритм сортировки Среднее число операций Пирамидальная O( n log 2 n) Слияние O( n log 2 n) Параллельная сортировка методом сдваивани я. Объём данных ограничен оперативной памятью вычислительного узла Параллельная четно-нечетная сортировка Объём данных ограничен общей оперативной памятью Параллельная «обменная сортировка со слиянием»
  • 133. Слияние упорядоченных фрагментов for(ia=0,ib=0,k=0; k<n ;k++) { if(ia>=n1) c[k]=b[ib++]; else if(ib>=n2) c[k]=a[ia++]; else if(a[ia]<b[ib]) c[k]=a[ia++]; else c[k]=b[ib++]; } // n – число элементов в каждом из массивов a,b rank1 , a[n] rank2, b[n]
  • 134. Слияние упорядоченных фрагментов Join(int *a, int *b, int *c, int n,rank1,rank2) { if(rank==rank1) for(ia=0,ib=0,k=0;k<n;) { if(a[ia]<b[ib]) c[k++]=a[ia++]; else c[k++]=b[ib++]; } else for(ia=n-1,ib=n-1,k=n-1;k>=0;) { if(a[ia]>b[ib]) c[k--]=a[ia--]; else c[k--]=b[ib--]; } } rank1 rank2
  • 135.
    • // взаимодействие процессоров rank и rankC
    • int *a,*b,*c,*tmp;
    • ASend(a,n,rankC);
    • ARecv(b,n,rankC);
    • ASync();
    • Join(a,b,c,n,min(rank,rankC),max(rank,rankC));
    • tmp=a;
    • a=c;
    • c=tmp;
    Реализация компаратора слияния
  • 136. n=10 8 P T, сек E S E max S max s p 1 83.51 100.00% 1.00 100% 1.0 0 2 46.40 90.00% 1.80 100% 2.0 1 3 35.9 3 77.48% 2.32 95% 2.8 3 4 29.6 8 70.35% 2.81 96% 3.9 3 5 24.4 5 68.33% 3.42 91% 4.5 5 6 22.16 62.80% 3.77 92% 5.5 5 7 21.82 54.67% 3.83 89% 6.2 6 8 19.95 52.32% 4.19 90% 7.2 6 16 12.36 42.22% 6.75 82% 13.1 10 27 9.3 2 33.20% 8.97 74% 20.0 14 32 7.85 33.24% 10.64 73% 23.3 15 48 6.45 26.97% 12.95 66% 31.9 19 64 4.9 2 26.53% 16.98 64% 40.9 21 128 3.19 20.47% 26.20 56% 71.5 28 192 2.52 17.29% 33.19 51% 98.2 33 256 1.99 16.41% 42.02 49% 124.6 36 384 1.63 13.33% 51.20 49% 187.0 41 512 1.29 12.64% 64.74 42% 217.4 45 640 1.21 10.78% 69.02 41% 264.7 47
  • 137.
    • Рассмотрены основные методы построения параллельных алгоритмов
    • Показано, как за счет использования неэффективных, но обладающих большим внутренним параллелизмом алгоритмов можно сокращать время решения задачи на многопроцессорной системе
    • Рассмотрен ряд параллельных алгоритмов сортировки массивов и выполнено сравнение с «наилучшим» последовательным алгоритмом
    Заключение
  • 138.
    • Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.
    • Грегори Р. Эндрюс - Основы многопоточного, параллельного и распределенного программирования. &quot;Вильямс &quot;, 2003
    • Языки программирования. Редактор Ф.Женюи. Перевод с англ. В.П.Кузнецова. Под ред. В.М.Курочкина. М:.&quot;Мир&quot;, 1972 Э. Дейкстра. Взаимодействие последовательных процессов. http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/ewd123/index.html
    • Дональд Э.Кнут . Искусство программирования, т.3. Сортировка и поиск 2-е изд.: Пер. с английского – М.: Издательский дом «Вильямс», 2001.
    • Седжвик Роберт . Фундаментальные алгоритмы на С++. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ./Роберт Седжвик. - СПб.: ООО &quot;ДиаСофтЮП&quot;, 2002.-688с.
    • Якобовский М.В. Параллельные алгоритмы сортировки больших объемов данных . Москва, 2008. http://lira.imamod.ru/FondProgramm/Sort/ParallelSort.pdf
    Список литературы
  • 139. Литература…
    • Учебные курсы Интернет Университета Информационных технологий
    • Гергель В.П. Теория и практика параллельных вычислений. — http://www.intuit.ru/department/calculate/paralltp/
    • Лекции в форме видео-конференций
    • Гергель В.П. Основы параллельных вычислений. — http://www.hpcu.ru/courses/15/
    • Немнюгин С.А. Основы параллельного программирования с использованием MPI . — http://www.hpcu.ru/courses/14/
    • Крюков В.А., Бахтин В.А. Параллельное программирование с OpenMP . — http://www.hpcu.ru/courses/16/
    • Дополнительные учебные курсы:
    • Воеводин В.В. Вычислительная математика и структура алгоритмов. — http://www.intuit.ru/department/calculate/calcalgo/
  • 140. Литература
    • Ресурсы Internet
    • http://parallel.ru
    • http://top500.org
    • http://supercomputers.ru
  • 141.
    • Якобовский М.В. , д.ф.-м.н., зав. сектором «Программного обеспечения многопроцессорных систем и вычислительных сетей» Института математического моделирования Российской академии наук
    • e-mail: [email_address]
    • web: http://lira.imamod.ru
    Авторы